#!/usr/bin/env bash # Send a notification if battery is low, change status in info file accordingly notify_low () { # Battery isn't much but is charging (don't notify) [ "$status" = "on-line" ] && return # Battery critically low if [ "$capacity" -le 10 ] && ! grep -q critically-low "$lowinfo"; then notify-send -i "$HOME/.config/icons/critical-battery.png" -u critical "Battery critically low!" echo critically-low >"$lowinfo" # Battery is low elif [ "$capacity" -le 20 ] && ! grep -q low "$lowinfo"; then notify-send -i "$HOME/.config/icons/low-battery.png" -t 5500 "Battery low!" echo low >"$lowinfo" fi } status="$(apm | grep -E "AC Line status:" | sed -n -e 's/^.*AC Line status: //p')" capacity="$(apm | grep -E "Remaining battery life:" | head -1 | sed -n -e 's/^.*Remaining battery life: //p' | sed 's/.$//')" # Get the low battery status from file ~/.cache/battery-low-status lowinfo="$HOME/.cache/battery-low-status" [ ! -e "$lowinfo" ] && touch "$lowinfo" case $1 in left-click) ;; *) # Set charging icon and capacity icon [ "$status" = "on-line" ] && charging_icon=" " || charging_icon="" [ "$capacity" -gt 100 ] && capacity=100 if [ "$capacity" -lt 15 ]; then capacity_icon=' ' elif [ "$capacity" -lt 40 ]; then capacity_icon=' ' elif [ "$capacity" -lt 60 ]; then capacity_icon=' ' elif [ "$capacity" -lt 90 ]; then capacity_icon=' ' else capacity_icon=' ' fi # Report low battery [ "$capacity" -le 20 ] && notify_low # Reset low battery information in these cases { [ "$capacity" -gt 20 ] || [ "$status" = "Charging" ]; } && [ -n "$(cat "$lowinfo")" ] && echo "" >"$lowinfo" printf "%s%s%d%%\n" "$charging_icon" "$capacity_icon" "$capacity" ;; esac