blob: 0ea60ff7b25c3d39a456914d358fa6b631bb7743 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
cgitrc - runtime configuration for cgit
=======================================

cgitrc holds all runtime settings for cgit, including the list of git
repositories, formatted as a line-separated list of NAME=VALUE pairs. Blank
lines, and lines starting with '#' or ';', are ignored, and so is a line
carrying no '='. A comment cannot share a line with a setting, since everything
after the '=' belongs to the value. A NAME cgit does not recognise is ignored
with a warning on stderr, which the web server collects in its error log.

The default location of cgitrc, defined at compile time, is /etc/cgitrc. At
runtime, cgit will consult the environment variable CGIT_CONFIG and, if defined,
use its value instead.


Global settings
---------------

about-filter::
	Specifies a command which will be invoked to format the content of about
	pages (both top-level and for each repository). The command will get the
	content of the about-file on its stdin, the name of the file as the
	first argument, and the stdout from the command will be included
	verbatim on the about page. Default value: none. When no about-filter is
	set, the readme is escaped and served as plain text. A bundled Lua
	filter, about-render.lua, renders markdown, man pages and plain text
	when about-filter points at it. See also: "Filter API".

age-file::
	Specifies a path, relative to each repository path, which can be used to
	specify the date and time of the youngest commit in the repository. The
	first line in the file is read by git's date parser, and the recommended
	form is "yyyy-mm-dd hh:mm:ss". A post-receive hook can write this file.
	Default value: "info/web/last-modified".

auth-filter::
	Specifies a command that will be invoked for authenticating repository
	access. Receives 12 arguments, with request data on stdin and its answer
	on stdout, as described under "Filter API". If no auth-filter is
	specified, no authentication is performed. Default value: none.

branch-sort::
	Flag which, when set to "age", enables date ordering in the branch ref
	list, and when set to "name" enables ordering by branch name. Default
	value: "name".

cache-about-ttl::
	Number which specifies the time-to-live, in minutes, for the cached
	version of the repository about page. See also: "The cache". Default
	value: "15".

cache-dynamic-ttl::
	Number which specifies the time-to-live, in minutes, for the cached
	version of repository pages accessed without a fixed object id. See
	also: "The cache". Default value: "5".

cache-index-ttl::
	Number which specifies the time-to-live, in minutes, for the cached
	version of the repository index page. See also: "The cache". Default
	value: "5".

cache-max-slot-size::
	Number which specifies the largest response, in kilobytes, that a cache
	slot may keep. A larger response is still served but not kept, so one
	archive cannot take a slot's worth of disk. Set to "0" to remove the
	limit. See also: "The cache". Default value: "65536" (64 MB).

cache-root::
	Path used to store the cgit cache entries. Default value:
	"/var/cache/cgit". See also: "Macro expansion" and the note on ownership
	under "The cache".

cache-scan-ttl::
	Number which specifies the time-to-live, in minutes, for the result of
	scanning a path for git repositories. See also: "The cache". Default
	value: "15".

cache-size::
	The maximum number of entries in the cgit cache. When set to "0",
	caching is disabled. See also: "The cache". Default value: "0".

cache-snapshot-ttl::
	Number which specifies the time-to-live, in minutes, for the cached
	version of snapshots. A snapshot requested with a fixed object id uses
	"cache-static-ttl" instead, since its content can never change. See
	also: "The cache". Default value: "5".

cache-static-ttl::
	Number which specifies the time-to-live, in minutes, for the cached
	version of repository pages accessed with a fixed object id. See also:
	"The cache". Default value: "-1".

cache-summary-ttl::
	Number which specifies the time-to-live, in minutes, for the cached
	version of the repository summary page. See also: "The cache". Default
	value: "5".

case-sensitive-sort::
	Sort items in the repository list case sensitively. Default value: "1".
	See also: repository-sort, section-sort.

clone-prefix::
	Space-separated list of common prefixes which, when combined with a
	repository url, generates valid clone urls for the repository. This
	setting is only used if "repo.clone-url" is unspecified. Default value:
	none.

clone-url::
	Space-separated list of clone-url templates. This setting is only used
	if "repo.clone-url" is unspecified. Default value: none. See also:
	"Macro expansion", "Filter API".

commit-filter::
	Specifies a command which will be invoked to format commit messages. The
	command will get the message on its stdin, and the stdout from the
	command will be included verbatim as the commit message, which is one
	way to link a bug tracker. Default value: none. See also: "Filter API".

