diff --git a/bin/omarchy-battery-monitor b/bin/omarchy-battery-monitor new file mode 100755 index 0000000..eb26d0f --- /dev/null +++ b/bin/omarchy-battery-monitor @@ -0,0 +1,32 @@ +#!/bin/bash + +# Omarchy Battery Monitor +# One-shot script that checks battery and sends notification if needed +# Designed to be run by systemd timer every 30 seconds + +BATTERY_THRESHOLD=10 +NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified" + +get_battery_percentage() { + upower -i $(upower -e | grep 'BAT') | grep -E "percentage" | grep -o '[0-9]\+%' | sed 's/%//' +} + +get_battery_state() { + upower -i $(upower -e | grep 'BAT') | grep -E "state" | awk '{print $2}' +} + +send_notification() { + notify-send -u critical "Battery Low" "Battery level is at ${1}%! Please plug in your charger." -i battery-caution +} + +BATTERY_LEVEL=$(get_battery_percentage) +BATTERY_STATE=$(get_battery_state) + +if [[ "$BATTERY_STATE" == "discharging" && "$BATTERY_LEVEL" -le "$BATTERY_THRESHOLD" ]]; then + if [[ ! -f "$NOTIFICATION_FLAG" ]]; then + send_notification "$BATTERY_LEVEL" + touch "$NOTIFICATION_FLAG" + fi +else + rm -f "$NOTIFICATION_FLAG" +fi diff --git a/config/systemd/user/omarchy-battery-monitor.service b/config/systemd/user/omarchy-battery-monitor.service new file mode 100644 index 0000000..3c47283 --- /dev/null +++ b/config/systemd/user/omarchy-battery-monitor.service @@ -0,0 +1,8 @@ +[Unit] +Description=Omarchy Battery Monitor Check +After=graphical-session.target + +[Service] +Type=oneshot +ExecStart=%h/.local/share/omarchy/bin/omarchy-battery-monitor +Environment=DISPLAY=:0 \ No newline at end of file diff --git a/config/systemd/user/omarchy-battery-monitor.timer b/config/systemd/user/omarchy-battery-monitor.timer new file mode 100644 index 0000000..dc43763 --- /dev/null +++ b/config/systemd/user/omarchy-battery-monitor.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Omarchy Battery Monitor Timer +Requires=omarchy-battery-monitor.service + +[Timer] +OnBootSec=1min +OnUnitActiveSec=30sec +AccuracySec=10sec + +[Install] +WantedBy=timers.target \ No newline at end of file diff --git a/install/power.sh b/install/power.sh index c7f458f..0ae0c0c 100644 --- a/install/power.sh +++ b/install/power.sh @@ -5,6 +5,9 @@ yay -S --noconfirm power-profiles-daemon if ls /sys/class/power_supply/BAT* &>/dev/null; then # This computer runs on a battery powerprofilesctl set balanced || true + + # Enable battery monitoring timer for low battery notifications + systemctl --user enable --now omarchy-battery-monitor.timer || true else # This computer runs on power outlet powerprofilesctl set performance || true