You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.2 KiB
Fish

#!/usr/bin/env fish
# listen to battery state and warn on low battery
# read low battery state level from environment and fallback to a value of 8
set LOW 8
test -n "$BAT_CRITICAL_LEVEL" -a "$BAT_CRITICAL_LEVEL" -gt 0; and set LOW "$BAT_CRITICAL_LEVEL"
# read config from environment
set ALARM_TEMP 1000
test -z "$BAT_ALARM_TEMP" -a "$BAT_ALARM_TEMP" -gt 1000; and set ALARM_TEMP "$BAT_ALARM_TEMP"
# if we are currently below or above our LOW threshold
set isLow "false"
# print config
echo "Set up with LOW=$LOW and ALARM_TEMP=$ALARM_TEMP"
#echo "redshift="(which redshift)
function check_btry
set state (upower -i /org/freedesktop/UPower/devices/battery_BAT0 | rg "(percent|state)" | awk -F " " '{print $2}')
set charge (echo "$state[2]" | string replace "%" "")
set state "$state[1]"
set c_low (test "$charge" -lt "$LOW"; and echo true; or echo false)
if test $c_low = true; and test $state = discharging; and test $isLow != true
echo "transitioning to low battery state"
low_btry_action
set isLow true
else if test ! $state = discharging; and test $isLow != false
echo "transtioning to high bat state (charger)"
set isLow false
high_btry_action
else if test $c_low = false; and test $isLow != false
echo "transitioning to high bat state (magic)"
set isLow false
high_btry_action
end
end
function low_btry_action
# kill redshift job and set fixed alarm temp
if jobs -q
echo killing redshift with pid (jobs -p)
kill (jobs -p)
end
redshift -P -O "$ALARM_TEMP"
end
function high_btry_action
# start redshift again
redshift -P -l 50.11552:8.68417 -t 5500:2500 &
end
if test "$argv[1]" = once
check_btry
set state (upower -i /org/freedesktop/UPower/devices/battery_BAT0 | rg "(percent|state)" | awk -F " " '{print $2}')
set charge (echo "$state[2]" | string replace "%" "")
set state "$state[1]"
echo "$charge : $state"
else
#set percent (upower -i /org/freedesktop/UPower/devices/battery_BAT0 | rg "(percent)" | awk -F " " '{print $2}' | string replace "%" "")
# set initial isLow variable to the opposite of what it's supposed to be to trigger a
#test "$percent" -lt "$LOW"; and set isLow "false"
set isLow unknown
sleep 5
while true
check_btry
sleep (test $isLow = true; and echo 1; or echo 60)
end
end