Files
hypr/scripts/battery-notify.sh
T

48 lines
1.6 KiB
Bash

#!/usr/bin/env bash
# Background loop to monitor battery status and trigger dunstify on low power.
while true; do
if [ ! -d /sys/class/power_supply/BAT0 ]; then
sleep 60
continue
fi
STATUS=$(cat /sys/class/power_supply/BAT0/status 2>/dev/null)
# Using the native kernel capacity file instead of relying on ibam
CAPACITY=$(cat /sys/class/power_supply/BAT0/capacity 2>/dev/null)
if [ -z "$CAPACITY" ]; then
sleep 60
continue
fi
# Trigger notification at 5% or below
if [ "$STATUS" == "Discharging" ] && [ "$CAPACITY" -le 5 ]; then
if [ ! -f "/run/user/${UID}/battery_low" ]; then
logger "Low power! Triggering notification...."
# -p returns the ID so we can close it later
NOTIF_ID=$(dunstify --urgency=critical \
-p \
--icon=/usr/share/icons/breeze-dark/emblems/16/emblem-warning.svg \
"LOW BATTERY!" \
"Battery level is at ${CAPACITY}%, plug power quick!")
echo "$NOTIF_ID" > "/run/user/${UID}/battery_low"
fi
# Clear the notification if we plug back in and rise above 5%
elif [ "$STATUS" == "Charging" ] && [ "$CAPACITY" -gt 5 ]; then
if [ -f "/run/user/${UID}/battery_low" ]; then
logger "Power reconnected and above 5 percent, clearing notification state."
NOTIF_ID=$(cat "/run/user/${UID}/battery_low")
if [ -n "$NOTIF_ID" ]; then
dunstify --close=$NOTIF_ID
fi
rm -f "/run/user/${UID}/battery_low"
fi
fi
sleep 60
done