73 lines
1.5 KiB
Bash
Executable File
73 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
function get_time_ms {
|
|
date -u +%s%3N
|
|
}
|
|
|
|
icons=("" "" "" "" "")
|
|
|
|
function toggle() {
|
|
status=$(rfkill | grep wlan | awk '{print $4}')
|
|
|
|
if [ "$status" = "unblocked" ]; then
|
|
rfkill block wlan
|
|
else
|
|
rfkill unblock wlan
|
|
fi
|
|
}
|
|
|
|
function gen_wifi() {
|
|
signal=$(cat /proc/net/wireless | head -n3 | tail -n1 | awk '{print $3}')
|
|
level=$(awk -v n="$signal" 'BEGIN{print int((n-1)/20)}')
|
|
if [ "$level" -gt 4 ]; then
|
|
level=4
|
|
fi
|
|
|
|
icon=${icons[$level]}
|
|
color="#cba6f7"
|
|
class="net-connected"
|
|
name=$(wpa_cli status | grep \^ssid= | sed 's/ssid=//g')
|
|
}
|
|
|
|
function gen_ethernet() {
|
|
icon=""
|
|
class="net-connected"
|
|
color="#cba6f7"
|
|
name=Wired
|
|
}
|
|
|
|
function make_content() {
|
|
local ethernet wifi
|
|
ethernet=$(ip link | rg "^[0-9]+: en[po]+" | head -n1 | sed 's/[a-zA-Z0-9_,><:\ -]*state //g' | sed 's/ mode [a-zA-Z0-9 ]*//g')
|
|
wifi=$(wpa_cli status | rg "^wpa_state=" | sed 's/wpa_state=//g')
|
|
|
|
# test ethernet first
|
|
if [[ $ethernet == "UP" ]]; then
|
|
gen_ethernet
|
|
elif [[ $wifi == "COMPLETED" ]]; then
|
|
gen_wifi
|
|
else
|
|
icon=""
|
|
color="#988ba2"
|
|
class="net-disconnected"
|
|
name="Disconnected"
|
|
fi
|
|
|
|
echo '{"icon": "'$icon'", "name": "'$name'", "color": "'$color'", "class": "'$class'"}'
|
|
}
|
|
|
|
if [ "$1" = "toggle" ]; then
|
|
toggle
|
|
else
|
|
last_time=$(get_time_ms)
|
|
make_content
|
|
ip monitor | while read -r _; do
|
|
current_time=$(get_time_ms)
|
|
delta=$((current_time - last_time))
|
|
if [[ $delta -gt 50 ]]; then
|
|
make_content
|
|
last_time=$(get_time_ms)
|
|
fi
|
|
done
|
|
fi
|