aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/dot_config/waybar/executable_wifi-status.sh
diff options
context:
space:
mode:
authorLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2026-04-21 01:24:42 +0100
committerLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2026-04-21 01:24:42 +0100
commit0b0dcd8013b98fb1ac5e57921f79c25df952f262 (patch)
treec18f296473adf07ca9d60f7ecb194696b7a80f80 /dot_config/waybar/executable_wifi-status.sh
parentd48f8b442648eb837929b5d6538d7d75c4746899 (diff)
downloaddotfiles-0b0dcd8013b98fb1ac5e57921f79c25df952f262.tar.gz
dotfiles-0b0dcd8013b98fb1ac5e57921f79c25df952f262.tar.bz2
dotfiles-0b0dcd8013b98fb1ac5e57921f79c25df952f262.zip
waybar: use iwctl (from iwd) instead of iw for wifi status
Diffstat (limited to 'dot_config/waybar/executable_wifi-status.sh')
-rwxr-xr-x[-rw-r--r--]dot_config/waybar/executable_wifi-status.sh24
1 files changed, 16 insertions, 8 deletions
diff --git a/dot_config/waybar/executable_wifi-status.sh b/dot_config/waybar/executable_wifi-status.sh
index 082551f..b93a28c 100644..100755
--- a/dot_config/waybar/executable_wifi-status.sh
+++ b/dot_config/waybar/executable_wifi-status.sh
@@ -1,19 +1,27 @@
#!/bin/sh
-# Emit waybar JSON describing wifi link state. Handles bond-slaved wlan
-# interfaces where waybar's built-in network module fails to detect wifi.
+# Emit waybar JSON describing wifi link state. Uses iwctl (from iwd) so we
+# don't need the separate `iw` package. Handles bond-slaved wlan where
+# waybar's built-in network module fails to detect wifi.
set -eu
iface=wlan0
-link=$(iw dev "$iface" link 2>/dev/null || true)
-if [ -z "$link" ] || [ "$link" = "Not connected." ]; then
+# iwctl emits ANSI colour codes even when stdout is a pipe; strip them.
+out=$(iwctl station "$iface" show 2>/dev/null | sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' || true)
+
+state=$(printf '%s\n' "$out" | awk '/ State / {print $NF; exit}')
+if [ "$state" != "connected" ]; then
printf '{"text":"wifi off","class":"down"}\n'
exit 0
fi
-ssid=$(printf '%s\n' "$link" | awk -F': ' '/^\tSSID:/{print $2; exit}')
-dbm=$(printf '%s\n' "$link" | awk '/signal:/{print $2; exit}')
-pct=$(awk -v r="${dbm:-0}" 'BEGIN{p=2*(r+100); if(p>100)p=100; if(p<0)p=0; printf "%d",p}')
+ssid=$(printf '%s\n' "$out" |
+ sed -n 's/^[[:space:]]*Connected network[[:space:]]\{2,\}//p' |
+ sed 's/[[:space:]]*$//')
+rssi=$(printf '%s\n' "$out" |
+ sed -n 's/^[[:space:]]*\*\{0,1\}[[:space:]]*AverageRSSI[[:space:]]\{2,\}//p' |
+ awk '{print $1; exit}')
+pct=$(awk -v r="${rssi:-0}" 'BEGIN{p=2*(r+100); if(p>100)p=100; if(p<0)p=0; printf "%d",p}')
printf '{"text":"%s %s%%","class":"up","tooltip":"%s ยท %s dBm"}\n' \
- "$ssid" "$pct" "$iface" "$dbm"
+ "$ssid" "$pct" "$iface" "$rssi"