diff --git a/.local/bin/statusbar/sb-battery b/.local/bin/statusbar/sb-battery index cbdce7c..cd8c050 100755 --- a/.local/bin/statusbar/sb-battery +++ b/.local/bin/statusbar/sb-battery @@ -28,28 +28,44 @@ do continue fi + # Critical low-battery notification at the "!" level (<=5% and discharging). + # Notify only once per discharge episode: a flag in /tmp suppresses repeats + # and is cleared the moment we stop discharging (plug in) or on reboot + # (since /tmp is wiped), so the next low event notifies again. + lowflag="/tmp/battery_low_notified_${battery##*/}" + if grep -q "Discharging" "$battery"/status; then + if [ "$capacity" -le 5 ] && [ ! -f "$lowflag" ]; then + notify-send -u critical "❗ Battery critically low" \ + "Battery at ${capacity}%. Plug in the laptop now." + touch "$lowflag" + fi + else + # Plugged in (charging / not charging / full): arm for the next episode. + rm -f "$lowflag" + fi + unset status status=$(sed "s/Not charging/🛑/" "$battery"/status) # Center picture around the actual capacity. # Displayable capacities: 0, 1/4, 1/2, 3/4, 1 -> intervall of length 25% centered around displaycategory # -> +- 12.5% for every level if grep -qE "(Discharging|Charging)" "$battery"/status; then - status= + status=" " [ "$capacity" -le 87 ] && - status="" + status=" " [ "$capacity" -le 63 ] && - status="" + status=" " [ "$capacity" -le 37 ] && - status="" + status=" " [ "$capacity" -le 13 ] && - status="" + status=" " [ "$capacity" -le 5 ] && - status="❗" + status=" ❗" if grep -q "Charging" "$battery"/status; then status="${status}🔌" fi fi - printf "%s \n" "$status" + printf "%s\n" "$status" else echo "Error. Capacity:$capacity" > /dev/stderr #if battery fails during reading, quit fi