1. 1
  2. 2
  3. 3
  4. »


Mimir's Head

Mimir's head

Writing about this, that, and the other: projects, essays, art, design, and strange things. If you'd like to stay updated, follow the RSS feed!

For a complete listing of all posts, see here.

For updates to the Annotated Mountain Goats, see here.

"high blows Heimdallr, the horn is aloft
Odin speaks with Mimir's head
trembles Yggdrasil's towering ash
the old tree wails when the ettin is loosed."

On this page

June 28, 2018

Suze Shore ---

thanks to Suze Shore


Back to the top

June 19, 2018

If you haven't read part 1 and want to receive mail, see here!

If you haven't read part 2 and want to send mail, see here!

The totality of configuring mutt is complex, but I want to help provide the basics of configuring a two-account system that can send and receive email. Once you can do that, you can figure out the rest as you explore the program, read the manual, and decide what you like and need. At this point, this isn't particularly different than configuring any other multi-account mutt profile.

Here's a basic .muttrc, containing only the necessary elements for multiple accounts and a few options that I think are nearly essential. There's lots more that could or should be in here for a full-fledged setup, but I don't want to confuse things unnecessarily!

# Who am I?
set realname = "Buckaroo Banzai"
set use_from

# Accounts
folder-hook home 'source ~/.mutt/muttrc.home'
folder-hook work 'source ~/.mutt/muttrc.work'

# Start on home account
source ~/.mutt/muttrc.home

# Mailboxes
set mbox_type = Maildir
set copy
mailboxes ~/mail/home
mailboxes ~/mail/work

This requires two additional files which will be loaded whenever you are in directories which match the regex home and work, which we previously set up to be the locations mbsync delivers mail to. You can call them whatever you want and put wherever you want; putting them in a ~/.mutt directory and calling them muttrc.{home,work} is just the pattern I use.

These set the values for each folder:

# muttrc file for home account

set from = "plugh@xyzzy.org"
set hostname = "xyzzy.org"
set folder = "~/mail/home"
set signature = "~/.signature"
set sendmail = "/usr/bin/msmtp -a home"

set spoolfile = "+Inbox"
set postponed = "+Drafts"
set record = "+Sent"
set mbox = "+Archives/`date +%Y`"
save-hook . "+Archives/%[%Y]"
set trash = "+Trash"

color status green default


# muttrc file for work account

set from = "thud@yoyodyne.com"
set hostname = "yoyodyne.com"
set folder = "~/mail/work"
set signature = "~/.signature-work"
set sendmail = "/usr/bin/msmtp -a work"

set spoolfile = "+Inbox"
set postponed = "+Drafts"
set record = "+Sent"
set mbox = "+/Archives/`date +%Y`"
save-hook . "+Archives/%[%Y]"
set trash = "+Trash"

color status blue default

I like changing the status colors to help remind myself where I am — the first color is the color of the text, the second is the color of the background — but this is obviously not necessary.

Unfortunately, even if both accounts technically use the same regex (for example, both use set spoolfile = "+Inbox", "+" being a shortcut for $folder), you can't simply set this once in .muttrc and be done. Mailbox shortcut expansion is done when the file is loaded, not when the regex is evaluated, so setting it once in .muttrc wouldn't allow it to switch between mailboxes when the folder-hook is evaluated.

mutt's default save behavior is to append to $mbox without sorting archived mail further. I like Thunderbird's behavior of sorting by year, and the above mbox and save-hook settings accomplish this. This solution is thanks to Daniel Schömer on mutt-users and I have to admit that I don't fully understand it (if you do, I'd love an explanation). It appears to be smart enough to archive based in the year the message was sent, and that's exactly what I wanted.

Hope this series was helpful! If you have questions, please feel free to email me.

Back to the top

June 19, 2018

If you haven't read part 1 and want to receive mail, see here!

For configuring mutt for multiple accounts, see part 3!

Fortunately, configuring msmtp to send mail is substantially easier than getting mail. Here's an example ~/.msmtprc:

logfile ~/path/to/msmtp.log

account home
host mail.xyzzy.org
port 587
protocol smtp
from plugh@xyzzy.org
auth on
user plugh
passwordeval gpg2 -q --for-your-eyes-only --no-tty --batch -d ~/.mail-home.gpg
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt 

