2024-04-13 20:18:21 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
BAT=$(echo /sys/class/power_supply/BAT*) # only supports single-battery systems
|
|
|
|
BAT_STATUS="$BAT/status"
|
|
|
|
BAT_CAP="$BAT/capacity"
|
|
|
|
|
|
|
|
POWER_SAVE_PERCENT=50 # Enter power-save mode if on bat and below this capacity
|
|
|
|
|
2024-04-13 23:12:48 +00:00
|
|
|
HAS_PERFORMANCE="$(powerprofilesctl list | grep "performance" || true)" # the || true ignores grep failing with non-zero code
|
2024-04-13 20:18:21 +00:00
|
|
|
|
|
|
|
# monitor loop
|
|
|
|
prev=0
|
|
|
|
while true; do
|
|
|
|
# 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
|