#!/bin/sh
# Prints all batteries, their percentage remaining and a Nerd Font icon
# corresponding to charge status and level.
case $BLOCK_BUTTON in
3) notify-send " Battery module" ": full
: discharging
: charging
: not charging
: empty
: battery very low!
- Scroll to change adjust xbacklight." ;;
4) xbacklight -inc 10 ;;
5) xbacklight -dec 10 ;;
6) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;;
esac
# Loop through all attached batteries and format the info. Match by type
# rather than a BAT?* name glob so Asahi's "macsmc-battery" is picked up too.
for battery in /sys/class/power_supply/*; do
[ -r "$battery/type" ] && [ "$(cat "$battery/type")" = "Battery" ] || continue
# If non-first battery, print a space separator.
[ -n "${capacity+x}" ] && printf " "
# Sets up the status and capacity
capacity="$(cat "$battery/capacity" 2>&1)"
charging_status="$(cat "$battery/status" 2>&1)"
case "$charging_status" in
"Full") status="" ;;
"Charging") status="" ;;
"Not charging") status="" ;;
"Discharging")
if [ "$capacity" -ge 95 ]; then
status=""
elif [ "$capacity" -ge 65 ]; then
status=""
elif [ "$capacity" -ge 40 ]; then
status=""
elif [ "$capacity" -ge 25 ]; then
status=""
elif [ "$capacity" -ge 10 ]; then
status=""
elif [ "$capacity" -ge 5 ]; then
status=""
else
status=""
fi
;;
"Unknown") status="" ;;
*) exit 1 ;;
esac
# Will make a warn variable if discharging and low
[ "$charging_status" = "Discharging" ] && [ "$capacity" -le 25 ] && warn=""
# Low-battery notifications to dunst at 20/10/5%. State file avoids
# re-notifying every refresh; only fires once per band while discharging.
statefile="${XDG_CACHE_HOME:-$HOME/.cache}/sb-battery-band"
if [ "$capacity" -le 5 ]; then band=5
elif [ "$capacity" -le 10 ]; then band=10
elif [ "$capacity" -le 20 ]; then band=20
else band=0; fi
prevband=$(cat "$statefile" 2>/dev/null) || prevband=0
if [ "$charging_status" = "Discharging" ] && [ "$band" -ne 0 ] && [ "$band" != "$prevband" ]; then
case "$band" in
5) notify-send -u critical " Battery critical" "$capacity% remaining -- plug in now" ;;
10) notify-send -u critical " Battery very low" "$capacity% remaining" ;;
20) notify-send -u normal " Battery low" "$capacity% remaining" ;;
esac
fi
printf '%s' "$band" > "$statefile" 2>/dev/null
# Prints the info
printf "%s%s %d%%" "$status" "$warn" "$capacity"; unset warn
done && printf "\\n"