111 lines
3.0 KiB
Nix
111 lines
3.0 KiB
Nix
|
{ config, lib, pkgs, ... }:
|
||
|
|
||
|
let
|
||
|
inherit (builtins) attrValues filter getAttr;
|
||
|
inherit (lib) concatMapStringsSep mkIf optionalString;
|
||
|
|
||
|
cfg = config.services.git;
|
||
|
|
||
|
isPublicRepo = getAttr "public"; # TODO this is also in ./default.nix
|
||
|
in
|
||
|
|
||
|
{
|
||
|
config = mkIf cfg.cgit {
|
||
|
|
||
|
users.extraUsers = lib.singleton {
|
||
|
name = "fcgiwrap";
|
||
|
uid = 2851179180; # genid fcgiwrap
|
||
|
group = "fcgiwrap";
|
||
|
home = "/var/empty";
|
||
|
};
|
||
|
|
||
|
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
|
||
|
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=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.desc != null) "repo.desc=${repo.desc}"}
|
||
|
'') (filter isPublicRepo (attrValues cfg.repos))}
|
||
|
'';
|
||
|
|
||
|
# TODO modular nginx configuration
|
||
|
services.nginx =
|
||
|
let
|
||
|
name = config.networking.hostName;
|
||
|
qname = "${name}.retiolum";
|
||
|
in
|
||
|
{
|
||
|
enable = true;
|
||
|
httpConfig = ''
|
||
|
include ${pkgs.nginx}/conf/mime.types;
|
||
|
default_type application/octet-stream;
|
||
|
sendfile on;
|
||
|
keepalive_timeout 65;
|
||
|
gzip on;
|
||
|
server {
|
||
|
listen 80;
|
||
|
server_name ${name} ${qname} localhost;
|
||
|
root ${pkgs.cgit}/cgit;
|
||
|
|
||
|
location /cgit-static {
|
||
|
rewrite ^/cgit-static(/.*)$ $1 break;
|
||
|
#expires 30d;
|
||
|
}
|
||
|
|
||
|
location /cgit {
|
||
|
include ${pkgs.nginx}/conf/fastcgi_params;
|
||
|
fastcgi_param SCRIPT_FILENAME $document_root/cgit.cgi;
|
||
|
#fastcgi_param PATH_INFO $uri;
|
||
|
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 / {
|
||
|
return 404;
|
||
|
}
|
||
|
}
|
||
|
'';
|
||
|
};
|
||
|
};
|
||
|
}
|