#!/bin/sh # Network status indicator for waybar # Shows: WiFi icon (signal strength) + SSID, or Ethernet icon + interface # Tooltip: upload/download speeds INTERFACE=$(ip route | awk '/default/ {print $5; exit}') if [ -z "$INTERFACE" ]; then echo '{"text": "󰤭 Disconnected", "tooltip": "No network connection", "class": "disconnected"}' exit 0 fi # Measure network speed (requires 1 second delay) RX1=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes) TX1=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes) sleep 1 RX2=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes) TX2=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes) RX_RATE=$((RX2 - RX1)) TX_RATE=$((TX2 - TX1)) format_speed() { local bytes=$1 if [ $bytes -ge 1073741824 ]; then printf "%.2f GB/s" $(echo "scale=2; $bytes / 1073741824" | bc) elif [ $bytes -ge 1048576 ]; then printf "%.2f MB/s" $(echo "scale=2; $bytes / 1048576" | bc) elif [ $bytes -ge 1024 ]; then printf "%.2f KB/s" $(echo "scale=2; $bytes / 1024" | bc) else printf "%d B/s" $bytes fi } UP=$(format_speed $TX_RATE) DOWN=$(format_speed $RX_RATE) # Determine connection type and get appropriate icon/label if [ -d "/sys/class/net/$INTERFACE/wireless" ]; then # WiFi connection LABEL=$(iwgetid -r 2>/dev/null || echo "WiFi") # Get signal strength in percentage SIGNAL=$(awk 'NR==3 {print int($3 * 100 / 70)}' /proc/net/wireless 2>/dev/null) # Select icon based on signal strength if [ -z "$SIGNAL" ] || [ "$SIGNAL" -le 0 ]; then ICON="󰤯" # No signal elif [ "$SIGNAL" -le 25 ]; then ICON="󰤟" # Weak elif [ "$SIGNAL" -le 50 ]; then ICON="󰤢" # Fair elif [ "$SIGNAL" -le 75 ]; then ICON="󰤥" # Good else ICON="󰤨" # Excellent fi else # Ethernet connection ICON="󰈀" LABEL="$INTERFACE" fi TOOLTIP="Up: $UP\nDown: $DOWN" echo "{\"text\": \"$ICON $LABEL\", \"tooltip\": \"$TOOLTIP\", \"class\": \"connected\"}"