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 hightlighting.
+
*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.  Other popular choice it to
	set it to the name of site.

$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.

$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
	overriddable, 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 overriddable 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 timezone 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 timezone (for if the client
hasn't selected some other timezone and saved it in a cookie), a name of cookie
where to store selected timezone, 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) timezone,
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.
+
Timezone values can be "local" (for local timezone that browser uses), "utc"
(what gitweb uses when JavaScript or this feature is disabled), or numerical
timezones in the form of "+/-HHMM", such as "+0200".
+
Project specific override is not supported.


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'];

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
