mirror of
https://github.com/ItsDrike/dotfiles.git
synced 2024-11-14 12:17:17 +00:00
57 lines
1.4 KiB
Plaintext
57 lines
1.4 KiB
Plaintext
|
#!/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
|