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