From 659b7407d53511ef6260f34977c6f8b0011eaf44 Mon Sep 17 00:00:00 2001 From: ooks-io Date: Mon, 4 Sep 2023 12:15:15 +1200 Subject: [PATCH] add: battery notify script --- home/ooks/ookst480s.nix | 1 - .../ooks/opt/desktop/notify/batterynotify.nix | 86 ------------------- system/common/opt/batterynotify.nix | 51 +++++++++++ system/ookst480s/ookst480s.nix | 5 ++ 4 files changed, 56 insertions(+), 87 deletions(-) delete mode 100644 home/ooks/opt/desktop/notify/batterynotify.nix create mode 100644 system/common/opt/batterynotify.nix diff --git a/home/ooks/ookst480s.nix b/home/ooks/ookst480s.nix index c2ef5fd..18aa6de 100644 --- a/home/ooks/ookst480s.nix +++ b/home/ooks/ookst480s.nix @@ -6,7 +6,6 @@ ./opt/shell ./opt/desktop/hyprland ./standard - ./opt/desktop/notify/batterynotify.nix ]; colorscheme = inputs.nix-colors.colorSchemes.everforest; diff --git a/home/ooks/opt/desktop/notify/batterynotify.nix b/home/ooks/opt/desktop/notify/batterynotify.nix deleted file mode 100644 index d7d6a5f..0000000 --- a/home/ooks/opt/desktop/notify/batterynotify.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ config, lib, pkgs, ... }: - -let - batteryNotifyScript = pkgs.writeShellScriptBin "battery-notify" '' - #!/bin/sh - - BATTERY_PATH="/sys/class/power_supply/BAT0/capacity" - NOTIFIED_PATH="/tmp/battery_notified" - - if [ ! -f $BATTERY_PATH ]; then - echo "Battery not found!" - exit 1 - fi - - BATTERY_PERCENT=$(cat $BATTERY_PATH) - - notify_battery() { - level="$1" - icon="$2" - notify-send -a bat-notify $icon $level%" - } - - if [ ! -f $NOTIFIED_PATH ]; then - touch $NOTIFIED_PATH - echo "100" > $NOTIFIED_PATH - fi - - LAST_NOTIFIED=$(cat $NOTIFIED_PATH) - - case $BATTERY_PERCENT in - 75) - [ "$LAST_NOTIFIED" -gt "75" ] && notify_battery "75" "" && echo "75" > $NOTIFIED_PATH - ;; - 50) - [ "$LAST_NOTIFIED" -gt "50" ] && notify_battery "50" "" && echo "50" > $NOTIFIED_PATH - ;; - 25) - [ "$LAST_NOTIFIED" -gt "25" ] && notify_battery "25" "" && echo "25" > $NOTIFIED_PATH - ;; - 10) - [ "$LAST_NOTIFIED" -gt "10" ] && notify_battery "10" "" && echo "10" > $NOTIFIED_PATH - ;; - 5) - [ "$LAST_NOTIFIED" -gt "5" ] && notify_battery "5" "" && echo "5" > $NOTIFIED_PATH - ;; - esac - ''; -in - -{ - options = { - services.battery-notify.enable = lib.mkEnableOption "Battery Notification Service"; - }; - - config = { - services.battery-notify.enable = true; - }; - - config = lib.mkIf config.services.battery-notify.enable { - - systemd.user.services.battery-notify = { - description = "Battery Notification Service"; - script = "${batteryNotifyScript}/bin/battery-notify"; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = "yes"; - }; - }; - - systemd.user.timers.battery-notify = { - description = "Timer for the Battery Notification Service"; - wantedBy = [ "timers.target" ]; - after = [ "network.target" ]; - requires = [ "battery-notify.service" ]; - partOf = [ "battery-notify.service" ]; - timerConfig = { - OnBootSec = "1m"; - OnUnitActiveSec = "1m"; - }; - }; - - - }; - -} - diff --git a/system/common/opt/batterynotify.nix b/system/common/opt/batterynotify.nix new file mode 100644 index 0000000..961ccf3 --- /dev/null +++ b/system/common/opt/batterynotify.nix @@ -0,0 +1,51 @@ +{ config, lib, pkgs, ... }: + +let + conf = config.modules.battery-notify; +in { + + options.modules.battery-notify = with lib; { + enable = mkEnableOption "battery-notify"; + }; + + config = lib.mkIf conf.enable { + systemd.user.services.battery-notify = { + wantedBy = [ "graphical-session.target" ]; + script = '' + + batval=$(cat /sys/class/power_supply/BAT0/capacity) + tempbatval="/tmp/bat_val_$batval" + + if [ ! -f "$tempbatval" ]; then + case "$batval" in + 75|50|25|10|5) + ${pkgs.libnotify}/bin/notify-send -a bat-notify "battery:" "$batval" + touch "tempbatval" + ;; + esac + fi + + for level in 75 50 25 10 5; do + if [ "$batval" -gt "$level" ]; then + rm -f "/tmp/bat_val_$level" + fi + done + ''; + + + }; + + + systemd.user.timers.battery-notify = { + wantedBy = [ "timers.target" ]; + after = [ "basic.target" ]; + requires = [ "battery-notify.service" ]; + partOf = [ "battery-notify.service" ]; + timerConfig = { + OnBootSec = "1m"; + OnUnitActiveSec = "1m"; + }; + }; + }; + +} diff --git a/system/ookst480s/ookst480s.nix b/system/ookst480s/ookst480s.nix index aa2abb3..7bf86df 100644 --- a/system/ookst480s/ookst480s.nix +++ b/system/ookst480s/ookst480s.nix @@ -16,6 +16,7 @@ ../common/user/ooks ../common/global ../common/opt/bluetooth.nix + ../common/opt/batterynotify.nix ]; @@ -99,6 +100,10 @@ }; }; +# Battery notification +# ------------------------------------------------------------------------------------------------- + + modules.battery-notify.enable = true; # System Version # -------------------------------------------------------------------------------------------------