Notmuch
Related articles
Notmuch is a mail indexer. Essentially, is a very thin front end on top of xapian. Much like Sup, it focuses on one thing: indexing your email messages. Notmuch can be used as an email reader, or simply as an indexer and search tool for other MUAs, like mutt.
Contents
Overview
Notmuch is written in C and an order of magnitude faster than sup-mail. Notmuch can be terminated during the indexing process, on the next run it will continue where it left off. Also like sup-mail, it does not provide a way to permanently delete unwanted email messages. It doesn't fetch or send mails, nor does it store your email addresses, you'll need to use programs like OfflineIMAP, msmtp and abook for those tasks.
Notmuch is available in the official repositories: notmuch or notmuch-gitAUR[broken link: archived in aur-mirror] from the AUR
It provides python, vim, and emacs bindings.
First time Usage
After installation, you enter an interactive setup by running:
notmuch setup
The program prompts you for the location of your maildir and your primary and secondary email addresses. You can also edit the config file directly which is created by default at $HOME/.notmuch-config
.
Subsequent re-indexing of the mail directories is done with:
notmuch new
Frontends
There are a range of ways to use notmuch, including cli, or with one of the Unix $EDITORS:
Emacs
The default frontend for notmuch is Emacs. It is developed by the same people that develop notmuch.
Vim
There's a vim interface available and included in notmuch. To start it, type:
vim -c NotMuch
alot
alot is a standalone CLI interface for notmuch, written in python. It is available from AUR as alotAUR or alot-gitAUR.
Alot uses mailcap for handling different kinds of files. This currently includes html mails, which means that you need to configure a ~/.mailcap
file in order to view html mails. As minimum, put this line into your ~/.mailcap
:
text/html; w3m -dump -o -document_charset=%{charset} %s; nametemplate=%s.html; copiousoutput
This uses w3m, some other text based clients such as links or lynx can be used instead, although their arguments might differ.
More file handlers can be configured of course.
bower
bower is another CLI interface, this one is written in Mercury.
mutt-kz
mutt-kz - A fork of mutt with integrated notmuch. It has a virtual folder support and talks directly to libnotmuch, avoiding hacks with symbolic links. It is available from AUR as mutt-kzAUR or mutt-kz-gitAUR.
Neomutt
Neomutt - Another mutt fork which includes many feature patches, among them the Notmuch integration patch. Install from the AUR as neomuttAUR or neomutt-gitAUR.
ner
ner - notmuch email reader - is yet another CLI interface, apparently written in C++.
ner-gitAUR[broken link: archived in aur-mirror] is available from the AUR.
Integrating with mutt
If you use mutt as your MUA, then notmuch is an excellent complementary tool to index and search your mail. The notmuch-mutt package provides a script to integrate notmuch with mutt.
After installing the notmuch-mutt package and configuring notmuch, the only thing left before using notmuch to search from mutt is adding keybindings to call the notmuch-mutt
perl script from mutt. Adding the following to your .muttrc
is what is recommended in notmuch contrib source:
macro index <F8> \ "<enter-command>unset wait_key<enter><shell-escape>notmuch-mutt --prompt search<enter><change-folder-readonly>`echo ${XDG_CACHE_HOME:-$HOME/.cache}/notmuch/mutt/results`<enter>" \ "notmuch: search mail" macro index <F9> \ "<enter-command>unset wait_key<enter><pipe-message>notmuch-mutt thread<enter><change-folder-readonly>`echo ${XDG_CACHE_HOME:-$HOME/.cache}/notmuch/mutt/results`<enter><enter-command>set wait_key<enter>" \ "notmuch: reconstruct thread" macro index <F6> \ "<enter-command>unset wait_key<enter><pipe-message>notmuch-mutt tag -inbox<enter>" \ "notmuch: remove message from inbox"
The above uses F8
to search your inbox using notmuch, F9
to create threads from search results, and F6
to tag search results.
notmuch-mutt problems
There can sometimes be disagreement between pacman-installed and managed perl modules and perl modules installed via cpan/cpanm. An error message of the format:
Gnu.c: loadable library and perl binaries are mismatched (got handshake key 0xdb00080, needed 0xdb80080)
can indicate that some of the notmuch-mutt dependencies are installed via cpan while some are installed and managed via pacman, and that you should install all dependencies via one or the other method.