{ gitweb, writeText, stdenv, coreutils, writeScript, gitolite, git, cgit, gitoliteDir, mailcap, highlight }:
rec {
varDir = gitoliteDir;
config = writeText "gitweb.conf" ''
$git_temp = "/tmp";
# The directories where your projects are. Must not end with a
# slash.
$projectroot = "${varDir}/repositories";
$projects_list = "${varDir}/projects.list";
$strict_export = "true";
# Base URLs for links displayed in the web interface.
our @git_base_url_list = qw(ssh://gitolite@git.immae.eu https://git.immae.eu);
$feature{'blame'}{'default'} = [1];
$feature{'avatar'}{'default'} = ['gravatar'];
$feature{'highlight'}{'default'} = [1];
@stylesheets = ("gitweb-theme/gitweb.css");
$logo = "gitweb-theme/git-logo.png";
$favicon = "gitweb-theme/git-favicon.png";
$javascript = "gitweb-theme/gitweb.js";
$logo_url = "https://git.immae.eu/";
$projects_list_group_categories = "true";
$projects_list_description_width = 60;
$project_list_default_category = "__Others__";
$highlight_bin = "${highlight}/bin/highlight";
'';
aboutFilter = writeScript "about-filter.sh" ''
#!${stdenv.shell}
if [ -f "$CGIT_REPO_PATH/README.html" ]; then
cat "$CGIT_REPO_PATH/README.html"
else
${cgit}/lib/cgit/filters/about-formatting.sh "$@"
fi
'';
cgitConfig = writeText "cgitrc" ''
css=/cgit-css/cgit.css
logo=/cgit-css/cgit.png
favicon=/cgit-css/favicon.ico
head-include=${./cgit_js.html}
root-title=Immae’s git
root-desc=To go back to the old interface: https://git.immae.eu/?old
readme=:README.md
readme=:readme.md
readme=:README
readme=:DOCUMENTATION.md
about-filter=${aboutFilter}
#${cgit}/lib/cgit/filters/about-formatting.sh
source-filter=${cgit}/lib/cgit/filters/syntax-highlighting.py
enable-blame=1
enable-index-links=1
enable-commit-graph=1
enable-log-filecount=1
enable-log-linecount=1
enable-html-serving=1
# Allow using gitweb.* keys
enable-git-config=1
side-by-side-diffs=1
snapshots=tar.gz tar.zst zip
mimetype-file=${mailcap}/etc/mime.types
section=__Others__
clone-url=ssh://gitolite@git.immae.eu/$CGIT_REPO_URL https://git.immae.eu/$CGIT_REPO_URL
#section-from-path=1
project-list=${varDir}/projects.list
scan-path=${varDir}/repositories
'';
apache = rec {
user = "wwwrun";
group = "wwwrun";
modules = [ "cgid" ];
root = gitweb;
vhostConf = ''
SetEnv GIT_PROJECT_ROOT ${varDir}/repositories/
ScriptAliasMatch \
"(?x)^/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
${git}/libexec/git-core/git-http-backend/$1
Require all granted
DirectoryIndex gitweb.cgi
Require all granted
AllowOverride None
Options ExecCGI FollowSymLinks
SetHandler cgi-script
SetEnv GITWEB_CONFIG "${config}"
SetEnv CGIT_CONFIG ${cgitConfig}
ScriptAlias /cgit "${cgit}/cgit/cgit.cgi/"
Alias /cgit-css "${cgit}/cgit"
AllowOverride None
Options ExecCGI FollowSymlinks
Require all granted
RewriteEngine On
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^/?$ /cgit [L,R=302]
RewriteCond %{REQUEST_URI} ^(.*)(\.git)?/?$
RewriteCond ${varDir}/repositories/%1.git/HEAD -f
RewriteRule ^(.+)$ /cgit$1 [L,R=302]
'';
};
}