pointfichiers/bar/eww/scripts/get-connectivity-info
2024-10-12 19:23:25 +02:00

75 lines
1.9 KiB
Bash
Executable file

#!/usr/bin/env dash
print_network_state() {
case "$1" in
eth*)
echo ethernet
;;
wlan*)
echo wireless
;;
wlp*)
echo wireless
;;
usb*)
echo tethering
;;
*)
echo disconnected
;;
esac
}
wifi_strength() {
if [ "$1" -le -80 ]; then echo terrible
elif [ "$1" -le -70 ]; then echo bad
elif [ "$1" -le -60 ]; then echo mediocre
elif [ "$1" -le -40 ]; then echo good
else echo excellent
fi
}
print_network_infos() {
if [ -n "$1" ]; then
route_line=$(ip route show dev "$1" | awk '($1 == "default") { print }')
printf ',"ip":{"local":"%s","gateway":"%s"}' \
"$(echo "$route_line" | awk '{ print $7 }')" \
"$(echo "$route_line" | awk '{ print $3 }')"
if [ "$state" = wireless ]; then
signal=$(nmcli -m multiline device wifi | grep '^\s*SIGNAL: ' | xargs | cut -d \ -f 2)
printf ',"wifi":{"signal":"%s","ssid":"%s"}' \
"$(wifi_strength "$signal")" \
"$(nmcli -m multiline device wifi | grep '^\s*SSID: ' | xargs | cut -d \ -f 2)"
fi
fi
}
print_network_status() {
device=$(ip route | awk '($1 == "default") { print $5 }')
state=$(print_network_state "$device")
printf '{"state":"%s"%s}\n' \
"$state" \
"$(print_network_infos "$device")"
}
print_bluetooth_status (){
power=$(bluetoothctl show | grep Powered | awk '{print $2}' | sed 's/yes/on/g; s/no/off/g')
count=$(bluetoothctl devices Connected | wc -l)
echo "{\"power\": \"${power}\", \"count\": \"${count}\"}"
}
print_connectivity_info () {
network="$(print_network_status)"
bluetooth="$(print_bluetooth_status)"
echo "{\"bluetooth\": ${bluetooth}, \"network\": ${network}}"
}
print_connectivity_info
dbus-monitor --system "interface=org.freedesktop.DBus.ObjectManager" 2> /dev/null | while read -r line; do
print_connectivity_info
done