42 lines
1.3 KiB
Bash
Executable File
42 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ---------------------------------------------------------------------------
|
|
# rofi power menu — lock / logout / suspend / hibernate / reboot / shutdown
|
|
# Destructive entries ask for confirmation before firing.
|
|
# ---------------------------------------------------------------------------
|
|
set -euo pipefail
|
|
|
|
THEME="$HOME/.config/rofi/themes/powermenu.rasi"
|
|
LOCK_CMD=(betterlockscreen --lock dimblur)
|
|
|
|
lock=" Lock"
|
|
logout=" Log out"
|
|
suspend=" Suspend"
|
|
hibernate=" Hibernate"
|
|
reboot=" Reboot"
|
|
shutdown=" Shut down"
|
|
|
|
menu() {
|
|
printf '%s\n' "$lock" "$logout" "$suspend" "$hibernate" "$reboot" "$shutdown" |
|
|
rofi -dmenu -i \
|
|
-theme "$THEME" \
|
|
-p " $(whoami)@$(hostname)" \
|
|
-select "$lock"
|
|
}
|
|
|
|
confirm() {
|
|
local answer
|
|
answer=$(printf ' No\n Yes\n' |
|
|
rofi -dmenu -i -theme "$THEME" -p "$1" -select " No")
|
|
[[ "$answer" == *Yes* ]]
|
|
}
|
|
|
|
case "$(menu)" in
|
|
"$lock") "${LOCK_CMD[@]}" ;;
|
|
"$logout") confirm "Log out?" && i3-msg exit ;;
|
|
"$suspend") "${LOCK_CMD[@]}" & sleep 0.3; systemctl suspend ;;
|
|
"$hibernate") confirm "Hibernate?" && { "${LOCK_CMD[@]}" & sleep 0.3; systemctl hibernate; } ;;
|
|
"$reboot") confirm "Reboot?" && systemctl reboot ;;
|
|
"$shutdown") confirm "Shut down?" && systemctl poweroff ;;
|
|
*) exit 0 ;;
|
|
esac
|