diff options
Diffstat (limited to 'dot_config')
| -rw-r--r-- | dot_config/waybar/config.jsonc | 8 | ||||
| -rw-r--r-- | dot_config/waybar/executable_webcam-status.sh | 18 | ||||
| -rw-r--r-- | dot_config/waybar/style.css | 5 |
3 files changed, 31 insertions, 0 deletions
diff --git a/dot_config/waybar/config.jsonc b/dot_config/waybar/config.jsonc index 47d6b64..c09eb1f 100644 --- a/dot_config/waybar/config.jsonc +++ b/dot_config/waybar/config.jsonc @@ -12,6 +12,7 @@ "network#bond", "battery", "privacy", + "custom/webcam", "pulseaudio", "custom/wifi", "bluetooth", @@ -169,6 +170,13 @@ ], }, + "custom/webcam": { + "exec": "~/.config/waybar/webcam-status.sh", + "return-type": "json", + "interval": 2, + "tooltip": true, + }, + "custom/notifications": { "exec": "~/.config/waybar/mako-status.sh", "return-type": "json", diff --git a/dot_config/waybar/executable_webcam-status.sh b/dot_config/waybar/executable_webcam-status.sh new file mode 100644 index 0000000..b8e5570 --- /dev/null +++ b/dot_config/waybar/executable_webcam-status.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# Emit waybar JSON when any /dev/video* device is held open by a process. +# V4L2 capture (firefox, zoom, OBS, etc.) doesn't go through PipeWire's +# privacy portal, so the built-in waybar privacy module never sees it. +set -eu + +devs=$(echo /dev/video[0-9]*) +case "$devs" in + '/dev/video[0-9]*') exit 0 ;; # no devices present +esac + +# fuser exits 0 when at least one device has an opener, 1 otherwise. Stderr +# carries 'PID' for each match; redirect it away. +if fuser $devs >/dev/null 2>&1; then + printf '{"text":"CAM","tooltip":"webcam in use","class":"active","alt":"active"}\n' +else + printf '{"text":"","alt":"idle"}\n' +fi diff --git a/dot_config/waybar/style.css b/dot_config/waybar/style.css index 3072ad2..29d9885 100644 --- a/dot_config/waybar/style.css +++ b/dot_config/waybar/style.css @@ -48,6 +48,7 @@ window#waybar { #privacy, #custom-memory, #custom-wifi, +#custom-webcam, #custom-notifications, #custom-thunderbird { padding: 0 6px; @@ -118,6 +119,10 @@ window#waybar { color: #fb4934; /* red — only visible when active */ } +#custom-webcam.active { + color: #fb4934; /* red — only rendered when webcam is in use */ +} + #custom-notifications { color: #928374; /* gray baseline */ } |
