aboutsummaryrefslogtreecommitdiffstats
path: root/bin/wb-idle
diff options
context:
space:
mode:
Diffstat (limited to 'bin/wb-idle')
-rwxr-xr-xbin/wb-idle45
1 files changed, 45 insertions, 0 deletions
diff --git a/bin/wb-idle b/bin/wb-idle
new file mode 100755
index 0000000..05c4a8c
--- /dev/null
+++ b/bin/wb-idle
@@ -0,0 +1,45 @@
+#!/usr/bin/env bash
+# Presentation mode: keep the screen awake, and say so with a themed icon.
+# Copyright (C) 2026 Danilo M. <danix@danix.xyz>
+# Licensed under the GNU General Public License v2 only.
+#
+# waybar's own idle_inhibitor module draws its state with format-icons, which
+# is text. This drives the same idea through hypridle and reports the state as
+# an icon path for an `image` module instead.
+#
+# wb-idle status # print "$path\n$tooltip" for the image module
+# wb-idle toggle # flip the inhibitor, then refresh the module
+#
+# The inhibitor is hypridle's own pause, so nothing else has to be running.
+set -euo pipefail
+
+state_file="${XDG_RUNTIME_DIR:-/tmp}/wb-idle.state"
+
+active() { [[ -f "$state_file" ]]; }
+
+case "${1:-status}" in
+toggle)
+ if active; then
+ rm -f "$state_file"
+ # Resume idling. Guarded: hypridle may not be running, and that is
+ # not an error worth failing a click over.
+ pkill -USR2 -x hypridle 2>/dev/null || true
+ else
+ touch "$state_file"
+ pkill -USR1 -x hypridle 2>/dev/null || true
+ fi
+ # Refresh the module now rather than waiting for its interval.
+ pkill -RTMIN+9 -x waybar 2>/dev/null || true
+ ;;
+status)
+ if active; then
+ wb-icon idle activated
+ else
+ wb-icon idle deactivated
+ fi
+ ;;
+*)
+ echo "usage: wb-idle <status|toggle>" >&2
+ exit 2
+ ;;
+esac