~rleek/website

e21495b88edfbebe848d384ae7e454d337e0c35a — sorokya 8 months ago 6f34ae5
added post about aerc
1 files changed, 72 insertions(+), 0 deletions(-)

A posts/switching-to-aerc.md
A posts/switching-to-aerc.md => posts/switching-to-aerc.md +72 -0
@@ 0,0 1,72 @@
---
title: Switching to aerc
layout: posts.liquid
is_draft: false
---

Today I started using "The world's best email client" [aerc](https://aerc-mail.org/).
I've been using Mozilla Thunderbird for years and wanted to try something a little more light
and efficient. Thunderbird works great, but I couldn't help but feel like it's just too much
for an email/calendar client.

This wasn't the first time I've tried using a terminal based email client. Not too long ago
I tried getting into mutt/neomutt but just found the learning curve too high. I couldn't just
set it up and start using it as a replacement for thunderbird the way I did with aerc.

aerc is very easy to configure. It has a built in tutorial `man aerc-tutorial` or `:help tutorial`
from within the program itself. It has a build in wizard for adding mail accounts that worked
perfectly for my accounts.

About a month ago I setup my own NextCloud instance to syncronize my calendar and files across
my devices. Thunderbird has a built in calendar that worked well with CalDAV, but aerc is just
an email client. So I had to turn to another program if I wanted to access my calendar easily
without a web browser.

My first choice was [khal](https://github.com/pimutils/khal). It came up
when I searched for a terminal based CalDAV client. It seemed nice at first glance, but I just
couldn't get it configured the way I wanted and shortly gave up on it.

After khal I turned to [calcurse](https://www.calcurse.org/). It seemed to be a more mature
program. They only have experimental support for CalDAV, but the
[script](https://www.calcurse.org/files/calcurse-caldav.html) seemed to work fine for
me when I set it up against my NextCloud.

I wanted to be able to share my [dotfiles](https://git.sr.ht/~rleek/dotfiles) for easy syncing
between my devices, but the problem with the default configuration of calcurse (for caldav support anyway)
and aerc is that your passwords are stored in plain text. They both have the ability to load your
password from an external program or command. I chose to use [keyring](https://github.com/jaraco/keyring).
You can install it with the [python-keyring](https://www.archlinux.org/packages/community/any/python-keyring/)
package on Arch. It integrates with a bunch of keyring backends and can be used to store and retrieve passwords
securely.

For aerc there are 3 changes you need to make per mail account.
1) Remove your password from the source and outgoing fields (e.g. bob@example.com:password to just bob@example.com)
2) Add source-cred-cmd and give it the keyring command for retreiving your password.
3) Add outgoing-cred-cmd and give it the keyring command for retreiving your password.
```
[Personal]
source   = imaps://richard%40richardleek.com@mail.runbox.com
outgoing = smtps+plain://richard%40richardleek.com@mail.runbox.com:465
default  = INBOX
from     = Richard Leek <richard@richardleek.com>
copy-to  = Sent
source-cred-cmd = keyring get runbox richard@richardleek.com
outgoing-cred-cmd = keyring get runbox richard@richardleek.com
```

I made the mistake of ommitting the outgoing-cred-cmd the first time around and couldn't figure out
why my emails were failing to send. Another read of the man page and I figured out what I had missed.


CalCurse's CalDAV script is a little different. You have to set an environment variable before running
the script. I made a bash script to sync my calendar and open calcurse and alias'd calcurse to run it.

```bash
#!/bin/bash
CALCURSE_CALDAV_PASSWORD=$(keyring get cloud.richardleek.com rleek) calcurse-caldav
calcurse
```

I've only been running with this setup today, but so far I'm enjoing it. aerc is still under heavy development
and not quite stable yet, but it works for me. I recommend it to anyone looking for a light and fresh email
client for their terminal.