aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/dot_config/waybar/executable_wifi-status.sh
diff options
context:
space:
mode:
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"