From 542696394058cf870dd9143fe0f3a70a964a4c55 Mon Sep 17 00:00:00 2001
From: lassulus <lass@aidsballs.de>
Date: Wed, 20 May 2015 23:31:52 +0200
Subject: [PATCH 1/6] cloudkrebs: add networking.nix

---
 modules/cloudkrebs/networking.nix | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 modules/cloudkrebs/networking.nix

diff --git a/modules/cloudkrebs/networking.nix b/modules/cloudkrebs/networking.nix
new file mode 100644
index 000000000..fc5007365
--- /dev/null
+++ b/modules/cloudkrebs/networking.nix
@@ -0,0 +1,14 @@
+{...}:
+{
+  networking.hostName = "cloudkrebs";
+  networking.interfaces.enp2s1.ip4 = [
+    {
+      address = "104.167.113.104";
+      prefixLength = 24;
+    }
+  ];
+  networking.defaultGateway = "104.167.113.1";
+  networking.nameservers = [
+    "8.8.8.8"
+  ];
+}

From ad2093acbd29f0cbe91991d567d7570ecfea29b3 Mon Sep 17 00:00:00 2001
From: lassulus <lass@aidsballs.de>
Date: Thu, 21 May 2015 19:36:17 +0200
Subject: [PATCH 2/6] experiment with gitolite

---
 modules/lass/base.nix     | 118 ---------------------
 modules/uriel/default.nix | 212 +++++++++++++++++++++++++++++++++++++-
 2 files changed, 211 insertions(+), 119 deletions(-)

diff --git a/modules/lass/base.nix b/modules/lass/base.nix
index d16c4d341..29010dd91 100644
--- a/modules/lass/base.nix
+++ b/modules/lass/base.nix
@@ -68,124 +68,6 @@
     enable = true;
     dataDir = "/home/gitolite";
     adminPubkey = config.sshKeys.lass.pub;
