Files
nixos/scripts/WMScripts/exit.sh
T
2026-10-06 22:34:05 +02:00

79 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env sh
# This script cleanly exits a variety of window managers, depending on the given parameters
# Also checks no windows exist on the scratchpad (as I tend to forget about those)
case "$XDG_CURRENT_DESKTOP" in
"Hyprland")
lock="hyprlock"
cmd="hyprctl clients -j | jq . | grep -E 'special' -c"
ctl="hyprctl dispatch"
logout="uwsm stop"
;;
"sway")
lock="swaylock --screenshots --clock --indicator --indicator-radius 100 --indicator-thickness 7 --effect-pixelate 25 -- effect-vignette 0.5:0.5 --ring-color 244273a --key-hl-color c6a0f6 --line-color 00000000 --inside-color 00000000 --separator-color 00000000"
cmd="swaymsg -rt get_tree | jq . | grep -E 'scratchpad_state\": \"(changed|fresh)' -c"
ctl="swaymsg"
logout="swaymsg exit"
;;
"i3")
lock='i3lock -n -c 18192666 -k --radius 180 --inside-color=24273a --layout-color=cad3f5 --time-color=cad3f5 --date-color=cad3f5 --greeter-color=cad3f5 --verif-color=cad3f5 --wrong-color=cad3f5 --modif-color=cad3f5 --ring-color=c6a0f6 --insidever-color=24273a --ringver-color=8aadf4 --insidewrong-color=24273a --ringwrong-color=ed8796 --keyhl-color=a6da95 --bshl-color=f5a97f --separator-color=24273a --date-str="%A, %d %B %Y"'
cmd="i3-msg -t get_tree | jq . | grep -E 'scratchpad_state\": \"(changed|fresh)' -c"
ctl="i3-msg"
logout="i3-msg exit"
;;
*)
dunstify -u low -t 2000 -i ~/.icons/candy-icons/apps/scalable/system-shutdown.svg "This desktop is not supported."
exit
;;
esac
spec_exist() {
n=$(eval "$cmd")
if [ "$n" -gt 0 ]; then
[ "$n" -gt 1 ] && msg="$n windows" || msg="window"
dunstify -t 3000 \
-u low \
-i ~/.icons/candy-icons/apps/scalable/system-shutdown.svg \
-a i3exit \
"Close the $msg in the scratchpad first."
exit 0
fi
}
lock() {
dunstctl set-paused true
bash -c "$lock"
dunstctl set-paused false
}
case "$1" in
lock)
lock
;;
logout)
eval "$logout"
;;
suspend)
systemctl suspend && lock
;;
hibernate)
systemctl hibernate && lock
;;
reboot)
spec_exist
systemctl reboot
;;
shutdown)
spec_exist
systemctl poweroff
;;
*)
echo "Usage: $0 {lock|logout|suspend|hibernate|reboot|shutdown}"
exit 2
esac
exit 0