diff --git a/krebs/3modules/makefu/default.nix b/krebs/3modules/makefu/default.nix
index 650344981..33202d0ab 100644
--- a/krebs/3modules/makefu/default.nix
+++ b/krebs/3modules/makefu/default.nix
@@ -26,6 +26,31 @@ with import <stockholm/lib>;
         };
       };
     };
+    studio = rec {
+      cores = 4;
+      ssh.privkey.path = <secrets/ssh_host_ed25519_key>;
+      ssh.pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIqBR5gjJkR1TEIs2yx6JRoIOA7+/LJA6kjju8yCauFa studio";
+      nets = {
+        retiolum = {
+          ip4.addr = "10.243.227.163";
+          ip6.addr  = "42:e23f:ae0e:ea25:72ff:4ab8:9bd9:38a6";
+          aliases = [
+            "studio.r"
+          ];
+          tinc.pubkey = ''
+            -----BEGIN RSA PUBLIC KEY-----
+            MIIBCgKCAQEAwAdSac8Oy5tPu7ejwojY5YqaNOfd7i0NToE+oaRJ1yxzmUpj8Fti
+            cGpcgBYhFXMVYoYfzLdkAlSYjWKAoShCq/ZEfIM67okXegXvL68zGksfXrmpdUuk
+            GCCy2/Ul5urvYEis9UeUpbe6tUxU0zXUWCkhMQgHeO2xQEizfIfWsUn5sYtFFoKI
+            jYbAcLbRtw+Islfih8G7ydPBh78WPGz6Xx79A5nmfI1VZDAToEqpqUoaqfzsTGd1
+            78GZssE3o4veTmBFvLV3Fm/ltfXpzhAIcsi89V3RjrzFM7UMD8aV153OAzhddxIu
+            8x6FibmMSzBXQDFuAac2+kp9mU0F0W4G1wIDAQAB
+            -----END RSA PUBLIC KEY-----
+          '';
+        };
+      };
+    };
+
     fileleech = rec {
       cores = 4;
       ssh.privkey.path = <secrets/ssh_host_ed25519_key>;
@@ -449,6 +474,7 @@ with import <stockholm/lib>;
       nets = rec {
         internet = {
           ip4.addr = "188.68.40.19";
+          ip6.addr = "2a03:4000:17:2df::1";
           aliases = [
             "gum.i"
           ];
diff --git a/makefu/1systems/gum.nix b/makefu/1systems/gum.nix
index 93ca8f643..92c446212 100644
--- a/makefu/1systems/gum.nix
+++ b/makefu/1systems/gum.nix
@@ -4,8 +4,11 @@ with import <stockholm/lib>;
 let
   external-mac = "3a:66:48:8e:82:b2";
   external-ip = config.krebs.build.host.nets.internet.ip4.addr;
+  external-ip6 = config.krebs.build.host.nets.internet.ip6.addr;
   external-gw = "188.68.40.1";
+  external-gw6 = "fe80::1";
   external-netmask = 22;
+  external-netmask6 = 64;
   internal-ip = config.krebs.build.host.nets.retiolum.ip4.addr;
   main-disk = "/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0";
 in {
@@ -14,7 +17,7 @@ in {
        <nixpkgs/nixos/modules/profiles/qemu-guest.nix>
       ../2configs/headless.nix
       ../2configs/fs/single-partition-ext4.nix
-      ../2configs/smart-monitor.nix
+      # ../2configs/smart-monitor.nix
       ../2configs/git/cgit-retiolum.nix
       ../2configs/backup.nix
       # ../2configs/mattermost-docker.nix
@@ -55,7 +58,6 @@ in {
       # ../2configs/logging/central-logging-client.nix
 
   ];
-  services.smartd.devices = [ { device = main-disk;} ];
   makefu.dl-dir = "/var/download";
 
 
@@ -134,6 +136,11 @@ in {
       address = external-ip;
       prefixLength = external-netmask;
     }];
+    interfaces.et0.ip6 = [{
+      address = external-ip6;
+      prefixLength = external-netmask6;
+    }];
+    defaultGateway6 = external-gw6;
     defaultGateway = external-gw;
     nameservers = [ "8.8.8.8" ];
   };
diff --git a/makefu/1systems/studio.nix b/makefu/1systems/studio.nix
new file mode 100644
index 000000000..400d9f883
--- /dev/null
+++ b/makefu/1systems/studio.nix
@@ -0,0 +1,75 @@
+{ config, pkgs, ... }:
+{
+  imports = [
+    ../.
+    ../2configs/vncserver.nix
+    ../2configs/vim.nix
+    ../2configs/disable_v6.nix
+    ../2configs/jack-on-pulse.nix
+    ../2configs/gui/studio.nix
+
+  ];
+  makefu.gui.user = "user"; # we use an extra user
+  krebs = {
+    enable = true;
+    tinc.retiolum.enable = true;
+    build.host = config.krebs.hosts.studio;
+  };
+  networking.firewall.allowedTCPPorts = [ 655 ];
+  networking.firewall.allowedUDPPorts = [ 655 ];
+
+
+  environment.systemPackages = with pkgs;[
+    # audio foo
+    ## pulseaudio
+    pavucontrol
+    paprefs
+    pamixer
+
+    # extra alsa tools
+    alsa-hdspconf
+    alsa-hdspmixer
+    alsa-hdsploader
+
+    # recording
+    darkice
+    (mumble.override { jackSupport = true; })
+
+    # browsing
+    firefox
+    chromium
+  ];
+
+
+  nixpkgs.config.allowUnfree = true;
+  fonts = {
+    enableCoreFonts = true;
+    enableFontDir = true;
+    enableGhostscriptFonts = true;
+    fonts = [ ];
+  };
+  # ingos favorite display manager
+
+
+  # hardware
+  boot.loader.grub.enable = true;
+  boot.loader.grub.version = 2;
+  boot.loader.grub.device = "/dev/sda";
+
+  boot.initrd.availableKernelModules = [ "uhci_hcd" "ehci_pci" "ata_piix" "usb_storage" "sd_mod" ];
+  boot.kernelModules = [ ];
+  boot.extraModulePackages = [ ];
+
+  fileSystems."/" = {
+    device = "/dev/disk/by-uuid/0aeda516-230e-4c54-9e27-13515c2f3f21";
+    fsType = "ext4";
+  };
+
+  swapDevices = [ { device = "/dev/disk/by-uuid/1914af67-5a8f-41d3-a1c2-211c39605da9"; } ];
+  users.users.user = {
+    isNormalUser = true;
+    extraGroups = [ "wheel" "audio" ];
+    uid = 1000;
+    openssh.authorizedKeys.keys = [ config.krebs.users.makefu.pubkey ];
+  };
+}
diff --git a/makefu/1systems/tsp.nix b/makefu/1systems/tsp.nix
index 9809abf4c..25fc2b49b 100644
--- a/makefu/1systems/tsp.nix
+++ b/makefu/1systems/tsp.nix
@@ -7,7 +7,7 @@
   imports =
     [ # Include the results of the hardware scan.
       ../.
-      ../2configs/base-gui.nix
+      ../2configs/gui/base.nix
       ../2configs/fs/sda-crypto-root.nix
       # hardware specifics are in here
       ../2configs/hw/tp-x200.nix #< imports tp-x2x0.nix
diff --git a/makefu/1systems/wbob.nix b/makefu/1systems/wbob.nix
index 43fbd6d2b..7f465ec72 100644
--- a/makefu/1systems/wbob.nix
+++ b/makefu/1systems/wbob.nix
@@ -1,20 +1,28 @@
 { config, pkgs, lib, ... }:
-let 
+let
   rootdisk = "/dev/disk/by-id/ata-TS256GMTS800_C613840115";
   datadisk = "/dev/disk/by-id/ata-HGST_HTS721010A9E630_JR10006PH3A02F";
+  user = config.makefu.gui.user;
 in {
 
   imports =
     [ # Include the results of the hardware scan.
       ../.
       ../2configs/zsh-user.nix
-      ../2configs/base-gui.nix
       ../2configs/tools/core.nix
       ../2configs/tools/core-gui.nix
       ../2configs/tools/extra-gui.nix
       ../2configs/tools/media.nix
       ../2configs/virtualization.nix
       ../2configs/tinc/retiolum.nix
+      ../2configs/mqtt.nix
+      ../2configs/deployment/led-fader.nix
+      # ../2configs/gui/wbob-kiosk.nix
+
+      ../2configs/gui/studio.nix
+      ../2configs/audio/jack-on-pulse.nix
+      ../2configs/audio/realtime-audio.nix
+      ../2configs/vncserver.nix
     ];
 
   krebs = {
@@ -24,25 +32,10 @@ in {
 
   swapDevices = [ { device = "/var/swap"; } ];
 
-  services.xserver = {
-    layout = lib.mkForce "de";
-
-    windowManager = lib.mkForce {
-      awesome.enable = false;
-      default = "none";
-    };
-    desktopManager.xfce.enable = true;
-
-    # xrandrHeads = [ "HDMI1" "HDMI2" ];
-    # prevent screen from turning off, disable dpms
-    displayManager.sessionCommands = ''
-      xset s off -dpms
-      xrandr --output HDMI2 --right-of HDMI1
-    '';
-  };
 
   networking.firewall.allowedUDPPorts = [ 655 ];
   networking.firewall.allowedTCPPorts = [ 655 49152 ];
+  networking.firewall.trustedInterfaces = [ "enp0s25" ];
   #services.tinc.networks.siem = {
   #  name = "display";
   #  extraConfig = ''
@@ -85,7 +78,7 @@ in {
   # TODO: add crypto layer
   systemd.services."synergy-client" = {
     environment.DISPLAY = ":0";
-    serviceConfig.User = "makefu";
+    serviceConfig.User = user;
   };
 
   services.synergy = {
diff --git a/makefu/1systems/x.nix b/makefu/1systems/x.nix
index 65df426e5..d1503c8d7 100644
--- a/makefu/1systems/x.nix
+++ b/makefu/1systems/x.nix
@@ -38,6 +38,8 @@ with import <stockholm/lib>;
       # ../2configs/temp/sabnzbd.nix
 
 
+      # development
+      ../2configs/sources
 
       # Krebs
       # ../2configs/disable_v6.nix
diff --git a/makefu/2configs/audio/jack-on-pulse.nix b/makefu/2configs/audio/jack-on-pulse.nix
new file mode 100644
index 000000000..09d03ea9f
--- /dev/null
+++ b/makefu/2configs/audio/jack-on-pulse.nix
@@ -0,0 +1,45 @@
+{ config, pkgs, ... }:
+let
+  pulse = pkgs.pulseaudioFull;
+  user = config.makefu.gui.user;
+in
+{
+  sound.enable = true;
+  hardware.pulseaudio = {
+    enable = true;
+    package = pulse;
+  };
+
+  environment.systemPackages = with pkgs; [ jack2Full ];
+  # from http://anderspapitto.com/posts/2015-11-26-overtone-on-nixos-with-jack-and-pulseaudio.html
+
+  systemd.services = {
+    jackdbus = {
+      description = "Runs jack, and points pulseaudio at it";
+      serviceConfig = {
+        User = user;
+        Type = "oneshot";
+        ExecStart = pkgs.writeScript "start_jack.sh" ''
+          #! ${pkgs.bash}/bin/bash
+          . ${config.system.build.setEnvironment}
+          sleep 5 # wait for the gui to load
+
+          ${pkgs.jack2Full}/bin/jack_control start
+          sleep 3 # give some time for sources/sinks to be created
+
+          ${pulse}/bin/pacmd set-default-sink jack_out
+          ${pulse}/bin/pacmd set-default-source jack_in
+        '';
+        ExecStop = pkgs.writeScript "stop_jack.sh" ''
+          #! ${pkgs.bash}/bin/bash
+          . ${config.system.build.setEnvironment}
+
+          ${pkgs.jack2Full}/bin/jack_control stop
+        '';
+        RemainAfterExit = true;
+      };
+      after = [ "display-manager.service" "sound.target" ];
+      wantedBy = [ "multi-user.target" ];
+    };
+  };
+}
diff --git a/makefu/2configs/audio/realtime-audio.nix b/makefu/2configs/audio/realtime-audio.nix
new file mode 100644
index 000000000..d9709e4b7
--- /dev/null
+++ b/makefu/2configs/audio/realtime-audio.nix
@@ -0,0 +1,12 @@
+{ config, pkgs, ... }:
+let
+  user = config.makefu.gui.user;
+in
+{
+  imports = [
+    ../sources/musnix.nix # populate musnix
+    <musnix>
+  ];
+  musnix.enable = true;
+  users.users."${user}".extraGroups = [ "audio" ];
+}
diff --git a/makefu/2configs/avahi.nix b/makefu/2configs/avahi.nix
new file mode 100644
index 000000000..59f59fd80
--- /dev/null
+++ b/makefu/2configs/avahi.nix
@@ -0,0 +1,8 @@
+{ pkgs, ...}:
+{
+  services.avahi = {
+    enable = true;
+    wideArea = false;
+  };
+  environment.systemPackages = [ pkgs.avahi ];
+}
diff --git a/makefu/2configs/backup.nix b/makefu/2configs/backup.nix
index 9ed890326..1cc78bfc1 100644
--- a/makefu/2configs/backup.nix
+++ b/makefu/2configs/backup.nix
@@ -1,4 +1,4 @@
-{ config, lib, ... }:
+{ config, lib, pkgs, ... }:
 with import <stockholm/lib>;
 let
   # preparation:
@@ -32,4 +32,7 @@ in {
     # wry-to-omo_root = defaultPull config.krebs.hosts.wry "/";
     gum-to-omo_root = defaultPull config.krebs.hosts.gum "/";
   };
+  environment.systemPackages = [
+    pkgs.borgbackup
+  ];
 }
diff --git a/makefu/2configs/default.nix b/makefu/2configs/default.nix
index 6cc891047..7d0faae94 100644
--- a/makefu/2configs/default.nix
+++ b/makefu/2configs/default.nix
@@ -22,7 +22,7 @@ with import <stockholm/lib>;
       user = config.krebs.users.makefu;
       source = let
           inherit (config.krebs.build) host user;
-          ref = "4fac473"; # unstable @ 2017-03-31 + command-not-found
+          ref = "0afb6d7"; # unstable @ 2017-05-09
       in {
         nixpkgs = if config.makefu.full-populate || (getEnv "dummy_secrets" == "true") then
           {
diff --git a/makefu/2configs/deployment/led-fader.nix b/makefu/2configs/deployment/led-fader.nix
new file mode 100644
index 000000000..a18416497
--- /dev/null
+++ b/makefu/2configs/deployment/led-fader.nix
@@ -0,0 +1,39 @@
+{ config, lib, pkgs, ... }:
+
+with import <stockholm/lib>;
+let
+  mq = "192.168.8.11";
+
+  pkg = pkgs.stdenv.mkDerivation {
+    name = "ampel-master";
+    src = pkgs.fetchgit {
+      url = "http://cgit.euer.krebsco.de/ampel";
+      rev = "07a6791de368e16cc0864d2676fd255eba522cee";
+      sha256 = "1jxjapvkfglvgapy7gjbr1nra3ay418nvz70bvypcmv7wc8d4h8q";
+    };
+    buildInputs = [
+      (pkgs.python35.withPackages (pythonPackages: with pythonPackages; [
+        docopt
+        paho-mqtt
+      ]))
+    ];
+    installPhase = ''
+      install -m755 -D fade.py  $out/bin/fade.py
+      install -m755 -D ampel.py $out/bin/ampel
+      install -m755 -D times.json $out/share/times.json
+    '';
+  };
+in {
+  systemd.services.led-fader  = {
+    description = "Send led change to message queue";
+    environment = {
+      NIX_PATH = "/var/src";
+    };
+    wantedBy = [ "multi-user.target" ];
+    serviceConfig = {
+      # User = "nobody"; # need a user with permissions to run nix-shell
+      ExecStart = "${pkg}/bin/ampel 4 ${pkg}/share/times.json";
+      PrivateTmp = true;
+    };
+  };
+}
diff --git a/makefu/2configs/git/cgit-retiolum.nix b/makefu/2configs/git/cgit-retiolum.nix
index 81a5cde81..96b6c303d 100644
--- a/makefu/2configs/git/cgit-retiolum.nix
+++ b/makefu/2configs/git/cgit-retiolum.nix
@@ -19,6 +19,7 @@ let
       cgit.desc = "Build new Stockholm hosts";
     };
     cac-api = { };
+    ampel = { };
     init-stockholm = {
       cgit.desc = "Init stuff for stockholm";
     };
diff --git a/makefu/2configs/base-gui.nix b/makefu/2configs/gui/base.nix
similarity index 95%
rename from makefu/2configs/base-gui.nix
rename to makefu/2configs/gui/base.nix
index 1a19ab36b..bf6bef29d 100644
--- a/makefu/2configs/base-gui.nix
+++ b/makefu/2configs/gui/base.nix
@@ -65,7 +65,7 @@ in
       cat |derp <<EOF
       XTerm*background: black
       XTerm*foreground: white
-      XTerm*FaceName  : xft:xos4 Terminus:pixelsize=14
+      XTerm*FaceName  : xft:xos4 Terminus:pixelsize=11
 
       URxvt*termName:         rxvt
       URxvt*saveLines:            10000
@@ -77,7 +77,7 @@ in
       URxvt.background: black
       URxvt.urgentOnBell: true
       URxvt.visualBell: false
-      URxvt.font : xft:xos4 Terminus:size=12
+      URxvt.font : xft:xos4 Terminus:size=11
 
 
       ! blue
diff --git a/makefu/2configs/gui/studio.nix b/makefu/2configs/gui/studio.nix
new file mode 100644
index 000000000..08157fda4
--- /dev/null
+++ b/makefu/2configs/gui/studio.nix
@@ -0,0 +1,22 @@
+{ config, lib, ... }:
+let
+  user = config.makefu.gui.user;
+in
+{
+  services.xserver.enable = true;
+  services.xserver.displayManager.sddm = {
+    enable = true;
+    autoLogin.enable = true;
+    autoLogin.user = user;
+  };
+  # services.xserver.windowMananger.default = "plasma5";
+  services.xserver.desktopManager = {
+    default = "plasma5";
+    plasma5.enable = true;
+  };
+
+  services.xserver.layout = "us";
+  services.xserver.xkbVariant = "altgr-intl";
+  services.xserver.xkbOptions = "ctrl:nocaps";
+
+}
diff --git a/makefu/2configs/urxvtd.nix b/makefu/2configs/gui/urxvtd.nix
similarity index 100%
rename from makefu/2configs/urxvtd.nix
rename to makefu/2configs/gui/urxvtd.nix
diff --git a/makefu/2configs/gui/wbob-kiosk.nix b/makefu/2configs/gui/wbob-kiosk.nix
new file mode 100644
index 000000000..4b7a0c333
--- /dev/null
+++ b/makefu/2configs/gui/wbob-kiosk.nix
@@ -0,0 +1,23 @@
+{ lib, ... }:
+{
+
+  imports = [
+      ./base.nix
+  ];
+  services.xserver = {
+    layout = lib.mkForce "de";
+
+    windowManager = lib.mkForce {
+      awesome.enable = false;
+      default = "none";
+    };
+    desktopManager.xfce.enable = true;
+
+    # xrandrHeads = [ "HDMI1" "HDMI2" ];
+    # prevent screen from turning off, disable dpms
+    displayManager.sessionCommands = ''
+      xset s off -dpms
+      xrandr --output HDMI2 --right-of HDMI1
+    '';
+  };
+}
diff --git a/makefu/2configs/main-laptop.nix b/makefu/2configs/main-laptop.nix
index eaf6dec97..827da0c8d 100644
--- a/makefu/2configs/main-laptop.nix
+++ b/makefu/2configs/main-laptop.nix
@@ -11,7 +11,7 @@ let
   user = config.krebs.build.user.name;
 in {
   imports = [
-    ./base-gui.nix
+    ./gui/base.nix
     ./fetchWallpaper.nix
     ./zsh-user.nix
     ./tools/core.nix
diff --git a/makefu/2configs/sources/default.nix b/makefu/2configs/sources/default.nix
new file mode 100644
index 000000000..232117aec
--- /dev/null
+++ b/makefu/2configs/sources/default.nix
@@ -0,0 +1,7 @@
+# the builder pc (my laptop) will also require the sources i use to deploy
+# other boxes
+{
+  imports = [
+    ./musnix.nix
+  ];
+}
diff --git a/makefu/2configs/sources/musnix.nix b/makefu/2configs/sources/musnix.nix
new file mode 100644
index 000000000..d02dd4a48
--- /dev/null
+++ b/makefu/2configs/sources/musnix.nix
@@ -0,0 +1,6 @@
+{
+  krebs.build.source.musnix.git = {
+    url = https://github.com/musnix/musnix.git;
+    ref = "37a8378";
+  };
+}
diff --git a/makefu/2configs/vncserver.nix b/makefu/2configs/vncserver.nix
new file mode 100644
index 000000000..c56b3e294
--- /dev/null
+++ b/makefu/2configs/vncserver.nix
@@ -0,0 +1,62 @@
+{config,lib,pkgs, ...}:
+with lib;
+let
+  pwfile = (toString <secrets>)+ "/vnc-password"; # create with `vncpasswd`
+  pwtmp = "/tmp/vnc-password";
+  # nixos-unstable tigervnc is currently broken :\
+  package = (import (fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-17.03.tar.gz) {}).pkgs.tigervnc;
+  user = config.makefu.gui.user;
+  vnc_port = 5900;
+  web_port = 6080;
+in {
+  networking.firewall.allowedTCPPorts = [ 80 vnc_port web_port ];
+  systemd.services = {
+    terminal-server = {
+      description = "VNC Terminal Server";
+      after = [ "display-manager.service"  "graphical.target" ];
+      wantedBy = [ "multi-user.target" ];
+      serviceConfig = {
+        User = user;
+        Restart = "always";
+        ExecStartPre = pkgs.writeDash "terminal-pre" ''
+          sleep 5
+          install -m0700 -o ${user} ${pwfile} ${pwtmp}
+        '';
+        ExecStart = "${package}/bin/x0vncserver -display :0 -rfbport ${toString vnc_port} -passwordfile ${pwtmp}";
+        PermissionsStartOnly = true;
+        PrivateTmp = true;
+      };
+    };
+    terminal-web = {
+      description = "noVNC Web Server";
+      after = [ "terminal-server.service"  "graphical.target" "network.target" ];
+      wantedBy = [ "multi-user.target" ];
+      serviceConfig = {
+        User = "nobody";
+        ExecStart = "${pkgs.novnc}/bin/launch-novnc.sh --listen ${toString web_port} --vnc localhost:${toString vnc_port}";
+				PrivateTmp = true;
+      };
+    };
+  };
+  services.nginx.enable = true;
+  services.nginx.virtualHosts._.locations = {
+    "/" = {
+      root = "${pkgs.novnc}";
+      index = "vnc_auto.html";
+    };
+    "/websockify" = {
+      proxyPass = "http://127.0.0.1:6080/";
+      extraConfig = ''
+        proxy_http_version 1.1;
+        proxy_set_header Upgrade $http_upgrade;
+        proxy_set_header Connection "upgrade";
+
+        # VNC connection timeout
+        proxy_read_timeout 61s;
+
+        # Disable cache
+        proxy_buffering off;
+      '';
+    };
+  };
+}
diff --git a/makefu/3modules/server-config.nix b/makefu/3modules/server-config.nix
index dbd29d748..846642580 100644
--- a/makefu/3modules/server-config.nix
+++ b/makefu/3modules/server-config.nix
@@ -6,5 +6,10 @@ with import <stockholm/lib>;
 		type = types.str;
 		description = "Primary interface of the server";
 	};
+  options.makefu.gui.user = lib.mkOption {
+		type = types.str;
+		description = "GUI user";
+    default = config.krebs.build.user.name;
+	};
 }
 
diff --git a/makefu/3modules/taskserver.nix b/makefu/3modules/taskserver.nix
index 808e70425..40a18fe05 100644
--- a/makefu/3modules/taskserver.nix
+++ b/makefu/3modules/taskserver.nix
@@ -41,8 +41,8 @@ let
         Type = "simple";
         ExecStart = "${cfg.package}/bin/taskd server --data ${cfg.workingDir}";
         WorkingDirectory = cfg.workingDir;
-        PrivateTmp = true;
-        InaccessibleDirectories = "/home /boot /opt /mnt /media";
+        # PrivateTmp = true;
+        # InaccessibleDirectories = "/home /boot /opt /mnt /media";
         User = "taskd";
       };
     };
diff --git a/makefu/5pkgs/alsa-tools/default.nix b/makefu/5pkgs/alsa-tools/default.nix
index 9a672f048..5134c10ec 100644
--- a/makefu/5pkgs/alsa-tools/default.nix
+++ b/makefu/5pkgs/alsa-tools/default.nix
@@ -1,4 +1,4 @@
-{stdenv,alsaToolTarget,fetchurl, alsaLib, ncurses, fltk13, gtk}:
+{stdenv,alsaToolTarget,fetchurl, alsaLib, ncurses, fltk13, gtk3}:
 
 stdenv.mkDerivation rec {
   name = "alsa-${alsaToolTarget}-${version}";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
     sha256 = "1lgvyb81md25s9ciswpdsbibmx9s030kvyylf0673w3kbamz1awl";
   };
   sourceRoot = "${alsaToolsName}/${alsaToolTarget}/";
-  buildInputs = [ alsaLib fltk13 gtk ncurses ];
+  buildInputs = [ alsaLib fltk13 gtk3 ncurses ];
 
   meta = {
     homepage = http://www.alsa-project.org/;
diff --git a/makefu/5pkgs/novnc/default.nix b/makefu/5pkgs/novnc/default.nix
new file mode 100644
index 000000000..b1d62248d
--- /dev/null
+++ b/makefu/5pkgs/novnc/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, pkgs }:
+# source: https://github.com/hyphon81/Nixtack/blob/master/noVNC/noVNC.nix
+let
+in
+
+stdenv.mkDerivation rec {
+  name = "novnc-${version}";
+  version = "0.6.2";
+
+  src = fetchurl {
+    url = "https://github.com/novnc/noVNC/archive/v${version}.tar.gz";
+    sha256 = "16ygbdzdmnfg9a26d9il4a6fr16qmq0ix9imfbpzl0drfbj7z8kh";
+  };
+  p = stdenv.lib.makeBinPath [ pkgs.nettools pkgs.python27Packages.websockify
+                               pkgs.coreutils pkgs.which pkgs.procps ];
+  # TODO: propagatedBuildInputs does not seem to work with shell scripts
+  patchPhase = ''
+    sed -i '1aset -efu\nexport PATH=${p}\n' utils/launch.sh
+  '';
+  installPhase = ''
+    mkdir -p $out/bin
+    cp utils/launch.sh $out/bin/launch-novnc.sh
+    chmod +x $out/bin/launch-novnc.sh
+    mkdir -p $out/images
+    cp -r images/* $out/images/
+    mkdir -p $out/include
+    cp -r include/* $out/include/
+    cp favicon.ico $out
+    cp vnc.html $out
+    cp vnc_auto.html $out
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://novnc.com/info.html;
+    repositories.git = git://github.com/novnc/noVNC.git;
+    description = ''
+      A HTML5 VNC Client
+    '';
+    license = licenses.mpl20;
+  };
+}
diff --git a/makefu/5pkgs/shackie/default.nix b/makefu/5pkgs/shackie/default.nix
new file mode 100644
index 000000000..ce926fcd6
--- /dev/null
+++ b/makefu/5pkgs/shackie/default.nix
@@ -0,0 +1,33 @@
+{ pkgs, fetchFromGitHub, ... }:
+with pkgs.python3Packages;
+let
+  asyncio-irc = buildPythonPackage rec {
+      name = "asyncio-irc-${version}";
+      version = "2016-09-02";
+      src = fetchFromGitHub {
+        owner = "watchtower";
+        repo = "asyncirc";
+        rev = "5384d19";
+        sha256 = "0xgzdvp0ig0im7r3vbqd3a9rzac0lkk2mvf7y4fw56p8k61df8nv";
+      };
+      propagatedBuildInputs = [ blinker ];
+  };
+in
+buildPythonPackage rec {
+    name = "shackie-${version}";
+    version = "2017-04-24";
+    propagatedBuildInputs = [
+      asyncio-irc
+      beautifulsoup4
+      lxml
+      pytz
+      redis
+      requests2
+    ];
+    src = fetchFromGitHub {
+      owner = "shackspace";
+      repo = "shackie";
+      rev = "e717ec7";
+      sha256 = "1ffbjm3x2xcyxl42hfsjs5xg1pm0xsprdi5if9zxa5ycqydmiw3l";
+    };
+}