diff --git a/nixos/home/desktop/hyprland/dependencies.nix b/nixos/home/desktop/hyprland/dependencies.nix index d924c67..5090d20 100644 --- a/nixos/home/desktop/hyprland/dependencies.nix +++ b/nixos/home/desktop/hyprland/dependencies.nix @@ -87,6 +87,134 @@ '') + (writeShellScriptBin "battery-notify" '' + # Configuration variables (with default values) + dock="''${BATTERY_NOTIFY_DOCK:-true}" + batterynotify_conf="$HYDE_STATE_HOME/staterc" + battery_full_threshold="''${BATTERY_NOTIFY_THRESHOLD_FULL:-100}" + battery_critical_threshold="''${BATTERY_NOTIFY_THRESHOLD_CRITICAL:-5}" + unplug_charger_threshold="''${BATTERY_NOTIFY_THRESHOLD_UNPLUG:-80}" + battery_low_threshold="''${BATTERY_NOTIFY_THRESHOLD_LOW:-20}" + timer="''${BATTERY_NOTIFY_TIMER:-120}" + notify="''${BATTERY_NOTIFY_NOTIFY:-1140}" + interval="''${BATTERY_NOTIFY_INTERVAL:-5}" + execute_critical="''${BATTERY_NOTIFY_EXECUTE_CRITICAL:-systemctl suspend}" + execute_low="''${BATTERY_NOTIFY_EXECUTE_LOW:-}" + execute_unplug="''${BATTERY_NOTIFY_EXECUTE_UNPLUG:-}" + execute_charging="''${BATTERY_NOTIFY_EXECUTE_CHARGING:-}" + execute_discharging="''${BATTERY_NOTIFY_EXECUTE_DISCHARGING:-}" + verbose=false + + # Display configuration info + config_info() { + cat </dev/null; then + echo "No battery detected. Exiting." + exit 0 + fi + } + + # Display verbose information + fn_verbose() { + if $verbose; then + echo "=============================================" + echo "Battery Status: $battery_status" + echo "Battery Percentage: $battery_percentage" + echo "=============================================" + fi + } + + # Handle battery notifications + notify_user() { + local urgency=$1 + local title=$2 + local message=$3 + notify-send -a "HyDE Power" -t 5000 -u "$urgency" "$title" "$message" + } + + # Get battery status and percentage + get_battery_info() { + local total_percentage=0 battery_count=0 + for battery in /sys/class/power_supply/BAT*; do + battery_status=$(<"$battery/status") + battery_percentage=$(<"$battery/capacity") + total_percentage=$((total_percentage + battery_percentage)) + battery_count=$((battery_count + 1)) + done + battery_percentage=$((total_percentage / battery_count)) + } + + # Check battery thresholds + check_thresholds() { + if [[ "$battery_percentage" -ge "$unplug_charger_threshold" && "$battery_status" != "Discharging" ]]; then + notify_user "NORMAL" "Battery Charged" "Battery is at $battery_percentage%. You can unplug the charger!" + elif [[ "$battery_percentage" -le "$battery_critical_threshold" ]]; then + notify_user "CRITICAL" "Battery Critically Low" "$battery_percentage% remaining. Executing critical action." + $execute_critical + elif [[ "$battery_percentage" -le "$battery_low_threshold" && "$battery_status" == "Discharging" ]]; then + notify_user "NORMAL" "Battery Low" "$battery_percentage% remaining. Connect the charger." + $execute_low + fi + } + + # Monitor battery status changes + monitor_battery() { + while :; do + get_battery_info + check_thresholds + sleep $interval + done + } + + # Main function + main() { + is_laptop + config_info + if $verbose; then + echo "Verbose Mode is ON." + fi + monitor_battery + } + + # Parse script arguments + case "$1" in + -i|--info) + config_info + exit 0 + ;; + -v|--verbose) + verbose=true + ;; + -h|--help|*) + cat <