diff options
Diffstat (limited to '')
| -rwxr-xr-x | scripts/battery-watch.sh | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/scripts/battery-watch.sh b/scripts/battery-watch.sh new file mode 100755 index 0000000..dfff1cd --- /dev/null +++ b/scripts/battery-watch.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +PID_PATH="$HOME/.cache/my-battery-watcher.pid"; +[[ ! -f "$PID_PATH" ]] && touch $PID_PATH; + +battery_component() { cat "/sys/class/power_supply/BAT0/$1"; } + +get_level() { battery_component capacity; } +get_state() { battery_component status; } + +LOW_BATTERY="30"; +CRITICAL_BATTERY="10"; + +DELAY=1; +LOW_DELAY=240; +CRITICAL_DELAY=60; + +oldpid=$(cat $PID_PATH); +cmd=${1:-"start"}; + +if [[ ! -z "$oldpid" ]] || [[ "$cmd" == "stop" ]]; then + kill $oldpid; +fi; + +# :: Min -> Max -> Number -> Bool +between() { test "$3" -gt "$1" && test "$3" -le "$2"; } + +if [[ "$cmd" == "start" ]]; then + while true; do + battery_level=$(get_level); + state=$(get_state); + + if [[ "$state" == "Discharging" ]]; then + if (between $CRITICAL_BATTERY $LOW_BATTERY $battery_level); then + notify-send "Please charge this shit. Battery is at $battery_level%" -u normal; + sleep $LOW_DELAY; + fi + + if (between 0 $CRITICAL_BATTERY $battery_level); then + notify-send "HOLY SHIT DUDE. I'M DYING. Battery is at $battery_level%" -u critical; + sleep $CRITICAL_DELAY; + fi + fi + + sleep $DELAY; + done & + + echo $! > $PID_PATH; +fi; |
