feat: add battery conservation mode with Waybar toggle
Laptops with charge_control_end_threshold support get a click-to-toggle on the battery module (80% ↔ 100%). A ♥ icon appears when conservation is active, hidden when inactive. State persists across reboots via systemd oneshot service. udev rule grants wheel group write access so no sudo is needed for toggling.
This commit is contained in:
1 parent
2d2d3ca92f
commit
1ebe0fac2b
8 files changed
+113
-8
No files matched your search
Executable
+28
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/bash
|
||||
# ABOUTME: Toggles battery conservation mode between 80% and 100% charge limit.
|
||||
# ABOUTME: Writes to sysfs (immediate) and state file (persistence across reboots).
|
||||
|
||||
THRESHOLD_FILE="/sys/class/power_supply/BAT0/charge_control_end_threshold"
|
||||
STATE_DIR="/var/lib/moonarch"
|
||||
STATE_FILE="${STATE_DIR}/batsaver-threshold"
|
||||
CONSERVATION_LIMIT=80
|
||||
|
||||
[[ -f "$THRESHOLD_FILE" ]] || exit 1
|
||||
|
||||
CURRENT=$(cat "$THRESHOLD_FILE")
|
||||
|
||||
if [[ "$CURRENT" -le "$CONSERVATION_LIMIT" ]]; then
|
||||
NEW=100
|
||||
else
|
||||
NEW="$CONSERVATION_LIMIT"
|
||||
fi
|
||||
|
||||
# Apply immediately
|
||||
echo "$NEW" > "$THRESHOLD_FILE" || exit 1
|
||||
|
||||
# Persist for next boot
|
||||
mkdir -p "$STATE_DIR"
|
||||
echo "$NEW" > "$STATE_FILE"
|
||||
|
||||
# Signal Waybar to refresh the batsaver module (SIGRTMIN+9)
|
||||
pkill -RTMIN+9 waybar
|
||||
Executable
+19
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/bash
|
||||
# ABOUTME: Waybar module showing battery conservation mode status.
|
||||
# ABOUTME: Outputs heart icon when active (threshold ≤80), empty when inactive.
|
||||
|
||||
THRESHOLD_FILE="/sys/class/power_supply/BAT0/charge_control_end_threshold"
|
||||
|
||||
# No battery threshold support → no output → Waybar hides module
|
||||
[[ -f "$THRESHOLD_FILE" ]] || exit 0
|
||||
|
||||
THRESHOLD=$(cat "$THRESHOLD_FILE")
|
||||
|
||||
if [[ "$THRESHOLD" -le 80 ]]; then
|
||||
jq --compact-output -n \
|
||||
--arg text "♥" \
|
||||
--arg tooltip "Battery Conservation: ON (limit ${THRESHOLD}%)" \
|
||||
--arg class "on" \
|
||||
'{text: $text, tooltip: $tooltip, class: $class}'
|
||||
fi
|
||||
# Threshold > 80 → no output → Waybar hides module
|
||||
Reference in new issue
Block a user