Files
hyprland/config/hypr/scripts/ScreenShot.sh
T
2024-07-30 10:19:03 +05:45

74 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
# Screenshots scripts
iDIR="$HOME/dotfiles/hypr/assets"
notify_cmd_shot="notify-send -h string:x-canonical-private-synchronous:shot-notify -u low -i ${iDIR}/screenshot.svg"
dir="$(xdg-user-dir PICTURES)/Screenshots"
[[ ! -d "$dir" ]] && mkdir -p "$dir"
notify_view() {
local msg="Screenshot Saved."
if [[ "$1" == "active" && ! -e "$active_window_path" ]]; then
msg="Screenshot NOT Saved."
fi
$notify_cmd_shot "$msg"
}
countdown() {
for ((sec=$1; sec>0; sec--)); do
notify-send -h string:x-canonical-private-synchronous:shot-notify -t 1000 -i "$iDIR/timer.png" "Taking shot in: $sec"
sleep 1
done
}
take_shot() {
local time=$(date "+%d-%b_%H-%M-%S")
local file="Screenshot_${time}_${RANDOM}.png"
cd "$dir" && grim - | tee "$file" | wl-copy
sleep 2
notify_view "$1"
}
shot_timer() {
local time=$(date "+%d-%b_%H-%M-%S")
local file="Screenshot_${time}_${RANDOM}.png"
countdown "$1"
sleep 1
take_shot "$2"
}
shotarea() {
local time=$(date "+%d-%b_%H-%M-%S")
local tmpfile=$(mktemp)
local area=$(slurp)
if [[ -z "$area" ]]; then
notify-send -u low -i "$iDIR/cancel.svg" 'No area selected'
rm "$tmpfile"
return
fi
grim -g "$area" - > "$tmpfile" && [[ -s "$tmpfile" ]] && {
wl-copy < "$tmpfile"
mv "$tmpfile" "$dir/Screenshot_${time}_${RANDOM}.png"
notify_view
}
rm "$tmpfile"
}
shotactive() {
local time=$(date "+%d-%b_%H-%M-%S")
local active_window_path="${dir}/Screenshot_${time}_$(hyprctl -j activewindow | jq -r '.class').png"
hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - "$active_window_path"
sleep 1
notify_view "active"
}
case "$1" in
--now) take_shot ;;
--in5) shot_timer 5 ;;
--in10) shot_timer 10 ;;
--area) shotarea ;;
--active) shotactive ;;
*) echo "Available Options: --now --in5 --in10 --area --active" ;;
esac