From d213df5c00d3073d2f3bc09471fce466153df881 Mon Sep 17 00:00:00 2001
From: tv <tv@shackspace.de>
Date: Sat, 11 Jul 2015 16:55:22 +0200
Subject: [PATCH] NWO

---
 .gitignore                         |   1 +
 0make/tv/cd.makefile               |   4 +
 0make/tv/mkdir.makefile            |   4 +
 0make/tv/nomic.makefile            |   4 +
 0make/tv/rmdir.makefile            |   4 +
 0make/tv/wu.makefile               |   4 +
 1systems/tv/cd.nix                 |  98 ++++++
 1systems/tv/mkdir.nix              |  76 +++++
 1systems/tv/nomic.nix              | 111 +++++++
 1systems/tv/rmdir.nix              |  77 +++++
 1systems/tv/wu.nix                 | 388 +++++++++++++++++++++++
 2configs/tv/AO753.nix              |  39 +++
 2configs/tv/CAC-CentOS-7-64bit.nix |  47 +++
 2configs/tv/CAC-Developer-1.nix    |   6 +
 2configs/tv/CAC-Developer-2.nix    |   6 +
 2configs/tv/base.nix               | 175 +++++++++++
 2configs/tv/consul-client.nix      |   9 +
 2configs/tv/consul-server.nix      |  22 ++
 2configs/tv/cryptoroot.nix         |   4 +
 2configs/tv/exim-retiolum.nix      | 126 ++++++++
 2configs/tv/exim-smarthost.nix     | 474 +++++++++++++++++++++++++++++
 2configs/tv/git-public.nix         |  83 +++++
 2configs/tv/smartd.nix             |  17 ++
 2configs/tv/synaptics.nix          |  14 +
 2configs/tv/urxvt.nix              |  24 ++
 2configs/tv/w110er.nix             |  42 +++
 2configs/tv/xserver.nix            |  41 +++
 3modules/tv/consul.nix             | 122 ++++++++
 3modules/tv/ejabberd.nix           | 171 +++++++++++
 3modules/tv/git.nix                | 406 ++++++++++++++++++++++++
 3modules/tv/identity.nix           |  71 +++++
 3modules/tv/iptables.nix           | 129 ++++++++
 3modules/tv/nginx.nix              |  83 +++++
 3modules/tv/retiolum.nix           | 241 +++++++++++++++
 3modules/tv/urlwatch.nix           | 156 ++++++++++
 4lib/tv/default.nix                |  62 ++++
 4lib/tv/git.nix                    | 181 +++++++++++
 4lib/tv/modules.nix                |  21 ++
 Makefile                           |  70 +++++
 Zhosts/Styx                        |  10 +
 Zhosts/ThinkArmageddon             |   9 +
 Zhosts/TriBot                      |  11 +
 Zhosts/ach                         |  11 +
 Zhosts/air                         |  11 +
 Zhosts/alarmpi                     |  11 +
 Zhosts/albi10                      |  11 +
 Zhosts/albi7                       |  10 +
 Zhosts/almoehi                     |  11 +
 Zhosts/alphalabs                   |  10 +
 Zhosts/apfull                      |  11 +
 Zhosts/bitchctl                    |  11 +
 Zhosts/bitchextend                 |  11 +
 Zhosts/bitchtop                    |  11 +
 Zhosts/box                         |  10 +
 Zhosts/bridge                      |  12 +
 Zhosts/c2ft                        |  10 +
 Zhosts/c2fthome                    |  10 +
 Zhosts/casino                      |  11 +
 Zhosts/cat1                        |  11 +
 Zhosts/cband                       |  11 +
 Zhosts/cd                          |  17 ++
 Zhosts/cloudkrebs                  |  12 +
 Zhosts/darth                       |  12 +
 Zhosts/dei                         |  11 +
 Zhosts/destroy                     |  11 +
 Zhosts/devstar                     |  11 +
 Zhosts/eigenserv                   |  11 +
 Zhosts/elvis                       |  12 +
 Zhosts/exile                       |   9 +
 Zhosts/exitium_mobilis             |  10 +
 Zhosts/falk                        |  11 +
 Zhosts/fastpoke                    |  12 +
 Zhosts/filebitch                   |  11 +
 Zhosts/filepimp                    |  11 +
 Zhosts/flap                        |  11 +
 Zhosts/foobar                      |  11 +
 Zhosts/fuerkrebs                   |  10 +
 Zhosts/go                          |  13 +
 Zhosts/gum                         |  13 +
 Zhosts/heidi                       |  11 +
 Zhosts/horisa                      |  12 +
 Zhosts/horreum_magnus              |  15 +
 Zhosts/incept                      |  13 +
 Zhosts/ire                         |  12 +
 Zhosts/ire2                        |   9 +
 Zhosts/irkel                       |  12 +
 Zhosts/juhulian                    |  11 +
 Zhosts/k2                          |  28 ++
 Zhosts/kabinett                    |  11 +
 Zhosts/kaepsele                    |  11 +
 Zhosts/kalle                       |  11 +
 Zhosts/karthus                     |  10 +
 Zhosts/khackplug                   |  11 +
 Zhosts/kheurop                     |  12 +
 Zhosts/kiosk                       |  12 +
 Zhosts/krebsplug                   |  10 +
 Zhosts/kvasir                      |  11 +
 Zhosts/laqueus                     |  11 +
 Zhosts/linuxatom                   |  11 +
 Zhosts/luminos                     |  11 +
 Zhosts/machine                     |  11 +
 Zhosts/makalu                      |  11 +
 Zhosts/mako                        |  11 +
 Zhosts/miefda0                     |  10 +
 Zhosts/minikrebs                   |  10 +
 Zhosts/mkdir                       |  11 +
 Zhosts/monitor                     |  11 +
 Zhosts/mors                        |  10 +
 Zhosts/motor                       |  12 +
 Zhosts/mu                          |  10 +
 Zhosts/muhbaasu                    |  13 +
 Zhosts/nomic                       |  10 +
 Zhosts/nomic2                      |  10 +
 Zhosts/nukular                     |  11 +
 Zhosts/omo                         |   9 +
 Zhosts/pic                         |  11 +
 Zhosts/pigstarter                  |  13 +
 Zhosts/pike                        |  11 +
 Zhosts/pornocauster                |  10 +
 Zhosts/radiotuxmini                |  11 +
 Zhosts/random                      |  10 +
 Zhosts/raspafari                   |  11 +
 Zhosts/reimae                      |  12 +
 Zhosts/rmdir                       |  11 +
 Zhosts/robchina                    |  11 +
 Zhosts/rockit                      |  11 +
 Zhosts/rtjure_debian_oder_so       |  11 +
 Zhosts/rtjure_ras                  |  11 +
 Zhosts/rtjure_rdrlab_linkstation   |  11 +
 Zhosts/rubus                       |   9 +
 Zhosts/senderechner                |  10 +
 Zhosts/serenity                    |  11 +
 Zhosts/seruundroid                 |  12 +
 Zhosts/sir_krebs_a_lot             |  11 +
 Zhosts/skirfir                     |  11 +
 Zhosts/sleipnir                    |  12 +
 Zhosts/smove                       |   9 +
 Zhosts/sokrates                    |  11 +
 Zhosts/sokrateslaptop              |  11 +
 Zhosts/soundflower                 |  10 +
 Zhosts/steve                       |  10 +
 Zhosts/tahoe                       |  12 +
 Zhosts/taschenkrebs                |  11 +
 Zhosts/terrapi                     |  11 +
 Zhosts/thomasDOTde                 |   9 +
 Zhosts/tincdroid                   |   9 +
 Zhosts/tpsw                        |  11 +
 Zhosts/ufo                         |  11 +
 Zhosts/uriel                       |  11 +
 Zhosts/vault                       |  10 +
 Zhosts/voyager                     |  17 ++
 Zhosts/wooktop                     |  11 +
 Zhosts/wu                          |  10 +
 Zhosts/ytart                       |   9 +
 Zhosts/zombiecancer                |  11 +
 Zpubkeys/deploy_wu.ssh.pub         |   1 +
 Zpubkeys/lass.ssh.pub              |   1 +
 Zpubkeys/makefu.ssh.pub            |   1 +
 Zpubkeys/mv_vod.ssh.pub            |   1 +
 Zpubkeys/tv_wu.ssh.pub             |   1 +
 Zpubkeys/uriel.ssh.pub             |   1 +
 161 files changed, 4912 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 0make/tv/cd.makefile
 create mode 100644 0make/tv/mkdir.makefile
 create mode 100644 0make/tv/nomic.makefile
 create mode 100644 0make/tv/rmdir.makefile
 create mode 100644 0make/tv/wu.makefile
 create mode 100644 1systems/tv/cd.nix
 create mode 100644 1systems/tv/mkdir.nix
 create mode 100644 1systems/tv/nomic.nix
 create mode 100644 1systems/tv/rmdir.nix
 create mode 100644 1systems/tv/wu.nix
 create mode 100644 2configs/tv/AO753.nix
 create mode 100644 2configs/tv/CAC-CentOS-7-64bit.nix
 create mode 100644 2configs/tv/CAC-Developer-1.nix
 create mode 100644 2configs/tv/CAC-Developer-2.nix
 create mode 100644 2configs/tv/base.nix
 create mode 100644 2configs/tv/consul-client.nix
 create mode 100644 2configs/tv/consul-server.nix
 create mode 100644 2configs/tv/cryptoroot.nix
 create mode 100644 2configs/tv/exim-retiolum.nix
 create mode 100644 2configs/tv/exim-smarthost.nix
 create mode 100644 2configs/tv/git-public.nix
 create mode 100644 2configs/tv/smartd.nix
 create mode 100644 2configs/tv/synaptics.nix
 create mode 100644 2configs/tv/urxvt.nix
 create mode 100644 2configs/tv/w110er.nix
 create mode 100644 2configs/tv/xserver.nix
 create mode 100644 3modules/tv/consul.nix
 create mode 100644 3modules/tv/ejabberd.nix
 create mode 100644 3modules/tv/git.nix
 create mode 100644 3modules/tv/identity.nix
 create mode 100644 3modules/tv/iptables.nix
 create mode 100644 3modules/tv/nginx.nix
 create mode 100644 3modules/tv/retiolum.nix
 create mode 100644 3modules/tv/urlwatch.nix
 create mode 100644 4lib/tv/default.nix
 create mode 100644 4lib/tv/git.nix
 create mode 100644 4lib/tv/modules.nix
 create mode 100644 Makefile
 create mode 100644 Zhosts/Styx
 create mode 100644 Zhosts/ThinkArmageddon
 create mode 100644 Zhosts/TriBot
 create mode 100644 Zhosts/ach
 create mode 100644 Zhosts/air
 create mode 100644 Zhosts/alarmpi
 create mode 100644 Zhosts/albi10
 create mode 100644 Zhosts/albi7
 create mode 100644 Zhosts/almoehi
 create mode 100644 Zhosts/alphalabs
 create mode 100644 Zhosts/apfull
 create mode 100644 Zhosts/bitchctl
 create mode 100644 Zhosts/bitchextend
 create mode 100644 Zhosts/bitchtop
 create mode 100644 Zhosts/box
 create mode 100644 Zhosts/bridge
 create mode 100644 Zhosts/c2ft
 create mode 100644 Zhosts/c2fthome
 create mode 100644 Zhosts/casino
 create mode 100644 Zhosts/cat1
 create mode 100644 Zhosts/cband
 create mode 100644 Zhosts/cd
 create mode 100644 Zhosts/cloudkrebs
 create mode 100644 Zhosts/darth
 create mode 100644 Zhosts/dei
 create mode 100644 Zhosts/destroy
 create mode 100644 Zhosts/devstar
 create mode 100644 Zhosts/eigenserv
 create mode 100644 Zhosts/elvis
 create mode 100644 Zhosts/exile
 create mode 100644 Zhosts/exitium_mobilis
 create mode 100644 Zhosts/falk
 create mode 100644 Zhosts/fastpoke
 create mode 100644 Zhosts/filebitch
 create mode 100644 Zhosts/filepimp
 create mode 100644 Zhosts/flap
 create mode 100644 Zhosts/foobar
 create mode 100644 Zhosts/fuerkrebs
 create mode 100644 Zhosts/go
 create mode 100644 Zhosts/gum
 create mode 100644 Zhosts/heidi
 create mode 100644 Zhosts/horisa
 create mode 100644 Zhosts/horreum_magnus
 create mode 100644 Zhosts/incept
 create mode 100644 Zhosts/ire
 create mode 100644 Zhosts/ire2
 create mode 100644 Zhosts/irkel
 create mode 100644 Zhosts/juhulian
 create mode 100644 Zhosts/k2
 create mode 100644 Zhosts/kabinett
 create mode 100644 Zhosts/kaepsele
 create mode 100644 Zhosts/kalle
 create mode 100644 Zhosts/karthus
 create mode 100644 Zhosts/khackplug
 create mode 100644 Zhosts/kheurop
 create mode 100644 Zhosts/kiosk
 create mode 100644 Zhosts/krebsplug
 create mode 100644 Zhosts/kvasir
 create mode 100644 Zhosts/laqueus
 create mode 100644 Zhosts/linuxatom
 create mode 100644 Zhosts/luminos
 create mode 100644 Zhosts/machine
 create mode 100644 Zhosts/makalu
 create mode 100644 Zhosts/mako
 create mode 100644 Zhosts/miefda0
 create mode 100644 Zhosts/minikrebs
 create mode 100644 Zhosts/mkdir
 create mode 100644 Zhosts/monitor
 create mode 100644 Zhosts/mors
 create mode 100644 Zhosts/motor
 create mode 100644 Zhosts/mu
 create mode 100644 Zhosts/muhbaasu
 create mode 100644 Zhosts/nomic
 create mode 100644 Zhosts/nomic2
 create mode 100644 Zhosts/nukular
 create mode 100644 Zhosts/omo
 create mode 100644 Zhosts/pic
 create mode 100644 Zhosts/pigstarter
 create mode 100644 Zhosts/pike
 create mode 100644 Zhosts/pornocauster
 create mode 100644 Zhosts/radiotuxmini
 create mode 100644 Zhosts/random
 create mode 100644 Zhosts/raspafari
 create mode 100644 Zhosts/reimae
 create mode 100644 Zhosts/rmdir
 create mode 100644 Zhosts/robchina
 create mode 100644 Zhosts/rockit
 create mode 100644 Zhosts/rtjure_debian_oder_so
 create mode 100644 Zhosts/rtjure_ras
 create mode 100644 Zhosts/rtjure_rdrlab_linkstation
 create mode 100644 Zhosts/rubus
 create mode 100644 Zhosts/senderechner
 create mode 100644 Zhosts/serenity
 create mode 100644 Zhosts/seruundroid
 create mode 100644 Zhosts/sir_krebs_a_lot
 create mode 100644 Zhosts/skirfir
 create mode 100644 Zhosts/sleipnir
 create mode 100644 Zhosts/smove
 create mode 100644 Zhosts/sokrates
 create mode 100644 Zhosts/sokrateslaptop
 create mode 100644 Zhosts/soundflower
 create mode 100644 Zhosts/steve
 create mode 100644 Zhosts/tahoe
 create mode 100644 Zhosts/taschenkrebs
 create mode 100644 Zhosts/terrapi
 create mode 100644 Zhosts/thomasDOTde
 create mode 100644 Zhosts/tincdroid
 create mode 100644 Zhosts/tpsw
 create mode 100644 Zhosts/ufo
 create mode 100644 Zhosts/uriel
 create mode 100644 Zhosts/vault
 create mode 100644 Zhosts/voyager
 create mode 100644 Zhosts/wooktop
 create mode 100644 Zhosts/wu
 create mode 100644 Zhosts/ytart
 create mode 100644 Zhosts/zombiecancer
 create mode 100644 Zpubkeys/deploy_wu.ssh.pub
 create mode 100644 Zpubkeys/lass.ssh.pub
 create mode 100644 Zpubkeys/makefu.ssh.pub
 create mode 100644 Zpubkeys/mv_vod.ssh.pub
 create mode 100644 Zpubkeys/tv_wu.ssh.pub
 create mode 100644 Zpubkeys/uriel.ssh.pub

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..1ce082113
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/.graveyard
diff --git a/0make/tv/cd.makefile b/0make/tv/cd.makefile
new file mode 100644
index 000000000..e021423f4
--- /dev/null
+++ b/0make/tv/cd.makefile
@@ -0,0 +1,4 @@
+deploy_host := root@cd-global
+nixpkgs_url := https://github.com/NixOS/nixpkgs
+nixpkgs_rev := 4c01e6d91993b6de128795f4fbdd25f6227fb870
+secrets_dir := /home/tv/secrets/cd
diff --git a/0make/tv/mkdir.makefile b/0make/tv/mkdir.makefile
new file mode 100644
index 000000000..b10398a07
--- /dev/null
+++ b/0make/tv/mkdir.makefile
@@ -0,0 +1,4 @@
+deploy_host := root@mkdir
+nixpkgs_url := https://github.com/NixOS/nixpkgs
+nixpkgs_rev := 4c01e6d91993b6de128795f4fbdd25f6227fb870
+secrets_dir := /home/tv/secrets/mkdir
diff --git a/0make/tv/nomic.makefile b/0make/tv/nomic.makefile
new file mode 100644
index 000000000..c11f41153
--- /dev/null
+++ b/0make/tv/nomic.makefile
@@ -0,0 +1,4 @@
+deploy_host := root@nomic-local
+nixpkgs_url := https://github.com/NixOS/nixpkgs
+nixpkgs_rev := 4e5e44140bfc27211dffbb3cd727842ab02eb9d6
+secrets_dir := /home/tv/secrets/nomic
diff --git a/0make/tv/rmdir.makefile b/0make/tv/rmdir.makefile
new file mode 100644
index 000000000..6075bd3d4
--- /dev/null
+++ b/0make/tv/rmdir.makefile
@@ -0,0 +1,4 @@
+deploy_host := root@rmdir
+nixpkgs_url := https://github.com/NixOS/nixpkgs
+nixpkgs_rev := 4c01e6d91993b6de128795f4fbdd25f6227fb870
+secrets_dir := /home/tv/secrets/rmdir
diff --git a/0make/tv/wu.makefile b/0make/tv/wu.makefile
new file mode 100644
index 000000000..81f561ce2
--- /dev/null
+++ b/0make/tv/wu.makefile
@@ -0,0 +1,4 @@
+deploy_host := root@wu
+nixpkgs_url := https://github.com/NixOS/nixpkgs
+nixpkgs_rev := e1af50c4c4c0332136283e9231f0a32ac11f2b90
+secrets_dir := /home/tv/secrets/wu
diff --git a/1systems/tv/cd.nix b/1systems/tv/cd.nix
new file mode 100644
index 000000000..e2ce9bba8
--- /dev/null
+++ b/1systems/tv/cd.nix
@@ -0,0 +1,98 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+  imports = [
+    ../../2configs/tv/CAC-Developer-2.nix
+    ../../2configs/tv/CAC-CentOS-7-64bit.nix
+    ../../2configs/tv/base.nix
+    ../../2configs/tv/consul-server.nix
+    ../../2configs/tv/exim-smarthost.nix
+    ../../2configs/tv/git-public.nix
+    {
+      imports = [ ../../3modules/tv/ejabberd.nix ];
+      tv.ejabberd = {
+        enable = true;
+        hosts = [ "jabber.viljetic.de" ];
+      };
+    }
+    {
+      imports = [ ../../3modules/tv/identity.nix ];
+      tv.identity = {
+        enable = true;
+        self = config.tv.identity.hosts.cd;
+      };
+    }
+    {
+      imports = [ ../../3modules/tv/iptables.nix ];
+      tv.iptables = {
+        enable = true;
+        input-internet-accept-new-tcp = [
+          "ssh"
+          "tinc"
+          "smtp"
+          "xmpp-client"
+          "xmpp-server"
+        ];
+        input-retiolum-accept-new-tcp = [
+          "http"
+        ];
+      };
+    }
+    {
+      imports = [ ../../3modules/tv/retiolum.nix ];
+      tv.retiolum = {
+        enable = true;
+        hosts = ../../Zhosts;
+        connectTo = [
+          "fastpoke"
+          "pigstarter"
+          "ire"
+        ];
+      };
+    }
+  ];
+
+  networking.hostName = "cd";
+  networking.interfaces.enp2s1.ip4 = [
+    {
+      address = "162.219.7.216";
+      prefixLength = 24;
+    }
+  ];
+  networking.defaultGateway = "162.219.7.1";
+  networking.nameservers = [
+    "8.8.8.8"
+  ];
+
+  environment.systemPackages = with pkgs; [
+    git # required for ./deploy, clone_or_update
+    htop
+    iftop
+    iotop
+    iptables
+    mutt    # for mv
+    nethogs
+    rxvt_unicode.terminfo
+    tcpdump
+  ];
+
+  services.journald.extraConfig = ''
+    SystemMaxUse=1G
+    RuntimeMaxUse=128M
+  '';
+
+  users.extraUsers = {
+    mv = {
+      uid = 1338;
+      group = "users";
+      home = "/home/mv";
+      createHome = true;
+      useDefaultShell = true;
+      openssh.authorizedKeys.keys = map readFile [
+        ../../Zpubkeys/mv_vod.ssh.pub
+      ];
+    };
+  };
+}
diff --git a/1systems/tv/mkdir.nix b/1systems/tv/mkdir.nix
new file mode 100644
index 000000000..e4e89872e
--- /dev/null
+++ b/1systems/tv/mkdir.nix
@@ -0,0 +1,76 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+  imports = [
+    ../../2configs/tv/CAC-Developer-1.nix
+    ../../2configs/tv/CAC-CentOS-7-64bit.nix
+    ../../2configs/tv/base.nix
+    ../../2configs/tv/consul-server.nix
+    ../../2configs/tv/exim-smarthost.nix
+    ../../2configs/tv/git-public.nix
+    {
+      imports = [ ../../3modules/tv/identity.nix ];
+      tv.identity = {
+        enable = true;
+        self = config.tv.identity.hosts.mkdir;
+      };
+    }
+    {
+      imports = [ ../../3modules/tv/iptables.nix ];
+      tv.iptables = {
+        enable = true;
+        input-internet-accept-new-tcp = [
+          "ssh"
+          "tinc"
+          "smtp"
+        ];
+        input-retiolum-accept-new-tcp = [
+          "http"
+        ];
+      };
+    }
+    {
+      imports = [ ../../3modules/tv/retiolum.nix ];
+      tv.retiolum = {
+        enable = true;
+        hosts = ../../Zhosts;
+        connectTo = [
+          "cd"
+          "fastpoke"
+          "pigstarter"
+          "ire"
+        ];
+      };
+    }
+  ];
+
+  networking.hostName = "mkdir";
+  networking.interfaces.enp2s1.ip4 = [
+    {
+      address = "162.248.167.241";
+      prefixLength = 24;
+    }
+  ];
+  networking.defaultGateway = "162.248.167.1";
+  networking.nameservers = [
+    "8.8.8.8"
+  ];
+
+  environment.systemPackages = with pkgs; [
+    git # required for ./deploy, clone_or_update
+    htop
+    iftop
+    iotop
+    iptables
+    nethogs
+    rxvt_unicode.terminfo
+    tcpdump
+  ];
+
+  services.journald.extraConfig = ''
+    SystemMaxUse=1G
+    RuntimeMaxUse=128M
+  '';
+}
diff --git a/1systems/tv/nomic.nix b/1systems/tv/nomic.nix
new file mode 100644
index 000000000..1696c509a
--- /dev/null
+++ b/1systems/tv/nomic.nix
@@ -0,0 +1,111 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+  imports = [
+    ../../2configs/tv/AO753.nix
+    ../../2configs/tv/base.nix
+    ../../2configs/tv/consul-server.nix
+    ../../2configs/tv/exim-retiolum.nix
+    ../../2configs/tv/git-public.nix
+    {
+      imports = [ ../../3modules/tv/identity.nix ];
+      tv.identity = {
+        enable = true;
+        self = config.tv.identity.hosts.nomic;
+      };
+    }
+    {
+      imports = [ ../../3modules/tv/iptables.nix ];
+      tv.iptables = {
+        enable = true;
+        input-internet-accept-new-tcp = [
+          "ssh"
+          "http"
+          "tinc"
+          "smtp"
+        ];
+      };
+    }
+    {
+      imports = [ ../../3modules/tv/nginx.nix ];
+      tv.nginx = {
+        enable = true;
+        retiolum-locations = [
+          (nameValuePair "~ ^/~(.+?)(/.*)?\$" ''
+            alias /home/$1/public_html$2;
+          '')
+        ];
+      };
+    }
+    {
+      imports = [ ../../3modules/tv/retiolum.nix ];
+      tv.retiolum = {
+        enable = true;
+        hosts = ../../Zhosts;
+        connectTo = [
+          "gum"
+          "pigstarter"
+        ];
+      };
+    }
+  ];
+
+  boot.initrd.luks = {
+    cryptoModules = [ "aes" "sha1" "xts" ];
+    devices = [
+      {
+        name = "luks1";
+        device = "/dev/disk/by-uuid/cac73902-1023-4906-8e95-3a8b245337d4";
+      }
+    ];
+  };
+
+  fileSystems."/" =
+    { device = "/dev/disk/by-uuid/de4780fc-0473-4708-81df-299b7383274c";
+      fsType = "btrfs";
+    };
+
+  fileSystems."/boot" =
+    { device = "/dev/disk/by-uuid/be3a1d80-3157-4d7c-86cc-ef01b64eff5e";
+      fsType = "ext4";
+    };
+
+  fileSystems."/home" =
+    { device = "/dev/disk/by-uuid/9db9c8ff-51da-4cbd-9f0a-0cd3333bbaff";
+      fsType = "btrfs";
+    };
+
+  swapDevices = [ ];
+
+  nix = {
+    buildCores = 2;
+    maxJobs = 2;
+    daemonIONiceLevel = 1;
+    daemonNiceLevel = 1;
+  };
+
+  # TODO base
+  boot.tmpOnTmpfs = true;
+
+  environment.systemPackages = with pkgs; [
+    (writeScriptBin "play" ''
+      #! /bin/sh
+      set -euf
+      mpv() { exec ${mpv}/bin/mpv "$@"; }
+      case $1 in
+        deepmix)      mpv http://deepmix.ru/deepmix128.pls;;
+        groovesalad)  mpv http://somafm.com/play/groovesalad;;
+        ntslive)      mpv http://listen2.ntslive.co.uk/listen.pls;;
+        *)
+          echo "$0: bad argument: $*" >&2
+          exit 23
+      esac
+    '')
+    rxvt_unicode.terminfo
+    tmux
+  ];
+
+  networking.hostName = "nomic";
+}
diff --git a/1systems/tv/rmdir.nix b/1systems/tv/rmdir.nix
new file mode 100644
index 000000000..14817c9bc
--- /dev/null
+++ b/1systems/tv/rmdir.nix
@@ -0,0 +1,77 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+  imports = [
+    ../../2configs/tv/CAC-Developer-1.nix
+    ../../2configs/tv/CAC-CentOS-7-64bit.nix
+    ../../2configs/tv/base.nix
+    ../../2configs/tv/consul-server.nix
+    ../../2configs/tv/exim-smarthost.nix
+    ../../2configs/tv/git-public.nix
+    {
+      imports = [ ../../3modules/tv/identity.nix ];
+      tv.identity = {
+        enable = true;
+        self = config.tv.identity.hosts.rmdir;
+      };
+    }
+    {
+      imports = [ ../../3modules/tv/iptables.nix ];
+      tv.iptables = {
+        enable = true;
+        input-internet-accept-new-tcp = [
+          "ssh"
+          "tinc"
+          "smtp"
+        ];
+        input-retiolum-accept-new-tcp = [
+          "http"
+        ];
+      };
+    }
+    {
+      imports = [ ../../3modules/tv/retiolum.nix ];
+      tv.retiolum = {
+        enable = true;
+        hosts = ../../Zhosts;
+        connectTo = [
+          "cd"
+          "mkdir"
+          "fastpoke"
+          "pigstarter"
+          "ire"
+        ];
+      };
+    }
+  ];
+
+  networking.hostName = "rmdir";
+  networking.interfaces.enp2s1.ip4 = [
+    {
+      address = "167.88.44.94";
+      prefixLength = 24;
+    }
+  ];
+  networking.defaultGateway = "167.88.44.1";
+  networking.nameservers = [
+    "8.8.8.8"
+  ];
+
+  environment.systemPackages = with pkgs; [
+    git # required for ./deploy, clone_or_update
+    htop
+    iftop
+    iotop
+    iptables
+    nethogs
+    rxvt_unicode.terminfo
+    tcpdump
+  ];
+
+  services.journald.extraConfig = ''
+    SystemMaxUse=1G
+    RuntimeMaxUse=128M
+  '';
+}
diff --git a/1systems/tv/wu.nix b/1systems/tv/wu.nix
new file mode 100644
index 000000000..2645b8c2c
--- /dev/null
+++ b/1systems/tv/wu.nix
@@ -0,0 +1,388 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+  imports = [
+    ../../2configs/tv/w110er.nix
+    ../../2configs/tv/base.nix
+    ../../2configs/tv/consul-client.nix
+    ../../2configs/tv/exim-retiolum.nix
+    ../../2configs/tv/git-public.nix
+    # TODO git-private.nix
+    ../../2configs/tv/xserver.nix
+    ../../2configs/tv/synaptics.nix # TODO w110er if xserver is enabled
+    {
+      imports = [ ../../3modules/tv/identity.nix ];
+      tv.identity = {
+        enable = true;
+        self = config.tv.identity.hosts.wu;
+      };
+    }
+    {
+      imports = [ ../../3modules/tv/iptables.nix ];
+      tv.iptables = {
+        enable = true;
+        input-internet-accept-new-tcp = [
+          "ssh"
+          "http"
+          "tinc"
+          "smtp"
+        ];
+      };
+    }
+    {
+      imports = [ ../../3modules/tv/nginx.nix ];
+      tv.nginx = {
+        enable = true;
+        retiolum-locations = [
+          (nameValuePair "~ ^/~(.+?)(/.*)?\$" ''
+            alias /home/$1/public_html$2;
+          '')
+        ];
+      };
+    }
+    {
+      imports = [ ../../3modules/tv/retiolum.nix ];
+      tv.retiolum = {
+        enable = true;
+        hosts = ../../Zhosts;
+        connectTo = [
+          "gum"
+          "pigstarter"
+        ];
+      };
+    }
+    {
+      imports = [ ../../3modules/tv/urlwatch.nix ];
+      tv.urlwatch = {
+        enable = true;
+        mailto = "tv@wu.retiolum"; # TODO
+        onCalendar = "*-*-* 05:00:00";
+        urls = [
+          ## nixpkgs maintenance
+
+          # 2014-07-29 when one of the following urls change
+          # then we have to update the package
+
+          # ref src/nixpkgs/pkgs/tools/admin/sec/default.nix
+          http://simple-evcorr.sourceforge.net/
+
+          # ref src/nixpkgs/pkgs/tools/networking/urlwatch/default.nix
+          https://thp.io/2008/urlwatch/
+
+          # 2014-12-20 ref src/nixpkgs/pkgs/tools/networking/tlsdate/default.nix
+          https://api.github.com/repos/ioerror/tlsdate/tags
+
+          # 2015-02-18
+          # ref ~/src/nixpkgs/pkgs/tools/text/qprint/default.nix
+          http://www.fourmilab.ch/webtools/qprint/
+
+          # 2014-09-24 ref https://github.com/4z3/xintmap
+          http://www.mathstat.dal.ca/~selinger/quipper/
+
+          # 2014-12-12 remove nixopsUnstable when nixops get's bumped to 1.3
+          # ref https://github.com/NixOS/nixpkgs/blob/master/pkgs/tools/package-management/nixops/unstable.nix
+          http://nixos.org/releases/nixops/
+
+          ## other
+
+          https://nixos.org/channels/nixos-unstable/git-revision
+
+          ## 2014-10-17
+          ## TODO update ~/src/login/default.nix
+          #http://hackage.haskell.org/package/bcrypt
+          #http://hackage.haskell.org/package/cron
+          #http://hackage.haskell.org/package/hyphenation
+          #http://hackage.haskell.org/package/iso8601-time
+          #http://hackage.haskell.org/package/ixset-typed
+          #http://hackage.haskell.org/package/system-command
+          #http://hackage.haskell.org/package/transformers
+          #http://hackage.haskell.org/package/web-routes-wai
+          #http://hackage.haskell.org/package/web-page
+        ];
+      };
+    }
+    {
+      users.extraGroups = {
+        tv-sub.gid = 1337;
+      };
+
+      users.extraUsers =
+        mapAttrs (name: user: user // {
+          inherit name;
+          home = "/home/${name}";
+          createHome = true;
+          useDefaultShell = true;
+        }) {
+          ff = {
+            uid = 13378001;
+            group = "tv-sub";
+            extraGroups = [
+              "audio"
+              "video"
+            ];
+          };
+
+          cr = {
+            uid = 13378002;
+            group = "tv-sub";
+            extraGroups = [
+              "audio"
+              "video"
+              "bumblebee"
+            ];
+          };
+
+          vimb = {
+            uid = 13378003;
+            group = "tv-sub";
+            extraGroups = [
+              "audio"
+              "video"
+              "bumblebee"
+            ];
+          };
+
+          fa = {
+            uid = 2300001;
+            group = "tv-sub";
+          };
+
+          rl = {
+            uid = 2300002;
+            group = "tv-sub";
+          };
+
+          tief = {
+            uid = 2300702;
+            group = "tv-sub";
+          };
+
+          btc-bitcoind = {
+            uid = 2301001;
+            group = "tv-sub";
+          };
+
+          btc-electrum = {
+            uid = 2301002;
+            group = "tv-sub";
+          };
+
+          ltc-litecoind = {
+            uid = 2301101;
+            group = "tv-sub";
+          };
+
+          eth = {
+            uid = 2302001;
+            group = "tv-sub";
+          };
+
+          emse-hsdb = {
+            uid = 4200101;
+            group = "tv-sub";
+          };
+
+          wine = {
+            uid = 13370400;
+            group = "tv-sub";
+            extraGroups = [
+              "audio"
+              "video"
+              "bumblebee"
+            ];
+          };
+
+          # dwarffortress
+          df = {
+            uid = 13370401;
+            group = "tv-sub";
+            extraGroups = [
+              "audio"
+              "video"
+              "bumblebee"
+            ];
+          };
+
+          # XXX visudo: Warning: Runas_Alias `FTL' referenced but not defined
+          FTL = {
+            uid = 13370402;
+            #group = "tv-sub";
+            extraGroups = [
+              "audio"
+              "video"
+              "bumblebee"
+            ];
+          };
+
+          freeciv = {
+            uid = 13370403;
+            group = "tv-sub";
+          };
+
+          xr = {
+            uid = 13370061;
+            group = "tv-sub";
+            extraGroups = [
+              "audio"
+              "video"
+            ];
+          };
+
+          "23" = {
+            uid = 13370023;
+            group = "tv-sub";
+          };
+
+          electrum = {
+            uid = 13370102;
+            group = "tv-sub";
+          };
+
+          Reaktor = {
+            uid = 4230010;
+            group = "tv-sub";
+          };
+
+          gitolite = {
+            uid = 7700;
+          };
+
+          skype = {
+            uid = 6660001;
+            group = "tv-sub";
+            extraGroups = [
+              "audio"
+            ];
+          };
+
+          onion = {
+            uid = 6660010;
+            group = "tv-sub";
+          };
+
+          zalora = {
+            uid = 1000301;
+            group = "tv-sub";
+            extraGroups = [
+              "audio"
+              # TODO remove vboxusers when hardening is active
+              "vboxusers"
+              "video"
+            ];
+          };
+        };
+
+      security.sudo.extraConfig =
+        let
+          inherit (import ../../4lib/tv { inherit lib pkgs; })
+            isSuffixOf;
+
+          hasMaster = { group ? "", ... }:
+            isSuffixOf "-sub" group;
+
+          masterOf = user : removeSuffix "-sub" user.group;
+        in
+        concatStringsSep "\n"
+          (map (u: "${masterOf u} ALL=(${u.name}) NOPASSWD: ALL")
+               (filter hasMaster (attrValues config.users.extraUsers)));
+    }
+  ];
+
+  boot.initrd.luks = {
+    cryptoModules = [ "aes" "sha512" "xts" ];
+    devices = [
+      { name = "home"; device = "/dev/vg840/enchome"; preLVM = false; }
+    ];
+  };
+
+  fileSystems = {
+    "/" = {
+      device = "/dev/mapper/vg840-wuroot";
+      fsType = "btrfs";
+      options = "defaults,noatime,ssd,compress=lzo";
+    };
+    "/home" = {
+      device = "/dev/mapper/home";
+      options = "defaults,noatime,ssd,compress=lzo";
+    };
+    "/boot" = {
+      device = "/dev/sda1";
+    };
+    "/tmp" = {
+      device = "tmpfs";
+      fsType = "tmpfs";
+      options = "nosuid,nodev,noatime";
+    };
+  };
+
+  nixpkgs.config.firefox.enableAdobeFlash = true;
+  nixpkgs.config.chromium.enablePepperFlash = true;
+
+  nixpkgs.config.allowUnfree = true;
+  hardware.bumblebee.enable = true;
+  hardware.bumblebee.group = "video";
+  hardware.enableAllFirmware = true;
+  hardware.opengl.driSupport32Bit = true;
+  hardware.pulseaudio.enable = true;
+
+  networking.hostName = "wu";
+
+  environment.systemPackages = with pkgs; [
+    xlibs.fontschumachermisc
+    slock
+    ethtool
+    #firefoxWrapper # with plugins
+    #chromiumDevWrapper
+    tinc
+    iptables
+    #jack2
+  ];
+
+  security.setuidPrograms = [
+    "sendmail"  # for cron
+    "slock"
+  ];
+
+  services.printing.enable = true;
+
+  services.journald.extraConfig = ''
+    SystemMaxUse=1G
+    RuntimeMaxUse=128M
+  '';
+
+  # see tmpfiles.d(5)
+  systemd.tmpfiles.rules = [
+    "d /tmp 1777 root root - -" # does this work with mounted /tmp?
+  ];
+
+  virtualisation.libvirtd.enable = true;
+
+  networking.extraHosts = ''
+    192.168.1.1 wrt.gg23 wrt
+    192.168.1.11 mors.gg23
+    192.168.1.12 uriel.gg23
+    192.168.1.23 raspi.gg23 raspi
+    192.168.1.37 wu.gg23
+    192.168.1.110 nomic.gg23
+    192.168.1.124 schnabeldrucker.gg23 schnabeldrucker
+  '';
+
+  services.udev.extraRules = ''
+    SUBSYSTEM=="net", ATTR{address}=="00:90:f5:da:aa:c3", NAME="en0"
+    SUBSYSTEM=="net", ATTR{address}=="a0:88:b4:1b:ae:6c", NAME="wl0"
+
+    # for jack
+    KERNEL=="rtc0", GROUP="audio"
+    KERNEL=="hpet", GROUP="audio"
+  '';
+
+  services.bitlbee.enable = true;
+  services.tor.client.enable = true;
+  services.tor.enable = true;
+  services.virtualboxHost.enable = true;
+
+  # TODO w110er if xserver is enabled
+  services.xserver.vaapiDrivers = [ pkgs.vaapiIntel ];
+}
diff --git a/2configs/tv/AO753.nix b/2configs/tv/AO753.nix
new file mode 100644
index 000000000..70eae1786
--- /dev/null
+++ b/2configs/tv/AO753.nix
@@ -0,0 +1,39 @@
+{ config, pkgs, ... }:
+
+{
+  imports = [
+    ../../2configs/tv/smartd.nix
+  ];
+
+  boot.loader.grub = {
+    device = "/dev/sda";
+    splashImage = null;
+  };
+
+  boot.initrd.availableKernelModules = [
+    "ahci"
+  ];
+
+  boot.kernelModules = [
+    "kvm-intel"
+    "wl"
+  ];
+
+  boot.extraModulePackages = [
+    config.boot.kernelPackages.broadcom_sta
+  ];
+
+  networking.wireless.enable = true;
+
+  services.logind.extraConfig = ''
+    HandleHibernateKey=ignore
+    HandleLidSwitch=ignore
+    HandlePowerKey=ignore
+    HandleSuspendKey=ignore
+  '';
+
+  nixpkgs.config = {
+    allowUnfree = false;
+    allowUnfreePredicate = (x: pkgs.lib.hasPrefix "broadcom-sta-" x.name);
+  };
+}
diff --git a/2configs/tv/CAC-CentOS-7-64bit.nix b/2configs/tv/CAC-CentOS-7-64bit.nix
new file mode 100644
index 000000000..95c6e815c
--- /dev/null
+++ b/2configs/tv/CAC-CentOS-7-64bit.nix
@@ -0,0 +1,47 @@
+_:
+
+{
+  boot.loader.grub = {
+    device = "/dev/sda";
+    splashImage = null;
+  };
+
+  boot.initrd.availableKernelModules = [
+    "ata_piix"
+    "vmw_pvscsi"
+  ];
+
+  fileSystems."/" = {
+    device = "/dev/centos/root";
+    fsType = "xfs";
+  };
+
+  fileSystems."/boot" = {
+    device = "/dev/sda1";
+    fsType = "xfs";
+  };
+
+  swapDevices = [
+    { device = "/dev/centos/swap"; }
+  ];
+
+  users.extraGroups = {
+    # ● systemd-tmpfiles-setup.service - Create Volatile Files and Directories
+    #    Loaded: loaded (/nix/store/2l33gg7nmncqkpysq9f5fxyhlw6ncm2j-systemd-217/example/systemd/system/systemd-tmpfiles-setup.service)
+    #    Active: failed (Result: exit-code) since Mon 2015-03-16 10:29:18 UTC; 4s ago
+    #      Docs: man:tmpfiles.d(5)
+    #            man:systemd-tmpfiles(8)
+    #   Process: 19272 ExecStart=/nix/store/2l33gg7nmncqkpysq9f5fxyhlw6ncm2j-systemd-217/bin/systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev (code=exited, status=1/FAILURE)
+    #  Main PID: 19272 (code=exited, status=1/FAILURE)
+    # 
+    # Mar 16 10:29:17 cd systemd-tmpfiles[19272]: [/usr/lib/tmpfiles.d/legacy.conf:26] Unknown group 'lock'.
+    # Mar 16 10:29:18 cd systemd-tmpfiles[19272]: Two or more conflicting lines for /var/log/journal configured, ignoring.
+    # Mar 16 10:29:18 cd systemd-tmpfiles[19272]: Two or more conflicting lines for /var/log/journal/7b35116927d74ea58785e00b47ac0f0d configured, ignoring.
+    # Mar 16 10:29:18 cd systemd[1]: systemd-tmpfiles-setup.service: main process exited, code=exited, status=1/FAILURE
+    # Mar 16 10:29:18 cd systemd[1]: Failed to start Create Volatile Files and Directories.
+    # Mar 16 10:29:18 cd systemd[1]: Unit systemd-tmpfiles-setup.service entered failed state.
+    # Mar 16 10:29:18 cd systemd[1]: systemd-tmpfiles-setup.service failed.
+    # warning: error(s) occured while switching to the new configuration
+    lock.gid = 10001;
+  };
+}
diff --git a/2configs/tv/CAC-Developer-1.nix b/2configs/tv/CAC-Developer-1.nix
new file mode 100644
index 000000000..37bc32afb
--- /dev/null
+++ b/2configs/tv/CAC-Developer-1.nix
@@ -0,0 +1,6 @@
+_:
+
+{
+  nix.maxJobs = 1;
+  sound.enable = false;
+}
diff --git a/2configs/tv/CAC-Developer-2.nix b/2configs/tv/CAC-Developer-2.nix
new file mode 100644
index 000000000..fedb808df
--- /dev/null
+++ b/2configs/tv/CAC-Developer-2.nix
@@ -0,0 +1,6 @@
+_:
+
+{
+  nix.maxJobs = 2;
+  sound.enable = false;
+}
diff --git a/2configs/tv/base.nix b/2configs/tv/base.nix
new file mode 100644
index 000000000..f91e5bc50
--- /dev/null
+++ b/2configs/tv/base.nix
@@ -0,0 +1,175 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+  # "7.4.335" -> "74"
+  majmin = x: concatStrings (take 2 (splitString "." x));
+in
+
+{
+  imports = [
+    {
+      users.extraUsers =
+        mapAttrs (_: h: { hashedPassword = h; })
+                 (import /root/src/secrets/hashedPasswords.nix);
+    }
+    {
+      users.defaultUserShell = "/run/current-system/sw/bin/bash";
+      users.mutableUsers = false;
+    }
+    {
+      users.extraUsers = {
+        root = {
+          openssh.authorizedKeys.keys = map readFile [
+            ../../Zpubkeys/tv_wu.ssh.pub
+          ];
+        };
+        tv = {
+          uid = 1337;
+          group = "users";
+          home = "/home/tv";
+          createHome = true;
+          useDefaultShell = true;
+          extraGroups = [
+            "audio"
+            "video"
+            "wheel"
+          ];
+          openssh.authorizedKeys.keys = map readFile [
+            ../../Zpubkeys/tv_wu.ssh.pub
+          ];
+        };
+      };
+    }
+    {
+      security.sudo.extraConfig = ''
+        Defaults mailto="tv@wu.retiolum"
+      '';
+      time.timeZone = "Europe/Berlin";
+    }
+    {
+      # TODO check if both are required:
+      nix.chrootDirs = [ "/etc/protocols" pkgs.iana_etc.outPath ];
+
+      nix.trustedBinaryCaches = [
+        "https://cache.nixos.org"
+        "http://cache.nixos.org"
+        "http://hydra.nixos.org"
+      ];
+
+      nix.useChroot = true;
+    }
+
+    {
+      environment.systemPackages = with pkgs; [
+        vim
+      ];
+
+      environment.etc."vim/vimrc".text = ''
+        set nocp
+      '';
+
+      environment.etc."vim/vim${majmin pkgs.vim.version}".source =
+          "${pkgs.vim}/share/vim/vim${majmin pkgs.vim.version}";
+
+      # multiple-definition-problem when defining environment.variables.EDITOR
+      environment.extraInit = ''
+        EDITOR=vim
+      '';
+
+      environment.shellAliases = {
+        # alias cal='cal -m3'
+        gp = "${pkgs.pari}/bin/gp -q";
+        df = "df -h";
+        du = "du -h";
+        # alias grep='grep --color=auto'
+
+        # TODO alias cannot contain #\'
+        # "ps?" = "ps ax | head -n 1;ps ax | fgrep -v ' grep --color=auto ' | grep";
+
+        # alias la='ls -lA'
+        lAtr = "ls -lAtr";
+        # alias ll='ls -l'
+        ls = "ls -h --color=auto --group-directories-first";
+        # alias vim='vim -p'
+        # alias vi='vim'
+        # alias view='vim -R'
+        dmesg = "dmesg -L --reltime";
+      };
+
+      environment.variables.VIM = "/etc/vim";
+
+      programs.bash = {
+        interactiveShellInit = ''
+          HISTCONTROL='erasedups:ignorespace'
+          HISTSIZE=65536
+          HISTFILESIZE=$HISTSIZE
+
+          shopt -s checkhash
+          shopt -s histappend histreedit histverify
+          shopt -s no_empty_cmd_completion
+          complete -d cd
+
+          # TODO source bridge
+        '';
+        promptInit = ''
+          case $UID in
+            0)
+              PS1='\[\e[1;31m\]\w\[\e[0m\] '
+              ;;
+            1337)
+              PS1='\[\e[1;32m\]\w\[\e[0m\] '
+              ;;
+            *)
+              PS1='\[\e[1;35m\]\u \[\e[1;32m\]\w\[\e[0m\] '
+              ;;
+          esac
+          if test -n "$SSH_CLIENT"; then
+            PS1='\[\e[35m\]\h'" $PS1"
+          fi
+          if test -n "$SSH_AGENT_PID"; then
+            PS1="ssh-agent[$SSH_AGENT_PID] $PS1"
+          fi
+        '';
+      };
+
+      programs.ssh.startAgent = false;
+    }
+
+    {
+      nixpkgs.config.packageOverrides = pkgs:
+        {
+          nano = pkgs.runCommand "empty" {} "mkdir -p $out";
+        };
+
+      services.cron.enable = false;
+      services.nscd.enable = false;
+      services.ntp.enable = false;
+    }
+
+    {
+      boot.kernel.sysctl = {
+        # Enable IPv6 Privacy Extensions
+        "net.ipv6.conf.all.use_tempaddr" = 2;
+        "net.ipv6.conf.default.use_tempaddr" = 2;
+      };
+    }
+
+    {
+      services.openssh = {
+        enable = true;
+        hostKeys = [
+          { type = "ed25519"; path = "/etc/ssh/ssh_host_ed25519_key"; }
+        ];
+      };
+    }
+
+    {
+      # TODO: exim
+      security.setuidPrograms = [
+        "sendmail"  # for sudo
+      ];
+    }
+  ];
+}
diff --git a/2configs/tv/consul-client.nix b/2configs/tv/consul-client.nix
new file mode 100644
index 000000000..0a8bf4d75
--- /dev/null
+++ b/2configs/tv/consul-client.nix
@@ -0,0 +1,9 @@
+{ pkgs, ... }:
+
+{
+  imports = [ ./consul-server.nix ];
+
+  tv.consul = {
+    server = pkgs.lib.mkForce false;
+  };
+}
diff --git a/2configs/tv/consul-server.nix b/2configs/tv/consul-server.nix
new file mode 100644
index 000000000..1c8dcb884
--- /dev/null
+++ b/2configs/tv/consul-server.nix
@@ -0,0 +1,22 @@
+{ config, ... }:
+
+{
+  imports = [ ../../3modules/tv/consul.nix ];
+  tv.consul = rec {
+    enable = true;
+
+    inherit (config.tv.identity) self;
+    inherit (self) dc;
+
+    server = true;
+
+    hosts = with config.tv.identity.hosts; [
+      # TODO get this list automatically from each host where tv.consul.enable is true
+      cd
+      mkdir
+      nomic
+      rmdir
+      #wu
+    ];
+  };
+}
diff --git a/2configs/tv/cryptoroot.nix b/2configs/tv/cryptoroot.nix
new file mode 100644
index 000000000..04618ac4a
--- /dev/null
+++ b/2configs/tv/cryptoroot.nix
@@ -0,0 +1,4 @@
+{ ... }:
+
+{
+}
diff --git a/2configs/tv/exim-retiolum.nix b/2configs/tv/exim-retiolum.nix
new file mode 100644
index 000000000..efab5cf32
--- /dev/null
+++ b/2configs/tv/exim-retiolum.nix
@@ -0,0 +1,126 @@
+{ config, pkgs, ... }:
+
+{
+  services.exim =
+    # This configuration makes only sense for retiolum-enabled hosts.
+    # TODO modular configuration
+    assert config.tv.retiolum.enable;
+    let
+      # TODO get the hostname from config.tv.retiolum.
+      retiolumHostname = "${config.networking.hostName}.retiolum";
+    in
+      { enable = true;
+        config = ''
+          primary_hostname = ${retiolumHostname}
+          domainlist local_domains    = @ : localhost
+          domainlist relay_to_domains = *.retiolum
+          hostlist   relay_from_hosts = <; 127.0.0.1 ; ::1
+
+          acl_smtp_rcpt = acl_check_rcpt
+          acl_smtp_data = acl_check_data
+
+          host_lookup = *
+          rfc1413_hosts = *
+          rfc1413_query_timeout = 5s
+
+          log_file_path = syslog
+          syslog_timestamp = false
+          syslog_duplication = false
+
+          begin acl
+
+          acl_check_rcpt:
+            accept  hosts = :
+                    control = dkim_disable_verify
+
+            deny    message       = Restricted characters in address
+                    domains       = +local_domains
+                    local_parts   = ^[.] : ^.*[@%!/|]
+
+            deny    message       = Restricted characters in address
+                    domains       = !+local_domains
+                    local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
+
+            accept  local_parts   = postmaster
+                    domains       = +local_domains
+
+            #accept
+            #  hosts = *.retiolum
+            #  domains = *.retiolum
+            #  control = dkim_disable_verify
+
+            #require verify        = sender
+
+            accept  hosts         = +relay_from_hosts
+                    control       = submission
+                    control       = dkim_disable_verify
+
+            accept  authenticated = *
+                    control       = submission
+                    control       = dkim_disable_verify
+
+            require message = relay not permitted
+                    domains = +local_domains : +relay_to_domains
+
+            require verify = recipient
+
+            accept
+
+
+          acl_check_data:
+            accept
+
+
+          begin routers
+
+          retiolum:
+            driver = manualroute
+            domains = ! ${retiolumHostname} : *.retiolum
+            transport = remote_smtp
+            route_list = ^.* $0 byname
+            no_more
+
+          nonlocal:
+            debug_print = "R: nonlocal for $local_part@$domain"
+            driver = redirect
+            domains = ! +local_domains
+            allow_fail
+            data = :fail: Mailing to remote domains not supported
+            no_more
+
+          local_user:
+            # debug_print = "R: local_user for $local_part@$domain"
+            driver = accept
+            check_local_user
+          # local_part_suffix = +* : -*
+          # local_part_suffix_optional
+            transport = home_maildir
+            cannot_route_message = Unknown user
+
+
+          begin transports
+
+          remote_smtp:
+            driver = smtp
+
+          home_maildir:
+            driver = appendfile
+            maildir_format
+            directory = $home/Maildir
+            directory_mode = 0700
+            delivery_date_add
+            envelope_to_add
+            return_path_add
+          # group = mail
+          # mode = 0660
+
+          begin retry
+          *.retiolum             *           F,42d,1m
+          *                      *           F,2h,15m; G,16h,1h,1.5; F,4d,6h
+
+          begin rewrite
+
+          begin authenticators
+        '';
+      };
+}
diff --git a/2configs/tv/exim-smarthost.nix b/2configs/tv/exim-smarthost.nix
new file mode 100644
index 000000000..a4c47b399
--- /dev/null
+++ b/2configs/tv/exim-smarthost.nix
@@ -0,0 +1,474 @@
+{ config, pkgs, ... }:
+
+let
+  inherit (builtins) toFile;
+  inherit (pkgs.lib.attrsets) mapAttrs;
+  inherit (pkgs.lib.strings) concatMapStringsSep;
+in
+
+{
+  services.exim =
+    let
+      retiolumHostname = "${config.networking.hostName}.retiolum";
+
+      internet-aliases = [
+        { from = "tomislav@viljetic.de"; to = "tv@wu.retiolum"; }
+
+        # (mindestens) lisp-stammtisch und elli haben die:
+        { from = "tv@viljetic.de"; to = "tv@wu.retiolum"; }
+
+        { from = "tv@destroy.dyn.shackspace.de"; to = "tv@wu.retiolum"; }
+
+        { from = "mirko@viljetic.de"; to = "mv@cd.retiolum"; }
+
+        # TODO killme (wo wird die benutzt?)
+        { from = "tv@cd.retiolum"; to = "tv@wu.retiolum"; }
+
+        { from = "postmaster@krebsco.de"; to = "tv@wu.retiolum"; }
+      ];
+
+      system-aliases = [
+        { from = "mailer-daemon"; to = "postmaster"; }
+        { from = "postmaster"; to = "root"; }
+        { from = "nobody"; to = "root"; }
+        { from = "hostmaster"; to = "root"; }
+        { from = "usenet"; to = "root"; }
+        { from = "news"; to = "root"; }
+        { from = "webmaster"; to = "root"; }
+        { from = "www"; to = "root"; }
+        { from = "ftp"; to = "root"; }
+        { from = "abuse"; to = "root"; }
+        { from = "noc"; to = "root"; }
+        { from = "security"; to = "root"; }
+        { from = "root"; to = "tv"; }
+        { from = "mirko"; to = "mv"; }
+      ];
+
+      to-lsearch = concatMapStringsSep "\n" ({ from, to }: "${from}: ${to}");
+      lsearch =
+        mapAttrs (name: set: toFile name (to-lsearch set)) {
+          inherit internet-aliases;
+          inherit system-aliases;
+        };
+    in
+    {
+      enable = true;
+      config =
+        ''
+          primary_hostname = ${retiolumHostname}
+
+          # HOST_REDIR contains the real destinations for "local_domains".
+          #HOST_REDIR = /etc/exim4/host_redirect
+
+
+          # Domains not listed in local_domains need to be deliverable remotely.
+          # XXX We abuse local_domains to mean "domains, we're the gateway for".
+          domainlist local_domains    = @ : localhost
+          #: viljetic.de : SHACK_REDIR_HOSTNAME
+          domainlist relay_to_domains =
+          hostlist   relay_from_hosts = <; 127.0.0.1 ; ::1 ; 10.243.13.37
+
+          acl_smtp_rcpt = acl_check_rcpt
+          acl_smtp_data = acl_check_data
+
+          # av_scanner = clamd:/tmp/clamd
+          # spamd_address = 127.0.0.1 783
+
+          # tls_advertise_hosts = *
+          # tls_certificate = /etc/ssl/exim.crt
+          # tls_privatekey = /etc/ssl/exim.pem
+          # (debian) tls_verify_certificates (to check client certs)
+
+          # daemon_smtp_ports = 25 : 465 : 587
+          # tls_on_connect_ports = 465
+
+          # qualify_domain defaults to primary_hostname
+          # qualify_recipient defaults to qualify_domain
+
+          # allow_domain_literals
+
+          never_users = root
+
+          host_lookup = *
+
+          # ident callbacks for all incoming SMTP calls
+          rfc1413_hosts = *
+          rfc1413_query_timeout = 5s
+
+          # sender_unqualified_hosts =
+          # recipient_unqualified_hosts =
+
+          # percent_hack_domains =
+
+          # arch & debian
+          #ignore_bounce_errors_after = 2d
+          #timeout_frozen_after = 7d
+          # debian
+          #smtp_banner = $smtp_active_hostname ESMTP Exim $version_number $tod_full
+          #freeze_tell = postmaster
+          #trusted_users = uucp
+          # arch
+          #split_spool_directory = true
+
+          log_selector = -queue_run +address_rewrite +all_parents +queue_time
+          log_file_path = syslog
+          syslog_timestamp = false
+          syslog_duplication = false
+
+          begin acl
+
+          acl_check_rcpt:
+            # Accept if the source is local SMTP (i.e. not over TCP/IP).
+            # We do this by testing for an empty sending host field.
+            accept  hosts = :
+                    # arch & debian:
+                    control = dkim_disable_verify
+
+            deny    message       = Restricted characters in address
+                    domains       = +local_domains
+                    local_parts   = ^[.] : ^.*[@%!/|]
+
+            deny    message       = Restricted characters in address
+                    domains       = !+local_domains
+                    local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
+
+            accept  local_parts   = postmaster
+                    domains       = +local_domains
+
+            ## feature RETIOLUM_MAIL
+            #accept
+            #  hosts = *.retiolum
+            #  domains = *.retiolum
+            #  control = dkim_disable_verify
+
+            #require verify        = sender
+
+            accept  hosts         = +relay_from_hosts
+                    control       = submission
+                    # debian: control = submission/sender_retain
+                    # arch & debian:
+                    control       = dkim_disable_verify
+
+            accept  authenticated = *
+                    control       = submission
+                    control       = dkim_disable_verify
+
+            accept message = relay not permitted 2
+                    recipients = lsearch;${lsearch.internet-aliases}
+
+            require message = relay not permitted
+                    domains = +local_domains : +relay_to_domains
+
+            require
+              message = unknown user
+              verify = recipient/callout
+
+            # deny    message       = rejected because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text
+            #         dnslists      = black.list.example
+            #
+            # warn    dnslists      = black.list.example
+            #         add_header    = X-Warning: $sender_host_address is in a black list at $dnslist_domain
+            #         log_message   = found in $dnslist_domain
+
+            # Client SMTP Authorization (csa) checks on the sending host.
+            # Such checks do DNS lookups for special SRV records.
+            # require verify = csa
+
+            accept
+
+
+          acl_check_data:
+            # see av_scanner
+            #deny    malware    = *
+            #        message    = This message contains a virus ($malware_name).
+
+            # Add headers to a message if it is judged to be spam. Before enabling this,
+            # you must install SpamAssassin. You may also need to set the spamd_address
+            # option above.
+            #
+            # warn    spam       = nobody
+            #         add_header = X-Spam_score: $spam_score\n\
+            #                      X-Spam_score_int: $spam_score_int\n\
+            #                      X-Spam_bar: $spam_bar\n\
+            #                      X-Spam_report: $spam_report
+
+            # feature HELO_REWRITE
+            # XXX note that the public ip (162.219.5.183) resolves to viljetic.de
+            warn
+              sender_domains = viljetic.de : shackspace.de
+              set acl_m_special_dom = $sender_address_domain
+
+            accept
+
+
+          begin routers
+
+          # feature RETIOLUM_MAIL
+          retiolum:
+            debug_print = "R: retiolum for $local_part@$domain"
+            driver = manualroute
+            domains = ! ${retiolumHostname} : *.retiolum
+            transport = retiolum_smtp
+            route_list = ^.* $0 byname
+            no_more
+
+          internet_aliases:
+            debug_print = "R: internet_aliases for $local_part@$domain"
+            driver = redirect
+            data = ''${lookup{$local_part@$domain}lsearch{${lsearch.internet-aliases}}}
+
+          dnslookup:
+            debug_print = "R: dnslookup for $local_part@$domain"
+            driver = dnslookup
+            domains = ! +local_domains
+            transport = remote_smtp
+            ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
+            # if ipv6-enabled then instead use:
+            # ignore_target_hosts = <; 0.0.0.0 ; 127.0.0.0/8 ; ::1
+
+            # (debian) same_domain_copy_routing = yes
+            # (debian) ignore private rfc1918 and APIPA addresses
+            # (debian) ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16 :\
+            #                   172.16.0.0/12 : 10.0.0.0/8 : 169.254.0.0/16 :\
+            #                   255.255.255.255
+
+            # Fail and bounce if the router does not find the domain in the DNS.
+            # I.e. no more routers are tried.
+            # There are a few cases where a dnslookup router will decline to accept an
+            # address; if such a router is expected to handle "all remaining non-local
+            # domains", then it is important to set no_more.
+            no_more
+
+          # XXX this is only used because these "well known aliases" goto tv@cd.retiolum
+          # TODO bounce everything, there is no @cd.retiolum
+          system_aliases:
+            debug_print = "R: system_aliases for $local_part@$domain"
+            driver = redirect
+            data = ''${lookup{$local_part}lsearch{${lsearch.system-aliases}}}
+
+          # TODO this is only b/c mv here... send mv's mails somewhere else...
+          local_user:
+            debug_print = "R: local_user for $local_part@$domain"
+            driver = accept
+            check_local_user
+          # local_part_suffix = +* : -*
+          # local_part_suffix_optional
+            transport = home_maildir
+            cannot_route_message = Unknown user
+
+          begin transports
+
+          retiolum_smtp:
+            driver = smtp
+            retry_include_ip_address = false
+            # serialize_hosts = TODO-all-slow-hosts
+
+          remote_smtp:
+            driver = smtp
+            # debian has also stuff for tls, headers_rewrite and more here
+
+            # feature HELO_REWRITE
+            # XXX note that the public ip (162.219.5.183) resolves to viljetic.de
+            helo_data = ''${if eq{$acl_m_special_dom}{}  \
+                                 {$primary_hostname}   \
+                                 {$acl_m_special_dom} }
+
+          home_maildir:
+            driver = appendfile
+            maildir_format
+            maildir_use_size_file
+            directory = $home/Mail
+            directory_mode = 0700
+            delivery_date_add
+            envelope_to_add
+            return_path_add
+
+          begin retry
+          *.retiolum             *           F,42d,1m
+          *                      *           F,2h,15m; G,16h,1h,1.5; F,4d,6h
+
+          begin rewrite
+          begin authenticators
+        '';
+
+
+          # group = mail
+          # mode = 0660
+
+
+          #address_pipe:
+          #  driver = pipe
+          #  return_output
+          #
+          #address_file:
+          #  driver = appendfile
+          #  delivery_date_add
+          #  envelope_to_add
+          #  return_path_add
+          #
+          #address_reply:
+          #  driver = autoreply
+
+
+          #maildrop_pipe:
+          #  debug_print = "T: maildrop_pipe for $local_part@$domain"
+          #  driver = pipe
+          #  path = "/bin:/usr/bin:/usr/local/bin"
+          #  command = "/usr/bin/maildrop"
+          #  return_path_add
+          #  delivery_date_add
+          #  envelope_to_add
+
+
+
+
+
+          ##begin retry
+          # Address or Domain    Error       Retries
+
+          # Our host_redirect destinations might be offline a lot.
+          # TODO define fallback destinations(?)
+          #lsearch;${lsearch.internet-aliases} * F,42d,1m
+
+
+          ## begin rewrite
+
+          # just in case (shackspace.de should already do this)
+          #tv@shackspace.de  tv@SHACK_REDIR_HOSTNAME  T
+
+
+          ## begin authenticators
+          #PLAIN:
+          #  driver                  = plaintext
+          #  server_set_id           = $auth2
+          #  server_prompts          = :
+          #  server_condition        = Authentication is not yet configured
+          #  server_advertise_condition = ''${if def:tls_in_cipher }
+
+          #LOGIN:
+          #  driver                  = plaintext
+          #  server_set_id           = $auth1
+          #  server_prompts          = <| Username: | Password:
+          #  server_condition        = Authentication is not yet configured
+          #  server_advertise_condition = ''${if def:tls_in_cipher }
+
+
+
+      };
+
+}
+
+#        config = ''
+#          primary_hostname = ${retiolumHostname}
+#          domainlist local_domains    = @ : localhost
+#          domainlist relay_to_domains = *.retiolum
+#          hostlist   relay_from_hosts = <; 127.0.0.1 ; ::1
+#
+#          acl_smtp_rcpt = acl_check_rcpt
+#          acl_smtp_data = acl_check_data
+#
+#          host_lookup = *
+#          rfc1413_hosts = *
+#          rfc1413_query_timeout = 5s
+#
+#          log_file_path = syslog
+#          syslog_timestamp = false
+#          syslog_duplication = false
+#
+#          begin acl
+#
+#          acl_check_rcpt:
+#            accept  hosts = :
+#                    control = dkim_disable_verify
+#
+#            deny    message       = Restricted characters in address
+#                    domains       = +local_domains
+#                    local_parts   = ^[.] : ^.*[@%!/|]
+#
+#            deny    message       = Restricted characters in address
+#                    domains       = !+local_domains
+#                    local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
+#
+#            accept  local_parts   = postmaster
+#                    domains       = +local_domains
+#
+#            #accept
+#            #  hosts = *.retiolum
+#            #  domains = *.retiolum
+#            #  control = dkim_disable_verify
+#
+#            #require verify        = sender
+#
+#            accept  hosts         = +relay_from_hosts
+#                    control       = submission
+#                    control       = dkim_disable_verify
+#
+#            accept  authenticated = *
+#                    control       = submission
+#                    control       = dkim_disable_verify
+#
+#            require message = relay not permitted
+#                    domains = +local_domains : +relay_to_domains
+#
+#            require verify = recipient
+#
+#            accept
+#
+#
+#          acl_check_data:
+#            accept
+#
+#
+#          begin routers
+#
+#          retiolum:
+#            driver = manualroute
+#            domains = ! ${retiolumHostname} : *.retiolum
+#            transport = remote_smtp
+#            route_list = ^.* $0 byname
+#            no_more
+#
+#          nonlocal:
+#            debug_print = "R: nonlocal for $local_part@$domain"
+#            driver = redirect
+#            domains = ! +local_domains
+#            allow_fail
+#            data = :fail: Mailing to remote domains not supported
+#            no_more
+#
+#          local_user:
+#            # debug_print = "R: local_user for $local_part@$domain"
+#            driver = accept
+#            check_local_user
+#          # local_part_suffix = +* : -*
+#          # local_part_suffix_optional
+#            transport = home_maildir
+#            cannot_route_message = Unknown user
+#
+#
+#          begin transports
+#
+#          remote_smtp:
+#            driver = smtp
+#
+#          home_maildir:
+#            driver = appendfile
+#            maildir_format
+#            directory = $home/Maildir
+#            directory_mode = 0700
+#            delivery_date_add
+#            envelope_to_add
+#            return_path_add
+#          # group = mail
+#          # mode = 0660
+#
+#          begin retry
+#          *.retiolum             *           F,42d,1m
+#          *                      *           F,2h,15m; G,16h,1h,1.5; F,4d,6h
+#
+#          begin rewrite
+#
+#          begin authenticators
+#        '';
+#      };
+#}
diff --git a/2configs/tv/git-public.nix b/2configs/tv/git-public.nix
new file mode 100644
index 000000000..0ca04d263
--- /dev/null
+++ b/2configs/tv/git-public.nix
@@ -0,0 +1,83 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+let
+  inherit (builtins) map readFile;
+  inherit (lib) concatMap listToAttrs;
+  # TODO lib should already include our stuff
+  inherit (import ../../4lib/tv { inherit lib pkgs; }) addNames git;
+
+  public-git-repos = [
+    (public "cgserver")
+    (public "crude-mail-setup")
+    (public "dot-xmonad")
+    (public "hack")
+    (public "load-env")
+    (public "make-snapshot")
+    (public "mime")
+    (public "much")
+    (public "nixos-infest")
+    (public "nixpkgs")
+    (public "painload")
+    (public "regfish")
+    (public' {
+      name = "shitment";
+      desc = "turn all the computers into one computer!";
+    })
+    (public "wai-middleware-time")
+    (public "web-routes-wai-custom")
+  ];
+
+  users = addNames {
+    tv = { pubkey = readFile ../../Zpubkeys/tv_wu.ssh.pub; };
+    lass = { pubkey = readFile ../../Zpubkeys/lass.ssh.pub; };
+    uriel = { pubkey = readFile ../../Zpubkeys/uriel.ssh.pub; };
+    makefu = { pubkey = readFile ../../Zpubkeys/makefu.ssh.pub; };
+  };
+
+  repos = listToAttrs (map ({ repo, ... }: { name = repo.name; value = repo; }) public-git-repos);
+
+  rules = concatMap ({ rules, ... }: rules) public-git-repos;
+
+  public' = { name, desc }:
+    let
+      x = public name;
+    in
+    x // { repo = x.repo // { inherit desc; }; };
+
+  public = repo-name:
+    rec {
+      repo = {
+        name = repo-name;
+        hooks = {
+          post-receive = git.irc-announce {
+            nick = config.networking.hostName; # TODO make this the default
+            channel = "#retiolum";
+            server = "ire.retiolum";
+          };
+        };
+        public = true;
+      };
+      rules = with git; with users; [
+        { user = tv;
+          repo = [ repo ];
+          perm = push "refs/*" [ non-fast-forward create delete merge ];
+        }
+        { user = [ lass makefu uriel ];
+          repo = [ repo ];
+          perm = fetch;
+        }
+      ];
+    };
+
+in
+
+{
+  imports = [
+    ../../3modules/tv/git.nix
+  ];
+  tv.git = {
+    enable = true;
+    inherit repos rules users;
+  };
+}
diff --git a/2configs/tv/smartd.nix b/2configs/tv/smartd.nix
new file mode 100644
index 000000000..2e9d955d1
--- /dev/null
+++ b/2configs/tv/smartd.nix
@@ -0,0 +1,17 @@
+{ config, pkgs, ... }:
+
+{
+  services.smartd = {
+    enable = true;
+    devices = [
+      {
+        device = "DEVICESCAN";
+        options = toString [
+          "-a"
+          "-m tv@wu.retiolum"
+          "-s (O/../.././09|S/../.././04|L/../../6/05)"
+        ];
+      }
+    ];
+  };
+}
diff --git a/2configs/tv/synaptics.nix b/2configs/tv/synaptics.nix
new file mode 100644
index 000000000..c47cb9deb
--- /dev/null
+++ b/2configs/tv/synaptics.nix
@@ -0,0 +1,14 @@
+{ config, pkgs, ... }:
+
+{
+  # TODO this is host specific
+  services.xserver.synaptics = {
+    enable = true;
+    twoFingerScroll = true;
+    accelFactor = "0.035";
+    additionalOptions = ''
+      Option "FingerHigh" "60"
+      Option "FingerLow"  "60"
+    '';
+  };
+}
diff --git a/2configs/tv/urxvt.nix b/2configs/tv/urxvt.nix
new file mode 100644
index 000000000..89bb421aa
--- /dev/null
+++ b/2configs/tv/urxvt.nix
@@ -0,0 +1,24 @@
+{ pkgs, ... }:
+
+with builtins;
+
+let
+  users = [ "tv" ];
+  urxvt = pkgs.rxvt_unicode;
+  mkService = user: {
+    description = "urxvt terminal daemon";
+    wantedBy = [ "multi-user.target" ];
+    restartIfChanged = false;
+    serviceConfig = {
+      Restart = "always";
+      User = user;
+      ExecStart = "${urxvt}/bin/urxvtd";
+    };
+  };
+
+in
+
+{
+  environment.systemPackages = [ urxvt ];
+  systemd.services = listToAttrs (map (u: { name = "${u}-urxvtd"; value = mkService u; }) users);
+}
diff --git a/2configs/tv/w110er.nix b/2configs/tv/w110er.nix
new file mode 100644
index 000000000..7ef0e6e9d
--- /dev/null
+++ b/2configs/tv/w110er.nix
@@ -0,0 +1,42 @@
+{ pkgs, ... }:
+
+{
+  imports = [
+    ../../2configs/tv/smartd.nix
+  ];
+
+  boot.extraModprobeConfig = ''
+    options kvm_intel nested=1
+  '';
+
+  boot.initrd.availableKernelModules = [ "ahci" ];
+  boot.kernelModules = [ "kvm-intel" ];
+
+  boot.loader.gummiboot.enable = true;
+  boot.loader.efi.canTouchEfiVariables = true;
+
+  networking.wireless.enable = true;
+
+  nix = {
+    buildCores = 4;
+    maxJobs = 4;
+    daemonIONiceLevel = 1;
+    daemonNiceLevel = 1;
+  };
+
+  services.logind.extraConfig = ''
+    HandleHibernateKey=ignore
+    HandleLidSwitch=ignore
+    HandlePowerKey=ignore
+    HandleSuspendKey=ignore
+  '';
+
+  system.activationScripts.powertopTunables = ''
+    echo 1 > /sys/module/snd_hda_intel/parameters/power_save
+    echo 1500 > /proc/sys/vm/dirty_writeback_centisecs
+    (cd /sys/bus/pci/devices
+      for i in *; do
+        echo auto > $i/power/control # defaults to 'on'
+      done)
+  '';
+}
diff --git a/2configs/tv/xserver.nix b/2configs/tv/xserver.nix
new file mode 100644
index 000000000..4a3de482a
--- /dev/null
+++ b/2configs/tv/xserver.nix
@@ -0,0 +1,41 @@
+{ config, pkgs, ... }:
+
+{
+  imports = [
+    ../../2configs/tv/urxvt.nix # TODO via xserver
+  ];
+
+  services.xserver.enable = true;
+
+
+  #fonts.enableFontConfig = true;
+  #fonts.enableFontDir = true;
+  fonts.fonts = [
+    pkgs.xlibs.fontschumachermisc
+  ];
+  #services.xfs.enable = true;
+  #services.xserver.useXFS = "unix/:7100";
+
+  services.xserver.displayManager.desktopManagerHandlesLidAndPower = true;
+
+  #services.xserver.display = 11;
+  #services.xserver.tty = 11;
+  # services.xserver.layout = "us";
+  # services.xserver.xkbOptions = "eurosign:e";
+
+  #services.xserver.multitouch.enable = true;
+
+  services.xserver.windowManager.xmonad.extraPackages = hspkgs: with hspkgs; [
+    X11-xshape
+  ];
+  services.xserver.windowManager.xmonad.enable = true;
+  services.xserver.windowManager.xmonad.enableContribAndExtras = true;
+  services.xserver.windowManager.default = "xmonad";
+  services.xserver.desktopManager.default = "none";
+  services.xserver.desktopManager.xterm.enable = false;
+
+  services.xserver.displayManager.slim.enable = true;
+  #services.xserver.displayManager.auto.enable = true;
+  #services.xserver.displayManager.auto.user = "tv";
+  #services.xserver.displayManager.job.logsXsession = true;
+}
diff --git a/3modules/tv/consul.nix b/3modules/tv/consul.nix
new file mode 100644
index 000000000..dc9a180dd
--- /dev/null
+++ b/3modules/tv/consul.nix
@@ -0,0 +1,122 @@
+{ config, lib, pkgs, ... }:
+
+# if quorum gets lost, then start any node with a config that doesn't contain bootstrap_expect
+# but -bootstrap
+# TODO consul-bootstrap HOST  that actually does is
+# TODO tools to inspect state of a cluster in outage state
+
+with builtins;
+with lib;
+let
+  cfg = config.tv.consul;
+
+  out = {
+    imports = [ ../../3modules/tv/iptables.nix ];
+    options.tv.consul = api;
+    config = mkIf cfg.enable (mkMerge [
+      imp
+      { tv.iptables.input-retiolum-accept-new-tcp = [ "8300" "8301" ]; }
+      # TODO udp for 8301
+    ]);
+  };
+
+  api = {
+    # TODO inherit (lib) api.options.enable; oder so
+    enable = mkOption {
+      type = types.bool;
+      default = false;
+      description = "enable tv.consul";
+    };
+    dc = mkOption {
+      type = types.unspecified;
+    };
+    hosts = mkOption {
+      type = with types; listOf unspecified;
+    };
+    encrypt-file = mkOption {
+      type = types.str; # TODO path (but not just into store)
+      default = "/root/src/secrets/consul-encrypt.json";
+    };
+    data-dir = mkOption {
+      type = types.str; # TODO path (but not just into store)
+      default = "/var/lib/consul";
+    };
+    self = mkOption {
+      type = types.unspecified;
+    };
+    server = mkOption {
+      type = types.bool;
+      default = false;
+    };
+    GOMAXPROCS = mkOption {
+      type = types.int;
+      default = cfg.self.cores;
+    };
+  };
+
+  consul-config = {
+    datacenter = cfg.dc;
+    data_dir = cfg.data-dir;
+    log_level = "INFO";
+    #node_name =
+    server = cfg.server;
+    bind_addr = cfg.self.addr; # TODO cfg.addr
+    enable_syslog = true;
+    retry_join = map (getAttr "addr") (filter (host: host.fqdn != cfg.self.fqdn) cfg.hosts);
+    leave_on_terminate = true;
+  } // optionalAttrs cfg.server {
+    bootstrap_expect = length cfg.hosts;
+    leave_on_terminate = false;
+  };
+
+  imp = {
+    environment.systemPackages = with pkgs; [
+      consul
+    ];
+
+    systemd.services.consul = {
+      after = [ "network.target" ];
+      wantedBy = [ "multi-user.target" ];
+      path = with pkgs; [
+        consul
+      ];
+      environment = {
+        GOMAXPROCS = toString cfg.GOMAXPROCS;
+      };
+      serviceConfig = {
+        PermissionsStartOnly = "true";
+        SyslogIdentifier = "consul";
+        User = user.name;
+        PrivateTmp = "true";
+        Restart = "always";
+        ExecStartPre = pkgs.writeScript "consul-init" ''
+          #! /bin/sh
+          mkdir -p ${cfg.data-dir}
+          chown consul: ${cfg.data-dir}
+          install -o ${user.name} -m 0400 ${cfg.encrypt-file} /tmp/encrypt.json
+        '';
+        ExecStart = pkgs.writeScript "consul-service" ''
+          #! /bin/sh
+          set -euf
+          exec >/dev/null
+          exec consul agent \
+            -config-file=${toFile "consul.json" (toJSON consul-config)} \
+            -config-file=/tmp/encrypt.json
+        '';
+        #-node=${cfg.self.fqdn} \
+        #ExecStart = "${tinc}/sbin/tincd -c ${confDir} -d 0 -U ${user} -D";
+      };
+    };
+
+    users.extraUsers = singleton {
+      inherit (user) name uid;
+    };
+  };
+
+  user = {
+    name = "consul";
+    uid = 2983239726; # genid consul
+  };
+
+in
+out
diff --git a/3modules/tv/ejabberd.nix b/3modules/tv/ejabberd.nix
new file mode 100644
index 000000000..ffcc5cfb4
--- /dev/null
+++ b/3modules/tv/ejabberd.nix
@@ -0,0 +1,171 @@
+{ config, lib, pkgs, ... }:
+
+with builtins;
+with lib;
+let
+  cfg = config.tv.ejabberd;
+
+  out = {
+    options.tv.ejabberd = api;
+    config = mkIf cfg.enable imp;
+  };
+
+  api = {
+    enable = mkOption {
+      type = types.bool;
+      default = false;
+    };
+
+    certFile = mkOption {
+      type = types.str;
+      default = "/root/src/secrets/ejabberd.pem";
+    };
+
+    hosts = mkOption {
+      type = with types; listOf str;
+    };
+  };
+
+  imp = {
+    environment.systemPackages = [ my-ejabberdctl ];
+
+    systemd.services.ejabberd = {
+      wantedBy = [ "multi-user.target" ];
+      after = [ "network.target" ];
+      serviceConfig = {
+        Type = "oneshot";
+        RemainAfterExit = "yes";
+        PermissionsStartOnly = "true";
+        SyslogIdentifier = "ejabberd";
+        User = user.name;
+        PrivateTmp = "true";
+        ExecStartPre = pkgs.writeScript "ejabberd-start" ''
+          #! /bin/sh
+          install -o ${user.name} -m 0400 ${cfg.certFile} /tmp/certfile.pem
+        '';
+        ExecStart = pkgs.writeScript "ejabberd-service" ''
+          #! /bin/sh
+          ${my-ejabberdctl}/bin/ejabberdctl start
+        '';
+      };
+    };
+
+    users.extraUsers = singleton {
+      inherit (user) name uid;
+      home = "/var/ejabberd";
+      createHome = true;
+    };
+  };
+
+  user = {
+    name = "ejabberd";
+    uid = 405222; 
+    # TODO uid = 3483034447; # genid ejabberd
+  };
+
+  my-ejabberdctl = pkgs.writeScriptBin "ejabberdctl" ''
+    #! /bin/sh
+    set -euf
+    exec env \
+        SPOOLDIR=/var/ejabberd \
+        EJABBERD_CONFIG_PATH=${config-file} \
+      ${pkgs.ejabberd}/bin/ejabberdctl \
+        --logs /var/ejabberd \
+        "$@"
+  '';
+
+  config-file = pkgs.writeText "ejabberd.cfg" ''
+    {loglevel, 3}.
+    {hosts, ${toErlang cfg.hosts}}.
+    {listen,
+     [
+      {5222, ejabberd_c2s, [
+          starttls,
+          {certfile, "/tmp/certfile.pem"},
+          {access, c2s},
+          {shaper, c2s_shaper},
+          {max_stanza_size, 65536}
+               ]},
+      {5269, ejabberd_s2s_in, [
+             {shaper, s2s_shaper},
+             {max_stanza_size, 131072}
+            ]},
+      {5280, ejabberd_http, [
+           captcha,
+           http_bind,
+           http_poll,
+           web_admin
+          ]}
+     ]}.
+    {s2s_use_starttls, required}.
+    {s2s_certfile, "/tmp/certfile.pem"}.
+    {auth_method, internal}.
+    {shaper, normal, {maxrate, 1000}}.
+    {shaper, fast, {maxrate, 50000}}.
+    {max_fsm_queue, 1000}.
+    {acl, local, {user_regexp, ""}}.
+    {access, max_user_sessions, [{10, all}]}.
+    {access, max_user_offline_messages, [{5000, admin}, {100, all}]}.
+    {access, local, [{allow, local}]}.
+    {access, c2s, [{deny, blocked},
+             {allow, all}]}.
+    {access, c2s_shaper, [{none, admin},
+              {normal, all}]}.
+    {access, s2s_shaper, [{fast, all}]}.
+    {access, announce, [{allow, admin}]}.
+    {access, configure, [{allow, admin}]}.
+    {access, muc_admin, [{allow, admin}]}.
+    {access, muc_create, [{allow, local}]}.
+    {access, muc, [{allow, all}]}.
+    {access, pubsub_createnode, [{allow, local}]}.
+    {access, register, [{allow, all}]}.
+    {language, "en"}.
+    {modules,
+     [
+      {mod_adhoc,    []},
+      {mod_announce, [{access, announce}]},
+      {mod_blocking,[]},
+      {mod_caps,     []},
+      {mod_configure,[]},
+      {mod_disco,    []},
+      {mod_irc,      []},
+      {mod_http_bind, []},
+      {mod_last,     []},
+      {mod_muc,      [
+          {access, muc},
+          {access_create, muc_create},
+          {access_persistent, muc_create},
+          {access_admin, muc_admin}
+         ]},
+      {mod_offline,  [{access_max_user_messages, max_user_offline_messages}]},
+      {mod_ping,     []},
+      {mod_privacy,  []},
+      {mod_private,  []},
+      {mod_pubsub,   [
+          {access_createnode, pubsub_createnode},
+          {ignore_pep_from_offline, true},
+          {last_item_cache, false},
+          {plugins, ["flat", "hometree", "pep"]}
+         ]},
+      {mod_register, [
+          {welcome_message, {"Welcome!",
+                 "Hi.\nWelcome to this XMPP server."}},
+          {ip_access, [{allow, "127.0.0.0/8"},
+                 {deny, "0.0.0.0/0"}]},
+          {access, register}
+         ]},
+      {mod_roster,   []},
+      {mod_shared_roster,[]},
+      {mod_stats,    []},
+      {mod_time,     []},
+      {mod_vcard,    []},
+      {mod_version,  []}
+     ]}.
+  '';
+
+
+  # XXX this is a placeholder that happens to work the default strings.
+  toErlang = builtins.toJSON;
+
+in
+out
diff --git a/3modules/tv/git.nix b/3modules/tv/git.nix
new file mode 100644
index 000000000..4ab0df257
--- /dev/null
+++ b/3modules/tv/git.nix
@@ -0,0 +1,406 @@
+arg@{ config, pkgs, lib, ... }:
+
+with builtins;
+with lib;
+let
+  cfg = config.tv.git;
+
+  out = {
+    imports = [
+      ../../3modules/tv/nginx.nix
+    ];
+    options.tv.git = api;
+    config = mkIf cfg.enable (mkMerge [
+      imp
+    ]);
+  };
+
+  api = {
+    enable = mkOption {
+      type = types.bool;
+      default = false;
+      description = "Enable Git repository hosting.";
+    };
+    cgit = mkOption {
+      type = types.bool;
+      default = true;
+      description = "Enable cgit."; # TODO better desc; talk about nginx
+    };
+    dataDir = mkOption {
+      type = types.str;
+      default = "/var/lib/git";
+      description = "Directory used to store repositories.";
+    };
+    etcDir = mkOption {
+      type = types.str;
+      default = "/etc/git";
+    };
+    rules = mkOption {
+      type = types.unspecified;
+    };
+    repos = mkOption {
+      type = types.attrsOf (types.submodule ({
+        options = {
+          desc = mkOption {
+            type = types.nullOr types.str;
+            default = null;
+            description = ''
+              Repository description.
+            '';
+          };
+          section = mkOption {
+            type = types.nullOr types.str;
+            default = null;
+            description = ''
+              Repository section.
+            '';
+          };
+          name = mkOption {
+            type = types.str;
+            description = ''
+              Repository name.
+            '';
+          };
+          hooks = mkOption {
+            type = types.attrsOf types.str;
+            description = ''
+              Repository-specific hooks.
+            '';
+          };
+          public = mkOption {
+            type = types.bool;
+            default = false;
+            description = ''
+              Allow everybody to read the repository via HTTP if cgit enabled.
+            '';
+            # TODO allow every configured user to fetch the repository via SSH.
+          };
+        };
+      }));
+
+      default = {};
+
+      example = literalExample ''
+        {
+          testing = {
+            name = "testing";
+            hooks.post-update = '''
+              #! /bin/sh
+              set -euf
+              echo post-update hook: $* >&2
+            ''';
+          };
+          testing2 = { name = "testing2"; };
+        }
+      '';
+
+      description = ''
+        Repositories.
+      '';
+    };
+    users = mkOption {
+      type = types.unspecified;
+    };
+  };
+
+  imp = {
+    system.activationScripts.git-init = "${init-script}";
+    
+    # TODO maybe put all scripts here and then use PATH?
+    environment.etc."${etc-base}".source =
+      scriptFarm "git-ssh-authorizers" {
+        authorize-command = makeAuthorizeScript (map ({ repo, user, perm }: [
+          (map getName (ensureList user))
+          (map getName (ensureList repo))
+          (map getName perm.allow-commands)
+        ]) cfg.rules);
+    
+        authorize-push = makeAuthorizeScript (map ({ repo, user, perm }: [
+          (map getName (ensureList user))
+          (map getName (ensureList repo))
+          (ensureList perm.allow-receive-ref)
+          (map getName perm.allow-receive-modes)
+        ]) (filter (x: hasAttr "allow-receive-ref" x.perm) cfg.rules));
+      };
+    
+    users.extraUsers = singleton {
+      description = "Git repository hosting user";
+      name = "git";
+      shell = "/bin/sh";
+      openssh.authorizedKeys.keys =
+        mapAttrsToList (_: makeAuthorizedKey git-ssh-command) cfg.users;
+      uid = 112606723; # genid git
+    };
+  };
+
+
+  ensureList = x:
+    if typeOf x == "list" then x else [x];
+
+  getName = x: x.name;
+
+  isPublicRepo = getAttr "public"; # TODO this is also in ./cgit.nix
+
+  makeAuthorizedKey = git-ssh-command: user@{ name, pubkey }:
+    # TODO assert name
+    # TODO assert pubkey
+    let
+      options = concatStringsSep "," [
+        ''command="exec ${git-ssh-command} ${name}"''
+        "no-agent-forwarding"
+        "no-port-forwarding"
+        "no-pty"
+        "no-X11-forwarding"
+      ];
+    in
+    "${options} ${pubkey}";
+
+  # [case-pattern] -> shell-script
+  # Create a shell script that succeeds (exit 0) when all its arguments
+  # match the case patterns (in the given order).
+  makeAuthorizeScript =
+    let
+      # TODO escape
+      to-pattern = x: concatStringsSep "|" (ensureList x);
+      go = i: ps:
+        if ps == []
+          then "exit 0"
+          else ''
+            case ''$${toString i} in ${to-pattern (head ps)})
+            ${go (i + 1) (tail ps)}
+            esac'';
+    in
+    patterns: ''
+      #! /bin/sh
+      set -euf
+      ${concatStringsSep "\n" (map (go 1) patterns)}
+      exit -1
+    '';
+
+  reponames = rules: sort lessThan (unique (map (x: x.repo.name) rules));
+
+  # TODO makeGitHooks that uses runCommand instead of scriptFarm?
+  scriptFarm =
+    farm-name: scripts:
+    let
+      makeScript = script-name: script-string: {
+        name = script-name;
+        path = pkgs.writeScript "${farm-name}_${script-name}" script-string;
+      };
+    in
+    pkgs.linkFarm farm-name (mapAttrsToList makeScript scripts);
+
+
+  git-ssh-command = pkgs.writeScript "git-ssh-command" ''
+    #! /bin/sh
+    set -euf
+
+    PATH=${makeSearchPath "bin" (with pkgs; [
+      coreutils
+      git
+      gnugrep
+      gnused
+      systemd
+    ])}
+
+    abort() {
+      echo "error: $1" >&2
+      systemd-cat -p err -t git echo "error: $1"
+      exit -1
+    }
+
+    GIT_SSH_USER=$1
+
+    systemd-cat -p info -t git echo \
+      "authorizing $GIT_SSH_USER $SSH_CONNECTION $SSH_ORIGINAL_COMMAND"
+
+    # References: The Base Definitions volume of
+    # POSIX.1‐2013, Section 3.278, Portable Filename Character Set
+    portable_filename_bre="^[A-Za-z0-9._-]\\+$"
+
+    command=$(echo "$SSH_ORIGINAL_COMMAND" \
+      | sed -n 's/^\([^ ]*\) '"'"'\(.*\)'"'"'/\1/p' \
+      | grep "$portable_filename_bre" \
+      || abort 'cannot read command')
+
+    GIT_SSH_REPO=$(echo "$SSH_ORIGINAL_COMMAND" \
+      | sed -n 's/^\([^ ]*\) '"'"'\(.*\)'"'"'/\2/p' \
+      | grep "$portable_filename_bre" \
+      || abort 'cannot read reponame')
+
+    ${cfg.etcDir}/authorize-command \
+        "$GIT_SSH_USER" "$GIT_SSH_REPO" "$command" \
+      || abort 'access denied'
+
+    repodir=${escapeShellArg cfg.dataDir}/$GIT_SSH_REPO
+
+    systemd-cat -p info -t git \
+      echo "authorized exec $command $repodir"
+
+    export GIT_SSH_USER
+    export GIT_SSH_REPO
+    exec "$command" "$repodir"
+  '';
+
+  init-script = pkgs.writeScript "git-init" ''
+    #! /bin/sh
+    set -euf
+
+    PATH=${makeSearchPath "bin" (with pkgs; [
+      coreutils
+      findutils
+      gawk
+      git
+      gnugrep
+      gnused
+    ])}
+
+    dataDir=${escapeShellArg cfg.dataDir}
+    mkdir -p "$dataDir"
+
+    # Notice how the presence of hooks symlinks determine whether
+    # we manage a repositry or not.
+
+    # Make sure that no existing repository has hooks.  We can delete
+    # symlinks because we assume we created them.
+    find "$dataDir" -mindepth 2 -maxdepth 2 -name hooks -type l -delete
+    bad_hooks=$(find "$dataDir" -mindepth 2 -maxdepth 2 -name hooks)
+    if echo "$bad_hooks" | grep -q .; then
+      printf 'error: unknown hooks:\n%s\n' \
+        "$(echo "$bad_hooks" | sed 's/^/  /')" \
+        >&2
+      exit -1
+    fi
+
+    # Initialize repositories.
+    ${concatMapStringsSep "\n" (repo:
+      let
+        hooks = scriptFarm "git-hooks" (makeHooks repo);
+      in
+      ''
+        reponame=${escapeShellArg repo.name}
+        repodir=$dataDir/$reponame
+        mode=${toString (if isPublicRepo repo then 0711 else 0700)}
+        if ! test -d "$repodir"; then
+          mkdir -m "$mode" "$repodir"
+          git init --bare --template=/var/empty "$repodir"
+          chown -R git:nogroup "$repodir"
+        fi
+        ln -s ${hooks} "$repodir/hooks"
+      ''
+    ) (attrValues cfg.repos)}
+
+    # Warn about repositories that exist but aren't mentioned in the
+    # current configuration (and thus didn't receive a hooks symlink).
+    unknown_repos=$(find "$dataDir" -mindepth 1 -maxdepth 1 \
+      -type d \! -exec test -e '{}/hooks' \; -print)
+    if echo "$unknown_repos" | grep -q .; then
+      printf 'warning: stale repositories:\n%s\n' \
+        "$(echo "$unknown_repos" | sed 's/^/  /')" \
+        >&2
+    fi
+  '';
+
+  makeHooks = repo: removeAttrs repo.hooks [ "pre-receive" ] // {
+    pre-receive = ''
+      #! /bin/sh
+      set -euf
+
+      PATH=${makeSearchPath "bin" (with pkgs; [
+        coreutils # env
+        git
+        systemd
+      ])}
+
+      accept() {
+        #systemd-cat -p info -t git echo "authorized $1"
+        accept_string="''${accept_string+$accept_string
+      }authorized $1"
+      }
+      reject() {
+        #systemd-cat -p err -t git echo "denied $1"
+        #echo 'access denied' >&2
+        #exit_code=-1
+        reject_string="''${reject_string+$reject_string
+      }access denied: $1"
+      }
+
+      empty=0000000000000000000000000000000000000000
+
+      accept_string=
+      reject_string=
+      while read oldrev newrev ref; do
+
+        if [ $oldrev = $empty ]; then
+          receive_mode=create
+        elif [ $newrev = $empty ]; then
+          receive_mode=delete
+        elif [ "$(git merge-base $oldrev $newrev)" = $oldrev ]; then
+          receive_mode=fast-forward
+        else
+          receive_mode=non-fast-forward
+        fi
+
+        if ${cfg.etcDir}/authorize-push \
+            "$GIT_SSH_USER" "$GIT_SSH_REPO" "$ref" "$receive_mode"; then
+          accept "$receive_mode $ref"
+        else
+          reject "$receive_mode $ref"
+        fi
+      done
+
+      if [ -n "$reject_string" ]; then
+        systemd-cat -p err -t git echo "$reject_string"
+        exit -1
+      fi
+
+      systemd-cat -p info -t git echo "$accept_string"
+
+      ${optionalString (hasAttr "post-receive" repo.hooks) ''
+        # custom post-receive hook
+        ${repo.hooks.post-receive}''}
+    '';
+  };
+
+  etc-base =
+    assert (hasPrefix "/etc/" cfg.etcDir);
+    removePrefix "/etc/" cfg.etcDir;
+
+in
+out
+
+
+
+
+
+
+
+
+
+
+
+#let
+#  inherit (lib) mkIf mkMerge;
+#
+#  cfg = config.tv.git;
+#  arg' = arg // { inherit cfg; };
+#in
+#
+## TODO unify logging of shell scripts to user and journal
+## TODO move all scripts to ${etcDir}, so ControlMaster connections
+##       immediately pick up new authenticators
+## TODO when authorized_keys changes, then restart ssh
+##       (or kill already connected users somehow)
+#
+#{
+#  imports = [
+#    ../../3modules/tv/nginx.nix
+#  ];
+#
+#  options.tv.git = import ./options.nix arg';
+#
+#  config = mkIf cfg.enable (mkMerge [
+#    (import ./config.nix arg')
+#    (mkIf cfg.cgit (import ./cgit.nix arg'))
+#  ]);
+#}
diff --git a/3modules/tv/identity.nix b/3modules/tv/identity.nix
new file mode 100644
index 000000000..7cf90de01
--- /dev/null
+++ b/3modules/tv/identity.nix
@@ -0,0 +1,71 @@
+{ lib, ... }:
+
+with lib;
+
+let
+
+  cfg = config.tv.identity;
+
+  out = {
+    options.tv.identity = api;
+    #config = mkIf cfg.enable imp;
+  };
+
+  api = {
+    enable = mkOption {
+      type = types.bool;
+      default = false;
+    };
+    self = mkOption {
+      type = types.unspecified;
+    };
+    hosts = mkOption {
+      type = with types; attrsOf unspecified;
+      default = {
+        cd = {
+          #dc = "cac";
+          dc = "tv";
+          fqdn = "cd.retiolum";
+          addr = "10.243.113.222";
+          #addr6 = "42:4522:25f8:36bb:8ccb:0150:231a:2af3";
+          #internet-addr = "162.219.5.183";
+          cores = 2;
+        };
+        mkdir = {
+          #dc = "cac";
+          dc = "tv";
+          fqdn = "mkdir.retiolum";
+          addr = "10.243.113.223";
+          cores = 1;
+        };
+        nomic = {
+          #dc = "gg";
+          dc = "tv";
+          fqdn = "nomic.retiolum";
+          addr = "10.243.0.110";
+          cores = 2;
+        };
+        rmdir = {
+          #dc = "cac";
+          dc = "tv";
+          fqdn = "rmdir.retiolum";
+          addr = "10.243.113.224";
+          #addr = "42:4522:25f8:36bb:8ccb:0150:231a:2af5";
+          cores = 1;
+        };
+        wu = {
+          #dc = "gg";
+          dc = "tv";
+          fqdn = "wu.retiolum";
+          addr = "10.243.13.37";
+          cores = 8;
+        };
+      };
+    };
+  };
+
+  #imp = {
+  #};
+
+in
+out
diff --git a/3modules/tv/iptables.nix b/3modules/tv/iptables.nix
new file mode 100644
index 000000000..096b04e1d
--- /dev/null
+++ b/3modules/tv/iptables.nix
@@ -0,0 +1,129 @@
+{ config, lib, pkgs, ... }:
+
+with builtins;
+with lib;
+let
+  cfg = config.tv.iptables;
+
+  out = {
+    options.tv.iptables = api;
+    config = mkIf cfg.enable imp;
+  };
+
+  api = {
+    enable = mkOption {
+      type = types.bool;
+      default = false;
+    };
+
+    input-internet-accept-new-tcp = mkOption {
+      type = with types; listOf str;
+      default = [];
+    };
+
+    input-retiolum-accept-new-tcp = mkOption {
+      type = with types; listOf str;
+      default = [];
+    };
+  };
+
+  imp = {
+    networking.firewall.enable = false;
+
+    systemd.services.tv-iptables = {
+      description = "tv-iptables";
+      wantedBy = [ "network-pre.target" ];
+      before = [ "network-pre.target" ];
+      after = [ "systemd-modules-load.service" ];
+
+      path = with pkgs; [
+        iptables
+      ];
+      
+      restartIfChanged = true;
+      
+      serviceConfig = {
+        Type = "simple";
+        RemainAfterExit = true;
+        Restart = "always";
+        ExecStart = "@${startScript} tv-iptables_start";
+      };
+    };
+  };
+
+
+  accept-new-tcp = port:
+    "-p tcp -m tcp --dport ${port} -m conntrack --ctstate NEW -j ACCEPT";
+
+  rules = iptables-version:
+    pkgs.writeText "tv-iptables-rules${toString iptables-version}" ''
+      *nat
+      :PREROUTING ACCEPT [0:0]
+      :INPUT ACCEPT [0:0]
+      :OUTPUT ACCEPT [0:0]
+      :POSTROUTING ACCEPT [0:0]
+      ${concatMapStringsSep "\n" (rule: "-A PREROUTING ${rule}") ([]
+        ++ [
+          "! -i retiolum -p tcp -m tcp --dport 22 -j REDIRECT --to-ports 0"
+          "-p tcp -m tcp --dport 11423 -j REDIRECT --to-ports 22"
+        ]
+      )}
+      COMMIT
+      *filter
+      :INPUT DROP [0:0]
+      :FORWARD DROP [0:0]
+      :OUTPUT ACCEPT [0:0]
+      :Retiolum - [0:0]
+      ${concatMapStringsSep "\n" (rule: "-A INPUT ${rule}") ([]
+        ++ [
+          "-m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT"
+          "-i lo -j ACCEPT"
+        ]
+        ++ map accept-new-tcp cfg.input-internet-accept-new-tcp
+        ++ ["-i retiolum -j Retiolum"]
+      )}
+      ${concatMapStringsSep "\n" (rule: "-A Retiolum ${rule}") ([]
+        ++ {
+          ip4tables = [
+            "-p icmp -m icmp --icmp-type echo-request -j ACCEPT"
+          ];
+          ip6tables = [
+            "-p ipv6-icmp -m icmp6 --icmpv6-type echo-request -j ACCEPT"
+          ];
+        }."ip${toString iptables-version}tables"
+        ++ map accept-new-tcp cfg.input-retiolum-accept-new-tcp
+        ++ {
+          ip4tables = [
+            "-p tcp -j REJECT --reject-with tcp-reset"
+            "-p udp -j REJECT --reject-with icmp-port-unreachable"
+            "-j REJECT --reject-with icmp-proto-unreachable"
+          ];
+          ip6tables = [
+            "-p tcp -j REJECT --reject-with tcp-reset"
+            "-p udp -j REJECT --reject-with icmp6-port-unreachable"
+            "-j REJECT"
+          ];
+        }."ip${toString iptables-version}tables"
+      )}
+      COMMIT
+    '';
+
+  startScript = pkgs.writeScript "tv-iptables_start" ''
+    #! /bin/sh
+    set -euf
+    iptables-restore < ${rules 4}
+    ip6tables-restore < ${rules 6}
+  '';
+
+in
+out
+
+#let
+#  cfg = config.tv.iptables;
+#  arg' = arg // { inherit cfg; };
+#in
+#
+#{
+#  options.tv.iptables = import ./options.nix arg';
+#  config = lib.mkIf cfg.enable (import ./config.nix arg');
+#}
diff --git a/3modules/tv/nginx.nix b/3modules/tv/nginx.nix
new file mode 100644
index 000000000..d9d95be84
--- /dev/null
+++ b/3modules/tv/nginx.nix
@@ -0,0 +1,83 @@
+{ config, pkgs, lib, ... }:
+
+with builtins;
+with lib;
+let
+  cfg = config.tv.nginx;
+
+  out = {
+    options.tv.nginx = api;
+    config = mkIf cfg.enable imp;
+  };
+
+  api = {
+    enable = mkOption {
+      type = types.bool;
+      default = false;
+      description = "Enable nginx.";
+    };
+
+    retiolum-locations = mkOption {
+      type = with types; listOf (attrsOf str);
+      default = [];
+    };
+  };
+
+  imp = {
+    services.nginx =
+      let
+        name = config.tv.retiolum.name;
+        qname = "${name}.retiolum";
+      in
+      assert config.tv.retiolum.enable;
+      {
+        enable = true;
+        httpConfig = ''
+          include           ${pkgs.nginx}/conf/mime.types;
+          default_type      application/octet-stream;
+          sendfile          on;
+          keepalive_timeout 65;
+          gzip              on;
+          server {
+            listen 80 default_server;
+            server_name _;
+            location / {
+              return 404;
+            }
+          }
+          server {
+            listen 80;
+            server_name ${name} ${qname};
+
+            ${indent (concatStrings (map to-location cfg.retiolum-locations))}
+
+            location / {
+              return 404;
+            }
+          }
+        '';
+      };
+  };
+
+  
+  indent = replaceChars ["\n"] ["\n  "];
+
+  to-location = { name, value }: ''
+    location ${name} {
+      ${indent value}
+    }
+  '';
+
+in
+out
+
+
+#let
+#  cfg = config.tv.nginx;
+#  arg' = arg // { inherit cfg; };
+#in
+#
+#{
+#  options.tv.nginx = import ./options.nix arg';
+#  config = lib.mkIf cfg.enable (import ./config.nix arg');
+#}
diff --git a/3modules/tv/retiolum.nix b/3modules/tv/retiolum.nix
new file mode 100644
index 000000000..7c78d7124
--- /dev/null
+++ b/3modules/tv/retiolum.nix
@@ -0,0 +1,241 @@
+{ config, pkgs, lib, ... }:
+
+with builtins;
+with lib;
+let
+  cfg = config.tv.retiolum;
+
+  out = {
+    options.tv.retiolum = api;
+    config = mkIf cfg.enable imp;
+  };
+
+  api = {
+    enable = mkOption {
+      type = types.bool;
+      default = false;
+      description = "Enable tinc daemon for Retiolum.";
+    };
+
+    name = mkOption {
+      type = types.str;
+      default = config.networking.hostName;
+      # Description stolen from tinc.conf(5).
+      description = ''
+        This is the name which identifies this tinc daemon.  It must
+        be unique for the virtual private network this daemon will
+        connect to.  The Name may only consist of alphanumeric and
+        underscore characters.  If Name starts with a $, then the
+        contents of the environment variable that follows will be
+        used.  In that case, invalid characters will be converted to
+        underscores.  If Name is $HOST, but no such environment
+        variable exist, the hostname will be read using the
+        gethostnname() system call This is the name which identifies
+        the this tinc daemon.
+      '';
+    };
+
+    generateEtcHosts = mkOption {
+      type = types.str;
+      default = "both";
+      description = ''
+        If set to <literal>short</literal>, <literal>long</literal>, or <literal>both</literal>,
+        then generate entries in <filename>/etc/hosts</filename> from subnets.
+      '';
+    };
+
+    network = mkOption {
+      type = types.str;
+      default = "retiolum";
+      description = ''
+        The tinc network name.
+        It is used to generate long host entries,
+        derive the name of the user account under which tincd runs,
+        and name the TUN device.
+      '';
+    };
+
+    tincPackage = mkOption {
+      type = types.package;
+      default = pkgs.tinc;
+      description = "Tincd package to use.";
+    };
+
+    hosts = mkOption {
+      default = null;
+      description = ''
+        Hosts package or path to use.
+        If a path is given, then it will be used to generate an ad-hoc package.
+      '';
+    };
+
+    iproutePackage = mkOption {
+      type = types.package;
+      default = pkgs.iproute;
+      description = "Iproute2 package to use.";
+    };
+
+
+    privateKeyFile = mkOption {
+      # TODO if it's types.path then it gets copied to /nix/store with
+      #      bad unsafe permissions...
+      type = types.str;
+      default = "/root/src/secrets/retiolum.rsa_key.priv";
+      description = "Generate file with <literal>tincd -K</literal>.";
+    };
+
+    connectTo = mkOption {
+      type = types.listOf types.str;
+      default = [ "fastpoke" "pigstarter" "kheurop" ];
+      description = "TODO describe me";
+    };
+
+  };
+
+  imp = {
+    environment.systemPackages = [ tinc hosts iproute ];
+
+    networking.extraHosts = retiolumExtraHosts;
+
+    systemd.services.retiolum = {
+      description = "Tinc daemon for Retiolum";
+      after = [ "network.target" ];
+      wantedBy = [ "multi-user.target" ];
+      path = [ tinc iproute ];
+      serviceConfig = {
+        PermissionsStartOnly = "true";
+        PrivateTmp = "true";
+        Restart = "always";
+        # TODO we cannot chroot (-R) b/c we use symlinks to hosts
+        #      and the private key.
+        ExecStartPre = pkgs.writeScript "retiolum-init" ''
+          #! /bin/sh
+          install -o ${user} -m 0400 ${cfg.privateKeyFile} /tmp/retiolum-rsa_key.priv
+        '';
+        ExecStart = "${tinc}/sbin/tincd -c ${confDir} -d 0 -U ${user} -D";
+        SyslogIdentifier = "retiolum";
+      };
+    };
+
+    # TODO user.name = "retiolum"
+    users.extraUsers = singleton {
+      name = user;
+      uid = 2961822815; # bin/genid retiolum-tinc
+    };
+  };
+
+
+  tinc = cfg.tincPackage;
+  hostsType = builtins.typeOf cfg.hosts;
+  hosts =
+    if hostsType == "package" then
+      # use package as is
+      cfg.hosts
+    else if hostsType == "path" then
+      # use path to generate a package
+      pkgs.stdenv.mkDerivation {
+        name = "custom-retiolum-hosts";
+        src = cfg.hosts;
+        installPhase = ''
+          mkdir $out
+          find . -name .git -prune -o -type f -print0 | xargs -0 cp --target-directory $out
+        '';
+      }
+    else
+      abort "The option `services.retiolum.hosts' must be set to a package or a path"
+    ;
+  iproute = cfg.iproutePackage;
+
+  retiolumExtraHosts = import (pkgs.runCommand "retiolum-etc-hosts"
+    { }
+    ''
+      generate() {
+        (cd ${hosts}
+          printf \'\'
+          for i in `ls`; do
+            names=$(hostnames $i)
+            for j in `sed -En 's|^ *Aliases *= *(.+)|\1|p' $i`; do
+              names="$names $(hostnames $j)"
+            done
+            sed -En '
+              s|^ *Subnet *= *([^ /]*)(/[0-9]*)? *$|\1  '"$names"'|p
+            ' $i
+          done | sort
+          printf \'\'
+        )
+      }
+
+      case ${cfg.generateEtcHosts} in
+        short)
+          hostnames() { echo "$1"; }
+          generate
+          ;;
+        long)
+          hostnames() { echo "$1.${cfg.network}"; }
+          generate
+          ;;
+        both)
+          hostnames() { echo "$1.${cfg.network} $1"; }
+          generate
+          ;;
+        *)
+          echo '""'
+          ;;
+      esac > $out
+    '');
+
+
+  confDir = pkgs.runCommand "retiolum" {
+    # TODO text
+    executable = true;
+    preferLocalBuild = true;
+  } ''
+    set -euf
+
+    mkdir -p $out
+
+    ln -s ${hosts} $out/hosts
+
+    cat > $out/tinc.conf <<EOF
+    Name = ${cfg.name}
+    Device = /dev/net/tun
+    Interface = ${cfg.network}
+    ${concatStrings (map (c : "ConnectTo = " + c + "\n") cfg.connectTo)}
+    PrivateKeyFile = /tmp/retiolum-rsa_key.priv
+    EOF
+
+    # source: krebscode/painload/retiolum/scripts/tinc_setup/tinc-up
+    cat > $out/tinc-up <<EOF
+    host=$out/hosts/${cfg.name}
+    ${iproute}/sbin/ip link set \$INTERFACE up
+
+    addr4=\$(sed -n 's|^ *Subnet *= *\(10[.][^ ]*\) *$|\1|p' \$host)
+    if [ -n "\$addr4" ];then
+        ${iproute}/sbin/ip -4 addr add \$addr4 dev \$INTERFACE
+        ${iproute}/sbin/ip -4 route add 10.243.0.0/16 dev \$INTERFACE
+    fi
+    addr6=\$(sed -n 's|^ *Subnet *= *\(42[:][^ ]*\) *$|\1|p' \$host)
+    ${iproute}/sbin/ip -6 addr add \$addr6 dev \$INTERFACE
+    ${iproute}/sbin/ip -6 route add 42::/16 dev \$INTERFACE
+    EOF
+
+    chmod +x $out/tinc-up
+  '';
+
+
+  user = cfg.network + "-tinc";
+
+in
+out
+
+
+
+#let
+#  cfg = config.tv.retiolum;
+#  arg' = arg // { inherit cfg; };
+#in
+#
+#{
+#  options.tv.retiolum = import ./options.nix arg';
+#  config = lib.mkIf cfg.enable (import ./config.nix arg');
+#}
diff --git a/3modules/tv/urlwatch.nix b/3modules/tv/urlwatch.nix
new file mode 100644
index 000000000..d6e796ca7
--- /dev/null
+++ b/3modules/tv/urlwatch.nix
@@ -0,0 +1,156 @@
+{ config, lib, pkgs, ... }:
+
+# TODO multiple users
+# TODO inform about unused caches
+# cache = url: "${cfg.dataDir}/.urlwatch/cache/${hashString "sha1" url}"
+# TODO hooks.py
+
+with builtins;
+with lib;
+
+let
+  cfg = config.tv.urlwatch;
+
+  api = {
+    dataDir = mkOption {
+      type = types.str;
+      default = "/var/lib/urlwatch";
+      description = ''
+        Directory where the urlwatch service should store its state.
+      '';
+    };
+    enable = mkOption {
+      type = types.bool;
+      default = false;
+      description = ''
+        Whether to enable the urlwatch service.
+        If enabled, then create a timer that calls urlwatch and sends mails
+        whenever something has changed or an error occurs.
+      '';
+    };
+    from = mkOption {
+      type = types.str;
+      default = "${cfg.user}@${config.networking.hostName}.retiolum";
+      description = ''
+        Content of the From: header of the generated mails.
+      '';
+    };
+    mailto = mkOption {
+      type = types.str;
+      description = ''
+        Content of the To: header of the generated mails. [AKA recipient :)]
+      '';
+    };
+    onCalendar = mkOption {
+      type = types.str;
+      description = ''
+        Run urlwatch at this interval.
+        The format is described in systemd.time(7), CALENDAR EVENTS.
+      '';
+      example = "04:23";
+    };
+    urls = mkOption {
+      type = with types; listOf str;
+      description = "URL to watch.";
+      example = [
+        https://nixos.org/channels/nixos-unstable/git-revision
+      ];
+    };
+    user = mkOption {
+      type = types.str;
+      default = "urlwatch";
+      description = "User under which urlwatch runs.";
+    };
+  };
+
+  urlsFile = toFile "urls" (concatStringsSep "\n" cfg.urls);
+
+  impl = {
+    systemd.timers.urlwatch = {
+      wantedBy = [ "timers.target" ];
+      timerConfig = {
+        OnCalendar = cfg.onCalendar;
+        Persistent = "true";
+      };
+    };
+    systemd.services.urlwatch = {
+      path = with pkgs; [
+        coreutils
+        gnused
+        urlwatch
+      ];
+      environment = {
+        HOME = cfg.dataDir;
+        LC_ALL = "en_US.UTF-8";
+        LOCALE_ARCHIVE = "${pkgs.glibcLocales}/lib/locale/locale-archive";
+        SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
+      };
+      serviceConfig = {
+        User = cfg.user;
+        PermissionsStartOnly = "true";
+        PrivateTmp = "true";
+        Type = "oneshot";
+        ExecStartPre =
+          pkgs.writeScript "urlwatch-prestart" ''
+            #! /bin/sh
+            set -euf
+
+            dataDir=$HOME
+            user=${escapeShellArg cfg.user}
+
+            if ! test -e "$dataDir"; then
+              mkdir -m 0700 -p "$dataDir"
+              chown "$user": "$dataDir"
+            fi
+          '';
+        ExecStart = pkgs.writeScript "urlwatch" ''
+          #! /bin/sh
+          set -euf
+
+          from=${escapeShellArg cfg.from}
+          mailto=${escapeShellArg cfg.mailto}
+          urlsFile=${escapeShellArg urlsFile}
+          user=${escapeShellArg cfg.user}
+
+          cd /tmp
+
+          urlwatch -e --urls="$urlsFile" > changes 2>&1 || :
+
+          if test -s changes; then
+            date=$(date -R)
+            subject=$(sed -n 's/^\(CHANGED\|ERROR\|NEW\): //p' changes \
+              | tr \\n \ )
+            {
+              echo "Date: $date"
+              echo "From: $from"
+              echo "Subject: $subject"
+              echo "To: $mailto"
+              echo
+              cat changes
+            } | /var/setuid-wrappers/sendmail -t
+          fi
+        '';
+      };
+    };
+    users.extraUsers = optionals (cfg.user == "urlwatch") (singleton {
+      name = "urlwatch";
+      uid = 3450919516; # bin/genid urlwatch
+    });
+  };
+
+in
+
+{
+  # TODO
+  #imports = [
+  #  ./exim
+  #];
+  #config = mkIf cfg.enable
+  #  (if config.tv.exim.enable
+  #    then impl
+  #    else throw "tv.exim must be enabled when enabling tv.urlwatch");
+
+  options.tv.urlwatch = api;
+  
+  config = impl;
+}
diff --git a/4lib/tv/default.nix b/4lib/tv/default.nix
new file mode 100644
index 000000000..164a6a1aa
--- /dev/null
+++ b/4lib/tv/default.nix
@@ -0,0 +1,62 @@
+{ lib, pkgs, ... }:
+
+with builtins;
+
+let
+  inherit (lib) mapAttrs stringAsChars;
+in
+
+rec {
+  git = import ./git.nix {
+    lib = lib // {
+      inherit addNames;
+    };
+    inherit pkgs;
+  };
+
+  addName = name: set:
+    set // { inherit name; };
+
+  addNames = mapAttrs addName;
+
+
+  # "7.4.335" -> "74"
+  majmin = with lib; x : concatStrings (take 2 (splitString "." x));
+
+
+  concat = xs :
+    if xs == []
+      then ""
+      else head xs + concat (tail xs)
+    ;
+
+  flip = f : x : y : f y x;
+
+  # isSuffixOf :: String -> String -> Bool
+  isSuffixOf =
+    s : xs :
+      let
+        sn = stringLength s;
+        xsn = stringLength xs;
+      in
+        xsn >= sn && substring (xsn - sn) sn xs == s ;
+
+  removeSuffix =
+    s : xs : substring 0 (stringLength xs - stringLength s) xs;
+
+  # setMap :: (String -> a -> b) -> Set String a -> [b]
+  #setMap = f: xs: map (k : f k (getAttr k xs)) (attrNames xs);
+
+  # setToList :: Set k a -> [a]
+  #setToList = setMap (_: v: v);
+
+  shell-escape =
+    let
+      isSafeChar = c: match "[-./0-9_a-zA-Z]" c != null;
+    in
+    stringAsChars (c:
+      if isSafeChar c then c
+      else if c == "\n" then "'\n'"
+      else "\\${c}");
+
+}
diff --git a/4lib/tv/git.nix b/4lib/tv/git.nix
new file mode 100644
index 000000000..8dc176114
--- /dev/null
+++ b/4lib/tv/git.nix
@@ -0,0 +1,181 @@
+{ lib, pkgs, ... }:
+
+let
+  inherit (lib) addNames escapeShellArg makeSearchPath;
+
+  commands = addNames {
+    git-receive-pack = {};
+    git-upload-pack = {};
+  };
+
+  receive-modes = addNames {
+    fast-forward = {};
+    non-fast-forward = {};
+    create = {};
+    delete = {};
+    merge = {}; # TODO implement in git.nix
+  };
+
+  permissions = {
+    fetch = {
+      allow-commands = [
+        commands.git-upload-pack
+      ];
+    };
+
+    push = ref: extra-modes: {
+      allow-commands = [
+        commands.git-receive-pack
+        commands.git-upload-pack
+      ];
+      allow-receive-ref = ref;
+      allow-receive-modes = [ receive-modes.fast-forward ] ++ extra-modes;
+    };
+  };
+
+  refs = {
+    master = "refs/heads/master";
+    all-heads = "refs/heads/*";
+  };
+
+  irc-announce-script = pkgs.writeScript "irc-announce-script" ''
+    #! /bin/sh
+    set -euf
+
+    export PATH=${makeSearchPath "bin" (with pkgs; [
+      coreutils
+      gawk
+      gnused
+      netcat
+      nettools
+    ])}
+
+    IRC_SERVER=$1
+    IRC_PORT=$2
+    IRC_NICK=$3$$
+    IRC_CHANNEL=$4
+    message=$5
+
+    export IRC_CHANNEL # for privmsg_cat
+
+    # 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"
+
+      printf '%s' "$message" \
+        | 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
+  '';
+
+  hooks = {
+    # TODO make this a package?
+    irc-announce = { nick, channel, server, port ? 6667 }: ''
+      #! /bin/sh
+      set -euf
+
+      export PATH=${makeSearchPath "bin" (with pkgs; [
+        coreutils
+        git
+        gnused
+      ])}
+
+      nick=${escapeShellArg nick}
+      channel=${escapeShellArg channel}
+      server=${escapeShellArg server}
+      port=${toString port}
+
+      host=$nick
+
+      empty=0000000000000000000000000000000000000000
+
+      unset message
+      while read oldrev newrev ref; do
+
+        if [ $oldrev = $empty ]; then
+          receive_mode=create
+        elif [ $newrev = $empty ]; then
+          receive_mode=delete
+        elif [ "$(git merge-base $oldrev $newrev)" = $oldrev ]; then
+          receive_mode=fast-forward
+        else
+          receive_mode=non-fast-forward
+        fi
+
+        h=$(echo $ref | sed 's:^refs/heads/::')
+
+        # empty_tree=$(git hash-object -t tree /dev/null
+        empty_tree=4b825dc6
+
+        id=$(echo $newrev | cut -b-7)
+        id2=$(echo $oldrev | cut -b-7)
+        if [ $newrev = $empty ]; then id=$empty_tree; fi
+        if [ $oldrev = $empty ]; then id2=$empty_tree; fi
+
+        case $receive_mode in
+          create)
+            #git log --oneline $id2
+            link="http://$host/cgit/$GIT_SSH_REPO/?h=$h"
+            ;;
+          delete)
+            #git log --oneline $id2
+            link="http://$host/cgit/$GIT_SSH_REPO/ ($h)"
+            ;;
+          fast-forward|non-fast-forward)
+            #git diff --stat $id..$id2
+            link="http://$host/cgit/$GIT_SSH_REPO/diff/?h=$h&id=$id&id2=$id2"
+            ;;
+        esac
+
+        #$host $GIT_SSH_REPO $ref $link
+        message="''${message+$message
+      }$GIT_SSH_USER $receive_mode $link"
+      done
+
+      if test -n "''${message-}"; then
+        exec ${irc-announce-script} \
+          "$server" \
+          "$port" \
+          "$nick" \
+          "$channel" \
+          "$message"
+      fi
+    '';
+  };
+
+in
+commands // receive-modes // permissions // refs // hooks
diff --git a/4lib/tv/modules.nix b/4lib/tv/modules.nix
new file mode 100644
index 000000000..248e638ea
--- /dev/null
+++ b/4lib/tv/modules.nix
@@ -0,0 +1,21 @@
+let
+  pkgs = import <nixpkgs> {};
+  inherit (pkgs.lib) concatMap hasAttr;
+in rec {
+
+  no-touch-args = {
+    config = throw "no-touch-args: can't touch config!";
+    lib = throw "no-touch-args: can't touch lib!";
+    pkgs = throw "no-touch-args: can't touch pkgs!";
+  };
+
+  # list-imports : path -> [path]
+  # Return a module's transitive list of imports.
+  # XXX duplicates won't get eliminated from the result.
+  list-imports = path:
+    let module = import path no-touch-args;
+        imports = if hasAttr "imports" module
+                    then concatMap list-imports module.imports
+                    else [];
+    in [path] ++ imports;
+}
diff --git a/Makefile b/Makefile
new file mode 100644
index 000000000..67364305c
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,70 @@
+ifndef system
+$(error unbound variable: system)
+else
+include 0make/tv/$(system).makefile
+.ONESHELL:
+.SHELLFLAGS := -eufc
+.PHONY: deploy
+deploy:;@
+	system_name=$(system)
+	deploy_host=$(deploy_host)
+	nixpkgs_url=$(nixpkgs_url)
+	nixpkgs_rev=$(nixpkgs_rev)
+	secrets_dir=$(secrets_dir)
+
+	prepush(){(
+		dst=$$1
+		src=$$2
+		rsync \
+			--exclude .git \
+			--rsync-path="mkdir -p \"$$dst\" && rsync" \
+			--usermap=\*:0 \
+			--groupmap=\*:0 \
+			--delete-excluded \
+			-vrLptgoD \
+			"$$src/" "$$deploy_host:$$dst"
+	)}
+
+	prepush /root/src/shitment "$$PWD"
+	prepush /root/src/secrets "$$secrets_dir"
+
+	ssh -S none "$$deploy_host" -T env \
+			nixpkgs_url="$$nixpkgs_url" \
+			nixpkgs_rev="$$nixpkgs_rev" \
+			system_name="$$system_name" \
+		sh -euf \
+	<<-\EOF
+		prefetch(){(
+			dst=$$1
+			url=$$2
+			rev=$$3
+			mkdir -p "$$dst"
+			cd "$$dst"
+			if ! test -e .git; then
+				git init
+			fi
+			if ! cur_url=$$(git config remote.origin.url 2>/dev/null); then
+				git remote add origin "$$url"
+			elif test "$$cur_url" != "$$url"; then
+				git remote set-url origin "$$url"
+			fi
+			if test "$$(git rev-parse --verify HEAD 2>/dev/null)" != "$$rev"; then
+				git fetch origin
+				git checkout "$$rev" -- .
+				git checkout -q "$$rev"
+				git submodule init
+				git submodule update
+			fi
+			git clean -dxf
+		)}
+
+		prefetch /root/src/nixpkgs "$$nixpkgs_url" "$$nixpkgs_rev"
+
+		echo build system...
+		NIXOS_CONFIG=/root/src/shitment/1systems/tv/$$system_name.nix \
+		NIX_PATH=src \
+			nix-build -Q -A system '<nixpkgs/nixos>'
+
+		result/bin/switch-to-configuration switch
+	EOF
+endif
diff --git a/Zhosts/Styx b/Zhosts/Styx
new file mode 100644
index 000000000..fad453168
--- /dev/null
+++ b/Zhosts/Styx
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.42/32
+Compression = 9
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA4jbOi+HZIGOGNm4aBSwnq4m3Vg3IXHmYUbJx1AzP4a/yvEgswfk6
+MP5FXvoY/hZ0NQ0IRzbbJxGbcUdulz0WSjX1C+8uQUZstz+lvYZ4FeCXcdE5cuFM
+ROKAbA4qxO3WOFhPAs4G+K6srDqswmmBSfgPAfOBexEZxHweoBQLOYKUPnBCWf5q
+I1gKWgMVWv6KY/pgYxloarycb8gEd2GsNZcNwoNhRd2G/Tn6idh1qRBI96eaasbV
+P24FEVkPVFVgIGrvFZCICCeQzA4g+Sn4TmgxnTWLQxG4hAHOZQX/ld8u7NHTU9Qm
+PwmjESwfas9Z8UjknrbcaZvuqKrnMp7JwwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/ThinkArmageddon b/Zhosts/ThinkArmageddon
new file mode 100644
index 000000000..e51e1c92b
--- /dev/null
+++ b/Zhosts/ThinkArmageddon
@@ -0,0 +1,9 @@
+Subnet = 10.243.0.137/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1EAiyBWICkyB1zHE31fHSbGR1nJJmXSfnrqm9yXRZSGweIKrbsof
+QVcRzM4vsFBRUMBeKW7fzlGcvgXULFRnGelvEl4GRiBMO9odBlBI3t8CjZW7X2N7
+JqCMkB+CRuiHbNYQdRFTozQEfPq+DNh8accD5LjUM6gF0dKUdby5qNeHCfZSxU4v
+YZDRqq/haO4up6m8/S6YhnHPOSaIAu7R7hFaUeB/FPT+s5irKk6WtAiWnIdXb22q
+0zxT4+t9sWFb4V9u/MImggYQVWjk+TfF5KpihBOvExEQsSR8JJcRUJAtN4W0w2Pc
+S4/j9ArKcBj5Wf2qHcJMN5MbwUFW1oMkGwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/TriBot b/Zhosts/TriBot
new file mode 100644
index 000000000..821046f5d
--- /dev/null
+++ b/Zhosts/TriBot
@@ -0,0 +1,11 @@
+Subnet = 10.243.117.163
+Subnet = 42:ff05:504f:f27a:3534:9be1:4343:5e95
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAz8pZtvSqDEKo/8IHt71GzWa2oTqZPUv2kRoipUXbJGv3eWpkbd4n
+OpaLuY7MjUveZ39m830t5RAkgB9iChU5wurszgfLrxJ15uibJe+yFJl9O6kuYJr1
+69s12F/v/pPno5eWuXWJ+CdMW8srZB1I/ZIL1/GaptuDoMxu7uBnDbL/NJrpPBSr
+JxCJGHET8jh2++B3cqsBWNGkQjQTM8NwwAup6HQjBrbOQYOAQbcOTMmalc/9JFfO
+LUz63LrCPk5pIeLi+876IdAJBuJsVWwmTbl/D9R6D34Z8bYHIv9mDmO/omckcxX2
+JJgEq5/xlLb2gHt/qfUunbYHIstp/s2bSwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/ach b/Zhosts/ach
new file mode 100644
index 000000000..7774f17c4
--- /dev/null
+++ b/Zhosts/ach
@@ -0,0 +1,11 @@
+Subnet = 10.243.32.89
+Subnet = 42:6bb3:0a07:6777:9aa5:e39c:e140:cb68
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAsTyjNQ5aO2aIKXgkgZSiUb0POtEVoAPFrIkSv5Ci+7AYv+CLXsIr
+TKBfFIg474KZ4MCrX0oA3Z66s9d2UW6mcH5JufW8siRPJvdydqaANyF6Fvk++59R
++GMKR0MGdPGfcxjaw64ChemOZx1T6ODHF7KTgaWRI+Aiz+jWsvVCSKutSwVDJTgJ
+4lub95/gbWckRY6fchkh7rSTfNXXYevbysQYdZaAR/qgquUNt23/ewlagF7uqgZt
+CQx7MHMU2quEdvIfZuUPFWe0yHBb1bZCHYxKXo6XG8I7WdUAFRuwFLTjqgSYPD1j
+EpUyU0+xxfyXB3vWrM/jcw8XKzi04wWHuQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/air b/Zhosts/air
new file mode 100644
index 000000000..f27106f0e
--- /dev/null
+++ b/Zhosts/air
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.99
+Subnet = 42:32d7:b589:8ae8:57a5:4cde:f49e:851d/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1yNqMyy9C1O031M518kzLYLh+Ox0D2r9UgVSSb9OgpQ85ZJgl7Kb
+SUzlZLbC9CX4O+PmtWvZwtPfLjua9VbVOtUJTB6zTB9Oqe4hTmX0oKIgheGf1rKS
+ylOaLfSz7PaPR3zGms17F4ovLDUBG2rpOyoHJM54T9LyJbPny/t7v/fjAFqu6atK
+1RgER3j3s5oPaRPw0pYR0kiGXayZRL6q7Qc6AXMlMi22sdRI9e1YCMCyC4u1oU6U
+grw7khyPWoEaue9B7fKfG5PixRHHlrsVDdwXEVvH87+/X2IU3H3C1/pslenAQ98i
+qGNJOl2eJ9FHInQjI1cDMgFURcT6i8mGpQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/alarmpi b/Zhosts/alarmpi
new file mode 100644
index 000000000..205b0d838
--- /dev/null
+++ b/Zhosts/alarmpi
@@ -0,0 +1,11 @@
+Subnet = 10.243.124.187
+Subnet = 42:2de9:fab6:7460:2fee:9199:fa1d:70ea
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAunQOFP1mnEmsmnMYjCwbWdbGe0/hHQs2bxIdwO1RXngXgw/TBBhN
+Xlp75LzPiT0ELF5WBPVclqskT+bl+FOOITH9XDkYzm22jzeLHq3bs3YiZhwzidkO
+Xhq5pwGY4HL4o3SfFtfOHse688qqLXefoc9CfyAIKMCRRAxlzpqNVuZEg1eUcuUJ
+z6gugJj+YyA4V3JGq7GuJDiPPOMrGel0rITMlWtYYtm0jf6deYBPjo+ZogDESlez
+tBmPKNCXynSxb6cV39StUsbUQbLvHgPBrA01T+Hw1DV5eHmWoycvD4IfJqXdfMbc
+BOqRHOlErXGTG5m2EUoU0VSj75zl06gW6wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/albi10 b/Zhosts/albi10
new file mode 100644
index 000000000..9bcca7ccd
--- /dev/null
+++ b/Zhosts/albi10
@@ -0,0 +1,11 @@
+Address = 74.122.198.15
+Subnet = 10.243.0.10
+Subnet = 42:aaa9:4ba3:8c43:bdd8:2cc8:29a0:e8e6/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0Jz5rQ7NpIQWwhDsrZHlJYAnC1k1onl2ln/6CJbdV9t3gG2hlx/9
+0SEARo6sq9fftyzzZd3iY4WK7+zRXJFXHsLmDa6mq8Mme7Yv+YHZoHPTm9c3tN3v
+laiV/qAdoi/sv43DCo7JywI2lTW1pPxuitXuud2ajd7GXuCoRqFRqLtaURorVKkW
+4j9UGpMKrEa+CV9wP5jZ57RSPQ7aMq8D4GiMqKDgUeCZnvXxpYWDOEdGNlpuUcWt
+/erC6u50/vnjUkkHx66OmkZe5AX5MmwNp2q4zC4sTh/BRhqk27AmNl5wbp0kL7/B
+hg+r0F8ckrdLc21sSU36lUIeeFa/S+A06QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/albi7 b/Zhosts/albi7
new file mode 100644
index 000000000..32cf0dc84
--- /dev/null
+++ b/Zhosts/albi7
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.7/32
+Subnet = 42:6c61:6962:6137:626c:3769:000a:1337/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA+SwdWv1anjIaKSnvel9d23tgqye5RguIVfgMnjpMsqOYpFklLIa8
+4wREhVvpiArnIsoTXbKzdeCFgaAbMS6aQ701Pyv7QriVy8m3iUlgqvB/znogxN8U
+z1fqL0jAHLkQkoyZ2a6mUgHpByvUqZNcq6istYLwGnXO3JQrS7U54hHPpXbxwFY5
+0/Wli9OueG4fWaZ9skDa2Faq4c/Lngku+Iv1gBBgII1EDSsgedNWw3YBTmHDFNTZ
+SsORj2ho5nQgdvw42qEINbxpU01jK8XB+jmVEO+ixZZCsWlOeCjl9Zym4MZDRePg
+euTLTbgs/809ElM8V+EzRKSPNR2k6FrBXwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/almoehi b/Zhosts/almoehi
new file mode 100644
index 000000000..d856f682f
--- /dev/null
+++ b/Zhosts/almoehi
@@ -0,0 +1,11 @@
+Subnet = 10.243.239.66
+Subnet = 42:0730:2eed:2bb9:9d4b:eeb1:641c:0fe6
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAtyfcqaDrDmsBVh5w4CksDI1Hn/jDcZVyNWZlqxQojjB2SsxH1VyD
+VcpmwyzDSE87CCZPN4xjIbrc+KgjiOVSAu+8Ax4dLqVrP96s5lJUIunVcwd3lQVi
+D7Ol2zDredbXuNi3jb0qBU+/qiK9mp1vTcEXhXmCSTiXIHz0d7vkv9S0h+YgKGMJ
+xBQsyCsEI9uAeGghVwrLcwY0ea6ZJuYz0miIn9+g4D5PROxImBAJV6uvbG0cP8QG
+rLY85YYByk2qKPIXrpec4uc1A/P1+1DSl5I+GEkBBhSmQB71UYCDULfuL4Eu6mFN
+AFAPsSCk8DFo5//lULky24CEkxTtp4rcPwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/alphalabs b/Zhosts/alphalabs
new file mode 100644
index 000000000..e5f98d692
--- /dev/null
+++ b/Zhosts/alphalabs
@@ -0,0 +1,10 @@
+Subnet = 42:0:0:0:0:0:0:a1fa/128
+Subnet = 10.243.1.10/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvUAbMmmOFn+4kOvJAvmi0R/XCQa1YBlkjUvC6Pmt0Q8gV1DodXjB
+DgwP8yhLcxaVy2Hk82aJvNTUrfMeB2sdt1RJHQiEPQkHthdp8Spm0Px4uTiMjmFB
+ev91xi00eCCGIKsXdh/qso1K7EDHt9MEVHOvSlkawWzoyJ6AaHStW1ElwDdGjZpl
+0YWrhx4Gk5X7pCp3LKkQJFfGtqoqGOVg2JjqK3qMsAdRo6QvYDqjFzARed/D0k55
+kcKXjBJAVxoU/CqGfS/Lr0fL8tdYgXaAXvPO9dbr1t0KyOUY2KRNBePeSvRp/etb
+H0LBPsO9F7PQiPI3DBoWCYgsuj/hBXapvwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/apfull b/Zhosts/apfull
new file mode 100644
index 000000000..c64750b84
--- /dev/null
+++ b/Zhosts/apfull
@@ -0,0 +1,11 @@
+Subnet = 10.243.138.112
+Subnet = 42:0707:afc5:96a3:8215:305e:0474:02fb
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAxNnJB29djjUFUZqM7EQ8kj+IRx/a+2fA0ZdNoUm4ar6t7kTmOc40
+GzGr0zE+QPqQ3abDk7eTmZbU3yUNiAUDzDMD+iqwKAVJnMb8pjXlGmcpdvMuxwbz
+bHeTEaVqBmF4seXlwUKL+waa2Yr1t0YsynCUte8dbcauaD9CY61QjDUP7TQBglmk
+eKq+qbFNKjzIjLQf2iXsl2+dzuFqg4OUaUD0zZJVzjNpKSz24uEK2mD9fSmS3oYF
+yzsNaOKaXr/j+1Xlosxy9Rde/o54UbtZTPYsNdhNgnXmBan4zTv/QnI67Uf9RqiK
+PHsSAkfCj/K7iAOKE/A30xYbd8eV2tPANwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/bitchctl b/Zhosts/bitchctl
new file mode 100644
index 000000000..8f188a2ae
--- /dev/null
+++ b/Zhosts/bitchctl
@@ -0,0 +1,11 @@
+Subnet = 10.243.104.101
+Subnet = 42:5ac9:c698:4d1d:6ec5:45b9:647b:a8ee
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAuxd4ZU3y1ZgvI+/7mQkWBlF6VvX6ty8+iKYwmjsSUCclxz3O5DB+
+clps9k+0tQvtKlsxG3lnFQz9fd4Pj0GIuWsAdHRH/hpnb9nYSRePKWy0RBjAZRr4
+8rXqI8NOdkQiIQT8gWw3ujzw/Mau/bV6AWqi+CbeExm+J0bPW/QZlAZ4BEKFvuqK
+U8yOQ38p9s3Dpe4S5JZ3cu54j5f5JygXTZgk2ZW3frJ/JS+lRHfFlIW0ZAuTqn/u
+GD5ahHLbRZPGsG5aSR+agfOVIAHLBnDoFx6AQUr09m4zyMgPEC+Xq/DvdP/Hvuas
+RYRol9qHtNeFJViWIUOQPHypTw2a4Ev7fQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/bitchextend b/Zhosts/bitchextend
new file mode 100644
index 000000000..82d8ffa43
--- /dev/null
+++ b/Zhosts/bitchextend
@@ -0,0 +1,11 @@
+Subnet = 10.243.141.142
+Subnet = 42:f8a6:9f59:381d:eedf:d90d:8611:4a9e
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA02Zp9aYkEn5yLSaOhrmuFzObpmWdZfT5OWzE11LUeoCu4rsEZY9T
+DB93iliJpxKYuLnmI49vGfSSzqGs6B2yoh6Y60OsrYrvBSQ2Li3aTOqUTL8GpR6Y
+GivInlr6F5/T+6BEg8paau/1rwRE/r2cJ78AvG1nd+JtRL9Hl4tYPakOVIbRk3D9
+4qDtWDWZS5BdirbaO66wvYxS8ps14LRvyVkjiT7IPMXf8p6rxumXPIr3JtJ6QC/K
+DKuP95v0vztZm3U32hO92NB+mDb0XjGSOaspEl2HX45phad6GnGBPqhGpSv47xDa
+HprcO9uxkGcEhyQtCALWD8THX1SNoNHh0QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/bitchtop b/Zhosts/bitchtop
new file mode 100644
index 000000000..975575efa
--- /dev/null
+++ b/Zhosts/bitchtop
@@ -0,0 +1,11 @@
+Subnet = 10.243.12.178
+Subnet = 42:4119:cdae:6fb4:0b58:59c6:a993:17ea
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA3NJmRzOn5e8FwhlcdvjIwZSvCL2eJ/lJ6E3/m/BOy7qUneMwfotE
+DarxHFxd6ccMLK8yH0fUuTC9zKVud6bw5Xfaw8BnFm8QXTr3eSwol3Lq1I8+k06I
+PZ5a3tkdK7bQxOi+v70jGyR9E/Q1D7fP6L/q9L3W2RmNivlvS5qi5LgfxiEkFvgM
+EO1FPfXwTKhBCB5LqFY4e+viyGxjZ+nK55QgacU7MMNEJN0ntvSp4pLepL29q7ZN
+wSRAjZC3PJX5QZtOOtCYAJ0QqsUv8vZPhaObwPfLvGHku2vl9E8TH+HY0DWjvrte
+E9ZjPn19RWRFExiK2KpbfTJezFULhaAQaQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/box b/Zhosts/box
new file mode 100644
index 000000000..e02f8ca67
--- /dev/null
+++ b/Zhosts/box
@@ -0,0 +1,10 @@
+Subnet = 10.243.43.43
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvUMfRZOPb/zKvALZTyxKQuzowqqJ/HW2lm/RIOKL2uoTUgVX1DJB
+fCLf66e2fHnjnStXuaMDNs1kq2gi4EyK5Q50RxVBq7XayXYqfnFwzTE+Iqape542
+vYSWKLdrxljln8a2EYU7njtcWkTpW+cJIwSHEUkDLAowF87ElQ0gBmyX4p107pow
+jg7zcYierVdQXkI7mO4g2zWsywfhwscbu5hdCp1Fw3wHFDatgyhPj1pJruKe+O3c
+AebF5yQOAsCxAk8ZcwGLmmF5xK7lAeux2Qzu1B4Pkfxi97g1GVLnX+so7PR+vvkQ
++OMzQGIWXtaOqov5q2O1N5RJzng/kCjC/QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/bridge b/Zhosts/bridge
new file mode 100644
index 000000000..db75113be
--- /dev/null
+++ b/Zhosts/bridge
@@ -0,0 +1,12 @@
+Subnet = 10.243.26.29
+Subnet = 42:927a:3d59:1cb3:29d6:1a08:78d3:812e
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEApeeMSYMuXg4o/fNHnG2ftp2WskZLrt63zhRag7U1HqYUnuPqY60d
+VVy9MBTawm6N02nC2Svm3V07ZXaRp/XsXQLx+evZcDjPjnDYgl2ZGX0ir5Cn50bm
+UzhJiMW6/J7AYvucgeAaVJ0YmIwRw6ndYGcxmXWi4TK0jSzhuSLgookWM6iJfbdB
+oaYsjiXisEvNxt7rBlCfacaHMlPhz3gr1gc4IDCwF+RAMM29NUN3OinI+/f56d7b
+/hLZWbimiwtvGVsGLiA2EIcfxQ7aD/LINu+XXMaq7f8QByXj/Lzi7456tDi3pdJg
+lyg9yqRJYt4Zle5PVejn08qiofTUmlEhnwIDAQAB
+-----END RSA PUBLIC KEY-----
+
diff --git a/Zhosts/c2ft b/Zhosts/c2ft
new file mode 100644
index 000000000..8ce0539e2
--- /dev/null
+++ b/Zhosts/c2ft
@@ -0,0 +1,10 @@
+Subnet = 42:e674:8a82:7fe4:fa51:d305:192e:846b/128
+Subnet = 42.221.17.214/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAqS+nvuQnAlhsGHgjKRz0nq2nj9HWwzrA96xnng6UCmkTpFyprM7b
+20vQ5wqcHFAbuZh1dOOb9G2qqsZYE6V1452YLZZLMsnxiJD8kSorHrF6kJid5JjH
+xyyqSvkXaHClQItVjo7rIn5P/Tl+BMt64KaPxpu/4GBVHkCE1apLtaVRnEq5t2DG
+htZuUqzhuLN4TQiSVC++7qY1UQotjLbAQpYxf67np5sKWMOqg5UA+ghuLeO9jpqL
+qKoh2TMzotGwlYBMXVA0jJtQu5Sq/IWKWAyk9zca2LT0W0ZZWYiTl+Ai5urbJgCV
+GvWeJCoBKteIKUHRVNK1RLDFl6/ITOu9XQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/c2fthome b/Zhosts/c2fthome
new file mode 100644
index 000000000..a8eaabc97
--- /dev/null
+++ b/Zhosts/c2fthome
@@ -0,0 +1,10 @@
+Address = samularity.mine.nu
+Subnet = 42.44.64.126/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA4ADumWibheOOocw3diK27ww4xfyptLZzlPcih5BJFUPOljXN33th
+1rbFwBr0QyRSad5U+/w1qlTCCqadjNdu+0RPGxbCrEqE3bUlrbES3Fw1ZtyIeuRH
+v6yTQuOzJXyceGGYJpK4JjFgFOggSH35dURDa1+x3pJECyWUAVDknWE5CS7HNufW
+bcREh18LoTUi7SGPeWauDLvVb/eeuDNJkoFj+HWpNqupFXpXUD7vQ+FBTtKO9FZu
+vd/QGYv7gkRGQfma3+2XW9fWgIfE1oS0qf4UfbycaEKMFS5Tn7li3tzCcH9Da4iB
+SsyWm1Hg1UYXccBdDYWYo+vdG59hIjmh8wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/casino b/Zhosts/casino
new file mode 100644
index 000000000..e35691c3c
--- /dev/null
+++ b/Zhosts/casino
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.233
+Subnet = 42:3c1f:ea16:e181:7ab2:c51a:8892:7fb7/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAzmZ7x4HVpW8RC3ZkwmNKY/6VGlMKQbpBQtmrUzV1XFxKWZRhH3VI
+NOqlfVpTEaRTorht7R8F1aw9psDDUcg7yuQFcUdoXxBJxwbc1h0FKyZZr5kAIfpS
+ObE0rbBRRqJVAWgztpQAalWC95D73y/+tpHnQ+LRFq9IWeX5+QobaSym1oG4Y0Jz
+STSbw2ksjH8CuWHS5TjZr50Nyx6cH99HABDnadxhLBtQriJPSYRYdWyp7tYrW3jd
+As28mxkyFj0sFV3IJ/bYfZD9KSGg1KjQu+c73xKOBUhNtSHFjUzN5myYGd/nWCw8
+0PUReLrWC1ZHYPzqiwelTHcNJ3UcojpO9wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/cat1 b/Zhosts/cat1
new file mode 100644
index 000000000..1a9dd2fea
--- /dev/null
+++ b/Zhosts/cat1
@@ -0,0 +1,11 @@
+Subnet = 10.243.244.32
+Subnet = 42:86cf:a3fb:16b4:edbb:df13:a7a9:cd61
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAyjmB9IyBYexahK+fxSzVNrVxMXroXMc4Fyx16+XOt9hugn24Suht
+06kQwwbpkwjWfIEONzr0UPAbsOWG/Qj3w+dqiC5iqHZWFW/NdBgwunF5+INnEamj
+eIIqei1230C/NNpTph9u3UsT+ZgZnc+r4usEmTpZslvtkVwg20jwT4w3Vq1ws1Jc
+8Ccy8vk4FjgBP88zuvqzjBtTGQMrDgBd68XlGVKOhrvxCebHknbcHWpUz4cN8TX7
+bRNpSUTCSGd2taY6g4cUxiegbTeK2LDVvW/6XtISvJqVVllLD/p661W6gRUlkspv
+phLJc+zNLRxOC624JRivt+Ag5iBI4YP4SQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/cband b/Zhosts/cband
new file mode 100644
index 000000000..51c51e9c9
--- /dev/null
+++ b/Zhosts/cband
@@ -0,0 +1,11 @@
+Subnet = 10.243.7.76
+Subnet = 42:c293:090f:df44:0926:c7af:5012:7cd8
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA11kwqXkkDRmxmoZNFDqtUsxK6d/HzTdFC/v1V3fttePuYFiEOhZl
+rLBS3+Eei4CsQrOwnaRBhHdnoOZGEdxJmq3YXDWGoVAn4bEgommCddzssVzWtVMf
+hIntuCExczEMIY+MGzM3QupYxUgRRVjFtvxoC9kKOSlaq0BhkdJiWygzN/NUfqpv
+HgDufoAcORLQInTpmQYEkZO+XmXejcCY/C+VD0MENqj3SijGw9tm2YmInwSwZnwX
+Zjh2xn96QbV9O7bpfGHcLxWhsUyyRC46knbbBXuAdbDsa2TUdzT5D7nb/TLfP412
+agIhk+cwFM24y/ChHdfoUBakKF4wZI3l4wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/cd b/Zhosts/cd
new file mode 100644
index 000000000..d65814f46
--- /dev/null
+++ b/Zhosts/cd
@@ -0,0 +1,17 @@
+Address = 162.219.7.216
+Subnet = 10.243.113.222
+Subnet = 42:4522:25f8:36bb:8ccb:0150:231a:2af3
+
+-----BEGIN RSA PUBLIC KEY-----
+MIICCgKCAgEAvmCBVNKT/Su4v9nl/Nm3STPo5QxWPg7xEkzIs3Oh39BS8+r6/7UQ
+rebib7mczb+ebZd+Rg2yFoGrWO8cmM0VcLy5bYRMK7in8XroLEjWecNNM4TRfNR4
+e53+LhcPdkxo0A3/D+yiut+A2Mkqe+4VXDm/JhAiAYkZTn7jUtj00Atrc7CWW1gN
+sP3jIgv4+CGftdSYOB4dm699B7OD9XDLci2kOaFqFl4cjDYUok03G0AduUlRx10v
+CKbKOTIdm8C36A902/3ms+Hyzkruu+VagGIZuPSwqXHJPCu7Ju+jarKQstMmpQi0
+PubweWDL0o/Dfz2qT3DuL4xDecIvGE6kv3m41hHJYiK+2/azTSehyPFbsVbL7w0V
+LgKN3usnZNcpTsBWxRGT7nMFSnX2FLDu7d9OfCuaXYxHVFLZaNrpccOq8NF/7Hbk
+DDW81W7CvLyJDlp0WLnAawSOGTUTPoYv/2wAapJ89i8QGCueGvEc6o2EcnBVMFEW
+ejWTQzyD816f4RsplnrRqLVlIMbr9Q/n5TvlgjjhX7IMEfMy4+7qLGRQkNbFzgwK
+jxNG2fFSCjOEQitm0gAtx7QRIyvYr6c7/xiHz4AwxYzBmvQsL/OK57NO4+Krwgj5
+Vk8TQ2jGO7J4bB38zaxK+Lrtfl8i1AK1171JqFMhOc34JSJ7T4LWDMECAwEAAQ==
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/cloudkrebs b/Zhosts/cloudkrebs
new file mode 100644
index 000000000..ed46a36bd
--- /dev/null
+++ b/Zhosts/cloudkrebs
@@ -0,0 +1,12 @@
+Address = 167.88.34.190
+Subnet = 10.243.206.102
+Subnet = 42:941e:2816:35f4:5c5e:206b:3f0b:f762
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAttUygCu7G6lIA9y+9rfTpLKIy2UgNDglUVoKZYLs8JPjtAtQVbtA
+OcWwwPc8ijLQvwJWa8e/shqSzSIrtOe+HJbRGdXLdBLtOuLKpz+ZFHcS+95RS5aF
+QTehg+QY7pvhbrrwKX936tkMR568suTQG6C8qNC/5jWYO/wIxFMhnQ2iRRKQOq1v
+3aGGPC16KeXKVioY9KoV98S3n1rZW1JK07CIsZU4qb5txtLlW6FplJ7UmhVku1WC
+sgOOj9yi6Zk1t8R2Pwv9gxa3Hc270voj5U+I2hgLV/LjheE8yhQgYHEA4vXerPdO
+TGSATlSmMtE2NYGrKsLM7pKn286aSpXinwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/darth b/Zhosts/darth
new file mode 100644
index 000000000..bcabc5f58
--- /dev/null
+++ b/Zhosts/darth
@@ -0,0 +1,12 @@
+Subnet = 10.243.0.84
+Subnet = 42:ff6b:5f0b:460d:2cee:4d05:73f7:5566/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAyx5x0jzfhex8EBSFLlOIkP1yJ5cSPLQ3hpPMvN0J7QdVbypU6a9C
+fzGpzBph1sRwXnaqCMe0og5VT3EdFtngbmm6t/CyMhBojkxMQI08m71JT5c07+1U
+OSSLXBXYHcN6cAEYEsvTiSuvP9RoAbUeQQbZryI4wpzzQ7ET1l7k/3eeXAwqRKR6
+xiqn/4597U09QYmllqfplJUBv2pIAIcFlm/KHvNTZGEZS83udfnECwDwgU63PMns
+38yiCpI79kagXyTOGCbkUatt0KNTzGNLAm0CyeFd1AdgUrj8fVg2jQLQlBrze+Gx
+jkphgkVEgMtVMTz8WKfz+Dro3jBfQstIjQIDAQAB
+-----END RSA PUBLIC KEY-----
+
diff --git a/Zhosts/dei b/Zhosts/dei
new file mode 100644
index 000000000..0d401b019
--- /dev/null
+++ b/Zhosts/dei
@@ -0,0 +1,11 @@
+Subnet = 10.243.247.164
+Subnet = 42:d702:e261:bf4d:2f5f:00e8:bf56:4d50
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAva8pJ7H+ebQFEpqLZhr6hE6OlCRhSlPQwEoWtQLHT/zsgmUEhXcw
+9045IAAgALc1Wf6lVWKwNEBNyLNULUgmkXzgjCG1OuLAn7jWtaNQZT+b6ZM/b2Qn
+hrGdHCcpvW1kpIfho3zMts4dVx28Z85JJlI4ZqfFZWwiuCj+x8OELdqtm2IYryiu
+6dHRR+4WkgEvqL+1YF2RRxXIcSW2wFdZOggjXYobzC2wl9zWkTBPC6lKQjlKlSrV
+ZZBKRwuHloHPt7HJTjWZTX28CbC/P+3l5NyMhfmqtFPZuhC4p7EAWwcXXDz1Gkxl
+w5EbcTz01pePFj5oVfK5aUoi1JFZ9GSZFQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/destroy b/Zhosts/destroy
new file mode 100644
index 000000000..8b5f7f5ab
--- /dev/null
+++ b/Zhosts/destroy
@@ -0,0 +1,11 @@
+Subnet = 42:9277:1f1e:7599:ae4b:7cca:b4a3:fe47/128
+Subnet = 10.243.0.31/32
+Compression = 9
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAofIF/j4ddJEG0sOJJNp6hVXqLpj9FPw6a1vLLqZsn/NuZi3QCZ/w
+xj1nIsQbc1TnPLluHhpn5kuvzb0lThqmPJvX2uXnbq7WH6OvRyN/FV/Gn40txdni
+MFWD53zGlAle1/Jdt+to/+0mvRP8U+dKuggemGljX2nrUxaJgVRVzynvkys5l6vZ
+2oMeO/LnFcAt9ZkMFoqDfKB/RPOqTD9k6Sz8xubVtasQ4ufpQl8Uv6zcYl1PnV7C
+9Pj5MMtQVtRRV8hljImqpERunU6ZsXhyqI9O/cVw9+QkWf7Qh5E0vUKTT9FISyTV
+nmQ9v8JGV2zPDVMmwP1ewyA1W9YhGiFd7QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/devstar b/Zhosts/devstar
new file mode 100644
index 000000000..875f62e2a
--- /dev/null
+++ b/Zhosts/devstar
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.133
+Subnet = 42:2be0:92f5:3546:5f0f:8f22:6244:25f4/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwkkmkhGMnI0x5VIgdLwV2SvXO9Bw3Sy1U5AToZiG2dSB+OiwwLir
+JIrTHv4r73lMLROJjQhznq06VMmNviC82178H7/DZqgSqlGU7d9p1Okd5XCs6LI3
+eaL5mYTXFuA+PMHVvYqQ5fDQRQ4KoWmlSV65XUPejPlxtl3FXqOSHVuuBSbka+St
+qLyWLAh9d8AfWjxbAIv41fl6WOyw2IuDc05K36aT/TwzA3ykl+ekNObAjvpI0cxI
++d3j8H8JY5jDcg1hvWT06JqpUcTJRkWLL7BBdQvWySaBcET1Flfo8eYVqVQDK4kU
+XV/tA1ax7YPFBQ7Lh3Ru9nEC45Gv6R4HbwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/eigenserv b/Zhosts/eigenserv
new file mode 100644
index 000000000..f59667940
--- /dev/null
+++ b/Zhosts/eigenserv
@@ -0,0 +1,11 @@
+Subnet = 42:c9d8:ab9e:c7fe:43ff:0268:f862:42f7/128
+Subnet = 10.243.0.32/32
+Compression = 9
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAyy060LWeo6Z+Kp2h5LtyMx+KGdxL9/WjWfc1yf/YZ8lhZutNb+Kd
+u9AHbnrqTRWRslP+toNiC55aJ/KlTBFQA5nBu2DC1KdG71AX5th7bRvUMfEAEG1+
+7MpcyuC8Owvleg/b4Ihr+/kQNbIPPhAraPJU780Oy173jnt+PCIYY+aTnEuO3UBh
+yt3oPhfwMa2ssPL8GfF3YL9Pvh4UEbUu1E7zSOqzCOzH3od5I/G/TjvfHl3u4tEr
+6kWHVqOYaKMJlqYvb7tnw7QjJNFhVneBJN6eMaWfcmTp2G9S+SwOppW3P4yRxrar
+GLWPgEU6to1wduAktecWU/oWambgXb/hUQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/elvis b/Zhosts/elvis
new file mode 100644
index 000000000..c98ce7865
--- /dev/null
+++ b/Zhosts/elvis
@@ -0,0 +1,12 @@
+Address = 94.79.154.86
+Subnet = 10.243.228.181
+Subnet = 42:42a3:7ad4:f156:906f:f6f3:943b:7b1d
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAv7wpfzpazvXzKJsDkJ8J9zsTZRoI6LnpSIcO8hLQcHNk6LTWjBy1
+xdnsSe3eQYxNmZPKi28PdbMo4YQlFdewLSB69PP6ZX5ISNXVlCZ5Cend/kfU1fXV
+tcZ4JQCl/adHqg8niLAODfnXhwVjMpllgq6gCg5mVPILy+CZ08OM6Ij7Q5d+3Jr4
+1zMvAXyeuNQcL+MkBveblKC6j/e9fqaK86sUh/4unfgmkB7GWjqFwmoHZepR83o9
+HTBmKxEIDKYjLWVXV1Wph3/JN/65igTtju26cVarUmTtGIhU44NzCi+94+wKuJMU
+Bbjk/CnuWQoU2ABPsxtW3r6m4pSDhypNZQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/exile b/Zhosts/exile
new file mode 100644
index 000000000..25d68ca4c
--- /dev/null
+++ b/Zhosts/exile
@@ -0,0 +1,9 @@
+Subnet = 42.116.243.248/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0H+DslKV6EDCZWBCJs+MFyvTR9Ej0yWthIHKzFrA4qI8rxskrGGP
+xhb16keQLPCAgBVVVmikh3pQVMq1K6ry5Of0uM7rU7crBzRfJ8zpGZXfYlBDFDAd
+Vg8wwDvEYsYCAKrZbYIKb88WR0mT7K47ipTbXd9utzmoWGa/SuGtPkYOigcWYMRN
+4QClPDLdICQvdohVvfd7/LXRNuwrWOJcmtLitTEZY9lo2hhv+ZKs7PBrmpTBhTMY
+N2Et69tVPQh1t7cljf3Esij5AUczv979C9Lvukj8Kb51Et0T9qcGAs/M3b64X7FO
+KjWVVQttj3AkjgLZ5OdYlm7uRRmYmKQ95wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/exitium_mobilis b/Zhosts/exitium_mobilis
new file mode 100644
index 000000000..3b112a0f7
--- /dev/null
+++ b/Zhosts/exitium_mobilis
@@ -0,0 +1,10 @@
+Subnet = 42:0:0:0:0:0:0:AFFF/128
+Subnet = 42.127.75.187/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1zv7tkHIUxJX2FIFcfakvZZYuI3VH56nkQYlpTUzO9WscMF1BgoH
+WKOvHy9QzxAJgqmceroZKbV2PIws/PZgwk7vNGPmmZtzkTuNS+RXd2y1WwKTHpxT
+IZ5TKo9AGuU4dcMLAR2xheCJzTRNoxj4UrUgN1WkAqdKhN0Dysglfb+FuUiMdbop
+rbzsKhJZKnJOnS00Z9K7ZrTWkYQR6nhMuZ0EMggc+pa5NesHfIoeitXQxB7tz9M4
+6O7xE8ZkECdKXmRBGhSU2ghnCqiomDj9l6L6S6Ms8Q0ElPM78RTh1a32Euj9Ffob
+v4gQuzI0fUKe+pbm3VC6B+9awkdd8n1AzwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/falk b/Zhosts/falk
new file mode 100644
index 000000000..a8c9e2f21
--- /dev/null
+++ b/Zhosts/falk
@@ -0,0 +1,11 @@
+Subnet = 10.243.120.19
+Subnet = 42:845f:0432:a816:c623:fa89:8485:8700
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA961eCQE562VPYjuZtd0+FNRfUghvD2ccjUlihMjzg46GAK+duqK+
+4peWklGOL4eRYQBg6G2VDzWiU2MxXVbXUZaMrxh7fTc3G3LdbqTxzAv3GQKR/6iA
+9bGUf6u4ztVNAcj2mrY3mfs4gMlBQyQ2wcM0ZUpiAMaRB4cdq7I4GVHbYTFYfQuI
+2zdnr0w8AjlMpFFcD0ExsWeppiJsE7iiME/S2VVfh2NrEpAKQbLH9fKrfkiJA/+9
+0VIH9wLLIYngUtQKbvEQ5xgx6ybrg0vO8ZqZ1ZGXYxOQZzWzPP0tvDU0QHSKYSWb
+FjcOf1lWSWjsjHxMl/Gh57hjNJFCbs8yjQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/fastpoke b/Zhosts/fastpoke
new file mode 100644
index 000000000..c897a97bc
--- /dev/null
+++ b/Zhosts/fastpoke
@@ -0,0 +1,12 @@
+Address = 193.22.164.36
+Subnet = 10.243.253.152
+Subnet = 42:422a:194f:ff3b:e196:2f82:5cf5:bc00
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAs4p5xsQYx06v+OkUbc09K6voFAbkvO66QdFoM71E10XyCeLP6iuq
+DaIOFN4GrPR36pgyjqtJ+62G9uR+WsB/y14eio1p1ivDWgcpt5soOZAH5zVRRD9O
+FBDlgVNwIJ6stMHy6OenEKWsfEiZRN3XstnqAqyykzjddglth1tJntn6kbZehzNQ
+ezfIyN4XgaX2fhSu+UnAyLcV8wWnF9cMABjz7eKcSmRJgtG4ZiuDkbgiiEew7+pB
+EPqOVQ80lJvzQKgO4PmVoAjD9A+AHnmLJNPDQQi8nIVilGCT60IX+XT1rt85Zpdy
+rEaeriw/qsVJnberAhDAdQYYuM1ai2H5swIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/filebitch b/Zhosts/filebitch
new file mode 100644
index 000000000..64c88cb0d
--- /dev/null
+++ b/Zhosts/filebitch
@@ -0,0 +1,11 @@
+Subnet = 10.243.189.130
+Subnet = 42:c64e:011f:9755:31e1:c3e6:73c0:af2d
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA2VjW30A3uQoo5QwbFTnl5fuGg81DZVu8HXmDwgEkhZYr5Xf3V5/d
+fmPlX1igzatWYX0OylFAY69r0V4dqeTubIf83sz1eqtpXjK4czG8A3wMHEXj5Pzs
+e1Qh8K4rHMEATc7Y/cwpQBi2THn2bhufqgaz94m8HrStCZcKCin3fDMbE01WHWX1
+KFqeBtUd7b9pWbXKlLBNpHTZoGxVQk0Hto9pxYzHecRsbQXykYk3Rw2tSuf0aH99
+oY0i3LjOb+f2oq2S4qVHqHZsMJfDVr+x2/LP1SIcc1lVTztWSSAzZEokE0/ejvXf
+wkquBVHXdl6LuzH+/V1I7OsaMhHShYu1LwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/filepimp b/Zhosts/filepimp
new file mode 100644
index 000000000..c689c8852
--- /dev/null
+++ b/Zhosts/filepimp
@@ -0,0 +1,11 @@
+Subnet = 10.243.153.102
+Subnet = 42:4b0b:d990:55ba:8da8:630f:dc0e:aae0
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA43w+A1TMOfugZ/CVwilJn4c36wWSjihaeVe7suZD0DSscKBcbkGg
+3dTCSTnu6Qb9sYd2mKebKXLreO6nhEEoFGsRU0yw/1h8gl7mWYEdTifPfvM5EWwS
+wkN9dJ5njwIUSRyWH7QTsLkiRJVFN2UxEwrhAbo1FJ7yuhRgAKqKJSN4yPVViZwR
+oHyyobvm/i2J+XSiDI9MRo74vNjnDLvO7R6ErIrhOPP1bD9fx3u+UYUfgS0iCO3X
+UN0duBz/faRcl6IRytZOuHaIp30eJ4850ZK8RPz/Dqqj+USMFq60i0oMsuAi/ljB
+8b+eQBt6OXu4MSntxoR8Ja7ht+EOTDnBOwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/flap b/Zhosts/flap
new file mode 100644
index 000000000..ea6aace53
--- /dev/null
+++ b/Zhosts/flap
@@ -0,0 +1,11 @@
+Subnet = 10.243.211.172
+Subnet = 42:472a:3d01:bbe4:4425:567e:592b:065d
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwtLD+sgTQGO+eh2Ipq2r54J1I0byvfkaTBeBwhtUmWst+lUQUoGy
+2fGReRYsb4ThDLeyK439jZuQBeXSc5r2g0IHBJCSWj3pVxc1HRTa8LASY7QuprQM
+8rSQa2XUtx/KpfM2eVX0yIvLuPTxBoOf/AwklIf+NmL7WCfN7sfZssoakD5a1LGn
+3EtZ2M/4GyoXJy34+B8v7LugeClnW3WDqUBZnNfUnsNWvoldMucxsl4fAhvEehrL
+hGgQMjHFOdKaLyatZOx6Pq4jAna+kiJoq3mVDsB4rcjLuz8XkAUZmVpe5fXAG4hr
+Ig8l/SI6ilu0zCWNSJ/v3wUzksm0P9AJkwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/foobar b/Zhosts/foobar
new file mode 100644
index 000000000..2c77b79c4
--- /dev/null
+++ b/Zhosts/foobar
@@ -0,0 +1,11 @@
+Subnet = 10.243.135.219
+Subnet = 42:edd1:d518:f7d8:ada3:1ce3:f4f5:a986
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAsCu6xC0OctUKu0UsscOWfyQlMtMrD0Pt/wB+IDOnkEgDKqcTYGXW
+h6VqMqE2cQhV3ThoxqeIPnQzwiMuVd0n2q3ZDexfYvHmqTZoaMrQZJlgY4rDx8jC
+USFqnvtkJbOxFBiS3c5yjOIybGSGDXrAaxmn80xewNIsdSqaY1/2FxKwx1Fn+Kf2
+hIQOEYkdLhwPso+HyNGUwVKjsRVCSWdJSzBHB38cPZRoPpcmRHOTs/Jtx0b4RXQr
+tVYW8i+Jq6hCt9sDLJexP9unPGl30Gn052noj1t4DRCPFpOYSLJFcGU4n/OzYbzY
+O8VB5DjgGK0eyEXvtByxvWYPnuRwSLaH3wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/fuerkrebs b/Zhosts/fuerkrebs
new file mode 100644
index 000000000..35bbcf181
--- /dev/null
+++ b/Zhosts/fuerkrebs
@@ -0,0 +1,10 @@
+Subnet = 42:0f19:8a1e:7865:721b:2378:bef7:1159/128
+Subnet = 10.243.0.144/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1HoKqh7HvXCKybe2FNBI/wuOvkZuftL0/DDZfZtPlCRtdcOA4XFj
+hQng5+VE3NG0yKcRs59U8iHSeN9b7Is1YF4q0RtM9YQTDhvS/vfpHDq42ftjMs/e
+MIFvYBGr2WIOzOYPiACURRcaMmoAViqK2Bwda45jORPUGo1afibH9UcDs76lFuaI
+f3mUZvLlqdJEtG040WoT1douGWtUWkCB6/pVUgLAurncOz/XiSI3GFzkMUY+0pT6
+0G34AcYqvdQyxH3x0ebclFlfY2aPStf6bGMejcpRJm4M02xF809DVYlUL3mG6krF
+MdWP85dCQ4V/RL0HdZ9PEjlVhgNOF1aQowIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/go b/Zhosts/go
new file mode 100644
index 000000000..de9ebeb78
--- /dev/null
+++ b/Zhosts/go
@@ -0,0 +1,13 @@
+Subnet = 10.243.109.132
+Subnet = 42:f9f0:be1f:b191:116a:3db0:d546:70d2
+# dn42 routing
+Subnet = 172.22.0.0/15
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEApKt/lYqRgl4KE1ouSi5nbt7n7FEjECkGtkRhLFDJs0uWNvPj7wEh
+nTtqzk7lJ8upHgmNN+1w98n2bcJ7Qcbz8vCcMEO7MXdlzGH9vet/g6ZgQ/Z1ijHl
+IxYeH7yyBDLoJ2gghMhiSF0cezFDmNKPMhN+cGr9Lou54igK3I5CMIMN8cx0Fu0G
+uLAxvnZfxIzzCnrF9xvZ6i3g/rEcaGjxmAysCW8SQdRmBKlkzQaUbLy39V2Z5y6m
+SWR7gIGgMVCkpSeWUVSi05wgnMhoEu6LEYTBy/3bPK96O/Y7JBVpYUHqk/ya2PNR
+eaHfEpCrKsek4t/5hcLk64Eo/ydzeU+gAQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/gum b/Zhosts/gum
new file mode 100644
index 000000000..9749f975a
--- /dev/null
+++ b/Zhosts/gum
@@ -0,0 +1,13 @@
+Address= 195.154.108.70
+Subnet = 10.243.0.211
+Subnet = 42:f9f0:0000:0000:0000:0000:0000:70d2
+Aliases = paste
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvgvzx3rT/3zLuCkzXk1ZkYBkG4lltxrLOLNivohw2XAzrYDIw/ZY
+BTDDcD424EkNOF6g/3tIRWqvVGZ1u12WQ9A/R+2F7i1SsaE4nTxdNlQ5rjy80gO3
+i1ZubMkTGwd1OYjJytYdcMTwM9V9/8QYFiiWqh77Xxu/FhY6PcQqwHxM7SMyZCJ7
+09gtZuR16ngKnKfo2tw6C3hHQtWCfORVbWQq5cmGzCb4sdIKow5BxUC855MulNsS
+u5l+G8wX+UbDI85VSDAtOP4QaSFzLL+U0aaDAmq0NO1QiODJoCo0iPhULZQTFZUa
+OMDYHHfqzluEI7n8ENI4WwchDXH+MstsgwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/heidi b/Zhosts/heidi
new file mode 100644
index 000000000..c8af51b04
--- /dev/null
+++ b/Zhosts/heidi
@@ -0,0 +1,11 @@
+Subnet = 10.243.124.21
+Subnet = 42:9898:a8be:ce56:0ee3:b99c:42c5:109e
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAqRLnAJNZ1OoO1bTS58DQgxi1VKgITHIuTW0fVGDvbXnsjPUB3cgx
+1GEVtLc0LN6R9wrPKDaqHS6mkiRSDVScaW/FqkdFhTDaBJy8LfomL9ZmkU9DzkvQ
+jncDjr0WoR+49rJHYsUULp1fe98Ev+y3VwVdJOOH92pAj1CAAUdtfG7XcGyHznYY
+ZNLriGZe3l1AwsWMEflzHLeXcKQ/ZPOrjZ4EFVvfGfdQdJ24UUF3r4sBypYnasmA
+q8lCw9rCrFh1OS6mHLC9qsvGfal6X4x2/xKc5VxZD4MQ/Bp7pBi1kwfHpKoREFKo
+w/Jr3oG/uDxMGIzphGX185ObIkZ1wl/9DwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/horisa b/Zhosts/horisa
new file mode 100644
index 000000000..ac4ed6dab
--- /dev/null
+++ b/Zhosts/horisa
@@ -0,0 +1,12 @@
+Subnet = 10.243.226.213
+Subnet = 42:432e:2379:0cd2:8486:f3b5:335a:5d83
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1hhBqCku98gimv0yXr6DFwE2HUemigyqX8o7IsPOW5XT/K8o+V40
+Oxk3r0+c7IYREvug/raxoullf5TMJFzTzqzX4njgsiTs25V8D7hVT4jcRKTcXmBn
+XpjtD+tIeDW1E6dIMMDbxKCyfd/qaeg83G7gPobeFYr4JNqQLXrnotlWMO9S13UT
++EgSP2pixv/dGIqX8WRg23YumO8jZKbso/sKKFMIEOJvnh/5EcWb24+q2sDRCitP
+sWJ5j/9M1Naec/Zl27Ac2HyMWRk39F9Oo+iSbc47QvjKTEmn37P4bBg3hY9FSSFo
+M90wG/NRbw1Voz6BgGlwOAoA+Ln0rVKqDQIDAQAB
+-----END RSA PUBLIC KEY-----
+
diff --git a/Zhosts/horreum_magnus b/Zhosts/horreum_magnus
new file mode 100644
index 000000000..3019e9cf5
--- /dev/null
+++ b/Zhosts/horreum_magnus
@@ -0,0 +1,15 @@
+Subnet = 42:0:0:0:0:0:0:affe/128
+Subnet = 42.35.89.21/32
+-----BEGIN RSA PUBLIC KEY-----
+MIICCgKCAgEA4PcEqnw1ZrBgPl0yNO7eQ9aJpV4HKlENVhc/cobLh3dQgbmpw2Qr
+MQODR5qPxY+WmyZiQeU5sh8WutfpVn6xBCmR7QDqA+xpPhe/Y6uqWGDjxNftnetz
+gphYv/nPGj0Dv5mo2HGPFK1VG+kp9k+vlZb3r+03OVFrIVHsUg6qE4e8o7pN4OmF
+O10i85csMyKvSfA/rNHC7RdYP0tVLZTw4ZMTQh5t6zr/foHMr5KPXGVM/hjUWXW+
+ujSxUam6JxS1wk1zFp72Vd3X+JQH1eaDHidm3BBVAvCynyhUyaQh7nSjIDWZdGqQ
+GmBcj0M05o1tVGV/7sgQUTNHiLaX6vE35hQoq0Jr2bhfIzjhESLl7HuBMpvDntLE
+Tv+c/R3qryTNBBHFZOvYU0qx7I0cq5NLx4BqUXd6EykQvLZ53TyjFlINGQuEZXsj
+LOtyAj4n2EEg6WmSUhrB+tyowqumdT8ltemuhZ2zDmimep9EvMiZOVns8VkTqmBw
+lRzatTHS5tv6NieDzWTBuMqZiWjgpK8GILUn5e/ecIT2xTSVvo0jzIBwKtFpwf+X
+CkBB0tNlYYmDmHJxiKWBsgw27BFmQI59h3wGHXHSDRgShLBjNH62Lm6omDwivDJQ
+CJaTYPIsL8sdoCglCIV9NwUkj8tM+cvxZiZjvB3zizNxL57ZqpAcNGsCAwEAAQ==
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/incept b/Zhosts/incept
new file mode 100644
index 000000000..348e44b1b
--- /dev/null
+++ b/Zhosts/incept
@@ -0,0 +1,13 @@
+Address = 77.95.224.63
+#Address = incept.krebsco.de
+Address = 2a00:7b80:3008:3::fafc:241
+Subnet = 10.243.0.174
+Subnet = 42:a2fc:1c89:65c7:6e60:1f62:eaf9:e9b6/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvy4J8CewsXeFkFOLqDwiTN+3fF0yjmP5ZVtrLrPJn7Ux75elTdn3
+iLcJYTgaO1/dmw8fPD5DkNnb3wiadZiFGXpsTd1jD69mHcn/6RY/0Fcne9qDiqgp
+vafpUD5UP7/7S+l5kkD6n7HVRblLXJIJk6Z8RCRN8OGyfjMM1IKeoR8kR1+85fpf
+C28fnU3Nz3YJDazOaMD7aGiyGZDRyY+wRjbWtMXE/NH8ydN148ZpFaMvBjM7fl/B
+q8XS5Rs9lFlW2jpex+W2DNq5t4QRMUDrLgD0gug0UiYCYw4IJg7OiI3g6vwjSDtq
+hRxpQ4nq3avmTR/NWzZ97PP4eXTCIQhiQQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/ire b/Zhosts/ire
new file mode 100644
index 000000000..724158cb0
--- /dev/null
+++ b/Zhosts/ire
@@ -0,0 +1,12 @@
+Address = 198.147.23.143
+Subnet = 10.243.231.66
+Subnet = 42:b912:0f42:a82d:0d27:8610:e89b:490c
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwofjmP/XBf5pwsJlWklkSzI+Bo0I0B9ONc7/j+zpbmMRkwbWk4X7
+rVLt1cWvTY15ujg2u8l0o6OgEbIkc6rslkD603fv1sEAd0KOv7iKLgRpE9qfSvAt
+6YpiSv+mxEMTpH0g36OmBfOJ10uT+iHDB/FfxmgGJx//jdJADzLjjWC6ID+iGkGU
+1Sf+yHXF7HRmQ29Yak8LYVCJpGC5bQfWIMSL5lujLq4NchY2d+NZDkuvh42Ayr0K
+LPflnPBQ3XnKHKtSsnFR2vaP6q+d3Opsq/kzBnAkjL26jEuFK1v7P/HhNhJoPzwu
+nKKWj/W/k448ce374k5ycjvKm0c6baAC/wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/ire2 b/Zhosts/ire2
new file mode 100644
index 000000000..6b9d0a79c
--- /dev/null
+++ b/Zhosts/ire2
@@ -0,0 +1,9 @@
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwXkn0H/+BUiARYSzZCpjqEwGeDZsbRHoWcRNlmlP6XjPMbKKQBHf
+gdERPevhoGaNtQdW6SEA5xb1cJDHZILHZtpJ63hs6999gB9x/n4x7eR6C9d7HPDD
+rGv+tBdwo8QWOIQIVnSAr6WdduSg2CyZbHd6d2Xd12vrfqJxnODSUHibrUusEc/D
+XBK2n1un3znzk7P+KT0xXMtNPU2678tGuwsvSIOoDfDx9+2xuxGANeqvEOeSAgg/
+SUH5CbcAFI2/4AKWP4e/yxM26YoKdz1Fu/hx7WqKwYmPERrgcr8ienx4WFGG83AJ
+CmiYwO23L4qSp1KZT8SbGDh2YpamZg2BZwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/irkel b/Zhosts/irkel
new file mode 100644
index 000000000..b197e5d29
--- /dev/null
+++ b/Zhosts/irkel
@@ -0,0 +1,12 @@
+Subnet = 10.243.253.117
+Subnet = 42:1970:cb1b:d9e2:4603:c1fe:ee00:8145
+Address = 2a01:4f8:140:21cb::5
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1i2XcUold9p5aa4qGv2o3hMwlIt4+CBxuOwnzMOp4WjJyGWBrQiM
+Lw9qpwvc0W6c/MYTAUzkq42766jlYRzA/yse0/DeKJvF5BrCk36eH9R2okK1A7K5
+tk725pTf6D37mkjbiupo7FFfHNGjFdSH7174ZpK/N81YWgrGo1cQUU8JJKGgFv6S
+XZWiWbJWKnLW/a4zyg7wnkH3KlvOAthSNgyrVqZazi6gTJ12kZTg9DGg+Q7iTdi5
+oXc4hilymCdF2fDfmG7M3naaRQKntjlpJmc2Au7wTVXj3525c3Ms+1k//HlX8DQK
+a93ZJA25nfpoYznx73lz/IASO2n/jn/3mwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/juhulian b/Zhosts/juhulian
new file mode 100644
index 000000000..d9da75aa0
--- /dev/null
+++ b/Zhosts/juhulian
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.38
+Subnet = 42:449f:b00a:e973:514c:3e9f:97ed:aac2/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAnNyOsNItOzNQndheZ3ppOMWvIOuO1wgLXArINS1ORcgIAJmLpqDI
+whsZFCVifwAXsdeBJyyZOPZrc2PQ4F3KB9ByX6PQ9jqAhun1aE9SDDqp+woOrTlP
+BtJ/8zAmRhrfak61TxpeTndLk95xOLaCwvS2P4SJLIcyutTbbFdBCqpu7cFUGOOP
+qCKLX7/mv2L+GNmQAnWZ5HwXQzBS6gNaNIcQ8mPCUAIZgRU2T83x/tnyH1RlATK2
+lYUWRM0ie+dRMhiDcwmmZrwYl8wzyvuBPEr/p8ZBM2tua8GlQzJUJl44AiAcx3w9
+0EB5MIRL5Qb0yBvXD0yR+bDizqvhd40LvQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/k2 b/Zhosts/k2
new file mode 100644
index 000000000..588f96cc3
--- /dev/null
+++ b/Zhosts/k2
@@ -0,0 +1,28 @@
+Subnet = 10.243.97.72
+Subnet = 42:717e:2a17:e7ff:eb6f:b760:5af4:7da9
+
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIECgKCBAEA53djolgdUlLom7SDi+x1jscvLduf+fzPNlVRk0c6UtR54iHpzVrg
+7OT+PZEAirhWrHyhQQIRoKRK6vRKMwm0PfrMjQXo+1zhBVD/JiPzVGSBfETqVI8E
+jeCS7EaKsZ8gRdWZ4QkDfaQhdWA2RrvVcwpVVxMkjYsHj3EtaHkWGcJs1JAuOsK5
+Zo8ZbxpzgcNz3tiFR4PSp+N3ARE7t2sj8U6z2lk/0TIff3To56u8rDasUGAKf3Rp
+okQmG0EGgTN+qJs/dwIdeKtxcZrRCVd68shphiYE9wC4WXELgJJ8jo4tIiZRu7n4
+lXRn9zQYY2lax4OlBZSkRiaPEISwv5Vv48/H+I1vRaEhx02QL/PnODWSlqMNGiic
+wMBh+DdvQIXRm1W0xxlsY2YOo7GdCywJyLDue6v7ykmQBFgYqP/gVrsoR1y68IdS
+3/dT0lYhrNL+PwKjI0iXPBvA018yw0Dvdgup681C9nzdyvd7y9NorxjeE9Gl9/yd
+X6W8ZE2WIAsli2wGsZLuedcn0mZ25flXbFn6OhrPhP++Kub5IBid/iT60KvxY6H1
+l/DEBJJmFJBsBvFPyFXoEkPJSD/Uc/2veMlb/ues4ur0eBMVML1ZaiK0EzdBYfCv
+kgnVwQG6c5+0XkMk3x5kQ93E0Mr5whILK2upI2tBygAN/SpTsoNXvOFIHw/Ksmcl
+Eqly4P7DtQ9Lu+1DkoLa4ltcejZj0Jjy1j3AI59v0p3Ygx2OWHFv4H5GVjq1T2Pk
+1IAU8X2UTNmcQw5UReJxkNdREOw/XI2pNSBKBDOCMKXH4+a7P3GwheadQiVU5z/Z
+ie/wbsAtp8MGd67aN/i2nrTQfk7RZzIec/UG1XhlQPmJAVIfS5QnFnw+cTAMtYeU
+wHHe4Q3m2+bikBFoqdhJo93Ut5ywGeueKXSyJX6I5AXiiiWnme+IHuNH0G5568yO
+bA9OwDLt4C2U6BFEQtHBA0I8Hh2RT9ObrLUVBUK1aAujLvGvfPhq8QYCcWDJsvxm
+/uAJGb8UdPScTEjftYTWIc1/jikIpK70qOeKiQfxT91hQEBw5mgMCRnAy4m9OjCI
+ntVpHGpylesZWM/na8gZe4lo2dXI7tc2urpqyOThkbpYXNdlNG4F/QcuP90QmiV1
+hyriyHPjbSwIRM3aX7Y/WKwzky0swW+J6mW78yqa5Gt4SzDQxd3KHDAP5lZuFgEM
+aHLOkmOoYlOxWi8eOIWByoH77GFyudeH0EMZV8pwCOTw3GUa1ehhOUlDD6i3CH1/
+gJOQjoKC/ndny8Qz/S+tCLjRHIpQAx36yLME3AvXoKXctuZsZy/9CAsLt9tLZJI5
+AqC/vsOcurKsk1i4GtwuCFnu3qr4OvhwywIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/kabinett b/Zhosts/kabinett
new file mode 100644
index 000000000..e434d4190
--- /dev/null
+++ b/Zhosts/kabinett
@@ -0,0 +1,11 @@
+Subnet = 10.243.213.120
+Subnet = 42:e792:1d5c:c89f:f932:e954:6ada:1dbf
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1sVtqyeCdKB1nabs0FOC62J+J+grP5B/3/s1cuAxcJmER+NaT/Kv
+rvQeB13BmrIjfJTBaezdR+wp0RiPB7s/aMPjWwS5rzh3KhSFk2SFpnLjB2WIpKqs
+N9TQEf2xB0TBWHqcpSqSthjP3SOGNP7gt5l0D13QIHkRQ2xX1PqYikkYi07cQLO4
+rwXrlEBOY8Dn0GR37NA0k+zt0AIdJ78zXHNjVn5hRj8aLGKB0q/FOtdMNRYEGD40
+An82Y2sW+b7U6Tnrw43TOO+AP/OrclEjmNDTRqYLiVAeFHXKjwbCsSlof0qmoipZ
+H+nbsB3qkFpNEy1cA9c/pqHfSpqV3WihRQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/kaepsele b/Zhosts/kaepsele
new file mode 100644
index 000000000..fc8bf4587
--- /dev/null
+++ b/Zhosts/kaepsele
@@ -0,0 +1,11 @@
+Subnet = 10.243.166.2
+Subnet = 42:0b9d:6660:d07c:2bb7:4e91:1a01:2e7d
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAxj7kaye4pGLou7mVRTVgtcWFjuEosJlxVg24gM7nU1EaoRnBD93/
+Y3Je7BSUbz5xMXr5SFTPSkitInL7vU+jDOf2bEpqv+uUJAJIz85494oPS9xocdWo
+rQsrQRAtOg4MLD+YIoAxQm2Mc4nt2CSE1+UP4uXGxpuh0c051b+9Kmwv1bTyHB9y
+y01VSkDvNyHk5eA+RGDiujBAzhi35hzTlQgCJ3REOBiq4YmE1d3qpk3oNiYUcrcu
+yFzQrSRIfhXjuzIR+wxqS95HDUsewSwt9HgkjJzYF5sQZSea0/XsroFqZyTJ8iB5
+FQx2emBqB525cWKOt0f5jgyjklhozhJyiwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/kalle b/Zhosts/kalle
new file mode 100644
index 000000000..8238887c8
--- /dev/null
+++ b/Zhosts/kalle
@@ -0,0 +1,11 @@
+Subnet = 10.243.154.218
+Subnet = 42:05bb:0d2f:4f25:2c6c:1217:6264:dee0
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAtILSBsb+ISWiyUjJHWN5JWNY7Z5hxxxFADQbK/1ZdlCdeIorQI2j
+gDHdWgck9NasXXa04I+5jw2eDLjU26+r+T1vP/fdOg5yLOgnknL4jkHFVCb/ScRM
+2JZAEXLSAz6g33ks2snQzuyAPTEvZhp49+PN9VmX0JBr/ErKGZzFKVVU+gREVRKa
+fOC4+daKrmRzZWg9DFaH5DIrIEiXidixuX/boHprJeULdp81NbnymXxhc929UWbV
+5g8BnuTlKqDDM7stJC4dwKizrv6wXuH6GD0OsDiU8JcoxV3jvM16NmgtAe9BKH1q
+tg1fIY6f67eIihr3Lnjb3UPw3UqwFXosGQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/karthus b/Zhosts/karthus
new file mode 100644
index 000000000..75a8d15d6
--- /dev/null
+++ b/Zhosts/karthus
@@ -0,0 +1,10 @@
+Subnet = 10.243.42.13                                           
+Subnet = 42:42:42:42:23:23:23:23                                
+-----BEGIN RSA PUBLIC KEY-----                                  
+MIIBCgKCAQEAtGL2Gu8Dw/NsgJNcu4XY9eWUM8prL0JC1UfnACXuOCPns+Bdm/dG
+uVTHdejjxv6y4FjWNCoD+45lP31QfBIqIOtUsfz/4ox9bvyTOUWQCe0NtBs2SMyO
+O1eWSD4cnNfskYdyOHQbD+KSSiksyzaZdcqqx9FgWo1VT0f+oElnZ4nLBKRNBguN
+GwVLjreE0GSxhcV2r6oHsaT+udvQ/PlQgn/zia2tKT+OI54WDJGXsKEvwRRnaRz5
+33Di58g3dffo0i7B3S889sa5B7l1kh229cw24Gc0AOtmm8Vacle6iTw3Eg0uLzxM
+nKpOma0+K7CoE4IqSZy350iTgheHwq+y0QIDAQAB                        
+-----END RSA PUBLIC KEY-----                                    
diff --git a/Zhosts/khackplug b/Zhosts/khackplug
new file mode 100644
index 000000000..c149d93b1
--- /dev/null
+++ b/Zhosts/khackplug
@@ -0,0 +1,11 @@
+Subnet = 10.243.217.107
+Subnet = 42:ebe3:90b0:539a:6ef0:0910:b724:00b1
+                                                                                                                               │
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvytShP1vgYLDYJhiC26Vc1/cVJOptUnuyTc8Id9vkCkgHZRpKs3T
+jO2KRaQMDWMXfXkMfVp84/2Q85hpUzYqXQHaNzitg9nHGR2n+a6zfwNKWAm6n2WK
+AMsPf1weamzs6EfCm5WztqenoHKNUxpzXVyLJES/WK6e5ba7FEpszZx+ydoc5GjL
+kezqch5p+U/J2JoUx3aIpQuWvc0i/4KYOuGzlWgUYLNyqL1m3gBkahiPuOtzf9Ul
+EP8QY/GQa1HTFuhLS0Y5nVjZvWnjVVEloXbq9SD2I2fc4GD4+F8wtFMsJyEF2qxY
+XfSLTlpHaJbSBNiopQyWG62RZda/p0yq3QIDAQAB
+-----END RSA PUBLIC KEY-----                                                                                                   
diff --git a/Zhosts/kheurop b/Zhosts/kheurop
new file mode 100644
index 000000000..bbe93fe0f
--- /dev/null
+++ b/Zhosts/kheurop
@@ -0,0 +1,12 @@
+Address = 91.250.101.180
+Subnet = 10.243.78.78
+Subnet = 42:bcd9:7340:9628:9604:7068:5061:4976
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAqIFB0Nk2eSg/K/dJGOEegtezhn5P1RUi1ZgxoZoTR6K4T/tSbD2u
+gjPU53mhRN622lLayMMXtWVKdhO4IUu3mKfemA/8/fy7Qu9T51UUS+NXu/4g5X3W
+Jg2a37TrnQUrsqNud7QQhPTGF8L0+UT2mHlfRYggtAO1J2pSWtsqDiMAOD+89zvg
+Gta8aMdaFPhdkfboaHH6mVJBFOkrjQJE4RiUzwZS24PKh6gRJV4cENdcNRYdVwhv
+dOM+SWzPZXDTAVyG6HptvSdfDUKi4hJY4yS+TIf9j7yR0YpUie3CsbN4a9jP2KVt
+/NhzZ9nNaEv6O8Nk+7Zu8OaxUPgctEFYfQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/kiosk b/Zhosts/kiosk
new file mode 100644
index 000000000..8f53a08fe
--- /dev/null
+++ b/Zhosts/kiosk
@@ -0,0 +1,12 @@
+Address = 2003:6a:674e:1001:211:25ff:fe05:a54d/64
+Subnet = 10.243.232.122
+Subnet = 42:1ad1:b481:00f5:aab8:f8cc:51fe:4b87
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwohazY/T/cp5Na3zLEWhz9Lnz78PladH7CMN+1TLzNXgK96bPvrN
+6ktxIFc0s4m/jWW1AZOjxxGZGmwvaGag9XH8NLMmaqtd2NpASI4c801wEVLuNpss
+gqPAIhDdDWV0WmiDiHe96qQuBVNGv7jlHTuNghwlmgLF0csRDiZZDHn5Bq7plAJB
+0kQSspvq7UpBzVHVlDefIIe15/Yyt9IC21S1o746ZIZ8RYCG63Mnbcs4vfShVxJX
+NnD9++HJV39NA9ozR0bDQUw6s0rVHH/n5iWaktJZ23r2TG3O+7ZZj4QHmkng/Xow
+pgIjcpIWlaqfG29Gl43SWgsVnphemvyP3QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/krebsplug b/Zhosts/krebsplug
new file mode 100644
index 000000000..ab9c966c1
--- /dev/null
+++ b/Zhosts/krebsplug
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.182
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAyd4FnOIEcUDQDudDOhU4wwKT+lqV4RJMfg9QgZC2O3xTGvzsFeRG
+aSMIDMkPzhJ/ggIWAzC+IM2kBv+YCRhu4zOnzWIo5IaC8Me2TZ1JhZ0nZN1YzEGD
+LmBsnngO5L1VnWLYSKRALa5Kv6wQHHz0T6PlsvBQ8SWDG3IKIe/gOFz7eh1Z+ss/
+5XaiYeLMmukEuuilOJZhfDiZPmYOeFI5w7YTM+8Iz/oZRyf8P57pjN21R3feoyTm
+WusgHUuRLRqSUHdYu/E36EyZ9Oc0WPk5yLUhstkPaS1Y35xMEhZfQQpIruQxOst1
+fgiOQg/gKmizzgzdCbfAf13dknkWsqoc0wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/kvasir b/Zhosts/kvasir
new file mode 100644
index 000000000..470172528
--- /dev/null
+++ b/Zhosts/kvasir
@@ -0,0 +1,11 @@
+Subnet = 10.243.103.166
+Subnet = 42:c039:e082:3c01:2577:a367:7097:6824
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA4Jp39vupT7tRf+o6H/ucM01lUwgd0UBCqnapUHZhWKVSAde91lxU
+Z49unHxUrfQMzuJkY3MgsS/fyIC9eBHexwRpLnhc56p7d+tmLk1WZ2ysLifNi/k+
+AOvyBcwT3u/59VJGDcAyJwXeoX6CvX9nxUshGqQ2mkVUwbZEt5lLwtiDMnp2K5rg
+dqQK6tBrmzup/yzppPPRSPwMfGi9Gv8T5OrWqwr78I7WiVkH9LBpudJqJHPFVreF
+TTsN9a/4OWJGZ01M23IGcO6eCnynOIP7gxsmUEwSSxK7MEy2kxBKi/2+OtsCUOpT
+QQRFu/MTVEFXl/cl5XyXOMQadMZEB6MjwwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/laqueus b/Zhosts/laqueus
new file mode 100644
index 000000000..0bdef307e
--- /dev/null
+++ b/Zhosts/laqueus
@@ -0,0 +1,11 @@
+Subnet = 42:0:0:0:0:0:0:1a1a/128
+Subnet = 10.243.0.12/32
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAy9lnH4qDSYeNbpzpcQyq2LzzxkVy2N1vGgKkVttzx0cgMvyRm3aX
+wlacS+3ILBZ3tw+JuCKR9gjRluwKkqoReEINcAam/GbubJ6QBpV54goYm7YGOIuf
+GkbWVk7Kts67KWWhZDzEL30GRv94K6e+m8e7rhnqrTgPyPk3oSwHzvPy1oaf6bTI
+Y/aDQjohFVvQZxF8joKhAE8JrzjKAn8yXmX8VlGW53XBXAb88Ggkr5raMZ24Rcc4
+pdkOc7sFfVImH/ASwkcPi2xX0adlz937lD7rkn5/Q9B9AwsHb1yQKJgWEeYWOQ8C
+F0SzpZiwHz5qB+eg3wMT0ZnvPJKitshyjQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/linuxatom b/Zhosts/linuxatom
new file mode 100644
index 000000000..dfd09b514
--- /dev/null
+++ b/Zhosts/linuxatom
@@ -0,0 +1,11 @@
+Subnet = 10.243.173.58
+Subnet = 42:1c07:1a24:1a26:c799:3b44:a8f5:59ea
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvGy172meTuwHfGZLVHi04+7jb+GRumqNRowffrmMOxFAq6wiL1E6
+7NfJFSc2/wmLZdTCnAtScVicVFZ8UEK2Uv/WMdevJWP63LxUOXpSFtoxNAlpSk9e
+rzwxWj3VxHru7EZA6gu45ff4/seApy/jDy+hceOmOiG5z8VudoRYWe98IoO1ua0E
+rtz415WP0xN+Mb4mGU48JSLYZkOHVIvkf+VVF5jXFbbnH+w0kkTuRMMp6Z7ETvdZ
+RU9nKJ55sflkPhs1/ttU4cYkci55YPVGl7GCCr6Xw4oerIz/jHnzBGroh/wDpEXm
+6RxpsC6DnVQUW3zw0DXuSKoAy0UoQPYqQwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/luminos b/Zhosts/luminos
new file mode 100644
index 000000000..fe04b33da
--- /dev/null
+++ b/Zhosts/luminos
@@ -0,0 +1,11 @@
+Subnet = 42:23:42:23:42:23:42:23
+Subnet = 10.243.42.129
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAuxgY9SfSCyCuTw2bPtC/He2/NZDYQOcGd8+5Bo6h1/h2pU+qKPQB
+0digU617dG2NVMaT0qmzEz86e2avr0PQsyfhmHO8JNOTqwjyQzKcv3iA+B0jU7Gh
+F/PaW+e+0O+a3LO27FCA0uuxEHyWaXqk53a3wKmjo4fuVy1QKOOoiaFaYLaaTgmm
+8OJG+AKWR/ArihpopgAHFjiqB89xWVw5CgxHDwfzVcmI9SOAaEuTfL065XM4uoH/
+LnbtoyT8zN+He1AlaEJMUaWdo8SWfjBFyVrT1zRQ+0S47tlTCW8Neb0KKs+m9d0G
+rAdv6+iFmQzpv76cgYQw2+AkqkUF8Y8xSwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/machine b/Zhosts/machine
new file mode 100644
index 000000000..4927fc847
--- /dev/null
+++ b/Zhosts/machine
@@ -0,0 +1,11 @@
+Subnet = 10.243.60.31
+Subnet = 42:698d:4e02:4d70:b080:acdd:513d:70aa
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvkLboZ6wRALd++ntUXfyzCT9G1pWSJNJhrdut8dPfz/+IIbx4thz
+tbq5apWQRaHj6IILMiQqpfUkhbfz3WS2YP62f8nAzKLKB0zzRAJ1lQjoZOXQseQJ
+Ydyf9dEDhRtnSnOwsmSDEch/2KhgCj+fdMcnbcoAg3PYJGzsz2ykEtoh80Rv1IQa
+tW285CP2GooRp1gwy3WKL6at/uW6D4/tTIimHML5JbLKj7mH+3nOyrhRGyZP1b9s
+XtdkePuaQKrIjmv4rEIYx2taFmmQp7XpC2m4Vdoy7WdIzR3WTgWo546IOygY1KIW
+fDOH+3UoG5oI6y4hNNa7+NH8DpmdtzXYnQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/makalu b/Zhosts/makalu
new file mode 100644
index 000000000..3d080ca52
--- /dev/null
+++ b/Zhosts/makalu
@@ -0,0 +1,11 @@
+Subnet = 10.243.90.132
+Subnet = 42:5ee8:8626:f03e:bdf1:562d:94d1:f395
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEArFuedyPX7kDeH2GwYD3UcRoFjGpTBJXjJzm3LoleyXOeYSdkZZ3d
+ljIeEq9alf6UtqEvYH2HfX8m9fEcHxwFMmJ1CPEwkDZI2IgbLOYV0x2MWLShEvtC
+vGeNyPt+TdiDqDhN8EyRvhB/KzEXdbCUZ79htf8lRonNLYPSRNh58CTZ18T/+3iF
+vy6igdpj4JiLGzdXEggO0KToW5ZVCRjuEaH65BlXdjkCM0dk28FJGh/oakv7hjlZ
+M6c3HJY5RAygO4uLWOyB37j38GDAseDYnNwnLt4jCk7gO48SnsS77efEghEMVVXK
+qnSKbX0KCSvVOJbrvVyP/16o2521eGl3MQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/mako b/Zhosts/mako
new file mode 100644
index 000000000..0488bcaae
--- /dev/null
+++ b/Zhosts/mako
@@ -0,0 +1,11 @@
+Subnet = 10.243.7.19
+Subnet = 42:4522:2222:2222:2222:2222:fefe:fefe
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0FQq5EDxcRUfquoDottz1urpT72PB7pReCSZ1fLGqK5z8+DLW4m9
+YB36xW4jJ8pct9iD6kKnX1JCNt11h19QZvc8GI/9pELV3nNaliz+PI1SQNhOrwM+
+Lza/lnddpmvQmJvF6TTLtuGqTANEZcJ7MUpLJ5x/XEFwIcZb9L30EDIaQQNeRyIs
+xJbuAxHquKrb2Wpanm4hWNYqknV1W7lNbcvmONZ/GupQ411XBhXs4EIAA7fqBEcp
+7FAgjgHIxiAT07Z1hBclv6CPDjFT4ieJAq6giCR/gc484x0UNwSpHBkalK558m4e
+icDuVgajrCZ0ShIAQXgtrSpSM3Y53GUhnwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/miefda0 b/Zhosts/miefda0
new file mode 100644
index 000000000..acf001249
--- /dev/null
+++ b/Zhosts/miefda0
@@ -0,0 +1,10 @@
+Subnet = 10.243.8.1
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAqrYc7LfSPjKpgnbfENU3oeAoFIRnG1CKHi0r4Tvy34anMBRHA4yY
+olPC/IWiNoEadnCvlAEGtcFFh/xncNm+rW+BhO1WPLuo0wDe5fxJrkApuuhwP/lk
+DMNrKtPOH6PV18yuQTtWgmiLo9gT15rRTDs8SaEf9eyTEV6zWVRDFDiFqwuY77iJ
+GihKSlKGDYCUdT8TdaguUQ8akdAUhfXk0F33fAqTYwT25BDAXJdeldTLTb/5EADx
+UMhnY0CsWgDYz9fpL5UNUDe3Gu53GghFS5RWvApasbzmlbrCwCF7MFDfc/yJFCrE
+lF3Nm+GVqU6Uu6cNJ9VYHCu+uxk4PIU5GQIDAQAB
+-----END RSA PUBLIC KEY-----
+ECDSAPublicKey = DEwsTd8tdaQLx/o0EgIOl9l+d0MqDRLEVWnBT9imfRyuzXWatwgXotADc723HxhZ4NXlvuOu+er7PdWstif3nS9/qC
diff --git a/Zhosts/minikrebs b/Zhosts/minikrebs
new file mode 100644
index 000000000..b0d605583
--- /dev/null
+++ b/Zhosts/minikrebs
@@ -0,0 +1,10 @@
+Subnet = 10.243.1.1/32
+#Subnet = 42:0:0:0:0:0:1:1/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0fu8F+XJ6hHsIj8QtdSZIhE+Ae2sEIY4dHcnHbCOeHJlOQQDJrme
+frmG65BX4BMcClUyhvvMwlZIerFwsJoEwa39lB3/Y58OwSS9cNCZTShQPbyVy5wo
+oS97tVUyQENMELXgodg7CUNaloVXGOyXgCOkfYOb5CpWi8NXNsSE1CjZc1XZNI2Q
+2dFBzp6FtRcKc5x5xWuUMnw1Ll2upW2uHZWfgRtgv+pzxVTiNvDqACu8Klwj0bls
+B87DEYeUmiC+CioOtyhiQimUGE8lU1aMaqCyfSsqeBEclSvOCnpaEQu4j6aiY8SE
+5Gm+rteYWKfK2LYV2NOg7n9AUR6d0v8P2wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/mkdir b/Zhosts/mkdir
new file mode 100644
index 000000000..2233fd5b5
--- /dev/null
+++ b/Zhosts/mkdir
@@ -0,0 +1,11 @@
+Subnet = 10.243.113.223
+Subnet = 42:4522:25f8:36bb:8ccb:0150:231a:2af4
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAuyfM+3od75zOYXqnqRMAt+yp/4z/vC3vSWdjUvEmCuM23c5BOBw+
+dKqbWoSPTzOuaQ0szdL7a6YxT+poSUXd/i3pPz59KgCl192rd1pZoJKgvoluITev
+voYSP9rFQOUrustfDb9qKW/ZY95cwdCvypo7Vf4ghxwDCnlmyCGz7qXTJMLydNKF
+2PH9KiY4suv15sCg/zisu+q0ZYQXUc1TcgpoIYBOftDunOJoNdbti+XjwWdjGmJZ
+Bn4GelsrrpwJFvfDmouHUe8GsD7nTgbZFtiJbKfCEiK16N0Q0d0ZFHhAV2nPjsk2
+3JhG4n9vxATBkO82f7RLrcrhkx9cbLfN3wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/monitor b/Zhosts/monitor
new file mode 100644
index 000000000..8584f70b1
--- /dev/null
+++ b/Zhosts/monitor
@@ -0,0 +1,11 @@
+Subnet = 10.243.227.145
+Subnet = 42:2ae3:6ed3:a317:d0be:022f:6343:1de8
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAlNDrSskoSPInRiO8JW529o178D2kDdHbt3zZklM+jveFZuynDH2/
+WTfxr7wAIUd26jb12/6zLZ/gnEikLd3LpYiTA1J+ZL2c5SvXOoIqTU3Q3dwEecG2
+qwLcZ8UCjjOKiwWmjGHhNgEx/XUF7gpMwXb/m7fqzTGEiQozaCnQ3ZJA4t8GG00Z
+PZnDZHj8xYtXK3c3vOUa11xj9/dOwZb9e+VON0bXJxvxh+C7XkLO3NYTayyRX9qL
++OOdRLSkzINzoj94+juPepCEQtRusrIbOkSPwCl2u29rKRNfPBkqbAcN3zP1mfDC
+IXNqUobWP8xvSLyBZh5zglcbQbczxMkKiwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/mors b/Zhosts/mors
new file mode 100644
index 000000000..be9782b10
--- /dev/null
+++ b/Zhosts/mors
@@ -0,0 +1,10 @@
+Subnet = 42:0:0:0:0:0:0:dea7/128
+Subnet = 10.243.0.2/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAsj1PCibKOfF68gmFQ+wwyfhUWpqKqpznrJX1dZ+daae7l7nBHvsE
+H0QwkiMmk3aZy1beq3quM6gX13aT+/wMfWnLyuvT11T5C9JEf/IS91STpM2BRN+R
++P/DhbuDcW4UsdEe6uwQDGEJbXRN5ZA7GI0bmcYcwHJ9SQmW5v7P9Z3oZ+09hMD+
+1cZ3HkPN7weSdMLMPpUpmzCsI92cXGW0xRC4iBEt1ZeBwjkLCRsBFBGcUMuKWwVa
+9sovca0q3DUar+kikEKVrVy26rZUlGuBLobMetDGioSawWkRSxVlfZvTHjAK5JzU
+O6y6hj0yQ1sp6W2JjU8ntDHf63aM71dB9QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/motor b/Zhosts/motor
new file mode 100644
index 000000000..41ff57438
--- /dev/null
+++ b/Zhosts/motor
@@ -0,0 +1,12 @@
+Subnet = 10.243.167.69
+Subnet = 42:e31e:c798:6192:c408:8520:df6c:9d76
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA4xYBdiGtzg77lLeIjbpdXDb6hEfAhcdZgEZeKYWqyeMeu0D5tHod
+3nSPTZu70XhLGgzM3vG1GSmcmg0BeJPQCZkEcyu10RtLN6gvMVqtU54IT57RpoXi
+3MKfMKuHkohzeir0ihlwaN1XF2CbuNiE5q1IaW15lz9IAPE0WuRKcaHs4fc9n6wh
+dk/4pQ74M+/gYHdCNWoxqklpY61tk/QBIS0bAs2wKCSER9rahtLAttAC0Dccgxkq
+vrs3IkJg5omjgJ9pgCo/VeX4JJuVFlrVa9o1D0OMUDssyymt/RjYyXejxvemyeV0
+jbavVMB9GEDIZxD7w2ef18FsvZZnILPQHwIDAQAB
+-----END RSA PUBLIC KEY-----
+
diff --git a/Zhosts/mu b/Zhosts/mu
new file mode 100644
index 000000000..90bca775b
--- /dev/null
+++ b/Zhosts/mu
@@ -0,0 +1,10 @@
+Subnet = 10.243.20.01/32
+Subnet = 42:0:0:0:0:0:0:2001/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEApXErmPSn2CO4V25lqxanCGCFgxEAjdzFUiTCCu0IvELEuCc3PqVA
+g4ecf8gGwPCbzMW/1txjlgbsQcm87U5enaCwzSv/pa7P9/memV74OhqEVOypFlDE
+XeZczqQfNbjoLYl4cKZpTsSZmOgASXaMDrH2N37f50q35C0MQw0HRzaQM5VLrzb4
+o87MClS+yPqpvp34QjW+1lqnOKvMkr6mDrmtcAjCOs9Ma16txyfjGVFi8KmYqIs1
+QEJmyC9Uocz5zuoSLUghgVRn9yl4+MEw6++akFDwKt/eMkcSq0GPB+3Rz/WLDiBs
+FK6BsssQWdwiEWpv6xIl1Fi+s7F0riq2cwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/muhbaasu b/Zhosts/muhbaasu
new file mode 100644
index 000000000..490fe3fae
--- /dev/null
+++ b/Zhosts/muhbaasu
@@ -0,0 +1,13 @@
+Address = 217.160.206.154
+#Address = muhbaasu.de
+Subnet = 10.243.139.184
+Subnet = 42:d568:6106:ba30:753b:0f2a:8225:b1fb
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0f4C4xKXpnyV1ig03O2Kef8ag+/5WGkW90uxEBb/h5NY9barex+Z
+KqVbkPdHhwoCIINuCVcOnJXzeo0FZtSEq3zVhscVm0PVdNfjct8a9KMsK0iUmuul
+5WD9Glh5/1wkEmbRfVxDErhssz1b8YmFOAGQn+ujO/Znn3BLv36uKQvpqU2y5bzb
++rVnq3eE1bCSeuj41bgEve8+vxpforjLO6gbE91mwp3Ol6nkkp6CjpG+aFTuLCAj
+YR0MIl2gGwskOGSI38QxlLouOlIGwus5f+KfC94ZP0pMwu5pT45UOUkVnlBXuZ9E
+igNHG2Vtm76nB3yYHndOvuDTOufatX61dQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/nomic b/Zhosts/nomic
new file mode 100644
index 000000000..f418233c1
--- /dev/null
+++ b/Zhosts/nomic
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.110/32
+Subnet = 42:02d5:733f:d6da:c0f5:2bb7:2b18:09ec/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwb8Yk/YRc17g2J9n960p6j4W/l559OPyuMPdGJ4DmCm3WNQtxoa+
+qTFUiDiI85BcmfqnSeddLG8zTC2XnSlIvCRMJ9oKzppFM4PX4OTAaJZVE5WyCQhw
+Kd4tHVdoQgJW5yFepmT9IUmHqkxXJ0R2W93l2eSZNOcnFvFn0ooiAlRi4zAiHClu
+5Mz80Sc2rvez+n9wtC2D06aYjP23pHYld2xighHR9SUqX1dFzgSXNSoWWCcgNp2a
+OKcM8LzxLV7MTMZFOJCJndZ77e4LsUvxhQFP6nyKZWg30PC0zufZsuN5o2xsWSlA
+Wi9sMB1AUR6mZrxgcgTFpUjbjbLQf+36CwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/nomic2 b/Zhosts/nomic2
new file mode 100644
index 000000000..63d83ff54
--- /dev/null
+++ b/Zhosts/nomic2
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.111/32
+Subnet = 42:02d5:733f:d6da:c0f5:2bb7:2b18:09ed/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA4RATrMG+MJyNq77+qUqoXkBIpUeytIvUNXT5OdvU5v91Xo2eGI23
+NXiFtILDb1nEPB+L4vVWkUKRuPAy+ThgqgTH1vyugT6jRoRhWWmGmSn2GjaF+UxK
+edTfGJqO0Iwn0kZsIFxXUibkmG5iRbJBoPXXz33VtNxOv2gZZ6klfv/pYWnrxmLm
+RZXkE1H3Y0U2ulQEXvpexzVscfYmlAw7h0Ew4aaY2LK4spLLPjx9RdDgfwZOZdS+
+gi5cmi/qM71/o67/4XippR9+7GQ8YecbeoR4bcZpDNoDy1ri7HPPu/t6CiqsYVyg
+jYGBm+IGbwI9hxGel2bXCVBGLE7gpN51TwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/nukular b/Zhosts/nukular
new file mode 100644
index 000000000..27bd2bfd3
--- /dev/null
+++ b/Zhosts/nukular
@@ -0,0 +1,11 @@
+Subnet = 10.243.231.219
+Subnet = 42:f7bf:178d:4b68:1c1b:42e8:6b27:6a72
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAnt/d9Ys9gmQMGEPzPydAs0Etp9aPb5PreogzVilvazFCZ8HiQHl/
+gRGlNBImcPPAPGgLjQ49TZ6V1s0bX0GMlu9gJxqU7Nz/TPbAaDJSmEDPkXnaMC97
+gLoluwJHURKPP6+0VNQuK/IOjjDLzLjRDiVeIg6NR0nFAQPlxUhrCN/PhxqNV5WP
+H1nR+a4UDoLcKbtgQP+4Eu09iEm+H6o5eCFTX2Ov9Ok2m948Jm0rAqUbPAISf9m4
+tOOhhUhn0xvQy5iNHI72ndLvogQ968rnFwBpZM7HF1FsiaQfOF9Nhf11rHCJod3P
+meq9GsIUyppZmEKecnTtVfG1oUHMbt1GxQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/omo b/Zhosts/omo
new file mode 100644
index 000000000..d2788d28c
--- /dev/null
+++ b/Zhosts/omo
@@ -0,0 +1,9 @@
+Subnet = 10.243.0.89/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAuHQEeowvxRkoHJUw6cUp431pnoIy4MVv7kTLgWEK46nzgZtld9LM
+ZdNMJB9CuOVVMHEaiY6Q5YchUmapGxwEObc0y+8zQxTPw3I4q0GkSJqKLPrsTpkn
+sgEkHPfs2GVdtIBXDn9I8i5JsY2+U8QF8fbIQSOO08/Vpa3nknDAMege9yEa3NFm
+s/+x+2pS+xV6uzf/H21XNv0oufInXwZH1NCNXAy5I2V6pz7BmAHilVOGCT7g2zn6
+GasmofiYEnro4V5s8gDlQkb7bCZEIA9EgX/HP6fZJQezSUHcDCQFI0vg26xywbr6
+5+9tTn8fN2mWS5+Pdmx3haX1qFcBP5HglwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/pic b/Zhosts/pic
new file mode 100644
index 000000000..fb091856d
--- /dev/null
+++ b/Zhosts/pic
@@ -0,0 +1,11 @@
+Subnet = 10.243.64.210
+Subnet = 42:8115:848f:f56d:4025:49bf:9042:d3b8
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA7jWZo6QlyLMW1BK/PxBDgU/qBZajMfSo5nLtp/WUMSMa6cJCjFFO
+ppUSfAKBu4uwzjYUmdzQMoxE2AQKT2+gMc7moxz18sVBTbbWlyueBlsTvhpC1b9k
+YPs3eAJDV6mQPvKb908iubqhardaZAdODDas1S5W4N7DuZZBKryARYOoO7cN6/wd
++YDTAxf97sV5IuxCDOV1inTuOrNx8XfGU4wVVELqzd9VLCHGuD8kAcz0+emDrI9d
+MSo8ryCL9tbF5owtC1A8HFDo3LM4da7411HrPHpVyOVgjXmX6bjlLIQ23XNDQOC9
+IbyhK2tCc5q+pms7gYEWPByxmy/mb6WBBQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/pigstarter b/Zhosts/pigstarter
new file mode 100644
index 000000000..dd12a0d8e
--- /dev/null
+++ b/Zhosts/pigstarter
@@ -0,0 +1,13 @@
+Address = 192.40.56.122
+Address = 2604:2880::841f:72c
+#Address = pigstarter.de
+Subnet = 10.243.0.153
+Subnet = 42:9143:b4c0:f981:6030:7aa2:8bc5:4110/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA/efJuJRLUIZROe3QE8WYTD/zyNGRh9I2/yw+5It9HSNVDMIOV1FZ
+9PaspsC+YQSBUQRN8SJ95G4RM6TIn/+ei7LiUYsf1Ik+uEOpP5EPthXqvdJEeswv
+3QFwbpBeOMNdvmGvQLeR1uJKVyf39iep1wWGOSO1sLtUA+skUuN38QKc1BPASzFG
+4ATM6rd2Tkt8+9hCeoePJdLr3pXat9BBuQIxImgx7m5EP02SH1ndb2wttQeAi9cE
+DdJadpzOcEgFatzXP3SoKVV9loRHz5HhV4WtAqBIkDvgjj2j+NnXolAUY25Ix+kv
+sfqfIw5aNLoIX4kDhuDEVBIyoc7/ofSbkQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/pike b/Zhosts/pike
new file mode 100644
index 000000000..1d47a6144
--- /dev/null
+++ b/Zhosts/pike
@@ -0,0 +1,11 @@
+Subnet = 10.243.97.232
+Subnet = 42:4d6d:8699:99c2:0de9:ea78:8d50:f53a
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0CS28CMhqeUuJxY+JEISeEDzP2I5T5ILFn4/3loEagEtS90QAm/K
+rbMDbvJENrNCnaaOcHuOsG3vS8s31ffY9RM89Na2zjcV9l0QBhBkNebUr/Ol0nQp
+ONWXEgmXV2mCGfFnC4uOHhELkZhnkwJduWfR5kyGPPApjxlBVIbI8pkAV4GFqjoF
+WTTm9qp80G26sD4O2q+Ldv9eIKquPAHN/zMFk0TzhgmAylgQUcc84HdUDZ+g9n1Q
+Ap62VwM8lGcnRy+f03cBaPyWQEEdnA3hG2mMfaaAoVYw4eruBbAz8GGUPMT3UH/E
+rGGNmyVzzUQOKvnOjB4qvyseSI+/mPzGJQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/pornocauster b/Zhosts/pornocauster
new file mode 100644
index 000000000..cc7d89556
--- /dev/null
+++ b/Zhosts/pornocauster
@@ -0,0 +1,10 @@
+Subnet = 42:0b2c:d90e:e717:03dc:9ac1:7c30:a4db/128
+Subnet = 10.243.0.91/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAnztrijsfao+fmNtwAjqwIDKsRaMP3ECsq2T2zqKvxwCyXk69G9bG
+RFhWjgaawS9ZhnHSlgWK/vtoR0O9NxpzdU/mvdQijbVGxM02DegjO9qDSIe8EGmA
+kscW4nDqYtw4rtjOVPfnNiWXbcWD8eiYR0kcSWmSvfOpVvdhTETqduTx5HRHyEFD
+JRQYR/tJSvVWXmM670PENAPNJFJ4VSJR60s5A+bFT7J/uw7HzJXX28LygJz73Dj2
+2a4ev0WcZQngLq072h/91R/TOpg+ogUDVhXkQtKyFj7im0287JTL4bXGofZBhzaf
++h9dFGs1QLoNyhG/cgt9fog7boSXTelAiQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/radiotuxmini b/Zhosts/radiotuxmini
new file mode 100644
index 000000000..96c069314
--- /dev/null
+++ b/Zhosts/radiotuxmini
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.185
+Subnet = 42:5553:9d1f:5e66:ed7f:bbd6:b7fd:51b2/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA3A0wJPSrNGpb3g98iv1EDTk7s9dgUKSHf7rmqrN2IlW9g21pkGEY
+T3EWz5X8mGEQbDw2im9W8Lm7OSnYuRQjNxacq5WMIN3AGpsiGB6KWEXu73lDWDkE
+hL7dxjSWFSQQMUkbjhduxyaibmLLI748w5npYzhAsjICs4MsrBhcL/ER7tCwVyKm
+AEKUBbLd21tVLGM5dapJslKamZ5NxeHY6TBdtbd2AQZ+67EINKt/WEx9Ruw/t57P
+OAa37NhFrjBbRClQQZVOunbh1Sb0EX3Abj4oZczrtAaBfcDQbA7x2LwbqugZH/EN
+i/oa3sCqOLo7ZcYvuvyxaZgWLK3KB2MEQwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/random b/Zhosts/random
new file mode 100644
index 000000000..59a354e93
--- /dev/null
+++ b/Zhosts/random
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.134
+Subnet = 42:725b:abec:0922:09c6:b51e:1a33:b93a/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEApgs77ljzQp7I8/9KbqzGjoDdNAA3Bp6dKziIJnHLAIDAHD30yY+o
+UHbRPhaCP9s2M4A39wTDjrakngF75M+0covz4WBIiuGdwZywgVnliRk/9dcnqdZm
+OeCxeRJ0BY3Iy8oMieFaPJW1XgwKYi2p0eSpBeKasBct2xNQwyvh+r+xHBa6NK0P
+vV6rK04OrJu04U/tqklTFMTHGmZfjx1vmuecuPWZlgT39788/5aD9uqg2ldMoenE
+eamrPdU2Vh6qlZc8CyHVy5YZDykbXTauUL5OmW2Om4Qc05pinsNnDXfMTkSSmWpN
+oj6nieBqbp/ExuZ79LC5XxvQcAMQtk7gUwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/raspafari b/Zhosts/raspafari
new file mode 100644
index 000000000..1e1b48503
--- /dev/null
+++ b/Zhosts/raspafari
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.156
+#Subnet = 42:9571:c499:5adc:f9e1:8982:3cb1:cf91/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA14OlKZwL5+ZMwxoMTuTpt+PLr1Mp6pIlfIdYfkkx1od6c3fuvNi6
+CHLpR0fAWDDec/hDwR55VLzonDrPa/nOj6yHCXCTpHhQXJIdZTazxSPAsUuzzKa+
+TZQcCGZWJKG09Rg8gIceTjS99l7BOVtPQXnVQc7Gfxu8csjynHOHWinZy34JU9FA
+HdcTzKsxrAr297iQCPEht7XPDCJj2hRy+NS5UOzkTF7UGTKveyRdsqVIWx/rMrll
+UlBEwxRpstuhG33bv+tAXKNi2eJn32IvHDhPZtHgrvXE71FT43V6bJLT0+xH2qFc
+SGZCCdjv3/3mO/g7Kkth64mpxMw93NGkEQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/reimae b/Zhosts/reimae
new file mode 100644
index 000000000..125cde652
--- /dev/null
+++ b/Zhosts/reimae
@@ -0,0 +1,12 @@
+Address = 193.22.164.39
+Subnet = 10.243.177.212
+Subnet = 42:5965:bb44:aed3:9d3d:29f6:201d:7adf
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA37lXlJpfT4pgxV1XB3VzUiALVjOexrHezJZ3YxgZTVUtTTxOnydl
+urN7S4WaRgFkRPlwATGrp+KzJ6fz5/zeryYwbBUY66kcTEfJBP3+zKgWu3NIqOll
+SCcnpjlEm46FcstJ5dnnuYqhpnp98z8QkTiXHZKMI4rB+yf5NdKnMetAUsSUe2wI
+bXSxJ9lNrSm/IFToaVZ3KPYZwQ0HgzUxSWb5grkCuK5iWtGhqdf0/pqEzMpI1Y1c
+QKepcJkRCUcd2InKb9AdpwT/xygNwbPkvjxIAKj7vK/4rr5LApJAOcFL+HJRz4CT
+lDrM5LDeGtsIr+mIUbSTR6R0onWCn543LQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/rmdir b/Zhosts/rmdir
new file mode 100644
index 000000000..09dec741b
--- /dev/null
+++ b/Zhosts/rmdir
@@ -0,0 +1,11 @@
+Subnet = 10.243.113.224
+Subnet = 42:4522:25f8:36bb:8ccb:0150:231a:2af5
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA+twy4obSbJdmZLfBoe9YYeyoDnXkO/WPa2D6Eh6jXrWk5fbhBjRf
+i3EAQfLiXXFJX3E8V8YvJyazXklI19jJtCLDiu/F5kgJJfyAkWHH+a/hcg7qllDM
+Xx2CvS/nCbs+p48/VLO6zLC7b1oHu3K/ob5M5bwPK6j9NEDIL5qYiM5PQzV6zryz
+hS9E/+l8Z+UUpYcfS3bRovXJAerB4txc/gD3Xmptq1zk53yn1kJFYfVlwyyz+NEF
+59JZj2PDrvWoG0kx/QjiNurs6XfdnyHe/gP3rmSTrihKFVuA3cZM62sDR4FcaeWH
+SnKSp02pqjBOjC/dOK97nXpKLJgNH046owIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/robchina b/Zhosts/robchina
new file mode 100644
index 000000000..ee67405ae
--- /dev/null
+++ b/Zhosts/robchina
@@ -0,0 +1,11 @@
+Subnet = 10.243.131.174
+Subnet = 42:c483:5bdb:f54e:dc72:f682:ddd1:14f8
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAxfCyJD9G9BgUtdZoT/t8rr6TzzcNDyUex46D0arMOliJUWTvkP9I
+m7YHzxZNeb4QoWGW3TZwDGq63OuSDLfXcmKbeTAs9hLDFFOcAzuBeACnQzd5SIqW
+sxjWOgI1yn/Thk2GVzjs2YXIKSCFwpRRR9r0d+YjuSF87ByBXkhgMmoIxn9tQYjx
+RqpAd1ELWRqGgi5W6qbN3m3C3R/3g86SsiOvJ/HbJ+MaRy+b9EC2+XoPRoSAJqWg
+XN5MHY01EmDaz2gRB2kAo1j90y6Xi3JdzMn+nl53nOdSGIBWn6dWbm3gd8KBtn5X
+KernecPr3o4YT77C481hRc68hpi+1aff8wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/rockit b/Zhosts/rockit
new file mode 100644
index 000000000..e67272c35
--- /dev/null
+++ b/Zhosts/rockit
@@ -0,0 +1,11 @@
+Subnet = 10.243.199.33
+Subnet = 42:cec2:0a67:0ebb:7d97:8138:ac9a:8a58
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAnUtx3KPzNmS6/LxpYSolmhmF+Xqsum2po3lvmZszu2aIKdcAeIfb
+B6bwz08zC9UNQjnO+27px5LMTTH9zhzRxo5xP/mcco2mVQFl5V+/73qBW5NnUV+4
+nPvUDi0+IhuVixHc+KlkxiHhgIDLdCN2WvVTkUCgxT2xVlPoESXq1dhdE3/5vvJt
+0tphFUnP0sLCVzV25IYCocul+ELj8PAc/9mP4twifM4V0uwhh+J3AHR0+14QM61r
+9qRhEnNEEkGeToYQPsoromiKPWczerUPBpaQHOpjnjg08Coz4OyrrM7+DXyspPfT
+/862pAygKmeJMuzT2b52JbRlk3NMCxw5wQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/rtjure_debian_oder_so b/Zhosts/rtjure_debian_oder_so
new file mode 100644
index 000000000..3000705b4
--- /dev/null
+++ b/Zhosts/rtjure_debian_oder_so
@@ -0,0 +1,11 @@
+Subnet = 10.243.124.21
+Subnet = 42:9d30:3845:c822:988b:96c5:39ab:90b7
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA6J+B/2Wpr9MKu5fuWg9LSoabBKmWmXEWfN7Bs5KMyux9obSBaM8y
+dUEx0ayGwUOvDxizuhma9YCbys4P9SDGmocxrhFz2yQeyinEj03EB9ZZiPNQSqbI
+Jia39Q/fkxeCescUjr63wR0OY++a+NdefVG5OaSRhNwAmjENZzAxTE/1y5lR7mf4
+U0Pyik/BIARZIc7rnwoYn2TlGgUlu3HX7BxCXIndOFeIjtRzoSG6d+XKhcTXOvvH
+WnBNl2D5i48l+V/mDDbLYcXS0al3lgFAOgqXxVXr9WufCBGtNdxlgWlM4zSTUQZw
+UopJToHcnucM3ofb/NrDs3ygHdQPSRkhhQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/rtjure_ras b/Zhosts/rtjure_ras
new file mode 100644
index 000000000..ba44cb020
--- /dev/null
+++ b/Zhosts/rtjure_ras
@@ -0,0 +1,11 @@
+Subnet = 10.243.212.68
+Subnet = 42:627f:6f2a:b631:26f7:8d69:4c3a:23b0
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvu1ZjElrPpJ/ery0BAYxWPtb/ZLio+PuhrsOy9BBq6b7/FHw/1yf
+GOCDa2fkdE1/pVLhI62KL+j/nDCgpHtVxzupVYKSyKOuZXnNGAS7vAHNM27jaYHp
+3DTI0Npu13v2r5rgraPOm6eGrd/D0u2gr3T9Zq8PRtg5JrXBWMU4Ugt+Kfv0V+xL
+v0lX21xZrUjvhtd0/vTcNkYLWZK5ftfU18/i3D6CimlG+AsKyeAnYe9Nkcmet84s
+65SbgQ6SBr2YyN5c7wC9j1/Ney3k+aTbxsvHqDyQ8bq8WnsDQR2B8JPZGPLd7VHD
+hdPGzus2PmJa84oB7smuUdt/5oAjzgghkQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/rtjure_rdrlab_linkstation b/Zhosts/rtjure_rdrlab_linkstation
new file mode 100644
index 000000000..dfc8c0311
--- /dev/null
+++ b/Zhosts/rtjure_rdrlab_linkstation
@@ -0,0 +1,11 @@
+Subnet = 10.243.188.107
+Subnet = 42:b859:6e9e:21ee:6884:171e:ebd3:3316
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA3nKxW4euCO/XN/0C2H4pvTMRLJAXCbMlsGVR80U9JXFYz85x5yDY
+6UDLJfhROCMPg8JJa1WwG9+jF9uUD315hF/wMmMReqKAX0ct50Uhr5iv5QA0ER/3
+q4eg1dh920K+qZ2LAweCDt2pnJYZYw3pSX2jfiFEu1/DfwZIVUkymEKC27ObC+Zw
+KMderOYU4UPkTmrg4WkAUiHH09PToMVQukL4PLslhNMvFqhdLdGMyY2hqEltK+QP
+6cKFDUCAoZRc/L5JhNtklr7RLqYhwkQ7kgPWqbW50tdi9B8YDJfBbfAT7+QS70gj
+THyNfEm3R4Xc8FrbKw3ju1PO4LDb9KOhUQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/rubus b/Zhosts/rubus
new file mode 100644
index 000000000..aef8d4b39
--- /dev/null
+++ b/Zhosts/rubus
@@ -0,0 +1,9 @@
+Subnet = 42:537a:0c95:6315:6598:e109:74b2:0887/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAqudpo1cC1ETPA3d16cNTAwwud195Yetdx32ty5/VkY2KgLnnl672
+XTPZBVhFppG+NU6QIYq2c0+BdUV+42XNnSeTKy79xr49eSMDaAXuWiX4eY8dh4v9
+n7elTWikzTaElS5SI3wcJPz8SdajWclnRkqXbyMY7Pw7uJMgT3svC/chN8tgp1LT
+2s1DdvxaHhnFPef2NQvIWgfgytReLB8dQnSYoAiwIGvNXQT4OXgshJkTAwmok/Sq
+io8K1FeJyOranBM/ZyYbQWMEXuknoJ9PXKPbrGjD+ftS18Gs75ODWqh/Bpj75rpT
+q6HLJv6H6YpToxueTL1iYM00MNW4g/oPZQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/senderechner b/Zhosts/senderechner
new file mode 100644
index 000000000..4cce73cab
--- /dev/null
+++ b/Zhosts/senderechner
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.163
+Subnet = 42:b67b:5752:a730:5f28:d80d:6b37:5bda/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0zCc5aLVRO6NuxUoR6BVzq2PQ/U5AEjYTdGkQufRot42N29MhxY7
+lJBfPfkw/yg2FOzmAzTi62QyrLWSaF1x54rKu+JeNSsOAX+BorGhM67N45DGvJ0X
+rakIL0BrVoV7Kxssq3DscGVbjbNS5B5c+IvTp97me/MpuDrfYqUyZk5mS9nB0oDL
+inao/A5AtOO4sdqN5BNE9/KisN/9dD359Gz2ZGGq6Ki7o4HBdBj5vi0f4fTofZxT
+BJH4BxbWaHwXMC0HYGlhQS0Y7tKYT6h3ChxoLDuW2Ox2IF5AQ/O4t4PIBDp1XaAO
+OK8SsmsiD6ZZm6q/nLWBkYH08geYfq0BhQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/serenity b/Zhosts/serenity
new file mode 100644
index 000000000..09c519a00
--- /dev/null
+++ b/Zhosts/serenity
@@ -0,0 +1,11 @@
+Subnet = 10.243.137.182
+Subnet = 42:7538:6f17:220f:bcc0:2d2d:d6f6:911f
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvVxASw+8nrkQisvliqjYXASQ8O0v4KGlQDHQWx4eBKOfPyQbgJpU
+LOF1nikZTz56SyJAwZY1r7JXpvzycWKXkLK/deqJrHkm83lRbwbzKrExzW8hNaVD
+nO+P4X19uG/gcfxc9+CdPbHxtUPCNQKUhtYfnXrzTu9jiz7WibkJRYMvY1bd4SK1
+rkKGwIfQiWGvA2cLyWZH2XnFptl0YVHulGnIIVp/bvTuPDsba4mTWeuJhi+16ZzP
+PwsR5taxB+dxygESp+kwu00Xmwv5MnmL6QWDlTHYZX19FXkeAV+sHxEO0K4YLFQn
+pucTzUBNiZX68HF3R5SdH7wsg9jsvE8c3wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/seruundroid b/Zhosts/seruundroid
new file mode 100644
index 000000000..b4f0848e7
--- /dev/null
+++ b/Zhosts/seruundroid
@@ -0,0 +1,12 @@
+Subnet = 10.243.127.2
+Subnet = 42:81de:f850:152b:0988:1942:265d:dacb
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvNtSbaaacF05L2mAxxA5SYc6DuoZEAkXlhcvLTlpu9f/0vZwUWh7
+175pLn6VqUijVoFb9vyoOwkrs9Uk3aX8mYws+5yJLwXhIje+U3uiVTphowKva+m9
+BzV6waZ5dLbh+3CGimx1TBkFTly3NkdZs886QWSO4aXLdU6lt3jRYsuay0Eop/j0
+eQ0BWg9o0QEcfDRQ7RirXrD0B7TSo6qZC0b4NSAMHTE+dvOMo7c+Z7cIPNLS0B+T
+Am7ju3gF7UU68kKPyczrNSPPPZayEvZYUZE4PHt8dyIsppojoRq0SJqsMr/mOC15
+dg/KnoKezn9nqUWzisRWrrqWStAKITJkjQIDAQAB
+-----END RSA PUBLIC KEY-----
+
diff --git a/Zhosts/sir_krebs_a_lot b/Zhosts/sir_krebs_a_lot
new file mode 100644
index 000000000..f4fffd9d5
--- /dev/null
+++ b/Zhosts/sir_krebs_a_lot
@@ -0,0 +1,11 @@
+Address = 84.23.79.81
+Subnet = 42:48bd:f4cd:b2f1:ff6b:865c:d041:def6/128
+Subnet = 42.130.57.249/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAzkVF0BSWUEqzdUidLTa6qL4wlNSb8gaxyZperzoAj65d5l25SCqc
+jjqvREcE6p+jM4t1STXoohnNvexubNXW3PVo5Zpew+BsaGjVvow0LkqCJ9k96Rrk
+JzU5lAVH6om3/QYws/Ot0zq1Z/+Xw/0+9JpVKhEipMWLpLgjAvWdvzSW6aBIHVN1
+3E85fkTE5f0azct+XNSNzUebdyIy8wu/EexGmFI9bN+ewIvqjZJdvxP+Ank55MsE
+8P7K9TKwVXw440MGqqoQaOhdaT75TL+2nsAfWYcrNnE3YehMOmCMp9oY+RAvsIkK
+iAYyF5l7ZTi/7KGHNsG7rr0cbytiz2nS6wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/skirfir b/Zhosts/skirfir
new file mode 100644
index 000000000..0214e7a1c
--- /dev/null
+++ b/Zhosts/skirfir
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.18/32
+Subnet = 42:423b:0f94:6b03:7c3c:593e:67e8:c857/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvQ2yhEbW2a7rOlJGb7pV8OhDMQC00jNffM9LML+sn/BAbIX6jzzi
+XgD9o5qwyW/ktpEViUbYepIB/wBbHdMgHRWux5nPS/WygxnVKcf4mPr846udJ2kx
+/38l40DjHTzMWTV6G+TFm4+Wg7++B/NUonMJczRNjX4zDVwmObZpS+XSjl8bT1DP
+vvNHeUOr06a/IPyOF7b6B/dlr+0pr4YLFw587M1KA+eee8gvJx7YvCdwUMMJP++K
+KX30apeJQ+jpf9CsVvpxGefysMTv0uUB7Rmya3b5jjddnW0ge6lTMwT87TzIF5jz
+e3hIt+dvvq7cHI7nnyyRtKcvcm1hH+ZIaQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/sleipnir b/Zhosts/sleipnir
new file mode 100644
index 000000000..1c82461de
--- /dev/null
+++ b/Zhosts/sleipnir
@@ -0,0 +1,12 @@
+Subnet = 10.243.62.238
+Subnet = 42:d442:7668:e533:cd65:0e50:4714:ad05
+Address = 91.203.214.50
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA155UrbREv8ktrafcK+BMLSnDnTwPdvs70i5fLGJGefiyNc0ZzZVw
+M2+R3TGGYPqtid087zYfl6M1JLEZeDtRIcda3N5S5bxXQe6Dz70DxpVNlE1a59zy
+7xoD4D3hTJbOYzz9DIBj+9Q91+4JGIi+ZLjuulNNbj/AGGbvtzgLOKRPK5f+Gyfl
+beI8xtgD1fLUNbeYGzqz7KDFFTUz+oImWvhkf9fTlsS8riGiA6RketxCaeQGqZ4v
+s8z7S70MFjpiR8He9UyUoFWKODYY7eA+BV1EkQTuSiji1oa/GY8RexjMb83S5cBn
+hnSoQb3Q35hd1oM06Wz9LKcOiL2pczEx+QIDAQAB
+-----END RSA PUBLIC KEY-----
+
diff --git a/Zhosts/smove b/Zhosts/smove
new file mode 100644
index 000000000..fc7e194fa
--- /dev/null
+++ b/Zhosts/smove
@@ -0,0 +1,9 @@
+Subnet = 10.243.42.42
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAzFFj6yAy2qC4gVrUV5vN6PztulRggkyXIMr2oPmPLuB85uxJE9nI
+9uvsQdbgcmmEM++moPM/ASCEXuu1ikUK1Gl+8C3rv2IxF/zhcrWEJV4e4EvHrBWP
+Xt4hSPyFG3LYpaX1OAWL2zmCvGVDmflWp+YkbBRrkMMEyXg0gZMNx+E7yJiNVYFo
+DZ7p4VSncWsAqk0I1varQpkl7BR6p7QcJlMO403Rh2oQT1bPXskkZsfAyXN8wJTP
+ATiTm5vijXiRUao+h9L60oxQTcvi9hcbhg+FpB3HYx2Rq6lWR0SqDO2OiBTTJnFM
+6qvN7Wfdmxim0mLAwaqccRLCWA06iN8b7wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/sokrates b/Zhosts/sokrates
new file mode 100644
index 000000000..97cf1b478
--- /dev/null
+++ b/Zhosts/sokrates
@@ -0,0 +1,11 @@
+Subnet = 10.243.97.126
+Subnet = 42:28be:6907:ab4b:5c79:99f5:a4a1:2a25
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0emA0JAong4wHSAEUrLrkh21n8I/+pLtpS4uGTcMHn9ZrS8Tg101
+S2poRE0jZUZu868mDeOwwxZRLmCE+bL0q1OrAUDY7+ricQSAz3CNQAAQB0Sjp7ju
+YXKqLZQEYyOV3M8IJOALS72q4g1VTv5jQrLhGzMsv9vzuRSZV0pEV8tZwb187wLi
+n27rwB6SPZv7uhC3R060x8Ze/pLmfmVfrxb9DwZS3d8X1PwygTrTjSAUTeMaDa69
+NSOzvKLx25fhZ0Gm3BA3pUQDEOiGOze3oT/0l3QJMvZ48TbG1KlSBOVwtL3+f5yM
+gJZLF/JoTsYL0aZM+zHL6NAUmciy9dNXEQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/sokrateslaptop b/Zhosts/sokrateslaptop
new file mode 100644
index 000000000..e05f24153
--- /dev/null
+++ b/Zhosts/sokrateslaptop
@@ -0,0 +1,11 @@
+Subnet = 10.243.142.104
+Subnet = 42:f8a1:044d:0f75:9d73:56d8:f432:c6cc
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0EMbBv5NCSns4V/VR/NJHhwe2qNLUYjWWtCDY4zDuoiJdm3JNZJ2
+t0iKNxFwd6Mmg3ahAlndsH4FOjOBGBQCgBG25VRnQgli1sypI/gYTsSgIWHVIRoZ
+rgrng0K3oyJ6FuTP+nH1rd7UAYkrOQolXQBY+LqAbxOVjiJl+DpbAXIxCIs5TBeW
+egtBiXZ1S53Lv5EGFXug716XlgZLHjw7PzRLJXSlvUAIRZj0Sjq4UD9VrhazM9s5
+aDuxJIdknccEEXm6NK7a51hU/o8L+T0IUpZxhaXOdi6fvO/y3TbffKb1yRTbN0/V
+VBjBh18Le7h0SmAEED5tz7NOCrAjMZQtJQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/soundflower b/Zhosts/soundflower
new file mode 100644
index 000000000..4085fd11f
--- /dev/null
+++ b/Zhosts/soundflower
@@ -0,0 +1,10 @@
+Subnet = 10.243.69.184
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0a0oenAy9MDa2M6NoLtB8elduGgc3oLtUwsm3iUu6w8L+Je5TndN
+H8dPn3sByUk1Jkd8tGGRk/vSFj/mtUn7xXKCnFXfKDqVowu/0KS3Q+6o4mcoATeb
+Ax7e6Cz1YH5+qhQjR7apuase9X9Dzp56//5VW2gaScvWevvzrij2x7eNvJRF+W/l
+FDXc8zBPkFW5TLFHOizRoLl4mK1hz2NrUiqcq5Ghs2yPsFxl/o5+e2MOwtdI49T6
+lMkeshAeNOSMKYfP9nmHZoKI/MIpGak0EF3ZQtLvyv+tM2Q0nuwH3RvxlK/Xf6U+
+8SoQu4yRIeK+pMiLEHhFPzBpk+sblUlG7QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/steve b/Zhosts/steve
new file mode 100644
index 000000000..f86eaa50d
--- /dev/null
+++ b/Zhosts/steve
@@ -0,0 +1,10 @@
+Subnet = 42:58a0:e7b1:506e:b09e:1b68:5149:c6e8/128
+Subnet = 42.145.33.57/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA2mt6xByDU2eVsQhjG33vT18Byfxqq4TPOvbV8RAyx0RWeolXGWnx
+p+wKHVITCyL5JCYs7fUYQoDC900bQa/waWgcN8dHfiUmUPtiUjcc35UWaNTLkVGs
+XEe47JMpnnB3D8ynXXKHsG8JXFjpxQpan/fnSuUG7nsB6anxjNHstkmsGGp60P1V
+6Xt5GcN+Mw1peH5LhIOcXaMNEHj/DlIjQSubCf3yelcxoSgnZibP5GfiI6JwKXDu
+A3Sv+wfAGTYdTOE6RBsvBI0lTNUSw02WxaMG4Hfe6+19XEnC1bSwg8+7VsqFmeWi
+uoaQeerhP1QD3GIX81Xe8ENvvFGzCdfARwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/tahoe b/Zhosts/tahoe
new file mode 100644
index 000000000..3e78595d3
--- /dev/null
+++ b/Zhosts/tahoe
@@ -0,0 +1,12 @@
+Address = 148.251.47.69
+Subnet = 10.243.57.85
+Subnet = 42:2f06:b899:a3b5:1dcf:51a4:a02b:8731
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAx6R+CuJu4Bql+DgGPpE7wI+iasRY6ltxW0/L04uW9XiOKiEjx66y
+QMMaW18bcb0SOfTE8qYo8pOsZ5E9FFPY6cKH4DGi8g1FpaODle9V8RrVg3F7RuZ8
+dXDXeZxvYvJ2LwPBvlr1aisqJqgxAwF2ipPPX97rAYbp46a/vkgU5bPF1OFlTDaH
+9jjThuidiEwY4EMtJGKisnTGx8yS5iQibDMqzrcRpCxCLcl68FgFNKCTtSIj1mo6
+hgO1ZKmHw73ysmrL2tImmalHYcqDJnq/KInG2ZkCZI/2ZqfJyrRSTk86t5ubfD6p
+egC5N0Y5dQHJd66AytNwXxymiAcWuYth9QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/taschenkrebs b/Zhosts/taschenkrebs
new file mode 100644
index 000000000..94c37eadd
--- /dev/null
+++ b/Zhosts/taschenkrebs
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.66/32
+Subnet = 42:55bf:5f2b:73f4:f989:910e:ee73:2831/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0YAfK9s29WDjJmiri3Oj0hEyjKui9ylA3mlmWSiTLnk1O2REOwgD
+5DPsdYPbu+bTkW7GdzcxX/mNvHogWgC+2+F70dles1lDiSDUhSQOEHFMlz+rBbvz
+FGY3Xmm3m3qdRYOcpHUXL/ZXN6kBvsl2b5rfEkejRb+Z1OOLjssISEzNe2vPEnp4
+OmY8ZQA5UAjnxsX+GKsH2OBqD+6Xm+/l/XLHDApHfby+X3upXaJRBjUAp8DiOm0T
+hVHfYXEE3iuC8JaCzWSFtG+4qLXf9MJ5xRfwUkuyPqiiTIpeM8GxHQJ+l+QKycNd
+Dk+9AwsQ/WsoXMHqIWHyNmuqhr82wEQo4QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/terrapi b/Zhosts/terrapi
new file mode 100644
index 000000000..cf1748eb8
--- /dev/null
+++ b/Zhosts/terrapi
@@ -0,0 +1,11 @@
+Subnet = 10.243.30.159                        
+Subnet = 42:b0bd:090e:2a37:2cb4:3314:58e7:20d1
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAtVhVDRBzq0L6JtdVUVEakBzhMP2RjOj7cHZnEUsXzl1TXxuOBhL1
+XOXd3LUuU0jNMMvzxO2VU7K/wM6lX30B6ryqDSfsXKEBM60BiGVzb4Kd+7No76RN
+0NsoLygtvtOm1SmvvT1UCsjomoIE4eGdBDsfQzNKt2PUoh/0rTZBHd6qGJuCZQSX
+F4IRby4jzYvjOsaSi7GVadvhoyETVxbUAi9VquxOltytA+Ud4CXPb/JW25uVmQQK
+RXhoWahWJGJ2WJLGnT1RkTvFQk0zM3XJfPBVItnKCYHuE5HMU/5nnnPvKWiICdsA
+1NNU8+kXtK3IJEHwfpRWe/isMj8rROU37wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/thomasDOTde b/Zhosts/thomasDOTde
new file mode 100644
index 000000000..ce47b39e8
--- /dev/null
+++ b/Zhosts/thomasDOTde
@@ -0,0 +1,9 @@
+Subnet = 10.243.42.23/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA3btaQpK89aRDJ66cW8H9RlDIzr4k4WIGiqNCsIAE5MhSGCtjboWO
+elgRWlYP59l54yRzn5FpvABAWeRupbX/AMhG8IiBgU6438+F2kVlZdJM4DP51F7c
+N2Ek2WKSoIJuiv7Aqb1WlHIWlN3ehg/BXcFPLSav+iChWXAD+MkKmMwL8lGEzsus
+MdbpRLxB0g90FUmpwr2f8euanOXYhU6sjnxH+0JY+j9AwWQLfAqtQ1eGO5MK75Dw
+htPM3Pj90bkfnYNjNXvnyjsQScDjYG/cv/zDwqRQWNcsmT3EqsBnmM5q0EL+Djo1
+lsPTacJdRtHsnQne9daNadnHywQPX+t/QwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/tincdroid b/Zhosts/tincdroid
new file mode 100644
index 000000000..c240f3d6b
--- /dev/null
+++ b/Zhosts/tincdroid
@@ -0,0 +1,9 @@
+Subnet = 10.243.0.11/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwZSgdnymspnwy8NOJ1UKVIbUXxaDUCLWGGtSpYvRt4wrzkIMpeyc
++Bi2c/85Guy6B5H7X+3hMY7YFzM8AiixVr/FCAlKFwseZOc8ld07PuUPVtqdRN9N
+Dy4dqATaaWvjGL9320AJmccbYvoV0MZGTmWk86ZaA06tgDb0ZihEfYEFhw+5fakE
+7mxpdYmVdzaqScRyKWCF7ogn91/fQ01om/hsl+wzTI/ykqPTUumdNcijBMIK8EtZ
+qJbgOt9NSKulhDBFJ02vJmt3o6hmJSONjKcN7dify/ZotQffGCRMgdaWx0YTQJxY
+VJ1rPLlbZaPWRydsbMm3BTZAdMRXUq3uDwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/tpsw b/Zhosts/tpsw
new file mode 100644
index 000000000..4e7b2a890
--- /dev/null
+++ b/Zhosts/tpsw
@@ -0,0 +1,11 @@
+Subnet = 10.243.183.236
+Subnet = 42:8ca8:d2e4:adf6:5c0f:38cb:e9ef:eb3c
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvwYPFAINwV0EH0myFpNzRjVbqXdAmJP616C5JvODklhZWJxFxlKJ
+Poczl57j2Z+4bonkTrJmsNtSaQLPKYH4H1qfo/lwz7nqEpPi3Xp4Fgts23w36eML
+WBvbw0fQO9R8zZJIIdRkJ2qqlhZiTlor1Gtlm8Z1RmpKkhL9O6Yzj94VhGLhABVl
+OsaF2M3PgXJMiLry67jzbAs3+mVaT3iBTzWOaOyREjKQEUg9B9IDxrmZMSWqdXZM
+0wfzaCjS40jD73m7tqi7W3tXzAUP4mEeUqkC+NC2Zgm/lJ5B1KPx7AyNqtRLsBLd
+pIdJs6ng63WV1fyHYUWMYqZk9zB/tQ0b0wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/ufo b/Zhosts/ufo
new file mode 100644
index 000000000..7103515b4
--- /dev/null
+++ b/Zhosts/ufo
@@ -0,0 +1,11 @@
+Subnet = 10.243.223.142
+Subnet = 42:d9d0:64b5:4dc5:21cc:6a57:cbc9:fac6
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAuOly18THum73KzUbky8Vwmjz33sLl67bvm338Nacq8nuV1/8RkHz
+O1VWSnPiyUEpwf69jE5VP8GE/v+7gvJJ5WW/7A7K7A1Ox3vRjwDnO8PllCrzfei3
+jKffWRP9PcxwaWOjE7LKK16Y7t6ZM9k2zMyxAJtM+MmSnBvLoyd+14bIltXz+ZEU
+bpFk1g75CXMrqj29SDGfuFPWxbDfjr2bfNuYr3fCLIOKXyfBmHRaLiuPynezbZxQ
+HlLVMtCCZoKCctmlOlHON/JaL0ZHM1ZA1l6n4EaaPAL2nakMTU513LqQiCqTMej5
+r+wxsrjhHxVmWYhtPrJGOPlkQyJx9LiWjwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/uriel b/Zhosts/uriel
new file mode 100644
index 000000000..f5f6de5f8
--- /dev/null
+++ b/Zhosts/uriel
@@ -0,0 +1,11 @@
+Subnet = 10.243.81.176
+Subnet = 42:dc25:60cf:94ef:759b:d2b6:98a9:2e56
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAzw0pvoEmqeqiZrzSOPH0IT99gr1rrvMZbvabXoU4MAiVgGoGrkmR
+duJkk8Fj12ftMc+Of1gnwDkFhRcfAKOeH1RSc4CTircWVq99WyecTwEZoaR/goQb
+MND022kIBoG6NQNxv1Y5I1B/h7hfloMFEPym9oFtOAXoGhBY2vVl4g64NNz+RLME
+m1RipLXKANAh6LRNPGPQCUYX4TVY2ZJVxM3CM1XdomUAdOYXJmWFyUg9NcIKaacx
+uRrmuy7J9yFBcihZX5Y7NV361kINrpRmZYxJRf9cr0hb5EkJJ7bMIKQMEFQ5RnYo
+u7MPGKD7aNHa6hLLCeIfJ5u0igVmSLh3pwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/vault b/Zhosts/vault
new file mode 100644
index 000000000..7ed3866c6
--- /dev/null
+++ b/Zhosts/vault
@@ -0,0 +1,10 @@
+Subnet = 10.243.229.17
+Subnet = 42:17ed:1eff:5aab:a541:57a2:7ca2:5c38
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAzra4v9cIU8mUeC8Vr1YUTWxir/IexD4FlGc087+i7hu6LLpt7Xi8
+XdwiGMTmQLegohtaVN3yShX1a5YywAboxaZFS1aLFBptmV9VIMtsTJRIgm2dBwMy
+5tFRfu3ElV408JBr8OGwYC967p/SY5hxvSAQRc2cmSeY5duWGxybpzfdKmnjnmLr
+pGfmavBaLAi2DP+KejCFjAu4oWayVlM2BIXtbtxxn90JvZ8HI4gdfHLBbwfxiEHb
+qODqiWbu7wznQ3g4N5SUW2rq8WUqubufcx30Z+096doc0i+Zdxb5JBU79CGTNcbZ
+X6Spc/CtkrLNbsTCjVmXgNvYo6WZeg4+rwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/voyager b/Zhosts/voyager
new file mode 100644
index 000000000..216d8dff4
--- /dev/null
+++ b/Zhosts/voyager
@@ -0,0 +1,17 @@
+Subnet = 10.243.24.5
+Subnet = 42:b434:5bee:21ed:2e99:a4d4:35b1:34cf 
+
+
+-----BEGIN RSA PUBLIC KEY-----
+MIICCgKCAgEAvaSESJ+KK+DAVOdj8S7AmBb9Cqepi8VwjrnT+WTUFqbDQJ7Dwwfi
+vbqRZituKbD67xljtYbhv0MOdAXRKYgxhCuO6SO7GRlSL00Lb+lYT5KLR1LeMyMe
+Y0r1FOTSHZIYV5NfrmznMnV7FxsM3IkSiPHBZUAVxDyoJAYyb8L+loTvJyaD6lno
+i8PUNVsyRISE+UXxoIEMnGVtkOQVIhnrdO9k02pRBe/dNNKOKH2tUyPxtyP4TujX
+/A/OEqniwf1RBtGddhmKJOew2SPvNbiqJMBU+PNAs0ACTBn5GdyWg6/i6gvUpPZi
+SX4xlDNt7fmfJr32elD0Mv08r3+/dmeP1+LFGSEMkZM9R70iHTRZyqJf1TKwE8LI
+KRSflzV8EhcOa2znS5gM7YZW60OHdjSgQ8J3Czfp7ig923zxj3JA0sctCuuHtbXp
+BUfi98tb2eMT0E58dtge6TwTn/dAcYYTRN2H+fgVOUCc2NKIwN3Vt03Y+HT7Duaj
+B3klQW5setLz/SZf9Bw2W+mpnIeHjzS5M2EZ+O9gosH+bVAMMs7w2wLhuSaPnJY7
+24kF7hGMI5zHqWpNjLdB7AN+vkqHbzBnfkVLSLyHyrJCBebQCg3in/uW650Zo/D/
+Ad1k/5+a2R9xKHqONF2FUyZb26FkzROnBW1M47K1e4x/r/5N0Vq5mkcCAwEAAQ==
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/wooktop b/Zhosts/wooktop
new file mode 100644
index 000000000..bd0cb9454
--- /dev/null
+++ b/Zhosts/wooktop
@@ -0,0 +1,11 @@
+Subnet = 10.243.63.202
+Subnet = 42:9f67:f701:81af:b8ba:6183:4f3b:c60e
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAuP6ZaGowomnda2aisQjQ/li58I9C26y6x2W8++CnkrVx+2siSpsg
+M3nNOLc4n2k7hgjFIkeODqiSX4VKb94A0eHJwk6il507ILHrsgwJmheIKMWQJEx0
+44h6o1r6fbpZdsf2dREK6qjIp+wEv1sYZ74sv3fP4V3QbjPVH3WVJ/gW+CDOT5zc
+Ff6+JZNdLWwdRvHq1snQGdnUfAk3jLWpv8FZo2g0xAo1kIGfh9KCuxDgr1sonl0Y
+GcCKI+8tsJhzDT4uo6xJrZH6Hx3pqb9hqTTlAYMGRoJUMTlQAFi/efo5bxNx85Mh
+xz313oHXDnK6eVr0vqq62UcatcxIRwBpVQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/wu b/Zhosts/wu
new file mode 100644
index 000000000..a63adc7cc
--- /dev/null
+++ b/Zhosts/wu
@@ -0,0 +1,10 @@
+Subnet = 10.243.13.37/32
+Subnet = 42:0:0:0:0:0:0:1337/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEArDvU0cuBsVqTjCX2TlWL4XHSy4qSjUhjrDvUPZSKTVN7x6OENCUn
+M27g9H7j4/Jw/8IHoJLiKnXHavOoc9UJM+P9Fla/4TTVADr69UDSnLgH+wGiHcEg
+GxPkb2jt0Z8zcpD6Fusj1ATs3sssaLHTHvg1D0LylEWA3cI4WPP13v23PkyUENQT
+KpSWfR+obqDl38Q7LuFi6dH9ruyvqK+4syddrBwjPXrcNxcGL9QbDn7+foRNiWw4
+4CE5z25oGG2iWMShI7fe3ji/fMUAl7DSOOrHVVG9eMtpzy+uI8veOHrdTax4oKik
+AFGCrMIov3F0GIeu3nDlrTIZPZDTodbFKQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/ytart b/Zhosts/ytart
new file mode 100644
index 000000000..09a55f65e
--- /dev/null
+++ b/Zhosts/ytart
@@ -0,0 +1,9 @@
+Subnet = 10.243.65.226/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA2yCCN8nAPmZNL75Jr+FtfP5jmyuqg7IpgfW03L3s8Gg7NB1eTQAg
+UFPh13cj4lZleZOl3Yus7yx4HxMO8tYCptqnRPyP+UXrxvL+kECS4J3rLzjH/eOM
+0oAxuEe+DOa5R9Vj2bRtTouePlEvXDpgZZcDnedutRUYFGLNvkoWxu0RGqfQaJmd
+7KtOk1NJn9efNqwpl6ejPj5A+ivh2T1vAMWherM60JTjjhNGiSP4so0WG8PlBPYc
+GKnmMSQl0u5n10uTvLoVvnSfLj/QvL3d8abTrFV2lRqaCTJy+lxgkS1A5AnsTP1G
+OBbm/Gk9hRuYy2iP6FQ65q64/JfoeoqpPwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zhosts/zombiecancer b/Zhosts/zombiecancer
new file mode 100644
index 000000000..c073123f5
--- /dev/null
+++ b/Zhosts/zombiecancer
@@ -0,0 +1,11 @@
+Subnet = 10.243.226.40
+Subnet = 42:2cb2:77f2:86c1:ffcc:f9ff:fdcb:726f
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwmIAhFzsJb6Pjy8TjAWMECwh8TRYIFaL0sAzGMtoibyAUnIpX6UU
+kYLYUjsd6Wo8HZUn38awjoa0tD1SE43UueyD45OAEk3zYY9/ku0BVBOgGYZahcWO
+cKMkO1BtIle7lI4/+gxyfoSrj+2/0pf56odFIZTIV+kyKtFg+97Mn/eb6o7b46oR
+edhU+Nz02YGLuSs4Pv663GAuIyCUj0OTxhX3F3lYWYyP6Hbj4FW5W8YJrlfw12x3
+f5OUceLLBz2JTk2thBSgd/bXW4hAOFgpuHTu8FWZ4sh7vKFiRmPyTTN0uE7NaVdX
+vSw7x+V9kSeonkW7uPp6A3ngl1ki2xc8AwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/Zpubkeys/deploy_wu.ssh.pub b/Zpubkeys/deploy_wu.ssh.pub
new file mode 100644
index 000000000..a54a1ca37
--- /dev/null
+++ b/Zpubkeys/deploy_wu.ssh.pub
@@ -0,0 +1 @@
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEieAihh+o208aeCA14fAtjzyZN/nrpOJt2vZ5VYZp69 deploy@wu
diff --git a/Zpubkeys/lass.ssh.pub b/Zpubkeys/lass.ssh.pub
new file mode 100644
index 000000000..172fd2dda
--- /dev/null
+++ b/Zpubkeys/lass.ssh.pub
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAp83zynhIueJJsWlSEykVSBrrgBFKq38+vT8bRfa+csqyjZBl2SQFuCPo+Qbh49mwchpZRshBa9jQEIGqmXxv/PYdfBFQuOFgyUq9ZcTZUXqeynicg/SyOYFW86iiqYralIAkuGPfQ4howLPVyjTZtWeEeeEttom6p6LMY5Aumjz2em0FG0n9rRFY2fBzrdYAgk9C0N6ojCs/Gzknk9SGntA96MDqHJ1HXWFMfmwOLCnxtE5TY30MqSmkrJb7Fsejwjoqoe9Y/mCaR0LpG2cStC1+37GbHJNH0caCMaQCX8qdfgMVbWTVeFWtV6aWOaRgwLrPDYn4cHWQJqTfhtPrNQ== lass@mors
diff --git a/Zpubkeys/makefu.ssh.pub b/Zpubkeys/makefu.ssh.pub
new file mode 100644
index 000000000..6092ec469
--- /dev/null
+++ b/Zpubkeys/makefu.ssh.pub
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCl3RTOHd5DLiVeUbUr/GSiKoRWknXQnbkIf+uNiFO+XxiqZVojPlumQUVhasY8UzDzj9tSDruUKXpjut50FhIO5UFAgsBeMJyoZbgY/+R+QKU00Q19+IiUtxeFol/9dCO+F4o937MC0OpAC10LbOXN/9SYIXueYk3pJxIycXwUqhYmyEqtDdVh9Rx32LBVqlBoXRHpNGPLiswV2qNe0b5p919IGcslzf1XoUzfE3a3yjk/XbWh/59xnl4V7Oe7+iQheFxOT6rFA30WYwEygs5As//ZYtxvnn0gA02gOnXJsNjOW9irlxOUeP7IOU6Ye3WRKFRR0+7PS+w8IJLag2xb makefu@pornocauster
diff --git a/Zpubkeys/mv_vod.ssh.pub b/Zpubkeys/mv_vod.ssh.pub
new file mode 100644
index 000000000..7b7d2e260
--- /dev/null
+++ b/Zpubkeys/mv_vod.ssh.pub
@@ -0,0 +1 @@
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGer9e2+Lew7vnisgBbsFNECEIkpNJgEaqQqgb9inWkQ mv@vod
diff --git a/Zpubkeys/tv_wu.ssh.pub b/Zpubkeys/tv_wu.ssh.pub
new file mode 100644
index 000000000..b6e2634e8
--- /dev/null
+++ b/Zpubkeys/tv_wu.ssh.pub
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAEAQDFR//RnCvEZAt0F6ExDsatKZ/DDdifanuSL360mqOhaFieKI34RoOwfQT9T+Ga52Vh5V2La6esvlph686EdgzeKLvDoxEwFM9ZYFBcMrNzu4bMTlgE7YUYw5JiORyXNfznBGnme6qpuvx9ibYhUyiZo99kM8ys5YrUHrP2JXQJMezDFZHxT4GFMOuSdh/1daGoKKD6hYL/jEHX8CI4E3BSmKK6ygYr1fVX0K0Tv77lIi5mLXucjR7CytWYWYnhM6DC3Hxpv2zRkPgf3k0x/Y1hrw3V/r0Me5h90pd2C8pFaWA2ZoUT/fmyVqvx1tZPYToU/O2dMItY0zgx2kR0yD+6g7Aahz3R+KlXkV8k5c8bbTbfGnZWDR1ZlbLRM9Yt5vosfwapUD90MmVkpmR3wUkO2sUKi80QfC7b4KvSDXQ+MImbGxMaU5Bnsq1PqLN95q+uat3nlAVBAELkcx51FlE9CaIS65y4J7FEDg8BE5JeuCNshh62VSYRXVSFt8bk3f/TFGgzC8OIo14BhVmiRQQ503Z1sROyf5xLX2a/EJavMm1i2Bs2TH6ROKY9z5Pz8hT5US0r381V8oG7TZyLF9HTtoy3wCYsgWA5EmLanjAsVU2YEeAA0rxzdtYP8Y2okFiJ6u+M4HQZ3Wg3peSodyp3vxdYce2vk4EKeqEFuuS82850DYb7Et7fmp+wQQUT8Q/bMO0DreWjHoMM5lE4LJ4ME6AxksmMiFtfo/4Fe2q9D+LAqZ+ANOcv9M+8Rn6ngiYmuRNd0l/a02q1PEvO6vTfXgcl4f7Z1IULHPEaDNZHCJS1K5RXYFqYQ6OHsTmOm7hnwaRAS97+VFMo1i5uvTx9nYaAcY7yzq3Ckfb67dMBKApGOpJpkvPgfrP7bgBO5rOZXM1opXqVPb09nljAhhAhyCTh1e/8+mJrBo0cLQ/LupQzVxGDgm3awSMPxsZAN45PSWz76zzxdDa1MMo51do+VJHfs7Wl0NcXAQrniOBYL9Wqt0qNkn1gY5smkkISGeQ/vxNap4MmzeZE7b5fpOy+2fpcRVQLpc4nooQzJvSVTFz+25lgZ6iHf45K87gQFMIAri1Pf/EDDpL87az+bRWvWi+BA2kMe1kf+Ay1LyMz8r+g51H0ma0bNFh6+fbWMfUiD9JCepIObclnUJ4NlWfcgHxTf17d/4tl6z4DTcLpCCk8Da77JouSHgvtcRbRlFV1OfhWZLXUsrlfpaQTiItv6TGIr3k7+7b66o3Qw/GQVs5GmYifaIZIz8n8my4XjkaMBd0SZfBzzvFjHMq6YUP9+SbjvReqofuoO+5tW1wTYZXitFFBfwuHlXm6w77K5QDBW6olT7pat41/F5eGxLcz tv@wu
diff --git a/Zpubkeys/uriel.ssh.pub b/Zpubkeys/uriel.ssh.pub
new file mode 100644
index 000000000..015b57837
--- /dev/null
+++ b/Zpubkeys/uriel.ssh.pub
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDExWuRcltGM2FqXO695nm6/QY3wU3r1bDTyCpMrLfUSym7TxcXDSmZSWcueexPXV6GENuUfjJPZswOdWqIo5u2AXw9t0aGvwEDmI6uJ7K5nzQOsXIneGMdYuoOaAzWI8pxZ4N+lIP1HsOYttIPDp8RwU6kyG+Ud8mnVHWSTO13C7xC9vePnDP6b+44nHS691Zj3X/Cq35Ls0ISC3EM17jreucdP62L3TKk2R4NCm3Sjqj+OYEv0LAqIpgqSw5FypTYQgNByxRcIcNDlri63Q1yVftUP1338UiUfxtraUu6cqa2CdsHQmtX5mTNWEluVWO3uUKTz9zla3rShC+d3qvr lass@uriel