summaryrefslogtreecommitdiffstats
path: root/content/posts/org-agenda-eink/index.org
blob: 7105f26383c0bef3224ba927374355d3ee5b36c2 (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
#+TITLE: Org Agenda Eink
#+DATE: 2021-01-25T22:07:25-05:00
#+DRAFT: true
#+DESCRIPTION:
#+TAGS[]:
#+KEYWORDS[]:
#+SLUG:
#+SUMMARY:

I recently made a [[{{< ref "/posts/org-agenda-new-tab" >}}][post]] about how I was able to configure my new tab
page to display 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 [[https://inkplate.io/][Inkplate 6]] during its crowd funding stage
on [[https://www.crowdsupply.com/e-radionica/inkplate-6][crowd source]], with the exact intention of creating something like
this.

Immediately after writing that blog post, I started working to change
[[https://github.com/dantecatalfamo/agenda-html][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 [[https://www.espressif.com/en/products/socs/esp32][ESP32]]. An [[https://www.arduino.cc/][Arduino]]-compatible
micro-controller which has built-in WiFi and Bluetooth. It draws very
little power, which makes it ideal for something like this, which
stays on 24/7. It also has the benefit of being able to draw from the
Arduino community, benefiting from the many libraries people have
created.

The way it works is very similar to the org agenda new tab page. The
server-side cron job, 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 screen. This happens on a loop every 5
minutes, so it's always up to date with any changes I make to my org
files. The sketch for this project can be found on my github [[https://github.com/dantecatalfamo/inkplate-agenda][here]].

To make the output look as good as possible for display, before
exporting to a text file I replace all links with just their
description text. I do the conversion because I have a lot of links in
my org agenda, and if I don't the full link markup text would show up
in the export. It would look like the full
=[[https://example.com][Description]]= instead of just =Description=,
which would be quite ugly and takes up a lot of horizontal space.

I also shortened the server-side cron job repeat rate to every 5
minutes instead of 15, so it would work better with time-stamped
events. 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, so I can check it out any time without having to open
either a new tab in my browser 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. 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 use
org for a handful of tasks, but moved over to regular calendar apps
for most things, as they were simply more accessible in many
situations. Now that I have this e-ink version of the org agenda, 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.