commit-sort::
	Flag which, when set to "date", enables strict date ordering in the
	commit log, and when set to "topo" enables strict topological ordering.
	If unset, the default ordering of "git log" is used. Default value:
	none.

css::
	Url which specifies the css document to include in all cgit pages.
	Default value: "/cgit.css". May be given multiple times, each css URL
	path is added in the head section of the document in turn. Setting this
	to an empty string will disable generation of the link to this file in
	the head section.

date-format::
	Format used for the calendar dates in the age columns of the log, refs
	and index pages, both when "enable-relative-dates" is off and when a log
	entry is too old to be shown as an age. Accepts the same names as git's
	--date option: "default", "human", "iso" (or "iso8601"), "iso-strict"
	(or "iso8601-strict"), "raw", "relative", "rfc" (or "rfc2822"), "short"
	and "unix", each of which may carry a "-local" suffix, plus
	"format:<strftime>" for an arbitrary layout. An unrecognised value is
	ignored. Dates elsewhere, such as the author and committer lines on the
	commit page, are always ISO 8601 and are not affected, nor are the exact
	timestamps shown on hover. Default value: "short". See also:
	"local-time".

email-filter::
	Specifies a command which will be invoked to format names and email
	address of committers, authors, and taggers, as represented in various
	places throughout the cgit interface. This command will receive an email
	address and an origin page string as its command line arguments, and the
	text to format on stdin. It is to write the formatted text back out onto
	stdout. Default value: none. See also: "Filter API".

embedded::
	Flag which, when set to "1", makes cgit generate a html fragment
	suitable for embedding in other html pages. Default value: "0". See
	also: "enable-header".

enable-blame::
	Flag which, when set to "1", lets cgit provide a "blame" page for files
	and makes it generate links to that page in appropriate places. Default
	value: "0".

enable-cache-list::
	Flag which, when set to "1", exposes the "ls_cache" page. That page
	lists the cache directory path and the URLs of requests other visitors
	made, so it is disabled by default and should stay off on any instance
	where that disclosure matters. Default value: "0".

enable-commit-graph::
	Flag which, when set to "1", makes cgit print an ASCII-art commit
	history graph to the left of the commit messages in the repository log
	page. Default value: "0".

enable-commit-trailers::
	Flag which, when set to "1", makes the commit page split the trailer
	block, the Signed-off-by lines and their kin, off the end of the commit
	message and show it as a table under the message. The block is found the
	way git finds it for "git interpret-trailers", so the last paragraph is
	taken when every line in it is a trailer, or when it holds a
	Signed-off-by and at least a quarter of its lines are trailers. Default
	value: "0". See also: "trailer-filter", "repo.enable-commit-trailers".

enable-follow-links::
	Flag which, when set to "1", allows users to follow a file in the log
	page. Default value: "0".

enable-git-config::
	Flag which, when set to "1", lets cgit read repository settings from git
	config. This option is used in conjunction with "scan-path", and must be
	defined prior, to augment repository settings. The keys gitweb.owner,
	gitweb.category, and gitweb.description map to the cgit keys repo.owner,
	repo.section, and repo.desc respectively. All git config keys that begin
	with "cgit." are mapped to the corresponding "repo." key in cgit,
	subject to "trust-scan-config" the way a repository's cgitrc is. Default
	value: "0". See also: scan-path, section-from-path, trust-scan-config.

enable-gitmodules-links::
	Flag which, when set to "1", makes submodule listings derive a link from
	the url recorded in the .gitmodules file at the shown revision, for
	submodules that no module-link template covers. The url is first
	matched, by its trailing path components, against the repositories
	served by this cgit instance, so ssh, file and relative urls still get a
	link when their target is hosted here, and the commit hash then links to
	the target repository's commit page. Otherwise a plain http or https url
	is linked as it is, an ssh url to a well-known public host is rewritten
	to its https form, and any other url is left unlinked and shown as a
	tooltip instead. Default value: "0". See also:
	"repo.enable-gitmodules-links".

enable-header::
	Flag which, when set to "0", makes cgit omit the standard header on all
	pages. Default value: "1". See also: "embedded".

enable-html-serving::
	Flag which, when set to "1", lets the /plain handler serve mimetype
	headers that result in the file being treated as HTML by the browser.
	When set to "0", such file types are returned instead as text/plain or
	application/octet-stream. In a repository found by "scan-path" the
	setting waits on "trust-scan-config", since a page served this way runs
	with the site's own origin. Default value: "0". See also:
	"repo.enable-html-serving".

