aboutsummaryrefslogtreecommitdiffstats
path: root/org/lowbat.org
blob: a2fc8a5b9289600f8cbd61e9525b203e460b0b16 (plain)
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
#+TITLE: lowbat - lightweight low battery notifier

* Why lowbat?
   I've been using minimalist OS installations for work, personnal computing
and playing video games for a while now. I used [[https://www.archlinux.org/][Arch Linux]], I still use
[[https://gentoo.org/][Gentoo Linux]] - which is by far my favorite Linux distribution - as a desktop
OS, and now I am using [[https://www.freebsd.org/][FreeBSD]] on my workstation.

Those operating systems and distributions basically come with a kernel,
coreutils, a shell and that's pretty much it. Everything else has to be
installed manually. I love this philosophy, the simplicity behind it and the
fact that you know exactly what's on your system at any moment.

As window managers, I used [[http://dwm.suckless.org/][dwm]] for a while, and I am now using [[https://github.com/baskerville/bspwm][bspwm]]. They
are ultra-fast, very lightweight and do not bring extra bloatware to my systems.
I do not use a status bar as well, I like my applications to use the full screen
space available.

A big problem for me with this setup for me was that they do not come with some
kind of warning or notification system, like fancier desktop environments would,
when my laptop battery is low. That also was before I started using *Emacs*,
discovering the battery level indicator in the modeline. Ultimatly the
frustration was too important when the computer kept shutting down in
the middle of important work too many time. Then I decided to create *lowbat*
to cure this issue.

* History of lowbat
  It started as a very short ~dash~ shell (get [[https://github.com/tklauser/dash][dash]] here) script that was
working fine but I wanted to experiment a little bit with this. It turned into
a ~C++~ program, which is still the case for the GNU/Linux version.
Switching to FreeBSD, I exerimented again by turning it into an
~x64 assembly~ program, following the *Intel* syntax. In that way *lowbat* is
even more lightweight and consumes less battery power.
These days, I am rewriting it in the *AT&T* syntax.

* How it works
** libnotify lowbat
  The principle of *lowbat* is rather simple. When it's running in the
background, it checks every 4 minutes whether your battery is above 15%.
If that is the case, it sleeps for another 4 minutes. When your battery runs
bellow 15%, *lowbat* checks your battery level every 20 seconds as well as
sending you a *notification* using ~libnotify~. You can display live
notifications on your desktop using ~dunst~ for example, as well as many
other I'm sure.

#+CAPTION: A notification generated by lowbat, displayed by dunst
#+NAME: fig:lowbat-example
[[../img/lowbat-01.jpg]]

** espeak lowbat
   *lowbat* also has an option to send a custom voice message to the use
using ~espeak~. Very handy if you are not in front of your computer or
if you want to bring joy to this dramatic event.

** unknown lowbat
   Sadly, I wasn't able to test lowbat on machines with more that one
battery. My call is that it will only warn you for the /first/ battery,
but I can't be sure. Try it and tell me!

* Links to lowbat
   - GNU/Linux: [[https://github.com/JozanLeClerc/lowbat][lowbat's GitHub GNU/Linux repository]]
   - BSD: [[https://github.com/JozanLeClerc/lowbat-bsd][lowbat's GitHub BSD repository]]