dotfiles/.config/mpanel/modules/33wifi

92 lines
1.9 KiB
Bash
Executable File

#!/bin/sh
. ../mpanel.subr
. ../aux/secrets
align="right"
background="$(color 11)"
foreground="$(color 3)"
waitFunc="sleep 1"
clickFunc="toggle flag"
flag="true"
connected() {
state="$(iwctl station $wifi_if show | grep State | awk '{print $2}')"
[ "$state" = "connected" ] && return 0
return 1
}
internet() {
if nc -zw1 google.com 443; then
return 0
fi
return 1
}
vpn() {
if ping -c 1 -w 5 $vpn_ip >/dev/null 2>&1; then
return 0
fi
return 1
}
home() {
if ping -c 1 -w 5 $home_ip >/dev/null 2>&1; then
return 0
fi
return 1
}
store_speeds() {
R1="$(cat /sys/class/net/$wifi_if/statistics/rx_bytes)"
T1="$(cat /sys/class/net/$wifi_if/statistics/tx_bytes)"
sleep 1
R2="$(cat /sys/class/net/$wifi_if/statistics/rx_bytes)"
T2="$(cat /sys/class/net/$wifi_if/statistics/tx_bytes)"
r="$(echo $R1 $R2 | awk '{r=$2-$1 ; rSuf="B " ; if (r >= 1000) {r=r/1000; rSuf="KB";} if (r >= 1000) {r=r/1000; rSuf="MB";} printf "%3.0f", r; printf rSuf;}')"
t="$(echo $T1 $T2 | awk '{t=$2-$1 ; tSuf="B " ; if (t >= 1000) {t=t/1000; tSuf="KB";} if (t >= 1000) {t=t/1000; tSuf="MB";} printf "%3.0f", t; printf tSuf;}')"
echo "$r$t" | atomic_write "$XDG_RUNTIME_DIR/wifi-speeds.tmp"
}
store_symbol() {
if connected; then
if internet; then
if vpn; then
out="直"
elif home; then
out=""
else
out=""
fi
else
out=""
fi
else
out="睊"
fi
echo "$out" | atomic_write "$XDG_RUNTIME_DIR/wifi-symbol.tmp"
}
print_stats() {
if [ "$flag" = "true" ]; then
echo " $(cat "$XDG_RUNTIME_DIR/wifi-symbol.tmp")$(cat "$XDG_RUNTIME_DIR/wifi-speeds.tmp") "
else
echo " $(cat "$XDG_RUNTIME_DIR/wifi-symbol.tmp") "
fi
}
kickoff store_speeds &
kickoff store_symbol 5 &
loop print_stats