851efb0770232173921e8c7ea50000fe75bc2e9d
[homepage.git] / blog / posts / 2011 / 01 / how_to_use_Notmuch_with_Mutt.mdwn
1 # Mutt mail indexing on steroids!
2
3 I've been using external mail indexing with [Mutt](http://www.mutt.org) for
4 quite a while now. Before now I haven't given
5 [Notmuch](http://notmuchmail.org/) a try, as it seemed *too much* experimental
6 at the time of my initial
7 [[review of mail indexing tools|2009/10/mail_indexing_for_mutt]].
8
9 As there is nothing better than a long oversea flight to perpetrate new hacks,
10 I've now not only tested it, but also **switched to Notmuch** without looking
11 back at [maildir-utils](http://code.google.com/p/mu0/) for a split second.
12
13 Getting started with Notmuch is trivial:
14
15 * Notmuch is [[!debpkgsid notmuch]] in Debian (and maintained by upstream
16   author, thanks!)
17 * `notmuch setup` asks a few questions about the user and then prepare a
18   template `~/.notmuch-config`, which is good enough to start
19 * `notmuch new` does a first run of indexing (which might take a while,
20   depending on the size of your maildirs)
21
22 Some performance figures: (1) the size of the index is a bit larger than the
23 size of the mails (on my laptop: 535 Mb of index vs 375 Mb of mails stored in
24 60 maildirs); (2) even if the underlying indexing engine is the same (Xapian)
25 as maildir-utils, Notmuch is much faster. With my setup it is so fast that I've
26 added it as a hook triggered by offlineimap at the end of each synchronization:
27
28         zack@usha:~$ grep -B 1 hook .offlineimaprc
29         [Account Upsilon]
30         postsynchook = notmuch new
31
32 With the big round of new mail downloaded in the morning, it hardly takes more
33 than a few seconds to update Notmuch index, while with other periodic downloads
34 Notmuch almost invariably reports "... in almost no time" (i.e. less than 1
35 second).
36
37 ## Integrating Notmuch with Mutt
38
39 The basic integration I want between Mutt and a mail indexer is the ability of
40 stating a **search query** interactively and then jump to a **fresh Maildir
41 containing search results** only. Additionally, given that Notmuch has neat
42 **thread reconstruction** abilities, I also want to be able to reconstruct on
43 the fly the thread corresponding to the currently highlighted mail: it comes
44 handy when a thread has been split across different maildirs, archived, or the
45 like.
46
47 To that end, I've cooked up a little helper, called [[mutt-notmuch]], that
48 enables to trigger mail searches via a Mutt macro (F8 being my choice) and
49 reconstruct threads via another (F9). Check the [[manpage|mutt-notmuch.1.html]]
50 for the 2-liner configuration snippet for your `~/.muttrc`.
51
52 Arguably, some of the logics of mutt-notmuch could disappear by adding support
53 for a `--output=symlinks` flag to Notmuch. A bug report requesting that is
54 pending: too bad oversea flights are not as good for accessing the Internet as
55 they are for perpetrating hacks!
56
57 ### Download
58
59 * [mutt-notmuch](http://git.upsilon.cc/cgi-bin/gitweb.cgi?p=utils/mutt-notmuch.git;a=blob_plain;f=mutt-notmuch;hb=master) - Notmuch (of a) helper for Mutt
60 * [[mutt-notmuch.1]] ([[html|mutt-notmuch.1.html]])- mutt-notmuch manpage
61
62 ----
63
64 **Update** 10/04/2011: mutt-notmuch code is now available
65 [via Git](http://git.upsilon.cc/cgi-bin/gitweb.cgi?p=utils/mutt-notmuch.git;a=summary).
66 Resistence to propose your own patches is futile! The above link to
67 mutt-notmuch has been changed to point to the live Git version.
68
69 [[!tag lang/english planet-debian mutt notmuch hack gtd]]