#!/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