From 0c4f3acb281be6290c55a6e96bc29fab5b5c7a11 Mon Sep 17 00:00:00 2001 From: tv Date: Mon, 11 Sep 2023 18:24:28 +0200 Subject: stockholm -> hrm --- configs/gitrepos.nix | 237 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100644 configs/gitrepos.nix (limited to 'configs/gitrepos.nix') diff --git a/configs/gitrepos.nix b/configs/gitrepos.nix new file mode 100644 index 0000000..c69ffa4 --- /dev/null +++ b/configs/gitrepos.nix @@ -0,0 +1,237 @@ +{ config, lib, mylib, pkgs, ... }: let { + + body = { + + nixpkgs.config.packageOverrides = super: { + cgit = pkgs.symlinkJoin { + name = "${super.cgit.name}-tv"; + paths = [ + (pkgs.runCommand "${super.cgit.name}-tv-overrides" { + } /* sh */ '' + mkdir -p $out/lib/cgit/filters + cd $out/lib/cgit/filters + cp \ + ${super.cgit}/lib/cgit/filters/syntax-highlighting.py \ + ${super.cgit}/lib/cgit/filters/.syntax-highlighting.py-wrapped \ + . + sed -i "s:${super.cgit}:$out:" syntax-highlighting.py + sed -i ' + s:^\(formatter =\).*:\1 HtmlFormatter(style="algol_nu"): + ' .syntax-highlighting.py-wrapped + '') + super.cgit + ]; + }; + }; + + krebs.git = { + enable = true; + cgit = { + settings = { + about-filter = pkgs.exec "krebs.cgit.about-filter" rec { + filename = "${pkgs.python3Packages.markdown2}/bin/markdown2"; + argv = [ + filename + "--extras=fenced-code-blocks" + ]; + envp = {}; + }; + readme = [ + ":README.md" + ]; + root-desc = "mostly krebs"; + root-title = "repositories at ${config.krebs.build.host.name}"; + source-filter = "${pkgs.cgit}/lib/cgit/filters/syntax-highlighting.py"; + }; + }; + repos = repos; + rules = rules; + }; + }; + + cgit-clear-cache = pkgs.cgit-clear-cache.override { + inherit (config.krebs.git.cgit.settings) cache-root; + }; + + repos = + public-repos // + lib.optionalAttrs config.krebs.build.host.secure restricted-repos; + + rules = lib.concatMap make-rules (builtins.attrValues repos); + + public-repos = lib.mapAttrs make-public-repo ({ + } // lib.mapAttrs (_: lib.recursiveUpdate { cgit.section = "1. miscellaneous"; }) { + couchfs = { + cgit.desc = "filesystem (in userspace) on top of CouchDB"; + }; + crx = { + cgit.desc = "utilities for working with Chrome extensions"; + }; + dic = { + cgit.desc = "dict.leo.org command line interface"; + }; + disko = { + cgit.desc = "declarative partitioning and formatting tool"; + }; + fswm = { + cgit.desc = "simple full screen window manager"; + }; + htgen = { + cgit.desc = "toy HTTP server"; + }; + ircaids = { + cgit.desc = "Assortment of aids for working with Internet relay chat"; + }; + krops = { + cgit.desc = "deployment tools"; + }; + mailaids = { + cgit.desc = "Assortment of aids for working with electronic mail"; + }; + much = {}; + netcup = { + cgit.desc = "netcup command line interface"; + }; + nix-writers = { + cgit.desc = "collection of package builders"; + }; + nixpkgs = { + cgit.desc = "Nix Packages collection"; + }; + pager = { + }; + populate = { + cgit.desc = "source code installer"; + }; + q = {}; + reaktor2 = {}; + stockholm = { + cgit.desc = "NixOS configuration"; + }; + TabFS = { + cgit.desc = "mount browser tabs & co. as a filesystem"; + }; + texnix = { + cgit.desc = "TeX live environment generator"; + }; + with-ssh = {}; + } // lib.mapAttrs (_: lib.recursiveUpdate { cgit.section = "2. Host configurations"; }) { + ni = { + }; + } // lib.mapAttrs (_: lib.recursiveUpdate { cgit.section = "3. Haskell libraries"; }) { + X11-aeson = {}; + blessings = {}; + hack = {}; + hc = {}; + mime = {}; + quipper = {}; + scanner = {}; + wai-middleware-time = {}; + web-routes-wai-custom = {}; + xintmap = {}; + xmonad-aeson = {}; + xmonad-web = {}; + } // lib.mapAttrs (_: lib.recursiveUpdate { cgit.section = "4. museum"; }) { + cac-api = { + cgit.desc = "CloudAtCost API command line interface"; + }; + cgserver = {}; + crude-mail-setup = {}; + dot-xmonad = {}; + flameshot-once = { + cgit.desc = "flameshot runner that automatically starts/stops the daemon"; + }; + hirc = {}; + hstool = { + cgit.desc = "Haskell Development Environment ^_^"; + }; + kirk = { + cgit.desc = "IRC tools"; + }; + make-snapshot = {}; + nixos-infest = {}; + painload = {}; + push = {}; + Reaktor = {}; + regfish = {}; + with-tmpdir = {}; + get = {}; + load-env = {}; + loldns = { + cgit.desc = "toy DNS server"; + }; + soundcloud = { + cgit.desc = "SoundCloud command line interface"; + }; + xmonad-stockholm = {}; + }); + + restricted-repos = lib.mapAttrs make-restricted-repo ( + { + brain = { + collaborators = with config.krebs.users; [ lass makefu ]; + hooks = { + post-receive = /* sh */ '' + (${irc-announce { cgit_endpoint = null; }}) + ${cgit-clear-cache}/bin/cgit-clear-cache + ''; + }; + }; + } // + # TODO don't put secrets/repos.nix into the store + mylib.importSecret "repos.nix" { inherit config lib pkgs; } + ); + + irc-announce = args: pkgs.git-hooks.irc-announce (lib.recursiveUpdate { + channel = "#xxx"; + # TODO make nick = config.krebs.build.host.name the default + nick = config.krebs.build.host.name; + server = "irc.r"; + verbose = { + exclude = [ + "refs/heads/head" + ]; + }; + } args); + + make-public-repo = name: { cgit ? {}, ... }: { + inherit cgit name; + public = true; + hooks = { + post-receive = /* sh */ '' + (${lib.optionalString (config.krebs.build.host.name == "ni") + (irc-announce {})}) + ${cgit-clear-cache}/bin/cgit-clear-cache + ''; + }; + }; + + make-restricted-repo = name: { collaborators ? [], hooks ? {}, ... }: { + inherit collaborators name; + public = false; + hooks = hooks // { + post-receive = /* sh */ '' + (${hooks.post-receive or ":"}) + ${cgit-clear-cache}/bin/cgit-clear-cache + ''; + }; + }; + + make-rules = + with mylib.git // config.krebs.users; + repo: + [ + { + user = [ tv tv-xu ]; + repo = [ repo ]; + perm = push "refs/*" [ non-fast-forward create delete merge ]; + } + ] + ++ + lib.optional (repo.collaborators or [] != []) { + user = repo.collaborators; + repo = [ repo ]; + perm = fetch; + }; + +} -- cgit v1.2.3