gitweb.conf(5)
==============

NAME
----
gitweb.conf - Gitweb (Git web interface) configuration file

SYNOPSIS
--------
/etc/gitweb.conf, /etc/gitweb-common.conf, $GITWEBDIR/gitweb_config.perl

DESCRIPTION
-----------

The gitweb CGI script for viewing Git repositories over the web uses a
perl script fragment as its configuration file.  You can set variables
using "`our $variable = value`"; text from a "#" character until the
end of a line is ignored.  See *perlsyn*(1) for details.

An example:

    # gitweb configuration file for http://git.example.org
    #
    our $projectroot = "/srv/git"; # FHS recommendation
    our $site_name = 'Example.org >> Repos';


The configuration file is used to override the default settings that
were built into gitweb at the time the 'gitweb.cgi' script was generated.

While one could just alter the configuration settings in the gitweb
CGI itself, those changes would be lost upon upgrade.  Configuration
settings might also be placed into a file in the same directory as the
CGI script with the default name 'gitweb_config.perl' -- allowing
one to have multiple gitweb instances with different configurations by
the use of symlinks.

Note that some configuration can be controlled on per-repository rather than
gitweb-wide basis: see "Per-repository gitweb configuration" subsection on
linkgit:gitweb[1] manpage.


DISCUSSION
----------
Gitweb reads configuration data from the following sources in the
following order:

 * built-in values (some set during build stage),

 * common system-wide configuration file (defaults to
   '/etc/gitweb-common.conf'),

 * either per-instance configuration file (defaults to 'gitweb_config.perl'
   in the same directory as the installed gitweb), or if it does not exists
   then fallback system-wide configuration file (defaults to '/etc/gitweb.conf').

Values obtained in later configuration files override values obtained earlier
in the above sequence.

Locations of the common system-wide configuration file, the fallback
system-wide configuration file and the per-instance configuration file
are defined at compile time using build-time Makefile configuration
variables, respectively `GITWEB_CONFIG_COMMON`, `GITWEB_CONFIG_SYSTEM`
and `GITWEB_CONFIG`.

You can also override locations of gitweb configuration files during
runtime by setting the following environment variables:
`GITWEB_CONFIG_COMMON`, `GITWEB_CONFIG_SYSTEM` and `GITWEB_CONFIG`
to a non-empty value.


The syntax of the configuration files is that of Perl, since these files are
handled by sourcing them as fragments of Perl code (the language that
gitweb itself is written in). Variables are typically set using the
`our` qualifier (as in "`our $variable = <value>;`") to avoid syntax
errors if a new version of gitweb no longer uses a variable and therefore
stops declaring it.

You can include other configuration file using read_config_file()
subroutine.  For example, one might want to put gitweb configuration
related to access control for viewing repositories via Gitolite (one
of Git repository management tools) in a separate file, e.g. in
'/etc/gitweb-gitolite.conf'.  To include it, put

--------------------------------------------------
read_config_file("/etc/gitweb-gitolite.conf");
--------------------------------------------------

somewhere in gitweb configuration file used, e.g. in per-installation
gitweb configuration file.  Note that read_config_file() checks itself
that the file it reads exists, and does nothing if it is not found.
It also handles errors in included file.


