#!/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