enable-http-clone::
	If set to "1", cgit acts as a dumb HTTP endpoint for git clones. Adding
	"http://$HTTP_HOST$SCRIPT_NAME/$CGIT_REPO_URL" to clone-url exposes it.
	The files it serves come straight off the disk and are never cached. A
	site that serves git repositories another way can turn this off.
	Default value: "1".

enable-index-links::
	Flag which, when set to "1", makes cgit generate extra links for each
	repository in the index, to the "summary", "commit" and "tree" pages.
	Default value: "0".

enable-index-owner::
	Flag which, when set to "1", makes cgit display the owner of each
	repository in the index. Default value: "1".

enable-log-filecount::
	Flag which, when set to "1", makes cgit print the number of modified
	files for each commit on the repository log page. Default value: "0".

enable-log-linecount::
	Flag which, when set to "1", makes cgit print the number of added and
	removed lines for each commit on the repository log page. Default value:
	"0".

enable-mailmap::
	Flag which, when set to "1", applies the repository's mailmap to every
	author, committer and tagger shown, so a person who changed name or
	address appears under one identity in the log, commit, tag, blame and
	statistics pages, the atom feed and the author search. Only the .mailmap
	blob at HEAD is read, as git does for a bare repository, and the
	mailmap.file and mailmap.blob settings are ignored. Default value: "1".
	See also: "repo.enable-mailmap".

enable-plain-email::
	Flag which, when set to "0", hides the full author, committer and tagger
	email addresses wherever they would be shown beside the name. Default
	value: "1".

enable-relative-dates::
	Flag which, when set to "1", shows the age columns of the log, refs and
	index pages as an elapsed time such as "3 days" rather than a calendar
	date. When set to "0" those columns always show a date, formatted
	according to "date-format". Default value: "1".

enable-remote-branches::
	Flag which, when set to "1", makes cgit display remote branches in the
	summary and refs pages. Default value: "0". See also:
	"repo.enable-remote-branches".

enable-subject-links::
	Flag which, when set to "1", makes cgit use the subject of the parent
	commit as link text when generating links to parent commits in the
	commit page. Default value: "0". See also: "repo.enable-subject-links".

enable-tree-group-dirs::
	Flag which, when set to "1", makes the tree page list all directories
	first, sorted, followed by the files. When set to "0", entries appear in
	git's own order, with directories and files intermixed by name. Default
	value: "0".

enable-tree-linenumbers::
	Flag which, when set to "1", makes cgit generate linenumber links for
	plaintext blobs printed in the tree page. Default value: "1".

favicon::
	Url used as link to the icon for cgit. Any path works, but keeping the
	value "/favicon.ico" is still worthwhile, since clients that do not
	parse the page head probe that path directly. Default value:
	"/favicon.ico".

