#!/bin/sh # A dmenu wrapper script for system functions. export WM=$XDG_CURRENT_DESKTOP case "$(readlink -f /sbin/init)" in *systemd*) ctl='systemctl' ;; *) ctl='loginctl' ;; esac case "$(printf "🔒 lock\n🚪 leave $WM\n♻️ renew $WM\n🐻 hibernate\n🔃 reboot\n🖥️ shutdown\n💤 sleep\n📺 display off\n set background\n start idle\n kill swayidle\n fcitx5\n kill fcitx5\n start emacs daemon\n kill emacs daemon\n restart emacs daemon" | rofi -dmenu -i -l 16 -p 'action')" in '🔒 lock') setsid -f swaylock setsid -f sleep 2 && swayidle -w timeout 1 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on" && kill $#' ;; "🚪 leave $WM") swaymsg exit ;; "♻️ renew $WM") swaymsg reload ;; '🐻 hibernate') $ctl hibernate -i ;; '💤 sleep') $ctl suspend -i ;; '🔃 reboot') $ctl reboot -i ;; '🖥️ shutdown') $ctl poweroff -i ;; '📺 display off') swayidle -w timeout 1 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on" && kill $#' ;; ' set background') change-background ;; ' start idle') killall swayidle && sleep 1; setsid -f idle && notify-send 'idle started.';; ' kill swayidle') killall swayidle && notify-send 'idle killed.';; ' fcitx5') fcitx5 ;; ' kill fcitx5') killall fcitx5 ;; ' start emacs daemon') emacs --daemon && notify-send 'emacs daemon started' ;; ' kill emacs daemon') killall emacs && notify-send 'emacs daemon killed' ;; ' restart emacs daemon') killall emacs && notify-send 'emacs daemon killed' ; emacs --daemon && notify-send 'emacs daemon started' ;; *) exit 1 ;; esac