summary refs log tree commit diff stats
path: root/modules/nixos/vhack/git-server/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/nixos/vhack/git-server/default.nix')
-rw-r--r--modules/nixos/vhack/git-server/default.nix86
1 files changed, 84 insertions, 2 deletions
diff --git a/modules/nixos/vhack/git-server/default.nix b/modules/nixos/vhack/git-server/default.nix
index a700ef4..8bb1428 100644
--- a/modules/nixos/vhack/git-server/default.nix
+++ b/modules/nixos/vhack/git-server/default.nix
@@ -5,6 +5,13 @@
   ...
 }: let
   cfg = config.vhack.git-server;
+
+  cgitCss = import ./css.nix {
+    inherit pkgs;
+    cgitPkg =
+      config.services.cgit."${cfg.domain}".package;
+  };
+
   /*
   Until <https://github.com/NixOS/nixpkgs/pull/317293> is merged into
   nixpkgs, we have to do the list to string conversion ourselves:
@@ -74,20 +81,95 @@ in {
         package = pkgs.cgit-pink;
         scanPath = "${config.services.gitolite.dataDir}/repositories";
         settings = {
+          branch-sort = "age";
+
           # Allow users to download a repo checkout with these compression formats
           snapshots = toCgitRc ["tar.gz" "zip"];
           # The template used to generate the clone url for https clone.
           clone-url = toCgitRc ["https://${cfg.domain}/$CGIT_REPO_URL" "ssh://git@${cfg.domain}/$CGIT_REPO_URL"];
           enable-http-clone = true;
-          section-from-path = true;
+
+          # TODO: We might want to add an logo and readme here <2024-07-31>
+          # logo = "<url>";
+          # root-readme = "/some/readme/file"
+          root-desc = "The cgit instance of ${cfg.domain}!";
+          root-title = "${
+            lib.strings.toUpper (builtins.substring 0 1 cfg.domain) + builtins.substring 1 (builtins.stringLength cfg.domain) cfg.domain
+          } cgit instace";
+
+          # Set the default maximum statistics period. Valid values are "week",
+          # "month", "quarter" and "year".
+          max-stats = "week";
+
+          readme = toCgitRc [
+            ":README.md"
+            ":readme.md"
+            ":README.mkd"
+            ":readme.mkd"
+            ":README.rst"
+            ":readme.rst"
+            ":README.html"
+            ":readme.html"
+            ":README.htm"
+            ":readme.htm"
+            ":README.txt"
+            ":readme.txt"
+            ":README"
+            ":readme"
+            ":INSTALL.md"
+            ":install.md"
+            ":INSTALL.mkd"
+            ":install.mkd"
+            ":INSTALL.rst"
+            ":install.rst"
+            ":INSTALL.html"
+            ":install.html"
+            ":INSTALL.htm"
+            ":install.htm"
+            ":INSTALL.txt"
+            ":install.txt"
+            ":INSTALL"
+            ":install"
+          ];
+
+          enable-blame = true;
+          enable-commit-graph = true;
+          enable-subject-links = true;
+          enable-follow-links = true;
+          enable-index-links = true;
+          enable-index-owner = true;
+
+          # NOTE: This allows cgit to take configuration from the bare git repositories:
+          # eg. `cgit.section` should set the section, `cgit.homepage` the homepage,
+          # `gitweb.owner` the owner and `gitweb.description` the description of the repo. <2024-08-02>
+          enable-git-config = true;
+
+          # Remove the `.git` suffix from scanned repositories (this must be set _before_ `scan-path`)
+          remove-suffix = true;
+
+          css = "${cgitCss}";
+
+          # This is a number of path elements to treat as section.
+          # Set this to a big number to ensure all path elements are treated as sections.
+          section-from-path = 1000;
+
           project-list = "${config.services.gitolite.dataDir}/projects.list";
-          source-filter = "${config.services.cgit."git.vhack.eu".package}/lib/cgit/filters/syntax-highlighting.py";
+
+          # TODO:  We might want to use the kernel.org `libravatar.lua` email-filter <2024-07-31>
+          source-filter = "${config.services.cgit."${cfg.domain}".package}/lib/cgit/filters/syntax-highlighting.py";
+          about-filter = "${config.services.cgit."${cfg.domain}".package}/lib/cgit/filters/about-formatting.sh";
         };
       };
 
       nginx.virtualHosts."${cfg.domain}" = {
         enableACME = true;
         forceSSL = true;
+
+        # locations = {
+        #   "= /cgit.css" = {
+        #     alias = cgitCss.outPath;
+        #   };
+        # };
       };
     };
   };