diff --git a/.local/libexec/statusbar/sb-internet b/.local/libexec/statusbar/sb-internet index 09da6ef3d..d45f352eb 100755 --- a/.local/libexec/statusbar/sb-internet +++ b/.local/libexec/statusbar/sb-internet @@ -1,15 +1,17 @@ #!/bin/sh . "colors" -shift="" +status() { + nmcli --terse device status | awk -v device="$1" -F: '$1 == device { print $3 }' +} -wifi() { +wireless() { if grep -vxq '0x\(1\|9\)003' "$info/flags"; then icon="󰀞" else - case "$state" in + case "$(status "$device")" in connected) - percent=$(awk -v interface="$device:" '$1==interface {gsub(/[^0-9]/,"",$3); print $3}' /proc/net/wireless) + percent=$(awk -v interface="${device}:" '$1==interface { gsub(/[^0-9]/,"",$3); print $3 }' /proc/net/wireless) # shellcheck disable=SC2194 case 1 in $((percent >= 80))) icon="󰤨" ;; @@ -19,52 +21,56 @@ wifi() { $((percent >= 0))) icon="󰤯" ;; esac ;; - disconnected) icon="󰤮" ;; + disconnected) return ;; *) icon="󰤫" ;; esac - printf "%b" "$shift$icon $connection" - shift=" " + + wireless_status="${wireless_status:-}${icon} " fi } -wireguard() { - printf "%b" "$shift󰖂 $connection" - shift=" " -} - -tun() { - printf "%b" "$shift󰖂 $connection" - shift=" " -} - ethernet() { - case "$state" in + case "$(status "$device")" in connected) icon="󰱓" ;; - unavailable) icon="󰅛" ;; - disconnected) icon="󰲛" ;; + unavailable | disconnected) return ;; *) icon="󰛵" ;; esac - printf "%b" "$shift$icon" - shift=" " + ethernet_status="${ethernet_status:-}${icon} " +} + +wireguard() { + wireguard_status="${wireguard_status:-}󰖂 ${name} " +} + +vpn() { + vpn_status="${vpn_status:-}󰖂 ${name} " } fallback() { : } +output() { + printf "%b" "${wireless_status}${ethernet_status}${wireguard_status}${vpn_status}" | sed 's/ $//' +} + IFS=" " -for x in $(nmcli --terse device status); do - device="$(echo "$x" | cut -d: -f1)" - type="$(echo "$x" | cut -d: -f2)" - state="$(echo "$x" | cut -d: -f3)" - connection="$(echo "$x" | cut -d: -f4)" +for x in $(nmcli --terse connection show --active); do + name="$(echo "$x" | cut -d: -f1)" + type="$(echo "$x" | cut -d: -f3)" + device="$(echo "$x" | cut -d: -f4)" info="/sys/class/net/${device}" case "$type" in - wifi | wireguard | ethernet | tun) $type ;; + *wireless) wireless ;; + *ethernet) ethernet ;; + wireguard | vpn) $type ;; *) fallback ;; esac - unset device type state connection info icon + + unset name type device info icon done + +output