The default configuration with no configuration file at all may work
perfectly well for some installations.  Still, a configuration file is
useful for customizing or tweaking the behavior of gitweb in many ways, and
some optional features will not be present unless explicitly enabled using
the configurable `%features` variable (see also "Configuring gitweb
features" section below).


CONFIGURATION VARIABLES
-----------------------
Some configuration variables have their default values (embedded in the CGI
script) set during building gitweb -- if that is the case, this fact is put
in their description.  See gitweb's 'INSTALL' file for instructions on building
and installing gitweb.


Location of repositories
~~~~~~~~~~~~~~~~~~~~~~~~
The configuration variables described below control how gitweb finds
Git repositories, and how repositories are displayed and accessed.

See also "Repositories" and later subsections in linkgit:gitweb[1] manpage.

$projectroot::
	Absolute filesystem path which will be prepended to project path;
	the path to repository is `$projectroot/$project`.  Set to
	`$GITWEB_PROJECTROOT` during installation.  This variable has to be
	set correctly for gitweb to find repositories.
+
For example, if `$projectroot` is set to "/srv/git" by putting the following
in gitweb config file:
+
----------------------------------------------------------------------------
our $projectroot = "/srv/git";
----------------------------------------------------------------------------
+
then
+
------------------------------------------------
http://git.example.com/gitweb.cgi?p=foo/bar.git
------------------------------------------------
+
and its path_info based equivalent
+
------------------------------------------------
http://git.example.com/gitweb.cgi/foo/bar.git
------------------------------------------------
+
will map to the path '/srv/git/foo/bar.git' on the filesystem.

$projects_list::
	Name of a plain text file listing projects, or a name of directory
	to be scanned for projects.
+
Project list files should list one project per line, with each line
having the following format
+
-----------------------------------------------------------------------------
<URI-encoded filesystem path to repository> SP <URI-encoded repository owner>
-----------------------------------------------------------------------------
+
The default value of this variable is determined by the `GITWEB_LIST`
makefile variable at installation time.  If this variable is empty, gitweb
will fall back to scanning the `$projectroot` directory for repositories.

$project_maxdepth::
	If `$projects_list` variable is unset, gitweb will recursively
	scan filesystem for Git repositories.  The `$project_maxdepth`
	is used to limit traversing depth, relative to `$projectroot`
	(starting point); it means that directories which are further
	from `$projectroot` than `$project_maxdepth` will be skipped.
+
It is purely performance optimization, originally intended for MacOS X,
where recursive directory traversal is slow.  Gitweb follows symbolic
links, but it detects cycles, ignoring any duplicate files and directories.
+
The default value of this variable is determined by the build-time
configuration variable `GITWEB_PROJECT_MAXDEPTH`, which defaults to
2007.

$export_ok::
	Show repository only if this file exists (in repository).  Only
	effective if this variable evaluates to true.  Can be set when
	building gitweb by setting `GITWEB_EXPORT_OK`.  This path is
	relative to `GIT_DIR`.  git-daemon[1] uses 'git-daemon-export-ok',
	unless started with `--export-all`.  By default this variable is
	not set, which means that this feature is turned off.

$export_auth_hook::
	Function used to determine which repositories should be shown.
	This subroutine should take one parameter, the full path to
	a project, and if it returns true, that project will be included
	in the projects list and can be accessed through gitweb as long
	as it fulfills the other requirements described by $export_ok,
	$projects_list, and $projects_maxdepth.  Example:
+
----------------------------------------------------------------------------
our $export_auth_hook = sub { return -e "$_[0]/git-daemon-export-ok"; };
----------------------------------------------------------------------------
+
though the above might be done by using `$export_ok` instead
+
----------------------------------------------------------------------------
our $export_ok = "git-daemon-export-ok";
----------------------------------------------------------------------------
+
If not set (default), it means that this feature is disabled.
+
See also more involved example in "Controlling access to Git repositories"
subsection on linkgit:gitweb[1] manpage.

$strict_export::
	Only allow viewing of repositories also shown on the overview page.
	This for example makes `$gitweb_export_ok` file decide if repository is
	available and not only if it is shown.  If `$gitweb_list` points to
	file with list of project, only those repositories listed would be
	available for gitweb.  Can be set during building gitweb via
	`GITWEB_STRICT_EXPORT`.  By default this variable is not set, which
	means that you can directly access those repositories that are hidden
	from projects list page (e.g. the are not listed in the $projects_list
	file).


Finding files
~~~~~~~~~~~~~
The following configuration variables tell gitweb where to find files.
The values of these variables are paths on the filesystem.

$GIT::
	Core git executable to use.  By default set to `$GIT_BINDIR/git`, which
	in turn is by default set to `$(bindir)/git`.  If you use Git installed
	from a binary package, you should usually set this to "/usr/bin/git".
	This can just be "git" if your web server has a sensible PATH; from
	security point of view it is better to use absolute path to git binary.
	If you have multiple Git versions installed it can be used to choose
	which one to use.  Must be (correctly) set for gitweb to be able to
	work.

$mimetypes_file::
	File to use for (filename extension based) guessing of MIME types before
	trying '/etc/mime.types'.  *NOTE* that this path, if relative, is taken
	as relative to the current Git repository, not to CGI script.  If unset,
	only '/etc/mime.types' is used (if present on filesystem).  If no mimetypes
	file is found, mimetype guessing based on extension of file is disabled.
	Unset by default.

$highlight_bin::
	Path to the highlight executable to use (it must be the one from
	http://www.andre-simon.de[] due to assumptions about parameters and output).
	By default set to 'highlight'; set it to full path to highlight
	executable if it is not installed on your web server's PATH.
	Note that 'highlight' feature must be set for gitweb to actually
	use syntax highlighting.
+
*NOTE*: if you want to add support for new file type (supported by
"highlight" but not used by gitweb), you need to modify `%highlight_ext`
or `%highlight_basename`, depending on whether you detect type of file
based on extension (for example "sh") or on its basename (for example
"Makefile").  The keys of these hashes are extension and basename,
respectively, and value for given key is name of syntax to be passed via
`--syntax <syntax>` to highlighter.
+
For example if repositories you are hosting use "phtml" extension for
PHP files, and you want to have correct syntax-highlighting for those
files, you can add the following to gitweb configuration:
+
---------------------------------------------------------
our %highlight_ext;
$highlight_ext{'phtml'} = 'php';
---------------------------------------------------------


Links and their targets
~~~~~~~~~~~~~~~~~~~~~~~
The configuration variables described below configure some of gitweb links:
their target and their look (text or image), and where to find page
prerequisites (stylesheet, favicon, images, scripts).  Usually they are left
at their default values, with the possible exception of `@stylesheets`
variable.

@stylesheets::
	List of URIs of stylesheets (relative to the base URI of a page). You
	might specify more than one stylesheet, for example to use "gitweb.css"
	as base with site specific modifications in a separate stylesheet
	to make it easier to upgrade gitweb.  For example, you can add
	a `site` stylesheet by putting
+
----------------------------------------------------------------------------
push @stylesheets, "gitweb-site.css";
----------------------------------------------------------------------------
+
in the gitweb config file.  Those values that are relative paths are
relative to base URI of gitweb.
+
This list should contain the URI of gitweb's standard stylesheet.  The default
URI of gitweb stylesheet can be set at build time using the `GITWEB_CSS`
makefile variable.  Its default value is 'static/gitweb.css'
(or 'static/gitweb.min.css' if the `CSSMIN` variable is defined,
i.e. if CSS minifier is used during build).
+
*Note*: there is also a legacy `$stylesheet` configuration variable, which was
used by older gitweb.  If `$stylesheet` variable is defined, only CSS stylesheet
given by this variable is used by gitweb.

$logo::
	Points to the location where you put 'git-logo.png' on your web
	server, or to be more the generic URI of logo, 72x27 size).  This image
	is displayed in the top right corner of each gitweb page and used as
	a logo for the Atom feed.  Relative to the base URI of gitweb (as a path).
	Can be adjusted when building gitweb using `GITWEB_LOGO` variable
	By default set to 'static/git-logo.png'.

$favicon::
	Points to the location where you put 'git-favicon.png' on your web
	server, or to be more the generic URI of favicon, which will be served
	as "image/png" type.  Web browsers that support favicons (website icons)
	may display them in the browser's URL bar and next to the site name in
	bookmarks.  Relative to the base URI of gitweb.  Can be adjusted at
	build time using `GITWEB_FAVICON` variable.
	By default set to 'static/git-favicon.png'.

$javascript::
	Points to the location where you put 'gitweb.js' on your web server,
	or to be more generic the URI of JavaScript code used by gitweb.
	Relative to the base URI of gitweb.  Can be set at build time using
	the `GITWEB_JS` build-time configuration variable.
+
The default value is either 'static/gitweb.js', or 'static/gitweb.min.js' if
the `JSMIN` build variable was defined, i.e. if JavaScript minifier was used
at build time.  *Note* that this single file is generated from multiple
individual JavaScript "modules".

$home_link::
	Target of the home link on the top of all pages (the first part of view
	"breadcrumbs").  By default it is set to the absolute URI of a current page
	(to the value of `$my_uri` variable, or to "/" if `$my_uri` is undefined
	or is an empty string).

$home_link_str::
	Label for the "home link" at the top of all pages, leading to `$home_link`
	(usually the main gitweb page, which contains the projects list).  It is
	used as the first component of gitweb's "breadcrumb trail":
	`<home link> / <project> / <action>`.  Can be set at build time using
	the `GITWEB_HOME_LINK_STR` variable.  By default it is set to "projects",
	as this link leads to the list of projects.  Another popular choice is to
	set it to the name of site.  Note that it is treated as raw HTML so it
	should not be set from untrusted sources.

@extra_breadcrumbs::
	Additional links to be added to the start of the breadcrumb trail before
	the home link, to pages that are logically "above" the gitweb projects
	list, such as the organization and department which host the gitweb
	server. Each element of the list is a reference to an array, in which
	element 0 is the link text (equivalent to `$home_link_str`) and element
	1 is the target URL (equivalent to `$home_link`).
+
For example, the following setting produces a breadcrumb trail like
"home / dev / projects / ..." where "projects" is the home link.
----------------------------------------------------------------------------
    our @extra_breadcrumbs = (
      [ 'home' => 'https://www.example.org/' ],
      [ 'dev'  => 'https://dev.example.org/' ],
    );
----------------------------------------------------------------------------

$logo_url::
$logo_label::
	URI and label (title) for the Git logo link (or your site logo,
	if you chose to use different logo image). By default, these both
	refer to Git homepage, http://git-scm.com[]; in the past, they pointed
	to Git documentation at http://www.kernel.org[].


Changing gitweb's look
~~~~~~~~~~~~~~~~~~~~~~
You can adjust how pages generated by gitweb look using the variables described
below.  You can change the site name, add common headers and footers for all
pages, and add a description of this gitweb installation on its main page
(which is the projects list page), etc.

$site_name::
	Name of your site or organization, to appear in page titles.  Set it
	to something descriptive for clearer bookmarks etc.  If this variable
	is not set or is, then gitweb uses the value of the `SERVER_NAME`
	CGI environment variable, setting site name to "$SERVER_NAME Git",
	or "Untitled Git" if this variable is not set (e.g. if running gitweb
	as standalone script).
+
Can be set using the `GITWEB_SITENAME` at build time.  Unset by default.

$site_html_head_string::
	HTML snippet to be included in the <head> section of each page.
	Can be set using `GITWEB_SITE_HTML_HEAD_STRING` at build time.
	No default value.

$site_header::
	Name of a file with HTML to be included at the top of each page.
	Relative to the directory containing the 'gitweb.cgi' script.
	Can be set using `GITWEB_SITE_HEADER` at build time.  No default
	value.

$site_footer::
	Name of a file with HTML to be included at the bottom of each page.
	Relative to the directory containing the 'gitweb.cgi' script.
	Can be set using `GITWEB_SITE_FOOTER` at build time.  No default
	value.

$home_text::
	Name of a HTML file which, if it exists, is included on the
	gitweb projects overview page ("projects_list" view).  Relative to
	the directory containing the gitweb.cgi script.  Default value
	can be adjusted during build time using `GITWEB_HOMETEXT` variable.
	By default set to 'indextext.html'.

$projects_list_description_width::
	The width (in characters) of the "Description" column of the projects list.
	Longer descriptions will be truncated (trying to cut at word boundary);
	the full description is available in the 'title' attribute (usually shown on
	mouseover).  The default is 25, which might be too small if you
	use long project descriptions.

$default_projects_order::
	Default value of ordering of projects on projects list page, which
	means the ordering used if you don't explicitly sort projects list
	(if there is no "o" CGI query parameter in the URL).  Valid values
	are "none" (unsorted), "project" (projects are by project name,
	i.e. path to repository relative to `$projectroot`), "descr"
	(project description), "owner", and "age" (by date of most current
	commit).
+
Default value is "project".  Unknown value means unsorted.


Changing gitweb's behavior
~~~~~~~~~~~~~~~~~~~~~~~~~~
These configuration variables control _internal_ gitweb behavior.

$default_blob_plain_mimetype::
	Default mimetype for the blob_plain (raw) view, if mimetype checking
	doesn't result in some other type; by default "text/plain".
	Gitweb guesses mimetype of a file to display based on extension
	of its filename, using `$mimetypes_file` (if set and file exists)
	and '/etc/mime.types' files (see *mime.types*(5) manpage; only
	filename extension rules are supported by gitweb).

$default_text_plain_charset::
	Default charset for text files. If this is not set, the web server
	configuration will be used.  Unset by default.

$fallback_encoding::
	Gitweb assumes this charset when a line contains non-UTF-8 characters.
	The fallback decoding is used without error checking, so it can be even
	"utf-8". The value must be a valid encoding; see the *Encoding::Supported*(3pm)
	man page for a list. The default is "latin1", aka. "iso-8859-1".

@diff_opts::
	Rename detection options for git-diff and git-diff-tree. The default is
	(\'-M'); set it to (\'-C') or (\'-C', \'-C') to also detect copies,
	or set it to () i.e. empty list if you don't want to have renames
	detection.
+
*Note* that rename and especially copy detection can be quite
CPU-intensive.  Note also that non Git tools can have problems with
patches generated with options mentioned above, especially when they
involve file copies (\'-C') or criss-cross renames (\'-B').


Some optional features and policies
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Most of features are configured via `%feature` hash; however some of extra
gitweb features can be turned on and configured using variables described
below.  This list beside configuration variables that control how gitweb
looks does contain variables configuring administrative side of gitweb
(e.g. cross-site scripting prevention; admittedly this as side effect
affects how "summary" pages look like, or load limiting).

@git_base_url_list::
	List of Git base URLs.  These URLs are used to generate URLs
	describing from where to fetch a project, which are shown on
	project summary page.  The full fetch URL is "`$git_base_url/$project`",
	for each element of this list. You can set up multiple base URLs
	(for example one for `git://` protocol, and one for `http://`
	protocol).
+
Note that per repository configuration can be set in '$GIT_DIR/cloneurl'
file, or as values of multi-value `gitweb.url` configuration variable in
project config.  Per-repository configuration takes precedence over value
composed from `@git_base_url_list` elements and project name.
+
You can setup one single value (single entry/item in this list) at build
time by setting the `GITWEB_BASE_URL` built-time configuration variable.
By default it is set to (), i.e. an empty list.  This means that gitweb
would not try to create project URL (to fetch) from project name.

$projects_list_group_categories::
	Whether to enables the grouping of projects by category on the project
	list page. The category of a project is determined by the
	`$GIT_DIR/category` file or the `gitweb.category` variable in each
	repository's configuration.  Disabled by default (set to 0).

$project_list_default_category::
	Default category for projects for which none is specified.  If this is
	set to the empty string, such projects will remain uncategorized and
	listed at the top, above categorized projects.  Used only if project
	categories are enabled, which means if `$projects_list_group_categories`
	is true.  By default set to "" (empty string).

$prevent_xss::
	If true, some gitweb features are disabled to prevent content in
	repositories from launching cross-site scripting (XSS) attacks.  Set this
	to true if you don't trust the content of your repositories.
	False by default (set to 0).

$maxload::
	Used to set the maximum load that we will still respond to gitweb queries.
	If the server load exceeds this value then gitweb will return
	"503 Service Unavailable" error.  The server load is taken to be 0
	if gitweb cannot determine its value.  Currently it works only on Linux,
	where it uses '/proc/loadavg'; the load there is the number of active
	tasks on the system -- processes that are actually running -- averaged
	over the last minute.
+
Set `$maxload` to undefined value (`undef`) to turn this feature off.
The default value is 300.

$omit_age_column::
	If true, omit the column with date of the most current commit on the
	projects list page. It can save a bit of I/O and a fork per repository.

$omit_owner::
	If true prevents displaying information about repository owner.

$per_request_config::
	If this is set to code reference, it will be run once for each request.
	You can	set parts of configuration that change per session this way.
	For example, one might use the following code in a gitweb configuration
	file
+
--------------------------------------------------------------------------------
our $per_request_config = sub {
	$ENV{GL_USER} = $cgi->remote_user || "gitweb";
};
--------------------------------------------------------------------------------
+
If `$per_request_config` is not a code reference, it is interpreted as boolean
value.  If it is true gitweb will process config files once per request,
and if it is false gitweb will process config files only once, each time it
is executed.  True by default (set to 1).
+
*NOTE*: `$my_url`, `$my_uri`, and `$base_url` are overwritten with their default
values before every request, so if you want to change them, be sure to set
this variable to true or a code reference effecting the desired changes.
+
This variable matters only when using persistent web environments that
serve multiple requests using single gitweb instance, like mod_perl,
FastCGI or Plackup.


Other variables
~~~~~~~~~~~~~~~
Usually you should not need to change (adjust) any of configuration
variables described below; they should be automatically set by gitweb to
correct value.


$version::
	Gitweb version, set automatically when creating gitweb.cgi from
	gitweb.perl. You might want to modify it if you are running modified
	gitweb, for example
+
---------------------------------------------------
our $version .= " with caching";
---------------------------------------------------
+
if you run modified version of gitweb with caching support.  This variable
is purely informational, used e.g. in the "generator" meta header in HTML
header.

$my_url::
$my_uri::
	Full URL and absolute URL of the gitweb script;
	in earlier versions of gitweb you might have need to set those
	variables, but now there should be no need to do it.  See
	`$per_request_config` if you need to set them still.

$base_url::
	Base URL for relative URLs in pages generated by gitweb,
	(e.g. `$logo`, `$favicon`, `@stylesheets` if they are relative URLs),
	needed and used '<base href="$base_url">' only for URLs with nonempty
	PATH_INFO.  Usually gitweb sets its value correctly,
	and there is no need to set this variable, e.g. to $my_uri or "/".
	See `$per_request_config` if you need to override it anyway.


CONFIGURING GITWEB FEATURES
---------------------------
Many gitweb features can be enabled (or disabled) and configured using the
`%feature` hash.  Names of gitweb features are keys of this hash.

Each `%feature` hash element is a hash reference and has the following
structure:
----------------------------------------------------------------------
"<feature_name>" => {
	"sub" => <feature-sub (subroutine)>,
	"override" => <allow-override (boolean)>,
	"default" => [ <options>... ]
},
----------------------------------------------------------------------
Some features cannot be overridden per project.  For those
features the structure of appropriate `%feature` hash element has a simpler
form:
----------------------------------------------------------------------
"<feature_name>" => {
	"override" => 0,
	"default" => [ <options>... ]
},
----------------------------------------------------------------------
As one can see it lacks the \'sub' element.

The meaning of each part of feature configuration is described
below:

default::
	List (array reference) of feature parameters (if there are any),
	used also to toggle (enable or disable) given feature.
+
Note that it is currently *always* an array reference, even if
feature doesn't accept any configuration parameters, and \'default'
is used only to turn it on or off.  In such case you turn feature on
by setting this element to `[1]`, and torn it off by setting it to
`[0]`.  See also the passage about the "blame" feature in the "Examples"
section.
+
To disable features that accept parameters (are configurable), you
need to set this element to empty list i.e. `[]`.

override::
	If this field has a true value then the given feature is
	overridable, which means that it can be configured
	(or enabled/disabled) on a per-repository basis.
+
Usually given "<feature>" is configurable via the `gitweb.<feature>`
config variable in the per-repository Git configuration file.
+
*Note* that no feature is overridable by default.

sub::
	Internal detail of implementation.  What is important is that
	if this field is not present then per-repository override for
	given feature is not supported.
+
You wouldn't need to ever change it in gitweb config file.


Features in `%feature`
~~~~~~~~~~~~~~~~~~~~~~
The gitweb features that are configurable via `%feature` hash are listed
below.  This should be a complete list, but ultimately the authoritative
and complete list is in gitweb.cgi source code, with features described
in the comments.

blame::
	Enable the "blame" and "blame_incremental" blob views, showing for
	each line the last commit that modified it; see linkgit:git-blame[1].
	This can be very CPU-intensive and is therefore disabled by default.
+
This feature can be configured on a per-repository basis via
repository's `gitweb.blame` configuration variable (boolean).

snapshot::
	Enable and configure the "snapshot" action, which allows user to
	download a compressed archive of any tree or commit, as produced
	by linkgit:git-archive[1] and possibly additionally compressed.
	This can potentially generate high traffic if you have large project.
+
The value of \'default' is a list of names of snapshot formats,
defined in `%known_snapshot_formats` hash, that you wish to offer.
Supported formats include "tgz", "tbz2", "txz" (gzip/bzip2/xz
compressed tar archive) and "zip"; please consult gitweb sources for
a definitive list.  By default only "tgz" is offered.
+
This feature can be configured on a per-repository basis via
repository's `gitweb.blame` configuration variable, which contains
a comma separated list of formats or "none" to disable snapshots.
Unknown values are ignored.

grep::
	Enable grep search, which lists the files in currently selected
	tree (directory) containing the given string; see linkgit:git-grep[1].
	This can be potentially CPU-intensive, of course.  Enabled by default.
+
This feature can be configured on a per-repository basis via
repository's `gitweb.grep` configuration variable (boolean).

pickaxe::
	Enable the so called pickaxe search, which will list the commits
	that introduced or removed a given string in a file.  This can be
	practical and quite faster alternative to "blame" action, but it is
	still potentially CPU-intensive.  Enabled by default.
+
The pickaxe search is described in linkgit:git-log[1] (the
description of `-S<string>` option, which refers to pickaxe entry in
linkgit:gitdiffcore[7] for more details).
+
This feature can be configured on a per-repository basis by setting
repository's `gitweb.pickaxe` configuration variable (boolean).

show-sizes::
	Enable showing size of blobs (ordinary files) in a "tree" view, in a
	separate column, similar to what `ls -l` does; see description of
	`-l` option in linkgit:git-ls-tree[1] manpage.  This costs a bit of
	I/O.  Enabled by default.
+
This feature can be configured on a per-repository basis via
repository's `gitweb.showsizes` configuration variable (boolean).

patches::
	Enable and configure "patches" view, which displays list of commits in email
	(plain text) output format; see also linkgit:git-format-patch[1].
	The value is the maximum number of patches in a patchset generated
	in "patches" view.  Set the 'default' field to a list containing single
	item of or to an empty list to disable patch view, or to a list
	containing a single negative number to remove any limit.
	Default value is 16.
+
This feature can be configured on a per-repository basis via
repository's `gitweb.patches` configuration variable (integer).

avatar::
	Avatar support.  When this feature is enabled, views such as
	"shortlog" or "commit" will display an avatar associated with
	the email of each committer and author.
+
Currently available providers are *"gravatar"* and *"picon"*.
Only one provider at a time can be selected ('default' is one element list).
If an unknown provider is specified, the feature is disabled.
*Note* that some providers might require extra Perl packages to be
installed; see 'gitweb/INSTALL' for more details.
+
This feature can be configured on a per-repository basis via
repository's `gitweb.avatar` configuration variable.
+
See also `%avatar_size` with pixel sizes for icons and avatars
("default" is used for one-line like "log" and "shortlog", "double"
is used for two-line like "commit", "commitdiff" or "tag").  If the
default font sizes or lineheights are changed (e.g. via adding extra
CSS stylesheet in `@stylesheets`), it may be appropriate to change
these values.

highlight::
	Server-side syntax highlight support in "blob" view.  It requires
	`$highlight_bin` program to be available (see the description of
	this variable in the "Configuration variables" section above),
	and therefore is disabled by default.
+
This feature can be configured on a per-repository basis via
repository's `gitweb.highlight` configuration variable (boolean).

remote_heads::
	Enable displaying remote heads (remote-tracking branches) in the "heads"
	list.  In most cases the list of remote-tracking branches is an
	unnecessary internal private detail, and this feature is therefore
	disabled by default.  linkgit:git-instaweb[1], which is usually used
	to browse local repositories, enables and uses this feature.
+
This feature can be configured on a per-repository basis via
repository's `gitweb.remote_heads` configuration variable (boolean).


The remaining features cannot be overridden on a per project basis.

search::
	Enable text search, which will list the commits which match author,
	committer or commit text to a given string; see the description of
	`--author`, `--committer` and `--grep` options in linkgit:git-log[1]
	manpage.  Enabled by default.
+
Project specific override is not supported.

forks::
	If this feature is enabled, gitweb considers projects in
	subdirectories of project root (basename) to be forks of existing
	projects.  For each project +$projname.git+, projects in the
	+$projname/+ directory and its subdirectories will not be
	shown in the main projects list.  Instead, a \'\+' mark is shown
	next to +$projname+, which links to a "forks" view that lists all
	the forks (all projects in +$projname/+ subdirectory).  Additionally
	a "forks" view for a project is linked from project summary page.
+
If the project list is taken from a file (+$projects_list+ points to a
file), forks are only recognized if they are listed after the main project
in that file.
+
Project specific override is not supported.

actions::
	Insert custom links to the action bar of all project pages.  This
	allows you to link to third-party scripts integrating into gitweb.
+
The "default" value consists of a list of triplets in the form
`("<label>", "<link>", "<position>")` where "position" is the label
after which to insert the link, "link" is a format string where `%n`
expands to the project name, `%f` to the project path within the
filesystem (i.e. "$projectroot/$project"), `%h` to the current hash
(\'h' gitweb parameter) and `%b` to the current hash base
(\'hb' gitweb parameter); `%%` expands to \'%'.
+
For example, at the time this page was written, the http://repo.or.cz[]
Git hosting site set it to the following to enable graphical log
(using the third party tool *git-browser*):
+
----------------------------------------------------------------------
$feature{'actions'}{'default'} =
	[ ('graphiclog', '/git-browser/by-commit.html?r=%n', 'summary')];
----------------------------------------------------------------------
+
This adds a link titled "graphiclog" after the "summary" link, leading to
`git-browser` script, passing `r=<project>` as a query parameter.
+
Project specific override is not supported.

timed::
	Enable displaying how much time and how many Git commands it took to
	generate and display each page in the page footer (at the bottom of
	page).  For example the footer might contain: "This page took 6.53325
	seconds and 13 Git commands to generate."  Disabled by default.
+
Project specific override is not supported.

javascript-timezone::
	Enable and configure the ability to change a common time zone for dates
	in gitweb output via JavaScript.  Dates in gitweb output include
	authordate and committerdate in "commit", "commitdiff" and "log"
	views, and taggerdate in "tag" view.  Enabled by default.
+
The value is a list of three values: a default time zone (for if the client
hasn't selected some other time zone and saved it in a cookie), a name of cookie
where to store selected time zone, and a CSS class used to mark up
dates for manipulation.  If you want to turn this feature off, set "default"
to empty list: `[]`.
+
Typical gitweb config files will only change starting (default) time zone,
and leave other elements at their default values:
+
---------------------------------------------------------------------------
$feature{'javascript-timezone'}{'default'}[0] = "utc";
---------------------------------------------------------------------------
+
The example configuration presented here is guaranteed to be backwards
and forward compatible.
+
Time zone values can be "local" (for local time zone that browser uses), "utc"
(what gitweb uses when JavaScript or this feature is disabled), or numerical
time zones in the form of "+/-HHMM", such as "+0200".
+
Project specific override is not supported.

extra-branch-refs::
	List of additional directories under "refs" which are going to
	be used as branch refs. For example if you have a gerrit setup
	where all branches under refs/heads/ are official,
	push-after-review ones and branches under refs/sandbox/,
	refs/wip and refs/other are user ones where permissions are
	much wider, then you might want to set this variable as
	follows:
+
--------------------------------------------------------------------------------
$feature{'extra-branch-refs'}{'default'} =
	['sandbox', 'wip', 'other'];
--------------------------------------------------------------------------------
+
This feature can be configured on per-repository basis after setting
$feature{'extra-branch-refs'}{'override'} to true, via repository's
`gitweb.extraBranchRefs` configuration variable, which contains a
space separated list of refs. An example:
+
--------------------------------------------------------------------------------
[gitweb]
	extraBranchRefs = sandbox wip other
--------------------------------------------------------------------------------
+
The gitweb.extraBranchRefs is actually a multi-valued configuration
variable, so following example is also correct and the result is the
same as of the snippet above:
+
--------------------------------------------------------------------------------
[gitweb]
	extraBranchRefs = sandbox
	extraBranchRefs = wip other
--------------------------------------------------------------------------------
+
It is an error to specify a ref that does not pass "git check-ref-format"
scrutiny. Duplicated values are filtered.


EXAMPLES
--------

To enable blame, pickaxe search, and snapshot support (allowing "tar.gz" and
"zip" snapshots), while allowing individual projects to turn them off, put
the following in your GITWEB_CONFIG file:

	$feature{'blame'}{'default'} = [1];
	$feature{'blame'}{'override'} = 1;

	$feature{'pickaxe'}{'default'} = [1];
	$feature{'pickaxe'}{'override'} = 1;

	$feature{'snapshot'}{'default'} = ['zip', 'tgz'];
	$feature{'snapshot'}{'override'} = 1;

If you allow overriding for the snapshot feature, you can specify which
snapshot formats are globally disabled. You can also add any command line
options you want (such as setting the compression level). For instance, you
can disable Zip compressed snapshots and set *gzip*(1) to run at level 6 by
adding the following lines to your gitweb configuration file:

	$known_snapshot_formats{'zip'}{'disabled'} = 1;
	$known_snapshot_formats{'tgz'}{'compressor'} = ['gzip','-6'];

BUGS
----
Debugging would be easier if the fallback configuration file
(`/etc/gitweb.conf`) and environment variable to override its location
('GITWEB_CONFIG_SYSTEM') had names reflecting their "fallback" role.
The current names are kept to avoid breaking working setups.

ENVIRONMENT
-----------
The location of per-instance and system-wide configuration files can be
overridden using the following environment variables:

GITWEB_CONFIG::
	Sets location of per-instance configuration file.
GITWEB_CONFIG_SYSTEM::
	Sets location of fallback system-wide configuration file.
	This file is read only if per-instance one does not exist.
GITWEB_CONFIG_COMMON::
	Sets location of common system-wide configuration file.


FILES
-----
gitweb_config.perl::
	This is default name of per-instance configuration file.  The
	format of this file is described above.
/etc/gitweb.conf::
	This is default name of fallback system-wide configuration
	file.  This file is used only if per-instance configuration
	variable is not found.
/etc/gitweb-common.conf::
	This is default name of common system-wide configuration
	file.


SEE ALSO
--------
linkgit:gitweb[1], linkgit:git-instaweb[1]

'gitweb/README', 'gitweb/INSTALL'

GIT
---
Part of the linkgit:git[1] suite
