diff options
-rw-r--r-- | hosts/configuration.nix | 1 | ||||
-rw-r--r-- | modules/git-server/default.nix | 86 |
2 files changed, 86 insertions, 1 deletions
diff --git a/hosts/configuration.nix b/hosts/configuration.nix index de26822..63a78c4 100644 --- a/hosts/configuration.nix +++ b/hosts/configuration.nix @@ -126,7 +126,6 @@ ''; }; - # List services that you want to enable: services = { openssh = { enable = true; diff --git a/modules/git-server/default.nix b/modules/git-server/default.nix new file mode 100644 index 0000000..24b9a61 --- /dev/null +++ b/modules/git-server/default.nix @@ -0,0 +1,86 @@ +{ pkgs, config, ... }: +let + dataDir = "/home/git"; #needs to be created and owned by ${user} + cgitPackage = pkgs.cgit; + user = "git"; + group = "git"; + adminPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID99gQ/AgXhgwAjs+opsRXMbWpXFRT2aqAOUbN3DsrhQ"; +in +{ + environment.systemPackages = [ + cgitPackage + ]; + + services = { + nginx = { + enable = true; + virtualHosts."_" = { + listen = [{ addr = "0.0.0.0"; port = 80; }]; + locations = { + "/".extraConfig = + let + cgitrc = pkgs.writeText "cgitrc" '' + root-title=Baitinq's git + root-desc=Hi! + + about-filter=${cgitPackage}/lib/cgit/filters/about-formatting.sh + source-filter=${cgitPackage}/lib/cgit/filters/syntax-highlighting.py + commit-filter=${cgitPackage}/lib/cgit/filters/commit-links.sh + + + enable-blame=1 + enable-commit-graph=1 + enable-follow-links=1 + enable-git-config=1 + enable-html-serving=1 + enable-index-links=1 + enable-index-owner=0 + enable-log-filecount=1 + enable-log-linecount=1 + enable-remote-branches=1 + enable-subject-links=1 + enable-tree-linenumbers=1 + + remove-suffix=1 + + snapshots=tar.gz tar.bz2 zip + + readme=:README + readme=:README.md + readme=:README.org + readme=:README.txt + readme=:readme + readme=:readme.md + readme=:readme.org + readme=:readme.txt + + project-list=${config.services.gitolite.dataDir}/projects.list + scan-path=${config.services.gitolite.dataDir}/repositories + ''; + in + ''include ${config.services.nginx.package}/conf/fastcgi_params; + fastcgi_split_path_info ^(/?)(.+)$; + fastcgi_pass unix:${config.services.fcgiwrap.socketAddress}; + fastcgi_param SCRIPT_FILENAME ${cgitPackage}/cgit/cgit.cgi; + fastcgi_param CGIT_CONFIG ${cgitrc}; + fastcgi_param PATH_INFO $uri; + fastcgi_param QUERY_STRING $args; + fastcgi_param HTTP_HOST $server_name; ''; + "~* ^/(.+.(ico|css|png))$".extraConfig = '' + alias ${cgitPackage}/cgit/$1; + ''; + }; + }; + }; + + gitolite = { + enable = true; + inherit user group adminPubkey dataDir; + }; + + fcgiwrap = { + enable = true; + inherit user group; + }; + }; +} |