94 lines
2.5 KiB
Nix
94 lines
2.5 KiB
Nix
{ cfg, config, lib, pkgs, ... }:
|
|
|
|
let
|
|
inherit (builtins) attrValues filter getAttr;
|
|
inherit (lib) concatMapStringsSep mkIf optionalString;
|
|
|
|
location = lib.nameValuePair; # TODO this is also in modules/wu/default.nix
|
|
|
|
isPublicRepo = getAttr "public"; # TODO this is also in ./default.nix
|
|
in
|
|
|
|
{
|
|
users.extraUsers = lib.singleton {
|
|
name = "fcgiwrap";
|
|
uid = 2851179180; # genid fcgiwrap
|
|
group = "fcgiwrap";
|
|
home = toString (pkgs.runCommand "empty" {} "mkdir -p $out");
|
|
};
|
|
|
|
users.extraGroups = lib.singleton {
|
|
name = "fcgiwrap";
|
|
gid = 2851179180; # genid fcgiwrap
|
|
};
|
|
|
|
services.fcgiwrap = {
|
|
enable = true;
|
|
user = "fcgiwrap";
|
|
group = "fcgiwrap";
|
|
# socketAddress = "/run/fcgiwrap.sock" (default)
|
|
# socketType = "unix" (default)
|
|
};
|
|
|
|
environment.etc."cgitrc".text = ''
|
|
css=/cgit-static/cgit.css
|
|
logo=/cgit-static/cgit.png
|
|
|
|
# if you do not want that webcrawler (like google) index your site
|
|
robots=noindex, nofollow
|
|
|
|
virtual-root=/cgit
|
|
|
|
# TODO make this nicer (and/or somewhere else)
|
|
cache-root=/tmp/cgit
|
|
|
|
cache-size=1000
|
|
enable-commit-graph=1
|
|
enable-index-links=1
|
|
enable-index-owner=0
|
|
enable-log-filecount=1
|
|
enable-log-linecount=1
|
|
enable-remote-branches=1
|
|
|
|
root-title=public repositories at ${config.networking.hostName}
|
|
root-desc=keep calm and engage
|
|
|
|
snapshots=0
|
|
max-stats=year
|
|
|
|
${concatMapStringsSep "\n" (repo: ''
|
|
repo.url=${repo.name}
|
|
repo.path=${cfg.dataDir}/${repo.name}
|
|
${optionalString (repo.section != null) "repo.section=${repo.section}"}
|
|
${optionalString (repo.desc != null) "repo.desc=${repo.desc}"}
|
|
'') (filter isPublicRepo (attrValues cfg.repos))}
|
|
'';
|
|
|
|
system.activationScripts.cgit = ''
|
|
mkdir -m 0700 -p /tmp/cgit
|
|
chown fcgiwrap: /tmp/cgit
|
|
'';
|
|
|
|
tv.nginx = {
|
|
enable = true;
|
|
retiolum-locations = [
|
|
(location "/cgit/" ''
|
|
include ${pkgs.nginx}/conf/fastcgi_params;
|
|
fastcgi_param SCRIPT_FILENAME ${pkgs.cgit}/cgit/cgit.cgi;
|
|
fastcgi_split_path_info ^(/cgit/?)(.+)$;
|
|
fastcgi_param PATH_INFO $fastcgi_path_info;
|
|
fastcgi_param QUERY_STRING $args;
|
|
fastcgi_param HTTP_HOST $server_name;
|
|
fastcgi_pass unix:${config.services.fcgiwrap.socketAddress};
|
|
'')
|
|
(location "= /cgit" ''
|
|
return 301 /cgit/;
|
|
'')
|
|
(location "/cgit-static/" ''
|
|
root ${pkgs.cgit}/cgit;
|
|
rewrite ^/cgit-static(/.*)$ $1 break;
|
|
'')
|
|
];
|
|
};
|
|
}
|