]> Sergey Matveev's repositories - public-inbox.git/blobdiff - Documentation/public-inbox-config.pod
mda, watch: wire up List-ID header support
[public-inbox.git] / Documentation / public-inbox-config.pod
index 23ebcc5fc6c1655e478ba8800f314a4f32741c99..6a9739f71433c85ac8bba39ea8e0a0a11b0de5a0 100644 (file)
@@ -80,8 +80,29 @@ Default: none; only for L<public-inbox-watch(1)> users
        [publicinbox "test"]
                watchheader = List-Id:<test.example.com>
 
+If specified, L<public-inbox-watch(1)> will only process mail matching
+the given header.  Multiple values are not currently supported.
+
 Default: none; only for L<public-inbox-watch(1)> users
 
+=item publicinbox.<name>.listid
+
+The L<rfc2919|https://tools.ietf.org/html/rfc2919> header without
+angle brackets for L<public-inbox-mda(1)> deliveries and
+L<public-inbox-watch(1)>.
+
+For public-inbox-watch users, this is a shortcut for specifying
+C<publicinbox.$NAME.watchheader=List-Id:<foo.example.com>>
+
+For public-inbox-mda users, this may be used to avoid recipient
+matching via C<ORIGINAL_RECIPIENT> environment variable.
+
+This may be specified multiple times for merging multiple mailing
+lists into a single public-inbox, only one C<List-Id> header
+needs to match.
+
+Default: none
+
 =item publicinbox.<name>.nntpmirror
 
 This may be the full NNTP URL of an independently-run mirror.
@@ -91,6 +112,35 @@ C<nntp://news.gmane.org/gmane.mail.public-inbox.general>
 
 Default: none
 
+=item publicinbox.<name>.indexlevel
+
+The indexing level for L<public-inbox-index(1)>
+
+C<basic> only requires L<DBD::SQLite(3pm)> and provides all
+NNTP functionality along with thread-awareness in the WWW
+interface.
+
+C<medium> requires L<Search::Xapian(3pm)> to provide full-text
+term search functionality in the WWW UI.
+
+C<full> also includes positional information used by Xapian to
+allow for searching for phrases using quoted text.
+(e.g. C<"looking for a complete sentence">)
+
+Default: C<full>
+
+=item publicinbox.<name>.httpbackendmax
+
+If a digit, the maximum number of parallel
+L<git-http-backend(1)> processes to allow for cloning this
+particular inbox.
+
+If an alphanumeric value starting with a lowercase alphabetic
+character is specified, the inbox will use a L</NAMED LIMITER>
+which can be shared by multiple inboxes.
+
+Default: 32 (using a default limiter shared by all inboxes)
+
 =item publicinbox.<name>.coderepo
 
 The nickname of a "coderepo" section associated with the inbox.
@@ -100,6 +150,25 @@ link to the line numbers of blobs.
 
 Default: none
 
+=item publicinbox.<name>.replyto
+
+May be used to control how reply instructions in the PSGI
+interface are displayed.
+
+":none=dead inbox" may be specified to denote an inactive list
+("dead inbox" may be replaced with another phrase).
+
+A list of comma-delimited email addresses may be specified.
+This can be useful for dedicated inboxes for bot emails, but
+discussion happens on a seperate mailing list/inbox.
+
+Mirrors of existing centralized mailing lists may use ":list"
+here to redirect mail only to the configured inbox address.
+The use of ":list" is discouraged for new mailing lists, as it
+leads to centralization.
+
+Default: :all
+
 =item publicinbox.css
 
 The local path name of a CSS file for the PSGI web interface.
@@ -157,18 +226,179 @@ be treated as the default value.
 
 Default: 25
 
-=item coderepo.<name>.dir
+=item publicinbox.<name>.hide
+
+A comma-delimited list of listings to hide the inbox from.
+
+Valid values are currently C<www> and C<manifest>.
+
+Default: none
+
+=item coderepo.<nick>.dir
 
 The path to a git repository for "publicinbox.<name>.coderepo"
 
-=item coderepo.<name>.cgitUrl
+=item coderepo.<nick>.cgitUrl
 
 The URL of the cgit instance associated with the coderepo.
 
 Default: none
 
