forked from stagnation/i3-battery-warning
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathi3-batwarn
executable file
·87 lines (75 loc) · 2.15 KB
/
i3-batwarn
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/bin/bash
#############################################
# This is a simple battery warning script. #
# It uses i3's nagbar to display warnings. #
# #
# @author agribu #
#############################################
BATTERY="$(echo '/sys/class/power_supply/BAT'?)" # Battery file
WARNING_THRESHOLD='30' # Set energy limit in percent, where warning should be displayed
EMERGENCY_THRESHOLD='15' # Set energy limit in percent, where emergency should be displayed
LOCK_FILE='/var/lock/battery_state.lock' # Lock file location
PID_FILE="/run/user/${UID}/nagbar.pid" # Save pid for killing later
# get battery status
get_status() {
cat "${BATTERY}/status"
}
# get current capacity
get_percentage() {
cat "${BATTERY}/capacity"
}
is_nagbar_active() {
[ -s "${PID_FILE}" ] && ps -e | grep "$(cat "${PID_FILE}")" | grep -q "i3-nagbar"
}
display_nagbar() {
if is_nagbar_active ; then
echo "pidfile in order, nothing to do"
else
rm -f "${PID_FILE}"
/usr/bin/i3-nagbar -t "${1}" -m "${2}" &
echo "$!" > "${PID_FILE}"
fi
}
display_emergency() {
display_nagbar 'error' "Battery almost depleted ($(get_percentage)%)! Find charger quickly!"
}
display_warning() {
display_nagbar 'warning' "Low battery ($(get_percentage)%)! Find charger!"
}
kill_nagbar() {
if is_nagbar_active ; then
kill "$(cat "${PID_FILE}")"
fi
if is_nagbar_active ; then
kill -9 "$(cat "${PID_FILE}")"
fi
rm -f "${PID_FILE}"
}
await_status() {
# We'll just assume the charge won't get higher unless you plug in
while [ "$(get_status)" != "Charging" ] ; do
if [ -n "${1}" ] && [ "$(get_percentage)" -lt "${1}" ] ; then
# Let's not do that again! Empty up ${1}
shift
kill_nagbar
display_emergency
fi
sleep 2
done
kill_nagbar
}
main() {
if [ "$(get_status)" = "Discharging" ] ; then
if [ "$(get_percentage)" -lt "${EMERGENCY_THRESHOLD}" ] ; then
display_emergency
await_status &
elif [ "$(get_percentage)" -lt "${WARNING_THRESHOLD}" ] ; then
display_warning
await_status "${EMERGENCY_THRESHOLD}" &
fi
fi
}
(
flock -x -w 10 200 && main || exit 1
) 200> "${LOCK_FILE}"
rm -f "${LOCK_FILE}"