account work
host localhost
port 1025
protocol smtp
from thud@yoyodyne.com
auth login
user thud
passwordeval gpg2 -q --for-your-eyes-only --no-tty --batch -d ~/.mail-work.gpg

account default : home

where, similar to before, mail.xyzzy.org, plugh@xyzzy.org, plugh, thud@yoyodyne.com, and thud are the locations of your home SMTP server, your home email address, your home login, your work email, and your work login respectively. Usually passwordeval can use the same command as for mbsync, assuming your IMAP and SMTP passwords are the same. Also, you don't have to use the same account names as you did with mbsync, but it's probably easier if you do.

The bottom line sets the account default, meaning that if msmtp is run with no other qualifications, mail will be set using that account (here, home).

To test your configuration, you can try

$ echo "cheese" | msmtp -a work bigboote@lectroids.com

obviously using a different email address that you can check. If it goes through and works for both accounts, you're good!

Additionally, for log maintenance, I added the following to my crontab, similarly to before with mbsync:

@weekly  cd $HOME/mail/logs && echo "$(tail -1000 msmtp.log)" > msmtp.log

For configuring mutt for multiple accounts, see part 3!

Back to the top

June 19, 2018

I've become increasingly frustrated with the limitations of Thunderbird, and finally started taking the steps to migrate to a more powerful email client, mutt. This had been daunting for some time as Thunderbird handles a lot of the behind-the-scenes work for you — retrieving email (it's a mail delivery agent, MDA), sending email (and a mail transfer agent, MTA), and other things besides in addition to being a mail user agent (MUA). mutt, in contrast, is more or less a straight MUA, so you have to figure out how to fill those roles.

Fortunately, there's great software and lots of guides out there to help with this. Unfortunately, my work's mailserver is Micro$oft Exchange, which uses Exchange ActiveSync (EAS) with IMAP and SMTP disabled. I wrote this up to hopefully help other users in similar situations configure their systems successfully.


I use Ubuntu GNU/Linux; while the specifics and installation might be different on other platforms, I think the general framework will hold. My kernel and release info:

$ uname -rio
  4.4.0-128-generic x86_64 GNU/Linux
$ lsb_release -dc
  Description:	Ubuntu 16.04.4 LTS
  Codename:	xenial

Here's the way my system is now set up:

Mail system flowchart

I'm very grateful that davmail exists. It's a simple Java program that provides an IMAP/SMTP frontend locally and then interacts with an EAS server. I'm not aware of a good alternative — if you are, please reach out!

mbsync and msmtp are wonderful, lightweight IMAP and SMTP clients, respectively. mbsync is sometimes referred to as isync, its historical name. The installation package is still isync on many platforms (including Ubuntu), but the executable is mbsync. You can certainly use more classic MTAs like sendmail, but for a single-user system my impression is that it's unnecessarily complex.


On Ubuntu, all are available on the repos as of 18.04 LTS (bionic beaver). For 16.04 LTS, mbsync and msmtp are available, however, some of the features used in my configuration of mbsync are only available in newer versions, and so I compiled from source. davmail has a .deb package which you can easily install with dpkg on its website.

If you're on Ubuntu 18.04 LTS, you should be able to simply

$ sudo apt install davmail isync msmtp mutt

without issue, but as upgrades won't be released until late July 2018, I haven't tried this yet.

Incoming mail (EAS/IMAP) — mbsync + davmail