-    #commonHooks = [
-    #  (pkgs.writeText "irc-announce" ''
-    #    #! /bin/sh
-    #    set -euf
-
-    #    config_file="$GL_ADMIN_BASE/conf/irc-announce.conf"
-    #    if test -f "$config_file"; then
-    #      . "$config_file"
-    #    fi
-
-    #    # XXX when changing IRC_CHANNEL or IRC_SERVER/_PORT, don't forget to update
-    #    #     any relevant gitolite LOCAL_CODE!
-    #    # CAVEAT we hope that IRC_NICK is unique
-    #    IRC_NICK="''${IRC_NICK-gl$GL_TID}"
-    #    IRC_CHANNEL="''${IRC_CHANNEL-#retiolum}"
-    #    IRC_SERVER="''${IRC_SERVER-ire.retiolum}"
-    #    IRC_PORT="''${IRC_PORT-6667}"
-
-    #    # for privmsg_cat below
-    #    export IRC_CHANNEL
-
-    #    # collect users that are mentioned in the gitolite configuration
-    #    interested_users="$(perl -e '
-    #      do "gl-conf";
-    #      print join(" ", keys%{ $one_repo{$ENV{"GL_REPO"}} });
-    #    ')"
-
-    #    # CAVEAT beware of real TABs in grep pattern!
-    #    # CAVEAT there will never be more than 42 relevant log entries!
-    #    log="$(tail -n 42 "$GL_LOGFILE" | grep "^[^ ]*  $GL_TID ")"
-    #    update_log="$(echo "$log" | grep "^[^ ]*  $GL_TID update")"
-
-    #    # (debug output)
-    #    env | sed 's/^/env: /'
-    #    echo "$log" | sed 's/^/log: /'
-
-    #    # see http://gitolite.com/gitolite/dev-notes.html#lff
-    #    reponame=$(echo "$update_log" | cut -f 4)
-    #    username=$(echo "$update_log" | cut -f 5)
-    #    ref_name=$(echo "$update_log" | cut -f 7 | sed 's|^refs/heads/||')
-    #    old_sha=$(echo "$update_log" | cut -f 8)
-    #    new_sha=$(echo "$update_log" | cut -f 9)
-
-    #    # check if new branch is created
-    #    if test $old_sha = 0000000000000000000000000000000000000000; then
-    #      # TODO what should we really show?
-    #      old_sha=$new_sha^
-    #    fi
-
-    #    #
-    #    git_log="$(git log $old_sha..$new_sha --pretty=oneline --abbrev-commit)"
-    #    commit_count=$(echo "$git_log" | wc -l)
-
-    #    # echo2 and cat2 are used output to both, stdout and stderr
-    #    # This is used to see what we send to the irc server. (debug output)
-    #    echo2() { echo "$*"; echo "$*" >&2; }
-    #    cat2() { tee /dev/stderr; }
-
-    #    # privmsg_cat transforms stdin to a privmsg
-    #    privmsg_cat() { awk '{ print "PRIVMSG "ENVIRON["IRC_CHANNEL"]" :"$0 }'; }
-
-    #    # ircin is used to feed the output of netcat back to the "irc client"
-    #    # so we can implement expect-like behavior with sed^_^
-    #    # XXX mkselfdestructingtmpfifo would be nice instead of this cruft
-    #    tmpdir="$(mktemp -d irc-announce_XXXXXXXX)"
-    #    cd "$tmpdir"
-    #    mkfifo ircin
-    #    trap "
-    #      rm ircin
-    #      cd '$OLDPWD'
-    #      rmdir '$tmpdir'
-    #      trap - EXIT INT QUIT
-    #    " EXIT INT QUIT
-
-    #    #
-    #    #
-    #    #
-    #    {
-    #      echo2 "USER $LOGNAME 0 * :$LOGNAME@$(hostname)"
-    #      echo2 "NICK $IRC_NICK"
-
-    #      # wait for MODE message
-    #      sed -n '/^:[^ ]* MODE /q'
-
-    #      echo2 "JOIN $IRC_CHANNEL"
-
-    #      echo "$interested_users" \
-    #        | tr ' ' '\n' \
-    #        | grep -v "^$GL_USER" \
-    #        | sed 's/$/: poke/' \
-    #        | privmsg_cat \
-    #        | cat2
-
-    #      printf '[13%s] %s pushed %s new commit%s to 6%s %s\n' \
-    #          "$reponame" \
-    #          "$username" \
-    #          "$commit_count" \
-    #          "$(test $commit_count = 1 || echo s)" \
-    #          "$(hostname)" \
-    #          "$ref_name" \
-    #        | privmsg_cat \
-    #        | cat2
-
-    #      echo "$git_log" \
-    #        | sed 's/^/14/;s/ / /' \
-    #        | privmsg_cat \
-    #        | cat2
-
-    #      echo2 "PART $IRC_CHANNEL"
-
-    #      # wait for PART confirmation
-    #      sed -n '/:'"$IRC_NICK"'![^ ]* PART /q'
-
-    #      echo2 'QUIT :Gone to have lunch'
-    #    } < ircin \
-    #      | nc "$IRC_SERVER" "$IRC_PORT" | tee -a ircin
-    #  '')
-    #];
   };
 
   services.openssh = {
diff --git a/modules/uriel/default.nix b/modules/uriel/default.nix
index bfdc02256..9cab8915f 100644
--- a/modules/uriel/default.nix
+++ b/modules/uriel/default.nix
@@ -19,7 +19,216 @@
   ];
   nixpkgs = {
     url = "https://github.com/Lassulus/nixpkgs";
-    rev = "b42ecfb8c61e514bf7733b4ab0982d3e7e27dacb";
+    rev = "b3531eebf625e388d2fa33d56646180236263e74";
+  };
+
+  services.gitolite = {
+    keys = {
+      uriel = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM1v/N0G7k48thX1vIALTdqrdYUvYM+SvHRq/rCcKLC2 lass@mors";
+      lass = config.sshKeys.lass.pub;
+    };
+    config = ''
+      repo emse-hsdb
+          RW+     =   lass
+          R       =   tv
+          option hook.post-receive = irc-announce
+
+      repo pong
+          RW+     =   lass
+          R       =   tv
+          option hook.post-receive = irc-announce
+
+      repo load-env
+          RW+     =   lass
+          RW+     =   uriel
+          R       =   tv
+          option hook.post-receive = irc-announce
+
+      repo pass
+          RW+     =   lass
+          RW+     =   uriel
+
+      repo testing
+          RW+     =   @all
+
+      repo painload
+          RW+     =   lass
+          R       =   tv
+          R       =   makefu
+
+      repo brain
+          RW+     =   lass
+          R       =   tv
+          R       =   makefu
+          option hook.post-receive = irc-announce
+
+      repo services
+          RW+     =   lass
+          R       =   tv
+          R       =   makefu
+          option hook.post-receive = irc-announce
+
+      repo emse-drywall
+          RW+     =   lass
+          R       =   tv
+          R       =   uriel
+          option hook.post-receive = irc-announce
+
+      repo emse-db
+          RW+     =   lass
+          R       =   tv
+          option hook.post-receive = irc-announce
+
+      repo config
+          RW+     =   lass
+          RW+     =   uriel
+          R       =   fastpoke
+    '';
+
+    rc = ''
+      %RC = (
+          UMASK                           =>  0077,
+          GIT_CONFIG_KEYS                 =>  "",
+          LOG_EXTRA                       =>  1,
+          ROLES => {
+              READERS                     =>  1,
+              WRITERS                     =>  1,
+          },
+          LOCAL_CODE                =>  "$ENV{HOME}/.gitolite",
+          ENABLE => [
+                  'help',
+                  'desc',
+                  'info',
+                  'perms',
+                  'writable',
+                  'ssh-authkeys',
+                  'git-config',
+                  'daemon',
+                  'gitweb',
+                  'repo-specific-hooks',
+          ],
+      );
+      1;
+    '';
+
+    hooks.repoSpecific = {
+      irc-announce = ''
+        #! /bin/sh
+        set -euf
+
+        config_file="$GL_ADMIN_BASE/conf/irc-announce.conf"
+        if test -f "$config_file"; then
+          . "$config_file"
+        fi
+
+        # XXX when changing IRC_CHANNEL or IRC_SERVER/_PORT, don't forget to update
+        #     any relevant gitolite LOCAL_CODE!
+        # CAVEAT we hope that IRC_NICK is unique
+        IRC_NICK="''${IRC_NICK-gl$GL_TID}"
+        IRC_CHANNEL="''${IRC_CHANNEL-#retiolum}"
+        IRC_SERVER="''${IRC_SERVER-ire.retiolum}"
+        IRC_PORT="''${IRC_PORT-6667}"
+
+        # for privmsg_cat below
+        export IRC_CHANNEL
+
+        # collect users that are mentioned in the gitolite configuration
+        interested_users="$(perl -e '
+          do "gl-conf";
+          print join(" ", keys%{ $one_repo{$ENV{"GL_REPO"}} });
+        ')"
+
+        # CAVEAT beware of real TABs in grep pattern!
+        # CAVEAT there will never be more than 42 relevant log entries!
+        log="$(tail -n 42 "$GL_LOGFILE" | grep "^[^ ]*  $GL_TID ")"
+        update_log="$(echo "$log" | grep "^[^ ]*  $GL_TID update")"
+
+        # (debug output)
+        env | sed 's/^/env: /'
+        echo "$log" | sed 's/^/log: /'
+
+        # see http://gitolite.com/gitolite/dev-notes.html#lff
+        reponame=$(echo "$update_log" | cut -f 4)
+        username=$(echo "$update_log" | cut -f 5)
+        ref_name=$(echo "$update_log" | cut -f 7 | sed 's|^refs/heads/||')
+        old_sha=$(echo "$update_log" | cut -f 8)
+        new_sha=$(echo "$update_log" | cut -f 9)
+
+        # check if new branch is created
+        if test $old_sha = 0000000000000000000000000000000000000000; then
+          # TODO what should we really show?
+          old_sha=$new_sha^
+        fi
+
+        #
+        git_log="$(git log $old_sha..$new_sha --pretty=oneline --abbrev-commit)"
+        commit_count=$(echo "$git_log" | wc -l)
+
+        # echo2 and cat2 are used output to both, stdout and stderr
+        # This is used to see what we send to the irc server. (debug output)
+        echo2() { echo "$*"; echo "$*" >&2; }
+        cat2() { tee /dev/stderr; }
+
+        # privmsg_cat transforms stdin to a privmsg
+        privmsg_cat() { awk '{ print "PRIVMSG "ENVIRON["IRC_CHANNEL"]" :"$0 }'; }
+
+        # ircin is used to feed the output of netcat back to the "irc client"
+        # so we can implement expect-like behavior with sed^_^
+        # XXX mkselfdestructingtmpfifo would be nice instead of this cruft
+        tmpdir="$(mktemp -d irc-announce_XXXXXXXX)"
+        cd "$tmpdir"
+        mkfifo ircin
+        trap "
+          rm ircin
+          cd '$OLDPWD'
+          rmdir '$tmpdir'
+          trap - EXIT INT QUIT
+        " EXIT INT QUIT
+
+        #
+        #
+        #
+        {
+          echo2 "USER $LOGNAME 0 * :$LOGNAME@$(hostname)"
+          echo2 "NICK $IRC_NICK"
+
+          # wait for MODE message
+          sed -n '/^:[^ ]* MODE /q'
+
+          echo2 "JOIN $IRC_CHANNEL"
+
+          echo "$interested_users" \
+            | tr ' ' '\n' \
+            | grep -v "^$GL_USER" \
+            | sed 's/$/: poke/' \
+            | privmsg_cat \
+            | cat2
+
+          printf '[13%s] %s pushed %s new commit%s to 6%s %s\n' \
+              "$reponame" \
+              "$username" \
+              "$commit_count" \
+              "$(test $commit_count = 1 || echo s)" \
+              "$(hostname)" \
+              "$ref_name" \
+            | privmsg_cat \
+            | cat2
+
+          echo "$git_log" \
+            | sed 's/^/14/;s/ / /' \
+            | privmsg_cat \
+            | cat2
+
+          echo2 "PART $IRC_CHANNEL"
+
+          # wait for PART confirmation
+          sed -n '/:'"$IRC_NICK"'![^ ]* PART /q'
+
+          echo2 'QUIT :Gone to have lunch'
+        } < ircin \
+          | nc "$IRC_SERVER" "$IRC_PORT" | tee -a ircin
+      '';
+    };
   };
 
 
