{ writeShellApplication , libnotify , systemd }: writeShellApplication { name = "custom-batterynotify"; runtimeInputs = [ libnotify # provides notify-send systemd # provides systemctl ]; text = '' set -euo pipefail LOW="''${BATTERY_LOW_THRESHOLD:-20}" CRITICAL="''${BATTERY_CRITICAL_THRESHOLD:-5}" FULL="''${BATTERY_FULL_THRESHOLD:-95}" INTERVAL="''${BATTERY_INTERVAL:-30}" ACTION="''${BATTERY_CRITICAL_ACTION:-systemctl suspend}" notify() { notify-send -a "Battery" -u "$1" "$2" "$3" } get_info() { total=0 count=0 for bat in /sys/class/power_supply/BAT*; do [ -f "$bat/capacity" ] || continue capacity=$(<"$bat/capacity") status=$(<"$bat/status") total=$((total + capacity)) count=$((count + 1)) done [ "$count" -gt 0 ] || exit 0 percentage=$((total / count)) } last_state="" while true; do get_info if [[ "$status" == "Discharging" && "$percentage" -le "$CRITICAL" ]]; then notify critical "Battery Critically Low" "$percentage% — suspending." $ACTION elif [[ "$status" == "Discharging" && "$percentage" -le "$LOW" ]]; then if [[ "$last_state" != "low" ]]; then notify normal "Battery Low" "$percentage% remaining." last_state="low" fi elif [[ "$status" != "Discharging" && "$percentage" -ge "$FULL" ]]; then if [[ "$last_state" != "full" ]]; then notify normal "Battery Full" "$percentage% — unplug charger." last_state="full" fi else last_state="" fi sleep "$INTERVAL" done ''; }