footer::
	The content of the file specified with this option will be included
	verbatim at the bottom of all pages (it replaces the standard "generated
	by..." message). Default value: none.

head-include::
	The content of the file specified with this option will be included
	verbatim in the html HEAD section on all pages. Default value: none.

header::
	The content of the file specified with this option will be included
	verbatim at the top of all pages. Default value: none.

include::
	Name of a configfile to include before the rest of the current
	configfile is parsed. Includes may nest eight levels deep, and anything
	deeper is ignored. Default value: none. See also: "Macro expansion".

js::
	Url which specifies the javascript script document to include in all
	cgit pages. Default value: "/cgit.js". Setting this to an empty string
	will disable generation of the link to this file in the head section.

local-time::
	Flag which, if set to "1", makes cgit print commit and tag times in the
	server's timezone. Default value: "0". See also: "date-format".

logo::
	Url which specifies the source of an image which will be used as a logo
	on all cgit pages. Default value: "/cgit.png".

logo-link::
	Url loaded when clicking on the cgit logo image. Default value: the url
	of the repository index page.

max-atom-items::
	Specifies the number of items to display in the atom feed. Default
	value: "10".

max-blob-size::
	Specifies the maximum size in KBytes of a blob that cgit will read into
	memory to serve. It caps both the HTML blob page and the raw "plain" and
	"blob" output, and a larger object is refused rather than loaded whole.
	Default value: "10240" (10 MB). Set to "0" to disable the limit.

max-commit-count::
	Specifies the number of entries to list per page in "log" page. Default
	value: "50".

max-diff-files::
	If a commit changes more files than this, the "commit" and "diff" pages
	show only the diffstat, where each file links to its own diff page. The
	"rawdiff" and "patch" pages are never limited. Default value: "200". Set
	to "0" to always render every file inline.

max-diff-lines::
	If a single file's diff spans more lines than this, the whole-commit
	pages print a note in its place linking to the file's own diff page,
	which always renders in full. Default value: "1000". Set to "0" to
	always render oversized files inline.

max-message-length::
	Specifies the maximum number of commit message characters to display in
	the "log" page. Default value: "80".

max-patch-count::
	Specifies the maximum number of commits emitted as a series by the
	"patch" page when an explicit revision range is requested. A single
	commit is unaffected. Default value: "50". Set to "0" for no limit.

max-ref-count::
	Specifies the number of branches and tags to list per section on the
	"refs" page, and per page on the dedicated branch and tag pages that its
	overflow links lead to. Default value: "200". Set to "0" to list every
	ref on one page.

max-repo-count::
	Specifies the number of entries to list per page on the repository index
	page. A value of "0" or less shows all repositories without limitation.
	Default value: "50".

max-repodesc-length::
	Specifies the maximum number of repository description characters to
	display on the repository index page. Default value: "80".

max-stats::
	Enable the statistics page, which holds the commits-per-author table,
	and set the coarsest period it offers. Valid values are "week", "month",
	"quarter" and "year", each of which also offers the finer periods before
	it. If unspecified, statistics are disabled. Default value: none. See
	also: "repo.max-stats".

mimetype-file::
	Specifies the file to use for automatic mimetype lookup. If specified
	then this field is used as a fallback when no "mimetype.<ext>" match is
	found. If unspecified then no such lookup is performed. The typical file
	to use on a Linux system is /etc/mime.types. Each line in the file holds
	a mimetype, like image/png, followed by one or more file extensions,
	like jpg, separated by whitespace. Empty lines and lines whose first
	non-blank character is a hash are ignored. Default value: none. See
	also: "mimetype.<ext>".

mimetype.<ext>::
	Set the mimetype for the specified filename extension. The "plain" page
	uses it when returning blob content. Default value: none. See also:
	"mimetype-file".

module-link::
	Text which will be used as the formatstring for a hyperlink when a
	submodule is printed in a directory listing. The arguments for the
	formatstring are the name of the submodule directory and the object id
	of the submodule commit. Default value: none.

project-list::
	A list of subdirectories inside of scan-path, relative to it, that
	should be loaded as git repositories. This must be defined prior to
	scan-path. Default value: none. See also: scan-path, "Macro expansion".

readme::
	Text which will be used as default value for "repo.readme". Multiple
	config keys may be specified, and cgit will use the first found file in
	this list. This is useful in conjunction with scan-path. Default value:
	none. See also: scan-path, repo.readme.

remove-suffix::
	If set to "1" and scan-path is enabled, if any repositories are found
	with a suffix of ".git", this suffix will be removed for the url and
	name. This must be defined prior to scan-path. Default value: "0". See
	also: scan-path.

rename-limit::
	Maximum number of files to consider when detecting renames. The value
	"-1" uses the compiletime value in git, see git-diff(1). Default value:
	"-1".

repository-sort::
	The way in which repositories in each section are sorted. Valid values
	are "name" for sorting by the repository name or "age" for sorting by
	the most recently updated repository. Default value: "name". See also:
	section, case-sensitive-sort, section-sort.

robots::
	Text used as content for the "robots" meta-tag. Default value: "index,
	nofollow".

root-desc::
	Text printed below the heading on the repository index page. Default
	value: "a fast webinterface for the git dscm".

root-readme::
	The content of the file specified with this option will be included
	verbatim below the "about" link on the repository index page. Default
	value: none.

root-title::
	Text printed as heading on the repository index page. Default value:
	"Git repository browser".

scan-hidden-path::
	If set to "1" and scan-path is enabled, scan-path recurses into
	directories whose name starts with a period ('.'). Otherwise, scan-path
	skips such directories as hidden. The ".git" directory of a non-bare
	repository is still found. This must be defined prior to scan-path.
	Default value: "0". See also: scan-path.

scan-path::
	A path which is scanned for repositories. If caching is enabled, the
	result is cached as a cgitrc include-file in the cache directory. If
	project-list has been defined prior to scan-path, scan-path loads only
	the directories listed in the file pointed to by project-list. A
	repository containing a file named "noweb" is skipped, the reverse of
	what "strict-export" checks. Only the global settings taken before the
	scan-path directive apply to each repository. That holds for every
	setting a repository inherits, among them section, snapshots, readme,
	the filters and the enable flags, not only the entries that say so
	explicitly. Default value: none. See also: cache-scan-ttl, project-list,
	strict-export, "Macro expansion".

section::
	The name of the current repository section. All repositories defined
	after this option will inherit the current section name. Default value:
	none.

section-from-path::
	A number which, if defined prior to scan-path, specifies how many path
	elements from each repository path to use as a default section name. If
	negative, cgit discards the specified number of path elements above the
	repository directory. Default value: "0".

section-sort::
	Flag which, when set to "1", sorts the sections on the repository
	listing by name, along with the repositories within each section. Set
	this flag to "0" to preserve the order in the cgitrc file. Default
	value: "0". See also: section, case-sensitive-sort, repository-sort.

side-by-side-diffs::
	If set to "1" shows side-by-side diffs instead of unidiffs by default.
	Default value: "0".

snapshots::
	Text which specifies the default set of snapshot formats that cgit
	generates links for. The value is a space-separated list of zero or more
	of the values "tar", "tar.gz", "tar.bz2", "tar.lz", "tar.xz", "tar.zst"
	and "zip". The special value "all" enables all snapshot formats. Default
	value: none. All compressors use default settings. Some settings can be
	influenced with environment variables, for example set ZSTD_CLEVEL=10 in
	web server environment for higher (but slower) zstd compression.

source-filter::
	Specifies a command which will be invoked to format plaintext blobs in
	the tree page. The command will get the blob content on its stdin and
	the name of the blob as its only command line argument. The stdout from
	the command will be included verbatim as the blob contents, which is how
	syntax highlighting is done. When no source-filter is configured, cgit
	serves the text plain. A ready syntax highlighter using the Scintillua
	lexer collection ships as custom/extensions/syntax-highlight.lua, see
	the comments in that file for its dependencies. Default value: none. See
	also: "Filter API".

strict-export::
	Filename which, if specified, needs to be present within the repository
	for cgit to allow access to that repository. This can be used to emulate
	gitweb's EXPORT_OK and STRICT_EXPORT functionality and limit cgit's
	repositories to match those exported by git-daemon. This option must be
	defined prior to scan-path. Default value: none. See also: scan-path.

summary-branches::
	Specifies the number of branches to display in the repository "summary"
	page. Default value: "10".

summary-log::
	Specifies the number of log entries to display in the repository
	"summary" page. Default value: "10".

summary-tags::
	Specifies the number of tags to display in the repository "summary"
	page. Default value: "10".

trailer-filter::
	Specifies a command which will be invoked to format the value of a
	commit trailer when "enable-commit-trailers" is set. The command will
	get the trailer key and an origin page string as its command line
	arguments and the value on its stdin, and the stdout from the command
	will be included verbatim as the value. Trailers whose value is a name
	and email address, such as Signed-off-by, go through the email-filter
	instead, and when no trailer-filter is configured the remaining values
	go through the commit-filter. A ready filter linking Fixes, Closes and
	URL values ships as custom/extensions/link-trailers.lua. Default value:
	none. See also: "Filter API".

trust-scan-config::
	Flag which, when set to "1", honours every setting in a repository's own
	cgitrc file and git config found by "scan-path". Those files belong to
	whoever can push to the repository, so without it the settings that run
	a command, put raw markup on the page, serve a file as markup, place a
	link or read a file off the disk are ignored with a warning. Those are
	the filters, head-content, module-link, logo, logo-link, clone-url,
	enable-html-serving and a readme that names a file rather than a git
	object. Settings in the main cgitrc, the "repo.<option>" form included,
	never need this. Default value: "0". See also: "scan-path",
	"enable-git-config".

virtual-root::
	Url which, if specified, is used as root for all cgit links. cgit then
	generates virtual urls such as "/cgit/tree/README" in place of
	"?url=cgit/tree/README". Default value: none.


Repository settings
-------------------

repo.about-filter::
	Override the default about-filter. Default value: <about-filter>. See
	also: "Filter API", "trust-scan-config".

repo.branch-sort::
	Flag which, when set to "age", enables date ordering in the branch ref
	list, and when set to "name" enables ordering by branch name. Default
	value: <branch-sort>.

repo.clone-url::
	A list of space-separated urls which can be used to clone this
	repository. Default value: <clone-url>. See also: "Macro expansion".

repo.commit-filter::
	Override the default commit-filter. Default value: <commit-filter>. See
	also: "Filter API", "trust-scan-config".

repo.commit-sort::
	Flag which, when set to "date", enables strict date ordering in the
	commit log, and when set to "topo" enables strict topological ordering.
	If unset, the default ordering of "git log" is used. Default value:
	<commit-sort>.

repo.defbranch::
	The name of the default branch for this repository. If no such branch
	exists in the repository, the first branch name (when sorted) is used as
	default instead. Default value: branch pointed to by HEAD, or "master"
	if there is no suitable HEAD.

repo.desc::
	The value to show as repository description. When repositories are found
	by scan-path the description file inside the repository is read as a
	fallback, unless it still holds git's "Unnamed repository" boilerplate.
	Default value: "[no description]".

repo.email-filter::
	Override the default email-filter. Default value: <email-filter>. See
	also: "Filter API", "trust-scan-config".

repo.enable-blame::
	A flag which can be used to override the global setting "enable-blame".
	Default value: <enable-blame>.

repo.enable-commit-graph::
	A flag which can be used to override the global setting
	"enable-commit-graph". Default value: <enable-commit-graph>.

repo.enable-commit-trailers::
	A flag which can be used to override the global setting
	"enable-commit-trailers". Default value: <enable-commit-trailers>.

repo.enable-follow-links::
	A flag which can be used to override the global setting
	"enable-follow-links". Default value: <enable-follow-links>.

repo.enable-gitmodules-links::
	A flag which can be used to override the global setting
	"enable-gitmodules-links". Default value: <enable-gitmodules-links>.

repo.enable-html-serving::
	A flag which can be used to override the global setting
	"enable-html-serving". Default value: <enable-html-serving>.

repo.enable-log-filecount::
	A flag which can be used to override the global setting
	"enable-log-filecount". Default value: <enable-log-filecount>.

repo.enable-log-linecount::
	A flag which can be used to override the global setting
	"enable-log-linecount". Default value: <enable-log-linecount>.

repo.enable-mailmap::
	A flag which can be used to override the global setting
	"enable-mailmap". Default value: <enable-mailmap>.

repo.enable-remote-branches::
	A flag which can be used to override the global setting
	"enable-remote-branches". Default value: <enable-remote-branches>.

repo.enable-subject-links::
	A flag which can be used to override the global setting
	"enable-subject-links". Default value: <enable-subject-links>.

repo.head-content::
	This value will be added verbatim to the html HEAD section of each page
	displayed for this repository. Default value: none. See also:
	"head-include".

repo.hide::
	Flag which, when set to "1", hides the repository from the repository
	index. The repository can still be accessed by providing a direct path.
	Default value: "0". See also: "repo.ignore".

repo.ignore::
	Flag which, when set to "1", ignores the repository. The repository is
	not shown in the index and cannot be accessed by providing a direct
	path. Default value: "0". See also: "repo.hide".

repo.logo::
	Url which specifies the source of an image which will be used as a logo
	on this repository's pages. Default value: <logo>.

repo.logo-link::
	Url loaded when clicking on the cgit logo image. Default value:
	<logo-link>.

repo.max-stats::
	Override the default maximum statistics period. Valid values are equal
	to the values specified for the global "max-stats" setting, and a value
	of "0" disables the statistics page for this repository. Default value:
	<max-stats>.

repo.module-link::
	Text which will be used as the formatstring for a hyperlink when a
	submodule is printed in a directory listing. The arguments for the
	formatstring are the name of the submodule directory and the object id
	of the submodule commit. Default value: <module-link>.

repo.module-link.<path>::
	Text which will be used as the formatstring for a hyperlink when a
	submodule with the specified subdirectory path is printed in a directory
	listing. The only argument for the formatstring is the object id of the
	submodule commit. Default value: none.

repo.name::
	The value to show as repository name. Default value: <repo.url>.

repo.owner::
	A value used to identify the owner of the repository. When repositories
	are found by scan-path the name of the repository directory's owner, as
	recorded in the password database, is used as a fallback. Default value:
	none.

repo.path::
	An absolute path to the repository directory. For non-bare repositories
	this is the .git-directory. Default value: none.

repo.readme::
	A path (relative to <repo.path>) which specifies a file to include
	verbatim as the "About" page for this repository. A git refspec by head
	or by hash may be prepended, followed by a colon, as in
	"master:docs/readme.mkd". If the value begins with a colon, as in
	":docs/readme.rst", the head given in the query or the default branch of
	the repository is used. Sharing any file exposes that entire directory
	tree to the "/about/PATH" endpoints, so be sure that there are no
	non-public files located in the same directory as the readme file.
	Default value: <readme>.

repo.section::
	Override the current section name for this repository. Default value:
	<section>.

repo.snapshot-prefix::
	Prefix to use for snapshot links instead of the repository basename. For
	example, the "linux-stable" repository may wish to set this to "linux"
	so that snapshots are in the format "linux-3.15.4" instead of
	"linux-stable-3.15.4". Default value: the repository basename.

repo.snapshots::
	A mask of snapshot formats for this repository that cgit generates links
	for. It is intersected with the global "snapshots" setting, so a
	repository can withhold formats but never offer one the global setting
	does not. Default value: <snapshots>.

repo.source-filter::
	Override the default source-filter. Default value: <source-filter>. See
	also: "Filter API", "trust-scan-config".

repo.trailer-filter::
	Override the default trailer-filter. Default value: <trailer-filter>.
	See also: "Filter API", "trust-scan-config".

repo.url::
	The relative url used to access the repository. This must be the first
	setting specified for each repository. Default value: none.


Repository-specific cgitrc file
-------------------------------

When the option "scan-path" is used to auto-discover git repositories, cgit
tries to parse the file "cgitrc" within any found repository. Such a file may
contain any of the repository settings described above, except "repo.url" and
"repo.path", with the "repo." prefix dropped, so "repo.desc" becomes "desc". The
options that run a command, put raw markup on the page, place a link or read a
file off the disk are only honoured when "trust-scan-config" is set to "1",
since the file belongs to whoever can push to the repository.


Filter API
----------

By default, filters are separate processes that are executed each time they are
needed. Alternative technologies may be used by prefixing the filter
specification with one of these strings.

'exec:'::
	The default "one process per filter" mode.

'lua:'::
	Executes the script using a built-in Lua interpreter. The script is
	loaded once per execution of cgit, and may be called multiple times
	during cgit's lifetime, making it a good choice for repeated filters
	such as the 'email filter'. A cgit built with NO_LUA has no interpreter
	and refuses a filter with this prefix. It responds to three functions:

	'filter_open(argument1, argument2, argument3, ...)'::
		This is called upon activation of the filter for a particular
		set of data.
	'filter_write(buffer)'::
		This is called whenever cgit writes data to the webpage.
	'filter_close()'::
		This is called when the current filtering operation is
		completed. It must return an integer value. Usually 0 indicates
		success.

	cgit also exposes these built-in functions to the Lua script.

	'html(str)'::
		Writes 'str' to the webpage.
	'html_txt(str)'::
		HTML escapes and writes 'str' to the webpage.
	'html_attr(str)'::
		HTML escapes for an attribute and writes 'str' to the webpage.
	'html_url_path(str)'::
		URL escapes for a path and writes 'str' to the webpage.
	'html_url_arg(str)'::
		URL escapes for an argument and writes 'str' to the webpage.
	'html_include(file)'::
		Includes 'file' in webpage.


Parameters are provided to filters as follows.

about filter::
	This filter is given a single parameter, the filename of the source file
	to filter. The filter can use the filename to determine (for example)
	the type of syntax to follow when formatting the readme file. The about
	text that is to be filtered is available on standard input and the
	filtered text is expected on standard output.

auth filter::
	The authentication filter receives 12 parameters, in this order.
	  - filter action, explained below, which specifies which action the
	    filter is called for
	  - http cookie
	  - http method
	  - http query string
	  - http referer
	  - http path
	  - http host
	  - http https flag
	  - cgit repo
	  - cgit page
	  - cgit url
	  - cgit login url
	When the filter action is "body", this filter must write to output the
	HTML for displaying the login form, which POSTs to the login url. When
	the filter action is "authenticate-cookie", this filter must validate
	the http cookie and return a 0 if it is invalid or 1 if it is valid, in
	the exit code or the close function. If the filter action is
	"authenticate-post", this filter receives the posted parameters on
	standard input, and should write a complete CGI response, preferably
	with a 302 redirect, and write to output one or more "Set-Cookie" HTTP
	headers, each followed by a newline.

	See custom/extensions/auth-inline.lua for a ready to modify example that
	keeps its user list inline, or custom/extensions/auth-file.lua for the
	same filter reading its users from files on disk.

commit filter::
	This filter is given no arguments. The commit message text that is to be
	filtered is available on standard input and the filtered text is
	expected on standard output.

email filter::
	This filter is given two parameters, the email address of the relevant
	author and a string indicating the originating page. The filter will
	then receive the text string to format on standard input and is expected
	to write to standard output the formatted text to be included in the
	page.

source filter::
	This filter is given a single parameter, the filename of the source file
	to filter. The filter can use the filename to determine (for example)
	the syntax highlighting mode. The contents of the source file that is to
	be filtered is available on standard input and the filtered contents is
	expected on standard output.

trailer filter::
	This filter is given two parameters, the key of the trailer being
	formatted, such as "Fixes", and a string indicating the originating
	page. The filter will then receive the trailer value, already HTML
	escaped, on standard input and is expected to write to standard output
	the formatted value to be included in the page.


All filters are handed these environment variables.

- CGIT_REPO_URL (from repo.url)
- CGIT_REPO_NAME (from repo.name)
- CGIT_REPO_PATH (from repo.path)
- CGIT_REPO_OWNER (from repo.owner)
- CGIT_REPO_DEFBRANCH (from repo.defbranch)
- CGIT_REPO_SECTION (from repo.section)
- CGIT_REPO_CLONE_URL (from repo.clone-url)

If a setting is not defined for a repository and the corresponding global
setting is also not defined (if applicable), then the corresponding environment
variable will be unset.


Macro expansion
---------------

The following cgitrc options support a simple macro expansion feature, where
tokens prefixed with "$" are replaced with the value of a similarly named
environment variable.

- cache-root
- include
- project-list
- scan-path

Macro expansion will also happen on the content of $CGIT_CONFIG, if defined.

The set of available variables is not fixed by cgit. The options above are
expanded while the configuration is parsed, against whatever environment the web
server hands the cgit process, so any variable the server sets can be used. A
CGI server provides the standard request variables, among them $HTTP_HOST,
$HTTPS, $PATH_INFO, $QUERY_STRING, $REQUEST_METHOD, $SCRIPT_NAME, $SERVER_NAME
and $SERVER_PORT, and server directives such as SetEnv (Apache), fastcgi_param
(nginx) or setenv.add-environment (lighttpd) can add anything else. cgit unsets
$HOME and $XDG_CONFIG_HOME before reading its configuration, so those two never
expand.

One usage of this feature is virtual hosting, which in its simplest form can be
accomplished by adding a line like this one to /etc/cgitrc.

	include=/etc/cgitrc.d/$HTTP_HOST

The following options are expanded later, during request processing, and
additionally support the seven CGIT_REPO_* variables defined in "Filter API".

- clone-url
- repo.clone-url


The cache
---------

All cache ttl values are in minutes. Negative ttl values indicate that a page
type will never expire, and thus the first time a URL is accessed, the result
will be cached indefinitely, even if the underlying git repository changes.
Conversely, when a ttl value is zero, the cache is disabled for that particular
page type. The files of the dumb transport are never cached, since they already
sit on the disk, and a response larger than "cache-max-slot-size" is served but
not kept.

The cache directory holds one file per slot plus transient lock files, all
created by cgit itself. Create the directory ahead of time, owned by the account
the web server runs cgit as, with mode 0700. cgit creates its files by name
without guarding against links planted beside them, so a directory other
accounts can write to would let those accounts redirect the writes. A directory
other accounts can read exposes every cached page along with the URLs visitors
asked for.


Signatures
----------

cgit can host .asc signatures corresponding to various snapshot formats, through
use of git notes. For example, the following command may be used to add a
signature to a .tar.xz archive.

    git notes --ref=refs/notes/signatures/tar.xz add -C "$(
        gpg --output - --armor --detach-sign cgit-1.1.tar.xz |
        git hash-object -w --stdin
    )" v1.1

If it is instead desirable to attach a signature of the underlying .tar, this
will be linked, as a special case, beside a .tar.* link that does not have its
own signature. For example, a signature of a tarball of the latest tag might be
added with a similar command.

    tag="$(git describe --abbrev=0)"
    git notes --ref=refs/notes/signatures/tar add -C "$(
        git archive --format tar --prefix "cgit-${tag#v}/" "$tag" |
        gpg --output - --armor --detach-sign |
        git hash-object -w --stdin
    )" "$tag"

Since git-archive(1) is expected to produce stable output between versions, this
allows one to generate a long-term signature of the contents of a given tag.