davmail installation is blessedly uncomplicated. By default, it accepts IMAP and SMTP locally on ports 1143 and 1025 respectively. You have to set the URL for your Outlook Web Access (the way you access your email in a browser, which should end with /owa/ — for example, https://mail.yoyodyne.com/owa/), and the destination for davmail's logfiles. All of this information is stored in .davmail.properties and can be easily re-edited there.

To have davmail start on boot without the tray icon, you can add

/usr/bin/davmail -notray

to your startup applications.

mbsync has a more complex setup that I don't begin to fully understand. However, once configured, it runs easily, and you can easily have multiple accounts. 1 A two-account .mbsyncrc using davmail looks like this:

IMAPAccount home
Host mail.xyzzy.org
Port NNN
User plugh
PassCmd "gpg2 -q --for-your-eyes-only --no-tty --batch -d ~/.mail-home.gpg"

IMAPStore home-remote
Account home

MaildirStore home-local
Subfolders Verbatim
Path ~/mail/home/
Inbox ~/mail/home/Inbox

Channel home
Master :home-remote:
Slave :home-local:
Patterns * !Archives !Lists

Create Both
Expunge Both
SyncState *


IMAPAccount work
Host localhost
Port 1143
User thud
PassCmd "gpg2 -q --for-your-eyes-only --no-tty --batch -d ~/.mail-work.gpg"
SSLType None
AuthMechs LOGIN

IMAPStore work-remote
Account work

MaildirStore work-local
Subfolders Verbatim
Path ~/mail/work/
Inbox ~/mail/work/Inbox

Channel work
Master :work-remote:
Slave :work-local:
Patterns * !Archives

Create Both
Expunge Both
SyncState *

where mail.xyzzy.org, NNN, and thud represent your mailserver address, port number, and Exchange username, respectively.

A few comments:

And you're set! Now, to sync, you can run mbsync home, mbsync work, or mbsync -a for all mailboxes. I have it set to sync my mail every two minutes with the following entries in my crontab:

*/2 * * * * mbsync -a 2>>$HOME/mail/logs/mbsync.log 
@weekly  cd $HOME/mail/logs && echo "$(tail -1000 mbsync.log)" > mbsync.log

You can omit the logging of stderr and the second entry (which just periodically trims the log) if you don't want any logging.

For sending mail, see part 2!

For configuring mutt for multiple accounts, see part 3!


  1. Packaged versions of mbsync (as of June 2018, v1.3.0) include a bug which leads to duplicate messages when using davmail. This is not currently fully patched, but is easy to solve if you build from source. Obtain it and its dependencies as follows:

    $ git clone https://git.code.sf.net/p/isync/isync
    $ sudo apt install libssl-dev

    The offending code is in drv_imap.c. As of v1.3.1, this is partially patched, but on line 2925 (which reads "UID FETCH *:* (UID) );" there's another error. To fix this, replace '*:*' with '*' on that line, which should then read "UID FETCH * (UID) );". You can then build with

    $ ./autogen.sh
    $ ./configure
    $ make
    $ sudo make install

    as described in the README, which will put the resulting binary in /usr/bin/local. Hopefully this will be fully patched and packaged soon! Note that if you use cron to call mbsync that /usr/local/bin may not be in its path, or that it may come after any version that was installed by your package manager, meaning that you may need to specify /usr/local/bin/mbsync or modify cron's $PATH

Back to the top

January 10, 2017

My girlfriend and I were blessed to spend an amazing month of our summer in 2015 studying Spanish in Oaxaca and Mexico City, DF. During our time there, we walked for about 7 – 10 miles each day, wandering around the cities we were in and trying to soak in everything. We fell in love with the many spectacular murals we saw there and set a goal to find as many as we could. Eventually, we photographed these and bound them in a small book to give to our hosts as a thank you — some of the best fun I've had traveling.

It's hardly complete — there's an incredible amount of spectacularly wonderful art in Oaxaca and DF, let alone the rest of Mexico. But since we loved them, we hope you might too. Here's some of our favorite murals and street art, everything that made it into our little book. Given our interests, we enjoyed the political material a lot, and so that's especially represented.

The captions include the district each were found in, and any information that we could find to help understand the pieces.

poco a poco: una vista pequeña del arte en la calle



Eje 1 Norte (José Antonio Alzate), Santa María la Ribera, Cuauhtémoc. Mono Sappiens is a DF-based band; 'mono' means 'monkey'.


frida with mohawk

Porfirio Díaz. This stencil of a mohawked Frida Kahlo has become an iconic piece of Yescka's work. Text reads 'Workshop Siqueiros', likely referring to the famous Mexican muralist David Alfaro Siqueiros.

green hands


two women with beehive

De Progreso. Text reads 'liberty, equity, respect'.

man hugging himself

Los Reyes. Graffiti reads 'this ground'.

hands holding heart

Walkway behind workshop on Murguía.


Melchor Ocampo. Text reads 'Experimental Graphics Workshop of Oaxaca'.


Porfirio Díaz. The letters spell 'mercado', meaning 'market'. Note the woman in Guelaguetza dress wearing a gas mask and the police forces attacking the men waving a socialist flag. Mural painted by ASARO (asamblea de artistas revolucionarios de Oaxaca).

political poster with
        rat political poster with
political poster with
        campesino political poster with

clockwise from upper left: Xochitl, Macedonio Alcalá, Manuel San Crespo, Manuel San Crespo. Many political posters adorn the walls of Oaxaca. The first of these is by the CNTE and SNTE Sección XXII teachers' union, who are here opposing the elections for governor. The second reads 'not one more death! Justice for sweet ...', with the rest cut off. The bottom left features a campesino holding a single peso coin, while an obese businessman vomits a paper on which can be barely read 'REFORMAS', likely referring to the educational cuts opposed by the militant teachers' unions. The final reads '2ND MEETING OF REJECTED APPLICANTS', again opposing government education reforms, this time from the UJRM, a youth socialist organization.



man with goatee

Los Reyes.


Murguía. Text reads 'Workshop of Lithography'.

man with smoke

Periférico (Eduardo Mata).


Melchor Ocampo. A torta is a type of sandwich.

1968 olympics

La Noria. Text roughly translates to 'occupy your destiny'; an okupa is a squatter. The mural clearly depicts the famous 1968 Olympics black power salutes by athletes Tommie Smith and John Carlos in México, DF.

libertad a los presos

Porfirio Díaz. Text reads 'Liberty to the political prisoners of June 7!' The photos are of people jailed after participating in protests in Oaxaca.

woman with tattoos text between women woman with tattoos

Biblioteca Henestrosa, Porfirio Díaz. Note the fusion of traditional patterns with anarchist and other modern symbols in the tattoos and dress of both women.

A geometric drawing with the text 'con el fuego en las manos' connects the two women; translated, this means 'with fire in their hands'. On the bottom right is painted in English 'smile now cry later'. Mural by Oaxcan artist collective Tlacolulokos.

méxico, df

canine unicorn

Cine Tonalá, Tonalá, Roma Sur, Cuauhtémoc.

trombone player

Tepeji, Roma Sur, Cuauhtémoc.

machete woman

Centenario, Del Carmen, Coyoacán. Text reads 'machete al machote', a feminist call for self-defense against male harassment.

mother mary

Debussy, Guadalupe Victoria, Gustavo A. Madero.


Pilares, Colonia del Valle, Benito Juárez.


Chiapas, Roma Norte, Cuauhtémoc. The cat is a maneki-neko, a Japanese good luck symbol.

woman with clouds

Tonalá, Roma Norte, Cuauhtémoc.

satan and heads

Querétaro, Roma Norte, Cuauhtémoc.

man with baseball cap

Eje 1 Poniente (Cuauhtémoc), Santa Cruz Atoyac, Benito Juárez. Mural by El Grand Chamaco; chamaco is a slang term for kid.


Durango, Roma Norte, Cuauhtémoc.


Doctor García Diego, Doctores, Cuauhtémoc. Text reads 'Hasta la vista, pobre', meaning 'see you later, poor person'. This alludes to the well-known Terminator lines 'hasta la vista, baby', spoken before Schwarzenegger kills the film's villain. The Doctores neighborhood is rapidly gentrifying along with other areas of Cuauhtémoc.

graffiti tag with kyle

Eje 1 Poniente (México - Coyoacán), Xoco, Benito Juárez.

transhuman baby

Eje 1 Norte (José Antonio Alzate), Santa María la Ribera, Cuauhtémoc.

woman in blue background

Parque Lira, Daniel Garza, Miguel Hidalgo.


Insurgentes Sur, Hipódromo, Cuauhtémoc.


Centenario, Del Carmen, Coyoacán.

skulls with pill

Iztaccihuatl, Hipódromo, Cuauhtémoc.

technological birds

Eje 1 Poniente (México - Coyoacán), Xoco, Benito Juárez.

girl in forest

Vegan restaurant Coco y Chia, Pilares, Colonia del Valle, Benito Juárez.


miriam and kyle

miriam + kyle
méxico, verano 2015

Back to the top

  1. 1
  2. 2
  3. 3
  4. »