screenshot.sh 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #!/bin/bash
  2. # Script to capture screenshots (Wayland)
  3. # Directory for screenshots
  4. SCREENSHOT_DIR="$HOME/pix/Screenshots"
  5. mkdir -p "$SCREENSHOT_DIR"
  6. # Filename format
  7. TIMESTAMP=$(date +"%Y%m%d-%H%M%S")
  8. FILENAME="Screenshot_${TIMESTAMP}_hyprland.jpg"
  9. FILE_PATH="${SCREENSHOT_DIR}/${FILENAME}"
  10. # Capture based on argument
  11. case "$1" in
  12. area)
  13. # Select an area using slurp
  14. grim -t jpeg -g "$(slurp)" "$FILE_PATH"
  15. ;;
  16. monitor)
  17. # Active monitor
  18. MONITOR=$(hyprctl activeworkspace -j | jq -r '.monitor')
  19. grim -t jpeg -o "$MONITOR" "$FILE_PATH"
  20. ;;
  21. window)
  22. # Active window
  23. WINDOW_DATA=$(hyprctl activewindow -j)
  24. if [ "$(echo "$WINDOW_DATA" | jq -r '.address')" == "null" ]; then
  25. notify-send "Screenshot failed" "No active window found" -u low
  26. exit 1
  27. fi
  28. WINDOW_AT=$(echo "$WINDOW_DATA" | jq -r '.at | join(",")')
  29. WINDOW_SIZE=$(echo "$WINDOW_DATA" | jq -r '.size | join("x")')
  30. grim -t jpeg -g "${WINDOW_AT} ${WINDOW_SIZE}" "$FILE_PATH"
  31. ;;
  32. *)
  33. echo "Usage: $0 {area|monitor|window}"
  34. exit 1
  35. ;;
  36. esac
  37. # Check if file was created and copy to clipboard
  38. if [ -f "$FILE_PATH" ]; then
  39. wl-copy -t image/jpeg <"$FILE_PATH"
  40. notify-send "Screenshot saved" "$FILENAME" -i "$FILE_PATH"
  41. fi