about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--configuration.nix1
-rw-r--r--git.nix53
2 files changed, 54 insertions, 0 deletions
diff --git a/configuration.nix b/configuration.nix
index 712a88e..798e300 100644
--- a/configuration.nix
+++ b/configuration.nix
@@ -34,6 +34,7 @@
     ./dns.nix
     ./ipfs.nix
     ./irc.nix
+    ./git.nix
     ./matrix.nix
     ./push.nix
     ./static.nix
diff --git a/git.nix b/git.nix
new file mode 100644
index 0000000..152de98
--- /dev/null
+++ b/git.nix
@@ -0,0 +1,53 @@
+# HTTP Git hosting
+# Copyright (C) 2023  Nguyễn Gia Phong
+#
+# This file is part of loang configuration.
+#
+# Loang configuration is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Loang configuration is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with loang configuration.  If not, see <https://www.gnu.org/licenses/>.
+
+{ config, lib, pkgs, ... }:
+let inherit (config.networking) domain;
+in {
+  services = {
+    lighttpd = {
+      cgit = {
+        configText = let
+          httpsClone = "https://trong.${domain}/$CGIT_REPO_URL";
+          scanPath = "/var/lib/git";
+          sshClone = "ssh://${domain}:2211${scanPath}/$CGIT_REPO_URL";
+        in ''
+          about-filter=${pkgs.cgit}/lib/cgit/filters/about-formatting.sh
+          source-filter=${pkgs.cgit}/lib/cgit/filters/syntax-highlighting.py
+
+          clone-url=${httpsClone} ${sshClone}
+          enable-blame=1
+          enable-git-config=1
+          readme=:README.md
+          snapshots=tar.gz tar.zst
+          scan-path=${scanPath}
+        '';
+        enable = true;
+        subdir = "";
+      };
+      enable = true;
+      port = 9418;
+    };
+
+    nginx."trong.${domain}" = let port = config.services.lighttpd.port;
+    in {
+      enableACME = true;
+      forceSSL = true;
+      locations."/".proxyPass = "http://127.0.0.1:${toString port}";
+    };
+}