mirror of https://gitlab.com/dabruh/dotfiles.git
50 lines
1.2 KiB
Bash
Executable File
50 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# battmon, the battery monitor 🦇
|
|
|
|
BAT_LEVEL_WARN=${BAT_LEVEL_WARN:=20}
|
|
BAT_LEVEL_CRITICAL=${BAT_LEVEL_CRITICAL:=10}
|
|
|
|
function _acpib() {
|
|
acpi -b | grep -Fv ' 0%'
|
|
}
|
|
|
|
function isDischarging() {
|
|
[[ "$(_acpib)" == *"Discharging"* ]] && echo true || echo false
|
|
}
|
|
|
|
function getLevel() {
|
|
_acpib | sed -ne 's/.* [0-9].* \([0-9]*\)%.*/\1/p'
|
|
}
|
|
|
|
function getLevelMessage() {
|
|
echo "The battery level is $(getLevel)%"
|
|
}
|
|
|
|
function levelIsWarn() {
|
|
[[ $(getLevel) -le $BAT_LEVEL_WARN ]] && echo true || echo false
|
|
}
|
|
|
|
function levelIsCritical() {
|
|
[[ $(getLevel) -le $BAT_LEVEL_CRITICAL ]] && echo true || echo false
|
|
}
|
|
|
|
if ! [[ $(_acpib | wc -l) -gt 0 ]]; then
|
|
echo "No batteries installed."
|
|
exit 0
|
|
fi
|
|
|
|
while true; do
|
|
echo "$(date --iso-8601=seconds):$(getLevel)"
|
|
if eval "$(isDischarging)"; then
|
|
if eval "$(levelIsCritical)"; then
|
|
i3-nagbar -t warning -m "$(getLevelMessage) which is below the critical level of $BAT_LEVEL_CRITICAL%. The computer will be suspended in 30 seconds unless charged."
|
|
sleep 30
|
|
eval "$(levelIsCritical)" && systemctl suspend
|
|
elif eval "$(levelIsWarn)"; then
|
|
notify-send "$(getLevelMessage)"
|
|
fi
|
|
fi
|
|
sleep 3
|
|
done
|