summaryrefslogtreecommitdiffstats
path: root/krebs/5pkgs/simple
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2017-05-24 01:43:50 +0200
committertv <tv@krebsco.de>2017-05-24 01:43:50 +0200
commitf0b98bd0114df1e1ebb82ff300f9532d86b3eb18 (patch)
tree58a39173f7d6d7caa10a7b8fec1b5a1e54f0c08c /krebs/5pkgs/simple
parent46d6506916f699e3b707dc41cd68c92b98e50e5a (diff)
krebs/5pkgs: move simple pkgs to a subdir
Diffstat (limited to 'krebs/5pkgs/simple')
-rw-r--r--krebs/5pkgs/simple/Reaktor/default.nix22
-rw-r--r--krebs/5pkgs/simple/Reaktor/plugins.nix131
-rw-r--r--krebs/5pkgs/simple/Reaktor/scripts/random-emoji.sh6
-rw-r--r--krebs/5pkgs/simple/Reaktor/scripts/random-issue.sh20
-rw-r--r--krebs/5pkgs/simple/Reaktor/scripts/sed-plugin.py41
-rw-r--r--krebs/5pkgs/simple/Reaktor/scripts/shack-correct.sh6
-rw-r--r--krebs/5pkgs/simple/apt-cacher-ng/default.nix21
-rw-r--r--krebs/5pkgs/simple/bepasty-client-cli/default.nix23
-rw-r--r--krebs/5pkgs/simple/buildbot/default.nix82
-rw-r--r--krebs/5pkgs/simple/buildbot/worker.nix24
-rw-r--r--krebs/5pkgs/simple/cac-api/default.nix43
-rw-r--r--krebs/5pkgs/simple/cac-cert/cac.pem88
-rw-r--r--krebs/5pkgs/simple/cac-cert/default.nix2
-rw-r--r--krebs/5pkgs/simple/cac-panel/default.nix18
-rw-r--r--krebs/5pkgs/simple/collectd-connect-time/default.nix15
-rw-r--r--krebs/5pkgs/simple/default.nix10
-rw-r--r--krebs/5pkgs/simple/dic/default.nix36
-rw-r--r--krebs/5pkgs/simple/drivedroid-gen-repo/default.nix22
-rw-r--r--krebs/5pkgs/simple/fortclientsslvpn/default.nix92
-rw-r--r--krebs/5pkgs/simple/games-user-env/default.nix34
-rw-r--r--krebs/5pkgs/simple/get/default.nix37
-rw-r--r--krebs/5pkgs/simple/git-hooks/default.nix107
-rw-r--r--krebs/5pkgs/simple/github-hosts-sync/default.nix37
-rw-r--r--krebs/5pkgs/simple/go-shortener/default.nix57
-rw-r--r--krebs/5pkgs/simple/go-shortener/packages.nix44
-rw-r--r--krebs/5pkgs/simple/goify/default.nix18
-rw-r--r--krebs/5pkgs/simple/hashPassword/default.nix15
-rw-r--r--krebs/5pkgs/simple/htgen/default.nix28
-rw-r--r--krebs/5pkgs/simple/irc-announce/default.nix66
-rw-r--r--krebs/5pkgs/simple/kpaste/default.nix5
-rw-r--r--krebs/5pkgs/simple/krebspaste/default.nix6
-rw-r--r--krebs/5pkgs/simple/krebszones/default.nix25
-rw-r--r--krebs/5pkgs/simple/logf/default.nix114
-rw-r--r--krebs/5pkgs/simple/much/cabal.nix28
-rw-r--r--krebs/5pkgs/simple/much/default.nix3
-rw-r--r--krebs/5pkgs/simple/netcup/default.nix32
-rw-r--r--krebs/5pkgs/simple/newsbot-js/default.nix60
-rw-r--r--krebs/5pkgs/simple/newsbot-js/packages.nix1747
-rw-r--r--krebs/5pkgs/simple/noVNC/default.nix21
-rw-r--r--krebs/5pkgs/simple/painload/default.nix7
-rw-r--r--krebs/5pkgs/simple/passwdqc-utils/default.nix37
-rw-r--r--krebs/5pkgs/simple/populate/default.nix36
-rw-r--r--krebs/5pkgs/simple/posix-array/default.nix30
-rw-r--r--krebs/5pkgs/simple/pssh/default.nix36
-rw-r--r--krebs/5pkgs/simple/push/default.nix49
-rw-r--r--krebs/5pkgs/simple/realwallpaper/default.nix24
-rw-r--r--krebs/5pkgs/simple/repo-sync/default.nix21
-rw-r--r--krebs/5pkgs/simple/retiolum-bootstrap/default.nix29
-rw-r--r--krebs/5pkgs/simple/rutorrent/default.nix15
-rw-r--r--krebs/5pkgs/simple/tarantool/default.nix21
-rw-r--r--krebs/5pkgs/simple/tinc_graphs/default.nix26
-rw-r--r--krebs/5pkgs/simple/translate-shell/default.nix43
-rw-r--r--krebs/5pkgs/simple/treq/default.nix17
-rw-r--r--krebs/5pkgs/simple/untilport/default.nix18
-rw-r--r--krebs/5pkgs/simple/urlwatch/default.nix24
-rw-r--r--krebs/5pkgs/simple/weechat/default.nix80
-rw-r--r--krebs/5pkgs/simple/whatsupnix/default.nix15
-rw-r--r--krebs/5pkgs/simple/whatsupnix/whatsupnix.bash44
-rw-r--r--krebs/5pkgs/simple/with-tmpdir/default.nix29
-rw-r--r--krebs/5pkgs/simple/youtube-tools/default.nix21
-rw-r--r--krebs/5pkgs/simple/zandronum-bin/default.nix83
61 files changed, 3891 insertions, 0 deletions
diff --git a/krebs/5pkgs/simple/Reaktor/default.nix b/krebs/5pkgs/simple/Reaktor/default.nix
new file mode 100644
index 000000000..fc3710820
--- /dev/null
+++ b/krebs/5pkgs/simple/Reaktor/default.nix
@@ -0,0 +1,22 @@
+{ lib, pkgs,python3Packages,fetchurl, ... }:
+
+python3Packages.buildPythonPackage rec {
+ name = "Reaktor-${version}";
+ version = "0.5.1";
+
+ doCheck = false;
+
+ propagatedBuildInputs = with pkgs;[
+ python3Packages.docopt
+ python3Packages.requests2
+ ];
+ src = fetchurl {
+ url = "https://pypi.python.org/packages/source/R/Reaktor/Reaktor-${version}.tar.gz";
+ sha256 = "0dn9r0cyxi1sji2pnybsrc4hhaaq7hmf235nlgkrxqlsdb7y6n6n";
+ };
+ meta = {
+ homepage = http://krebsco.de/;
+ description = "An IRC bot based on asynchat";
+ license = lib.licenses.wtfpl;
+ };
+}
diff --git a/krebs/5pkgs/simple/Reaktor/plugins.nix b/krebs/5pkgs/simple/Reaktor/plugins.nix
new file mode 100644
index 000000000..e85e41cfe
--- /dev/null
+++ b/krebs/5pkgs/simple/Reaktor/plugins.nix
@@ -0,0 +1,131 @@
+{ stdenv, lib, pkgs, makeWrapper }:
+
+rec {
+ # Begin API
+ buildBaseReaktorPlugin = { name
+ , config # python extra configuration for plugin
+ , phases ? []
+ , ... } @ attrs:
+ stdenv.mkDerivation (attrs // {
+ name = "Reaktor-plugin-" + name;
+ isReaktorPlugin = true;
+ });
+
+ buildSimpleReaktorPlugin = name: { script
+ , path ? []
+ , env ? {}
+ , append_rule ? false # append the rule instead of insert
+ , pattern ? ""
+ , ... } @ attrs:
+ let
+ path_env = { "PATH" = lib.makeSearchPath "bin" (path ++ [ pkgs.coreutils ]); };
+ src_dir = pkgs.substituteAll ( {
+ inherit name;
+ dir = "bin";
+ isExecutable = true;
+ src = script;
+ });
+ src_file = "${src_dir}/bin/${name}";
+ config = ''
+ public_commands.${if append_rule then "append(" else "insert(0," }{
+ 'capname' : "${name}",
+ 'pattern' : ${if pattern == "" then
+ ''indirect_pattern.format("${name}")'' else
+ ''"${pattern}"'' },
+ 'argv' : ["${src_file}"],
+ 'env' : ${builtins.toJSON (path_env // env)} })
+ '';
+ config_file = pkgs.writeText "plugin.py" config;
+ in buildBaseReaktorPlugin (attrs // rec {
+ inherit name config;
+
+ phases = [ "installPhase" ];
+ buildInputs = [ makeWrapper ];
+ installPhase = ''
+ mkdir -p $out/bin $out/etc/Reaktor
+ ln -s ${src_file} $out/bin
+ wrapProgram $out/bin/${name} \
+ --prefix PATH : ${path_env.PATH}
+ ln -s ${config_file} $out/etc/Reaktor/plugin.py
+ '';
+
+ });
+ # End API
+
+ # Begin Plugins
+ random-emoji = buildSimpleReaktorPlugin "emoji" {
+ path = with pkgs; [ gnused gnugrep xmlstarlet curl ];
+ script = ./scripts/random-emoji.sh;
+ };
+
+ sed-plugin = buildSimpleReaktorPlugin "sed-plugin" {
+ path = [ pkgs.gnused pkgs.python3 ];
+ # only support s///gi the plugin needs to see every msg
+ # TODO: this will eat up the last regex, fix Reaktor to support fallthru
+ append_rule = true;
+ pattern = "^(?P<args>.*)$$";
+ script = ./scripts/sed-plugin.py;
+ };
+
+ shack-correct = buildSimpleReaktorPlugin "shack-correct" {
+ path = [ pkgs.gnused ];
+ pattern = "^(?P<args>.*Shack.*)$$";
+ script = ./scripts/shack-correct.sh;
+ };
+
+ nixos-version = buildSimpleReaktorPlugin "nixos-version" {
+ script = pkgs.writeDash "nixos-version" ''
+ . /etc/os-release
+ echo "$PRETTY_NAME"
+ '';
+ };
+ stockholm-issue = buildSimpleReaktorPlugin "stockholm-issue" {
+ script = ./scripts/random-issue.sh;
+ path = with pkgs; [ git gnused haskellPackages.lentil ];
+ env = { "origin" = "http://cgit.gum/stockholm"; };
+ };
+
+ titlebot =
+ let
+ pypkgs = pkgs.python3Packages;
+ titlebot_cmds = pypkgs.buildPythonPackage {
+ name = "titlebot_cmds";
+ propagatedBuildInputs = with pypkgs; [ setuptools ];
+ src = pkgs.fetchurl {
+ url = "https://github.com/makefu/reaktor-titlebot/archive/2.1.0.tar.gz";
+ sha256 = "0wvf09wmk8b52f9j65qrw81nwrhs9pfhijwrlkzp5l7l2q8cjkp6";
+ };
+ };
+ in buildBaseReaktorPlugin rec {
+ name = "titlebot";
+ phases = [ "installPhase" ];
+ installPhase = ''
+ mkdir -p $out
+ ln -s ${titlebot_cmds}/* $out
+ '';
+ config = ''
+ def titlebot_cmd(cmd):
+ from os import environ
+ return { 'capname': None,
+ 'env': { 'TITLEDB':
+ environ['state_dir']+'/suggestions.json' },
+ 'pattern': '^\\.' + cmd + '\\s*(?:\\s+(?P<args>.*))?$$',
+ 'argv': [ '${titlebot_cmds}/bin/' + cmd ] }
+ for i in ['up','help','list','top','new']:
+ public_commands.insert(0,titlebot_cmd(i))
+ commands.insert(0,titlebot_cmd('clear'))
+ '';
+ };
+
+ url-title = (buildSimpleReaktorPlugin "url-title" {
+ pattern = "^.*(?P<args>http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+).*$$";
+ path = with pkgs; [ curl perl ];
+ script = pkgs.writeDash "lambda-pl" ''
+ if [ "$#" -gt 0 ]; then
+ curl -SsL --max-time 5 "$1" |
+ perl -l -0777 -ne 'print $1 if /<title.*?>\s*(.*?)(?: - youtube)?\s*<\/title/si'
+ fi
+ '';
+ });
+
+}
diff --git a/krebs/5pkgs/simple/Reaktor/scripts/random-emoji.sh b/krebs/5pkgs/simple/Reaktor/scripts/random-emoji.sh
new file mode 100644
index 000000000..386aa68b9
--- /dev/null
+++ b/krebs/5pkgs/simple/Reaktor/scripts/random-emoji.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+curl http://emojicons.com/random -s | \
+ grep data-text | \
+ sed -n 's/.*>\(.*\)<\/textarea>/\1/p' | \
+ head -n 1 | \
+ xmlstarlet unesc
diff --git a/krebs/5pkgs/simple/Reaktor/scripts/random-issue.sh b/krebs/5pkgs/simple/Reaktor/scripts/random-issue.sh
new file mode 100644
index 000000000..5c47c6156
--- /dev/null
+++ b/krebs/5pkgs/simple/Reaktor/scripts/random-issue.sh
@@ -0,0 +1,20 @@
+#! /bin/sh
+set -eu
+# requires env:
+# $state_dir
+# $origin
+
+# in PATH: git,lentil,coreutils
+subdir=`echo "$1" | tr -dc "[:alnum:]"`
+name=`echo "$origin" | tr -dc "[:alnum:]"`
+track="$state_dir/$name-checkout"
+(if test -e "$track" ;then
+ cd "$track"
+ git fetch origin master
+ git reset --hard origin/master
+else
+ git clone "$origin" "$track"
+fi) >&2
+
+cd "$track"
+lentil "${subdir:-.}" -f csv | sed 1d | shuf | head -1
diff --git a/krebs/5pkgs/simple/Reaktor/scripts/sed-plugin.py b/krebs/5pkgs/simple/Reaktor/scripts/sed-plugin.py
new file mode 100644
index 000000000..da8e2f726
--- /dev/null
+++ b/krebs/5pkgs/simple/Reaktor/scripts/sed-plugin.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python3
+
+# Usage:
+# _from=krebs state_dir=. python sed-plugin.py 'dick butt'
+# _from=krebs state_dir=. python sed-plugin.py 's/t/l/g'
+# > dick bull
+import shelve
+from os import environ
+from os.path import join
+from sys import argv
+import re
+
+d = shelve.open(join(environ['state_dir'], 'sed-plugin.shelve'), writeback=True)
+usr = environ['_from']
+
+
+def is_regex(line):
+ myre = re.compile(r'^s/(?:\\/|[^/])+/(?:\\/|[^/])*/[ig]?$')
+ return myre.match(line)
+
+line = argv[1]
+
+if is_regex(line):
+ last = d.get(usr, None)
+ if last:
+ from subprocess import Popen, PIPE
+ p = Popen(['sed', line], stdin=PIPE, stdout=PIPE)
+ so, se = p.communicate(bytes("{}\n".format(last), "UTF-8"))
+ if p.returncode:
+ print("something went wrong when trying to process your regex: {}".format(se.decode()))
+ ret = so.decode()
+ print("\x1b[1m{}\x1b[0m meant: {}".format(usr, ret.strip()))
+ if ret:
+ d[usr] = ret
+
+ else:
+ print("no last message")
+else:
+ d[usr] = line
+
+d.close()
diff --git a/krebs/5pkgs/simple/Reaktor/scripts/shack-correct.sh b/krebs/5pkgs/simple/Reaktor/scripts/shack-correct.sh
new file mode 100644
index 000000000..3b4d04f80
--- /dev/null
+++ b/krebs/5pkgs/simple/Reaktor/scripts/shack-correct.sh
@@ -0,0 +1,6 @@
+#! /bin/sh
+set -eu
+printf "Sie meinten wohl \""
+echo -n $@ | sed 's/Shack/shack/g'
+echo "\""
+echo "${_from}--"
diff --git a/krebs/5pkgs/simple/apt-cacher-ng/default.nix b/krebs/5pkgs/simple/apt-cacher-ng/default.nix
new file mode 100644
index 000000000..e3986713b
--- /dev/null
+++ b/krebs/5pkgs/simple/apt-cacher-ng/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, cmake, doxygen, zlib, openssl, bzip2, pkgconfig, libpthreadstubs }:
+
+stdenv.mkDerivation rec {
+ name = "apt-cacher-ng-${version}";
+ version = "2";
+
+ src = fetchurl {
+ url = "http://ftp.debian.org/debian/pool/main/a/apt-cacher-ng/apt-cacher-ng_${version}.orig.tar.xz";
+ sha256 = "0bkc3012vinridl5ch46pwnxjalymx4wf6nxax64nm7bdkcj9azf";
+ };
+
+ NIX_LDFLAGS = "-lpthread";
+ buildInputs = [ doxygen cmake zlib openssl bzip2 pkgconfig libpthreadstubs ];
+
+ meta = {
+ description = "A caching proxy specialized for linux distribution files";
+ homepage = http://www.unix-ag.uni-kl.de/~bloch/acng/;
+ license = stdenv.lib.licenses.gpl2;
+ maintainers = [ stdenv.lib.maintainers.makefu ];
+ };
+}
diff --git a/krebs/5pkgs/simple/bepasty-client-cli/default.nix b/krebs/5pkgs/simple/bepasty-client-cli/default.nix
new file mode 100644
index 000000000..c58e637b3
--- /dev/null
+++ b/krebs/5pkgs/simple/bepasty-client-cli/default.nix
@@ -0,0 +1,23 @@
+{ lib, pkgs, pythonPackages, fetchFromGitHub, ... }:
+
+with pythonPackages; buildPythonPackage rec {
+ name = "bepasty-client-cli";
+ propagatedBuildInputs = [
+ python_magic
+ click
+ requests2
+ ];
+
+ src = fetchFromGitHub {
+ owner = "bepasty";
+ repo = "bepasty-client-cli";
+ rev = "4b7135ba8ba1e17501de08ad7b6aca73c0d949d2";
+ sha256 = "1svchyk9zai1vip9ppm12jm7wfjbdr9ijhgcd2n10xh73jrn9cnc";
+ };
+
+ meta = {
+ homepage = https://github.com/bepasty/bepasty-client-cli;
+ description = "CLI client for bepasty-server";
+ license = lib.licenses.bsd2;
+ };
+}
diff --git a/krebs/5pkgs/simple/buildbot/default.nix b/krebs/5pkgs/simple/buildbot/default.nix
new file mode 100644
index 000000000..37eea5fd9
--- /dev/null
+++ b/krebs/5pkgs/simple/buildbot/default.nix
@@ -0,0 +1,82 @@
+{ pkgs, stdenv, pythonPackages, fetchurl, coreutils, plugins ? [] }:
+
+pythonPackages.buildPythonApplication (rec {
+ name = "${pname}-${version}";
+ pname = "buildbot";
+ version = "0.9.4";
+ src = fetchurl {
+ url = "mirror://pypi/b/${pname}/${name}.tar.gz";
+ sha256 = "0wklrn4fszac9wi8zw3vbsznwyff6y57cz0i81zvh46skb6n3086";
+ };
+ doCheck = false;
+ buildInputs = with pythonPackages; [
+ lz4
+ txrequests
+ pyjade
+ boto3
+ moto
+ txgithub
+ mock
+ setuptoolsTrial
+ isort
+ pylint
+ astroid
+ pyflakes
+ pyjwt
+ ];
+
+ propagatedBuildInputs = with pythonPackages; [
+
+ # core
+ twisted
+ jinja2
+ zope_interface
+ future
+ sqlalchemy
+ sqlalchemy_migrate
+ future
+ dateutil
+ txaio
+ autobahn
+
+ # tls
+ pyopenssl
+ service-identity
+ idna
+ pkgs.treq
+
+ # docs
+ sphinx
+ sphinxcontrib-blockdiag
+ sphinxcontrib-spelling
+ pyenchant
+ docutils
+ ramlfications
+ sphinx-jinja
+
+ ] ++ plugins;
+
+ preInstall = ''
+ # writes out a file that can't be read properly
+ sed -i.bak -e '69,84d' buildbot/test/unit/test_www_config.py
+
+ # re-hardcode path to tail
+ sed -i.bak 's|/usr/bin/tail|${coreutils}/bin/tail|' buildbot/scripts/logwatcher.py
+ '';
+
+ postFixup = ''
+ mv -v $out/bin/buildbot $out/bin/.wrapped-buildbot
+ echo "#!/bin/sh" > $out/bin/buildbot
+ echo "export PYTHONPATH=$PYTHONPATH" >> $out/bin/buildbot
+ echo "exec $out/bin/.wrapped-buildbot \"\$@\"" >> $out/bin/buildbot
+ chmod -c 555 $out/bin/buildbot
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = http://buildbot.net/;
+ description = "Continuous integration system that automates the build/test cycle";
+ maintainers = with maintainers; [ nand0p ryansydnor ];
+ platforms = platforms.all;
+ license = licenses.gpl2;
+ };
+})
diff --git a/krebs/5pkgs/simple/buildbot/worker.nix b/krebs/5pkgs/simple/buildbot/worker.nix
new file mode 100644
index 000000000..34e526858
--- /dev/null
+++ b/krebs/5pkgs/simple/buildbot/worker.nix
@@ -0,0 +1,24 @@
+{ pkgs, stdenv, fetchurl, pythonPackages }:
+pythonPackages.buildPythonApplication (rec {
+ name = "${pname}-${version}";
+ pname = "buildbot-worker";
+ version = "0.9.4";
+
+ doCheck = false;
+ src = fetchurl {
+ url = "mirror://pypi/b/${pname}/${name}.tar.gz";
+ sha256 = "0rdrr8x7sn2nxl51p6h9ad42s3c28lb6sys84zrg0d7fm4zhv7hj";
+ };
+
+ buildInputs = with pythonPackages; [ setuptoolsTrial mock ];
+ propagatedBuildInputs = with pythonPackages; [ twisted future pkgs.treq ];
+
+ meta = with stdenv.lib; {
+ homepage = http://buildbot.net/;
+ description = "Buildbot Worker Daemon";
+ maintainers = with maintainers; [ nand0p ryansydnor ];
+ platforms = platforms.all;
+ license = licenses.gpl2;
+ };
+})
+
diff --git a/krebs/5pkgs/simple/cac-api/default.nix b/krebs/5pkgs/simple/cac-api/default.nix
new file mode 100644
index 000000000..e2bd8c148
--- /dev/null
+++ b/krebs/5pkgs/simple/cac-api/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchgit, bc, cac-cert, coreutils, curl, dash, gnugrep, gnused, inotifyTools, jq, ncurses, openssh, sshpass, ... }:
+
+stdenv.mkDerivation {
+ name = "cac-api-1.1.2";
+
+ src = fetchgit {
+ url = http://cgit.ni.krebsco.de/cac-api;
+ rev = "67e93510e7742acae44db30275abbfe671aa9b7b";
+ sha256 = "1vxh57j7vrq5sg9j1sam0538kkkhqpgf230vvdz2ifzgkj01z27l";
+ };
+
+ phases = [
+ "unpackPhase"
+ "installPhase"
+ ];
+
+ installPhase = ''
+ mkdir -p $out/bin
+ { cat <<\EOF
+ #! ${dash}/bin/dash
+ export PATH=${stdenv.lib.makeBinPath [
+ bc
+ coreutils
+ curl
+ gnugrep
+ gnused
+ inotifyTools
+ jq
+ ncurses
+ openssh
+ sshpass
+ ]}:"$PATH"
+ EOF
+ # [1]: Disable fetching tasks; listtasks is currently broken:
+ # Unknown column 'iod.apitask.cid' in 'field list'
+ sed '
+ /^\s*tasks \\$/d; # [1]
+ s|\<_cac_exec curl|<${cac-cert} & --cacert /dev/stdin|
+ ' cac-api
+ } > $out/bin/cac-api
+ chmod +x $out/bin/cac-api
+ '';
+}
diff --git a/krebs/5pkgs/simple/cac-cert/cac.pem b/krebs/5pkgs/simple/cac-cert/cac.pem
new file mode 100644
index 000000000..9d02b6bcf
--- /dev/null
+++ b/krebs/5pkgs/simple/cac-cert/cac.pem
@@ -0,0 +1,88 @@
+-----BEGIN CERTIFICATE-----
+MIIFWzCCBEOgAwIBAgIQXWIKGWRZf838+wW1zLdK0DANBgkqhkiG9w0BAQsFADCBkDELMAkGA1UE
+BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
+A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxNjA0BgNVBAMTLUNPTU9ETyBSU0EgRG9tYWluIFZhbGlk
+YXRpb24gU2VjdXJlIFNlcnZlciBDQTAeFw0xNTEwMjMwMDAwMDBaFw0xODEwMjIyMzU5NTlaMF8x
+ITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEeMBwGA1UECxMVRXNzZW50aWFsU1NM
+IFdpbGRjYXJkMRowGAYDVQQDDBEqLmNsb3VkYXRjb3N0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAM9CyL8uUPoE3zYbvnwtUW69h0f+rkND1/Jsi15EEBFPQqiYCmPiSaJLn6JB
+Hri34t4lArGrPA6K01x18LJqFoYDy5ya37J8Bd4jF3cijWe/IQEWAw0r2ufhd4LTNMvEyJIECida
+LMhBxpORRdijmvEXCf9D0OEGBV3qfizcCH7+VPordCY3y9fwgbk0wAB1lAk29aRosK3gZJceu57Q
+YkEKjee6pZ473+xpCjaeTBUlPuGA95A2jPf8c+QSPegczOd9Hwo4JqAJSjTzzuHiSbEhd+8JIC/P
+6GYVOvwnNqCPuuXsoBy8xBQ8lHuZcWd5sh4MDRvm5YxVFhYN6kOgf1ECAwEAAaOCAd8wggHbMB8G
+A1UdIwQYMBaAFJCvajqUWgvYkOoSVnPfQ7Q6KNrnMB0GA1UdDgQWBBSC9dSGoIEPHBTUQJjOxxPg
+lhRLPDAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYI
+KwYBBQUHAwIwTwYDVR0gBEgwRjA6BgsrBgEEAbIxAQICBzArMCkGCCsGAQUFBwIBFh1odHRwczov
+L3NlY3VyZS5jb21vZG8uY29tL0NQUzAIBgZngQwBAgEwVAYDVR0fBE0wSzBJoEegRYZDaHR0cDov
+L2NybC5jb21vZG9jYS5jb20vQ09NT0RPUlNBRG9tYWluVmFsaWRhdGlvblNlY3VyZVNlcnZlckNB
+LmNybDCBhQYIKwYBBQUHAQEEeTB3ME8GCCsGAQUFBzAChkNodHRwOi8vY3J0LmNvbW9kb2NhLmNv
+bS9DT01PRE9SU0FEb21haW5WYWxpZGF0aW9uU2VjdXJlU2VydmVyQ0EuY3J0MCQGCCsGAQUFBzAB
+hhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wLQYDVR0RBCYwJIIRKi5jbG91ZGF0Y29zdC5jb22C
+D2Nsb3VkYXRjb3N0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAPfUXBGDYOQnJuykm8I9cB2rBFVvt
+HgzKIM+SXRz/jRt4HN/fsQkq2mI8SUPigWbtrtL1yim0hHdTR4m6vn7eHqj8erjjEJy16OfyRwp8
+LfjjHvcPxAxiRcFdv+8Pu/o0umqtxmRn4enyAZWhqAp3TBjkJPkJgh/toJqGpE7dN1Jw1AF75rrA
+DXS8J5fcJYZQydJce+kacMHLh4C0Q37NgZKPfM+9jsygqY3Fhqh5GIt/CXNx2vlDPQP87QEtK7y7
+dCGd/MwrdKkUvOpsmqWiO1+02DesZSdIow/YW+8cUhPvYMqpM9zKbqVdRj3FJK56+/xNfNX5tiU1
+1VE7rIcEbw==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIGCDCCA/CgAwIBAgIQKy5u6tl1NmwUim7bo3yMBzANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE
+BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
+A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkwHhcNMTQwMjEyMDAwMDAwWhcNMjkwMjExMjM1OTU5WjCBkDELMAkGA1UEBhMC
+R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
+ChMRQ09NT0RPIENBIExpbWl0ZWQxNjA0BgNVBAMTLUNPTU9ETyBSU0EgRG9tYWluIFZhbGlkYXRp
+b24gU2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI7CAhnh
+oFmk6zg1jSz9AdDTScBkxwtiBUUWOqigwAwCfx3M28ShbXcDow+G+eMGnD4LgYqbSRutA776S9uM
+IO3Vzl5ljj4Nr0zCsLdFXlIvNN5IJGS0Qa4Al/e+Z96e0HqnU4A7fK31llVvl0cKfIWLIpeNs4Tg
+llfQcBhglo/uLQeTnaG6ytHNe+nEKpooIZFNb5JPJaXyejXdJtxGpdCsWTWM/06RQ1A/WZMebFEh
+7lgUq/51UHg+TLAchhP6a5i84DuUHoVS3AOTJBhuyydRReZw3iVDpA3hSqXttn7IzW3uLh0nc13c
+RTCAquOyQQuvvUSH2rnlG51/ruWFgqUCAwEAAaOCAWUwggFhMB8GA1UdIwQYMBaAFLuvfgI9+qbx
+PISOre44mOzZMjLUMB0GA1UdDgQWBBSQr2o6lFoL2JDqElZz30O0Oija5zAOBgNVHQ8BAf8EBAMC
+AYYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGwYD
+VR0gBBQwEjAGBgRVHSAAMAgGBmeBDAECATBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vY3JsLmNv
+bW9kb2NhLmNvbS9DT01PRE9SU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDBxBggrBgEFBQcB
+AQRlMGMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9ET1JTQUFkZFRy
+dXN0Q0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wDQYJKoZIhvcN
+AQEMBQADggIBAE4rdk+SHGI2ibp3wScF9BzWRJ2pmj6q1WZmAT7qSeaiNbz69t2Vjpk1mA42GHWx
+3d1Qcnyu3HeIzg/3kCDKo2cuH1Z/e+FE6kKVxF0NAVBGFfKBiVlsit2M8RKhjTpCipj4SzR7JzsI
+tG8kO3KdY3RYPBpsP0/HEZrIqPW1N+8QRcZs2eBelSaz662jue5/DJpmNXMyYE7l3YphLG5SEXdo
+ltMYdVEVABt0iN3hxzgEQyjpFv3ZBdRdRydg1vs4O2xyopT4Qhrf7W8GjEXCBgCq5Ojc2bXhc3js
+9iPc0d1sjhqPpepUfJa3w/5Vjo1JXvxku88+vZbrac2/4EjxYoIQ5QxGV/Iz2tDIY+3GH5QFlkoa
+kdH368+PUq4NCNk+qKBR6cGHdNXJ93SrLlP7u3r7l+L4HyaPs9Kg4DdbKDsx5Q5XLVq4rXmsXiBm
+GqW5prU5wfWYQ//u+aen/e7KJD2AFsQXj4rBYKEMrltDR5FL1ZoXX/nUh8HCjLfn4g8wGTeGrODc
+QgPmlKidrv0PJFGUzpII0fxQ8ANAe4hZ7Q7drNJ3gjTcBpUC2JD5Leo31Rpg0Gcg19hCC0Wvgmje
+3WYkN5AplBlGGSW4gNfL1IYoakRwJiNiqZ+Gb7+6kHDSVneFeO/qJakXzlByjAA6quPbYzSf+AZx
+AeKCINT+b72x
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE
+BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
+A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC
+R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
+ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn
+dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ
+FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+
+5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG
+x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX
+2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL
+OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3
+sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C
+GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5
+WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E
+FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
+DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt
+rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+
+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg
+tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW
+sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp
+pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA
+zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq
+ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52
+7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I
+LaZRfyHBNVOFBkpdn627G190
+-----END CERTIFICATE-----
diff --git a/krebs/5pkgs/simple/cac-cert/default.nix b/krebs/5pkgs/simple/cac-cert/default.nix
new file mode 100644
index 000000000..d99019dca
--- /dev/null
+++ b/krebs/5pkgs/simple/cac-cert/default.nix
@@ -0,0 +1,2 @@
+{ writeText, ... }:
+writeText "cac.pem" (builtins.readFile ./cac.pem)
diff --git a/krebs/5pkgs/simple/cac-panel/default.nix b/krebs/5pkgs/simple/cac-panel/default.nix
new file mode 100644
index 000000000..fd4799535
--- /dev/null
+++ b/krebs/5pkgs/simple/cac-panel/default.nix
@@ -0,0 +1,18 @@
+{pkgs, python3Packages, ...}:
+
+python3Packages.buildPythonPackage rec {
+ name = "cac-panel-${version}";
+ version = "0.4.4";
+
+ src = pkgs.fetchurl {
+ url = "https://pypi.python.org/packages/source/c/cac-panel/cac-panel-${version}.tar.gz";
+ sha256 = "16bx67fsbgwxciik42jhdnfzxx1xp5b0rimzrif3r7h4fawlnld8";
+ };
+
+ propagatedBuildInputs = with python3Packages; [
+ docopt
+ requests2
+ beautifulsoup4
+ ];
+}
+
diff --git a/krebs/5pkgs/simple/collectd-connect-time/default.nix b/krebs/5pkgs/simple/collectd-connect-time/default.nix
new file mode 100644
index 000000000..525388029
--- /dev/null
+++ b/krebs/5pkgs/simple/collectd-connect-time/default.nix
@@ -0,0 +1,15 @@
+{lib, pkgs, pythonPackages, fetchurl, ... }:
+
+pythonPackages.buildPythonPackage rec {
+ name = "collectd-connect-time-${version}";
+ version = "0.3.0";
+ src = fetchurl {
+ url = "https://pypi.python.org/packages/source/c/collectd-connect-time/collectd-connect-time-${version}.tar.gz";
+ sha256 = "0vvrf9py9bwc8hk3scxwg4x2j8jlp2qva0mv4q8d9m4b4mk99c95";
+ };
+ meta = {
+ homepage = https://pypi.python.org/pypi/collectd-connect-time/;
+ description = "TCP Connection time plugin for collectd";
+ license = lib.licenses.wtfpl;
+ };
+}
diff --git a/krebs/5pkgs/simple/default.nix b/krebs/5pkgs/simple/default.nix
new file mode 100644
index 000000000..2f6799759
--- /dev/null
+++ b/krebs/5pkgs/simple/default.nix
@@ -0,0 +1,10 @@
+with import <stockholm/lib>;
+
+self: super:
+listToAttrs
+ (map
+ (name: nameValuePair (removeSuffix ".nix" name)
+ (super.callPackage (./. + "/${name}") {}))
+ (filter
+ (name: name != "default.nix" && !hasPrefix "." name)
+ (attrNames (readDir ./.))))
diff --git a/krebs/5pkgs/simple/dic/default.nix b/krebs/5pkgs/simple/dic/default.nix
new file mode 100644
index 000000000..963786f0c
--- /dev/null
+++ b/krebs/5pkgs/simple/dic/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchgit, coreutils, curl, gnused, gnugrep, ... }:
+
+stdenv.mkDerivation {
+ name = "dic";
+
+ src = fetchgit {
+ url = http://cgit.ni.krebsco.de/dic;
+ rev = "refs/tags/v1.0.1";
+ sha256 = "1686mba1z4m7vq70w26qpl00z1cz286c9bya9ql36g6w2pbcs8d3";
+ };
+
+ phases = [
+ "unpackPhase"
+ "installPhase"
+ ];
+
+ installPhase =
+ let
+ path = stdenv.lib.makeBinPath [
+ coreutils
+ curl
+ gnused
+ gnugrep
+ ];
+ in
+ ''
+ mkdir -p $out/bin
+
+ sed \
+ 's,^main() {$,&\n PATH=${path}; export PATH,' \
+ < ./dic \
+ > $out/bin/dic
+
+ chmod +x $out/bin/dic
+ '';
+}
diff --git a/krebs/5pkgs/simple/drivedroid-gen-repo/default.nix b/krebs/5pkgs/simple/drivedroid-gen-repo/default.nix
new file mode 100644
index 000000000..de8046c4a
--- /dev/null
+++ b/krebs/5pkgs/simple/drivedroid-gen-repo/default.nix
@@ -0,0 +1,22 @@
+{stdenv,fetchurl,pkgs,python3Packages, ... }:
+
+python3Packages.buildPythonPackage rec {
+ name = "drivedroid-gen-repo-${version}";
+ version = "0.4.4";
+
+ propagatedBuildInputs = with pkgs;[
+ python3Packages.docopt
+ ];
+
+ src = fetchurl {
+ url = "https://pypi.python.org/packages/source/d/drivedroid-gen-repo/drivedroid-gen-repo-${version}.tar.gz";
+ sha256 = "09p58hzp61r5fp025lak9z52y0aakmaqpi59p9w5xq42dvy2hnvl";
+ };
+
+ meta = {
+ homepage = http://krebsco.de/;
+ description = "Generate Drivedroid repos";
+ license = stdenv.lib.licenses.wtfpl;
+ };
+}
+
diff --git a/krebs/5pkgs/simple/fortclientsslvpn/default.nix b/krebs/5pkgs/simple/fortclientsslvpn/default.nix
new file mode 100644
index 000000000..cbcfab05f
--- /dev/null
+++ b/krebs/5pkgs/simple/fortclientsslvpn/default.nix
@@ -0,0 +1,92 @@
+{ stdenv, lib, fetchurl, gnome3, glib, libSM, gdk_pixbuf, libX11, libXinerama, iproute,
+ makeWrapper, libredirect, ppp, coreutils, gawk, pango }:
+stdenv.mkDerivation rec {
+ name = "forticlientsslvpn";
+ # forticlient will be copied into /tmp before execution. this is necessary as
+ # the software demands $base to be writeable
+
+ # TODO: chroot and create the following files instead of copying files manually
+ # mkdir /etc/ppp ; touch /etc/ppp/options
+ # ln -s /run/current-system/sw/bin/tail /usr/bin/tail
+ # ln -s /run/current-system/sw/bin/pppd /usr/sbin/pppd
+
+ src = fetchurl {
+ # archive.org mirror:
+ # https://archive.org/download/ForticlientsslvpnLinux4.4.23171.tar/forticlientsslvpn_linux_4.4.2317.tar.gz
+ url = http://www.zen.co.uk/userfiles/knowledgebase/FortigateSSLVPNClient/forticlientsslvpn_linux_4.4.2317.tar.gz;
+ sha256 = "19clnf9rgrnwazlpah8zz5kvz6kc8lxawrgmksx25k5ywflmbcrr";
+ };
+ phases = [ "unpackPhase" "buildPhase" "installPhase" "fixupPhase" ];
+
+ buildInputs = [ makeWrapper ];
+
+ binPath = lib.makeBinPath [
+ coreutils
+ gawk
+ ];
+
+
+ libPath = lib.makeLibraryPath [
+ stdenv.cc.cc
+ ];
+
+ guiLibPath = lib.makeLibraryPath [
+ gnome3.gtk
+ glib
+ libSM
+ gdk_pixbuf
+ libX11
+ libXinerama
+ pango
+ ];
+
+ buildPhase = ''
+ # TODO: 32bit, use the 32bit folder
+ patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+ --set-rpath "$libPath" \
+ 64bit/forticlientsslvpn_cli
+
+ patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+ --set-rpath "$libPath:$guiLibPath" \
+ 64bit/forticlientsslvpn
+
+ patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+ --set-rpath "$libPath" \
+ 64bit/helper/subproc
+
+ sed -i 's#\(export PATH=\).*#\1"${binPath}"#' 64bit/helper/waitppp.sh
+ '';
+
+ installPhase = ''
+ mkdir -p "$out/opt/fortinet"
+
+ cp -r 64bit/. "$out/opt/fortinet"
+ wrapProgram $out/opt/fortinet/forticlientsslvpn \
+ --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \
+ --set NIX_REDIRECTS /usr/bin/tail=${coreutils}/bin/tail:/usr/sbin/ip=${iproute}/bin/ip:/usr/sbin/pppd=${ppp}/bin/pppd
+
+ mkdir -p "$out/bin/"
+
+ cat > $out/bin/forticlientsslvpn <<EOF
+ #!/bin/sh
+ # prepare suid bit in tmp
+ # TODO maybe tmp does not support suid
+ set -euf
+ tmpforti=\$(${coreutils}/bin/mktemp -d)
+ trap "rm -rf \$tmpforti;" INT TERM EXIT
+ cp -r $out/opt/fortinet/. \$tmpforti
+ chmod +s \$tmpforti/helper/subproc
+ cd \$tmpforti
+ "./forticlientsslvpn" "\$@"
+ EOF
+
+ chmod +x $out/bin/forticlientsslvpn
+ chmod -x $out/opt/fortinet/helper/showlicense
+ '';
+ meta = {
+ homepage = http://www.fortinet.com;
+ description = "Forticlient SSL-VPN client";
+ license = lib.licenses.unfree;
+ maintainers = [ lib.maintainers.makefu ];
+ };
+}
diff --git a/krebs/5pkgs/simple/games-user-env/default.nix b/krebs/5pkgs/simple/games-user-env/default.nix
new file mode 100644
index 000000000..abe770ed1
--- /dev/null
+++ b/krebs/5pkgs/simple/games-user-env/default.nix
@@ -0,0 +1,34 @@
+{ lib, pkgs, ... }: let
+
+#TODO: make sure env exists prior to running
+env_nix = pkgs.writeText "env.nix" ''
+ { pkgs ? import <nixpkgs> {} }:
+
+ (pkgs.buildFHSUserEnv {
+ name = "simple-x11-env";
+ targetPkgs = pkgs: with pkgs; [
+ coreutils
+ ];
+ multiPkgs = pkgs: with pkgs; [
+ alsaLib
+ zlib
+ xorg.libXxf86vm
+ curl
+ openal
+ openssl_1_0_2
+ xorg.libXext
+ xorg.libX11
+ xorg.libXrandr
+ xorg.libXcursor
+ xorg.libXinerama
+ xorg.libXi
+ mesa_glu
+ ];
+ runScript = "bash";
+ }).env
+'';
+
+
+in pkgs.writeDashBin "games-user-env" ''
+ nix-shell ${env_nix}
+''
diff --git a/krebs/5pkgs/simple/get/default.nix b/krebs/5pkgs/simple/get/default.nix
new file mode 100644
index 000000000..83f6b0228
--- /dev/null
+++ b/krebs/5pkgs/simple/get/default.nix
@@ -0,0 +1,37 @@
+{ coreutils, gnugrep, gnused, fetchgit, jq, nix, stdenv, ... }:
+
+stdenv.mkDerivation {
+ name = "get-1.4.1";
+
+ src = fetchgit {
+ url = http://cgit.ni.krebsco.de/get;
+ rev = "41c0c35805ec1708729f73d14650d8ebc94a405b";
+ sha256 = "0rx1qsbb4py14795yhhqwlvaibj2569fqm7x2671l868xi59h9f9";
+ };
+
+ phases = [
+ "unpackPhase"
+ "installPhase"
+ ];
+
+ installPhase =
+ let
+ path = stdenv.lib.makeBinPath [
+ coreutils
+ gnugrep
+ gnused
+ jq
+ nix
+ ];
+ in
+ ''
+ mkdir -p $out/bin
+
+ sed \
+ '1s,.*,&\nPATH=${path},' \
+ < ./get \
+ > $out/bin/get
+
+ chmod +x $out/bin/get
+ '';
+}
diff --git a/krebs/5pkgs/simple/git-hooks/default.nix b/krebs/5pkgs/simple/git-hooks/default.nix
new file mode 100644
index 000000000..4017b873b
--- /dev/null
+++ b/krebs/5pkgs/simple/git-hooks/default.nix
@@ -0,0 +1,107 @@
+{ pkgs, ... }:
+
+with import <stockholm/lib>;
+
+{
+ # TODO irc-announce should return a derivation
+ # but it cannot because krebs.git.repos.*.hooks :: attrsOf str
+ irc-announce = { nick, channel, server, port ? 6667, verbose ? false, branches ? [] }: ''
+ #! /bin/sh
+ set -euf
+
+ export PATH=${makeBinPath (with pkgs; [
+ coreutils
+ git
+ gnugrep
+ gnused
+ ])}
+
+ green() { printf '\x0303,99%s\x0F' "$1"; }
+ red() { printf '\x0304,99%s\x0F' "$1"; }
+ orange() { printf '\x0307,99%s\x0F' "$1"; }
+ pink() { printf '\x0313,99%s\x0F' "$1"; }
+ gray() { printf '\x0314,99%s\x0F' "$1"; }
+
+ unset message
+ add_message() {
+ message="''${message+$message
+ }$*"
+ }
+
+ nick=${escapeShellArg nick}
+ channel=${escapeShellArg channel}
+ server=${escapeShellArg server}
+ port=${toString port}
+
+ host=$nick
+ cgit_endpoint=http://cgit.$host.r
+
+ empty=0000000000000000000000000000000000000000
+
+ while read oldrev newrev ref; do
+
+ if [ $oldrev = $empty ]; then
+ receive_mode=create
+ elif [ $newrev = $empty ]; then
+ receive_mode=delete
+ elif [ "$(git merge-base $oldrev $newrev)" = $oldrev ]; then
+ receive_mode=fast-forward
+ else
+ receive_mode=non-fast-forward
+ fi
+
+ h=$(echo $ref | sed 's:^refs/heads/::')
+
+ ${optionalString (branches != []) ''
+ if ! (echo "$h" | grep -qE "${concatStringsSep "|" branches}"); then
+ echo "we are not serving this branch: $h"
+ exit 0
+ fi
+ ''}
+ # empty_tree=$(git hash-object -t tree /dev/null)
+ empty_tree=4b825dc6
+
+ id=$(echo $newrev | cut -b-7)
+ id2=$(echo $oldrev | cut -b-7)
+ if [ $newrev = $empty ]; then id=$empty_tree; fi
+ if [ $oldrev = $empty ]; then id2=$empty_tree; fi
+
+ case $receive_mode in
+ create)
+ link="$cgit_endpoint/$GIT_SSH_REPO/?h=$h"
+ ;;
+ delete)
+ link="$cgit_endpoint/$GIT_SSH_REPO/ ($h)"
+ ;;
+ fast-forward|non-fast-forward)
+ link="$cgit_endpoint/$GIT_SSH_REPO/diff/?h=$h&id=$id&id2=$id2"
+ ;;
+ esac
+
+ #$host $GIT_SSH_REPO $ref $link
+ add_message $(pink push) $link $(gray "($receive_mode)")
+
+ ${optionalString verbose ''
+ add_message "$(
+ git log \
+ --format="$(orange %h) %s $(gray '(%ar)')" \
+ --reverse \
+ $id2..$id
+
+ git diff --stat $id2..$id \
+ | sed '$!s/\(+*\)\(-*\)$/'$(green '\1')$(red '\2')'/'
+ )"
+ ''}
+
+ done
+
+ if test -n "''${message-}"; then
+ exec ${pkgs.irc-announce}/bin/irc-announce \
+ "$server" \
+ "$port" \
+ "$nick" \
+ "$channel" \
+ "$message"
+ fi
+ '';
+}
diff --git a/krebs/5pkgs/simple/github-hosts-sync/default.nix b/krebs/5pkgs/simple/github-hosts-sync/default.nix
new file mode 100644
index 000000000..cdfed468c
--- /dev/null
+++ b/krebs/5pkgs/simple/github-hosts-sync/default.nix
@@ -0,0 +1,37 @@
+{ pkgs, stdenv, ... }:
+
+stdenv.mkDerivation {
+ name = "github-hosts-sync";
+
+ src = pkgs.painload;
+
+ phases = [
+ "unpackPhase"
+ "installPhase"
+ ];
+
+ installPhase =
+ let
+ ca-bundle = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
+ path = stdenv.lib.makeBinPath (with pkgs; [
+ coreutils
+ findutils
+ git
+ gnugrep
+ gnused
+ nettools
+ openssh
+ socat
+ ]);
+ in
+ ''
+ mkdir -p $out/bin
+
+ sed \
+ 's,^main() {$,&\n export PATH=${path} GIT_SSL_CAINFO=${ca-bundle},' \
+ < ./retiolum/scripts/github_hosts_sync/hosts-sync \
+ > $out/bin/github-hosts-sync
+
+ chmod +x $out/bin/github-hosts-sync
+ '';
+}
diff --git a/krebs/5pkgs/simple/go-shortener/default.nix b/krebs/5pkgs/simple/go-shortener/default.nix
new file mode 100644
index 000000000..996f7072a
--- /dev/null
+++ b/krebs/5pkgs/simple/go-shortener/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, makeWrapper, callPackage, lib, buildEnv, fetchgit, nodePackages, nodejs }:
+
+with lib;
+
+let
+ np = (callPackage <nixpkgs/pkgs/top-level/node-packages.nix>) {
+ generated = ./packages.nix;
+ self = np;
+ };
+
+ node_env = buildEnv {
+ name = "node_env";
+ paths = [
+ np.redis
+ np."formidable"
+ ];
+ pathsToLink = [ "/lib" ];
+ ignoreCollisions = true;
+ };
+
+in np.buildNodePackage {
+ name = "go-shortener";
+
+ src = fetchgit {
+ url = "http://cgit.lassul.us/go/";
+ rev = "05d02740e0adbb36cc461323647f0c1e7f493156";
+ sha256 = "6015c9a93317375ae8099c7ab982df0aa93a59ec2b48972e253887bb6ca0004f";
+ };
+
+ phases = [
+ "unpackPhase"
+ "installPhase"
+ ];
+
+ deps = (filter (v: nixType v == "derivation") (attrValues np));
+
+ buildInputs = [
+ nodejs
+ makeWrapper
+ ];
+
+ installPhase = ''
+ mkdir -p $out/bin
+
+ cp index.js $out/
+ cat > $out/go << EOF
+ ${nodejs}/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
+ '';
+
+}
diff --git a/krebs/5pkgs/simple/go-shortener/packages.nix b/krebs/5pkgs/simple/go-shortener/packages.nix
new file mode 100644
index 000000000..9acfd7658
--- /dev/null
+++ b/krebs/5pkgs/simple/go-shortener/packages.nix
@@ -0,0 +1,44 @@
+{ 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/goify/default.nix b/krebs/5pkgs/simple/goify/default.nix
new file mode 100644
index 000000000..9c44aaeeb
--- /dev/null
+++ b/krebs/5pkgs/simple/goify/default.nix
@@ -0,0 +1,18 @@
+{ pkgs, ... }:
+
+pkgs.writeBashBin "goify" ''
+ set -euf
+
+ GO_HOST=''${GO_HOST:-go}
+
+ while read line; do
+ echo "$line" | sed 's|https\?://\S*|\n&\n|g' | while read word; do
+ if echo "$word" | grep -q '^https\?:'; then
+ ${pkgs.curl}/bin/curl -Ss -F uri="$word" http://"$GO_HOST" \
+ | tr -d '\r'
+ else
+ echo "$word"
+ fi
+ done | grep . | tr '\n' ' '; echo
+ done
+''
diff --git a/krebs/5pkgs/simple/hashPassword/default.nix b/krebs/5pkgs/simple/hashPassword/default.nix
new file mode 100644
index 000000000..3da65ad79
--- /dev/null
+++ b/krebs/5pkgs/simple/hashPassword/default.nix
@@ -0,0 +1,15 @@
+{ lib, pkgs, ... }:
+
+pkgs.writeDashBin "hashPassword" ''
+ # usage: hashPassword
+ set -euf
+
+ export PATH=${lib.makeBinPath (with pkgs; [
+ coreutils
+ mkpasswd
+ openssl
+ ])}
+
+ salt=$(openssl rand -base64 16 | tr -d '+=' | head -c 16)
+ exec mkpasswd -m sha-512 -S "$salt"
+''
diff --git a/krebs/5pkgs/simple/htgen/default.nix b/krebs/5pkgs/simple/htgen/default.nix
new file mode 100644
index 000000000..0fca8bdf2
--- /dev/null
+++ b/krebs/5pkgs/simple/htgen/default.nix
@@ -0,0 +1,28 @@
+{ coreutils, dash, fetchgit, gnused, stdenv, ucspi-tcp }:
+with import <stockholm/lib>;
+let
+ version = "1.2.2";
+in stdenv.mkDerivation {
+ name = "htgen-${version}";
+
+ src = fetchgit {
+ url = "http://cgit.krebsco.de/htgen";
+ rev = "refs/tags/v${version}";
+ sha256 = "0a8vn35vq6pxgk6d3d2cjp0vdxzq9nqf0zgkvnd6668v4cmdf91b";
+ };
+
+ installPhase = ''
+ mkdir -p $out/bin
+ {
+ echo '#! ${dash}/bin/dash'
+ echo 'export PATH=${makeBinPath [
+ coreutils
+ gnused
+ ucspi-tcp
+ ]}''${PATH+":$PATH"}'
+ sed 's:^Server=htgen$:&/${version}:' htgen
+ } > $out/bin/htgen
+ chmod +x $out/bin/htgen
+ cp -r examples $out
+ '';
+}
diff --git a/krebs/5pkgs/simple/irc-announce/default.nix b/krebs/5pkgs/simple/irc-announce/default.nix
new file mode 100644
index 000000000..e1f4919d5
--- /dev/null
+++ b/krebs/5pkgs/simple/irc-announce/default.nix
@@ -0,0 +1,66 @@
+{ pkgs, lib, ... }:
+
+with lib;
+
+pkgs.writeDashBin "irc-announce" ''
+ set -euf
+
+ export PATH=${makeSearchPath "bin" (with pkgs; [
+ coreutils
+ gawk
+ gnused
+ netcat
+ nettools
+ ])}
+
+ IRC_SERVER=$1
+ IRC_PORT=$2
+ IRC_NICK=$3$$
+ IRC_CHANNEL=$4
+ message=$5
+
+ export IRC_CHANNEL # for privmsg_cat
+
+ # echo2 and cat2 are used output to both, stdout and stderr
+ # This is used to see what we send to the irc server. (debug output)
+ echo2() { echo "$*"; echo "$*" >&2; }
+ cat2() { tee /dev/stderr; }
+
+ # privmsg_cat transforms stdin to a privmsg
+ privmsg_cat() { awk '{ print "PRIVMSG "ENVIRON["IRC_CHANNEL"]" :"$0 }'; }
+
+ # ircin is used to feed the output of netcat back to the "irc client"
+ # so we can implement expect-like behavior with sed^_^
+ # XXX mkselfdestructingtmpfifo would be nice instead of this cruft
+ tmpdir=$(mktemp --tmpdir -d irc-announce_XXXXXXXX)
+ cd "$tmpdir"
+ mkfifo ircin
+ trap "
+ rm ircin
+ cd '$OLDPWD'
+ rmdir '$tmpdir'
+ trap - EXIT INT QUIT
+ " EXIT INT QUIT
+
+ {
+ echo2 "USER $LOGNAME 0 * :$LOGNAME@$(hostname)"
+ echo2 "NICK $IRC_NICK"
+
+ # wait for MODE message
+ sed -n '/^:[^ ]* MODE /q'
+
+ echo2 "JOIN $IRC_CHANNEL"
+
+ printf '%s' "$message" \
+ | privmsg_cat \
+ | cat2
+
+ echo2 "PART $IRC_CHANNEL"
+
+ # wait for PART confirmation
+ sed -n '/:'"$IRC_NICK"'![^ ]* PART /q'
+
+ echo2 'QUIT :Gone to have lunch'
+ } < ircin \
+ | nc "$IRC_SERVER" "$IRC_PORT" | tee -a ircin
+''
diff --git a/krebs/5pkgs/simple/kpaste/default.nix b/krebs/5pkgs/simple/kpaste/default.nix
new file mode 100644
index 000000000..d6823d584
--- /dev/null
+++ b/krebs/5pkgs/simple/kpaste/default.nix
@@ -0,0 +1,5 @@
+{ curl, writeDashBin }:
+
+writeDashBin "kpaste" ''
+ exec ${curl}/bin/curl -sS http://p.r --data-binary @-
+''
diff --git a/krebs/5pkgs/simple/krebspaste/default.nix b/krebs/5pkgs/simple/krebspaste/default.nix
new file mode 100644
index 000000000..31ad12780
--- /dev/null
+++ b/krebs/5pkgs/simple/krebspaste/default.nix
@@ -0,0 +1,6 @@
+{ writeDashBin, bepasty-client-cli }:
+
+# TODO use `execve` instead?
+writeDashBin "krebspaste" ''
+ exec ${bepasty-client-cli}/bin/bepasty-cli -L 1m --url http://paste.r "$@" | sed '$ s/$/\/+inline/g'
+''
diff --git a/krebs/5pkgs/simple/krebszones/default.nix b/krebs/5pkgs/simple/krebszones/default.nix
new file mode 100644
index 000000000..9230192bd
--- /dev/null
+++ b/krebs/5pkgs/simple/krebszones/default.nix
@@ -0,0 +1,25 @@
+{ lib, pkgs,python3Packages,fetchurl, ... }:
+
+# TODO: Prepare a diff of future and current
+## ovh-zone export krebsco.de --config ~/secrets/krebs/cfg.json |sed 's/[ ]\+/ /g' | sort current
+## sed 's/[ ]\+/ /g'/etc/zones/krebsco.de | sort > future
+## diff future.sorted current.sorted
+
+python3Packages.buildPythonPackage rec {
+ name = "krebszones-${version}";
+ version = "0.4.4";
+ propagatedBuildInputs = with pkgs.python3Packages;[
+ d2to1 # for setup to work
+ ovh
+ docopt
+ ];
+ src = fetchurl {
+ url = "https://pypi.python.org/packages/source/k/krebszones/krebszones-${version}.tar.gz";
+ sha256 = "1bzfc2b9468769j1yj93j12zdlccqbjiqfhql2larximh491sg4d";
+ };
+ meta = {
+ homepage = http://krebsco.de/;
+ description = "OVH Zone Upload";
+ license = lib.licenses.wtfpl;
+ };
+}
diff --git a/krebs/5pkgs/simple/logf/default.nix b/krebs/5pkgs/simple/logf/default.nix
new file mode 100644
index 000000000..ac95acb33
--- /dev/null
+++ b/krebs/5pkgs/simple/logf/default.nix
@@ -0,0 +1,114 @@
+{ lib, pkgs, ... }:
+
+with import <stockholm/lib>;
+
+let
+ default-host-colors = pkgs.writeJSON "logf.default-host-colors.json" {
+ };
+ default-prio-colors = pkgs.writeJSON "logf.default-prio-colors.json" {
+ "0" = 196; # emerg
+ "1" = 160; # alert
+ "2" = 124; # crit
+ "3" = 009; # err
+ "4" = 011; # warning
+ "5" = 255; # notice
+ "6" = 250; # info
+ "7" = 139; # debug
+ "-" = 005; # undefined priority
+ };
+ default-urgent = pkgs.writeJSON "logf.default-urgent.json" [
+ ];
+in
+
+pkgs.writeDashBin "logf" ''
+ export LOGF_HOST_COLORS LOGF_PRIO_COLORS LOGF_URGENT
+ LOGF_HOST_COLORS=$(cat "''${LOGF_HOST_COLORS-${default-host-colors}}")
+ LOGF_PRIO_COLORS=$(cat "''${LOGF_PRIO_COLORS-${default-prio-colors}}")
+ LOGF_URGENT=$(cat "''${LOGF_URGENT-${default-urgent}}")
+ printf '%s\0' "$@" \
+ | ${pkgs.findutils}/bin/xargs -0 -P 0 -n 1 ${pkgs.writeDash "logf-remote" ''
+ target=$1
+ target_host=$(echo "$1" | sed 's/^.*@//;s/\..*//')
+ exec 3>&1
+ 2>&1 1>&3 ssh "$target" -T \
+ -o PreferredAuthentications=publickey \
+ -o StrictHostKeyChecking=yes \
+ exec journalctl -af -n 0 -o json \
+ | stdbuf -oL jq -Rcf ${pkgs.writeJq "logf-remote-error.jq" ''
+ {
+ PRIORITY: "4",
+ MESSAGE: .,
+ SYSLOG_IDENTIFIER: env.target_host,
+ }
+ ''}
+ sleep 10m
+ exec "$0" "$@"
+ ''} \
+ | ${pkgs.jq}/bin/jq -Rrf ${pkgs.writeJq "logf-filter.jq" ''
+ (env.LOGF_HOST_COLORS | fromjson) as $host_colors |
+ (env.LOGF_PRIO_COLORS | fromjson) as $prio_colors |
+ (env.LOGF_URGENT | fromjson | map("(\(.))") | join("|"))
+ as $urgent_regex |
+
+ def when(c; f): if c then f else . end;
+
+ # anaphoric gsub
+ def agsub(re; f):
+ # Don't try empty regex: https://github.com/stedolan/jq/issues/1206
+ when(re != ""; gsub("(?<it>\(re))"; .it | f));
+
+ # :: [int] -> sgr
+ def sgr: "\u001b[\(map(tostring) | join(";"))m";
+
+ # :: sgr
+ def rst: [] | sgr;
+
+ # :: int -> sgr
+ def fg(i): [38,5,i]|sgr;
+ # TODO def fg(r;g;b): [38,2,r,g,b]|sgr;
+ # http://cvs.schmorp.de/rxvt-unicode/src/command.C?revision=1.570&view=markup&sortby=log&sortdir=down
+
+ # (sgr; sgr) | (null; any) :: str -> str
+ def col(a; b): when(a != null; a + . + b);
+ def col(a): col(a; rst);
+
+
+ def p_time:
+ ._SOURCE_REALTIME_TIMESTAMP
+ | if . != null then . | fromjson | . / 1000000 else now end
+ | gmtime
+ | todateiso8601
+ | col(fg(237));
+
+ def p_host:
+ ._HOSTNAME
+ | if . != null then . else "-" end
+ | col($host_colors[.]|when(. != null; fg(.)));
+
+ def p_ident:
+ if .SYSLOG_IDENTIFIER != null then .SYSLOG_IDENTIFIER
+ else ._COMM end
+ | col(fg(244));
+
+ def p_message:
+ fg($prio_colors[if has("PRIORITY") then .PRIORITY else "-" end])
+ as $prio_c |
+ .MESSAGE
+ | sub("\r$"; "")
+ | agsub($urgent_regex; "\(.)\u0007" | col(fg(219); $prio_c))
+ | col($prio_c);
+
+ try fromjson catch {
+ _SOURCE_REALTIME_TIMESTAMP: now | tostring | sub("[.]"; ""),
+ SYSLOG_IDENTIFIER: "logf/journalctl",
+ MESSAGE: .,
+ } |
+
+ [ p_time
+ , p_host
+ , p_ident
+ , p_message
+ ]
+ | join(" ")
+ ''}
+''
diff --git a/krebs/5pkgs/simple/much/cabal.nix b/krebs/5pkgs/simple/much/cabal.nix
new file mode 100644
index 000000000..09bc7b5df
--- /dev/null
+++ b/krebs/5pkgs/simple/much/cabal.nix
@@ -0,0 +1,28 @@
+{ mkDerivation, aeson, attoparsec, base, base64-bytestring
+, blaze-builder, blessings, bytestring, case-insensitive
+, containers, deepseq, directory, docopt, email-header, fetchgit
+, filepath, friendly-time, hyphenation, linebreak, old-locale
+, process, random, rosezipper, safe, scanner, split, stdenv
+, terminal-size, text, time, transformers, transformers-compat
+, unix, vector
+}:
+mkDerivation {
+ pname = "much";
+ version = "1.1.0";
+ src = fetchgit {
+ url = "http://cgit.ni.krebsco.de/much";
+ sha256 = "1325554zymr1dd0clj8c5ygl70c791csvs0hz33jcfr6b8wysdrl";
+ rev = "dfec37d848e11c00d9b7f03295af1fc7b0e83ef5";
+ };
+ isLibrary = false;
+ isExecutable = true;
+ executableHaskellDepends = [
+ aeson attoparsec base base64-bytestring blaze-builder blessings
+ bytestring case-insensitive containers deepseq directory docopt
+ email-header filepath friendly-time hyphenation linebreak
+ old-locale process random rosezipper safe scanner split
+ terminal-size text time transformers transformers-compat unix
+ vector
+ ];
+ license = stdenv.lib.licenses.mit;
+}
diff --git a/krebs/5pkgs/simple/much/default.nix b/krebs/5pkgs/simple/much/default.nix
new file mode 100644
index 000000000..cf55eb537
--- /dev/null
+++ b/krebs/5pkgs/simple/much/default.nix
@@ -0,0 +1,3 @@
+{ haskellPackages, ... }:
+
+haskellPackages.callPackage ./cabal.nix {}
diff --git a/krebs/5pkgs/simple/netcup/default.nix b/krebs/5pkgs/simple/netcup/default.nix
new file mode 100644
index 000000000..d1f46299d
--- /dev/null
+++ b/krebs/5pkgs/simple/netcup/default.nix
@@ -0,0 +1,32 @@
+{ coreutils, curl, fetchgit, gawk, gnugrep, gnused, jq, stdenv, w3m, ... }:
+with import <stockholm/lib>;
+let
+ readJSON = path: fromJSON (readFile path);
+ sed.escape = replaceChars ["/"] ["\\/"]; # close enough
+ PATH = makeBinPath [
+ coreutils
+ curl
+ gawk
+ gnugrep
+ gnused
+ jq
+ w3m
+ ];
+in
+stdenv.mkDerivation {
+ name = "netcup-1.0.0";
+ src = fetchgit {
+ url = "http://cgit.ni.krebsco.de/netcup";
+ rev = "refs/tags/v1.0.0";
+ sha256 = "1rn7bncfhjw0bqjbvj38m7lks4nyf5qcvkj9dg0zr99ba6dylzx5";
+ };
+ phases = [ "unpackPhase" "patchPhase" "installPhase" ];
+ patchPhase = ''
+ path=${shell.escape (sed.escape PATH)}
+ sed -i "1s/.*/&\nPATH=$path/" vcp
+ '';
+ installPhase = ''
+ mkdir -p $out/bin
+ cp vcp $out/bin
+ '';
+}
diff --git a/krebs/5pkgs/simple/newsbot-js/default.nix b/krebs/5pkgs/simple/newsbot-js/default.nix
new file mode 100644
index 000000000..b52454ca4
--- /dev/null
+++ b/krebs/5pkgs/simple/newsbot-js/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, makeWrapper, callPackage, lib, buildEnv, fetchgit, nodePackages, nodejs }:
+
+with lib;
+
+let
+ np = (callPackage <nixpkgs/pkgs/top-level/node-packages.nix>) {
+ generated = ./packages.nix;
+ self = np;
+ };
+
+ node_env = buildEnv {
+ name = "node_env";
+ paths = [
+ np.feedparser
+ np.form-data
+ np.irc
+ np.request
+ np.shell-quote
+ ];
+ pathsToLink = [ "/lib" ];
+ ignoreCollisions = true;
+ };
+
+in np.buildNodePackage {
+ name = "newsbot-js";
+
+ src = fetchgit {
+ url = "http://cgit.prism/newsbot-js/";
+ rev = "09e01639be4ea9691cf5b33f7d9057b68ac98079";
+ sha256 = "28ffbed66c2efcd194c47823c7d5d5533c80852fc0cf9d9d4ee609c71d50c142";
+ };
+
+ phases = [
+ "unpackPhase"
+ "installPhase"
+ ];
+
+ deps = (filter (v: nixType v == "derivation") (attrValues np));
+
+ buildInputs = [
+ nodejs
+ makeWrapper
+ ];
+
+ installPhase = ''
+ mkdir -p $out/bin
+
+ cp newsbot.js $out/
+ cat > $out/newsbot << EOF
+ ${nodejs}/bin/node $out/newsbot.js
+ EOF
+ chmod +x $out/newsbot
+
+ wrapProgram $out/newsbot \
+ --prefix NODE_PATH : ${node_env}/lib/node_modules
+
+ ln -s $out/newsbot /$out/bin/newsbot
+ '';
+
+}
diff --git a/krebs/5pkgs/simple/newsbot-js/packages.nix b/krebs/5pkgs/simple/newsbot-js/packages.nix
new file mode 100644
index 000000000..62921cb8f
--- /dev/null
+++ b/krebs/5pkgs/simple/newsbot-js/packages.nix
@@ -0,0 +1,1747 @@
+{ 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/noVNC/default.nix b/krebs/5pkgs/simple/noVNC/default.nix
new file mode 100644
index 000000000..45c3afb3a
--- /dev/null
+++ b/krebs/5pkgs/simple/noVNC/default.nix
@@ -0,0 +1,21 @@
+{ fetchgit, lib, stdenv, ... }:
+with builtins;
+with lib;
+stdenv.mkDerivation rec {
+ name = "${baseNameOf src.name}-${removePrefix "refs/tags/v" src.rev}";
+
+ src = fetchgit {
+ url = https://github.com/kanaka/noVNC;
+ rev = "refs/tags/v0.5.1";
+ sha256 = "1vckvvfcawgfqmx415r5rnl6k2alx53jbqmsj49kxpbdvvxpb49d";
+ };
+
+ phases = [
+ "unpackPhase"
+ "installPhase"
+ ];
+
+ installPhase = ''
+ cp -R . $out
+ '';
+}
diff --git a/krebs/5pkgs/simple/painload/default.nix b/krebs/5pkgs/simple/painload/default.nix
new file mode 100644
index 000000000..136ec4394
--- /dev/null
+++ b/krebs/5pkgs/simple/painload/default.nix
@@ -0,0 +1,7 @@
+{ fetchgit, ... }:
+
+fetchgit {
+ url = https://github.com/krebscode/painload;
+ rev = "c113487f73713a03b1a139b22bb34b86234d0495";
+ sha256 = "1irxklnmvm8wsa70ypjahkr8rfqq7357vcy8r0x1sfncs1hy6gr6";
+}
diff --git a/krebs/5pkgs/simple/passwdqc-utils/default.nix b/krebs/5pkgs/simple/passwdqc-utils/default.nix
new file mode 100644
index 000000000..53e7f5482
--- /dev/null
+++ b/krebs/5pkgs/simple/passwdqc-utils/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, pam,
+ fetchurl, lib,
+ wordset-file ? null, # set your own wordset-file
+ ... }:
+
+stdenv.mkDerivation rec {
+ name = "passwdqc-utils-${version}";
+ version = "1.3.0";
+ buildInputs = [ pam ];
+
+ src = fetchurl {
+ url = "http://www.openwall.com/passwdqc/passwdqc-${version}.tar.gz";
+ sha256 = "0l3zbrp4pvah0dz33m48aqlz9nx663cc1fqhnlwr0p853b10la93";
+ };
+
+ buildTargets = "utils";
+ installFlags= [ "BINDIR=$(out)/bin"
+ "CONFDIR=$(out)/etc"
+ "SHARED_LIBDIR=$(out)/lib"
+ "DEVEL_LIBDIR=$(out)/lib"
+ "SECUREDIR=$(out)/lib/security"
+ "INCLUDEDIR=$(out)/include"
+ "MANDIR=$(out)/man" ];
+
+ patchPhase = lib.optionalString (wordset-file != null) ''
+ cp -f ${wordset-file} wordset_4k.c
+ '';
+
+ installTargets = "install_lib install_utils";
+
+ meta = {
+ description = "passwdqc utils (pwqgen,pwqcheck) and library";
+ license = stdenv.lib.licenses.bsd3;
+ maintainers = [ stdenv.lib.maintainers.makefu ];
+ patforms = stdenv.lib.platforms.linux; # more installFlags must be set for Darwin,Solaris
+ };
+}
diff --git a/krebs/5pkgs/simple/populate/default.nix b/krebs/5pkgs/simple/populate/default.nix
new file mode 100644
index 000000000..3ec432229
--- /dev/null
+++ b/krebs/5pkgs/simple/populate/default.nix
@@ -0,0 +1,36 @@
+{ coreutils, fetchgit, git, jq, openssh, proot, rsync, stdenv, ... }:
+
+let
+ PATH = stdenv.lib.makeBinPath [
+ coreutils
+ git
+ jq
+ openssh
+ proot
+ rsync
+ ];
+in
+
+stdenv.mkDerivation rec {
+ name = "populate";
+ version = "1.2.0";
+
+ src = fetchgit {
+ url = http://cgit.ni.krebsco.de/populate;
+ rev = "refs/tags/v${version}";
+ sha256 = "0q3110hkkxn9bc3a63xbx1hyd1fpzz4wrck4lng3j5a9i1y1jm07";
+ };
+
+ phases = [
+ "unpackPhase"
+ "installPhase"
+ ];
+
+ installPhase = ''
+ sed \
+ '1s,.*,&\nPATH=${PATH},' \
+ -i bin/populate
+
+ cp -r . $out
+ '';
+}
diff --git a/krebs/5pkgs/simple/posix-array/default.nix b/krebs/5pkgs/simple/posix-array/default.nix
new file mode 100644
index 000000000..cfcdb29a7
--- /dev/null
+++ b/krebs/5pkgs/simple/posix-array/default.nix
@@ -0,0 +1,30 @@
+{ fetchgit, lib, stdenv, ... }:
+
+stdenv.mkDerivation rec {
+ name = "posix-array-${version}";
+ version = "1.0.0";
+
+ src = fetchgit {
+ url = https://github.com/makefu/array.git;
+ rev = "refs/tags/${version}";
+ sha256 = "0yzwlhdg1rgc4p64ny7gj30l7z6vikhskhppsa2qj7s9gm2gz938";
+ };
+
+ phases = [
+ "unpackPhase"
+ "installPhase"
+ ];
+
+ installPhase = ''
+ mkdir -p $out/bin
+ cp -a ./array $out/bin
+ '';
+
+ meta = {
+ description = "POSIX-compliant array implementation";
+ url = https://github.com/makefu/array;
+ license = lib.licenses.wtfpl;
+ platforms = lib.platforms.unix;
+ maintainers = with lib.maintainers; [ makefu ];
+ };
+}
diff --git a/krebs/5pkgs/simple/pssh/default.nix b/krebs/5pkgs/simple/pssh/default.nix
new file mode 100644
index 000000000..2676af0cf
--- /dev/null
+++ b/krebs/5pkgs/simple/pssh/default.nix
@@ -0,0 +1,36 @@
+{ writeDashBin }:
+
+writeDashBin "pssh" ''
+ set -efu
+ case ''${1-} in
+
+ # TODO create plog with -o json | jq ... | map date
+
+ # usage: pssh {-j,--journal} host...
+ # Follow journal at each host.
+ -j|--journal)
+ shift
+ "$0" journalctl -n0 -ocat --follow --all ::: "$@" \
+ | while read line; do
+ printf '%s %s\n' "$(date --rfc-3339=s)" "$line"
+ done
+ ;;
+
+ -*)
+ echo $0: unknown option: $1 >&2
+ exit 1
+ ;;
+
+ # usage: pssh command [arg...] ::: host...
+ # Run command at each host.
+ *)
+ exec parallel \
+ --line-buffer \
+ -j0 \
+ --no-notice \
+ --tagstring {} \
+ ssh -T {} "$@"
+ ;;
+
+ esac
+''
diff --git a/krebs/5pkgs/simple/push/default.nix b/krebs/5pkgs/simple/push/default.nix
new file mode 100644
index 000000000..2e0291aac
--- /dev/null
+++ b/krebs/5pkgs/simple/push/default.nix
@@ -0,0 +1,49 @@
+{ fetchgit, lib, stdenv
+, coreutils
+, git
+, gnumake
+, gnused
+, jq
+, nix
+, openssh
+, parallel
+, ... }:
+
+stdenv.mkDerivation {
+ name = "push-1.1.2";
+
+ src = fetchgit {
+ url = http://cgit.ni.krebsco.de/push;
+ rev = "da5b3a4b05ef822cc41d36b6cc2071a2e78506d4";
+ sha256 = "0gfxz207lm11g77rw02jcqpvzhx07j9hzgjgscbmslzl5r8icd6g";
+ };
+
+ phases = [
+ "unpackPhase"
+ "installPhase"
+ ];
+
+ installPhase =
+ let
+ path = lib.makeBinPath [
+ coreutils
+ git
+ gnumake
+ gnused
+ jq
+ nix
+ openssh
+ parallel
+ ];
+ in
+ ''
+ mkdir -p $out/bin
+
+ sed \
+ '1s,.*,&\nPATH=${path},' \
+ < ./push \
+ > $out/bin/push
+
+ chmod +x $out/bin/push
+ '';
+}
diff --git a/krebs/5pkgs/simple/realwallpaper/default.nix b/krebs/5pkgs/simple/realwallpaper/default.nix
new file mode 100644
index 000000000..15cc277a5
--- /dev/null
+++ b/krebs/5pkgs/simple/realwallpaper/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchgit, xplanet, imagemagick, curl, file }:
+
+stdenv.mkDerivation {
+ name = "realwallpaper";
+
+ src = fetchgit {
+ url = https://github.com/Lassulus/realwallpaper;
+ rev = "e0563289c2ab592b669ce4549fc40130246e9d79";
+ sha256 = "1zgk8ips2d686216h203w62wrw7zy9z0lrndx9f8z6f1vpvjcmqc";
+ };
+
+ phases = [
+ "unpackPhase"
+ "installPhase"
+ ];
+
+ buildInputs = [
+ ];
+
+ installPhase = ''
+ mkdir -p $out
+ cp realwallpaper.sh $out/realwallpaper.sh
+ '';
+}
diff --git a/krebs/5pkgs/simple/repo-sync/default.nix b/krebs/5pkgs/simple/repo-sync/default.nix
new file mode 100644
index 000000000..7cba87b09
--- /dev/null
+++ b/krebs/5pkgs/simple/repo-sync/default.nix
@@ -0,0 +1,21 @@
+{ lib, pkgs, python3Packages, fetchurl, ... }:
+
+with python3Packages; buildPythonPackage rec {
+ name = "repo-sync-${version}";
+ version = "0.2.6";
+ disabled = isPy26 || isPy27;
+ propagatedBuildInputs = [
+ docopt
+ GitPython
+ pkgs.git
+ ];
+ src = fetchurl {
+ url = "https://pypi.python.org/packages/source/r/repo-sync/repo-sync-${version}.tar.gz";
+ sha256 = "1hqa9qw9qg7mxgniqzys9szycs05llg4yik8a9wz94a437zzarsk";
+ };
+ meta = {
+ homepage = http://github.com/makefu/repo-sync;
+ description = "Sync remotes to other remotes.";
+ license = lib.licenses.mit;
+ };
+}
diff --git a/krebs/5pkgs/simple/retiolum-bootstrap/default.nix b/krebs/5pkgs/simple/retiolum-bootstrap/default.nix
new file mode 100644
index 000000000..331b1cb7f
--- /dev/null
+++ b/krebs/5pkgs/simple/retiolum-bootstrap/default.nix
@@ -0,0 +1,29 @@
+{ stdenv,lib,fetchurl, ... }:
+with lib;
+stdenv.mkDerivation rec {
+ name = "retiolum-bootstrap";
+ version = "4.2.3";
+
+
+ src = fetchurl {
+ url = https://raw.githubusercontent.com/krebscode/painload/master/retiolum/scripts/tinc_setup/new_install.sh;
+ sha256 = "03kmil8q2xm3rdm2jxyah7vww84pw6w01d0c3siid9zpn2j7la9s";
+ };
+
+ phases = [
+ "installPhase"
+ ];
+
+ installPhase = ''
+ mkdir -p "$out"
+ cp -a ${src} $out/retiolum.sh
+ '';
+
+ meta = {
+ description = "Retiolum boostrap scripts";
+ url = https://github.com/krebscode/painload;
+ license = licenses.wtfpl;
+ platforms = platforms.unix;
+ maintainers = with maintainers; [ makefu ];
+ };
+}
diff --git a/krebs/5pkgs/simple/rutorrent/default.nix b/krebs/5pkgs/simple/rutorrent/default.nix
new file mode 100644
index 000000000..1084e7ce7
--- /dev/null
+++ b/krebs/5pkgs/simple/rutorrent/default.nix
@@ -0,0 +1,15 @@
+{ pkgs, ... }:
+pkgs.stdenv.mkDerivation {
+ name = "rutorrent-src_2016-12-09";
+ src = pkgs.fetchFromGitHub {
+ owner = "Novik";
+ repo = "rutorrent";
+ rev = "580bba8c538b55c1f75f3ad65310ff4ff2a153f7";
+ sha256 = "1d9lgrzipy58dnx88z393p152kx6lki0x4aw40k8w9awsci4cx7p";
+ };
+
+ phases = [ "installPhase" ];
+ installPhase = ''
+ cp -r $src $out
+ '';
+}
diff --git a/krebs/5pkgs/simple/tarantool/default.nix b/krebs/5pkgs/simple/tarantool/default.nix
new file mode 100644
index 000000000..9e22fd4f3
--- /dev/null
+++ b/krebs/5pkgs/simple/tarantool/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchgit, cmake, ncurses, openssl, readline, ... }:
+
+stdenv.mkDerivation rec {
+ name = "tarantool-1.7.1-164-g0fd0239";
+ src = fetchgit {
+ url = https://github.com/tarantool/tarantool;
+ rev = builtins.elemAt (builtins.match ".*-g([0-9a-f]+)" name) 0;
+ sha256 = "1jnaiizbl9j4a8vsihqx75iqa9bkh1kpwsyrgmim8ikiyzfw54dz";
+ fetchSubmodules = true;
+ };
+ buildInputs = [
+ cmake
+ ncurses
+ openssl
+ readline
+ ];
+ preConfigure = ''
+ echo ${(builtins.parseDrvName name).version} > VERSION
+ sed -i 's/NAMES termcap/NAMES ncurses/' cmake/FindTermcap.cmake
+ '';
+}
diff --git a/krebs/5pkgs/simple/tinc_graphs/default.nix b/krebs/5pkgs/simple/tinc_graphs/default.nix
new file mode 100644
index 000000000..20bbc53ba
--- /dev/null
+++ b/krebs/5pkgs/simple/tinc_graphs/default.nix
@@ -0,0 +1,26 @@
+{stdenv,fetchurl,pkgs,python3Packages, ... }:
+
+python3Packages.buildPythonPackage rec {
+ name = "tinc_graphs-${version}";
+ version = "0.3.10";
+ propagatedBuildInputs = with pkgs;[
+ python3Packages.pygeoip
+ ## ${geolite-legacy}/share/GeoIP/GeoIPCity.dat
+ ];
+ src = fetchurl {
+ url = "mirror://pypi/t/tinc_graphs/${name}.tar.gz";
+ sha256 = "0f4cvb9424fhfmc0hbzmynzh9528fyhx00ayq1nbpgd1p89yw7mc";
+ };
+ preFixup = with pkgs;''
+ wrapProgram $out/bin/build-graphs --prefix PATH : "$out/bin"
+ wrapProgram $out/bin/all-the-graphs --prefix PATH : "${imagemagick}/bin:${graphviz}/bin:$out/bin"
+ wrapProgram $out/bin/tinc-stats2json --prefix PATH : "${tinc}/bin"
+ '';
+
+ meta = {
+ homepage = http://krebsco.de/;
+ description = "Create Graphs from Tinc Stats";
+ license = stdenv.lib.licenses.wtfpl;
+ };
+}
+
diff --git a/krebs/5pkgs/simple/translate-shell/default.nix b/krebs/5pkgs/simple/translate-shell/default.nix
new file mode 100644
index 000000000..00ab226e5
--- /dev/null
+++ b/krebs/5pkgs/simple/translate-shell/default.nix
@@ -0,0 +1,43 @@
+{stdenv, fetchurl,pkgs,... }:
+let
+ s =
+ rec {
+ baseName="translate-shell";
+ version="0.9.0.9";
+ name="${baseName}-${version}";
+ url=https://github.com/soimort/translate-shell/archive/v0.9.0.9.tar.gz;
+ sha256="1269j4yr9dr1d8c5kmysbzfplbgdg8apqnzs5w57d29sd7gz2i34";
+ };
+ searchpath = with pkgs; stdenv.lib.makeSearchPath "bin" [
+ fribidi
+ gawk
+ bash
+ curl
+ less
+ ];
+ buildInputs = [
+ pkgs.makeWrapper
+ ];
+in
+stdenv.mkDerivation {
+ inherit (s) name version;
+ inherit buildInputs;
+ src = fetchurl {
+ inherit (s) url sha256;
+ };
+ # TODO: maybe mplayer
+ installPhase = ''
+ mkdir -p $out/bin
+ make PREFIX=$out install
+ wrapProgram $out/bin/trans --suffix PATH : "${searchpath}"
+ '';
+
+ meta = {
+ inherit (s) version;
+ description = ''translate using google api'';
+ license = stdenv.lib.licenses.free;
+ maintainers = [stdenv.lib.maintainers.makefu];
+ platforms = stdenv.lib.platforms.linux ;
+ };
+}
+
diff --git a/krebs/5pkgs/simple/treq/default.nix b/krebs/5pkgs/simple/treq/default.nix
new file mode 100644
index 000000000..20387b9cb
--- /dev/null
+++ b/krebs/5pkgs/simple/treq/default.nix
@@ -0,0 +1,17 @@
+{ stdenv, fetchurl, pythonPackages }:
+
+pythonPackages.buildPythonPackage rec {
+ name = "${pname}-${version}";
+ pname = "treq";
+ version = "15.1.0";
+ src = fetchurl {
+ url = "mirror://pypi/t/${pname}/${name}.tar.gz";
+ sha256= "425a47d5d52a993d51211028fb6ade252e5fbea094e878bb4b644096a7322de8";
+ };
+ propagatedBuildInputs = with pythonPackages; [
+ twisted
+ pyopenssl
+ requests2
+ service-identity
+ ];
+}
diff --git a/krebs/5pkgs/simple/untilport/default.nix b/krebs/5pkgs/simple/untilport/default.nix
new file mode 100644
index 000000000..61bcc2b89
--- /dev/null
+++ b/krebs/5pkgs/simple/untilport/default.nix
@@ -0,0 +1,18 @@
+{ pkgs, ... }:
+
+pkgs.writeDashBin "untilport" ''
+ set -euf
+
+ usage() {
+ echo 'untiport $target $port'
+ echo 'Sleeps until the destinated port is reachable.'
+ echo 'ex: untilport google.de 80 && echo "google is now reachable"'
+ }
+
+
+ if [ $# -ne 2 ]; then
+ usage
+ else
+ until ${pkgs.netcat-openbsd}/bin/nc -z "$@"; do sleep 1; done
+ fi
+''
diff --git a/krebs/5pkgs/simple/urlwatch/default.nix b/krebs/5pkgs/simple/urlwatch/default.nix
new file mode 100644
index 000000000..7ffbd8870
--- /dev/null
+++ b/krebs/5pkgs/simple/urlwatch/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, python3Packages }:
+
+python3Packages.buildPythonPackage rec {
+ name = "urlwatch-2.5";
+
+ src = fetchurl {
+ url = "https://thp.io/2008/urlwatch/${name}.tar.gz";
+ sha256 = "0qirpymdmpsx0klmhbx3icmiwpm6fx4wjma646gl9m90pifs8430";
+ };
+
+ propagatedBuildInputs = with python3Packages; [
+ keyring
+ minidb
+ pyyaml
+ requests2
+ ];
+
+ meta = {
+ description = "A tool for monitoring webpages for updates";
+ homepage = https://thp.io/2008/urlwatch/;
+ license = stdenv.lib.licenses.bsd3;
+ maintainers = [ stdenv.lib.maintainers.tv ];
+ };
+}
diff --git a/krebs/5pkgs/simple/weechat/default.nix b/krebs/5pkgs/simple/weechat/default.nix
new file mode 100644
index 000000000..c703ca8bf
--- /dev/null
+++ b/krebs/5pkgs/simple/weechat/default.nix
@@ -0,0 +1,80 @@
+{ stdenv, fetchurl, ncurses, openssl, aspell, gnutls
+, zlib, curl , pkgconfig, libgcrypt
+, cmake, makeWrapper, libiconv
+, asciidoctor # manpages
+, guileSupport ? true, guile
+, luaSupport ? true, lua5
+, perlSupport ? true, perl
+, pythonPackages
+, rubySupport ? true, ruby
+, tclSupport ? true, tcl
+, extraBuildInputs ? [] }:
+
+assert guileSupport -> guile != null;
+assert luaSupport -> lua5 != null;
+assert perlSupport -> perl != null;
+assert rubySupport -> ruby != null;
+assert tclSupport -> tcl != null;
+
+let
+ inherit (pythonPackages) python pycrypto pync;
+in
+
+stdenv.mkDerivation rec {
+ version = "1.8";
+ name = "weechat-${version}";
+
+ src = fetchurl {
+ url = "http://weechat.org/files/src/weechat-${version}.tar.bz2";
+ sha256 = "10km0437lg9ms6f16h20s89l2w9f9g597rykybxb16s95ql48z08";
+ };
+
+ outputs = [ "out" "doc" ];
+
+ enableParallelBuilding = true;
+ cmakeFlags = with stdenv.lib; [
+ "-DENABLE_MAN=ON"
+ "-DENABLE_DOC=ON"
+ ]
+ ++ optionals stdenv.isDarwin ["-DICONV_LIBRARY=${libiconv}/lib/libiconv.dylib" "-DCMAKE_FIND_FRAMEWORK=LAST"]
+ ++ optional (!guileSupport) "-DENABLE_GUILE=OFF"
+ ++ optional (!luaSupport) "-DENABLE_LUA=OFF"
+ ++ optional (!perlSupport) "-DENABLE_PERL=OFF"
+ ++ optional (!rubySupport) "-DENABLE_RUBY=OFF"
+ ++ optional (!tclSupport) "-DENABLE_TCL=OFF"
+ ;
+
+ buildInputs = with stdenv.lib; [
+ ncurses python openssl aspell gnutls zlib curl pkgconfig
+ libgcrypt pycrypto makeWrapper
+ cmake
+ asciidoctor
+ ]
+ ++ optional guileSupport guile
+ ++ optional luaSupport lua5
+ ++ optional perlSupport perl
+ ++ optional rubySupport ruby
+ ++ optional tclSupport tcl
+ ++ extraBuildInputs;
+
+ NIX_CFLAGS_COMPILE = "-I${python}/include/${python.libPrefix}"
+ # Fix '_res_9_init: undefined symbol' error
+ + (stdenv.lib.optionalString stdenv.isDarwin "-DBIND_8_COMPAT=1 -lresolv");
+
+ postInstall = with stdenv.lib; ''
+ NIX_PYTHONPATH="$out/lib/${python.libPrefix}/site-packages"
+ wrapProgram "$out/bin/weechat" \
+ ${optionalString perlSupport "--prefix PATH : ${perl}/bin"} \
+ --prefix PATH : ${pythonPackages.python}/bin \
+ --prefix PYTHONPATH : "$PYTHONPATH" \
+ --prefix PYTHONPATH : "$NIX_PYTHONPATH"
+ '';
+
+ meta = {
+ homepage = http://www.weechat.org/;
+ description = "A fast, light and extensible chat client";
+ license = stdenv.lib.licenses.gpl3;
+ maintainers = with stdenv.lib.maintainers; [ lovek323 garbas the-kenny ];
+ platforms = stdenv.lib.platforms.unix;
+ };
+}
diff --git a/krebs/5pkgs/simple/whatsupnix/default.nix b/krebs/5pkgs/simple/whatsupnix/default.nix
new file mode 100644
index 000000000..1a108c5e9
--- /dev/null
+++ b/krebs/5pkgs/simple/whatsupnix/default.nix
@@ -0,0 +1,15 @@
+{ bash, coreutils, gawk, nix, makeWrapper, stdenv }:
+
+stdenv.mkDerivation {
+ name = "whatsupnix";
+ phases = [ "installPhase" ];
+ nativeBuildInputs = [ makeWrapper ];
+ installPhase = ''
+ mkdir -p $out/bin
+ cat - ${./whatsupnix.bash} > $out/bin/whatsupnix <<\EOF
+ #! ${bash}/bin/bash
+ export PATH=${stdenv.lib.makeBinPath [ coreutils gawk nix ]}
+ EOF
+ chmod +x $out/bin/whatsupnix
+ '';
+}
diff --git a/krebs/5pkgs/simple/whatsupnix/whatsupnix.bash b/krebs/5pkgs/simple/whatsupnix/whatsupnix.bash
new file mode 100644
index 000000000..a19410055
--- /dev/null
+++ b/krebs/5pkgs/simple/whatsupnix/whatsupnix.bash
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+
+# Prints build logs for failed derivations in quiet build mode (-Q).
+# See https://github.com/NixOS/nix/issues/443
+#
+# Usage:
+#
+# set -o pipefail
+# nix-build ... -Q ... | whatsupnix
+#
+
+
+GAWK=${GAWK:-gawk}
+NIX_STORE=${NIX_STORE:-nix-store}
+
+broken=$(mktemp)
+trap 'rm -f -- "$broken"' EXIT
+
+exec >&2
+
+$GAWK -v broken="$broken" -f <(cat - <<- 'AWK'
+ match($0, /builder for .*(\/nix\/store\/.+\.drv).* failed/, m) {
+ print m[1] >> broken
+ }
+ { print $0 }
+AWK
+)
+
+export NIX_PAGER='' # for nix-store
+while read -r drv; do
+ title="** FAILED $drv LOG **"
+ frame=${title//?/*}
+
+ echo "$frame"
+ echo "$title"
+ echo "$frame"
+ echo
+
+ $NIX_STORE -l "$drv"
+
+ echo
+done < "$broken"
+
+exit 0
diff --git a/krebs/5pkgs/simple/with-tmpdir/default.nix b/krebs/5pkgs/simple/with-tmpdir/default.nix
new file mode 100644
index 000000000..9862671f8
--- /dev/null
+++ b/krebs/5pkgs/simple/with-tmpdir/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchgit, coreutils, dash, ... }:
+
+stdenv.mkDerivation {
+ name = "with-tmpdir-1";
+
+ src = fetchgit {
+ url = http://cgit.ni.krebsco.de/with-tmpdir;
+ rev = "3243c02ed8cd27a04c080bd39560204980f6c16a";
+ sha256 = "80ee6cafb2c337999ddcd1e41747d6256b7cfcea605358c2046eb7e3729555c6";
+ };
+
+ phases = [
+ "unpackPhase"
+ "installPhase"
+ ];
+
+ installPhase = ''
+ mkdir -p $out/bin
+
+ { echo '#! ${dash}/bin/dash'
+ echo 'OLDPATH=$PATH'
+ echo 'PATH=${coreutils}/bin'
+ sed '$s/^/#/' ./with-tmpdir
+ echo '(PATH=$OLDPATH; exec "$@")'
+ } > $out/bin/with-tmpdir
+
+ chmod +x $out/bin/with-tmpdir
+ '';
+}
diff --git a/krebs/5pkgs/simple/youtube-tools/default.nix b/krebs/5pkgs/simple/youtube-tools/default.nix
new file mode 100644
index 000000000..d767728be
--- /dev/null
+++ b/krebs/5pkgs/simple/youtube-tools/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchgit, ... }:
+
+stdenv.mkDerivation {
+ name = "youtube-tools";
+
+ src = fetchgit {
+ url = https://github.com/Lassulus/the_playlist;
+ rev = "9218b163f2d8bc965b853ed9fc9e13d15a703456";
+ sha256 = "ae5db4be652d015a518e57e4ed2de34b9127e77d9272af3049832bb134e96e4d";
+ };
+
+ phases = [
+ "unpackPhase"
+ "installPhase"
+ ];
+
+ installPhase = ''
+ mkdir -p $out/bin
+ cp bin/* $out/bin/
+ '';
+}
diff --git a/krebs/5pkgs/simple/zandronum-bin/default.nix b/krebs/5pkgs/simple/zandronum-bin/default.nix
new file mode 100644
index 000000000..e97f46add
--- /dev/null
+++ b/krebs/5pkgs/simple/zandronum-bin/default.nix
@@ -0,0 +1,83 @@
+{ 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" ];
+ };
+}
[cgit] Unable to lock slot /tmp/cgit/04100000.lock: No such file or directory (2)