]> Sergey Matveev's repositories - public-inbox.git/blob - Documentation/public-inbox-config.pod
lei up: support --all for IMAP folders
[public-inbox.git] / Documentation / public-inbox-config.pod
1 =head1 NAME
2
3 public-inbox-config - public-inbox config file description
4
5 =head1 SYNOPSIS
6
7 ~/.public-inbox/config
8
9 =head1 DESCRIPTION
10
11 The public-inbox config file is parseable by L<git-config(1)>.
12 This is a global configuration file for mapping/discovering
13 all public-inboxes used by a particular user.
14
15 =head1 CONFIGURATION FILE
16
17 =head2 EXAMPLE
18
19         [publicinbox "test"]
20                 inboxdir = /home/user/path/to/test.git
21                 ; multiple addresses are supported
22                 address = test@example.com
23                 ; address = alternate@example.com
24                 url = http://example.com/test
25                 newsgroup = inbox.test
26
27                 ; backwards compatibility with public-inbox pre-1.2.0,
28                 ; "inboxdir" takes precedence over "mainrepo"
29                 mainrepo = /home/user/path/to/test.git
30
31 =head2 VARIABLES
32
33 =over 8
34
35 =item publicinbox.<name>.address
36
37 The email address of the public-inbox.  May be specified
38 more than once for merging multiple mailing lists (or migrating
39 to new addresses).  This must be specified at least once,
40 the first value will be considered the primary address for
41 informational purposes.
42
43 Default: none, required
44
45 =item publicinbox.<name>.inboxdir
46
47 The absolute path to the directory which hosts the
48 public-inbox.  This must be specified once.
49
50 This was previously known as "mainrepo", which remains supported,
51 but "inboxdir" takes precedence.
52
53 Default: none, required
54
55 =item publicinbox.<name>.url
56
57 The primary URL for hosting the HTTP/HTTPS archives.
58 Additional HTTP/HTTPS URLs may be specified via
59 C<$GIT_DIR/cloneurl> as documented in L<gitweb(1)>
60
61 Default: none, optional
62
63 =item publicinbox.<name>.newsgroup
64
65 The NNTP group name for use with L<public-inbox-nntpd(8)>.  This
66 may be any newsgroup name with hierarchies delimited by C<.>.
67 For example, the newsgroup for L<mailto:meta@public-inbox.org>
68 is: C<inbox.comp.mail.public-inbox.meta>
69
70 Omitting this for the given inbox will prevent the group from
71 being read by L<public-inbox-nntpd(1)>
72
73 Default: none, optional
74
75 =item publicinbox.<name>.watch
76
77 See L<public-inbox-watch(1)>
78
79 =item publicinbox.<name>.watchheader
80
81 See L<public-inbox-watch(1)>
82
83 =item publicinbox.<name>.listid
84
85 The L<rfc2919|https://tools.ietf.org/html/rfc2919> header without
86 angle brackets for L<public-inbox-mda(1)> deliveries and
87 L<public-inbox-watch(1)>.
88
89 For public-inbox-watch users, this is a shortcut for specifying
90 C<publicinbox.$NAME.watchheader=List-Id:E<lt>foo.example.comE<gt>>
91
92 For public-inbox-mda users, this may be used to avoid recipient
93 matching via C<ORIGINAL_RECIPIENT> environment variable.
94
95 This may be specified multiple times for merging multiple mailing
96 lists into a single public-inbox, only one C<List-Id> header
97 needs to match.
98
99 Default: none
100
101 =item publicinbox.<name>.nntpmirror
102
103 This may be the full NNTP URL of an independently-run mirror.
104 For example, the https://public-inbox.org/meta/ inbox is
105 mirrored by Gmane at
106 C<nntp://news.gmane.io/gmane.mail.public-inbox.general>
107
108 Default: none
109
110 =item publicinbox.<name>.indexlevel
111
112 The indexing level for L<public-inbox-index(1)>
113
114 C<basic> only requires L<DBD::SQLite(3pm)> and provides all
115 NNTP functionality along with thread-awareness in the WWW
116 interface.
117
118 C<medium> requires L<Search::Xapian(3pm)> to provide full-text
119 term search functionality in the WWW UI.
120
121 C<full> also includes positional information used by Xapian to
122 allow for searching for phrases using quoted text.
123 (e.g. C<"looking for a complete sentence">)
124
125 Default: C<full>
126
127 =item publicinbox.<name>.boost
128
129 Control indexing order for L<public-inbox-extindex(1)>, with ties
130 broken by config file order.  This only affects indexing and does
131 not affect messages which are already indexed.
132
133 Default: C<0>
134
135 =item publicinbox.<name>.indexSequentialShard
136
137 See L<public-inbox-index(1)/publicInbox.indexSequentialShard>
138
139 =item publicinbox.<name>.httpbackendmax
140
141 If a digit, the maximum number of parallel
142 L<git-http-backend(1)> processes to allow for cloning this
143 particular inbox.
144
145 If an alphanumeric value starting with a lowercase alphabetic
146 character is specified, the inbox will use a L</NAMED LIMITER>
147 which can be shared by multiple inboxes.
148
149 Default: 32 (using a default limiter shared by all inboxes)
150
151 =item publicinbox.<name>.coderepo
152
153 The nickname of a "coderepo" section associated with the inbox.
154 May be specified more than once for M:N mapping of code repos to
155 inboxes.  If enabled, diff hunk headers in patch emails will
156 link to the line numbers of blobs.
157
158 Default: none
159
160 =item publicinbox.<name>.replyto
161
162 May be used to control how reply instructions in the PSGI
163 interface are displayed.
164
165 ":none=dead inbox" may be specified to denote an inactive list
166 ("dead inbox" may be replaced with another phrase).
167
168 A list of comma-delimited email addresses may be specified.
169 This can be useful for dedicated inboxes for bot emails, but
170 discussion happens on a separate mailing list/inbox.
171
172 Mirrors of existing centralized mailing lists may use ":list"
173 here to redirect mail only to the configured inbox address.
174 The use of ":list" is discouraged for new mailing lists, as it
175 leads to centralization.
176
177 Default: :all
178
179 =item publicinbox.css
180
181 The local path name of a CSS file for the PSGI web interface.
182 May contain the attributes "media", "title" and "href" which match
183 the associated attributes of the HTML <style> tag.
184 "href" may be specified to point to the URL of an remote CSS file
185 and the path may be "/dev/null" or any empty file.
186 Multiple files may be specified and will be included in the
187 order specified.
188
189 =item publicinboxmda.spamcheck
190
191 This may be set to C<none> to disable the use of SpamAssassin
192 L<spamc(1)> for filtering spam before it is imported into git
193 history.  Other spam filtering backends may be supported in
194 the future.
195
196 Default: spamc
197
198 =item publicinboxwatch.spamcheck
199
200 See L<public-inbox-watch(1)>
201
202 =item publicinboxwatch.watchspam
203
204 See L<public-inbox-watch(1)>
205
206 =item publicinbox.nntpserver
207
208 Set this to point to the hostname of the L<public-inbox-nntpd(1)>
209 instance.  This is used to advertise the existence of the NNTP
210 endpoint in the L<PublicInbox::WWW> HTML interface.
211
212 Multiple values are allowed for instances with multiple hostnames
213 or mirrors.
214
215 Default: none
216
217 =item publicinbox.<name>.feedmax
218
219 The size of an Atom feed for the inbox.  If specified more than
220 once, only the last value is used.  Invalid values (<= 0) will
221 be treated as the default value.
222
223 Default: 25
224
225 =item publicinbox.<name>.hide
226
227 A comma-delimited list of listings to hide the inbox from.
228
229 Valid values are currently C<www> and C<manifest>.
230
231 Default: none
232
233 =item coderepo.<nick>.dir
234
235 The path to a git repository for "publicinbox.<name>.coderepo"
236
237 =item coderepo.<nick>.cgitUrl
238
239 The URL of the cgit instance associated with the coderepo.
240
241 Default: none
242
243 =item publicinbox.cgitrc
244
245 A path to a L<cgitrc(5)> file.  "repo.url" directives in the cgitrc
246 will be mapped to the nickname of a coderepo (without trailing slash),
247 and "repo.path" directives map to "coderepo.<nick>.dir".
248 Use of this directive allows admins of existing cgit installations
249 to skip declaring coderepo sections and map inboxes directly to
250 code repositories known to cgit.
251
252 Macro expansion (e.g. C<$HTTP_HOST>) is not yet supported.
253
254 =item publicinbox.cgitbin
255
256 A path to the C<cgit.cgi> executable.  The L<PublicInbox::WWW>
257 interface can spawn cgit as a fallback if the publicinbox.cgitrc
258 directive is configured.
259
260 Default: /var/www/htdocs/cgit/cgit.cgi or /usr/lib/cgit/cgit.cgi
261
262 =item publicinbox.cgitdata
263
264 A path to the data directory used by cgit for storing static files.
265 Typically guessed based the location of C<cgit.cgi> (from
266 C<publicinbox.cgitbin>, but may be overridden.
267
268 Default: basename of C<publicinbox.cgitbin>, /var/www/htdocs/cgit/
269 or /usr/share/cgit/
270
271 =item publicinbox.mailEditor
272
273 See L<public-inbox-edit(1)>
274
275 =item publicinbox.indexMaxSize
276 =item publicinbox.indexBatchSize
277 =item publicinbox.indexSequentialShard
278
279 See L<public-inbox-index(1)>
280
281 =item publicinbox.wwwlisting
282
283 Enable a HTML listing style when the root path of the URL '/' is accessed.
284 Valid values are:
285
286 =over 8
287
288 =item * all
289 - Show all inboxes
290
291 =item * 404
292 - Return a 404 page.  This is useful to allow customization with
293 L<Plack::App::Cascade(3pm)>
294
295 =item * match=domain
296 - Only show inboxes with URLs which belong to the domain of the HTTP request
297
298 =for comment
299 TODO support showing cgit listing
300
301 =back
302
303 Default: C<404>
304
305 =item publicinbox.grokmanifest
306
307 Controls the generation of a grokmirror-compatible gzipped JSON file
308 at the top-level of the PSGI interface.  You generally do not need to
309 change this from the default.
310
311 Valid values are:
312
313 =over 8
314
315 =item * match=domain
316 - Only include inboxes with URLs which belong to the domain of
317 the HTTP request.  This is compatible with virtual hosting where
318 several domains come from the same host.
319
320 =item * all
321 - All inboxes are present in C<manifest.js.gz>, regardless of domain.
322 Only use this if you're serving HTTP requests in a domain-agnostic manner.
323
324 =item * 404
325 - C<manifest.js.gz> will only contain an empty JSON array.
326 This does NOT affect C<$INBOX_URL/manifest.js.gz>, which will
327 always contain all git repos used by the inbox at C<$INBOX_URL>
328
329 =back
330
331 Default: C<match=domain>
332
333 =item publicinbox.<name>.obfuscate
334
335 Whether to obfuscate email addresses in the L<PublicInbox::WWW> HTML
336 interface.
337
338 Default: false
339
340 =item publicinbox.noObfuscate
341
342 A space-delimited list of well-known addresses and domains that should
343 not be obfuscated when C<publicinbox.$NAME.obfuscate> is true (e.g.,
344 C<public@example.com> and C<@example.com>).  This may be specified
345 more than once, in which case the values are merged.
346
347 Default: none
348
349 =back
350
351 =head2 NAMED LIMITER (PSGI)
352
353 Named limiters are useful for preventing large inboxes from
354 monopolizing (or overloading) the server.  Since serving git
355 clones (via L<git-http-backend(1)> can be memory-intensive for
356 large inboxes, it makes sense to put large inboxes on a named
357 limiter with a low max value; while smaller inboxes can use
358 the default limiter.
359
360 C<RLIMIT_*> keys may be set to enforce resource limits for
361 a particular limiter (L<BSD::Resource(3pm)> is required).
362
363 Default named-limiters are prefixed with "-".  Currently,
364 the "-cgit" named limiter is reserved for instances spawning
365 cgit via C<publicinbox.cgitrc>
366
367 =over 8
368
369 =item publicinboxlimiter.<name>.max
370
371 The maximum number of parallel processes for the given limiter.
372
373 =item publicinboxlimiter.<name>.rlimitCore
374
375 =item publicinboxlimiter.<name>.rlimitCPU
376
377 =item publicinboxlimiter.<name>.rlimitData
378
379 The maximum core size, CPU time, or data size processes run with the
380 given limiter will use.  This may be comma-separated to distinguish
381 soft and hard limits.  The word "INFINITY" is accepted as the
382 RLIM_INFINITY constant (if supported by your OS).
383
384 See L<setrlimit(2)> for more info on the behavior of RLIMIT_CORE,
385 RLIMIT_CPU, and RLIMIT_DATA for you operating system.
386
387 =back
388
389 =head3 EXAMPLE WITH NAMED LIMITERS
390
391         ; big inboxes which require lots of memory to clone:
392         [publicinbox "big1"]
393                 inboxdir = /path/to/big1
394                 address = big1@example.com
395                 httpbackendmax = big
396         [publicinbox "big2"]
397                 inboxdir = /path/to/big2
398                 address = big2@example.com
399                 httpbackendmax = big
400
401         ; tiny inboxes which are easily cloned:
402         [publicinbox "tiny1"]
403                 inboxdir = /path/to/tiny1
404                 address = tiny1@example.com
405         [publicinbox "tiny2"]
406                 inboxdir = /path/to/tiny2
407                 address = tiny2@example.com
408
409         [publicinboxlimiter "big"]
410                 max = 4
411
412 In the above example, the "big1" and "big2" are limited to four
413 parallel L<git-http-backend(1)> processes between them.
414
415 However, "tiny1" and "tiny2" will share the default limiter
416 which means there can be 32 L<git-http-backend(1)> processes
417 between them.
418
419 =head1 ENVIRONMENT
420
421 =over 8
422
423 =item PI_CONFIG
424
425 Used to override the default "~/.public-inbox/config" value.
426
427 =back
428
429 =head1 CONTACT
430
431 Feedback welcome via plain-text mail to L<mailto:meta@public-inbox.org>
432
433 The mail archives are hosted at L<https://public-inbox.org/meta/> and
434 L<http://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/meta/>
435
436 =head1 COPYRIGHT
437
438 Copyright 2016-2021 all contributors L<mailto:meta@public-inbox.org>
439
440 License: AGPL-3.0+ L<https://www.gnu.org/licenses/agpl-3.0.txt>
441
442 =head1 SEE ALSO
443
444 L<git(1)>, L<git-config(1)>, L<public-inbox-daemon(8)>,
445 L<public-inbox-mda(1)>, L<public-inbox-watch(1)>,
446 L<grokmirror|https://git.kernel.org/pub/scm/utils/grokmirror/grokmirror.git>