mirror of
https://github.com/ItsDrike/dotfiles.git
synced 2024-12-26 13:14:35 +00:00
57 lines
1.4 KiB
Bash
Executable file
57 lines
1.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo "You must run this script as root"
|
|
exit 1
|
|
fi
|
|
|
|
BAT=$(echo /sys/class/power_supply/BAT*) # only supports single-battery systems
|
|
BAT_STATUS="$BAT/status"
|
|
BAT_CAP="$BAT/capacity"
|
|
OVERRIDE_FLAG="/tmp/power-monitor-override"
|
|
|
|
POWER_SAVE_PERCENT=50 # Enter power-save mode if on bat and below this capacity
|
|
|
|
HAS_PERFORMANCE="$(powerprofilesctl list | grep "performance" || true)" # the || true ignores grep failing with non-zero code
|
|
|
|
# monitor loop
|
|
prev=0
|
|
while true; do
|
|
# check if override is set
|
|
if [ -f "$OVERRIDE_FLAG" ]; then
|
|
echo "Override flag set, waiting for release"
|
|
inotifywait -qq "$OVERRIDE_FLAG"
|
|
continue
|
|
fi
|
|
|
|
# read the current state
|
|
status="$(cat "$BAT_STATUS")"
|
|
capacity="$(cat "$BAT_CAP")"
|
|
|
|
if [[ $status == "Discharging" ]]; then
|
|
if [[ $capacity -le $POWER_SAVE_PERCENT ]]; then
|
|
profile="power-saver"
|
|
else
|
|
profile="balanced"
|
|
fi
|
|
else
|
|
if [[ -n $HAS_PERFORMANCE ]]; then
|
|
profile="performance"
|
|
else
|
|
profile="balanced"
|
|
fi
|
|
fi
|
|
|
|
# Set the new profile
|
|
if [[ "$profile" != "$prev" ]]; then
|
|
echo -en "Setting power profile to ${profile}\n"
|
|
powerprofilesctl set $profile
|
|
prev=$profile
|
|
fi
|
|
|
|
# wait for changes in status or capacity files
|
|
# i.e. for the next power change event
|
|
inotifywait -qq "$BAT_STATUS" "$BAT_CAP"
|
|
done
|