- Config waybar 3-pills glassmorphism (left/center/right) - Scripts : gpu, network, power-profile (toggle+luminosité/profil), cava daemon+reader, wob (volume/luminosité), rofi-launcher - Popup media GTK3 : volume sortie+entrée + luminosité (vc-media-popup.py) - Profil énergie : cycle balanced→low-power→performance avec brightnessctl - Autostart COSMIC : waybar.desktop + wob.desktop - Thème COSMIC Light ajouté (accent violet-chaton) - deploy : +autostart, +sudoers platform_profile, +udev platform_profile, +scripts .py waybar, +CosmicTheme.Light
67 lines
2.1 KiB
Bash
Executable File
67 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# network.sh — bande passante réseau → JSON waybar
|
|
|
|
STATE_FILE="/tmp/waybar_net_state"
|
|
|
|
# Détecter l'interface active
|
|
IFACE=""
|
|
for candidate in enp7s0 enp6s0 eth0; do
|
|
if [[ -d "/sys/class/net/$candidate" && "$(cat /sys/class/net/$candidate/operstate 2>/dev/null)" == "up" ]]; then
|
|
IFACE="$candidate"; TYPE="eth"; break
|
|
fi
|
|
done
|
|
if [[ -z "$IFACE" ]]; then
|
|
for candidate in wlp8s0 wlp0s20f3 wlan0; do
|
|
if [[ -d "/sys/class/net/$candidate" && "$(cat /sys/class/net/$candidate/operstate 2>/dev/null)" == "up" ]]; then
|
|
IFACE="$candidate"; TYPE="wifi"; break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [[ -z "$IFACE" ]]; then
|
|
echo '{"text":" déco","tooltip":"Déconnecté","class":"disconnected"}'
|
|
exit 0
|
|
fi
|
|
|
|
RX_NOW=$(cat "/sys/class/net/$IFACE/statistics/rx_bytes" 2>/dev/null || echo 0)
|
|
TX_NOW=$(cat "/sys/class/net/$IFACE/statistics/tx_bytes" 2>/dev/null || echo 0)
|
|
NOW=$(date +%s%N)
|
|
|
|
if [[ -f "$STATE_FILE" ]]; then
|
|
read -r RX_PREV TX_PREV TIME_PREV < "$STATE_FILE"
|
|
ELAPSED=$(( (NOW - TIME_PREV) / 1000000 )) # ms
|
|
if (( ELAPSED > 0 )); then
|
|
DOWN_BPS=$(( (RX_NOW - RX_PREV) * 1000 / ELAPSED ))
|
|
UP_BPS=$(( (TX_NOW - TX_PREV) * 1000 / ELAPSED ))
|
|
else
|
|
DOWN_BPS=0; UP_BPS=0
|
|
fi
|
|
else
|
|
DOWN_BPS=0; UP_BPS=0
|
|
fi
|
|
|
|
echo "$RX_NOW $TX_NOW $NOW" > "$STATE_FILE"
|
|
|
|
# Formatage humain
|
|
human() {
|
|
local B=$1
|
|
if (( B >= 1073741824 )); then LC_ALL=C awk "BEGIN{printf \"%.1fG\", $B/1073741824}"
|
|
elif (( B >= 1048576 )); then LC_ALL=C awk "BEGIN{printf \"%.1fM\", $B/1048576}"
|
|
elif (( B >= 1024 )); then LC_ALL=C awk "BEGIN{printf \"%.0fK\", $B/1024}"
|
|
else echo "${B}B"
|
|
fi
|
|
}
|
|
|
|
DOWN_H=$(human $DOWN_BPS)
|
|
UP_H=$(human $UP_BPS)
|
|
RX_TOTAL=$(human $RX_NOW)
|
|
TX_TOTAL=$(human $TX_NOW)
|
|
|
|
ICON_DOWN=""; ICON_UP=""
|
|
[[ "$TYPE" == "wifi" ]] && ICON_NET="" || ICON_NET=""
|
|
|
|
TEXT="${ICON_DOWN} ${DOWN_H}/s ${ICON_UP} ${UP_H}/s"
|
|
TOOLTIP="${ICON_NET} ${IFACE}\n${ICON_DOWN} ${DOWN_H}/s ${ICON_UP} ${UP_H}/s\n\n Total reçu : ${RX_TOTAL}\n Total envoyé : ${TX_TOTAL}"
|
|
|
|
printf '{"text":"%s","tooltip":"%s","class":"%s"}\n' "$TEXT" "$TOOLTIP" "$TYPE"
|