1 { pkgs, lib, config, ... }:
3 inherit (config) networking;
4 inherit (config.services) gitweb gitolite nginx;
5 domain = "sourcephile.fr";
7 gitwebSocket = "/run/gitweb/gitweb.sock";
12 fastcgi_cache_path ${nginx.stateDir}/fastcgi_cache:${domain}:${srv}
13 keys_zone=${domain}/${srv}:2M
18 virtualHosts."${srv}" = {
19 serverName = "${srv}.${domain}";
23 access_log ${nginx.logDir}/${domain}/${srv}/access.log json buffer=32k;
24 error_log ${nginx.logDir}/${domain}/${srv}/error.log warn;
29 include ${pkgs.nginx}/conf/fastcgi_params;
30 ${nginx.configs.https_add_headers}
31 add_header X-Cache $upstream_cache_status;
32 fastcgi_cache ${domain}/${srv};
33 fastcgi_cache_valid 200 1m;
34 fastcgi_cache_valid 404 30m;
35 fastcgi_max_temp_file_size 1M;
36 # Used by gitweb's pathinfo feature
37 fastcgi_param PATH_INFO $fastcgi_script_name;
38 fastcgi_param GITWEB_CONFIG ${gitweb.gitwebConfigFile};
39 fastcgi_pass unix:${gitwebSocket};
43 alias = "${pkgs.gitweb}/static/";
49 root = pkgs.writeTextDir "style.css" ''
59 root = pkgs.writeTextDir "robots.txt" ''
62 Disallow: /*/blobdiff/*
63 Disallow: /*/commitdiff/*
65 Disallow: /*/snapshot/*
74 systemd.services.nginx.preStart = lib.mkBefore ''
75 install -D -d -m 750 -o ${nginx.user} -g ${nginx.group} ${nginx.logDir}/${domain}/${srv}/
77 systemd.services.gitweb = {
78 description = "GitWeb FastCGI service";
79 script = "${pkgs.gitweb}/gitweb.cgi --fastcgi --nproc=1";
81 FCGI_SOCKET_PATH = gitwebSocket;
82 FCGI_SOCKET_PERM = "432"; # decimal of 660 in octal, since current CGI::Fast doesn't use perl's oct()
87 RuntimeDirectory = [ "gitweb" ];
91 wantedBy = [ "multi-user.target" ];
95 projectroot = "${gitolite.dataDir}/repositories";
98 my $s = $cgi->https() ? "s" : "";
99 @extra_breadcrumbs = (["${networking.domainBase}" => "http''${s}://${domain}"]);
100 $site_name = "Git — Sourcephile";
101 $home_link_str = "git";
102 $projects_list = "${gitolite.dataDir}/projects.list";
103 $projects_list_description_width = 50;
104 $projects_list_group_categories = 1;
105 $default_projects_order = "age";
107 $export_ok = "git-daemon-export-ok";
110 ( "git://${srv}.${domain}"
111 , "git\@${srv}.${domain}:"
113 # NOTE: more readable URL.
114 $feature{'pathinfo'}{'default'} = [1];
115 @stylesheets = ( "/static/gitweb.css"
116 , "/static-custom/style.css"
118 $logo = "/static/git-logo.png";
119 $favicon = "/static/git-favicon.png";
120 $javascript = "/static/gitweb.js";
121 $feature{'highlight'}{'default'} = [1];
122 # Fix a bug in Gitweb: FCGI is not Unicode aware.
123 if ($first_request) {
124 my $enc = Encode::find_encoding('UTF-8');
125 my $org = \&FCGI::Stream::PRINT;
126 no warnings 'redefine';
127 *FCGI::Stream::PRINT = sub {
129 for (my $i = 1; $i < @_; $i++) {
130 $OUTPUT[$i] = $enc->encode($_[$i], Encode::FB_CROAK|Encode::LEAVE_SRC);