@@ -104,6 +313,7 @@
   environment.systemPackages = with pkgs; [
   ];
 
+
   #users.extraGroups = {
   #  loot = {
   #    members = [

From 1d40f7ffc624ae407edf46f74ba71201da0b350a Mon Sep 17 00:00:00 2001
From: lassulus <lass@aidsballs.de>
Date: Thu, 21 May 2015 20:36:19 +0200
Subject: [PATCH 3/6] update test gitolite config

---
 modules/uriel/default.nix | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/modules/uriel/default.nix b/modules/uriel/default.nix
index 9cab8915f..367a2847c 100644
--- a/modules/uriel/default.nix
+++ b/modules/uriel/default.nix
@@ -19,7 +19,7 @@
   ];
   nixpkgs = {
     url = "https://github.com/Lassulus/nixpkgs";
-    rev = "b3531eebf625e388d2fa33d56646180236263e74";
+    rev = "946329e1342acc08d9bed9e7af860f2a5b1f1765";
   };
 
   services.gitolite = {
@@ -82,7 +82,7 @@
       repo config
           RW+     =   lass
           RW+     =   uriel
-          R       =   fastpoke
+          option hook.post-receive = irc-announce
     '';
 
     rc = ''
@@ -229,6 +229,26 @@
           | nc "$IRC_SERVER" "$IRC_PORT" | tee -a ircin
       '';
     };
