mirror of
https://github.com/fscotto/infra.git
synced 2026-05-30 15:39:58 +00:00
95 lines
2.3 KiB
Bash
Executable File
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
|