NixOS-Config/modules/home/wms/sway/programs/swayshot/default.nix

47 lines
1.5 KiB
Nix
Raw Normal View History

2024-10-15 02:40:43 -04:00
{ pkgs, config, ... }:
2024-10-09 03:36:08 -04:00
{
home.packages = with pkgs; [
(pkgs.writeScriptBin "swayshot" ''
2024-08-24 22:16:51 -04:00
# Swappy
handle_swappy() {
# Create an imv window to act as a static screen
2024-10-01 18:18:26 -04:00
grim -t jpeg -q 90 - | imv -w "GlobalShot" - & imv_pid=$!
2024-08-24 22:16:51 -04:00
# Capture the screenshot of the selected area and save to a temporary file
selected_area=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"'\
2024-10-15 02:40:43 -04:00
| XCURSOR_SIZE=40 slurp -w ${config.look.border.string} -c ${config.look.colors.prime} -B 00000066 -b 00000099)
2024-08-24 22:16:51 -04:00
temp_file=$(mktemp -u).png
grim -g "$selected_area" "$temp_file"
kill $imv_pid
# Copy the screenshot to the clipboard and clear the temp
2024-08-24 22:16:51 -04:00
swappy -f - < "$temp_file"
rm "$temp_file"
}
2024-10-01 18:18:26 -04:00
# Screen
handle_screen() {
2024-08-24 22:16:51 -04:00
temp_file=$(mktemp -u).png
grim -o $(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name') "$temp_file"
2024-08-24 22:16:51 -04:00
# Check if the screenshot was successfully taken
if [ $? -eq 0 ]; then
wl-copy < "$temp_file"
notify-send -i "$temp_file" "Current screen copied."
rm "$temp_file"
else
notify-send "Error: Unable to capture screenshot."
fi
}
if [ "$1" == "--swappy" ]; then
handle_swappy
2024-10-01 18:18:26 -04:00
elif [ "$1" == "--screen" ]; then
handle_screen
2024-08-24 22:16:51 -04:00
else
2024-10-01 18:18:26 -04:00
echo "Please use the arguments --swappy or --screen."
2024-08-24 22:16:51 -04:00
fi
'')
2024-08-24 22:16:51 -04:00
];
}