mirror of
				https://github.com/ItsDrike/dotfiles.git
				synced 2025-11-04 01:16:35 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			56 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			56 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
 |