+=item publicinbox.cgitrc
+
+A path to a L<cgitrc(5)> file.  "repo.url" directives in the cgitrc
+will be mapped to the nickname of a coderepo (without trailing slash),
+and "repo.path" directives map to "coderepo.<nick>.dir".
+Use of this directive allows admins of existing cgit installations
+to skip declaring coderepo sections and map inboxes directly to
+code repositories known to cgit.
+
+Macro expansion (e.g. C<$HTTP_HOST>) is not yet supported.
+
+=item publicinbox.cgitbin
+
+A path to the C<cgit.cgi> executable.  The L<PublicInbox::WWW>
+interface can spawn cgit as a fallback if the publicinbox.cgitrc
+directive is configured.
+
+Default: /var/www/htdocs/cgit/cgit.cgi or /usr/lib/cgit/cgit.cgi
+
+=item publicinbox.cgitdata
+
+A path to the data directory used by cgit for storing static files.
+Typically guessed based the location of C<cgit.cgi> (from
+C<publicinbox.cgitbin>, but may be overridden.
+
+Default: basename of C<publicinbox.cgitbin>, /var/www/htdocs/cgit/
+or /usr/share/cgit/
+
+=item publicinbox.mailEditor
+
+See L<public-inbox-edit(1)>
+
+=item publicinbox.wwwlisting
+
+Enable a HTML listing style when the root path of the URL '/' is accessed.
+Valid values are:
+
+=over 8
+
+=item * all
+- Show all inboxes
+
+=item * 404
+- Return a 404 page.  This is useful to allow customization with
+L<Plack::App::Cascade(3pm)>
+
+=item * match=domain
+- Only show inboxes with URLs which belong to the domain of the HTTP request
+
+=for TODO comment
+
+support showing cgit listing
+
+=back
+
+Default: C<404>
+
+=item publicinbox.grokmanifest
+
+Controls the generation of a grokmirror-compatible gzipped JSON file
+at the top-level of the PSGI interface.  You generally do not need to
+change this from the default.
+
+Valid values are:
+
+=over 8
+
+=item * match=domain
+- Only include inboxes with URLs which belong to the domain of
+the HTTP request.  This is compatible with virtual hosting where
+several domains come from the same host.
+
+=item * all
+- All inboxes are present in C<manifest.js.gz>, regardless of domain.
+Only use this if you're serving HTTP requests in a domain-agnostic manner.
+
+=item * 404
+- C<manifest.js.gz> will only contain an empty JSON array.
+This does NOT affect C<$INBOX_URL/manifest.js.gz>, which will
+always contain all git repos used by the inbox at C<$INBOX_URL>
+
+=back
+
+Default: C<match=domain>
+
 =back
 
+=head2 NAMED LIMITER (PSGI)
+
+Named limiters are useful for preventing large inboxes from
+monopolizing (or overloading) the server.  Since serving git
+clones (via L<git-http-backend(1)> can be memory-intensive for
+large inboxes, it makes sense to put large inboxes on a named
+limiter with a low max value; while smaller inboxes can use
+the default limiter.
+
+C<RLIMIT_*> keys may be set to enforce resource limits for
+a particular limiter.
+
+Default named-limiters are prefixed with "-".  Currently,
+the "-cgit" named limiter is reserved for instances spawning
+cgit via C<publicinbox.cgitrc>
+
+=over 8
+
+=item publicinboxlimiter.<name>.max
+
+The maximum number of parallel processes for the given limiter.
+
+=item publicinboxlimiter.<name>.rlimitCore
+
+=item publicinboxlimiter.<name>.rlimitCPU
+
+=item publicinboxlimiter.<name>.rlimitData
+
+The maximum core size, CPU time, or data size processes run with the
+given limiter will use.  This may be comma-separated to distinguish
+soft and hard limits.  The word "INFINITY" is accepted as the
+RLIM_INFINITY constant (if supported by your OS).
+
+See L<setrlimit(2)> for more info on the behavior of RLIMIT_CORE,
+RLIMIT_CPU, and RLIMIT_DATA for you operating system.
+
+=back
+
+=head3 EXAMPLE WITH NAMED LIMITERS
+
+       ; big inboxes which require lots of memory to clone:
+       [publicinbox "big1"]
+               mainrepo = /path/to/big1
+               address = big1@example.com
+               httpbackendmax = big
+       [publicinbox "big2"]
+               mainrepo = /path/to/big2
+               address = big2@example.com
+               httpbackendmax = big
+
+       ; tiny inboxes which are easily cloned:
+       [publicinbox "tiny1"]
+               mainrepo = /path/to/tiny1
+               address = tiny1@example.com
+       [publicinbox "tiny2"]
+               mainrepo = /path/to/tiny2
+               address = tiny2@example.com
+
+       [publicinboxlimiter "big"]
+               max = 4
+
+In the above example, the "big1" and "big2" are limited to four
+parallel L<git-http-backend(1)> processes between them.
+
+However, "tiny1" and "tiny2" will share the default limiter
+which means there can be 32 L<git-http-backend(1)> processes
+between them.
+
 =head1 ENVIRONMENT
 
 =over 8
@@ -188,11 +418,12 @@ and L<http://hjrcffqmbrq6wope.onion/meta/>
 
 =head1 COPYRIGHT
 
-Copyright 2016-2018 all contributors L<mailto:meta@public-inbox.org>
+Copyright 2016-2019 all contributors L<mailto:meta@public-inbox.org>
 
 License: AGPL-3.0+ L<https://www.gnu.org/licenses/agpl-3.0.txt>
 
 =head1 SEE ALSO
 
 L<git(1)>, L<git-config(1)>, L<public-inbox-daemon(8)>,
-L<public-inbox-mda(1)>, L<public-inbox-watch(1)>
+L<public-inbox-mda(1)>, L<public-inbox-watch(1)>,
+L<grokmirror|https://git.kernel.org/pub/scm/utils/grokmirror/grokmirror.git>