summaryrefslogtreecommitdiff
path: root/dotfiles/hyprland/.local/bin/waybar-netspeed
blob: 97e8e5eb8824d5ccda4d160d994658f780f55a9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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\"}"