diff options
| author | 2026-04-21 01:24:42 +0100 | |
|---|---|---|
| committer | 2026-04-21 01:24:42 +0100 | |
| commit | 0b0dcd8013b98fb1ac5e57921f79c25df952f262 (patch) | |
| tree | c18f296473adf07ca9d60f7ecb194696b7a80f80 | |
| parent | d48f8b442648eb837929b5d6538d7d75c4746899 (diff) | |
| download | dotfiles-0b0dcd8013b98fb1ac5e57921f79c25df952f262.tar.gz dotfiles-0b0dcd8013b98fb1ac5e57921f79c25df952f262.tar.bz2 dotfiles-0b0dcd8013b98fb1ac5e57921f79c25df952f262.zip | |
waybar: use iwctl (from iwd) instead of iw for wifi status
| -rwxr-xr-x[-rw-r--r--] | dot_config/waybar/executable_wifi-status.sh | 24 | ||||
| -rw-r--r-- | meta/base.txt | 1 |
2 files changed, 16 insertions, 9 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" diff --git a/meta/base.txt b/meta/base.txt index 879bec3..4b81ee2 100644 --- a/meta/base.txt +++ b/meta/base.txt @@ -17,7 +17,6 @@ fzf gdu git htop -iw iwd jq linux-firmware |