+
+    customFiles = [
+      {
+        filename = ".gitolite/conf/irc-announce.conf";
+        content = ''
+          IRC_NICK="$(hostname)$GL_TID"
+          case "$GL_REPO" in
+            brain|painload|services|load-env|pong|config)
+              IRC_CHANNEL='#retiolum'
+            ;;
+            emse*)
+              IRC_CHANNEL='#emse'
+            ;;
+            *)
+              IRC_CHANNEL='&testing'
+            ;;
+          esac
+        '';
+      }
+    ];
   };
 
 

From 1782c7942566821a1b8b33b2290c38019306872b Mon Sep 17 00:00:00 2001
From: lassulus <lass@aidsballs.de>
Date: Thu, 21 May 2015 22:00:43 +0200
Subject: [PATCH 4/6] uriel: update gitolite test stuff

---
 modules/uriel/default.nix | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/modules/uriel/default.nix b/modules/uriel/default.nix
index 367a2847c..a07972c90 100644
--- a/modules/uriel/default.nix
+++ b/modules/uriel/default.nix
@@ -55,9 +55,11 @@
           RW+     =   lass
           R       =   tv
           R       =   makefu
+          option hook.post-receive = irc-announce
 
       repo brain
-          RW+     =   lass
+          RW+     =   uriel
+          R       =   lass
           R       =   tv
           R       =   makefu
           option hook.post-receive = irc-announce
