1 { pkgs, lib, config, ... }:
2 let inherit (config) networking;
3 inherit (config.services) gitweb gitolite nginx;
4 domain = "sourcephile.fr";
5 package = pkgs.gitweb.override (lib.optionalAttrs gitweb.gitwebTheme {
8 RuntimeDirectory = "gitweb";
9 gitwebSocket = "/run/${RuntimeDirectory}/gitweb.sock";
10 static-custom = pkgs.writeTextFile {
11 name = "static-custom";
12 destination = "/static-custom/style.css";
22 virtualHosts."git" = {
23 serverName = "git.${domain}";
29 include ${pkgs.nginx}/conf/fastcgi_params;
30 fastcgi_param PATH_INFO $fastcgi_script_name;
31 # NOTE: used by gitweb's pathinfo feature.
32 fastcgi_param GITWEB_CONFIG ${gitweb.gitwebConfigFile};
33 fastcgi_pass unix:${gitwebSocket};
37 alias = "${pkgs.gitweb}/static/";
40 alias = "${static-custom}/static-custom/";
43 root = pkgs.writeTextDir "robots.txt" ''
46 Disallow: /*/blobdiff/*
47 Disallow: /*/commitdiff/*
49 Disallow: /*/snapshot/*
59 systemd.services.gitweb = {
60 description = "GitWeb FastCGI service";
61 script = "${pkgs.gitweb}/gitweb.cgi --fastcgi --nproc=1";
63 FCGI_SOCKET_PATH = gitwebSocket;
64 FCGI_SOCKET_PERM = "432"; # decimal of 660 in octal, since current CGI::Fast doesn't use perl's oct()
69 RuntimeDirectory = [ RuntimeDirectory ];
73 wantedBy = [ "multi-user.target" ];
77 projectroot = "${gitolite.dataDir}/repositories";
80 my $s = $cgi->https() ? "s" : "";
81 @extra_breadcrumbs = (["${networking.domainBase}" => "http''${s}://${domain}"]);
82 $site_name = "Git — Sourcephile";
83 $home_link_str = "git";
84 $projects_list = "${gitolite.dataDir}/projects.list";
85 $projects_list_description_width = 50;
86 $projects_list_group_categories = 1;
87 $default_projects_order = "age";
89 $export_ok = "git-daemon-export-ok";
92 ( "git://git.${domain}"
93 , "git\@git.${domain}:"
95 # NOTE: more readable URL.
96 $feature{'pathinfo'}{'default'} = [1];
97 @stylesheets = ( "/static/gitweb.css"
98 , "/static-custom/style.css"
100 $logo = "/static/git-logo.png";
101 $favicon = "/static/git-favicon.png";
102 $javascript = "/static/gitweb.js";
103 $feature{'highlight'}{'default'} = [1];
104 # FIX: gitweb bug: FCGI is not Unicode aware.
105 if ($first_request) {
106 my $enc = Encode::find_encoding('UTF-8');
107 my $org = \&FCGI::Stream::PRINT;
108 no warnings 'redefine';
109 *FCGI::Stream::PRINT = sub {
111 for (my $i = 1; $i < @_; $i++) {
112 $OUTPUT[$i] = $enc->encode($_[$i], Encode::FB_CROAK|Encode::LEAVE_SRC);