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