From bf962f00426ca8029558658c81c8e7112262fadb Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 20 Feb 2026 16:48:36 +0100 Subject: [PATCH] Add idle lock indicator --- bin/omarchy-toggle-idle | 2 ++ config/waybar/config.jsonc | 8 ++++++- config/waybar/style.css | 9 +++++-- default/waybar/indicators/idle.sh | 7 ++++++ migrations/1771602477.sh | 39 +++++++++++++++++++++++++++++++ 5 files changed, 62 insertions(+), 3 deletions(-) create mode 100755 default/waybar/indicators/idle.sh create mode 100755 migrations/1771602477.sh diff --git a/bin/omarchy-toggle-idle b/bin/omarchy-toggle-idle index aa69cf50..2dcb7f28 100755 --- a/bin/omarchy-toggle-idle +++ b/bin/omarchy-toggle-idle @@ -7,3 +7,5 @@ else uwsm-app -- hypridle >/dev/null 2>&1 & notify-send "Now locking computer when idle" fi + +pkill -RTMIN+9 waybar diff --git a/config/waybar/config.jsonc b/config/waybar/config.jsonc index 5c28742c..5ec5ed3c 100644 --- a/config/waybar/config.jsonc +++ b/config/waybar/config.jsonc @@ -5,7 +5,7 @@ "spacing": 0, "height": 26, "modules-left": ["custom/omarchy", "hyprland/workspaces"], - "modules-center": ["clock", "custom/update", "custom/voxtype", "custom/screenrecording-indicator"], + "modules-center": ["clock", "custom/update", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator"], "modules-right": [ "group/tray-expander", "bluetooth", @@ -142,6 +142,12 @@ "signal": 8, "return-type": "json" }, + "custom/idle-indicator": { + "on-click": "omarchy-toggle-idle", + "exec": "$OMARCHY_PATH/default/waybar/indicators/idle.sh", + "signal": 9, + "return-type": "json" + }, "custom/voxtype": { "exec": "omarchy-voxtype-status", "return-type": "json", diff --git a/config/waybar/style.css b/config/waybar/style.css index 19e934c2..45d5a6c3 100644 --- a/config/waybar/style.css +++ b/config/waybar/style.css @@ -34,7 +34,6 @@ #battery, #pulseaudio, #custom-omarchy, -#custom-screenrecording-indicator, #custom-update { min-width: 12px; margin: 0 7.5px; @@ -72,9 +71,11 @@ tooltip { opacity: 0; } -#custom-screenrecording-indicator { +#custom-screenrecording-indicator, +#custom-idle-indicator { min-width: 12px; margin-left: 5px; + margin-right: 0; font-size: 10px; padding-bottom: 1px; } @@ -83,6 +84,10 @@ tooltip { color: #a55555; } +#custom-idle-indicator.active { + color: #a55555; +} + #custom-voxtype { min-width: 12px; margin: 0 0 0 7.5px; diff --git a/default/waybar/indicators/idle.sh b/default/waybar/indicators/idle.sh new file mode 100755 index 00000000..ebb5f4f5 --- /dev/null +++ b/default/waybar/indicators/idle.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +if pgrep -x hypridle >/dev/null; then + echo '{"text": ""}' +else + echo '{"text": "󱫖", "tooltip": "Idle lock disabled", "class": "active"}' +fi diff --git a/migrations/1771602477.sh b/migrations/1771602477.sh new file mode 100755 index 00000000..6d1621ba --- /dev/null +++ b/migrations/1771602477.sh @@ -0,0 +1,39 @@ +echo "Add idle lock indicator to Waybar" + +STYLE_FILE=~/.config/waybar/style.css +CONFIG_FILE=~/.config/waybar/config.jsonc + +# Add idle-indicator to modules-center if not present +if ! grep -q "custom/idle-indicator" "$CONFIG_FILE"; then + sed -i 's/"custom\/screenrecording-indicator"]/"custom\/screenrecording-indicator", "custom\/idle-indicator"]/' "$CONFIG_FILE" + + sed -i '/"tray": {/i\ "custom/idle-indicator": {\n "on-click": "omarchy-toggle-idle",\n "exec": "$OMARCHY_PATH/default/waybar/indicators/idle.sh",\n "signal": 9,\n "return-type": "json"\n },' "$CONFIG_FILE" +fi + +# Add idle-indicator CSS if not present +if ! grep -q "#custom-idle-indicator" "$STYLE_FILE"; then + # Remove screenrecording-indicator from shared margin block and pair it with idle-indicator instead + sed -i 's/^#custom-screenrecording-indicator,$//' "$STYLE_FILE" + + # Add shared rule for both indicators and idle-indicator active state + sed -i '/#custom-screenrecording-indicator.active {/i\#custom-screenrecording-indicator,\n#custom-idle-indicator {\n min-width: 12px;\n margin-left: 5px;\n margin-right: 0;\n font-size: 10px;\n padding-bottom: 1px;\n}\n' "$STYLE_FILE" + + # Remove the now-duplicated properties from the standalone screenrecording block + sed -i '/#custom-screenrecording-indicator {/,/^}/ { + /min-width:/d + /margin-left:/d + /font-size:/d + /padding-bottom:/d + /^#custom-screenrecording-indicator {/d + /^}$/d + }' "$STYLE_FILE" + + cat >> "$STYLE_FILE" << 'EOF' + +#custom-idle-indicator.active { + color: #a55555; +} +EOF +fi + +omarchy-restart-waybar