nix/package/swayscript/script/NetworkWidget.nix

81 lines
2.2 KiB
Nix

{ ... }:
{
text = ''
# Waybar output.
function networkwidget() {
local IFS=$'\n'
local internet=$(nmcli networking connectivity check)
local _ethernets=($(nmcli connection show --active | rg ethernet | sed "s/ .*//"))
local _vpns=($(nmcli connection show --active | rg vpn | sed "s/ .*//"))
local _wifis=($(nmcli connection show --active | rg wifi | sed "s/ .*//"))
local _bts_raw=($(bluetoothctl devices Connected))
local _bts=()
local _bt_lowest=100
local icon="󰖩"
local class=""
for bt in ''${_bts_raw[@]}; do
local name=$(printf "%s" ''${bt} | cut -d\ -f3)
local mac=$(printf "%s" ''${bt} | cut -d\ -f2 | sed -e "s/:/_/g")
local bat=$(dbus-send --print-reply=literal --system --dest=org.bluez /org/bluez/hci0/dev_''${mac} org.freedesktop.DBus.Properties.Get string:"org.bluez.Battery1" string:"Percentage" 2> /dev/null | cut -d\ -f12)
local btinfo="''${name}"
if [[ "''${bat}" != "" ]]; then
btinfo+=" ''${bat}%"
[[ ''${bat} -lt ''${_bt_lowest} ]] && _bt_lowest=bat
fi
_bts+=("''${btinfo}")
done
if [[ "''${_bts}" != "" ]]; then
icon="󱛃"
if [[ "''${_bt_lowest}" != "" ]] && [[ ''${_bt_lowest} -lt 21 ]]; then
class="btlow"
fi
fi
if [[ "''${_vpns}" != "" ]]; then
class="vpn"
icon="󱚿"
fi
if [[ "''${internet}" != "full" ]]; then
class="issue"
icon="󱚵"
fi
for net in ''${_vpns[@]}; do
networks+=" ''${net}\\n"
done
for net in ''${_ethernets[@]}; do
networks+=" ''${net}\\n"
done
for net in ''${_wifis[@]}; do
networks+="󰖩 ''${net}\\n"
done
for bt in ''${_bts[@]}; do
networks+="󰂯 ''${bt}\\n"
done
networks=''${networks%\\n}
printf "%s" "{\"text\": \"''${icon}\", \"tooltip\": \"''${networks}\", \"class\": \"''${class}\"}\n"
}
# Toggle network.
function network() {
notify_short
local state=$(nmcli networking)
if [[ "''${state}" = "enabled" ]]; then
nmcli networking off
else
nmcli networking on
fi
}
'';
}