diff options
Diffstat (limited to 'nixos/hosts/tente/git.nix')
-rw-r--r-- | nixos/hosts/tente/git.nix | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/nixos/hosts/tente/git.nix b/nixos/hosts/tente/git.nix new file mode 100644 index 0000000..0e005c7 --- /dev/null +++ b/nixos/hosts/tente/git.nix @@ -0,0 +1,55 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.git; +in +{ + options.git = { + webUiDomain = lib.mkOption { + type = lib.types.str; + }; + }; + + config = { + services = { + gitolite = { + enable = true; + adminPubkey = ""; # TODO: submit PR to nixpkgs to make this option optional + user = "git"; + group = "git"; + dataDir = "/srv/gitolite"; + extraGitoliteRc = '' + $RC{UMASK} = 0027; + $RC{GIT_CONFIG_KEYS} = 'cgit.* gitweb.*'; + + # not working for some reason? still getting `FATAL: git config 'gitweb.description' not allowed` if gitweb.* is omitted in GIT_CONFIG_KEYS + # push( @{$RC{ENABLE}}, 'cgit' ); # update description files instead of gitweb.description config + ''; + }; + + nginx.virtualHosts.${cfg.webUiDomain} = { + enableACME = true; + forceSSL = true; + }; + + cgit.main = { + enable = true; + # running as the gitolite user because otherwise cloning a repo via cgit fails with: + # fatal: detected dubious ownership in repository + user = config.services.gitolite.user; + group = config.services.gitolite.group; + nginx.virtualHost = cfg.webUiDomain; + scanPath = "${config.services.gitolite.dataDir}/repositories"; + settings = { + remove-suffix = 1; + enable-git-config = 1; + root-title = "push-f.com repositories"; + root-desc = "My various repositories."; + enable-index-owner = 0; + source-filter = "${pkgs.cgit}/lib/cgit/filters/syntax-highlighting.py"; + clone-prefix = "https://${cfg.webUiDomain}"; + }; + }; + }; + }; +} |