Remind: Sophisticated Calendar and Alarm Program
I'm sharing here a few configuration and integration notes to describe how I'm using the Remind calendar program, along with its Wyrd user interface.
1 Before Remind
The first calendar program I used was Microsoft Outlook, quickly followed by Mozilla Sunbird which appears to have been abandoned. I actually spent a fair few years with Sunbird. But what was striking about it is how impossibly slow it became to start as soon as you gathered more than a few hundreds of events. This was the reason why I craved for something fast. Very fast. And so I came across Remind.
2 About Remind
You enter events by writing them to files, typically under the ~/.reminders
directory, in a sophisticated language – too sophisticated, maybe. I once took on the challenge of mastering it but that just went too far. Thankfully, though, you don't need to understand much to get your way and the manpage gives a few helpful examples to get you started.
What I praise is the decision the developers make to leave it to users to organise their events in plain text, which gives them the freedom to use their favourite editor to ease the task. Being simple files, you can also use common UNIX tools to further work with your calendars: diff, git, sort, grep, gzip. But what came most naturally was in fact to store my ~/.reminders
on AFS, so that my calendars are synchronised live on all my devices with absolutely no effort from my part.
And because it's all just text files, I don't have to use the scripting language Remind provides if it doesn't suit me. Yes, I can program recurring events and define variables. But if I find them to cumbersome to use, nothing keeps me from writing a little wrapper using a template language to write my events the way I enjoy it. Inspiring.
3 Integration for Alarming
You can run Remind in daemon mode, by passing it the -z
option. In this mode, Remind issues reminders when events are due. With the -k
option, you can specify what to do when that happens.
rem -z -k "urxvt -hold -name notsink -title %s -e echo %s &" &
With this command, I'm instructing Remind to launch a urxvt terminal setting its title and contents to the message of the event (as defined with MSG
). The -hold
option ensures the window stays opened even after echo
exits.
See the difference between:
- the
&
which is part of the command run by Remind as specified by the-k
option which is necessary to be able to open urxvts for other events even if I haven't closed the previous ones; - the
&
at the end of the Remind command-line to start the daemon in the background.
The -name
option gives the name notsink
to the window. This is particularly useful if you use some sort of notification sink with your window manager, whereby windows having a given name are sent to a specific frame, so as to display notifications without getting in the way.
One last note of integration, particularly if you keep your reminder files on a remote filesystem: the Remind daemon can crash if the reminder files aren't accessible, which is bound to happen if you've lost the network. I wrote the remd
wrapper to work around this with a loop. Last thing you want is to no longer be notified without knowing about it.
4 Wyrd: a User Interface for Remind
While Remind offers options to print calendars to stdout in a more graphical and readable format, it is no substitute for a true graphical and interactive tool to manage and see events. The best I found was Wyrd, which does e.g. a good job of allowing you to move over an existing event and send you to the right file at the right line to edit it with your editor.
Sadly, though, it appears to have been abandoned. Its original website – http://pessimization.com/software/wyrd
– no longer exists. Some people have already pushed its source code to various GitHub repositories.