@@ -83,6 +85,10 @@
           RW+     =   lass
           RW+     =   uriel
           option hook.post-receive = irc-announce
+
+      repo teeest
+          RW+     =   lass
+          option hook.post-receive = irc-announce
     '';
 
     rc = ''
@@ -140,8 +146,10 @@
 
         # CAVEAT beware of real TABs in grep pattern!
         # CAVEAT there will never be more than 42 relevant log entries!
-        log="$(tail -n 42 "$GL_LOGFILE" | grep "^[^ ]*  $GL_TID ")"
-        update_log="$(echo "$log" | grep "^[^ ]*  $GL_TID update")"
+        tab=$(printf '\x09')
+        log="$(tail -n 42 "$GL_LOGFILE" | grep "^[^$tab]*$tab$GL_TID$tab" || :)"
+
+        update_log="$(echo "$log" | grep "^[^$tab]*$tab$GL_TID''${tab}update")"
 
         # (debug output)
         env | sed 's/^/env: /'

From 8c953def2368d735cb1cd9b9ff7b56df6f1b3f95 Mon Sep 17 00:00:00 2001
From: lassulus <lass@aidsballs.de>
Date: Thu, 21 May 2015 23:54:12 +0200
Subject: [PATCH 5/6] uriel: update hash

---
 modules/uriel/default.nix | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/uriel/default.nix b/modules/uriel/default.nix
index a07972c90..25e3f59b1 100644
--- a/modules/uriel/default.nix
+++ b/modules/uriel/default.nix
@@ -19,7 +19,7 @@
   ];
   nixpkgs = {
     url = "https://github.com/Lassulus/nixpkgs";
-    rev = "946329e1342acc08d9bed9e7af860f2a5b1f1765";
+    rev = "ffe3f799a2eb565e1755a6a18260ece5cbbd746b";
   };
 
   services.gitolite = {

From 862c3317beb8a3199bd989d87ad390d3de2f0011 Mon Sep 17 00:00:00 2001
From: lassulus <lass@aidsballs.de>
Date: Thu, 21 May 2015 23:54:57 +0200
Subject: [PATCH 6/6] gitolite irc-announce: fix colors

---
 modules/uriel/default.nix | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/modules/uriel/default.nix b/modules/uriel/default.nix
index 25e3f59b1..5ff37117d 100644
--- a/modules/uriel/default.nix
+++ b/modules/uriel/default.nix
@@ -212,7 +212,7 @@
             | privmsg_cat \
             | cat2
 
-          printf '[13%s] %s pushed %s new commit%s to 6%s %s\n' \
+          printf '[\x0313%s\x03] %s pushed %s new commit%s to \x036%s %s\x03\n' \
               "$reponame" \
               "$username" \
               "$commit_count" \
@@ -223,7 +223,7 @@
             | cat2
 
           echo "$git_log" \
-            | sed 's/^/14/;s/ / /' \
+            | sed 's/^/\x0314/;s/ /\x03 /' \
             | privmsg_cat \
             | cat2