#!/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