summaryrefslogtreecommitdiff
path: root/dotfiles/hyprland/.local/bin/waybar-netspeed
blob: c285ac53c071b8aff43302607cb2588401479816 (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
68
69
70
#!/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": "󰤭 Offline", "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=$(iw dev "$INTERFACE" info 2>/dev/null | awk '/ssid/ {print $2}')
    [ -z "$LABEL" ] && LABEL="WiFi"

    # Get signal strength in dBm
    SIGNAL_DBM=$(iw dev "$INTERFACE" link 2>/dev/null | awk '/signal:/ {print $2}')

    # Select icon based on signal dBm
    if [ -z "$SIGNAL_DBM" ]; then
        ICON="󰤯"  # No signal
    elif [ "$SIGNAL_DBM" -ge -50 ]; then
        ICON="󰤨"  # Excellent
    elif [ "$SIGNAL_DBM" -ge -60 ]; then
        ICON="󰤥"  # Good
    elif [ "$SIGNAL_DBM" -ge -70 ]; then
        ICON="󰤢"  # Fair
    elif [ "$SIGNAL_DBM" -ge -80 ]; then
        ICON="󰤟"  # Weak
    else
        ICON="󰤯"  # No signal
    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\"}"