Files
infra/dotfiles/desktop/.config/i3/scripts/i3status-wrapper.sh
Fabio Scotto di Santolo 31c17c95c1 Minimal i3 setup
2026-03-15 22:00:35 +01:00

95 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
battery_json() {
local total_now=0
local total_full=0
local overall_status=""
local now full status bat capacity icon color
shopt -s nullglob
for bat in /sys/class/power_supply/BAT*; do
[[ -d "$bat" ]] || continue
if [[ -r "$bat/energy_now" && -r "$bat/energy_full" ]]; then
now=$(<"$bat/energy_now")
full=$(<"$bat/energy_full")
elif [[ -r "$bat/charge_now" && -r "$bat/charge_full" ]]; then
now=$(<"$bat/charge_now")
full=$(<"$bat/charge_full")
else
continue
fi
status=$(<"$bat/status")
(( total_now += now ))
(( total_full += full ))
case "$status" in
Charging)
overall_status="Charging"
;;
Discharging)
[[ "$overall_status" != "Charging" ]] && overall_status="Discharging"
;;
Full)
[[ -z "$overall_status" ]] && overall_status="Full"
;;
*)
[[ -z "$overall_status" ]] && overall_status="$status"
;;
esac
done
(( total_full > 0 )) || return 1
capacity=$(( 100 * total_now / total_full ))
case "$overall_status" in
Charging) icon="⚡" ;;
Discharging) icon="🔋" ;;
Full) icon="✔" ;;
*) icon="?" ;;
esac
if (( capacity <= 15 )); then
color="#ff5555"
elif (( capacity <= 30 )); then
color="#f1fa8c"
else
color="#ffffff"
fi
printf '{"full_text":"%s %s%%","name":"battery","color":"%s"}' \
"$icon" "$capacity" "$color"
}
i3status | while IFS= read -r line; do
case "$line" in
'{"version":'* | '[')
printf '%s\n' "$line"
;;
,*)
batt="$(battery_json)"
if [[ -n "$batt" ]]; then
line="${line#,}"
printf ',[%s,%s\n' "$batt" "${line#\[}"
else
printf '%s\n' "$line"
fi
;;
\[*)
batt="$(battery_json)"
if [[ -n "$batt" ]]; then
printf '[%s,%s\n' "$batt" "${line#\[}"
else
printf '%s\n' "$line"
fi
;;
*)
printf '%s\n' "$line"
;;
esac
done