# 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 . { config, lib, pkgs, ... }: let inherit (config.networking) domain; cgit = pkgs.cgit-pink; in { services = let cgitrc = pkgs.writeText "cgitrc" '' about-filter=${cgit}/lib/cgit/filters/about-formatting.sh css=/style.css favicon=/favicon.ico logo=/cgit.png source-filter=${cgit}/lib/cgit/filters/syntax-highlighting.py virtual-root=/ clone-url=${httpsClone} ${sshClone} enable-blame=1 enable-git-config=1 enable-index-links=1 enable-index-owner=0 readme=:README.md snapshots=tar.gz tar.zst scan-path=${scanPath} ''; css = builtins.readFile "${cgit}/cgit/cgit.css" + '' div#cgit { font-size: initial; } ''; httpsClone = "https://trong.${domain}/$CGIT_REPO_URL"; scanPath = "/var/lib/git"; sshClone = "ssh://${domain}:2211${scanPath}/$CGIT_REPO_URL"; in { fcgiwrap.enable = true; nginx.virtualHosts."trong.${domain}" = { enableACME = true; forceSSL = true; locations = { "/" = { root = "${cgit}/cgit/"; tryFiles = "$uri @cgit"; }; "~ ^/(cgit.png|favicon.ico|robots.txt)$".alias = "${cgit}/cgit/$1"; "= /style.css".alias = builtins.toFile "style.css" css; "@cgit".extraConfig = '' include ${pkgs.nginx}/conf/fastcgi_params; fastcgi_param CGIT_CONFIG ${cgitrc}; fastcgi_param HTTP_HOST $server_name; fastcgi_param PATH_INFO $uri; fastcgi_param QUERY_STRING $args; fastcgi_param SCRIPT_FILENAME ${cgit}/cgit/cgit.cgi; fastcgi_pass unix:${config.services.fcgiwrap.socketAddress}; ''; }; }; }; }