3 lei - an overview of lei
7 L<lei(1)> is a local email interface for public-inbox. This document
8 provides some basic examples.
12 lei has writable local storage based on L<public-inbox-v2-format(5)>.
13 Commands will automatically initialize the store behind the scenes if
14 needed, but you can call L<lei-init(1)> directly if you want to use a
15 store location other than the default C<$XDG_DATA_HOME/lei/store>.
17 The L<lei-import(1)> command provides the primary interface for
18 importing messages into the local storage. In addition, other
19 commands, such as L<lei-q(1)> and L<lei-blob(1)>, use the local store
20 to memoize messages from remotes.
26 =item $ lei import mboxrd:t.mbox.gz
28 Import the messages from a gzipped mboxrd into the local storage.
30 =item $ lei blob 59ec517f9
32 Show message with the git blob OID of 59ec517f9. If a message with
33 that OID isn't found, check if the current git repository has the
34 blob, trying to reconstruct it from a message if needed.
36 =item $ lei blob 59ec517f9 | lei tag -F eml +kw:flagged +L:next
38 Set the "flagged" keyword and "next" label on the message with the
39 blob OID of 59ec517f9.
45 In addition to the above store, lei can make read-only queries to
46 "externals": inboxes and external indices. An external can be
47 registered by passing a URL or local path to L<lei-add-external(1)>.
48 For existing local paths, the external needs to be indexed with
49 L<public-inbox-index(1)> (in the case of a regular inbox) or
50 L<public-inbox-extindex(1)> (in the case of an external index).
56 =item $ lei add-external https://public-inbox.org/meta/
58 Add a remote external for public-inbox's inbox.
60 =item $ lei add-external --mirror https://public-inbox.org/meta/ path
62 Clone L<https://public-inbox.org/meta/> to C<path>, index it with
63 L<public-inbox-index(1)>, and add it as a local external.
69 The L<lei-q(1)> command searches the local store and externals. The
70 search prefixes match those available via L<public-inbox-httpd(1)>.
76 =item $ lei q s:lei s:skeleton
78 Search for messages whose subject includes "lei" and "skeleton".
80 =item $ lei q -t s:lei s:skeleton
82 Do the same, but also report unmatched messages that are in the same
83 thread as a matched message.
85 =item $ lei q -t -o /tmp/mdir --mua=mutt s:lei s:skeleton
87 Write results to a Maildir at "mdir". Mutt will be invoked
88 to open mfolder (C<mutt -f %f>) while results are being fetched
91 =item $ lei q kw:flagged L:next
93 Search for all flagged messages that also have a "next" label.
95 =item $ lei p2q HEAD | lei q -tt -o /tmp/mdir
97 Search for messages that have post-image git blob IDs that match those
98 of the current repository's HEAD commit, writing them to the Maildir
99 directory "mdir" and flagging the messages that were an exact match.
101 =item $ git show -s HEAD | lei lcat
103 Display a local message for the public-inbox link contained in a
106 =item $ lei q -f text m:MESSAGE-ID | lei rediff -U5
108 Feed a message containing a diff to L<lei-rediff(1)> to regenerate its
109 diff with five context lines. Unless C<--git-dir> is specified, this
110 requires the current working directory to be within the associated
115 =head1 PERFORMANCE NOTES
117 L<Inline::C> is required, lei runs as a background daemon to reduce
118 startup costs and can provide real-time L<kqueue(2)>/L<inotify(7)>
119 Maildir monitoring. L<IO::KQueue> (p5-IO-KQueue on FreeBSD) and
120 L<Linux::Inotify2> (liblinux-inotify2-perl and perl-Linux-Inotify2 in
121 .deb and .rpm-based distros, respectively) are recommended.
123 L<Socket::MsgHdr> is optional (libsocket-msghdr-perl in Debian),
124 and further improves startup performance. Its effect is most felt
125 when using shell completion.
127 =head1 BASH COMPLETION
129 Preliminary Bash completion for lei is provided in
130 C<contrib/completion/>. Contributions adding support for other
131 shells, as well as improvements to the existing Bash completion, are
136 Since lei runs as a daemon, L<lei-daemon-kill(1)> is required to kill
137 the daemon so it can load new code. It will be restarted with the
138 next invocation of any lei command.
142 IMAP and NNTP client performance is poor on high-latency connections.
143 It will hopefully be fixed in 2022.
147 Feedback welcome via plain-text mail to L<mailto:meta@public-inbox.org>
149 The mail archives are hosted at L<https://public-inbox.org/meta/> and
150 L<http://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/meta/>
154 Copyright all contributors L<mailto:meta@public-inbox.org>
156 License: AGPL-3.0+ L<https://www.gnu.org/licenses/agpl-3.0.txt>