diff options
Diffstat (limited to 'polybar/scripts/awake-toggle.sh')
| -rwxr-xr-x | polybar/scripts/awake-toggle.sh | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/polybar/scripts/awake-toggle.sh b/polybar/scripts/awake-toggle.sh new file mode 100755 index 0000000..608bbc2 --- /dev/null +++ b/polybar/scripts/awake-toggle.sh @@ -0,0 +1,122 @@ +#!/usr/bin/env bash +set -euo pipefail + +state_dir="${XDG_RUNTIME_DIR:-/tmp}" +if [ ! -w "$state_dir" ]; then + state_dir="${XDG_CACHE_HOME:-$HOME/.cache}" + mkdir -p "$state_dir" +fi +if [ ! -w "$state_dir" ]; then + state_dir="/tmp" +fi +state_file="$state_dir/polybar-awake.state" +action="${1:-toggle}" + +export DISPLAY="${DISPLAY:-:0}" +if [ -z "${XAUTHORITY:-}" ] && [ -r "$HOME/.Xauthority" ]; then + export XAUTHORITY="$HOME/.Xauthority" +fi + +notify() { + if command -v dunstify >/dev/null 2>&1; then + dunstify -a polybar -u low "Force awake" "$1" + fi +} + +save_current_state() { + local query + query="$(xset q)" + + { + printf 'blanking=%s\n' "$(printf '%s\n' "$query" | awk '/prefer blanking:/ { print $3; exit }')" + printf 'exposures=%s\n' "$(printf '%s\n' "$query" | awk '/allow exposures:/ { print $6; exit }')" + printf 'timeout=%s\n' "$(printf '%s\n' "$query" | awk '/timeout:/ { print $2; exit }')" + printf 'cycle=%s\n' "$(printf '%s\n' "$query" | awk '/timeout:/ { print $4; exit }')" + printf 'standby=%s\n' "$(printf '%s\n' "$query" | awk '/Standby:/ { print $2; exit }')" + printf 'suspend=%s\n' "$(printf '%s\n' "$query" | awk '/Standby:/ { print $4; exit }')" + printf 'off=%s\n' "$(printf '%s\n' "$query" | awk '/Standby:/ { print $6; exit }')" + printf 'dpms=%s\n' "$(printf '%s\n' "$query" | awk '/DPMS is/ { print $3; exit }')" + } >"$state_file" +} + +enable_awake() { + if [ ! -f "$state_file" ]; then + save_current_state + fi + + xset s noblank + xset s off + xset -dpms + notify "enabled" +} + +restore_value() { + local name="$1" + local fallback="$2" + local value + + value="$(awk -F= -v key="$name" '$1 == key { print $2; exit }' "$state_file" 2>/dev/null || true)" + printf '%s' "${value:-$fallback}" +} + +disable_awake() { + if [ -f "$state_file" ]; then + local blanking exposures timeout cycle standby suspend off dpms + blanking="$(restore_value blanking yes)" + exposures="$(restore_value exposures yes)" + timeout="$(restore_value timeout 600)" + cycle="$(restore_value cycle 600)" + standby="$(restore_value standby 600)" + suspend="$(restore_value suspend 600)" + off="$(restore_value off 600)" + dpms="$(restore_value dpms Enabled)" + + if [ "$blanking" = "yes" ]; then + xset s blank + else + xset s noblank + fi + + if [ "$exposures" = "yes" ]; then + xset s expose + else + xset s noexpose + fi + + xset s "$timeout" "$cycle" + xset dpms "$standby" "$suspend" "$off" + + if [ "$dpms" = "Enabled" ]; then + xset +dpms + else + xset -dpms + fi + + rm -f "$state_file" + else + xset s on + xset +dpms + fi + + notify "disabled" +} + +case "$action" in + on) + enable_awake + ;; + off) + disable_awake + ;; + toggle) + if [ -f "$state_file" ]; then + disable_awake + else + enable_awake + fi + ;; + *) + notify "unknown action: $action" + exit 2 + ;; +esac |
