diff options
Diffstat (limited to 'dotfiles/hyprland/.local/bin/waybar-netspeed')
| -rwxr-xr-x | dotfiles/hyprland/.local/bin/waybar-netspeed | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/dotfiles/hyprland/.local/bin/waybar-netspeed b/dotfiles/hyprland/.local/bin/waybar-netspeed new file mode 100755 index 0000000..97e8e5e --- /dev/null +++ b/dotfiles/hyprland/.local/bin/waybar-netspeed @@ -0,0 +1,67 @@ +#!/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\": \"<span size='large'>$ICON</span> $LABEL\", \"tooltip\": \"$TOOLTIP\", \"class\": \"connected\"}" |
