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

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