From b4ad7cd86d59fbc003392068f6abec6f96720163 Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Sat, 22 Jul 2017 15:12:06 +0200
Subject: [PATCH] krebs: merge cgit-mirror into repo-sync

---
 krebs/1systems/wolf/config.nix |  1 -
 krebs/2configs/cgit-mirror.nix | 45 -----------------
 krebs/2configs/repo-sync.nix   | 90 ++++++++++++++++++++++++----------
 3 files changed, 65 insertions(+), 71 deletions(-)
 delete mode 100644 krebs/2configs/cgit-mirror.nix

diff --git a/krebs/1systems/wolf/config.nix b/krebs/1systems/wolf/config.nix
index ba897a26e..32e7bd49d 100644
--- a/krebs/1systems/wolf/config.nix
+++ b/krebs/1systems/wolf/config.nix
@@ -11,7 +11,6 @@ in
     <stockholm/krebs/2configs/central-stats-client.nix>
     <stockholm/krebs/2configs/save-diskspace.nix>
 
-    <stockholm/krebs/2configs/cgit-mirror.nix>
     <stockholm/krebs/2configs/graphite.nix>
     <stockholm/krebs/2configs/repo-sync.nix>
     <stockholm/krebs/2configs/shared-buildbot.nix>
diff --git a/krebs/2configs/cgit-mirror.nix b/krebs/2configs/cgit-mirror.nix
deleted file mode 100644
index c2326a5cc..000000000
--- a/krebs/2configs/cgit-mirror.nix
+++ /dev/null
@@ -1,45 +0,0 @@
-{ config, lib, pkgs, ... }:
-
-with import <stockholm/lib>;
-let
-  rules = with git; singleton {
-    user = [ wolf-repo-sync ];
-    repo = [ stockholm-mirror ];
-    perm = push ''refs/*'' [ non-fast-forward create delete merge ];
-  };
-
-  stockholm-mirror = {
-    public = true;
-    name = "stockholm-mirror";
-    cgit.desc = "mirror for all stockholm branches";
-    hooks = {
-      post-receive = pkgs.git-hooks.irc-announce {
-        nick = config.networking.hostName;
-        verbose = false;
-        channel = "#retiolum";
-        server = "ni.r";
-      };
-    };
-  };
-
-  wolf-repo-sync = {
-    name = "wolf-repo-sync";
-    mail = "spam@krebsco.de";
-    # TODO put git-sync pubkey somewhere more appropriate
-    pubkey = ''ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwuAZB3wtAvBJFYh+gWdyGaZU4mtqM2dFXmh2rORlbXeh02msu1uv07ck1VKkQ4LgvCBcBsAOeVa1NTz99eLqutwgcqMCytvRNUCibcoEWwHObsK53KhDJj+zotwlFhnPPeK9+EpOP4ngh/tprJikttos5BwBwe2K+lfiid3fmVPZcTTYa77nCwijimMvWEx6CEjq1wiXMUc4+qcEn8Swbwomz/EEQdNE2hgoC3iMW9RqduTFdIJWnjVi0KaxenX9CvQRGbVK5SSu2gwzN59D/okQOCP6+p1gL5r3QRHSLSSRiEHctVQTkpKOifrtLZGSr5zArEmLd/cOVyssHQPCX repo-sync@wolf'';
-  };
-
-in {
-  krebs.users.wolf-repo-sync = wolf-repo-sync;
-  krebs.git = {
-    enable = true;
-    cgit = {
-      settings = {
-        root-title = "Shared Repos";
-        root-desc = "keep on krebsing";
-      };
-    };
-    inherit rules;
-    repos.stockholm-mirror = stockholm-mirror;
-  };
-}
diff --git a/krebs/2configs/repo-sync.nix b/krebs/2configs/repo-sync.nix
index 637a26e3c..87a8bd827 100644
--- a/krebs/2configs/repo-sync.nix
+++ b/krebs/2configs/repo-sync.nix
@@ -1,31 +1,71 @@
 { config, lib, pkgs, ... }:
 
-with lib;
-{
-  krebs.repo-sync = let
-    # TODO addMirrorURL function
-    mirror = "git@wolf:stockholm-mirror";
-  in {
-    enable = true;
-    repos.stockholm = {
-      branches = {
-        makefu = {
-          origin.url = http://cgit.gum/stockholm ;
-          mirror.url = mirror;
+with import <stockholm/lib>;
+
+let
+  mirror = "git@${config.networking.hostName}:";
+
+  defineRepo = name: announce: let
+    repo = {
+      public = true;
+      name = mkDefault "${name}";
+      cgit.desc = mkDefault "mirror for ${name}";
+      cgit.section = mkDefault "mirror";
+      hooks = mkIf announce (mkDefault {
+        post-receive = pkgs.git-hooks.irc-announce {
+          nick = config.networking.hostName;
+          verbose = false;
+          channel = "#retiolum";
+          server = "ni.r";
+          branches = [ "newest" ];
         };
-        tv = {
-          origin.url = http://cgit.ni.r/stockholm;
-          mirror.url = mirror;
-        };
-        lassulus = {
-          origin.url = http://cgit.prism/stockholm ;
-          mirror.url = mirror;
-        };
-      };
-      latest = {
-        url = mirror;
-        ref = "heads/master";
-      };
+      });
     };
+  in {
+    rules = with git; singleton {
+      user = with config.krebs.users; [
+        config.krebs.users."${config.networking.hostName}-repo-sync"
+      ];
+      repo = [ repo ];
+      perm = push ''refs/*'' [ non-fast-forward create delete merge ];
+    };
+    repos."${name}" = repo;
   };
+
+  sync-retiolum = name:
+    {
+      krebs.repo-sync.repos.${name} = {
+        branches = {
+          makefu = {
+            origin.url = "http://cgit.gum/${name}";
+            mirror.url = "${mirror}${name}";
+          };
+          tv = {
+            origin.url = "http://cgit.ni.r/${name}";
+            mirror.url = "${mirror}${name}";
+          };
+          nin = {
+            origin.url = "http://cgit.onondaga.r/${name}";
+            mirror.url = "${mirror}${name}";
+          };
+          lassulus = {
+            origin.url = "http://cgit.lassul.us/${name}";
+            mirror.url = "${mirror}${name}";
+          };
+        };
+        latest = {
+          url = "${mirror}${name}";
+          ref = "heads/newest";
+        };
+      };
+      krebs.git = defineRepo name true;
+    };
+
+in {
+  krebs.repo-sync = {
+    enable = true;
+  };
+  imports = [
+    (sync-retiolum "stockholm")
+  ];
 }