summaryrefslogtreecommitdiffstats
path: root/content/posts/org-agenda-eink/index.org
blob: 778909b0f8b6d923366ad62454fbaee339819005 (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
65
66
67
68
69
70
71
#+TITLE: Org Agenda Eink
#+DATE: 2021-01-25T22:07:25-05:00
#+DRAFT: true
#+SHOWTOC: false
#+DESCRIPTION:
#+TAGS[]:
#+KEYWORDS[]:
#+SLUG:
#+SUMMARY:

I recently made a post [[]] about how I was able to make my new tab page my
org agenda. Since then I've been working on another project similar to
that, trying to take the concept even further.

A while ago, I purchased an Inkplate 6 [[]] during its crowd funding stage
on crowd source [[]], with the exact intention of creating something like
this.

Immediately after writing that blog post, I started working to change
agenda-html [[]] in order to make render an output which would be
acceptable for this project.

At the core of the Inkplate 6 is the ESP32, which is an
Arduino-compatible micro-controller which has built-int WiFi and
Bluetooth. It draws very little power and has many libraries
available, which makes it ideal for something like this, as it stays
on 24/7.

The way it works is very similar to the org agenda new tab page. The
server, instead of exporting exclusively to HTML, also exports a text
version of the agenda. The ESP32 then fetches this text and prints it
verbatim onto the text screen. This happens every 5 minutes, so it's
always up to date with the server version. It also handles some error
cases, but I have yet to run into those. The sketch for this project
can be found here [[]].

What I ended up doing was exporting the org agenda as a text file,
after converting the links to description only. I did the conversion
because otherwise the full link markup text would show up in the
export, which would quite ugly. It would look like the full
=[[https://example.com][Description]]= instead of just =Description=,
which would be quite useless, as you can't click the link on an eink
display.

I also shortened the server-side cron job repeat rate to every 5
minutes instead of 15, so it would work better with hour and minute
time-stamped events. That way it also reflect new tasks and TODOs much
more quickly, at practically zero cost.

This project has many benefits, at least to me. First and foremost, I
can check my org agenda without even turning on my computer. It's
always on off to the side, so I can check it out any time without
having to open either a new tab or Emacs.

Being an eink display is very important, as it's not bright and
distracting, and doesn't need to be turned off at night. I can check
it any time. It also isn't distracting at all. It sort of just looks
like any other appliance.

Between this desk version of the org agenda and the new tab version,
my usage of the org agenda has gone up substantially. I used to only
use org for a handful of tasks, but eventually moved over to regular
calendar apps for most things, as they were simply more accessible in
many situations. Now that I have this sort of appliance version of the
org agenda view, I find myself using it for almost everything.

This really highlights the extreme versatility of Emacs and Org.
While I had to figure out how to make it work, it took very little
modification to Emacs in order to get it to work, and those
modifications I did have to make were all easily accomplished by
changing a couple variables or writing a little elisp.