From c89016b00630495698cd23177c6fe26ed989cbe4 Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Thu, 5 Apr 2018 16:36:12 +0200
Subject: [PATCH 01/14] go: fix build on 18.03

---
 krebs/5pkgs/simple/go-shortener/default.nix   | 35 +++++----
 .../simple/go-shortener/node-packages.nix     | 76 +++++++++++++++++++
 krebs/5pkgs/simple/go-shortener/packages.nix  | 44 -----------
 krebs/5pkgs/simple/go-shortener/pkgs.json     |  4 +
 krebs/5pkgs/simple/go-shortener/update.sh     |  2 +
 5 files changed, 99 insertions(+), 62 deletions(-)
 create mode 100644 krebs/5pkgs/simple/go-shortener/node-packages.nix
 delete mode 100644 krebs/5pkgs/simple/go-shortener/packages.nix
 create mode 100644 krebs/5pkgs/simple/go-shortener/pkgs.json
 create mode 100755 krebs/5pkgs/simple/go-shortener/update.sh

diff --git a/krebs/5pkgs/simple/go-shortener/default.nix b/krebs/5pkgs/simple/go-shortener/default.nix
index 996f7072a..4d1bef2be 100644
--- a/krebs/5pkgs/simple/go-shortener/default.nix
+++ b/krebs/5pkgs/simple/go-shortener/default.nix
@@ -1,25 +1,26 @@
-{ stdenv, makeWrapper, callPackage, lib, buildEnv, fetchgit, nodePackages, nodejs }:
+{ stdenv, makeWrapper, lib, buildEnv, fetchgit, nodejs-8_x, pkgs }:
 
 with lib;
 
 let
