shithub: rc

ref: 1d259c06594034a05bb204bff8abca2564032258
dir: /bin/nopedog/

View raw version
#!/bin/rc
rfork n
if(! test -r /dev/battery){
	if(! mount -a '#s'/acpi /dev || ! test -r /dev/battery)
		exit 'no battery to hand'
}
# safer to assume that if one battery has dipped very low and we're not charging,
# either it has to be removed or replaced, or we're in a danger zone
# total capacity is taken from design capacity and ratio will be lower, as a
# precaution
awk -v 'user=$user' -v 'sys='^$sysname -v 'bat='-1 '
function alert(){
	wcmd = "\''label alert; " \
		"echo FAILURE IS IMMINENT; " \
		"while() play /lib/m/mamb/pripyat.evacuation.audio.opus\''"
	print "master 85" >"#A/volume"
	if("ls \''#s\''/rio." user ".* | sort -t. -k3,3n" | getline x > 0){
		for(i=1; i<=30; i++)
			if(system("mount " x " /n/c " i) == 0)	# how else???
				break;
		if(i > 30)
			exit "noperio"
		system("window -dx 120 -dy 200 -minx 0 -miny 0 " wcmd)
	}
}
NR == 1{ bat = $1; left = $3; cap = $4; chg = $12 == "charging" }
NR > 1{ bat = $1 > bat ? $1 : bat; left += $3; cap += $4; chg = chg || $12 == "charging" }
END{
	if(bat < 0 || chg)
		exit
	rem = left / cap
	if(NR > 1 && rem < 0.10 || NR == 1 && bat < 5)
		system("fshalt")
	else if(NR > 1 && rem < 0.16 || NR == 1 && bat < 17)
		alert()
}
' /dev/battery