Files

64 lines
1.8 KiB
Bash
Raw Permalink Normal View History

2023-11-27 19:26:54 -08:00
#!/usr/bin/env zsh
2026-02-18 00:14:12 -08:00
zmodload zsh/datetime
zmodload zsh/mathfunc
setopt typeset_silent
2024-05-16 04:18:17 -07:00
2026-02-18 20:08:52 -08:00
local TIMES=(forever 1m 5m 10m 15m 30m 1h 2h 4h 1d)
2023-11-27 19:26:54 -08:00
2026-02-18 00:14:12 -08:00
local -a running_locks
2023-11-27 19:26:54 -08:00
2026-02-18 00:14:12 -08:00
() {
local IFS=$'\n '
running_locks=(${="$("${HOME}/scripts/cl/bin/list-manual-sleep-locks")"})
}
2023-11-27 19:26:54 -08:00
2026-02-18 00:14:12 -08:00
let base_time=${EPOCHSECONDS}
for ((i = 2; i <= ${#running_locks}; i+=2)); do
local nsecs="${running_locks[i]}"
if [[ "${nsecs}" == infinity ]]; then
running_locks[i]="next reboot"
else
running_locks[i]=$(strftime -n '%H:%M:%S %b %-e' \
$(( base_time + nsecs )))
fi
done
2025-02-04 21:02:12 -08:00
2026-02-18 00:14:12 -08:00
function is_valid_sleep_time() {
[[ "${1}" = forever ]] \
2026-02-18 19:32:13 -08:00
|| [[ "${1}" = infinity ]] \
2026-02-18 00:14:12 -08:00
|| [[ "${1}" =~ ' *([0-9]+[smhd]? *)+' ]]
}
if (( ${#running_locks} )); then
# We have existing locks
local prompt plural_s
if (( ${#running_locks} > 2 )); then
let count_locks=$(( int(${#running_locks} / 2) ))
prompt="Locked by ${count_locks} locks until ${running_locks[2]}> "
plural_s='s'
else
prompt="Locked until ${running_locks[2]}> "
fi
local choice
choice="$(printf "Cancel lock${plural_s}\n" \
| fuzzel --dmenu --only-match --index -p "${prompt}")"
if (( ${?} == 0 )) && (( ${choice} == 0 )); then
systemctl --user stop 'manual-inhibit-sleep@*.service'
fi
else
# No locks
local choice
choice="$(printf '%s\n' ${TIMES} | fuzzel -d -p "Inhibit sleep for> ")"
if (( ${?} )); then
exit
elif is_valid_sleep_time "${choice}"; then
[[ "${choice}" == forever ]] && choice=infinity
2026-02-18 19:32:13 -08:00
local unit="$(systemd-escape --template=manual-inhibit-sleep@.service \
"${choice}")"
systemctl --user start "${unit}"
2026-02-18 00:14:12 -08:00
else
printf 'Invalid sleep time: %s\n' "${choice}" 1>&2
fi
2025-02-04 21:02:12 -08:00
fi