-  np = (callPackage <nixpkgs/pkgs/top-level/node-packages.nix>) {
-    generated = ./packages.nix;
-    self = np;
+  nodeEnv = import <nixpkgs/pkgs/development/node-packages/node-env.nix> {
+    inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
+    nodejs = nodejs-8_x;
+    libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
   };
 
-  node_env = buildEnv {
-    name = "node_env";
-    paths = [
-      np.redis
-      np."formidable"
-    ];
-    pathsToLink = [ "/lib" ];
-    ignoreCollisions = true;
+  node_env = pkgs.buildEnv {
+    name = "go-node_env";
+    paths = attrValues (import ./node-packages.nix {
+      inherit (pkgs) fetchurl fetchgit;
+      inherit nodeEnv;
+    });
   };
 
-in np.buildNodePackage {
+in stdenv.mkDerivation {
+  packageName = "go";
   name = "go-shortener";
+  version = "0.0.0";
 
   src = fetchgit {
     url = "http://cgit.lassul.us/go/";
@@ -32,10 +33,8 @@ in np.buildNodePackage {
     "installPhase"
   ];
 
-  deps = (filter (v: nixType v == "derivation") (attrValues np));
-
   buildInputs = [
-    nodejs
+    nodejs-8_x
     makeWrapper
   ];
 
@@ -44,14 +43,14 @@ in np.buildNodePackage {
 
     cp index.js $out/
     cat > $out/go << EOF
-      ${nodejs}/bin/node $out/index.js
+      ${nodejs-8_x}/bin/node $out/index.js
     EOF
     chmod +x $out/go
 
     wrapProgram $out/go \
       --prefix NODE_PATH : ${node_env}/lib/node_modules
 
-     ln -s $out/go /$out/bin/go
+    ln -s $out/go /$out/bin/go
   '';
 
 }
diff --git a/krebs/5pkgs/simple/go-shortener/node-packages.nix b/krebs/5pkgs/simple/go-shortener/node-packages.nix
new file mode 100644
index 000000000..526cd5a11
--- /dev/null
+++ b/krebs/5pkgs/simple/go-shortener/node-packages.nix
@@ -0,0 +1,76 @@
+# This file has been generated by node2nix 1.5.3. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
+
+let
+  sources = {
+    "double-ended-queue-2.1.0-0" = {
+      name = "double-ended-queue";
+      packageName = "double-ended-queue";
+      version = "2.1.0-0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz";
+        sha1 = "103d3527fd31528f40188130c841efdd78264e5c";
+      };
+    };
+    "redis-commands-1.3.5" = {
+      name = "redis-commands";
+      packageName = "redis-commands";
+      version = "1.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.5.tgz";
+        sha512 = "2q8pai3gf0dczb03jjig3mpaz4j2kvw8icpgf8hp4fryr3d6c0mjkvxxdmlyhainybx4zhgqsw9ghc9p986alzdzd2n2p4cxvr8b0by";
+      };
+    };
+    "redis-parser-2.6.0" = {
+      name = "redis-parser";
+      packageName = "redis-parser";
+      version = "2.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz";
+        sha1 = "52ed09dacac108f1a631c07e9b69941e7a19504b";
+      };
+    };
+  };
+in
+{
+  formidable = nodeEnv.buildNodePackage {
+    name = "formidable";
+    packageName = "formidable";
+    version = "1.2.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz";
+      sha512 = "1x0n2rfaiasdjbw1mm7s29z84f68c7iji7lb1gkxvpknvv6q7bwns7z55ijcf4vkh4kvis12rbgaaih49jf9lj53s30mllb1d35bkqn";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A node.js module for parsing form data, especially file uploads.";
+      homepage = https://github.com/felixge/node-formidable;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = true;
+  };
+  redis = nodeEnv.buildNodePackage {
+    name = "redis";
+    packageName = "redis";
+    version = "2.8.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz";
+      sha512 = "3a3044ax6qdvss83xgjfx10h5q91ls0mwgs3wpsnxcdsiipq3cnmqzsh6glyq0r7vsmpw49jp84c2jnfrhi2bgycrkd9hhhf6ia8lrk";
+    };
+    dependencies = [
+      sources."double-ended-queue-2.1.0-0"
+      sources."redis-commands-1.3.5"
+      sources."redis-parser-2.6.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Redis client library";
+      homepage = https://github.com/NodeRedis/node_redis;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = true;
+  };
+}
\ No newline at end of file
diff --git a/krebs/5pkgs/simple/go-shortener/packages.nix b/krebs/5pkgs/simple/go-shortener/packages.nix
deleted file mode 100644
index 9acfd7658..000000000
--- a/krebs/5pkgs/simple/go-shortener/packages.nix
+++ /dev/null
@@ -1,44 +0,0 @@
-{ self, fetchurl, fetchgit ? null, lib }:
-
-{
-  by-spec."formidable"."*" =
-    self.by-version."formidable"."1.0.17";
-  by-version."formidable"."1.0.17" = self.buildNodePackage {
-    name = "formidable-1.0.17";
-    version = "1.0.17";
-    bin = false;
-    src = fetchurl {
-      url = "http://registry.npmjs.org/formidable/-/formidable-1.0.17.tgz";
-      name = "formidable-1.0.17.tgz";
-      sha1 = "ef5491490f9433b705faa77249c99029ae348559";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  "formidable" = self.by-version."formidable"."1.0.17";
-  by-spec."redis"."*" =
-    self.by-version."redis"."2.1.0";
-  by-version."redis"."2.1.0" = self.buildNodePackage {
-    name = "redis-2.1.0";
-    version = "2.1.0";
-    bin = false;
-    src = fetchurl {
-      url = "http://registry.npmjs.org/redis/-/redis-2.1.0.tgz";
-      name = "redis-2.1.0.tgz";
-      sha1 = "38acb208f90750250f9451219b73ff08ae907f94";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  "redis" = self.by-version."redis"."2.1.0";
-}
diff --git a/krebs/5pkgs/simple/go-shortener/pkgs.json b/krebs/5pkgs/simple/go-shortener/pkgs.json
new file mode 100644
index 000000000..f53ce3745
--- /dev/null
+++ b/krebs/5pkgs/simple/go-shortener/pkgs.json
@@ -0,0 +1,4 @@
+[
+  "formidable",
+  "redis"
+]
diff --git a/krebs/5pkgs/simple/go-shortener/update.sh b/krebs/5pkgs/simple/go-shortener/update.sh
new file mode 100755
index 000000000..0c1ecc58c
--- /dev/null
+++ b/krebs/5pkgs/simple/go-shortener/update.sh
@@ -0,0 +1,2 @@
+node2nix -8 -i pkgs.json -c combine.nix
+rm node-env.nix combine.nix

From 0a4df44a8a3e925bcf59802fcdb59dc16157bae7 Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Thu, 5 Apr 2018 17:25:50 +0200
Subject: [PATCH 02/14] newsbot-js: fix build on 18.03

---
 krebs/5pkgs/simple/newsbot-js/default.nix     |   39 +-
 .../5pkgs/simple/newsbot-js/node-packages.nix |  844 ++++++++
 krebs/5pkgs/simple/newsbot-js/packages.nix    | 1747 -----------------
 krebs/5pkgs/simple/newsbot-js/pkgs.json       |    7 +
 krebs/5pkgs/simple/newsbot-js/update.sh       |    2 +
 5 files changed, 871 insertions(+), 1768 deletions(-)
 create mode 100644 krebs/5pkgs/simple/newsbot-js/node-packages.nix
 delete mode 100644 krebs/5pkgs/simple/newsbot-js/packages.nix
 create mode 100644 krebs/5pkgs/simple/newsbot-js/pkgs.json
 create mode 100755 krebs/5pkgs/simple/newsbot-js/update.sh

diff --git a/krebs/5pkgs/simple/newsbot-js/default.nix b/krebs/5pkgs/simple/newsbot-js/default.nix
index fa39823d3..cc362b86a 100644
--- a/krebs/5pkgs/simple/newsbot-js/default.nix
+++ b/krebs/5pkgs/simple/newsbot-js/default.nix
@@ -1,27 +1,27 @@
-{ stdenv, makeWrapper, callPackage, lib, buildEnv, fetchgit, nodePackages, nodejs }:
+{ stdenv, makeWrapper, lib, buildEnv, fetchgit, nodejs-8_x, pkgs, icu }:
 
 with lib;
 
 let
-  np = (callPackage <nixpkgs/pkgs/top-level/node-packages.nix>) {
-    generated = ./packages.nix;
-    self = np;
+  nodeEnv = import <nixpkgs/pkgs/development/node-packages/node-env.nix> {
+    inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
+    nodejs = nodejs-8_x;
+    libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
   };
 
-  node_env = buildEnv {
-    name = "node_env";
-    paths = [
-      np.feedparser
-      np.form-data
-      np.irc
-      np.request
-      np.shell-quote
-    ];
-    pathsToLink = [ "/lib" ];
-    ignoreCollisions = true;
+  node_env = pkgs.buildEnv {
+    name = "go-node_env";
+    paths = attrValues (import ./node-packages.nix {
+      inherit (pkgs) fetchurl fetchgit;
+      inherit nodeEnv;
+      globalBuildInputs = [
+        icu.dev
+      ];
+    });
   };
 
-in np.buildNodePackage {
+
+in stdenv.mkDerivation {
   name = "newsbot-js";
 
   src = fetchgit {
@@ -32,14 +32,11 @@ in np.buildNodePackage {
 
   phases = [
     "unpackPhase"
-    "patchPhase"
     "installPhase"
   ];
 
-  deps = (filter (v: nixType v == "derivation") (attrValues np));
-
   buildInputs = [
-    nodejs
+    nodejs-8_x
     makeWrapper
   ];
 
@@ -48,7 +45,7 @@ in np.buildNodePackage {
 
     cp newsbot.js $out/
     cat > $out/newsbot << EOF
-      ${nodejs}/bin/node $out/newsbot.js
+      ${nodejs-8_x}/bin/node $out/newsbot.js
     EOF
     chmod +x $out/newsbot
 
diff --git a/krebs/5pkgs/simple/newsbot-js/node-packages.nix b/krebs/5pkgs/simple/newsbot-js/node-packages.nix
new file mode 100644
index 000000000..d6b2a06dd
--- /dev/null
+++ b/krebs/5pkgs/simple/newsbot-js/node-packages.nix
@@ -0,0 +1,844 @@
+# This file has been generated by node2nix 1.5.3. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
+
+let
+  sources = {
+    "addressparser-1.0.1" = {
+      name = "addressparser";
+      packageName = "addressparser";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz";
+        sha1 = "47afbe1a2a9262191db6838e4fd1d39b40821746";
+      };
+    };
+    "ajv-5.5.2" = {
+      name = "ajv";
+      packageName = "ajv";
+      version = "5.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz";
+        sha1 = "73b5eeca3fab653e3d3f9422b341ad42205dc965";
+      };
+    };
+    "array-filter-0.0.1" = {
+      name = "array-filter";
+      packageName = "array-filter";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz";
+        sha1 = "7da8cf2e26628ed732803581fd21f67cacd2eeec";
+      };
+    };
+    "array-indexofobject-0.0.1" = {
+      name = "array-indexofobject";
+      packageName = "array-indexofobject";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-indexofobject/-/array-indexofobject-0.0.1.tgz";
+        sha1 = "aaa128e62c9b3c358094568c219ff64fe489d42a";
+      };
+    };
+    "array-map-0.0.0" = {
+      name = "array-map";
+      packageName = "array-map";
+      version = "0.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz";
+        sha1 = "88a2bab73d1cf7bcd5c1b118a003f66f665fa662";
+      };
+    };
+    "array-reduce-0.0.0" = {
+      name = "array-reduce";
+      packageName = "array-reduce";
+      version = "0.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz";
+        sha1 = "173899d3ffd1c7d9383e4479525dbe278cab5f2b";
+      };
+    };
+    "asn1-0.2.3" = {
+      name = "asn1";
+      packageName = "asn1";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz";
+        sha1 = "dac8787713c9966849fc8180777ebe9c1ddf3b86";
+      };
+    };
+    "assert-plus-1.0.0" = {
+      name = "assert-plus";
+      packageName = "assert-plus";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
+        sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
+      };
+    };
+    "asynckit-0.4.0" = {
+      name = "asynckit";
+      packageName = "asynckit";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
+        sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
+      };
+    };
+    "aws-sign2-0.7.0" = {
+      name = "aws-sign2";
+      packageName = "aws-sign2";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz";
+        sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
+      };
+    };
+    "aws4-1.6.0" = {
+      name = "aws4";
+      packageName = "aws4";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz";
+        sha1 = "83ef5ca860b2b32e4a0deedee8c771b9db57471e";
+      };
+    };
+    "bcrypt-pbkdf-1.0.1" = {
+      name = "bcrypt-pbkdf";
+      packageName = "bcrypt-pbkdf";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz";
+        sha1 = "63bc5dcb61331b92bc05fd528953c33462a06f8d";
+      };
+    };
+    "boom-4.3.1" = {
+      name = "boom";
+      packageName = "boom";
+      version = "4.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz";
+        sha1 = "4f8a3005cb4a7e3889f749030fd25b96e01d2e31";
+      };
+    };
+    "boom-5.2.0" = {
+      name = "boom";
+      packageName = "boom";
+      version = "5.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz";
+        sha512 = "19h20yqpvca08dns1rs4f057f10w63v0snxfml4h5khsk266x3x1im0w72bza4k2xn0kfz6jlv001dhcvxsjr09bmbqnysils9m7437";
+      };
+    };
+    "caseless-0.12.0" = {
+      name = "caseless";
+      packageName = "caseless";
+      version = "0.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz";
+        sha1 = "1b681c21ff84033c826543090689420d187151dc";
+      };
+    };
+    "co-4.6.0" = {
+      name = "co";
+      packageName = "co";
+      version = "4.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/co/-/co-4.6.0.tgz";
+        sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184";
+      };
+    };
+    "combined-stream-1.0.6" = {
+      name = "combined-stream";
+      packageName = "combined-stream";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz";
+        sha1 = "723e7df6e801ac5613113a7e445a9b69cb632818";
+      };
+    };
+    "core-util-is-1.0.2" = {
+      name = "core-util-is";
+      packageName = "core-util-is";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
+        sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
+      };
+    };
+    "cryptiles-3.1.2" = {
+      name = "cryptiles";
+      packageName = "cryptiles";
+      version = "3.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz";
+        sha1 = "a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe";
+      };
+    };
+    "dashdash-1.14.1" = {
+      name = "dashdash";
+      packageName = "dashdash";
+      version = "1.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
+        sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
+      };
+    };
+    "delayed-stream-1.0.0" = {
+      name = "delayed-stream";
+      packageName = "delayed-stream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
+        sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
+      };
+    };
+    "ecc-jsbn-0.1.1" = {
+      name = "ecc-jsbn";
+      packageName = "ecc-jsbn";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz";
+        sha1 = "0fc73a9ed5f0d53c38193398523ef7e543777505";
+      };
+    };
+    "extend-3.0.1" = {
+      name = "extend";
+      packageName = "extend";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz";
+        sha1 = "a755ea7bc1adfcc5a31ce7e762dbaadc5e636444";
+      };
+    };
+    "extsprintf-1.3.0" = {
+      name = "extsprintf";
+      packageName = "extsprintf";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz";
+        sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
+      };
+    };
+    "fast-deep-equal-1.1.0" = {
+      name = "fast-deep-equal";
+      packageName = "fast-deep-equal";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz";
+        sha1 = "c053477817c86b51daa853c81e059b733d023614";
+      };
+    };
+    "fast-json-stable-stringify-2.0.0" = {
+      name = "fast-json-stable-stringify";
+      packageName = "fast-json-stable-stringify";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz";
+        sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2";
+      };
+    };
+    "forever-agent-0.6.1" = {
+      name = "forever-agent";
+      packageName = "forever-agent";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
+        sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
+      };
+    };
+    "form-data-2.3.2" = {
+      name = "form-data";
+      packageName = "form-data";
+      version = "2.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz";
+        sha1 = "4970498be604c20c005d4f5c23aecd21d6b49099";
+      };
+    };
+    "getpass-0.1.7" = {
+      name = "getpass";
+      packageName = "getpass";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
+        sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
+      };
+    };
+    "har-schema-2.0.0" = {
+      name = "har-schema";
+      packageName = "har-schema";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
+        sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
+      };
+    };
+    "har-validator-5.0.3" = {
+      name = "har-validator";
+      packageName = "har-validator";
+      version = "5.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz";
+        sha1 = "ba402c266194f15956ef15e0fcf242993f6a7dfd";
+      };
+    };
+    "hawk-6.0.2" = {
+      name = "hawk";
+      packageName = "hawk";
+      version = "6.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz";
+        sha512 = "1nl2hjr2mnhj5jlaz8mh54z7acwz5j5idkch04qgjk78756gw5d0fjk4a2immil5ij9ijdssb9ndpryvnh2xpcbgcjv8lxybn330als";
+      };
+    };
+    "hoek-4.2.1" = {
+      name = "hoek";
+      packageName = "hoek";
+      version = "4.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz";
+        sha512 = "1y8kprb3qldxqj31zai5n8dvhydsl9nn5w4rskhnbzzhldn6pm6n5lcyam3sfkb61a62d5m58k8im7z6ngwbd9cw9zp4zm4y7ckrf20";
+      };
+    };
+    "http-signature-1.2.0" = {
+      name = "http-signature";
+      packageName = "http-signature";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";
+        sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
+      };
+    };
+    "iconv-2.2.3" = {
+      name = "iconv";
+      packageName = "iconv";
+      version = "2.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/iconv/-/iconv-2.2.3.tgz";
+        sha1 = "e084d60eeb7d73da7f0a9c096e4c8abe090bfaed";
+      };
+    };
+    "inherits-2.0.3" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
+        sha1 = "633c2c83e3da42a502f52466022480f4208261de";
+      };
+    };
+    "irc-colors-1.4.2" = {
+      name = "irc-colors";
+      packageName = "irc-colors";
+      version = "1.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/irc-colors/-/irc-colors-1.4.2.tgz";
+        sha512 = "0f75yhavbhr8lbh3lh83rvyfrrrcxjawnd2rz7sacjd3zxj5524xr28j66f2l11vlngdkbplxz5xsq9dnwrcyqa0jh64k2pvzhn17a1";
+      };
+    };
+    "is-typedarray-1.0.0" = {
+      name = "is-typedarray";
+      packageName = "is-typedarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
+        sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
+      };
+    };
+    "isarray-1.0.0" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
+        sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
+      };
+    };
+    "isstream-0.1.2" = {
+      name = "isstream";
+      packageName = "isstream";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
+        sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
+      };
+    };
+    "jsbn-0.1.1" = {
+      name = "jsbn";
+      packageName = "jsbn";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
+        sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
+      };
+    };
+    "json-schema-0.2.3" = {
+      name = "json-schema";
+      packageName = "json-schema";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
+        sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
+      };
+    };
+    "json-schema-traverse-0.3.1" = {
+      name = "json-schema-traverse";
+      packageName = "json-schema-traverse";
+      version = "0.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz";
+        sha1 = "349a6d44c53a51de89b40805c5d5e59b417d3340";
+      };
+    };
+    "json-stringify-safe-5.0.1" = {
+      name = "json-stringify-safe";
+      packageName = "json-stringify-safe";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
+        sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
+      };
+    };
+    "jsonify-0.0.0" = {
+      name = "jsonify";
+      packageName = "jsonify";
+      version = "0.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz";
+        sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73";
+      };
+    };
+    "jsprim-1.4.1" = {
+      name = "jsprim";
+      packageName = "jsprim";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz";
+        sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
+      };
+    };
+    "lodash.assign-4.2.0" = {
+      name = "lodash.assign";
+      packageName = "lodash.assign";
+      version = "4.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz";
+        sha1 = "0d99f3ccd7a6d261d19bdaeb9245005d285808e7";
+      };
+    };
+    "lodash.get-4.4.2" = {
+      name = "lodash.get";
+      packageName = "lodash.get";
+      version = "4.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz";
+        sha1 = "2d177f652fa31e939b4438d5341499dfa3825e99";
+      };
+    };
+    "lodash.has-4.5.2" = {
+      name = "lodash.has";
+      packageName = "lodash.has";
+      version = "4.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz";
+        sha1 = "d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862";
+      };
+    };
+    "lodash.uniq-4.5.0" = {
+      name = "lodash.uniq";
+      packageName = "lodash.uniq";
+      version = "4.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz";
+        sha1 = "d0225373aeb652adc1bc82e4945339a842754773";
+      };
+    };
+    "mime-db-1.33.0" = {
+      name = "mime-db";
+      packageName = "mime-db";
+      version = "1.33.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz";
+        sha512 = "36xnw59ik9fqym00cmwb5nyzg0l03k70cp413f7639j93wgmzk1mh0xjc7i6zz3r6k9xnwh0g5cm5a1f3y8c6plgy4qld7fm887ywh4";
+      };
+    };
+    "mime-types-2.1.18" = {
+      name = "mime-types";
+      packageName = "mime-types";
+      version = "2.1.18";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz";
+        sha512 = "22krj1kw7n9z10zdyx7smcaim4bzwqsqzhspwha06q58gcrxfp93hw2cd0vk5crhq5p2dwzqlpacg32lrmp5sjzb798zdzy35mdmkwm";
+      };
+    };
+    "mri-1.1.0" = {
+      name = "mri";
+      packageName = "mri";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mri/-/mri-1.1.0.tgz";
+        sha1 = "5c0a3f29c8ccffbbb1ec941dcec09d71fa32f36a";
+      };
+    };
+    "nan-2.10.0" = {
+      name = "nan";
+      packageName = "nan";
+      version = "2.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz";
+        sha512 = "349rr7x0djrlkav4gbhkg355852ingn965r0kkch8rr4cwp7qki9676zpq8cq988yszzd2hld6szsbbnd1v6rghzf11abn1nyzlj1vc";
+      };
+    };
+    "node-icu-charset-detector-0.2.0" = {
+      name = "node-icu-charset-detector";
+      packageName = "node-icu-charset-detector";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-icu-charset-detector/-/node-icu-charset-detector-0.2.0.tgz";
+        sha1 = "c2320da374ddcb671fc54cb4a0e041e156ffd639";
+      };
+    };
+    "oauth-sign-0.8.2" = {
+      name = "oauth-sign";
+      packageName = "oauth-sign";
+      version = "0.8.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz";
+        sha1 = "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43";
+      };
+    };
+    "performance-now-2.1.0" = {
+      name = "performance-now";
+      packageName = "performance-now";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
+        sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
+      };
+    };
+    "process-nextick-args-2.0.0" = {
+      name = "process-nextick-args";
+      packageName = "process-nextick-args";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz";
+        sha512 = "0rw8xpqqkhs91722slvzf8icxfaimqp4w8zb3840jxr7r8n8035byl6dhdi5bm0yr6x7sdws0gf3m025fg6hqgaklwlbl4d7bah5l9j";
+      };
+    };
+    "punycode-1.4.1" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz";
+        sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
+      };
+    };
+    "qs-6.5.1" = {
+      name = "qs";
+      packageName = "qs";
+      version = "6.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz";
+        sha512 = "3waqapyj1k4g135sgj636rmswiaixq19is1rw0rpv4qp6k7dl0a9nwy06m7yl5lbdk9p6xpwwngnggbzlzaz6rh11c86j2nvnnf273r";
+      };
+    };
+    "readable-stream-2.3.6" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "2.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz";
+        sha512 = "0mj9b6190amln9rg89x5pq2n195s3v0gzicpdamv1kbabg69aw5m71l34jsjn7bqil7405l6l35x9ijnb3h4jz5vx2i00l8sl1ll2xm";
+      };
+    };
+    "safe-buffer-5.1.1" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz";
+        sha512 = "1p28rllll1w65yzq5azi4izx962399xdsdlfbaynn7vmp981hiss05jhiy9hm7sbbfk3b4dhlcv0zy07fc59mnc07hdv6wcgqkcvawh";
+      };
+    };
+    "sax-1.2.4" = {
+      name = "sax";
+      packageName = "sax";
+      version = "1.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz";
+        sha512 = "1dn291mjsda42w8kldlbmngk6dhjxfbvvd5lckyqmwbjaj6069iq3wx0nvcfglwnpddz2qa93lzf4hv77iz43bd2qixa079sjzl799n";
+      };
+    };
+    "sntp-2.1.0" = {
+      name = "sntp";
+      packageName = "sntp";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz";
+        sha512 = "0k2smmr24w5hb1cpql6vcgh58vzp4pmh9anf0bgz3arlsgq1mapnlq9fjqr6xs10aq1cmxaw987fwknqi62frax0fvs9bj3q3kmpg8l";
+      };
+    };
+    "sshpk-1.14.1" = {
+      name = "sshpk";
+      packageName = "sshpk";
+      version = "1.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz";
+        sha1 = "130f5975eddad963f1d56f92b9ac6c51fa9f83eb";
+      };
+    };
+    "string_decoder-1.1.1" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
+        sha512 = "315yd4vzwrwk3vwj1klf46y1cj2jbvf88066y2rnwhksb98phj46jkxixbwsp3h607w7czy7cby522s7sx8mvspdpdm3s72y2ga3x4z";
+      };
+    };
+    "stringstream-0.0.5" = {
+      name = "stringstream";
+      packageName = "stringstream";
+      version = "0.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz";
+        sha1 = "4e484cd4de5a0bbbee18e46307710a8a81621878";
+      };
+    };
+    "tough-cookie-2.3.4" = {
+      name = "tough-cookie";
+      packageName = "tough-cookie";
+      version = "2.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz";
+        sha512 = "0ncm6j3cjq1f26mzjf04k9bkw1b08w53s4qa3a11c1bdj4pgnqv1422c1xs5jyy6y1psppjx52fhagq5zkjkgrcpdkxcdiry96r77jd";
+      };
+    };
+    "tunnel-agent-0.6.0" = {
+      name = "tunnel-agent";
+      packageName = "tunnel-agent";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
+        sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
+      };
+    };
+    "tweetnacl-0.14.5" = {
+      name = "tweetnacl";
+      packageName = "tweetnacl";
+      version = "0.14.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
+        sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
+      };
+    };
+    "util-deprecate-1.0.2" = {
+      name = "util-deprecate";
+      packageName = "util-deprecate";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
+        sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
+      };
+    };
+    "uuid-3.2.1" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "3.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz";
+        sha512 = "0843vl1c974n8kw5kn0kvhvhwk8y8jydr0xkwwl2963xxmkw4ingk6xj9c8m48jw2i95giglxzq5aw5v5mij9kv7fzln8pxav1cr6cd";
+      };
+    };
+    "verror-1.10.0" = {
+      name = "verror";
+      packageName = "verror";
+      version = "1.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";
+        sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
+      };
+    };
+  };
+in
+{
+  feedparser = nodeEnv.buildNodePackage {
+    name = "feedparser";
+    packageName = "feedparser";
+    version = "2.2.9";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/feedparser/-/feedparser-2.2.9.tgz";
+      sha1 = "9138197dafdae05fcadde0036beeaf6066c2c5e9";
+    };
+    dependencies = [
+      sources."addressparser-1.0.1"
+      sources."array-indexofobject-0.0.1"
+      sources."core-util-is-1.0.2"
+      sources."inherits-2.0.3"
+      sources."isarray-1.0.0"
+      sources."lodash.assign-4.2.0"
+      sources."lodash.get-4.4.2"
+      sources."lodash.has-4.5.2"
+      sources."lodash.uniq-4.5.0"
+      sources."mri-1.1.0"
+      sources."process-nextick-args-2.0.0"
+      sources."readable-stream-2.3.6"
+      sources."safe-buffer-5.1.1"
+      sources."sax-1.2.4"
+      sources."string_decoder-1.1.1"
+      sources."util-deprecate-1.0.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Robust RSS Atom and RDF feed parsing using sax js";
+      homepage = http://github.com/danmactough/node-feedparser;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = true;
+  };
+  form-data = nodeEnv.buildNodePackage {
+    name = "form-data";
+    packageName = "form-data";
+    version = "2.3.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz";
+      sha1 = "4970498be604c20c005d4f5c23aecd21d6b49099";
+    };
+    dependencies = [
+      sources."asynckit-0.4.0"
+      sources."combined-stream-1.0.6"
+      sources."delayed-stream-1.0.0"
+      sources."mime-db-1.33.0"
+      sources."mime-types-2.1.18"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A library to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = true;
+  };
+  irc = nodeEnv.buildNodePackage {
+    name = "irc";
+    packageName = "irc";
+    version = "0.5.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/irc/-/irc-0.5.2.tgz";
+      sha1 = "3714f4768365a96d0b2f776bc91166beb2464bbc";
+    };
+    dependencies = [
+      sources."iconv-2.2.3"
+      sources."irc-colors-1.4.2"
+      sources."nan-2.10.0"
+      sources."node-icu-charset-detector-0.2.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "An IRC client library for node";
+      homepage = "https://github.com/martynsmith/node-irc#readme";
+      license = "GPL-3.0";
+    };
+    production = true;
+    bypassCache = true;
+  };
+  request = nodeEnv.buildNodePackage {
+    name = "request";
+    packageName = "request";
+    version = "2.85.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/request/-/request-2.85.0.tgz";
+      sha512 = "2d3hg10zs5ycnr8prmiwdhacf88fl0x0bi6szs0z2r07zcbk419laixwpjp8sqapbc2ifyyih7p3r60wgr58bmcncz3pqnx523c8zph";
+    };
+    dependencies = [
+      sources."ajv-5.5.2"
+      sources."asn1-0.2.3"
+      sources."assert-plus-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.6.0"
+      sources."bcrypt-pbkdf-1.0.1"
+      sources."boom-4.3.1"
+      sources."caseless-0.12.0"
+      sources."co-4.6.0"
+      sources."combined-stream-1.0.6"
+      sources."core-util-is-1.0.2"
+      (sources."cryptiles-3.1.2" // {
+        dependencies = [
+          sources."boom-5.2.0"
+        ];
+      })
+      sources."dashdash-1.14.1"
+      sources."delayed-stream-1.0.0"
+      sources."ecc-jsbn-0.1.1"
+      sources."extend-3.0.1"
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-1.1.0"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.2"
+      sources."getpass-0.1.7"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.0.3"
+      sources."hawk-6.0.2"
+      sources."hoek-4.2.1"
+      sources."http-signature-1.2.0"
+      sources."is-typedarray-1.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.3.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsprim-1.4.1"
+      sources."mime-db-1.33.0"
+      sources."mime-types-2.1.18"
+      sources."oauth-sign-0.8.2"
+      sources."performance-now-2.1.0"
+      sources."punycode-1.4.1"
+      sources."qs-6.5.1"
+      sources."safe-buffer-5.1.1"
+      sources."sntp-2.1.0"
+      sources."sshpk-1.14.1"
+      sources."stringstream-0.0.5"
+      sources."tough-cookie-2.3.4"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."uuid-3.2.1"
+      sources."verror-1.10.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Simplified HTTP request client.";
+      homepage = "https://github.com/request/request#readme";
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = true;
+  };
+  shell-quote = nodeEnv.buildNodePackage {
+    name = "shell-quote";
+    packageName = "shell-quote";
+    version = "1.6.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz";
+      sha1 = "f4781949cce402697127430ea3b3c5476f481767";
+    };
+    dependencies = [
+      sources."array-filter-0.0.1"
+      sources."array-map-0.0.0"
+      sources."array-reduce-0.0.0"
+      sources."jsonify-0.0.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "quote and parse shell commands";
+      homepage = "https://github.com/substack/node-shell-quote#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = true;
+  };
+}
\ No newline at end of file
diff --git a/krebs/5pkgs/simple/newsbot-js/packages.nix b/krebs/5pkgs/simple/newsbot-js/packages.nix
deleted file mode 100644
index 62921cb8f..000000000
--- a/krebs/5pkgs/simple/newsbot-js/packages.nix
+++ /dev/null
@@ -1,1747 +0,0 @@
-{ self, fetchurl, fetchgit ? null, lib }:
-
-{
-  by-spec."addressparser"."^1.0.1" =
-    self.by-version."addressparser"."1.0.1";
-  by-version."addressparser"."1.0.1" = self.buildNodePackage {
-    name = "addressparser-1.0.1";
-    version = "1.0.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz";
-      name = "addressparser-1.0.1.tgz";
-      sha1 = "47afbe1a2a9262191db6838e4fd1d39b40821746";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."ansi-regex"."^2.0.0" =
-    self.by-version."ansi-regex"."2.1.1";
-  by-version."ansi-regex"."2.1.1" = self.buildNodePackage {
-    name = "ansi-regex-2.1.1";
-    version = "2.1.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
-      name = "ansi-regex-2.1.1.tgz";
-      sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."ansi-styles"."^2.2.1" =
-    self.by-version."ansi-styles"."2.2.1";
-  by-version."ansi-styles"."2.2.1" = self.buildNodePackage {
-    name = "ansi-styles-2.2.1";
-    version = "2.2.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
-      name = "ansi-styles-2.2.1.tgz";
-      sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."array-filter"."~0.0.0" =
-    self.by-version."array-filter"."0.0.1";
-  by-version."array-filter"."0.0.1" = self.buildNodePackage {
-    name = "array-filter-0.0.1";
-    version = "0.0.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz";
-      name = "array-filter-0.0.1.tgz";
-      sha1 = "7da8cf2e26628ed732803581fd21f67cacd2eeec";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."array-indexofobject"."~0.0.1" =
-    self.by-version."array-indexofobject"."0.0.1";
-  by-version."array-indexofobject"."0.0.1" = self.buildNodePackage {
-    name = "array-indexofobject-0.0.1";
-    version = "0.0.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/array-indexofobject/-/array-indexofobject-0.0.1.tgz";
-      name = "array-indexofobject-0.0.1.tgz";
-      sha1 = "aaa128e62c9b3c358094568c219ff64fe489d42a";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."array-map"."~0.0.0" =
-    self.by-version."array-map"."0.0.0";
-  by-version."array-map"."0.0.0" = self.buildNodePackage {
-    name = "array-map-0.0.0";
-    version = "0.0.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz";
-      name = "array-map-0.0.0.tgz";
-      sha1 = "88a2bab73d1cf7bcd5c1b118a003f66f665fa662";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."array-reduce"."~0.0.0" =
-    self.by-version."array-reduce"."0.0.0";
-  by-version."array-reduce"."0.0.0" = self.buildNodePackage {
-    name = "array-reduce-0.0.0";
-    version = "0.0.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz";
-      name = "array-reduce-0.0.0.tgz";
-      sha1 = "173899d3ffd1c7d9383e4479525dbe278cab5f2b";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."asn1"."~0.2.3" =
-    self.by-version."asn1"."0.2.3";
-  by-version."asn1"."0.2.3" = self.buildNodePackage {
-    name = "asn1-0.2.3";
-    version = "0.2.3";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz";
-      name = "asn1-0.2.3.tgz";
-      sha1 = "dac8787713c9966849fc8180777ebe9c1ddf3b86";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."assert-plus"."^0.2.0" =
-    self.by-version."assert-plus"."0.2.0";
-  by-version."assert-plus"."0.2.0" = self.buildNodePackage {
-    name = "assert-plus-0.2.0";
-    version = "0.2.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz";
-      name = "assert-plus-0.2.0.tgz";
-      sha1 = "d74e1b87e7affc0db8aadb7021f3fe48101ab234";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."assert-plus"."^1.0.0" =
-    self.by-version."assert-plus"."1.0.0";
-  by-version."assert-plus"."1.0.0" = self.buildNodePackage {
-    name = "assert-plus-1.0.0";
-    version = "1.0.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
-      name = "assert-plus-1.0.0.tgz";
-      sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."asynckit"."^0.4.0" =
-    self.by-version."asynckit"."0.4.0";
-  by-version."asynckit"."0.4.0" = self.buildNodePackage {
-    name = "asynckit-0.4.0";
-    version = "0.4.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
-      name = "asynckit-0.4.0.tgz";
-      sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."aws-sign2"."~0.6.0" =
-    self.by-version."aws-sign2"."0.6.0";
-  by-version."aws-sign2"."0.6.0" = self.buildNodePackage {
-    name = "aws-sign2-0.6.0";
-    version = "0.6.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz";
-      name = "aws-sign2-0.6.0.tgz";
-      sha1 = "14342dd38dbcc94d0e5b87d763cd63612c0e794f";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."aws4"."^1.2.1" =
-    self.by-version."aws4"."1.5.0";
-  by-version."aws4"."1.5.0" = self.buildNodePackage {
-    name = "aws4-1.5.0";
-    version = "1.5.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz";
-      name = "aws4-1.5.0.tgz";
-      sha1 = "0a29ffb79c31c9e712eeb087e8e7a64b4a56d755";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."bcrypt-pbkdf"."^1.0.0" =
-    self.by-version."bcrypt-pbkdf"."1.0.1";
-  by-version."bcrypt-pbkdf"."1.0.1" = self.buildNodePackage {
-    name = "bcrypt-pbkdf-1.0.1";
-    version = "1.0.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz";
-      name = "bcrypt-pbkdf-1.0.1.tgz";
-      sha1 = "63bc5dcb61331b92bc05fd528953c33462a06f8d";
-    };
-    deps = {
-      "tweetnacl-0.14.5" = self.by-version."tweetnacl"."0.14.5";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."boom"."2.x.x" =
-    self.by-version."boom"."2.10.1";
-  by-version."boom"."2.10.1" = self.buildNodePackage {
-    name = "boom-2.10.1";
-    version = "2.10.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz";
-      name = "boom-2.10.1.tgz";
-      sha1 = "39c8918ceff5799f83f9492a848f625add0c766f";
-    };
-    deps = {
-      "hoek-2.16.3" = self.by-version."hoek"."2.16.3";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."buffer-shims"."^1.0.0" =
-    self.by-version."buffer-shims"."1.0.0";
-  by-version."buffer-shims"."1.0.0" = self.buildNodePackage {
-    name = "buffer-shims-1.0.0";
-    version = "1.0.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz";
-      name = "buffer-shims-1.0.0.tgz";
-      sha1 = "9978ce317388c649ad8793028c3477ef044a8b51";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."caseless"."~0.11.0" =
-    self.by-version."caseless"."0.11.0";
-  by-version."caseless"."0.11.0" = self.buildNodePackage {
-    name = "caseless-0.11.0";
-    version = "0.11.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz";
-      name = "caseless-0.11.0.tgz";
-      sha1 = "715b96ea9841593cc33067923f5ec60ebda4f7d7";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."chalk"."^1.1.1" =
-    self.by-version."chalk"."1.1.3";
-  by-version."chalk"."1.1.3" = self.buildNodePackage {
-    name = "chalk-1.1.3";
-    version = "1.1.3";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";
-      name = "chalk-1.1.3.tgz";
-      sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
-    };
-    deps = {
-      "ansi-styles-2.2.1" = self.by-version."ansi-styles"."2.2.1";
-      "escape-string-regexp-1.0.5" = self.by-version."escape-string-regexp"."1.0.5";
-      "has-ansi-2.0.0" = self.by-version."has-ansi"."2.0.0";
-      "strip-ansi-3.0.1" = self.by-version."strip-ansi"."3.0.1";
-      "supports-color-2.0.0" = self.by-version."supports-color"."2.0.0";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."combined-stream"."^1.0.5" =
-    self.by-version."combined-stream"."1.0.5";
-  by-version."combined-stream"."1.0.5" = self.buildNodePackage {
-    name = "combined-stream-1.0.5";
-    version = "1.0.5";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz";
-      name = "combined-stream-1.0.5.tgz";
-      sha1 = "938370a57b4a51dea2c77c15d5c5fdf895164009";
-    };
-    deps = {
-      "delayed-stream-1.0.0" = self.by-version."delayed-stream"."1.0.0";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."combined-stream"."~1.0.5" =
-    self.by-version."combined-stream"."1.0.5";
-  by-spec."commander"."^2.9.0" =
-    self.by-version."commander"."2.9.0";
-  by-version."commander"."2.9.0" = self.buildNodePackage {
-    name = "commander-2.9.0";
-    version = "2.9.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz";
-      name = "commander-2.9.0.tgz";
-      sha1 = "9c99094176e12240cb22d6c5146098400fe0f7d4";
-    };
-    deps = {
-      "graceful-readlink-1.0.1" = self.by-version."graceful-readlink"."1.0.1";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."core-util-is"."~1.0.0" =
-    self.by-version."core-util-is"."1.0.2";
-  by-version."core-util-is"."1.0.2" = self.buildNodePackage {
-    name = "core-util-is-1.0.2";
-    version = "1.0.2";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
-      name = "core-util-is-1.0.2.tgz";
-      sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."cryptiles"."2.x.x" =
-    self.by-version."cryptiles"."2.0.5";
-  by-version."cryptiles"."2.0.5" = self.buildNodePackage {
-    name = "cryptiles-2.0.5";
-    version = "2.0.5";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz";
-      name = "cryptiles-2.0.5.tgz";
-      sha1 = "3bdfecdc608147c1c67202fa291e7dca59eaa3b8";
-    };
-    deps = {
-      "boom-2.10.1" = self.by-version."boom"."2.10.1";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."dashdash"."^1.12.0" =
-    self.by-version."dashdash"."1.14.1";
-  by-version."dashdash"."1.14.1" = self.buildNodePackage {
-    name = "dashdash-1.14.1";
-    version = "1.14.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
-      name = "dashdash-1.14.1.tgz";
-      sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
-    };
-    deps = {
-      "assert-plus-1.0.0" = self.by-version."assert-plus"."1.0.0";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."delayed-stream"."~1.0.0" =
-    self.by-version."delayed-stream"."1.0.0";
-  by-version."delayed-stream"."1.0.0" = self.buildNodePackage {
-    name = "delayed-stream-1.0.0";
-    version = "1.0.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
-      name = "delayed-stream-1.0.0.tgz";
-      sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."ecc-jsbn"."~0.1.1" =
-    self.by-version."ecc-jsbn"."0.1.1";
-  by-version."ecc-jsbn"."0.1.1" = self.buildNodePackage {
-    name = "ecc-jsbn-0.1.1";
-    version = "0.1.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz";
-      name = "ecc-jsbn-0.1.1.tgz";
-      sha1 = "0fc73a9ed5f0d53c38193398523ef7e543777505";
-    };
-    deps = {
-      "jsbn-0.1.0" = self.by-version."jsbn"."0.1.0";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."escape-string-regexp"."^1.0.2" =
-    self.by-version."escape-string-regexp"."1.0.5";
-  by-version."escape-string-regexp"."1.0.5" = self.buildNodePackage {
-    name = "escape-string-regexp-1.0.5";
-    version = "1.0.5";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
-      name = "escape-string-regexp-1.0.5.tgz";
-      sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."extend"."~3.0.0" =
-    self.by-version."extend"."3.0.0";
-  by-version."extend"."3.0.0" = self.buildNodePackage {
-    name = "extend-3.0.0";
-    version = "3.0.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz";
-      name = "extend-3.0.0.tgz";
-      sha1 = "5a474353b9f3353ddd8176dfd37b91c83a46f1d4";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."extsprintf"."1.0.2" =
-    self.by-version."extsprintf"."1.0.2";
-  by-version."extsprintf"."1.0.2" = self.buildNodePackage {
-    name = "extsprintf-1.0.2";
-    version = "1.0.2";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz";
-      name = "extsprintf-1.0.2.tgz";
-      sha1 = "e1080e0658e300b06294990cc70e1502235fd550";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."feedparser"."*" =
-    self.by-version."feedparser"."2.1.0";
-  by-version."feedparser"."2.1.0" = self.buildNodePackage {
-    name = "feedparser-2.1.0";
-    version = "2.1.0";
-    bin = true;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/feedparser/-/feedparser-2.1.0.tgz";
-      name = "feedparser-2.1.0.tgz";
-      sha1 = "4cd98bf04e18db5b8644f91e98da89dd179f1fe7";
-    };
-    deps = {
-      "addressparser-1.0.1" = self.by-version."addressparser"."1.0.1";
-      "array-indexofobject-0.0.1" = self.by-version."array-indexofobject"."0.0.1";
-      "lodash.assign-4.2.0" = self.by-version."lodash.assign"."4.2.0";
-      "lodash.get-4.4.2" = self.by-version."lodash.get"."4.4.2";
-      "lodash.has-4.5.2" = self.by-version."lodash.has"."4.5.2";
-      "lodash.uniq-4.5.0" = self.by-version."lodash.uniq"."4.5.0";
-      "readable-stream-2.2.2" = self.by-version."readable-stream"."2.2.2";
-      "sax-1.2.1" = self.by-version."sax"."1.2.1";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  "feedparser" = self.by-version."feedparser"."2.1.0";
-  by-spec."forever-agent"."~0.6.1" =
-    self.by-version."forever-agent"."0.6.1";
-  by-version."forever-agent"."0.6.1" = self.buildNodePackage {
-    name = "forever-agent-0.6.1";
-    version = "0.6.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
-      name = "forever-agent-0.6.1.tgz";
-      sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."form-data"."*" =
-    self.by-version."form-data"."2.1.2";
-  by-version."form-data"."2.1.2" = self.buildNodePackage {
-    name = "form-data-2.1.2";
-    version = "2.1.2";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz";
-      name = "form-data-2.1.2.tgz";
-      sha1 = "89c3534008b97eada4cbb157d58f6f5df025eae4";
-    };
-    deps = {
-      "asynckit-0.4.0" = self.by-version."asynckit"."0.4.0";
-      "combined-stream-1.0.5" = self.by-version."combined-stream"."1.0.5";
-      "mime-types-2.1.14" = self.by-version."mime-types"."2.1.14";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  "form-data" = self.by-version."form-data"."2.1.2";
-  by-spec."form-data"."~2.1.1" =
-    self.by-version."form-data"."2.1.2";
-  by-spec."generate-function"."^2.0.0" =
-    self.by-version."generate-function"."2.0.0";
-  by-version."generate-function"."2.0.0" = self.buildNodePackage {
-    name = "generate-function-2.0.0";
-    version = "2.0.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz";
-      name = "generate-function-2.0.0.tgz";
-      sha1 = "6858fe7c0969b7d4e9093337647ac79f60dfbe74";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."generate-object-property"."^1.1.0" =
-    self.by-version."generate-object-property"."1.2.0";
-  by-version."generate-object-property"."1.2.0" = self.buildNodePackage {
-    name = "generate-object-property-1.2.0";
-    version = "1.2.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz";
-      name = "generate-object-property-1.2.0.tgz";
-      sha1 = "9c0e1c40308ce804f4783618b937fa88f99d50d0";
-    };
-    deps = {
-      "is-property-1.0.2" = self.by-version."is-property"."1.0.2";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."getpass"."^0.1.1" =
-    self.by-version."getpass"."0.1.6";
-  by-version."getpass"."0.1.6" = self.buildNodePackage {
-    name = "getpass-0.1.6";
-    version = "0.1.6";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz";
-      name = "getpass-0.1.6.tgz";
-      sha1 = "283ffd9fc1256840875311c1b60e8c40187110e6";
-    };
-    deps = {
-      "assert-plus-1.0.0" = self.by-version."assert-plus"."1.0.0";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."graceful-readlink".">= 1.0.0" =
-    self.by-version."graceful-readlink"."1.0.1";
-  by-version."graceful-readlink"."1.0.1" = self.buildNodePackage {
-    name = "graceful-readlink-1.0.1";
-    version = "1.0.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz";
-      name = "graceful-readlink-1.0.1.tgz";
-      sha1 = "4cafad76bc62f02fa039b2f94e9a3dd3a391a725";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."har-validator"."~2.0.6" =
-    self.by-version."har-validator"."2.0.6";
-  by-version."har-validator"."2.0.6" = self.buildNodePackage {
-    name = "har-validator-2.0.6";
-    version = "2.0.6";
-    bin = true;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz";
-      name = "har-validator-2.0.6.tgz";
-      sha1 = "cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d";
-    };
-    deps = {
-      "chalk-1.1.3" = self.by-version."chalk"."1.1.3";
-      "commander-2.9.0" = self.by-version."commander"."2.9.0";
-      "is-my-json-valid-2.15.0" = self.by-version."is-my-json-valid"."2.15.0";
-      "pinkie-promise-2.0.1" = self.by-version."pinkie-promise"."2.0.1";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."has-ansi"."^2.0.0" =
-    self.by-version."has-ansi"."2.0.0";
-  by-version."has-ansi"."2.0.0" = self.buildNodePackage {
-    name = "has-ansi-2.0.0";
-    version = "2.0.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
-      name = "has-ansi-2.0.0.tgz";
-      sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
-    };
-    deps = {
-      "ansi-regex-2.1.1" = self.by-version."ansi-regex"."2.1.1";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."hawk"."~3.1.3" =
-    self.by-version."hawk"."3.1.3";
-  by-version."hawk"."3.1.3" = self.buildNodePackage {
-    name = "hawk-3.1.3";
-    version = "3.1.3";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz";
-      name = "hawk-3.1.3.tgz";
-      sha1 = "078444bd7c1640b0fe540d2c9b73d59678e8e1c4";
-    };
-    deps = {
-      "hoek-2.16.3" = self.by-version."hoek"."2.16.3";
-      "boom-2.10.1" = self.by-version."boom"."2.10.1";
-      "cryptiles-2.0.5" = self.by-version."cryptiles"."2.0.5";
-      "sntp-1.0.9" = self.by-version."sntp"."1.0.9";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."hoek"."2.x.x" =
-    self.by-version."hoek"."2.16.3";
-  by-version."hoek"."2.16.3" = self.buildNodePackage {
-    name = "hoek-2.16.3";
-    version = "2.16.3";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz";
-      name = "hoek-2.16.3.tgz";
-      sha1 = "20bb7403d3cea398e91dc4710a8ff1b8274a25ed";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."http-signature"."~1.1.0" =
-    self.by-version."http-signature"."1.1.1";
-  by-version."http-signature"."1.1.1" = self.buildNodePackage {
-    name = "http-signature-1.1.1";
-    version = "1.1.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz";
-      name = "http-signature-1.1.1.tgz";
-      sha1 = "df72e267066cd0ac67fb76adf8e134a8fbcf91bf";
-    };
-    deps = {
-      "assert-plus-0.2.0" = self.by-version."assert-plus"."0.2.0";
-      "jsprim-1.3.1" = self.by-version."jsprim"."1.3.1";
-      "sshpk-1.10.2" = self.by-version."sshpk"."1.10.2";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."iconv"."~2.2.1" =
-    self.by-version."iconv"."2.2.1";
-  by-version."iconv"."2.2.1" = self.buildNodePackage {
-    name = "iconv-2.2.1";
-    version = "2.2.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/iconv/-/iconv-2.2.1.tgz";
-      name = "iconv-2.2.1.tgz";
-      sha1 = "39b13fdd98987d26aef26c0a2f2a900911fa4584";
-    };
-    deps = {
-      "nan-2.5.1" = self.by-version."nan"."2.5.1";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."inherits"."~2.0.1" =
-    self.by-version."inherits"."2.0.3";
-  by-version."inherits"."2.0.3" = self.buildNodePackage {
-    name = "inherits-2.0.3";
-    version = "2.0.3";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
-      name = "inherits-2.0.3.tgz";
-      sha1 = "633c2c83e3da42a502f52466022480f4208261de";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."irc"."*" =
-    self.by-version."irc"."0.5.2";
-  by-version."irc"."0.5.2" = self.buildNodePackage {
-    name = "irc-0.5.2";
-    version = "0.5.2";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/irc/-/irc-0.5.2.tgz";
-      name = "irc-0.5.2.tgz";
-      sha1 = "3714f4768365a96d0b2f776bc91166beb2464bbc";
-    };
-    deps = {
-      "irc-colors-1.3.1" = self.by-version."irc-colors"."1.3.1";
-    };
-    optionalDependencies = {
-      "iconv-2.2.1" = self.by-version."iconv"."2.2.1";
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  "irc" = self.by-version."irc"."0.5.2";
-  by-spec."irc-colors"."^1.1.0" =
-    self.by-version."irc-colors"."1.3.1";
-  by-version."irc-colors"."1.3.1" = self.buildNodePackage {
-    name = "irc-colors-1.3.1";
-    version = "1.3.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/irc-colors/-/irc-colors-1.3.1.tgz";
-      name = "irc-colors-1.3.1.tgz";
-      sha1 = "a6fccee5d9ecdc010c2b1cde3fbdff1f7134aff6";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."is-my-json-valid"."^2.12.4" =
-    self.by-version."is-my-json-valid"."2.15.0";
-  by-version."is-my-json-valid"."2.15.0" = self.buildNodePackage {
-    name = "is-my-json-valid-2.15.0";
-    version = "2.15.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz";
-      name = "is-my-json-valid-2.15.0.tgz";
-      sha1 = "936edda3ca3c211fd98f3b2d3e08da43f7b2915b";
-    };
-    deps = {
-      "generate-function-2.0.0" = self.by-version."generate-function"."2.0.0";
-      "generate-object-property-1.2.0" = self.by-version."generate-object-property"."1.2.0";
-      "jsonpointer-4.0.1" = self.by-version."jsonpointer"."4.0.1";
-      "xtend-4.0.1" = self.by-version."xtend"."4.0.1";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."is-property"."^1.0.0" =
-    self.by-version."is-property"."1.0.2";
-  by-version."is-property"."1.0.2" = self.buildNodePackage {
-    name = "is-property-1.0.2";
-    version = "1.0.2";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz";
-      name = "is-property-1.0.2.tgz";
-      sha1 = "57fe1c4e48474edd65b09911f26b1cd4095dda84";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."is-typedarray"."~1.0.0" =
-    self.by-version."is-typedarray"."1.0.0";
-  by-version."is-typedarray"."1.0.0" = self.buildNodePackage {
-    name = "is-typedarray-1.0.0";
-    version = "1.0.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
-      name = "is-typedarray-1.0.0.tgz";
-      sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."isarray"."~1.0.0" =
-    self.by-version."isarray"."1.0.0";
-  by-version."isarray"."1.0.0" = self.buildNodePackage {
-    name = "isarray-1.0.0";
-    version = "1.0.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
-      name = "isarray-1.0.0.tgz";
-      sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."isstream"."~0.1.2" =
-    self.by-version."isstream"."0.1.2";
-  by-version."isstream"."0.1.2" = self.buildNodePackage {
-    name = "isstream-0.1.2";
-    version = "0.1.2";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
-      name = "isstream-0.1.2.tgz";
-      sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."jodid25519"."^1.0.0" =
-    self.by-version."jodid25519"."1.0.2";
-  by-version."jodid25519"."1.0.2" = self.buildNodePackage {
-    name = "jodid25519-1.0.2";
-    version = "1.0.2";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz";
-      name = "jodid25519-1.0.2.tgz";
-      sha1 = "06d4912255093419477d425633606e0e90782967";
-    };
-    deps = {
-      "jsbn-0.1.0" = self.by-version."jsbn"."0.1.0";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."jsbn"."~0.1.0" =
-    self.by-version."jsbn"."0.1.0";
-  by-version."jsbn"."0.1.0" = self.buildNodePackage {
-    name = "jsbn-0.1.0";
-    version = "0.1.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz";
-      name = "jsbn-0.1.0.tgz";
-      sha1 = "650987da0dd74f4ebf5a11377a2aa2d273e97dfd";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."json-schema"."0.2.3" =
-    self.by-version."json-schema"."0.2.3";
-  by-version."json-schema"."0.2.3" = self.buildNodePackage {
-    name = "json-schema-0.2.3";
-    version = "0.2.3";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
-      name = "json-schema-0.2.3.tgz";
-      sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."json-stringify-safe"."~5.0.1" =
-    self.by-version."json-stringify-safe"."5.0.1";
-  by-version."json-stringify-safe"."5.0.1" = self.buildNodePackage {
-    name = "json-stringify-safe-5.0.1";
-    version = "5.0.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
-      name = "json-stringify-safe-5.0.1.tgz";
-      sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."jsonify"."~0.0.0" =
-    self.by-version."jsonify"."0.0.0";
-  by-version."jsonify"."0.0.0" = self.buildNodePackage {
-    name = "jsonify-0.0.0";
-    version = "0.0.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz";
-      name = "jsonify-0.0.0.tgz";
-      sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."jsonpointer"."^4.0.0" =
-    self.by-version."jsonpointer"."4.0.1";
-  by-version."jsonpointer"."4.0.1" = self.buildNodePackage {
-    name = "jsonpointer-4.0.1";
-    version = "4.0.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz";
-      name = "jsonpointer-4.0.1.tgz";
-      sha1 = "4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."jsprim"."^1.2.2" =
-    self.by-version."jsprim"."1.3.1";
-  by-version."jsprim"."1.3.1" = self.buildNodePackage {
-    name = "jsprim-1.3.1";
-    version = "1.3.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz";
-      name = "jsprim-1.3.1.tgz";
-      sha1 = "2a7256f70412a29ee3670aaca625994c4dcff252";
-    };
-    deps = {
-      "extsprintf-1.0.2" = self.by-version."extsprintf"."1.0.2";
-      "json-schema-0.2.3" = self.by-version."json-schema"."0.2.3";
-      "verror-1.3.6" = self.by-version."verror"."1.3.6";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."lodash.assign"."^4.2.0" =
-    self.by-version."lodash.assign"."4.2.0";
-  by-version."lodash.assign"."4.2.0" = self.buildNodePackage {
-    name = "lodash.assign-4.2.0";
-    version = "4.2.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz";
-      name = "lodash.assign-4.2.0.tgz";
-      sha1 = "0d99f3ccd7a6d261d19bdaeb9245005d285808e7";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."lodash.get"."^4.4.2" =
-    self.by-version."lodash.get"."4.4.2";
-  by-version."lodash.get"."4.4.2" = self.buildNodePackage {
-    name = "lodash.get-4.4.2";
-    version = "4.4.2";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz";
-      name = "lodash.get-4.4.2.tgz";
-      sha1 = "2d177f652fa31e939b4438d5341499dfa3825e99";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."lodash.has"."^4.5.2" =
-    self.by-version."lodash.has"."4.5.2";
-  by-version."lodash.has"."4.5.2" = self.buildNodePackage {
-    name = "lodash.has-4.5.2";
-    version = "4.5.2";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz";
-      name = "lodash.has-4.5.2.tgz";
-      sha1 = "d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."lodash.uniq"."^4.5.0" =
-    self.by-version."lodash.uniq"."4.5.0";
-  by-version."lodash.uniq"."4.5.0" = self.buildNodePackage {
-    name = "lodash.uniq-4.5.0";
-    version = "4.5.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz";
-      name = "lodash.uniq-4.5.0.tgz";
-      sha1 = "d0225373aeb652adc1bc82e4945339a842754773";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."mime-db"."~1.26.0" =
-    self.by-version."mime-db"."1.26.0";
-  by-version."mime-db"."1.26.0" = self.buildNodePackage {
-    name = "mime-db-1.26.0";
-    version = "1.26.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/mime-db/-/mime-db-1.26.0.tgz";
-      name = "mime-db-1.26.0.tgz";
-      sha1 = "eaffcd0e4fc6935cf8134da246e2e6c35305adff";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."mime-types"."^2.1.12" =
-    self.by-version."mime-types"."2.1.14";
-  by-version."mime-types"."2.1.14" = self.buildNodePackage {
-    name = "mime-types-2.1.14";
-    version = "2.1.14";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.14.tgz";
-      name = "mime-types-2.1.14.tgz";
-      sha1 = "f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee";
-    };
-    deps = {
-      "mime-db-1.26.0" = self.by-version."mime-db"."1.26.0";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."mime-types"."~2.1.7" =
-    self.by-version."mime-types"."2.1.14";
-  by-spec."nan"."^2.3.3" =
-    self.by-version."nan"."2.5.1";
-  by-version."nan"."2.5.1" = self.buildNodePackage {
-    name = "nan-2.5.1";
-    version = "2.5.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/nan/-/nan-2.5.1.tgz";
-      name = "nan-2.5.1.tgz";
-      sha1 = "d5b01691253326a97a2bbee9e61c55d8d60351e2";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."nan"."^2.3.5" =
-    self.by-version."nan"."2.5.1";
-  by-spec."oauth-sign"."~0.8.1" =
-    self.by-version."oauth-sign"."0.8.2";
-  by-version."oauth-sign"."0.8.2" = self.buildNodePackage {
-    name = "oauth-sign-0.8.2";
-    version = "0.8.2";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz";
-      name = "oauth-sign-0.8.2.tgz";
-      sha1 = "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."pinkie"."^2.0.0" =
-    self.by-version."pinkie"."2.0.4";
-  by-version."pinkie"."2.0.4" = self.buildNodePackage {
-    name = "pinkie-2.0.4";
-    version = "2.0.4";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz";
-      name = "pinkie-2.0.4.tgz";
-      sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."pinkie-promise"."^2.0.0" =
-    self.by-version."pinkie-promise"."2.0.1";
-  by-version."pinkie-promise"."2.0.1" = self.buildNodePackage {
-    name = "pinkie-promise-2.0.1";
-    version = "2.0.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
-      name = "pinkie-promise-2.0.1.tgz";
-      sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa";
-    };
-    deps = {
-      "pinkie-2.0.4" = self.by-version."pinkie"."2.0.4";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."process-nextick-args"."~1.0.6" =
-    self.by-version."process-nextick-args"."1.0.7";
-  by-version."process-nextick-args"."1.0.7" = self.buildNodePackage {
-    name = "process-nextick-args-1.0.7";
-    version = "1.0.7";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz";
-      name = "process-nextick-args-1.0.7.tgz";
-      sha1 = "150e20b756590ad3f91093f25a4f2ad8bff30ba3";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."punycode"."^1.4.1" =
-    self.by-version."punycode"."1.4.1";
-  by-version."punycode"."1.4.1" = self.buildNodePackage {
-    name = "punycode-1.4.1";
-    version = "1.4.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz";
-      name = "punycode-1.4.1.tgz";
-      sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."qs"."~6.3.0" =
-    self.by-version."qs"."6.3.0";
-  by-version."qs"."6.3.0" = self.buildNodePackage {
-    name = "qs-6.3.0";
-    version = "6.3.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/qs/-/qs-6.3.0.tgz";
-      name = "qs-6.3.0.tgz";
-      sha1 = "f403b264f23bc01228c74131b407f18d5ea5d442";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."readable-stream"."^2.2.2" =
-    self.by-version."readable-stream"."2.2.2";
-  by-version."readable-stream"."2.2.2" = self.buildNodePackage {
-    name = "readable-stream-2.2.2";
-    version = "2.2.2";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz";
-      name = "readable-stream-2.2.2.tgz";
-      sha1 = "a9e6fec3c7dda85f8bb1b3ba7028604556fc825e";
-    };
-    deps = {
-      "buffer-shims-1.0.0" = self.by-version."buffer-shims"."1.0.0";
-      "core-util-is-1.0.2" = self.by-version."core-util-is"."1.0.2";
-      "isarray-1.0.0" = self.by-version."isarray"."1.0.0";
-      "inherits-2.0.3" = self.by-version."inherits"."2.0.3";
-      "process-nextick-args-1.0.7" = self.by-version."process-nextick-args"."1.0.7";
-      "string_decoder-0.10.31" = self.by-version."string_decoder"."0.10.31";
-      "util-deprecate-1.0.2" = self.by-version."util-deprecate"."1.0.2";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."request"."*" =
-    self.by-version."request"."2.79.0";
-  by-version."request"."2.79.0" = self.buildNodePackage {
-    name = "request-2.79.0";
-    version = "2.79.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/request/-/request-2.79.0.tgz";
-      name = "request-2.79.0.tgz";
-      sha1 = "4dfe5bf6be8b8cdc37fcf93e04b65577722710de";
-    };
-    deps = {
-      "aws-sign2-0.6.0" = self.by-version."aws-sign2"."0.6.0";
-      "aws4-1.5.0" = self.by-version."aws4"."1.5.0";
-      "caseless-0.11.0" = self.by-version."caseless"."0.11.0";
-      "combined-stream-1.0.5" = self.by-version."combined-stream"."1.0.5";
-      "extend-3.0.0" = self.by-version."extend"."3.0.0";
-      "forever-agent-0.6.1" = self.by-version."forever-agent"."0.6.1";
-      "form-data-2.1.2" = self.by-version."form-data"."2.1.2";
-      "har-validator-2.0.6" = self.by-version."har-validator"."2.0.6";
-      "hawk-3.1.3" = self.by-version."hawk"."3.1.3";
-      "http-signature-1.1.1" = self.by-version."http-signature"."1.1.1";
-      "is-typedarray-1.0.0" = self.by-version."is-typedarray"."1.0.0";
-      "isstream-0.1.2" = self.by-version."isstream"."0.1.2";
-      "json-stringify-safe-5.0.1" = self.by-version."json-stringify-safe"."5.0.1";
-      "mime-types-2.1.14" = self.by-version."mime-types"."2.1.14";
-      "oauth-sign-0.8.2" = self.by-version."oauth-sign"."0.8.2";
-      "qs-6.3.0" = self.by-version."qs"."6.3.0";
-      "stringstream-0.0.5" = self.by-version."stringstream"."0.0.5";
-      "tough-cookie-2.3.2" = self.by-version."tough-cookie"."2.3.2";
-      "tunnel-agent-0.4.3" = self.by-version."tunnel-agent"."0.4.3";
-      "uuid-3.0.1" = self.by-version."uuid"."3.0.1";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  "request" = self.by-version."request"."2.79.0";
-  by-spec."sax"."^1.2.1" =
-    self.by-version."sax"."1.2.1";
-  by-version."sax"."1.2.1" = self.buildNodePackage {
-    name = "sax-1.2.1";
-    version = "1.2.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz";
-      name = "sax-1.2.1.tgz";
-      sha1 = "7b8e656190b228e81a66aea748480d828cd2d37a";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."shell-quote"."*" =
-    self.by-version."shell-quote"."1.6.1";
-  by-version."shell-quote"."1.6.1" = self.buildNodePackage {
-    name = "shell-quote-1.6.1";
-    version = "1.6.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz";
-      name = "shell-quote-1.6.1.tgz";
-      sha1 = "f4781949cce402697127430ea3b3c5476f481767";
-    };
-    deps = {
-      "jsonify-0.0.0" = self.by-version."jsonify"."0.0.0";
-      "array-filter-0.0.1" = self.by-version."array-filter"."0.0.1";
-      "array-reduce-0.0.0" = self.by-version."array-reduce"."0.0.0";
-      "array-map-0.0.0" = self.by-version."array-map"."0.0.0";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  "shell-quote" = self.by-version."shell-quote"."1.6.1";
-  by-spec."sntp"."1.x.x" =
-    self.by-version."sntp"."1.0.9";
-  by-version."sntp"."1.0.9" = self.buildNodePackage {
-    name = "sntp-1.0.9";
-    version = "1.0.9";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz";
-      name = "sntp-1.0.9.tgz";
-      sha1 = "6541184cc90aeea6c6e7b35e2659082443c66198";
-    };
-    deps = {
-      "hoek-2.16.3" = self.by-version."hoek"."2.16.3";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."sshpk"."^1.7.0" =
-    self.by-version."sshpk"."1.10.2";
-  by-version."sshpk"."1.10.2" = self.buildNodePackage {
-    name = "sshpk-1.10.2";
-    version = "1.10.2";
-    bin = true;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/sshpk/-/sshpk-1.10.2.tgz";
-      name = "sshpk-1.10.2.tgz";
-      sha1 = "d5a804ce22695515638e798dbe23273de070a5fa";
-    };
-    deps = {
-      "asn1-0.2.3" = self.by-version."asn1"."0.2.3";
-      "assert-plus-1.0.0" = self.by-version."assert-plus"."1.0.0";
-      "dashdash-1.14.1" = self.by-version."dashdash"."1.14.1";
-      "getpass-0.1.6" = self.by-version."getpass"."0.1.6";
-    };
-    optionalDependencies = {
-      "jsbn-0.1.0" = self.by-version."jsbn"."0.1.0";
-      "tweetnacl-0.14.5" = self.by-version."tweetnacl"."0.14.5";
-      "jodid25519-1.0.2" = self.by-version."jodid25519"."1.0.2";
-      "ecc-jsbn-0.1.1" = self.by-version."ecc-jsbn"."0.1.1";
-      "bcrypt-pbkdf-1.0.1" = self.by-version."bcrypt-pbkdf"."1.0.1";
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."string_decoder"."~0.10.x" =
-    self.by-version."string_decoder"."0.10.31";
-  by-version."string_decoder"."0.10.31" = self.buildNodePackage {
-    name = "string_decoder-0.10.31";
-    version = "0.10.31";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz";
-      name = "string_decoder-0.10.31.tgz";
-      sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."stringstream"."~0.0.4" =
-    self.by-version."stringstream"."0.0.5";
-  by-version."stringstream"."0.0.5" = self.buildNodePackage {
-    name = "stringstream-0.0.5";
-    version = "0.0.5";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz";
-      name = "stringstream-0.0.5.tgz";
-      sha1 = "4e484cd4de5a0bbbee18e46307710a8a81621878";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."strip-ansi"."^3.0.0" =
-    self.by-version."strip-ansi"."3.0.1";
-  by-version."strip-ansi"."3.0.1" = self.buildNodePackage {
-    name = "strip-ansi-3.0.1";
-    version = "3.0.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
-      name = "strip-ansi-3.0.1.tgz";
-      sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
-    };
-    deps = {
-      "ansi-regex-2.1.1" = self.by-version."ansi-regex"."2.1.1";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."supports-color"."^2.0.0" =
-    self.by-version."supports-color"."2.0.0";
-  by-version."supports-color"."2.0.0" = self.buildNodePackage {
-    name = "supports-color-2.0.0";
-    version = "2.0.0";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
-      name = "supports-color-2.0.0.tgz";
-      sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."tough-cookie"."~2.3.0" =
-    self.by-version."tough-cookie"."2.3.2";
-  by-version."tough-cookie"."2.3.2" = self.buildNodePackage {
-    name = "tough-cookie-2.3.2";
-    version = "2.3.2";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz";
-      name = "tough-cookie-2.3.2.tgz";
-      sha1 = "f081f76e4c85720e6c37a5faced737150d84072a";
-    };
-    deps = {
-      "punycode-1.4.1" = self.by-version."punycode"."1.4.1";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."tunnel-agent"."~0.4.1" =
-    self.by-version."tunnel-agent"."0.4.3";
-  by-version."tunnel-agent"."0.4.3" = self.buildNodePackage {
-    name = "tunnel-agent-0.4.3";
-    version = "0.4.3";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz";
-      name = "tunnel-agent-0.4.3.tgz";
-      sha1 = "6373db76909fe570e08d73583365ed828a74eeeb";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."tweetnacl"."^0.14.3" =
-    self.by-version."tweetnacl"."0.14.5";
-  by-version."tweetnacl"."0.14.5" = self.buildNodePackage {
-    name = "tweetnacl-0.14.5";
-    version = "0.14.5";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
-      name = "tweetnacl-0.14.5.tgz";
-      sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."tweetnacl"."~0.14.0" =
-    self.by-version."tweetnacl"."0.14.5";
-  by-spec."util-deprecate"."~1.0.1" =
-    self.by-version."util-deprecate"."1.0.2";
-  by-version."util-deprecate"."1.0.2" = self.buildNodePackage {
-    name = "util-deprecate-1.0.2";
-    version = "1.0.2";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
-      name = "util-deprecate-1.0.2.tgz";
-      sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."uuid"."^3.0.0" =
-    self.by-version."uuid"."3.0.1";
-  by-version."uuid"."3.0.1" = self.buildNodePackage {
-    name = "uuid-3.0.1";
-    version = "3.0.1";
-    bin = true;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz";
-      name = "uuid-3.0.1.tgz";
-      sha1 = "6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."verror"."1.3.6" =
-    self.by-version."verror"."1.3.6";
-  by-version."verror"."1.3.6" = self.buildNodePackage {
-    name = "verror-1.3.6";
-    version = "1.3.6";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz";
-      name = "verror-1.3.6.tgz";
-      sha1 = "cff5df12946d297d2baaefaa2689e25be01c005c";
-    };
-    deps = {
-      "extsprintf-1.0.2" = self.by-version."extsprintf"."1.0.2";
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-  by-spec."xtend"."^4.0.0" =
-    self.by-version."xtend"."4.0.1";
-  by-version."xtend"."4.0.1" = self.buildNodePackage {
-    name = "xtend-4.0.1";
-    version = "4.0.1";
-    bin = false;
-    src = fetchurl {
-      url = "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz";
-      name = "xtend-4.0.1.tgz";
-      sha1 = "a5c6d532be656e23db820efb943a1f04998d63af";
-    };
-    deps = {
-    };
-    optionalDependencies = {
-    };
-    peerDependencies = [];
-    os = [ ];
-    cpu = [ ];
-  };
-}
diff --git a/krebs/5pkgs/simple/newsbot-js/pkgs.json b/krebs/5pkgs/simple/newsbot-js/pkgs.json
new file mode 100644
index 000000000..95b60854d
--- /dev/null
+++ b/krebs/5pkgs/simple/newsbot-js/pkgs.json
@@ -0,0 +1,7 @@
+[
+  "feedparser",
+  "form-data",
+  "irc",
+  "request",
+  "shell-quote"
+]
diff --git a/krebs/5pkgs/simple/newsbot-js/update.sh b/krebs/5pkgs/simple/newsbot-js/update.sh
new file mode 100755
index 000000000..0c1ecc58c
--- /dev/null
+++ b/krebs/5pkgs/simple/newsbot-js/update.sh
@@ -0,0 +1,2 @@
+node2nix -8 -i pkgs.json -c combine.nix
+rm node-env.nix combine.nix

From 8ff594c92fb404e13f240d19a76d34e0d1db6a29 Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Thu, 5 Apr 2018 17:34:17 +0200
Subject: [PATCH 03/14] hashPassword: passthrough arguments

---
 krebs/5pkgs/simple/hashPassword/default.nix | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/krebs/5pkgs/simple/hashPassword/default.nix b/krebs/5pkgs/simple/hashPassword/default.nix
index 3da65ad79..3c604be80 100644
--- a/krebs/5pkgs/simple/hashPassword/default.nix
+++ b/krebs/5pkgs/simple/hashPassword/default.nix
@@ -1,7 +1,7 @@
 { lib, pkgs, ... }:
 
 pkgs.writeDashBin "hashPassword" ''
-  # usage: hashPassword
+  # usage: hashPassword [...]
   set -euf
 
   export PATH=${lib.makeBinPath (with pkgs; [
@@ -11,5 +11,5 @@ pkgs.writeDashBin "hashPassword" ''
   ])}
 
   salt=$(openssl rand -base64 16 | tr -d '+=' | head -c 16)
-  exec mkpasswd -m sha-512 -S "$salt"
+  exec mkpasswd -m sha-512 -S "$salt" "$@"
 ''

From f07930259080716fd8e325aae457d4bfaaecb99b Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Thu, 5 Apr 2018 17:35:25 +0200
Subject: [PATCH 04/14] l browsers: add cx- command for copy & paste

---
 lass/2configs/browsers.nix | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/lass/2configs/browsers.nix b/lass/2configs/browsers.nix
index 91ee08bfd..3030d8faf 100644
--- a/lass/2configs/browsers.nix
+++ b/lass/2configs/browsers.nix
@@ -26,7 +26,12 @@ let
       lass.xjail.${name} = {
         inherit script groups dpi;
       };
-      environment.systemPackages = [ config.lass.xjail-bins.${name} ];
+      environment.systemPackages = [
+        config.lass.xjail-bins.${name}
+        (pkgs.writeDashBin "cx-${name}" ''
+          DISPLAY=:${toString (genid_signed name)} ${pkgs.xclip}/bin/xclip -o | DISPLAY=:0 ${pkgs.xclip}/bin/xclip
+        '')
+      ];
       lass.browser.paths.${name} = {
         path = config.lass.xjail-bins.${name};
         inherit precedence;

From 19895a67ff9b9fd7d2511dede24ccf84061b9904 Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Thu, 5 Apr 2018 17:36:19 +0200
Subject: [PATCH 05/14] l network-manager: don't manager docker & virtualbox

---
 lass/2configs/network-manager.nix | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/lass/2configs/network-manager.nix b/lass/2configs/network-manager.nix
index c4f757de1..5b890b591 100644
--- a/lass/2configs/network-manager.nix
+++ b/lass/2configs/network-manager.nix
@@ -14,7 +14,13 @@
       RestartSec = "5";
     };
   };
-  networking.networkmanager.enable = true;
+  networking.networkmanager = {
+    enable = true;
+    unmanaged = [
+      "docker*"
+      "vboxnet*"
+    ];
+  };
   users.users.mainUser = {
     extraGroups = [ "networkmanager" ];
     packages = with pkgs; [

From f316bb1f31d481dcad90a8b4f4cda0c27208cca4 Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Thu, 5 Apr 2018 17:36:57 +0200
Subject: [PATCH 06/14] l reaktor-coders: use correct ping path

---
 lass/2configs/reaktor-coders.nix | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lass/2configs/reaktor-coders.nix b/lass/2configs/reaktor-coders.nix
index 2541df3a6..5fa1611ae 100644
--- a/lass/2configs/reaktor-coders.nix
+++ b/lass/2configs/reaktor-coders.nix
@@ -84,7 +84,7 @@ with import <stockholm/lib>;
       (buildSimpleReaktorPlugin "ping" {
         pattern = "^!ping (?P<args>.*)$$";
         script = pkgs.writeDash "ping" ''
-          exec /var/setuid-wrappers/ping -q -c1 "$1" 2>&1 | tail -1
+          exec /run/wrappers/bin/ping -q -c1 "$1" 2>&1 | tail -1
         '';
       })
     ];

From 2e5d4ac778aa3a9f2eeea31369a9147a4bafd73e Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Thu, 5 Apr 2018 17:38:31 +0200
Subject: [PATCH 07/14] l repo-sync: sync staging branches

---
 lass/2configs/repo-sync.nix | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/lass/2configs/repo-sync.nix b/lass/2configs/repo-sync.nix
index 98dbdc227..ad44c67e1 100644
--- a/lass/2configs/repo-sync.nix
+++ b/lass/2configs/repo-sync.nix
@@ -61,6 +61,21 @@ let
             origin.url = "http://cgit.lassul.us/${name}";
             mirror.url = "${mirror}${name}";
           };
+          makefu-staging = {
+            origin.url = "http://cgit.gum/${name}";
+            origin.ref = "heads/staging";
+            mirror.url = "${mirror}${name}";
+          };
+          tv-staging = {
+            origin.url = "http://cgit.ni.r/${name}";
+            origin.ref = "heads/staging";
+            mirror.url = "${mirror}${name}";
+          };
+          nin-staging = {
+            origin.url = "http://cgit.onondaga.r/${name}";
+            origin.ref = "heads/staging";
+            mirror.url = "${mirror}${name}";
+          };
         };
         latest = {
           url = "${mirror}${name}";

From 833cec6deb24d1600131bbef97427d328bd9b106 Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Thu, 5 Apr 2018 17:39:20 +0200
Subject: [PATCH 08/14] l xmonad: add insert command

---
 lass/5pkgs/custom/xmonad-lass/default.nix | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/lass/5pkgs/custom/xmonad-lass/default.nix b/lass/5pkgs/custom/xmonad-lass/default.nix
index e658897da..18cb25b5b 100644
--- a/lass/5pkgs/custom/xmonad-lass/default.nix
+++ b/lass/5pkgs/custom/xmonad-lass/default.nix
@@ -147,6 +147,10 @@ myKeyMap =
       export PATH=$PATH:${pkgs.dmenu}/bin:${pkgs.networkmanagerapplet}/bin
       exec ${pkgs.networkmanager_dmenu}/bin/networkmanager_dmenu "$@"
     ''}")
+    , ("M4-<Insert>", spawn "${pkgs.writeDash "paste" ''
+      ${pkgs.coreutils}/bin/sleep 0.1
+      ${pkgs.xclip}/bin/xclip -o | ${pkgs.xdotool}/bin/xdotool type -f -
+    ''}")
 
     , ("M4-<F5>", spawn "${pkgs.xorg.xbacklight}/bin/xbacklight -set 1")
     , ("M4-<F6>", spawn "${pkgs.xorg.xbacklight}/bin/xbacklight -set 10")

From 8f6976f36525fb77e58438981822721e1bc17450 Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Thu, 5 Apr 2018 17:39:58 +0200
Subject: [PATCH 09/14] l: remove deprecated rtl8814au

---
 lass/5pkgs/default.nix | 1 -
 1 file changed, 1 deletion(-)

diff --git a/lass/5pkgs/default.nix b/lass/5pkgs/default.nix
index 28482eb91..fd6a555d4 100644
--- a/lass/5pkgs/default.nix
+++ b/lass/5pkgs/default.nix
@@ -31,7 +31,6 @@ in {
       fi
       ${self.coreutils}/bin/rm $tmp
     '';
-    rtl8814au = callPackage ./custom/rtl8814au { kernel = self.linux; };
 }
 
 // mapAttrs (_: flip callPackage {})

From 665ea5674e0d99f51379d24829436773b9dc2769 Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Thu, 5 Apr 2018 17:44:34 +0200
Subject: [PATCH 10/14] l: add generate-secrets

---
 lass/1systems/mors/config.nix           |  1 +
 lass/5pkgs/generate-secrets/default.nix | 46 +++++++++++++++++++++++++
 2 files changed, 47 insertions(+)
 create mode 100644 lass/5pkgs/generate-secrets/default.nix

diff --git a/lass/1systems/mors/config.nix b/lass/1systems/mors/config.nix
index f77bc64c2..8e805baf0 100644
--- a/lass/1systems/mors/config.nix
+++ b/lass/1systems/mors/config.nix
@@ -140,6 +140,7 @@ with import <stockholm/lib>;
     dpass
 
     dnsutils
+    generate-secrets
   ];
 
   #TODO: fix this shit
diff --git a/lass/5pkgs/generate-secrets/default.nix b/lass/5pkgs/generate-secrets/default.nix
new file mode 100644
index 000000000..5a4afe7c5
--- /dev/null
+++ b/lass/5pkgs/generate-secrets/default.nix
@@ -0,0 +1,46 @@
+{ pkgs }:
+pkgs.writeDashBin "generate-secrets" ''
+  HOSTNAME="$1"
+  TMPDIR=$(${pkgs.coreutils}/bin/mktemp -d)
+  PASSWORD=$(${pkgs.pwgen}/bin/pwgen 25 1)
+  HASHED_PASSWORD=$(echo $PASSWORD | ${pkgs.hashPassword}/bin/hashPassword -s) > /dev/null
+
+  ${pkgs.openssh}/bin/ssh-keygen -t ed25519 -f $TMPDIR/ssh.id_ed25519 -P "" -C "" >/dev/null
+  ${pkgs.openssl}/bin/openssl genrsa -out $TMPDIR/retiolum.rsa_key.priv 4096 2>/dev/null > /dev/null
+  ${pkgs.openssl}/bin/openssl rsa -in $TMPDIR/retiolum.rsa_key.priv -pubout -out $TMPDIR/retiolum.rsa_key.pub 2>/dev/null > /dev/null
+  cat <<EOF > $TMPDIR/hashedPasswords.nix
+  {
+    root = "$HASHED_PASSWORD";
+    mainUser = "$HASHED_PASSWORD";
+  }
+  EOF
+
+  cd $TMPDIR
+  for x in *; do
+    ${pkgs.coreutils}/bin/cat $x | ${pkgs.pass}/bin/pass insert -m hosts/$HOSTNAME/$x > /dev/null
+  done
+  echo $PASSWORD | ${pkgs.pass}/bin/pass insert -m admin/hosts/$HOSTNAME/pass > /dev/null
+
+  cat <<EOF
+    $HOSTNAME = {
+      cores = 1;
+      nets = {
+        retiolum = {
+          ip4.addr = "10.243.0.changeme";
+          ip6.addr = "42:0:0:0:0:0:0:changeme";
+          aliases = [
+            "$HOSTNAME.r"
+          ];
+          tinc.pubkey = ${"''"}
+  $(cat $TMPDIR/retiolum.rsa_key.pub)
+          ${"''"};
+        };
+      };
+      ssh.privkey.path = <secrets/ssh.id_ed25519>;
+      ssh.pubkey = "$(cat $TMPDIR/ssh.id_ed25519.pub)";
+    };
+  EOF
+
+  rm -rf $TMPDIR
+''
+

From 1dd03483619d00d1afc6a278ded0cca6cff2d9ed Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Thu, 5 Apr 2018 19:31:39 +0200
Subject: [PATCH 11/14] add minimal working kops for stockholm

---
 krebs/kops.nix                | 64 +++++++++++++++++++++++++++++++++++
 lass/1systems/mors/config.nix |  8 +----
 lass/kops.nix                 | 35 +++++++++++++++++++
 3 files changed, 100 insertions(+), 7 deletions(-)
 create mode 100644 krebs/kops.nix
 create mode 100644 lass/kops.nix

diff --git a/krebs/kops.nix b/krebs/kops.nix
new file mode 100644
index 000000000..9774b5cab
--- /dev/null
+++ b/krebs/kops.nix
@@ -0,0 +1,64 @@
+{ name }: rec {
+
+  kops = (import <nixpkgs> {}).fetchgit {
+    url = https://cgit.krebsco.de/kops/;
+    rev = "e89cf20d4310070a877c2e24a287659546b561c9";
+    sha256 = "0wg8d80sxa46z4i7ir79sci2hwmv3qskzqdg0si64p6vazy8vckb";
+  };
+
+  lib = import "${kops}/lib";
+
+  # TODO document why pkgs should be used like this
+  pkgs = import "${kops}/pkgs" {};
+
+  krebs-source = {
+    nixpkgs.git = {
+      ref = "09bca91e3b5a18d7f37f7632175ac71f2bf369ff";
+      url = https://github.com/NixOS/nixpkgs;
+    };
+    stockholm.file = toString ~/stockholm;
+    stockholm-version.pipe = toString (pkgs.writeDash "${name}-version" ''
+      set -efu
+      cd $HOME/stockholm
+      V=$(${pkgs.coreutils}/bin/date +%y.%m)
+      if test -d .git; then
+        V=$V.git.$(${pkgs.git}/bin/git describe --always --dirty)
+        case $V in (*-dirty)
+          V=$V@''${HOSTNAME-$(${pkgs.nettools}/bin/hostname)}
+        esac
+      fi
+      printf %s "$V"
+    '');
+  };
+
+  source ={ test }: lib.evalSource [
+    krebs-source
+    {
+      nixos-config.symlink = "stockholm/krebs/1systems/${name}/config.nix";
+      secrets =
+        if test
+          then {
+            file = toString <stockholm/krebs/6tests/data/secrets>;
+          }
+          else {
+            pass = {
+              dir = "${lib.getEnv "HOME"}/brain";
+              name = "krebs-secrets/${name}";
+            };
+          }
+        ;
+    }
+  ];
+
+  # usage: $(nix-build --no-out-link --argstr name HOSTNAME -A deploy)
+  deploy = pkgs.kops.writeDeploy "${name}-deploy" {
+    source = source { test = false; };
+    target = "root@${name}/var/src";
+  };
+
+  # usage: $(nix-build --no-out-link --argstr name HOSTNAME -A test)
+  test = pkgs.kops.writeTest "${name}-test" {
+    source = source { test = true; };
+    target = "${lib.getEnv "HOME"}/tmp/${name}-kops-test-src";
+  };
+}
diff --git a/lass/1systems/mors/config.nix b/lass/1systems/mors/config.nix
index 8e805baf0..cd259d0fe 100644
--- a/lass/1systems/mors/config.nix
+++ b/lass/1systems/mors/config.nix
@@ -168,14 +168,8 @@ with import <stockholm/lib>;
   environment.shellAliases = {
     deploy = pkgs.writeDash "deploy" ''
       set -eu
-      export PATH=${makeBinPath [
-        pkgs.bash
-        pkgs.coreutils
-        pkgs.nixUnstable
-      ]}
-      cd ~/stockholm
       export SYSTEM="$1"
-      exec nix-shell -I stockholm="$PWD" --run 'deploy --system="$SYSTEM"'
+      $(nix-build $HOME/stockholm/lass/kops.nix --no-out-link --argstr name "$SYSTEM" -A deploy)
     '';
   };
 
diff --git a/lass/kops.nix b/lass/kops.nix
new file mode 100644
index 000000000..9d0ab911a
--- /dev/null
+++ b/lass/kops.nix
@@ -0,0 +1,35 @@
+{ name }: let
+  inherit (import ../krebs/kops.nix { inherit name; })
+    krebs-source
+    lib
+    pkgs
+  ;
+
+  source = { test }: lib.evalSource [
+    krebs-source
+    {
+      nixos-config.symlink = "stockholm/lass/1systems/${name}/config.nix";
+      secrets = if test then {
+        file = "/home/lass/stockholm/lass/2configs/tests/dummy-secrets";
+      } else {
+        pass = {
+          dir = "${lib.getEnv "HOME"}/.password-store";
+          name = "hosts/${name}";
+        };
+      };
+    }
+  ];
+
+in {
+  # usage: $(nix-build --no-out-link --argstr name HOSTNAME -A deploy)
+  deploy = pkgs.kops.writeDeploy "${name}-deploy" {
+    source = source { test = false; };
+    target = "root@${name}/var/src";
+  };
+
+  # usage: $(nix-build --no-out-link --argstr name HOSTNAME -A test)
+  test = pkgs.kops.writeTest "${name}-test" {
+    source = source { test = true; };
+    target = "${lib.getEnv "HOME"}/tmp/${name}-kops-test-src";
+  };
+}

From 63be8108168d7868534fe154f68038de426132bc Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Fri, 6 Apr 2018 11:07:04 +0200
Subject: [PATCH 12/14] nixpkgs: 09bca91 -> 4b4bbce

---
 krebs/kops.nix   | 2 +-
 krebs/source.nix | 5 +----
 2 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/krebs/kops.nix b/krebs/kops.nix
index 9774b5cab..caf437b67 100644
--- a/krebs/kops.nix
+++ b/krebs/kops.nix
@@ -13,7 +13,7 @@
 
   krebs-source = {
     nixpkgs.git = {
-      ref = "09bca91e3b5a18d7f37f7632175ac71f2bf369ff";
+      ref = "4b4bbce199d3b3a8001ee93495604289b01aaad3";
       url = https://github.com/NixOS/nixpkgs;
     };
     stockholm.file = toString ~/stockholm;
diff --git a/krebs/source.nix b/krebs/source.nix
index 1f83d29f7..3ee12b37f 100644
--- a/krebs/source.nix
+++ b/krebs/source.nix
@@ -22,10 +22,7 @@ in
       };
       stockholm.file = toString <stockholm>;
       stockholm-version.pipe = "${pkgs.stockholm}/bin/get-version";
-      nixpkgs.git = {
-        url = https://github.com/NixOS/nixpkgs;
-        ref = "09bca91e3b5a18d7f37f7632175ac71f2bf369ff"; # nixos-18.03 # 2018-04-02
-      };
+      nixpkgs = (import ./kops.nix { name = ""; }).krebs-source.nixpkgs;
     }
     override
   ]

From e68aaca801130125a507fc3345472ab30f2d0f05 Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Fri, 6 Apr 2018 12:08:29 +0200
Subject: [PATCH 13/14] kops.nix: use relative path to stockholm

---
 krebs/kops.nix | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/krebs/kops.nix b/krebs/kops.nix
index caf437b67..f544b93d2 100644
--- a/krebs/kops.nix
+++ b/krebs/kops.nix
@@ -16,7 +16,7 @@
       ref = "4b4bbce199d3b3a8001ee93495604289b01aaad3";
       url = https://github.com/NixOS/nixpkgs;
     };
-    stockholm.file = toString ~/stockholm;
+    stockholm.file = toString ../.;
     stockholm-version.pipe = toString (pkgs.writeDash "${name}-version" ''
       set -efu
       cd $HOME/stockholm

From 5b8c4d24e274bbf26e85420fc11b5bf7e24ac22d Mon Sep 17 00:00:00 2001
From: lassulus <lassulus@lassul.us>
Date: Fri, 6 Apr 2018 15:57:20 +0200
Subject: [PATCH 14/14] RIP zandronum

---
 krebs/5pkgs/simple/zandronum-bin/default.nix | 83 --------------------
 lass/2configs/games.nix                      |  4 +-
 nin/2configs/games.nix                       |  4 +-
 3 files changed, 4 insertions(+), 87 deletions(-)
 delete mode 100644 krebs/5pkgs/simple/zandronum-bin/default.nix

diff --git a/krebs/5pkgs/simple/zandronum-bin/default.nix b/krebs/5pkgs/simple/zandronum-bin/default.nix
deleted file mode 100644
index e97f46add..000000000
--- a/krebs/5pkgs/simple/zandronum-bin/default.nix
+++ /dev/null
@@ -1,83 +0,0 @@
-{ stdenv
-, atk
-, bzip2
-, cairo
-, fetchurl
-, fluidsynth
-, fontconfig
-, freetype
-, gdk_pixbuf
-, glib
-, gtk2
-, libjpeg_turbo
-, mesa_glu
-, mesa_noglu
-, openssl
-, pango
-, SDL
-, zlib
-, makeWrapper
-}:
-
-stdenv.mkDerivation rec {
-  name = "zandronum-3.0";
-
-  src = fetchurl {
-    url = "http://zandronum.com/downloads/testing/3.0/ZandroDev3.0-170205-2117linux-x86_64.tar.bz2";
-    sha256 = "17vrzk0m5b17sp3sqcg57r7812ma97lp3qxn9hmd39fwl1z40fz3";
-  };
-
-  libPath = stdenv.lib.makeLibraryPath [
-    atk
-    bzip2
-    cairo
-    fluidsynth
-    fontconfig
-    freetype
-    gdk_pixbuf
-    glib
-    gtk2
-    libjpeg_turbo
-    mesa_glu
-    mesa_noglu
-    openssl
-    pango
-    SDL
-    stdenv.cc.cc
-    zlib
-  ];
-
-  nativeBuildInputs = [ makeWrapper ];
-
-  phases = [ "unpackPhase" "installPhase" ];
-
-  sourceRoot = ".";
-
-  installPhase = ''
-    mkdir -p $out/bin
-    mkdir -p $out/share/zandronum
-    cp *.so *.pk3 zandronum zandronum-server $out/share/zandronum
-
-    patchelf \
-      --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \
-      --set-rpath $libPath:$out/share/zandronum \
-      $out/share/zandronum/zandronum
-    patchelf \
-      --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \
-      --set-rpath $libPath \
-      $out/share/zandronum/zandronum-server
-
-    # If we don't set absolute argv0, zandronum.wad file is not found.
-    makeWrapper $out/share/zandronum/zandronum $out/bin/zandronum
-    makeWrapper $out/share/zandronum/zandronum-server $out/bin/zandronum-server
-  '';
-
-  meta = {
-    homepage = http://zandronum.com/;
-    description = "Multiplayer oriented port, based off Skulltag, for Doom and Doom II by id Software. Binary version for online play";
-    maintainers = [ stdenv.lib.maintainers.lassulus ];
-    # Binary version has different version string than source code version.
-    license = stdenv.lib.licenses.unfreeRedistributable;
-    platforms = [ "x86_64-linux" ];
-  };
-}
diff --git a/lass/2configs/games.nix b/lass/2configs/games.nix
index 50362cda4..3ee3a98a5 100644
--- a/lass/2configs/games.nix
+++ b/lass/2configs/games.nix
@@ -3,7 +3,7 @@
 let
   mainUser = config.users.extraUsers.mainUser;
   vdoom = pkgs.writeDash "vdoom" ''
-    ${pkgs.zandronum-bin}/bin/zandronum \
+    ${pkgs.zandronum}/bin/zandronum \
       -fov 120 \
       "$@"
   '';
@@ -50,7 +50,7 @@ let
   vdoomserver = pkgs.writeDashBin "vdoomserver" ''
     DOOM_DIR=''${DOOM_DIR:-~/doom/}
 
-    ${pkgs.zandronum-bin}/bin/zandronum-server \
+    ${pkgs.zandronum}/bin/zandronum-server \
     +exec ${doomservercfg} \
     "$@"
   '';
diff --git a/nin/2configs/games.nix b/nin/2configs/games.nix
index a7edae078..15e17238d 100644
--- a/nin/2configs/games.nix
+++ b/nin/2configs/games.nix
@@ -3,7 +3,7 @@
 let
   mainUser = config.users.extraUsers.mainUser;
   vdoom = pkgs.writeDash "vdoom" ''
-    ${pkgs.zandronum-bin}/bin/zandronum \
+    ${pkgs.zandronum}/bin/zandronum \
       -fov 120 \
       "$@"
   '';
@@ -50,7 +50,7 @@ let
   vdoomserver = pkgs.writeDashBin "vdoomserver" ''
     DOOM_DIR=''${DOOM_DIR:-~/doom/}
 
-    ${pkgs.zandronum-bin}/bin/zandronum-server \
+    ${pkgs.zandronum}/bin/zandronum-server \
     +exec ${doomservercfg} \
     "$@"
   '';