summaryrefslogtreecommitdiff
path: root/.a/battery-status.sh
blob: d446fcd437fa0dbd3b3bbf85f469ab610b16bff8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/bash

# Check for dependencies
for comm in upower awk; do
	command -v upower >/dev/null 2>&1 || (echo "Error, missing command dependencies: $comm" && exit)
done

# Prepare battery informatoin
for bat in BAT0 BAT1; do
	upower -i "/org/freedesktop/UPower/devices/battery_$bat" > "/tmp/$bat"
	[ "$(awk '/native-path/{print $2}' "/tmp/$bat")" = '(null)' ] && continue

	bat_state="$(awk '/state/{print substr($2, 1, 1)}' "/tmp/$bat")"
	if   [ $bat_state = 'c' ]; then bat_power_ind=''
	elif [ $bat_state = 'd' ]; then bat_power_ind=''
	else                            bat_power_ind=''
	fi

	bat_per="$(awk '/percentage/{print strtonum($2)}' "/tmp/$bat")"
	# bat_per=$((bat_per * 5 / 4 - 25)) # compensation for failing battery

	[ $bat_state = 'd' ]                                                        \
	&& bat_time="$(awk '/time to empty/{print $4 substr($5, 1, 1)}' "/tmp/$bat")" \
	|| bat_time="$(awk '/time to full/ {print $4 substr($5, 1, 1)}' "/tmp/$bat")"

	echo -n " $bat_power_ind ${bat_per}% $bat_time"

	#
	# Notifications
	#

	command -v notify-send >/dev/null 2>&1 || exit
	[ ! -e "/tmp/bat_notif$bat" ] && touch "/tmp/bat_notif$bat"
	bat_notif="$(cat "/tmp/bat_notif$bat")"


	# Notify when battery is charged to 80%
	if [ $bat_state = 'c' ]; then
		if [ "$bat_notif" != 80 ] && [ $bat_per -ge 80 ]; then
			notify-send -u normal -i battery-charging -t 999999 "$bat at 80%"
			echo 80 > "/tmp/bat_notif$bat"
		fi

	# Notify when battery discharges to 5%, 10%, 15% and 20%
	elif [ $bat_state = 'd' ]; then
		for per in 5 10 15 20; do
			if [ "$bat_notif" = $per ]; then
				break
			elif [ $bat_per -le $per ]; then
				notify-send -u critical -i battery-low -t 999999 "$bat at ${per}%"
				echo $per > "/tmp/bat_notif$bat"
				break
			fi
		done

	# Notify when battery is full
	else
		if [ "$bat_notif" != 100 ]; then
			notify-send -u normal -i battery-full -t 999999 "$bat fully charged!"
			echo 100 > "/tmp/bat_notif$bat"
		fi
	fi
done
echo