diff options
Diffstat (limited to 'old/modules/tv/git/cgit.nix')
| -rw-r--r-- | old/modules/tv/git/cgit.nix | 93 | 
1 files changed, 93 insertions, 0 deletions
| diff --git a/old/modules/tv/git/cgit.nix b/old/modules/tv/git/cgit.nix new file mode 100644 index 000000000..747a93135 --- /dev/null +++ b/old/modules/tv/git/cgit.nix @@ -0,0 +1,93 @@ +{ 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; +      '') +    ]; +  }; +} | 
