~kris/dots

srice

ref: e9b48d06a8541f3eda5c4db90382ab3c77183afb srice/.config/eww/scripts/wifi-status.sh -rwxr-xr-x 3.0 KiB
e9b48d06 — Kris Yotam xprofile: systemd-aware pipewire start + blueman-applet; sb-internet: tolerate missing /proc/net/wireless 2 months ago
                                                                                
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/bin/bash
# ~/.config/eww/scripts/system-status.sh

# === WiFi Status ===
wifi_interface="wlan0"
wifi_state=$(cat /sys/class/net/$wifi_interface/operstate 2>/dev/null)

if [ "$wifi_state" = "up" ]; then
    # Get signal strength
    wifi_signal=$(nmcli -t -f SIGNAL dev wifi | head -n1 2>/dev/null)
    
    if [ -z "$wifi_signal" ] || ! [[ "$wifi_signal" =~ ^[0-9]+$ ]]; then
        wifi_signal=$(awk 'NR==3 {print int($3 * 100 / 70)}' /proc/net/wireless 2>/dev/null)
    fi
    
    if [ -z "$wifi_signal" ] || ! [[ "$wifi_signal" =~ ^[0-9]+$ ]]; then
        wifi_signal=100
    fi
    
    # Set icon based on signal strength
    if [ "$wifi_signal" -le 20 ]; then
        wifi_icon="󰤯"
    elif [ "$wifi_signal" -le 40 ]; then
        wifi_icon="󰤟"
    elif [ "$wifi_signal" -le 60 ]; then
        wifi_icon="󰤢"
    elif [ "$wifi_signal" -le 80 ]; then
        wifi_icon="󰤥"
    else
        wifi_icon="󰤨"
    fi
    
    # Calculate network speed
    rx_bytes_1=$(cat /sys/class/net/$wifi_interface/statistics/rx_bytes)
    tx_bytes_1=$(cat /sys/class/net/$wifi_interface/statistics/tx_bytes)
    
    sleep 1
    
    rx_bytes_2=$(cat /sys/class/net/$wifi_interface/statistics/rx_bytes)
    tx_bytes_2=$(cat /sys/class/net/$wifi_interface/statistics/tx_bytes)
    
    rx_rate=$((rx_bytes_2 - rx_bytes_1))
    tx_rate=$((tx_bytes_2 - tx_bytes_1))
    
    # Format speed
    format_speed() {
        local bytes=$1
        if [ $bytes -lt 1024 ]; then
            echo "${bytes}B/s"
        elif [ $bytes -lt 1048576 ]; then
            echo "$(awk "BEGIN {printf \"%.1f\", $bytes/1024}")K/s"
        else
            echo "$(awk "BEGIN {printf \"%.1f\", $bytes/1048576}")M/s"
        fi
    }
    
    downspeed=$(format_speed $rx_rate)
    upspeed=$(format_speed $tx_rate)
    
    wifi_display="$wifi_icon$downspeed$upspeed"
else
    wifi_display="󰤮 Disconnected"
fi

# === Brightness ===
brightness=$(cat /sys/class/backlight/acpi_video0/brightness 2>/dev/null)
max_brightness=$(cat /sys/class/backlight/acpi_video0/max_brightness 2>/dev/null)

if [ -n "$brightness" ] && [ -n "$max_brightness" ] && [ "$max_brightness" -gt 0 ]; then
    bright_pct=$((brightness * 100 / max_brightness))
else
    bright_pct=0
fi

if [ "$bright_pct" -le 25 ]; then
    bright_icon="󰃞 "
elif [ "$bright_pct" -le 50 ]; then
    bright_icon="󰃝 "
elif [ "$bright_pct" -le 75 ]; then
    bright_icon="󰃟 "
else
    bright_icon="󰃠 "
fi

# === Volume ===
muted=$(pactl get-sink-mute @DEFAULT_SINK@ 2>/dev/null | grep -o 'yes')
vol_pct=$(pactl get-sink-volume @DEFAULT_SINK@ 2>/dev/null | grep -Po '\d+(?=%)' | head -1)

# Pastikan vol_pct tidak kosong
if [ -z "$vol_pct" ] || ! [[ "$vol_pct" =~ ^[0-9]+$ ]]; then
    vol_pct=0
fi

if [ "$muted" = "yes" ]; then
    vol_icon="󰖁"
else
    if [ "$vol_pct" -le 30 ]; then
        vol_icon=""
    elif [ "$vol_pct" -le 70 ]; then
        vol_icon=""
    else
        vol_icon=" "
    fi
fi

# === Output JSON format untuk EWW ===
cat << EOF
{
  "wifi": "$wifi_display",
  "brightness": "$bright_icon",
  "volume": "$vol_icon"
}
EOF