summaryrefslogtreecommitdiff
path: root/hosts/oixos/cgit.nix
blob: 825f6145e97103cf695ce8613184b7199d0bb9b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
{ pkgs, ... }:
let
  cgitPkg = pkgs.cgit;
in
{
  users.groups.git = { };
  users.users.git = {
    isSystemUser = true;
    group = "git";
    home = "/var/lib/git";
    createHome = true;
    shell = "${pkgs.git}/bin/git-shell";
  };

  environment.etc."cgitrc".text = ''
    root-title=beeb5k git repos
    root-desc=Personal Code Repositories
    scan-path=/var/lib/git
    enable-http-clone=1
    clone-prefix=https://git.beeb5k.space

    css=/cgit-css/cgit.css
    logo=/cgit-css/cgit.png
    favicon=/favicon.ico

    readme=:README.md
    readme=:README.txt
    readme=:README
  '';

  services.fcgiwrap.instances.cgit = {
    process = {
      user = "git";
      group = "git";
    };
    socket = {
      type = "unix";
      address = "/run/fcgiwrap-cgit.sock";
      user = "git";
      group = "caddy";
      mode = "0660";
    };
  };

  services.caddy = {
    enable = true;

    virtualHosts."git.beeb5k.space".extraConfig = ''
      # Article: location /cgit-css/ { alias /usr/share/cgit/; }
      handle_path /cgit-css/* {
        root * ${pkgs.cgit}/cgit
        file_server
      }

      # Article: location / { fastcgi_pass ... fastcgi_param SCRIPT_FILENAME ... }
      handle {
        reverse_proxy unix//run/fcgiwrap-cgit.sock {
          transport fastcgi {
            env DOCUMENT_ROOT ${pkgs.cgit}/cgit
            env SCRIPT_FILENAME ${pkgs.cgit}/cgit/cgit.cgi
            env CGIT_CONFIG /etc/cgitrc
          }
        }
      }
    '';
  };
}