summaryrefslogtreecommitdiff
path: root/waybar/.config
diff options
context:
space:
mode:
authorseraphim <18ycm9tx@anonaddy.me>2026-08-17 18:52:02 +0700
committerseraphim <18ycm9tx@anonaddy.me>2026-08-17 18:52:02 +0700
commite13ebf6b7a090732470dbc963ac08bacd305a5f7 (patch)
tree454637be98f98a36dc3d1fea2ff16c7a87e96a2d /waybar/.config
parentd34389e561b45a1f24271988cbfca26aa3fba825 (diff)
.
Diffstat (limited to 'waybar/.config')
-rw-r--r--waybar/.config/waybar/config.jsonc7
-rwxr-xr-xwaybar/.config/waybar/kbd-layout.sh42
-rw-r--r--waybar/.config/waybar/style.css1
3 files changed, 50 insertions, 0 deletions
diff --git a/waybar/.config/waybar/config.jsonc b/waybar/.config/waybar/config.jsonc
index 8fe5464..bba0757 100644
--- a/waybar/.config/waybar/config.jsonc
+++ b/waybar/.config/waybar/config.jsonc
@@ -19,6 +19,8 @@
"modules-right": [
"custom/separator",
"custom/separator3",
+ "custom/kbd",
+ "custom/separator3",
"pulseaudio",
"custom/separator3",
"memory",
@@ -62,6 +64,11 @@
"critical": 80
}
},
+ "custom/kbd": {
+ "exec": "/home/seraphim/dotfiles-gentoo/waybar/.config/waybar/kbd-layout.sh",
+ "restart-interval": 5,
+ "tooltip": false
+ },
"custom/clock": {
"exec": "date +'%H:%M %p - %A, %b %d' | tr '[:upper:]' '[:lower:]'",
"interval": 60,
diff --git a/waybar/.config/waybar/kbd-layout.sh b/waybar/.config/waybar/kbd-layout.sh
new file mode 100755
index 0000000..e81462a
--- /dev/null
+++ b/waybar/.config/waybar/kbd-layout.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# Kill any leftover instances so reloads don't pile up.
+for p in $(pgrep -f "kbd-layout.sh"); do
+ [ "$p" != "$$" ] && kill "$p" 2>/dev/null
+done
+
+STATE="${XDG_RUNTIME_DIR:-/tmp}/waybar-kbd.state"
+rm -f "$STATE"
+
+# Index of the Russian layout (from configured layouts), so we don't hardcode order.
+RUS_IDX=$(niri msg keyboard-layouts 2>/dev/null | grep -i russian | grep -oE '^[ *]*[0-9]+' | tr -d ' *' | head -1)
+
+kbd_query() {
+ niri msg keyboard-layouts 2>/dev/null | grep -Fm1 '*' | grep -qi russian && echo Ru || echo En
+}
+
+# Parse a "Keyboard layout switched: N" or "...current_idx: N" event line.
+kbd_event() {
+ idx=$(printf '%s' "$1" | grep -oE '[0-9]+' | tail -1)
+ [ "$idx" = "$RUS_IDX" ] && echo Ru || echo En
+}
+
+emit() {
+ v="$1"; src="$2"
+ echo "$v"
+ echo "$v" > "$STATE"
+}
+
+# Instant path: react to niri's layout-change events.
+niri msg event-stream 2>/dev/null | {
+ while true; do
+ if IFS= read -r -t 0.2 line; then
+ case "$line" in
+ *"Keyboard layout switched"*|*"Keyboard layouts changed"*) emit "$(kbd_event "$line")" event ;;
+ esac
+ else
+ v=$(kbd_query)
+ [ "$(cat "$STATE" 2>/dev/null)" != "$v" ] && emit "$v" poll
+ fi
+ done
+}
diff --git a/waybar/.config/waybar/style.css b/waybar/.config/waybar/style.css
index 17fc256..196a1f7 100644
--- a/waybar/.config/waybar/style.css
+++ b/waybar/.config/waybar/style.css
@@ -81,6 +81,7 @@ window#waybar {
#memory,
#custom-media,
+#custom-kbd,
#tray,
#cpu,
#custom-clock,