#!/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 20 ]; then echo terrible elif [ "$1" -le 40 ]; then echo bad elif [ "$1" -le 60 ]; then echo mediocre elif [ "$1" -le 80 ]; 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