From 15a56cb20a283d6d11c4205f78ce0d6f81846a28 Mon Sep 17 00:00:00 2001
From: tv <tv@krebsco.de>
Date: Sat, 6 May 2017 10:23:11 +0200
Subject: [PATCH 1/4] tv: mv-cd -> mv-ni

---
 krebs/3modules/tv/default.nix  | 4 ++--
 tv/2configs/exim-smarthost.nix | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/krebs/3modules/tv/default.nix b/krebs/3modules/tv/default.nix
index e387fabc5..0db686005 100644
--- a/krebs/3modules/tv/default.nix
+++ b/krebs/3modules/tv/default.nix
@@ -413,8 +413,8 @@ with import <stockholm/lib>;
     dv = {
       mail = "dv@alnus.r";
     };
-    mv-cd = {
-      mail = "mv@cd.r";
+    mv-ni = {
+      mail = "mv@ni.r";
       pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGer9e2+Lew7vnisgBbsFNECEIkpNJgEaqQqgb9inWkQ mv@vod";
     };
     tv = {
diff --git a/tv/2configs/exim-smarthost.nix b/tv/2configs/exim-smarthost.nix
index 816dce78d..079013c79 100644
--- a/tv/2configs/exim-smarthost.nix
+++ b/tv/2configs/exim-smarthost.nix
@@ -21,7 +21,7 @@ with import <stockholm/lib>;
     internet-aliases = with config.krebs.users; [
       { from = "bku-eppler@viljetic.de"; to = tv.mail; }
       { from = "postmaster@viljetic.de"; to = tv.mail; } # RFC 822
-      { from = "mirko@viljetic.de"; to = mv-cd.mail; }
+      { from = "mirko@viljetic.de"; to = mv-ni.mail; }
       { from = "tomislav@viljetic.de"; to = tv.mail; }
       { from = "tv@destroy.dyn.shackspace.de"; to = tv.mail; }
       { from = "tv@viljetic.de"; to = tv.mail; }

From e053edeee21d7ab5656f387863302651cf65d662 Mon Sep 17 00:00:00 2001
From: tv <tv@krebsco.de>
Date: Tue, 9 May 2017 19:17:08 +0200
Subject: [PATCH 2/4] tv git: add hstool

---
 tv/2configs/git.nix | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/tv/2configs/git.nix b/tv/2configs/git.nix
index 293a00e78..13b12986c 100644
--- a/tv/2configs/git.nix
+++ b/tv/2configs/git.nix
@@ -33,6 +33,9 @@ let {
       cgit.desc = "dict.leo.org command line interface";
     };
     get = {};
+    hstool = {
+      cgit.desc = "Haskell Development Environment ^_^";
+    };
     htgen = {
       cgit.desc = "toy HTTP server";
     };

From 1b77fcae885722fb5d557e03f5e97d1d64df1d2b Mon Sep 17 00:00:00 2001
From: tv <tv@krebsco.de>
Date: Tue, 9 May 2017 23:15:32 +0200
Subject: [PATCH 3/4] krebs.dns.providers: drop internet and retiolum

---
 krebs/3modules/default.nix | 2 --
 1 file changed, 2 deletions(-)

diff --git a/krebs/3modules/default.nix b/krebs/3modules/default.nix
index d539d4166..ea2979df4 100644
--- a/krebs/3modules/default.nix
+++ b/krebs/3modules/default.nix
@@ -105,9 +105,7 @@ let
         gg23 = "hosts";
         shack = "hosts";
         i = "hosts";
-        internet = "hosts";
         r = "hosts";
-        retiolum = "hosts";
       };
 
       krebs.users = {

From 66f9170f524a1a59ba7b69b2fc778c99ccbd41ff Mon Sep 17 00:00:00 2001
From: tv <tv@krebsco.de>
Date: Tue, 9 May 2017 23:42:18 +0200
Subject: [PATCH 4/4] retiolum-hosts: init

---
 krebs/3modules/default.nix | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/krebs/3modules/default.nix b/krebs/3modules/default.nix
index ea2979df4..daa963bc8 100644
--- a/krebs/3modules/default.nix
+++ b/krebs/3modules/default.nix
@@ -139,6 +139,29 @@ let
         ) cfg.hosts
       ));
 
+      # TODO dedup with networking.extraHosts
+      nixpkgs.config.packageOverrides = oldpkgs:
+        let
+          domains = attrNames (filterAttrs (_: eq "hosts") cfg.dns.providers);
+          check = hostname: any (domain: hasSuffix ".${domain}" hostname) domains;
+        in
+          {
+            retiolum-hosts = oldpkgs.writeText "retiolum-hosts" ''
+              ${concatStringsSep "\n" (flatten (
+                map (host:
+                    let
+                      net = host.nets.retiolum;
+                      aliases = longs;
+                      longs = filter check net.aliases;
+                    in
+                      optionals
+                        (aliases != [])
+                        (map (addr: "${addr} ${toString aliases}") net.addrs)
+                ) (filter (host: hasAttr "retiolum" host.nets)
+                          (attrValues cfg.hosts))))}
+            '';
+          };
+
       # Implements environment.etc."zones/<zone-name>"
       environment.etc = let
         stripEmptyLines = s: (concatStringsSep "\n"