diff options
author | Patryk Niedźwiedziński <pniedzwiedzinski19@gmail.com> | 2024-10-30 20:16:45 +0100 |
---|---|---|
committer | Patryk Niedźwiedziński <pniedzwiedzinski19@gmail.com> | 2024-10-30 20:16:45 +0100 |
commit | 009a43799c28eca77752de4268c0e74700d13527 (patch) | |
tree | 5eb771177ef9ccde32ecdaa11149549b5e9ea19e /machines/srv3/services/cgit/default.nix | |
parent | 9c14b06fc484e4be8852c4f379cb1671ed367d6a (diff) | |
download | dots-009a43799c28eca77752de4268c0e74700d13527.tar.gz dots-009a43799c28eca77752de4268c0e74700d13527.zip |
Diffstat (limited to 'machines/srv3/services/cgit/default.nix')
-rw-r--r-- | machines/srv3/services/cgit/default.nix | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/machines/srv3/services/cgit/default.nix b/machines/srv3/services/cgit/default.nix new file mode 100644 index 0000000..bcd63bb --- /dev/null +++ b/machines/srv3/services/cgit/default.nix @@ -0,0 +1,106 @@ +{ pkgs, ...}: +let + cgitHostname = "git.niedzwiedzinski.cyou"; + + mirror = pkgs.writeScriptBin "mirror" '' + #!/bin/sh + + name=`echo "$1" | rev | cut -d'/' -f1 | rev` + + cd /srv/git + sudo -u git ${pkgs.git}/bin/git clone --mirror $1 $name + sudo -u git /run/current-system/sw/bin/chmod -R g+w $name + ''; + + newrepo = pkgs.writeScriptBin "newrepo" '' + #!/bin/sh + + [ -z $1 ] && echo "Pass repo name" && exit 1 + + sudo -u git git init --bare /srv/git/$1 + sudo -u git /run/current-system/sw/bin/chmod -R g+w /srv/git/$1 + ''; + +in +{ + environment.systemPackages = [ newrepo mirror ]; + systemd.services.git-fetch = { + script = '' + #!/bin/sh + cd /srv/git + for f in `find . -name HEAD`; do + cd ''${f%HEAD} + ${pkgs.git}/bin/git fetch + cd /srv/git + done + ''; + serviceConfig = { + Type = "oneshot"; + User = "git"; + }; + }; + systemd.timers.git-fetch = { + partOf = [ "git-fetch.service" ]; + wantedBy = ["timers.target" ]; + timerConfig = { + OnCalendar = "hourly"; + Unit = "git-fetch.service"; + }; + }; + services.nginx.virtualHosts."${cgitHostname}" = { + locations."=/mylogo.png" = { + alias = "${./baby-yoda.png.comp}"; + }; + forceSSL = true; + enableACME = true; + }; + services.cgit.gitN = { + enable = true; + user = "cgit"; + package = pkgs.cgit-pink; + scanPath = "/srv/git"; + nginx.virtualHost = cgitHostname; + settings = { + about-filter = let formatScript = pkgs.writeScriptBin "about-format.sh" '' + #!/bin/sh + ${pkgs.coreutils}/bin/cat << EOF + <style> + .md blockquote { + background: #eee; + font-style: italic; + padding: 0 1em; + } + </style> + <div class="md"> + EOF + ${pkgs.coreutils}/bin/cat /dev/stdin | ${pkgs.lowdown}/bin/lowdown + echo '</div>' + ''; + in "${formatScript}/bin/about-format.sh"; + cache-size = "1000"; + root-title = cgitHostname; + root-desc = "Personal git server, because I can"; + readme = ":README.md"; + snapshots = "tar.gz zip"; + clone-prefix = "https://${cgitHostname}"; + section-from-path = "1"; + logo = "/mylogo.png"; + }; + }; + + users = { + groups = { git = {}; }; + users = { + git = { + isSystemUser = true; + group = "git"; + description = "git user"; + home = "/srv/git"; + shell = "${pkgs.git}/bin/git-shell"; + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIqlCe4ovKa/Gwl5xmgu9nvVPmFXMgwdeLRYW7Gg7RWx pniedzwiedzinski19@gmail.com" + ]; + }; + }; + }; +} |