Places the seat's dmenu-compatible command, the launcher and power menu, its themes in the decided faces, and its key bindings as an i3 drop-in; Go tools menu, applications, themes and run.
55 lines
1.9 KiB
Bash
Executable File
55 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# rofi-powermenu (module rofi, novox/hq ADR 0208): lock, suspend, log out, reboot, shut down.
|
|
#
|
|
# It belongs to the session, and it is the launcher's: its whole face is rofi's. Every action is a
|
|
# verb of logind or the service manager, so nothing here names a window manager or a locker:
|
|
# - lock asks logind to lock the session, which the holder of node-lock-screen answers;
|
|
# - log out ends this login session, whichever window manager runs in it.
|
|
# Adopted from the workstations' power menu of 2026-10-04 (after adi1090x's powermenu type-2).
|
|
set -u
|
|
|
|
theme=mesh-powermenu
|
|
uptime="$(uptime -p | sed -e 's/^up //')"
|
|
|
|
shutdown=''
|
|
reboot=''
|
|
lock=''
|
|
suspend=''
|
|
logout=''
|
|
yes=''
|
|
no=''
|
|
|
|
menu() {
|
|
rofi -dmenu -p "Uptime: $uptime" -mesg "Uptime: $uptime" -theme "$theme"
|
|
}
|
|
|
|
confirm() {
|
|
printf '%s\n%s\n' "$yes" "$no" | rofi -dmenu -p 'Confirmation' -mesg 'Are you sure?' -theme "$theme" \
|
|
-theme-str 'window {location: center; anchor: center; fullscreen: false; width: 350px;}' \
|
|
-theme-str 'mainbox {children: [ "message", "listview" ];}' \
|
|
-theme-str 'listview {columns: 2; lines: 1;}' \
|
|
-theme-str 'element-text {horizontal-align: 0.5;}' \
|
|
-theme-str 'textbox {horizontal-align: 0.5;}'
|
|
}
|
|
|
|
session() {
|
|
# The login session this menu runs in: the session's own id, else logind's answer for this process.
|
|
if [ -n "${XDG_SESSION_ID:-}" ]; then
|
|
echo "$XDG_SESSION_ID"
|
|
else
|
|
loginctl show-session auto -p Id --value 2>/dev/null
|
|
fi
|
|
}
|
|
|
|
confirmed() { [ "$(confirm)" = "$yes" ]; }
|
|
|
|
chosen="$(printf '%s\n' "$lock" "$suspend" "$logout" "$reboot" "$shutdown" | menu)" || exit 0
|
|
case $chosen in
|
|
"$lock") loginctl lock-session "$(session)" ;;
|
|
"$suspend") confirmed && systemctl suspend ;;
|
|
"$logout") confirmed && loginctl terminate-session "$(session)" ;;
|
|
"$reboot") confirmed && systemctl reboot ;;
|
|
"$shutdown") confirmed && systemctl poweroff ;;
|
|
esac
|
|
exit 0
|