aerc

Modern Email, FOSDEM 2025, Brussels

Bonjour

My name is Robin Jarry

aerc maintainer* since 2021

*created by Drew DeVault in 2019

Software engineer at Red Hat

How to pronounce aerc?

Who cares?

Drew DeVault /aɹk/
French /ɛʀk/
Hungarian /aɛːrt͡s/
Spanish /aerθe/

Legend says that it was originally an acronym for
Async (or Advanced?) Email Reading Client

What is aerc?

An email client that runs in your terminal

IMAP, JMAP, SMTP, Maildir, Notmuch, mbox

Multiple tabs and/or accounts

VIM-style commands and key bindings

Compose in $EDITOR, view emails in $PAGER

Agenda

Account configuration wizard

Builtin documentation

UI configuration

Email part/attachment filters

Key bindings

Future work

New account wizard

Runs automatically on first startup

Basic SRV autoconf

Improves new users onboarding

Can also be started with the :new-account command

Example :new-account with JMAP

Builtin documentation

Documentation available as man pages

Can be accessed via the :help <topic> command

Also available via man aerc-<topic>

Display contextual key bindings with :help keys

:help keys is bound to ? by default

:help command examples

UI configuration

Most settings can be found in aerc.conf

Colors configured in stylesets

Use :reload without restarting aerc

Message List

aerc uses go templates (see :help templates)

# ~/.config/aerc/aerc.conf

[ui]
index-columns = star:1,name<15%,reply:1,subject,size>=,date>=
column-star = {{if .IsFlagged}}★{{end}}
column-name = {{.Peer | names | join ", "}}
column-reply = {{if .IsReplied}}⮪{{else if .IsForwarded}}⮫{{end}}
column-subject = {{.Style .ThreadPrefix "thread"}}{{.Subject}}
column-size = {{if .HasAttachment}}📎 {{end}}{{humanReadable .Size}}
column-date = {{.DateAutoFormat .Date.Local}}

Other UI Stuff

# ~/.config/aerc/aerc.conf

[ui]
threading-enabled = true # changed at runtime with :toggle-threading
sort-thread-siblings = true
msglist-scroll-offset = 5
sidebar-width = 15
styleset-name = pink

[ui:account=work]
styleset-name = blue

[ui:folder=Sent]
column-name = To: {{.Peer | names | join ", "}}

Stylesets

UI elements can be assigned colors and various terminal attributes (see :help stylesets)

# ~/.config/aerc/stylesets/pink

*.default = true
*.normal = true
msglist_unread.bold = true
msglist_deleted.fg = "#999999"
msglist_marked.fg = white
msglist_marked.bg = "#de4e85"
msglist_marked.selected.bg = "#c93687"
msglist_pill.bg = "#de4e85"
"msglist_*.Subject,~^\[([\w-]+]\s*)?(RFC )?PATCH.fg" = blue
msglist*.X-Sourcehut-Patchset-Update,APPLIED.fg = green
# ... stylesets are much longer and don't fit on a slide ...

aerc mild ricing example

Filters

User defined commands per MIME type

Colorize emails and patches

Reformat text, wrap long lines, ...

Decode non-plaintext parts

Message part > filter | pager > virtual terminal

Filters examples

# ~/.config/aerc/aerc.conf

[viewer]
# default pager for non-interactive commands (starting with !)
pager = less -Rc -+S --wordwrap

[filters]
# hard wrap at 90 columns (except patches) and colorize
text/plain = wrap -w 90 | colorize
# pipe raw HTML into a sandboxed and interactive w3m
text/html = ! html
# render images as ASCII art (not needed since 0.18.0)
image/* = catimg -w$(tput cols) -
aerc ships with a few custom filters: colorize, wrap, html, calendar

Key Bindings

Any key sequence can be bound to a command

Bindings are per-context

More info with :help bindings

View context bindings with :help keys

Bindings examples

# ~/.config/aerc/binds.conf

[messages]
# change folder via an interactive menu
<C-p> = :menu -dc - :cf<Enter>
# bindings can use templates as well
C = :compose -H 'To:{{.To | persons | join ", "}}'<Enter>

[compose::review]
# comments at the end show on the review screen
y = :send<Enter> # Send
p = :postpone<Enter> # Postpone
e = :edit<Enter> # Edit

0.20.1 is out

Come check it out!

~$ git clone https://git.sr.ht/~rjarry/aerc
~$ gmake -C aerc install -j PREFIX=~/.local
~$ aerc -v
aerc 0.20.1 +notmuch-5.6.0 (go1.23.6 amd64 linux 2025-02-01)
Full release notes: https://git.sr.ht/~rjarry/aerc/refs/0.20.1

Future plans

Better patch management commands

Full offline mode for SMTP, IMAP and JMAP

Chaining commands with key bindings

More threading options

What do you have in mind?

Thank You

Questions?

https://aerc-mail.org

#aerc on irc.libera.chat