about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers')
-rw-r--r--nixpkgs/pkgs/servers/amqp/qpid-cpp/default.nix54
-rw-r--r--nixpkgs/pkgs/servers/amqp/rabbitmq-server/default.nix50
-rw-r--r--nixpkgs/pkgs/servers/apache-kafka/default.nix86
-rw-r--r--nixpkgs/pkgs/servers/apcupsd/default.nix62
-rw-r--r--nixpkgs/pkgs/servers/asterisk/default.nix124
-rw-r--r--nixpkgs/pkgs/servers/asterisk/runtime-vardirs.patch50
-rw-r--r--nixpkgs/pkgs/servers/atlassian/confluence.nix46
-rw-r--r--nixpkgs/pkgs/servers/atlassian/crowd.nix50
-rw-r--r--nixpkgs/pkgs/servers/atlassian/jira.nix43
-rw-r--r--nixpkgs/pkgs/servers/beanstalkd/default.nix23
-rw-r--r--nixpkgs/pkgs/servers/bird/default.nix54
-rw-r--r--nixpkgs/pkgs/servers/bird/dont-create-sysconfdir-1.patch13
-rw-r--r--nixpkgs/pkgs/servers/bird/dont-create-sysconfdir-2.patch13
-rw-r--r--nixpkgs/pkgs/servers/brickd/default.nix61
-rw-r--r--nixpkgs/pkgs/servers/caddy/default.nix29
-rw-r--r--nixpkgs/pkgs/servers/cayley/default.nix30
-rw-r--r--nixpkgs/pkgs/servers/cayley/deps.nix272
-rw-r--r--nixpkgs/pkgs/servers/clickhouse/default.nix53
-rw-r--r--nixpkgs/pkgs/servers/cloud-print-connector/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/cloud-print-connector/deps.nix57
-rw-r--r--nixpkgs/pkgs/servers/computing/slurm-spank-x11/default.nix39
-rw-r--r--nixpkgs/pkgs/servers/computing/slurm/default.nix72
-rw-r--r--nixpkgs/pkgs/servers/computing/storm/default.nix65
-rw-r--r--nixpkgs/pkgs/servers/computing/torque/default.nix54
-rw-r--r--nixpkgs/pkgs/servers/confluent/default.nix49
-rw-r--r--nixpkgs/pkgs/servers/consul/default.nix36
-rw-r--r--nixpkgs/pkgs/servers/corosync/default.nix72
-rw-r--r--nixpkgs/pkgs/servers/coturn/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/coturn/pure-configure.patch17
-rw-r--r--nixpkgs/pkgs/servers/couchpotato/default.nix43
-rw-r--r--nixpkgs/pkgs/servers/dante/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/dex/default.nix32
-rw-r--r--nixpkgs/pkgs/servers/dgraph/default.nix41
-rw-r--r--nixpkgs/pkgs/servers/dgraph/deps.nix326
-rw-r--r--nixpkgs/pkgs/servers/dico/default.nix52
-rw-r--r--nixpkgs/pkgs/servers/dict/buildfix.diff11
-rw-r--r--nixpkgs/pkgs/servers/dict/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/dict/dictd-db-collector.nix80
-rw-r--r--nixpkgs/pkgs/servers/dict/dictd-db.nix95
-rw-r--r--nixpkgs/pkgs/servers/dict/dictd-wiktionary.nix31
-rw-r--r--nixpkgs/pkgs/servers/dict/dictd-wordnet.nix36
-rw-r--r--nixpkgs/pkgs/servers/dict/libmaa.nix20
-rw-r--r--nixpkgs/pkgs/servers/dict/wiktionary2dict.py778
-rw-r--r--nixpkgs/pkgs/servers/dict/wordnet_structures.py319
-rw-r--r--nixpkgs/pkgs/servers/diod/default.nix20
-rw-r--r--nixpkgs/pkgs/servers/dns/bind/darwin-openssl-linking-fix.patch26
-rw-r--r--nixpkgs/pkgs/servers/dns/bind/default.nix87
-rw-r--r--nixpkgs/pkgs/servers/dns/bind/dont-keep-configure-flags.patch41
-rw-r--r--nixpkgs/pkgs/servers/dns/bind/remove-mkdir-var.patch12
-rw-r--r--nixpkgs/pkgs/servers/dns/coredns/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/dns/coredns/deps.nix317
-rw-r--r--nixpkgs/pkgs/servers/dns/dnsdist/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/dns/doh-proxy/default.nix22
-rw-r--r--nixpkgs/pkgs/servers/dns/knot-dns/default.nix45
-rw-r--r--nixpkgs/pkgs/servers/dns/knot-resolver/default.nix87
-rw-r--r--nixpkgs/pkgs/servers/dns/nsd/default.nix61
-rw-r--r--nixpkgs/pkgs/servers/dns/pdns-recursor/default.nix38
-rw-r--r--nixpkgs/pkgs/servers/dns/powerdns/default.nix52
-rw-r--r--nixpkgs/pkgs/servers/dns/powerdns/skip-sha384-test.patch14
-rw-r--r--nixpkgs/pkgs/servers/echoip/default.nix30
-rw-r--r--nixpkgs/pkgs/servers/echoip/deps.nix74
-rw-r--r--nixpkgs/pkgs/servers/elasticmq/default.nix40
-rw-r--r--nixpkgs/pkgs/servers/emby/default.nix52
-rw-r--r--nixpkgs/pkgs/servers/etcd/default.nix36
-rw-r--r--nixpkgs/pkgs/servers/exhibitor/default.nix54
-rw-r--r--nixpkgs/pkgs/servers/fcgiwrap/default.nix29
-rw-r--r--nixpkgs/pkgs/servers/felix/default.nix23
-rw-r--r--nixpkgs/pkgs/servers/felix/remoteshell.nix15
-rw-r--r--nixpkgs/pkgs/servers/fingerd/bsd-fingerd/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/fingerd/bsd-fingerd/ubuntu-0.17-9.patch67
-rw-r--r--nixpkgs/pkgs/servers/firebird/default.nix91
-rw-r--r--nixpkgs/pkgs/servers/foswiki/default.nix44
-rw-r--r--nixpkgs/pkgs/servers/foundationdb/default.nix194
-rw-r--r--nixpkgs/pkgs/servers/foundationdb/fix-scm-version.patch42
-rw-r--r--nixpkgs/pkgs/servers/foundationdb/ldflags-5.1.patch90
-rw-r--r--nixpkgs/pkgs/servers/foundationdb/ldflags-5.2.patch90
-rw-r--r--nixpkgs/pkgs/servers/foundationdb/ldflags-6.0.patch78
-rw-r--r--nixpkgs/pkgs/servers/foundationdb/python.nix24
-rw-r--r--nixpkgs/pkgs/servers/freeradius/default.nix94
-rw-r--r--nixpkgs/pkgs/servers/ftp/bftpd/default.nix36
-rw-r--r--nixpkgs/pkgs/servers/ftp/pure-ftpd/default.nix22
-rw-r--r--nixpkgs/pkgs/servers/ftp/vsftpd/CVE-2015-1419.patch104
-rw-r--r--nixpkgs/pkgs/servers/ftp/vsftpd/default.nix51
-rw-r--r--nixpkgs/pkgs/servers/gnatsd/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/gopher/gofish/default.nix20
-rw-r--r--nixpkgs/pkgs/servers/gotty/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/gotty/deps.nix74
-rw-r--r--nixpkgs/pkgs/servers/gpm/default.nix62
-rw-r--r--nixpkgs/pkgs/servers/gpsd/0001-Import-LD_LIBRARY_PATH-to-allow-running-scons-check-.patch25
-rw-r--r--nixpkgs/pkgs/servers/gpsd/0001-Use-pkgconfig-for-dbus-library.patch31
-rw-r--r--nixpkgs/pkgs/servers/gpsd/0002-Import-XML_CATALOG_FILES-to-be-able-to-validate-the-.patch28
-rw-r--r--nixpkgs/pkgs/servers/gpsd/0002-scons-envs-patch.patch11
-rw-r--r--nixpkgs/pkgs/servers/gpsd/default.nix101
-rw-r--r--nixpkgs/pkgs/servers/h2/default.nix44
-rw-r--r--nixpkgs/pkgs/servers/hbase/default.nix22
-rw-r--r--nixpkgs/pkgs/servers/hitch/default.nix23
-rw-r--r--nixpkgs/pkgs/servers/holochain-go/default.nix29
-rw-r--r--nixpkgs/pkgs/servers/holochain-go/deps.nix1056
-rw-r--r--nixpkgs/pkgs/servers/home-assistant/appdaemon.nix59
-rw-r--r--nixpkgs/pkgs/servers/home-assistant/cli.nix35
-rw-r--r--nixpkgs/pkgs/servers/home-assistant/component-packages.nix1439
-rw-r--r--nixpkgs/pkgs/servers/home-assistant/default.nix134
-rw-r--r--nixpkgs/pkgs/servers/home-assistant/frontend.nix20
-rwxr-xr-xnixpkgs/pkgs/servers/home-assistant/parse-requirements.py131
-rw-r--r--nixpkgs/pkgs/servers/http/4store/4store-1.1.6-glibc-2.26.patch12
-rw-r--r--nixpkgs/pkgs/servers/http/4store/default.nix50
-rw-r--r--nixpkgs/pkgs/servers/http/4store/src-for-default.nix9
-rw-r--r--nixpkgs/pkgs/servers/http/4store/src-info-for-default.nix6
-rw-r--r--nixpkgs/pkgs/servers/http/apache-httpd/2.4.nix100
-rw-r--r--nixpkgs/pkgs/servers/http/apache-modules/mod_auth_mellon/default.nix39
-rw-r--r--nixpkgs/pkgs/servers/http/apache-modules/mod_auth_mellon/fixdeps.patch30
-rw-r--r--nixpkgs/pkgs/servers/http/apache-modules/mod_dnssd/default.nix33
-rw-r--r--nixpkgs/pkgs/servers/http/apache-modules/mod_evasive/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/http/apache-modules/mod_fastcgi/default.nix44
-rw-r--r--nixpkgs/pkgs/servers/http/apache-modules/mod_perl/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/http/apache-modules/mod_python/default.nix33
-rw-r--r--nixpkgs/pkgs/servers/http/apache-modules/mod_python/install.patch12
-rw-r--r--nixpkgs/pkgs/servers/http/apache-modules/mod_wsgi/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/http/apache-modules/tomcat-connectors/default.nix33
-rw-r--r--nixpkgs/pkgs/servers/http/apt-cacher-ng/default.nix34
-rw-r--r--nixpkgs/pkgs/servers/http/couchdb/2.0.0.nix54
-rw-r--r--nixpkgs/pkgs/servers/http/couchdb/default.nix39
-rw-r--r--nixpkgs/pkgs/servers/http/couchdb/jsapi.patch60
-rw-r--r--nixpkgs/pkgs/servers/http/darkhttpd/default.nix30
-rw-r--r--nixpkgs/pkgs/servers/http/gatling/default.nix32
-rw-r--r--nixpkgs/pkgs/servers/http/h2o/default.nix39
-rw-r--r--nixpkgs/pkgs/servers/http/hiawatha/default.nix56
-rw-r--r--nixpkgs/pkgs/servers/http/hyp/default.nix19
-rw-r--r--nixpkgs/pkgs/servers/http/jboss/default.nix29
-rw-r--r--nixpkgs/pkgs/servers/http/jboss/jdbc/mysql/builder.sh5
-rw-r--r--nixpkgs/pkgs/servers/http/jboss/jdbc/mysql/default.nix13
-rw-r--r--nixpkgs/pkgs/servers/http/jetty/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/http/lighttpd/default.nix65
-rw-r--r--nixpkgs/pkgs/servers/http/lwan/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/http/micro-httpd/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/http/mini-httpd/default.nix22
-rw-r--r--nixpkgs/pkgs/servers/http/myserver/default.nix52
-rw-r--r--nixpkgs/pkgs/servers/http/myserver/disable-dns-lookup-in-chroot.patch12
-rw-r--r--nixpkgs/pkgs/servers/http/nginx/generic.nix80
-rw-r--r--nixpkgs/pkgs/servers/http/nginx/mainline.nix6
-rw-r--r--nixpkgs/pkgs/servers/http/nginx/mainline.upstream8
-rw-r--r--nixpkgs/pkgs/servers/http/nginx/modules.nix312
-rw-r--r--nixpkgs/pkgs/servers/http/nginx/stable.nix6
-rw-r--r--nixpkgs/pkgs/servers/http/nginx/stable.upstream8
-rw-r--r--nixpkgs/pkgs/servers/http/nix-binary-cache/default.nix61
-rw-r--r--nixpkgs/pkgs/servers/http/nix-binary-cache/nix-binary-cache-start.in117
-rw-r--r--nixpkgs/pkgs/servers/http/nix-binary-cache/nix-binary-cache.cgi.in105
-rw-r--r--nixpkgs/pkgs/servers/http/openresty/default.nix62
-rw-r--r--nixpkgs/pkgs/servers/http/pshs/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/http/redstore/default.nix30
-rw-r--r--nixpkgs/pkgs/servers/http/spawn-fcgi/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/http/tengine/default.nix85
-rw-r--r--nixpkgs/pkgs/servers/http/thttpd/default.nix29
-rw-r--r--nixpkgs/pkgs/servers/http/tomcat/axis2/builder.sh15
-rw-r--r--nixpkgs/pkgs/servers/http/tomcat/axis2/default.nix20
-rw-r--r--nixpkgs/pkgs/servers/http/tomcat/default.nix56
-rw-r--r--nixpkgs/pkgs/servers/http/tomcat/jdbc/mysql/builder.sh4
-rw-r--r--nixpkgs/pkgs/servers/http/tomcat/jdbc/mysql/default.nix13
-rw-r--r--nixpkgs/pkgs/servers/http/unit/default.nix69
-rw-r--r--nixpkgs/pkgs/servers/http/webfs/default.nix34
-rw-r--r--nixpkgs/pkgs/servers/http/webfs/ls.c.patch13
-rw-r--r--nixpkgs/pkgs/servers/http/webhook/default.nix22
-rw-r--r--nixpkgs/pkgs/servers/http/winstone/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/http/yaws/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/hydron/default.nix28
-rw-r--r--nixpkgs/pkgs/servers/hydron/deps.nix102
-rw-r--r--nixpkgs/pkgs/servers/hylafaxplus/config.site20
-rw-r--r--nixpkgs/pkgs/servers/hylafaxplus/default.nix95
-rw-r--r--nixpkgs/pkgs/servers/hylafaxplus/post-install-check.sh7
-rw-r--r--nixpkgs/pkgs/servers/hylafaxplus/post-install.sh24
-rw-r--r--nixpkgs/pkgs/servers/hylafaxplus/post-patch.sh25
-rw-r--r--nixpkgs/pkgs/servers/icecast/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/identd/nullidentdmod/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/identd/oidentd/default.nix19
-rw-r--r--nixpkgs/pkgs/servers/interlock/default.nix37
-rw-r--r--nixpkgs/pkgs/servers/interlock/deps.nix65
-rw-r--r--nixpkgs/pkgs/servers/irc/charybdis/default.nix37
-rw-r--r--nixpkgs/pkgs/servers/irc/ircd-hybrid/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/irc/ngircd/default.nix28
-rw-r--r--nixpkgs/pkgs/servers/irker/default.nix41
-rw-r--r--nixpkgs/pkgs/servers/isso/default.nix39
-rw-r--r--nixpkgs/pkgs/servers/jackett/default.nix30
-rw-r--r--nixpkgs/pkgs/servers/jetbrains/youtrack.nix31
-rw-r--r--nixpkgs/pkgs/servers/kippo/default.nix100
-rw-r--r--nixpkgs/pkgs/servers/kwakd/default.nix28
-rw-r--r--nixpkgs/pkgs/servers/ldap/389/default.nix65
-rw-r--r--nixpkgs/pkgs/servers/ldap/389/perl-path.patch34
-rw-r--r--nixpkgs/pkgs/servers/lidarr/default.nix36
-rw-r--r--nixpkgs/pkgs/servers/limesurvey/default.nix42
-rw-r--r--nixpkgs/pkgs/servers/livepeer/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/livepeer/deps.nix20
-rw-r--r--nixpkgs/pkgs/servers/mail/archiveopteryx/default.nix42
-rw-r--r--nixpkgs/pkgs/servers/mail/clamsmtp/default.nix22
-rw-r--r--nixpkgs/pkgs/servers/mail/clamsmtp/header-order.patch25
-rw-r--r--nixpkgs/pkgs/servers/mail/dkimproxy/default.nix36
-rw-r--r--nixpkgs/pkgs/servers/mail/dovecot/2.2.x-module_dir.patch122
-rw-r--r--nixpkgs/pkgs/servers/mail/dovecot/default.nix75
-rw-r--r--nixpkgs/pkgs/servers/mail/dovecot/plugins/pigeonhole/default.nix38
-rw-r--r--nixpkgs/pkgs/servers/mail/dspam/default.nix108
-rw-r--r--nixpkgs/pkgs/servers/mail/exim/default.nix96
-rw-r--r--nixpkgs/pkgs/servers/mail/freepops/default.nix29
-rw-r--r--nixpkgs/pkgs/servers/mail/mailhog/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/mail/mailhog/deps.nix191
-rw-r--r--nixpkgs/pkgs/servers/mail/mailman/default.nix33
-rw-r--r--nixpkgs/pkgs/servers/mail/mailman/fix-var-prefix.patch33
-rw-r--r--nixpkgs/pkgs/servers/mail/mlmmj/default.nix27
-rw-r--r--nixpkgs/pkgs/servers/mail/nullmailer/default.nix51
-rw-r--r--nixpkgs/pkgs/servers/mail/opensmtpd/default.nix68
-rw-r--r--nixpkgs/pkgs/servers/mail/opensmtpd/extras.nix92
-rw-r--r--nixpkgs/pkgs/servers/mail/opensmtpd/fix-build.diff12
-rw-r--r--nixpkgs/pkgs/servers/mail/opensmtpd/proc_path.diff59
-rw-r--r--nixpkgs/pkgs/servers/mail/petidomo/default.nix27
-rw-r--r--nixpkgs/pkgs/servers/mail/popa3d/default.nix28
-rw-r--r--nixpkgs/pkgs/servers/mail/popa3d/enable-standalone-mode.patch12
-rw-r--r--nixpkgs/pkgs/servers/mail/popa3d/fix-mail-spool-path.patch12
-rw-r--r--nixpkgs/pkgs/servers/mail/popa3d/use-glibc-crypt.patch12
-rw-r--r--nixpkgs/pkgs/servers/mail/popa3d/use-openssl.patch21
-rw-r--r--nixpkgs/pkgs/servers/mail/postfix/0001-Fix-build-with-unbound-1.6.1.patch54
-rw-r--r--nixpkgs/pkgs/servers/mail/postfix/default.nix98
-rw-r--r--nixpkgs/pkgs/servers/mail/postfix/pfixtools.nix55
-rw-r--r--nixpkgs/pkgs/servers/mail/postfix/pflogsumm.nix34
-rw-r--r--nixpkgs/pkgs/servers/mail/postfix/post-install-script.patch28
-rw-r--r--nixpkgs/pkgs/servers/mail/postfix/postfix-3.0-no-warnings.patch86
-rw-r--r--nixpkgs/pkgs/servers/mail/postfix/postfix-script-shell.patch21
-rw-r--r--nixpkgs/pkgs/servers/mail/postfix/relative-symlinks.patch13
-rw-r--r--nixpkgs/pkgs/servers/mail/postgrey/default.nix34
-rw-r--r--nixpkgs/pkgs/servers/mail/postsrsd/default.nix29
-rw-r--r--nixpkgs/pkgs/servers/mail/pypolicyd-spf/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/mail/rmilter/default.nix33
-rw-r--r--nixpkgs/pkgs/servers/mail/rmilter/fd-passing-libmilter.patch80
-rw-r--r--nixpkgs/pkgs/servers/mail/rspamd/default.nix51
-rw-r--r--nixpkgs/pkgs/servers/mail/spamassassin/default.nix43
-rw-r--r--nixpkgs/pkgs/servers/mail/spamassassin/sa-update_add--siteconfigpath.patch59
-rw-r--r--nixpkgs/pkgs/servers/mail/system-sendmail/default.nix36
-rw-r--r--nixpkgs/pkgs/servers/matrix-synapse/default.nix104
-rw-r--r--nixpkgs/pkgs/servers/matrix-synapse/matrix-synapse.patch20
-rw-r--r--nixpkgs/pkgs/servers/matterbridge/default.nix21
-rw-r--r--nixpkgs/pkgs/servers/mattermost/default.nix56
-rw-r--r--nixpkgs/pkgs/servers/mattermost/matterircd.nix23
-rw-r--r--nixpkgs/pkgs/servers/mediatomb/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/meguca/default.nix49
-rw-r--r--nixpkgs/pkgs/servers/meguca/server_deps.nix372
-rw-r--r--nixpkgs/pkgs/servers/memcached/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/mesos-dns/default.nix21
-rw-r--r--nixpkgs/pkgs/servers/mesos-dns/deps.nix101
-rw-r--r--nixpkgs/pkgs/servers/metabase/default.nix27
-rw-r--r--nixpkgs/pkgs/servers/meteor/default.nix93
-rw-r--r--nixpkgs/pkgs/servers/meteor/main.patch56
-rw-r--r--nixpkgs/pkgs/servers/miniflux/default.nix38
-rw-r--r--nixpkgs/pkgs/servers/miniflux/deps.nix153
-rw-r--r--nixpkgs/pkgs/servers/minio/default.nix28
-rw-r--r--nixpkgs/pkgs/servers/mirrorbits/default.nix48
-rw-r--r--nixpkgs/pkgs/servers/mirrorbits/deps.nix66
-rw-r--r--nixpkgs/pkgs/servers/misc/airsonic/default.nix24
-rw-r--r--nixpkgs/pkgs/servers/misc/client-ip-echo/client-ip-echo.nix16
-rw-r--r--nixpkgs/pkgs/servers/misc/client-ip-echo/default.nix2
-rw-r--r--nixpkgs/pkgs/servers/misc/subsonic/default.nix38
-rw-r--r--nixpkgs/pkgs/servers/misc/taskserver/default.nix43
-rw-r--r--nixpkgs/pkgs/servers/monitoring/bosun/default.nix24
-rw-r--r--nixpkgs/pkgs/servers/monitoring/cadvisor/default.nix34
-rw-r--r--nixpkgs/pkgs/servers/monitoring/consul-alerts/default.nix27
-rw-r--r--nixpkgs/pkgs/servers/monitoring/consul-alerts/deps.nix34
-rw-r--r--nixpkgs/pkgs/servers/monitoring/facette/default.nix31
-rw-r--r--nixpkgs/pkgs/servers/monitoring/fusion-inventory/default.nix93
-rw-r--r--nixpkgs/pkgs/servers/monitoring/fusion-inventory/remove_software_test.patch67
-rw-r--r--nixpkgs/pkgs/servers/monitoring/grafana-reporter/default.nix32
-rw-r--r--nixpkgs/pkgs/servers/monitoring/grafana/default.nix41
-rw-r--r--nixpkgs/pkgs/servers/monitoring/heapster/default.nix27
-rw-r--r--nixpkgs/pkgs/servers/monitoring/kapacitor/default.nix23
-rw-r--r--nixpkgs/pkgs/servers/monitoring/lcdproc/default.nix49
-rw-r--r--nixpkgs/pkgs/servers/monitoring/lcdproc/hardcode_mtab.patch17
-rw-r--r--nixpkgs/pkgs/servers/monitoring/longview/default.nix68
-rw-r--r--nixpkgs/pkgs/servers/monitoring/longview/log-stdout.patch38
-rw-r--r--nixpkgs/pkgs/servers/monitoring/mtail/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/monitoring/mtail/deps.nix56
-rw-r--r--nixpkgs/pkgs/servers/monitoring/mtail/fix-gopath.patch13
-rw-r--r--nixpkgs/pkgs/servers/monitoring/munin/adding_sconfdir_munin-node.patch41
-rw-r--r--nixpkgs/pkgs/servers/monitoring/munin/adding_servicedir_munin-node.patch84
-rw-r--r--nixpkgs/pkgs/servers/monitoring/munin/default.nix142
-rw-r--r--nixpkgs/pkgs/servers/monitoring/munin/dont_preserve_source_dir_permissions.patch18
-rw-r--r--nixpkgs/pkgs/servers/monitoring/munin/preserve_environment.patch41
-rw-r--r--nixpkgs/pkgs/servers/monitoring/nagios/default.nix31
-rw-r--r--nixpkgs/pkgs/servers/monitoring/nagios/nagios.patch23
-rw-r--r--nixpkgs/pkgs/servers/monitoring/nagios/plugins/check_ssl_cert.nix28
-rw-r--r--nixpkgs/pkgs/servers/monitoring/net-snmp/CVE-2018-18065.patch30
-rw-r--r--nixpkgs/pkgs/servers/monitoring/net-snmp/default.nix63
-rw-r--r--nixpkgs/pkgs/servers/monitoring/newrelic-sysmond/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/monitoring/plugins/default.nix71
-rw-r--r--nixpkgs/pkgs/servers/monitoring/plugins/esxi.nix37
-rw-r--r--nixpkgs/pkgs/servers/monitoring/plugins/labs_consol_de.nix79
-rw-r--r--nixpkgs/pkgs/servers/monitoring/plugins/uptime.nix26
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/alertmanager.nix42
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/bind-exporter.nix24
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/blackbox-exporter.nix24
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/collectd-exporter.nix24
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/consul-exporter.nix23
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/default.nix56
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/dnsmasq-exporter-deps.nix93
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/dnsmasq-exporter.nix23
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/dovecot-exporter-deps.nix102
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/dovecot-exporter.nix24
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/fritzbox-exporter.nix24
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/haproxy-exporter.nix24
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/jmx-httpserver.nix35
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/json-exporter.nix30
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/json-exporter_deps.nix111
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/mesos-exporter.nix26
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/mesos-exporter_deps.nix83
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/minio-exporter/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/minio-exporter/deps.nix174
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/mysqld-exporter.nix24
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/nginx-exporter.nix25
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/nginx-exporter_deps.nix119
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/node-exporter.nix29
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/openvpn-exporter-deps.nix66
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/openvpn-exporter.nix25
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/postfix-exporter-deps.nix66
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/postfix-exporter.nix56
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/prom2json.nix26
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/prom2json_deps.nix38
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/pushgateway.nix43
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/rabbitmq-exporter.nix26
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/rabbitmq-exporter_deps.nix165
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/snmp-exporter.nix27
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/statsd-bridge.nix26
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/statsd-bridge_deps.nix74
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/surfboard-exporter.nix23
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/tor-exporter.nix37
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/unifi-exporter/default.nix24
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/varnish-exporter.nix34
-rw-r--r--nixpkgs/pkgs/servers/monitoring/prometheus/varnish-exporter_deps.nix65
-rw-r--r--nixpkgs/pkgs/servers/monitoring/riemann-dash/Gemfile3
-rw-r--r--nixpkgs/pkgs/servers/monitoring/riemann-dash/Gemfile.lock30
-rw-r--r--nixpkgs/pkgs/servers/monitoring/riemann-dash/default.nix14
-rw-r--r--nixpkgs/pkgs/servers/monitoring/riemann-dash/gemset.nix73
-rw-r--r--nixpkgs/pkgs/servers/monitoring/riemann/default.nix34
-rw-r--r--nixpkgs/pkgs/servers/monitoring/sensu/Gemfile13
-rw-r--r--nixpkgs/pkgs/servers/monitoring/sensu/Gemfile.lock142
-rw-r--r--nixpkgs/pkgs/servers/monitoring/sensu/default.nix17
-rw-r--r--nixpkgs/pkgs/servers/monitoring/sensu/gemset.nix446
-rw-r--r--nixpkgs/pkgs/servers/monitoring/seyren/default.nix28
-rw-r--r--nixpkgs/pkgs/servers/monitoring/telegraf/default.nix31
-rw-r--r--nixpkgs/pkgs/servers/monitoring/telegraf/deps-1.7.0.nix894
-rw-r--r--nixpkgs/pkgs/servers/monitoring/uchiwa/bower-packages.nix25
-rw-r--r--nixpkgs/pkgs/servers/monitoring/uchiwa/default.nix51
-rw-r--r--nixpkgs/pkgs/servers/monitoring/uchiwa/src.nix4
-rwxr-xr-xnixpkgs/pkgs/servers/monitoring/uchiwa/update.sh42
-rw-r--r--nixpkgs/pkgs/servers/monitoring/zabbix/2.0.nix92
-rw-r--r--nixpkgs/pkgs/servers/monitoring/zabbix/2.2.nix104
-rw-r--r--nixpkgs/pkgs/servers/monitoring/zabbix/3.4.nix41
-rw-r--r--nixpkgs/pkgs/servers/monitoring/zabbix/default.nix75
-rw-r--r--nixpkgs/pkgs/servers/monitoring/zipkin/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/mpd/clientlib.nix24
-rw-r--r--nixpkgs/pkgs/servers/mpd/default.nix148
-rw-r--r--nixpkgs/pkgs/servers/mpd/x86.patch12
-rw-r--r--nixpkgs/pkgs/servers/mqtt/mosquitto/default.nix47
-rw-r--r--nixpkgs/pkgs/servers/mxisd/0001-gradle.patch22
-rw-r--r--nixpkgs/pkgs/servers/mxisd/default.nix70
-rw-r--r--nixpkgs/pkgs/servers/nas/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/nats-streaming-server/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/neard/default.nix36
-rw-r--r--nixpkgs/pkgs/servers/news/leafnode/default.nix37
-rw-r--r--nixpkgs/pkgs/servers/nextcloud/default.nix24
-rw-r--r--nixpkgs/pkgs/servers/nextcloud/news-updater.nix22
-rw-r--r--nixpkgs/pkgs/servers/nosql/aerospike/default.nix36
-rw-r--r--nixpkgs/pkgs/servers/nosql/apache-jena/binary.nix38
-rw-r--r--nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-binary.nix41
-rw-r--r--nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-binary.upstream4
-rw-r--r--nixpkgs/pkgs/servers/nosql/arangodb/default.nix39
-rw-r--r--nixpkgs/pkgs/servers/nosql/cassandra/2.1.nix6
-rw-r--r--nixpkgs/pkgs/servers/nosql/cassandra/2.2.nix6
-rw-r--r--nixpkgs/pkgs/servers/nosql/cassandra/3.0.nix6
-rw-r--r--nixpkgs/pkgs/servers/nosql/cassandra/3.11.nix6
-rw-r--r--nixpkgs/pkgs/servers/nosql/cassandra/generic.nix72
-rw-r--r--nixpkgs/pkgs/servers/nosql/eventstore/default.nix49
-rw-r--r--nixpkgs/pkgs/servers/nosql/influxdb/default.nix31
-rw-r--r--nixpkgs/pkgs/servers/nosql/influxdb/deps-1.4.1.nix227
-rw-r--r--nixpkgs/pkgs/servers/nosql/influxdb/deps-1.6.3.nix444
-rw-r--r--nixpkgs/pkgs/servers/nosql/mongodb/default.nix103
-rw-r--r--nixpkgs/pkgs/servers/nosql/mongodb/forget-build-dependencies.patch17
-rw-r--r--nixpkgs/pkgs/servers/nosql/neo4j/default.nix38
-rw-r--r--nixpkgs/pkgs/servers/nosql/redis/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/nosql/rethinkdb/default.nix65
-rw-r--r--nixpkgs/pkgs/servers/nosql/riak-cs/2.1.1.nix69
-rw-r--r--nixpkgs/pkgs/servers/nosql/riak-cs/stanchion.nix65
-rw-r--r--nixpkgs/pkgs/servers/nosql/riak/2.2.0.nix97
-rw-r--r--nixpkgs/pkgs/servers/nsq/default.nix18
-rw-r--r--nixpkgs/pkgs/servers/nsq/deps.nix83
-rw-r--r--nixpkgs/pkgs/servers/oauth2_proxy/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/oauth2_proxy/deps.nix129
-rw-r--r--nixpkgs/pkgs/servers/openafs/1.6/default.nix89
-rw-r--r--nixpkgs/pkgs/servers/openafs/1.6/module.nix58
-rw-r--r--nixpkgs/pkgs/servers/openafs/1.6/srcs.nix14
-rw-r--r--nixpkgs/pkgs/servers/openafs/1.6/tsmbac.patch62
-rw-r--r--nixpkgs/pkgs/servers/openafs/1.8/bosserver.patch30
-rw-r--r--nixpkgs/pkgs/servers/openafs/1.8/cross-build.patch223
-rw-r--r--nixpkgs/pkgs/servers/openafs/1.8/default.nix101
-rw-r--r--nixpkgs/pkgs/servers/openafs/1.8/module.nix60
-rw-r--r--nixpkgs/pkgs/servers/openafs/1.8/srcs.nix14
-rw-r--r--nixpkgs/pkgs/servers/openafs/1.8/tsmbac.patch62
-rw-r--r--nixpkgs/pkgs/servers/openxpki/default.nix81
-rw-r--r--nixpkgs/pkgs/servers/openxpki/vergen_revision_state12
-rw-r--r--nixpkgs/pkgs/servers/osrm-backend/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/p910nd/default.nix44
-rw-r--r--nixpkgs/pkgs/servers/pies/default.nix48
-rw-r--r--nixpkgs/pkgs/servers/plex/default.nix84
-rw-r--r--nixpkgs/pkgs/servers/plexpy/default.nix41
-rw-r--r--nixpkgs/pkgs/servers/polipo/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/prayer/default.nix41
-rw-r--r--nixpkgs/pkgs/servers/prayer/install.patch170
-rw-r--r--nixpkgs/pkgs/servers/ps3netsrv/default.nix29
-rw-r--r--nixpkgs/pkgs/servers/pulseaudio/default.nix137
-rw-r--r--nixpkgs/pkgs/servers/quagga/default.nix73
-rw-r--r--nixpkgs/pkgs/servers/radarr/default.nix31
-rw-r--r--nixpkgs/pkgs/servers/radicale/1.x.nix34
-rw-r--r--nixpkgs/pkgs/servers/radicale/default.nix45
-rw-r--r--nixpkgs/pkgs/servers/rainloop/default.nix44
-rw-r--r--nixpkgs/pkgs/servers/rippled/data-api.nix25
-rw-r--r--nixpkgs/pkgs/servers/rippled/default.nix34
-rw-r--r--nixpkgs/pkgs/servers/rippled/package.nix6029
-rw-r--r--nixpkgs/pkgs/servers/roundcube/default.nix23
-rw-r--r--nixpkgs/pkgs/servers/rpcbind/default.nix39
-rw-r--r--nixpkgs/pkgs/servers/rpcbind/sunrpc.patch29
-rw-r--r--nixpkgs/pkgs/servers/rt/default.nix102
-rw-r--r--nixpkgs/pkgs/servers/rt/override-generated.patch21
-rw-r--r--nixpkgs/pkgs/servers/sabnzbd/default.nix36
-rw-r--r--nixpkgs/pkgs/servers/samba/3.x.nix99
-rw-r--r--nixpkgs/pkgs/servers/samba/4.x-no-persistent-install-dynconfig.patch15
-rw-r--r--nixpkgs/pkgs/servers/samba/4.x-no-persistent-install.patch39
-rw-r--r--nixpkgs/pkgs/servers/samba/4.x.nix106
-rw-r--r--nixpkgs/pkgs/servers/samba/master.nix29
-rw-r--r--nixpkgs/pkgs/servers/samba/patch-source3__libads__kerberos_keytab.c.patch20
-rw-r--r--nixpkgs/pkgs/servers/search/elasticsearch/5.x.nix43
-rw-r--r--nixpkgs/pkgs/servers/search/elasticsearch/default.nix72
-rw-r--r--nixpkgs/pkgs/servers/search/elasticsearch/es-classpath-5.x.patch43
-rw-r--r--nixpkgs/pkgs/servers/search/elasticsearch/es-home-5.x.patch31
-rw-r--r--nixpkgs/pkgs/servers/search/elasticsearch/es-home-6.x.patch26
-rw-r--r--nixpkgs/pkgs/servers/search/elasticsearch/plugins.nix68
-rw-r--r--nixpkgs/pkgs/servers/search/groonga/default.nix42
-rw-r--r--nixpkgs/pkgs/servers/search/solr/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/search/sphinxsearch/default.nix30
-rw-r--r--nixpkgs/pkgs/servers/serf/default.nix24
-rw-r--r--nixpkgs/pkgs/servers/serviio/default.nix30
-rw-r--r--nixpkgs/pkgs/servers/shairplay/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/shairport-sync/default.nix43
-rw-r--r--nixpkgs/pkgs/servers/shellinabox/default.nix43
-rw-r--r--nixpkgs/pkgs/servers/shellinabox/shellinabox-minus.patch28
-rw-r--r--nixpkgs/pkgs/servers/shishi/default.nix81
-rw-r--r--nixpkgs/pkgs/servers/shishi/freebsd-unistd.patch12
-rw-r--r--nixpkgs/pkgs/servers/shishi/gcrypt-fix.patch34
-rw-r--r--nixpkgs/pkgs/servers/sickbeard/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/sickbeard/sickgear.nix35
-rw-r--r--nixpkgs/pkgs/servers/sickbeard/sickrage.nix34
-rw-r--r--nixpkgs/pkgs/servers/silc-server/default.nix18
-rw-r--r--nixpkgs/pkgs/servers/simplehttp2server/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/simplehttp2server/deps.nix12
-rw-r--r--nixpkgs/pkgs/servers/sip/freeswitch/default.nix39
-rw-r--r--nixpkgs/pkgs/servers/sip/sipwitch/default.nix27
-rw-r--r--nixpkgs/pkgs/servers/sks/adapt-to-nixos.patch27
-rw-r--r--nixpkgs/pkgs/servers/sks/default.nix52
-rw-r--r--nixpkgs/pkgs/servers/skydns/default.nix22
-rw-r--r--nixpkgs/pkgs/servers/skydns/deps.nix128
-rw-r--r--nixpkgs/pkgs/servers/slimserver/default.nix104
-rw-r--r--nixpkgs/pkgs/servers/smcroute/default.nix29
-rw-r--r--nixpkgs/pkgs/servers/softether/4.18.nix53
-rw-r--r--nixpkgs/pkgs/servers/softether/4.20.nix53
-rw-r--r--nixpkgs/pkgs/servers/softether/4.25.nix53
-rw-r--r--nixpkgs/pkgs/servers/sonarr/default.nix33
-rw-r--r--nixpkgs/pkgs/servers/sql/cockroachdb/default.nix64
-rw-r--r--nixpkgs/pkgs/servers/sql/mariadb/clang-isfinite.patch17
-rw-r--r--nixpkgs/pkgs/servers/sql/mariadb/cmake-includedir.patch11
-rw-r--r--nixpkgs/pkgs/servers/sql/mariadb/default.nix271
-rw-r--r--nixpkgs/pkgs/servers/sql/mariadb/include-dirs-path.patch13
-rw-r--r--nixpkgs/pkgs/servers/sql/monetdb/default.nix30
-rw-r--r--nixpkgs/pkgs/servers/sql/mysql/5.5.17-cygwin.patch44
-rw-r--r--nixpkgs/pkgs/servers/sql/mysql/5.5.17-export-symbols.patch22
-rw-r--r--nixpkgs/pkgs/servers/sql/mysql/5.5.x.nix83
-rw-r--r--nixpkgs/pkgs/servers/sql/mysql/5.7.x.nix87
-rw-r--r--nixpkgs/pkgs/servers/sql/mysql/abi_check.patch20
-rw-r--r--nixpkgs/pkgs/servers/sql/mysql/jdbc/builder.sh9
-rw-r--r--nixpkgs/pkgs/servers/sql/mysql/jdbc/default.nix17
-rw-r--r--nixpkgs/pkgs/servers/sql/oracle-xe/default.nix82
-rw-r--r--nixpkgs/pkgs/servers/sql/percona/5.6.x.nix62
-rw-r--r--nixpkgs/pkgs/servers/sql/pgbouncer/default.nix20
-rw-r--r--nixpkgs/pkgs/servers/sql/pgpool/default.nix36
-rw-r--r--nixpkgs/pkgs/servers/sql/pgpool/pgpool-II-3.4.14-glibc-2.26.patch12
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/cstore_fdw/default.nix32
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/default.nix152
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks-94.patch12
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks.patch14
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path-96.patch14
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path.patch17
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/jdbc/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/less-is-more-96.patch12
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/less-is-more.patch12
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/pg_cron/default.nix31
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/pg_hll/default.nix31
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/pg_repack/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/pg_similarity/default.nix31
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/pgjwt/default.nix29
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/pgroonga/default.nix30
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/pgtap/default.nix33
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/plv8/default.nix38
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/psqlodbc/default.nix21
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/specify_pkglibdir_at_runtime.patch29
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/timescaledb/default.nix51
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/topn/default.nix32
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/tsearch_extras/default.nix29
-rw-r--r--nixpkgs/pkgs/servers/sql/sqlite/jdbc/default.nix29
-rw-r--r--nixpkgs/pkgs/servers/sql/virtuoso/6.x.nix45
-rw-r--r--nixpkgs/pkgs/servers/sql/virtuoso/7.x.nix36
-rw-r--r--nixpkgs/pkgs/servers/squid/4.nix39
-rw-r--r--nixpkgs/pkgs/servers/squid/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/sslh/default.nix29
-rw-r--r--nixpkgs/pkgs/servers/teleport/default.nix41
-rw-r--r--nixpkgs/pkgs/servers/traefik/default.nix39
-rw-r--r--nixpkgs/pkgs/servers/trezord/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/tt-rss/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/tt-rss/plugin-tumblr-gdpr/default.nix30
-rw-r--r--nixpkgs/pkgs/servers/tt-rss/theme-feedly/default.nix27
-rw-r--r--nixpkgs/pkgs/servers/tvheadend/default.nix66
-rw-r--r--nixpkgs/pkgs/servers/u9fs/default.nix24
-rw-r--r--nixpkgs/pkgs/servers/udpt/default.nix52
-rw-r--r--nixpkgs/pkgs/servers/uftp/default.nix33
-rw-r--r--nixpkgs/pkgs/servers/uhub/default.nix59
-rw-r--r--nixpkgs/pkgs/servers/uhub/plugin-dir.patch19
-rw-r--r--nixpkgs/pkgs/servers/ums/default.nix33
-rw-r--r--nixpkgs/pkgs/servers/unfs3/default.nix33
-rw-r--r--nixpkgs/pkgs/servers/unifi/default.nix57
-rw-r--r--nixpkgs/pkgs/servers/uwsgi/default.nix101
-rw-r--r--nixpkgs/pkgs/servers/uwsgi/nixos.ini6
-rw-r--r--nixpkgs/pkgs/servers/varnish/default.nix54
-rw-r--r--nixpkgs/pkgs/servers/varnish/digest.nix31
-rw-r--r--nixpkgs/pkgs/servers/varnish/dynamic.nix26
-rw-r--r--nixpkgs/pkgs/servers/varnish/geoip.nix31
-rw-r--r--nixpkgs/pkgs/servers/varnish/modules.nix29
-rw-r--r--nixpkgs/pkgs/servers/varnish/packages.nix22
-rw-r--r--nixpkgs/pkgs/servers/varnish/rtstatus.nix21
-rw-r--r--nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/default.nix46
-rw-r--r--nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/deps.json8
-rwxr-xr-xnixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/generate.sh7
-rw-r--r--nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/node-packages.nix1459
-rw-r--r--nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/node.nix17
-rw-r--r--nixpkgs/pkgs/servers/web-apps/codimd/default.nix156
-rw-r--r--nixpkgs/pkgs/servers/web-apps/codimd/deps.json150
-rwxr-xr-xnixpkgs/pkgs/servers/web-apps/codimd/generate.sh7
-rw-r--r--nixpkgs/pkgs/servers/web-apps/codimd/node-packages.nix17911
-rw-r--r--nixpkgs/pkgs/servers/web-apps/codimd/node.nix17
-rw-r--r--nixpkgs/pkgs/servers/web-apps/fileshelter/default.nix30
-rw-r--r--nixpkgs/pkgs/servers/web-apps/frab/Gemfile88
-rw-r--r--nixpkgs/pkgs/servers/web-apps/frab/Gemfile.lock329
-rw-r--r--nixpkgs/pkgs/servers/web-apps/frab/default.nix53
-rw-r--r--nixpkgs/pkgs/servers/web-apps/frab/gemset.nix998
-rw-r--r--nixpkgs/pkgs/servers/web-apps/matomo/bootstrap.php6
-rw-r--r--nixpkgs/pkgs/servers/web-apps/matomo/default.nix60
-rw-r--r--nixpkgs/pkgs/servers/web-apps/matomo/make-localhost-default-database-host.patch13
-rw-r--r--nixpkgs/pkgs/servers/web-apps/morty/default.nix42
-rw-r--r--nixpkgs/pkgs/servers/web-apps/morty/deps.nix57
-rw-r--r--nixpkgs/pkgs/servers/web-apps/pgpkeyserver-lite/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/web-apps/restya-board/default.nix50
-rw-r--r--nixpkgs/pkgs/servers/web-apps/restya-board/fix_request-uri.patch12
-rw-r--r--nixpkgs/pkgs/servers/web-apps/searx/default.nix50
-rw-r--r--nixpkgs/pkgs/servers/web-apps/selfoss/default.nix27
-rw-r--r--nixpkgs/pkgs/servers/web-apps/shaarli/default.nix61
-rw-r--r--nixpkgs/pkgs/servers/web-apps/shaarli/material-theme.nix35
-rw-r--r--nixpkgs/pkgs/servers/web-apps/virtlyst/add-admin-password-env.patch14
-rw-r--r--nixpkgs/pkgs/servers/web-apps/virtlyst/default.nix32
-rw-r--r--nixpkgs/pkgs/servers/web-apps/wallabag/default.nix41
-rw-r--r--nixpkgs/pkgs/servers/web-apps/wallabag/wallabag-data.patch26
-rw-r--r--nixpkgs/pkgs/servers/web-apps/wordpress/default.nix13
-rw-r--r--nixpkgs/pkgs/servers/webmetro/default.nix31
-rw-r--r--nixpkgs/pkgs/servers/x11/quartz-wm/default.nix31
-rw-r--r--nixpkgs/pkgs/servers/x11/quartz-wm/extern-patch.patch13
-rw-r--r--nixpkgs/pkgs/servers/x11/quartz-wm/no_title_crash.patch25
-rw-r--r--nixpkgs/pkgs/servers/x11/xorg/builder.sh40
-rw-r--r--nixpkgs/pkgs/servers/x11/xorg/darwin/dri/GL/internal/dri_interface.h1409
-rw-r--r--nixpkgs/pkgs/servers/x11/xorg/default.nix3032
-rw-r--r--nixpkgs/pkgs/servers/x11/xorg/extra.list11
-rwxr-xr-xnixpkgs/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl323
-rw-r--r--nixpkgs/pkgs/servers/x11/xorg/imake-cc-wrapper-uberhack.patch13
-rw-r--r--nixpkgs/pkgs/servers/x11/xorg/imake-setup-hook.sh19
-rw-r--r--nixpkgs/pkgs/servers/x11/xorg/imake.patch37
-rw-r--r--nixpkgs/pkgs/servers/x11/xorg/imake.sh6
-rw-r--r--nixpkgs/pkgs/servers/x11/xorg/old.list15
-rw-r--r--nixpkgs/pkgs/servers/x11/xorg/overrides.nix706
-rw-r--r--nixpkgs/pkgs/servers/x11/xorg/tarballs-7.7.list205
-rw-r--r--nixpkgs/pkgs/servers/x11/xorg/xcb-util-xrm.nix23
-rw-r--r--nixpkgs/pkgs/servers/x11/xorg/xkeyboard-config-eo.patch69
-rw-r--r--nixpkgs/pkgs/servers/x11/xorg/xwayland.nix36
-rwxr-xr-xnixpkgs/pkgs/servers/x11/xquartz/X1120
-rw-r--r--nixpkgs/pkgs/servers/x11/xquartz/default.nix192
-rwxr-xr-xnixpkgs/pkgs/servers/x11/xquartz/font_cache240
-rw-r--r--nixpkgs/pkgs/servers/x11/xquartz/org.nixos.xquartz.privileged_startx.plist23
-rw-r--r--nixpkgs/pkgs/servers/x11/xquartz/org.nixos.xquartz.startx.plist27
-rw-r--r--nixpkgs/pkgs/servers/x11/xquartz/patch_plist.rb47
-rwxr-xr-xnixpkgs/pkgs/servers/x11/xquartz/privileged43
-rwxr-xr-xnixpkgs/pkgs/servers/x11/xquartz/startx232
-rw-r--r--nixpkgs/pkgs/servers/x11/xquartz/system-fonts.nix34
-rwxr-xr-xnixpkgs/pkgs/servers/x11/xquartz/xinitrc40
-rw-r--r--nixpkgs/pkgs/servers/xinetd/default.nix25
-rw-r--r--nixpkgs/pkgs/servers/xmpp/biboumi/catch.patch30
-rw-r--r--nixpkgs/pkgs/servers/xmpp/biboumi/default.nix43
-rw-r--r--nixpkgs/pkgs/servers/xmpp/ejabberd/default.nix120
-rw-r--r--nixpkgs/pkgs/servers/xmpp/openfire/default.nix31
-rw-r--r--nixpkgs/pkgs/servers/xmpp/prosody/default.nix73
-rw-r--r--nixpkgs/pkgs/servers/xmpp/pyIRCt/default.nix42
-rw-r--r--nixpkgs/pkgs/servers/xmpp/pyMAILt/default.nix40
-rw-r--r--nixpkgs/pkgs/servers/zookeeper/default.nix55
608 files changed, 65878 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/amqp/qpid-cpp/default.nix b/nixpkgs/pkgs/servers/amqp/qpid-cpp/default.nix
new file mode 100644
index 000000000000..8446578507d8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/amqp/qpid-cpp/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchurl, cmake, python2, boost, libuuid, ruby, buildEnv, buildPythonPackage, qpid-python }:
+
+let
+  name = "qpid-cpp-${version}";
+  version = "1.37.0";
+
+  src = fetchurl {
+    url = "mirror://apache/qpid/cpp/${version}/${name}.tar.gz";
+    sha256 = "1s4hyi867i0lqn81c1crrk6fga1gmsv61675vjv5v41skz56lrsb";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = http://qpid.apache.org;
+    repositories.git = git://git.apache.org/qpid.git;
+    repositories.svn = http://svn.apache.org/repos/asf/qpid;
+    description = "An AMQP message broker and a C++ messaging API";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ cpages ma27 ];
+  };
+
+  qpid-cpp = stdenv.mkDerivation {
+    inherit src meta name;
+
+    nativeBuildInputs = [ cmake ];
+    buildInputs = [ boost libuuid ruby python2 ];
+
+    # the subdir managementgen wants to install python stuff in ${python} and
+    # the installation tries to create some folders in /var
+    postPatch = ''
+      sed -i '/managementgen/d' CMakeLists.txt
+      sed -i '/ENV/d' src/CMakeLists.txt
+      sed -i '/management/d' CMakeLists.txt
+    '';
+
+    NIX_CFLAGS_COMPILE = [
+      "-Wno-error=deprecated-declarations"
+      "-Wno-error=int-in-bool-context"
+      "-Wno-error=maybe-uninitialized"
+      "-Wno-error=unused-function"
+    ];
+  };
+
+  python-frontend = buildPythonPackage {
+    inherit name meta src;
+
+    sourceRoot = "${name}/management/python";
+
+    propagatedBuildInputs = [ qpid-python ];
+  };
+in buildEnv {
+  name = "${name}-env";
+  paths = [ qpid-cpp python-frontend ];
+}
diff --git a/nixpkgs/pkgs/servers/amqp/rabbitmq-server/default.nix b/nixpkgs/pkgs/servers/amqp/rabbitmq-server/default.nix
new file mode 100644
index 000000000000..e92cd6175af1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/amqp/rabbitmq-server/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchurl, erlang, elixir, python, libxml2, libxslt, xmlto
+, docbook_xml_dtd_45, docbook_xsl, zip, unzip, rsync, getconf, socat
+, AppKit, Carbon, Cocoa
+}:
+
+stdenv.mkDerivation rec {
+  name = "rabbitmq-server-${version}";
+
+  version = "3.7.9";
+
+  src = fetchurl {
+    url = "https://github.com/rabbitmq/rabbitmq-server/releases/download/v${version}/${name}.tar.xz";
+    sha256 = "138hz19g4x562vm7aqdsxc98ay0aidn37isafzhkig8cjlygg2iq";
+  };
+
+  buildInputs =
+    [ erlang elixir python libxml2 libxslt xmlto docbook_xml_dtd_45 docbook_xsl zip unzip rsync ]
+    ++ stdenv.lib.optionals stdenv.isDarwin [ AppKit Carbon Cocoa ];
+
+  outputs = [ "out" "man" "doc" ];
+
+  installFlags = "PREFIX=$(out) RMQ_ERLAPP_DIR=$(out)";
+  installTargets = "install install-man";
+
+  runtimePath = stdenv.lib.makeBinPath [getconf erlang socat];
+  postInstall = ''
+    echo 'PATH=${runtimePath}:''${PATH:+:}$PATH' >> $out/sbin/rabbitmq-env
+
+    # we know exactly where rabbitmq is gonna be,
+    # so we patch that into the env-script
+    substituteInPlace $out/sbin/rabbitmq-env \
+      --replace 'RABBITMQ_SCRIPTS_DIR=`dirname $SCRIPT_PATH`' \
+                "RABBITMQ_SCRIPTS_DIR=$out/sbin"
+
+    # there’s a few stray files that belong into share
+    mkdir -p $doc/share/doc/rabbitmq-server
+    mv $out/LICENSE* $doc/share/doc/rabbitmq-server
+
+    # and an unecessarily copied INSTALL file
+    rm $out/INSTALL
+  '';
+
+  meta = {
+    homepage = http://www.rabbitmq.com/;
+    description = "An implementation of the AMQP messaging protocol";
+    license = stdenv.lib.licenses.mpl11;
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = with stdenv.lib.maintainers; [ Profpatsch ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/apache-kafka/default.nix b/nixpkgs/pkgs/servers/apache-kafka/default.nix
new file mode 100644
index 000000000000..348a9a88566b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/apache-kafka/default.nix
@@ -0,0 +1,86 @@
+{ stdenv, fetchurl, jre, makeWrapper, bash, coreutils, gnugrep, gnused,
+  majorVersion ? "1.0" }:
+
+let
+  versionMap = {
+    "0.9" = {
+      kafkaVersion = "0.9.0.1";
+      scalaVersion = "2.11";
+      sha256 = "0ykcjv5dz9i5bws9my2d60pww1g9v2p2nqr67h0i2xrjm7az8a6v";
+    };
+    "0.10" = {
+      kafkaVersion = "0.10.2.2";
+      scalaVersion = "2.12";
+      sha256 = "13wibnz7n7znv2g13jlpkz1r0y73qy5b02pdqhsq7cl72h9s6wms";
+    };
+    "0.11" = {
+      kafkaVersion = "0.11.0.3";
+      scalaVersion = "2.12";
+      sha256 = "0zkzp9a8lcfcpavks131119v10hpn90sc0pw4f90jc4zn2yw3rgd";
+    };
+    "1.0" = {
+      kafkaVersion = "1.0.2";
+      scalaVersion = "2.12";
+      sha256 = "0cmq8ww1lbkp3ipy9d1q8c1yz4kfwj0v4ynnhsk1i48sqlmvwybj";
+    };
+    "1.1" = {
+      kafkaVersion = "1.1.1";
+      scalaVersion = "2.12";
+      sha256 = "13vg0wm2fsd06pfw05m4bhcgbjmb2bmd4i31zfs48w0f7hjc8qf2";
+    };
+    "2.0" = {
+      kafkaVersion = "2.0.1";
+      scalaVersion = "2.12";
+      sha256 = "0i62q3542cznf711kiskaa30l06gq9ckszlxja4k1vs1flxz5khl";
+    };
+    "2.1" = {
+      kafkaVersion = "2.1.0";
+      scalaVersion = "2.12";
+      sha256 = "11jgxyqxsw4hc85ba2czc8wdzlnywyb4ab8qd5f2y27mhak482x7";
+    };
+  };
+in
+
+with versionMap.${majorVersion};
+
+stdenv.mkDerivation rec {
+  version = "${scalaVersion}-${kafkaVersion}";
+  name = "apache-kafka-${version}";
+
+  src = fetchurl {
+    url = "mirror://apache/kafka/${kafkaVersion}/kafka_${version}.tgz";
+    inherit sha256;
+  };
+
+  buildInputs = [ jre makeWrapper bash gnugrep gnused coreutils ];
+
+  installPhase = ''
+    mkdir -p $out
+    cp -R config libs $out
+
+    mkdir -p $out/bin
+    cp bin/kafka* $out/bin
+    cp bin/connect* $out/bin
+
+    # allow us the specify logging directory using env
+    substituteInPlace $out/bin/kafka-run-class.sh \
+      --replace 'LOG_DIR="$base_dir/logs"' 'LOG_DIR="$KAFKA_LOG_DIR"'
+
+    for p in $out/bin\/*.sh; do
+      wrapProgram $p \
+        --set JAVA_HOME "${jre}" \
+        --set KAFKA_LOG_DIR "/tmp/apache-kafka-logs" \
+        --prefix PATH : "${bash}/bin:${coreutils}/bin:${gnugrep}/bin:${gnused}/bin"
+    done
+    chmod +x $out/bin\/*
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://kafka.apache.org;
+    description = "A high-throughput distributed messaging system";
+    license = licenses.asl20;
+    maintainers = [ maintainers.ragge ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/apcupsd/default.nix b/nixpkgs/pkgs/servers/apcupsd/default.nix
new file mode 100644
index 000000000000..bec61d460a7a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/apcupsd/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, fetchurl, pkgconfig, systemd, utillinux, coreutils, wall, hostname, man
+, enableCgiScripts ? true, gd
+}:
+
+assert enableCgiScripts -> gd != null;
+
+stdenv.mkDerivation rec {
+  pname = "apcupsd";
+  name = "${pname}-3.14.14";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${name}.tar.gz";
+    sha256 = "0rwqiyzlg9p0szf3x6q1ppvrw6f6dbpn2rc5z623fk3bkdalhxyv";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ utillinux man ] ++ stdenv.lib.optional enableCgiScripts gd;
+
+  prePatch = ''
+    sed -e "s,\$(INSTALL_PROGRAM) \$(STRIP),\$(INSTALL_PROGRAM)," \
+        -i ./src/apcagent/Makefile ./autoconf/targets.mak
+  '';
+
+  # ./configure ignores --prefix, so we must specify some paths manually
+  # There is no real reason for a bin/sbin split, so just use bin.
+  preConfigure = ''
+    export ac_cv_path_SHUTDOWN=${systemd}/sbin/shutdown
+    export ac_cv_path_WALL=${wall}/bin/wall
+    sed -i 's|/bin/cat|${coreutils}/bin/cat|' configure
+    export configureFlags="\
+        --bindir=$out/bin \
+        --sbindir=$out/bin \
+        --sysconfdir=$out/etc/apcupsd \
+        --mandir=$out/share/man \
+        --with-halpolicydir=$out/share/halpolicy \
+        --localstatedir=/var/ \
+        --with-nologin=/run \
+        --with-log-dir=/var/log/apcupsd \
+        --with-pwrfail-dir=/run/apcupsd \
+        --with-lock-dir=/run/lock \
+        --with-pid-dir=/run \
+        --enable-usb \
+        ${stdenv.lib.optionalString enableCgiScripts "--enable-cgi --with-cgi-bin=$out/libexec/cgi-bin"}
+        "
+  '';
+
+  postInstall = ''
+    for file in "$out"/etc/apcupsd/*; do
+        sed -i -e 's|^WALL=.*|WALL="${wall}/bin/wall"|g' \
+               -e 's|^HOSTNAME=.*|HOSTNAME=`${hostname}/bin/hostname`|g' \
+               "$file"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Daemon for controlling APC UPSes";
+    homepage = http://www.apcupsd.com/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/asterisk/default.nix b/nixpkgs/pkgs/servers/asterisk/default.nix
new file mode 100644
index 000000000000..37f93c8e87e8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/asterisk/default.nix
@@ -0,0 +1,124 @@
+{ stdenv, lib, fetchurl, fetchsvn,
+  jansson, libxml2, libxslt, ncurses, openssl, sqlite,
+  utillinux, dmidecode, libuuid, newt,
+  lua, speex,
+  srtp, wget, curl, iksemel
+}:
+
+let
+  common = {version, sha256, externals}: stdenv.mkDerivation rec {
+    inherit version;
+    name = "asterisk-${version}";
+
+    buildInputs = [ jansson libxml2 libxslt ncurses openssl sqlite utillinux dmidecode libuuid newt lua speex srtp wget curl iksemel ];
+
+    patches = [
+      # We want the Makefile to install the default /var skeleton
+      # under ${out}/var but we also want to use /var at runtime.
+      # This patch changes the runtime behavior to look for state
+      # directories in /var rather than ${out}/var.
+      ./runtime-vardirs.patch
+    ];
+
+    # Disable MD5 verification for pjsip
+    postPatch = ''
+      sed -i 's|$(verify_tarball)|true|' third-party/pjproject/Makefile
+    '';
+
+    src = fetchurl {
+      url = "https://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-${version}.tar.gz";
+      inherit sha256;
+    };
+
+    # The default libdir is $PREFIX/usr/lib, which causes problems when paths
+    # compiled into Asterisk expect ${out}/usr/lib rather than ${out}/lib.
+
+    # Copy in externals to avoid them being downloaded;
+    # they have to be copied, because the modification date is checked.
+    # If you are getting a permission denied error on this dir,
+    # you're likely missing an automatically downloaded dependency
+    preConfigure = ''
+      mkdir externals_cache
+    '' + lib.concatStringsSep "\n"
+        (lib.mapAttrsToList (dst: src: "cp -r --no-preserve=mode ${src} ${dst}") externals) + ''
+
+      chmod -w externals_cache
+    '';
+    configureFlags = [
+      "--libdir=\${out}/lib"
+      "--with-lua=${lua}/lib"
+      "--with-pjproject-bundled"
+      "--with-externals-cache=$(PWD)/externals_cache"
+    ];
+
+    preBuild = ''
+      make menuselect.makeopts
+      substituteInPlace menuselect.makeopts --replace 'format_mp3 ' ""
+    '';
+
+    postInstall = ''
+      # Install sample configuration files for this version of Asterisk
+      make samples
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Software implementation of a telephone private branch exchange (PBX)";
+      homepage = http://www.asterisk.org/;
+      license = licenses.gpl2;
+      maintainers = with maintainers; [ auntie DerTim1 yorickvp ];
+    };
+  };
+
+  pjproject-27 = fetchurl {
+    url = http://www.pjsip.org/release/2.7.1/pjproject-2.7.1.tar.bz2;
+    sha256 = "09ii5hgl5s7grx4fiimcl3s77i385h7b3kwpfa2q0arbl1ibryjr";
+  };
+
+  mp3-202 = fetchsvn {
+    url = http://svn.digium.com/svn/thirdparty/mp3/trunk;
+    rev = "202";
+    sha256 = "1s9idx2miwk178sa731ig9r4fzx4gy1q8xazfqyd7q4lfd70s1cy";
+  };
+
+in
+{
+
+  asterisk-lts = common {
+    version = "13.20.0";
+    sha256 = "a3d6d953f844867ea11e0be22ee6225049cd4f5870df6ab23454623bcfbc94d5";
+    externals = {
+      "externals_cache/pjproject-2.7.1.tar.bz2" = pjproject-27;
+      "addons/mp3" = mp3-202;
+    };
+  };
+
+  asterisk-stable = common {
+    version = "15.3.0";
+    sha256 = "f424f89f23b72f267ff9baab82d449bebbbf00c54e54fcd06b8fca13788b012c";
+    externals = {
+      "externals_cache/pjproject-2.7.1.tar.bz2" = pjproject-27;
+      "addons/mp3" = mp3-202;
+    };
+  };
+
+  # asterisk-git = common {
+  #   version = "15-pre";
+  #   sha256 = "...";
+  #   externals = {
+  #    "externals_cache/pjproject-2.5.5.tar.bz2" = pjproject-255;
+      # Note that these sounds are included with the release tarball. They are
+      # provided here verbatim for the convenience of anyone wanting to build
+      # Asterisk from other sources. Include in externals.
+      # "sounds/asterisk-core-sounds-en-gsm-1.5.tar.gz" = fetchurl {
+      #   url = http://downloads.asterisk.org/pub/telephony/sounds/releases/asterisk-core-sounds-en-gsm-1.5.tar.gz;
+      #   sha256 = "01xzbg7xy0c5zg7sixjw5025pvr4z64kfzi9zvx19im0w331h4cd";
+      # };
+      # "sounds/asterisk-moh-opsound-wav-2.03.tar.gz" = fetchurl {
+      #   url = http://downloads.asterisk.org/pub/telephony/sounds/releases/asterisk-moh-opsound-wav-2.03.tar.gz;
+      #   sha256 = "449fb810d16502c3052fedf02f7e77b36206ac5a145f3dacf4177843a2fcb538";
+      # };
+      # TODO: Sounds for other languages could be added here
+    # }
+  # }.overrideDerivation (_: {src = fetchgit {...}})
+
+}
diff --git a/nixpkgs/pkgs/servers/asterisk/runtime-vardirs.patch b/nixpkgs/pkgs/servers/asterisk/runtime-vardirs.patch
new file mode 100644
index 000000000000..17959bac9a07
--- /dev/null
+++ b/nixpkgs/pkgs/servers/asterisk/runtime-vardirs.patch
@@ -0,0 +1,50 @@
+diff -rupN asterisk-14.1.2/build_tools/make_defaults_h asterisk-14.1.2-patched/build_tools/make_defaults_h
+--- asterisk-14.1.2/build_tools/make_defaults_h	2016-11-10 20:43:02.000000000 +0100
++++ asterisk-14.1.2-patched/build_tools/make_defaults_h	2016-11-16 10:09:04.189625495 +0100
+@@ -1,4 +1,13 @@
+ #!/bin/sh
++
++ASTLOGDIR=/var/log/asterisk
++ASTVARRUNDIR=/var/run/asterisk
++ASTVARLIBDIR=/var/lib/asterisk
++ASTDBDIR=${ASTVARLIBDIR}
++ASTDATADIR=${ASTVARLIBDIR}
++AGI_DIR=${ASTDATADIR}/agi-bin
++ASTSPOOLDIR=/var/spool/asterisk
++
+ cat << END
+ /*
+  * defaults.h 
+@@ -9,21 +18,21 @@ cat << END
+ 
+ #define DEFAULT_CONFIG_DIR "${INSTALL_PATH}${ASTETCDIR}"
+ #define DEFAULT_MODULE_DIR "${INSTALL_PATH}${ASTMODDIR}"
+-#define DEFAULT_AGI_DIR    "${INSTALL_PATH}${AGI_DIR}"
+-#define DEFAULT_LOG_DIR    "${INSTALL_PATH}${ASTLOGDIR}"
++#define DEFAULT_AGI_DIR    "${AGI_DIR}"
++#define DEFAULT_LOG_DIR    "${ASTLOGDIR}"
+ 
+-#define DEFAULT_RUN_DIR    "${INSTALL_PATH}${ASTVARRUNDIR}"
+-#define DEFAULT_SOCKET     "${INSTALL_PATH}${ASTVARRUNDIR}/asterisk.ctl"
+-#define DEFAULT_PID        "${INSTALL_PATH}${ASTVARRUNDIR}/asterisk.pid"
++#define DEFAULT_RUN_DIR    "${ASTVARRUNDIR}"
++#define DEFAULT_SOCKET     "${ASTVARRUNDIR}/asterisk.ctl"
++#define DEFAULT_PID        "${ASTVARRUNDIR}/asterisk.pid"
+ 
+-#define DEFAULT_VAR_DIR    "${INSTALL_PATH}${ASTVARLIBDIR}"
+-#define DEFAULT_DB         "${INSTALL_PATH}${ASTDBDIR}/astdb"
++#define DEFAULT_VAR_DIR    "${ASTVARLIBDIR}"
++#define DEFAULT_DB         "${ASTDBDIR}/astdb"
+ 
+-#define DEFAULT_DATA_DIR   "${INSTALL_PATH}${ASTDATADIR}"
+-#define DEFAULT_KEY_DIR    "${INSTALL_PATH}${ASTDATADIR}/keys"
++#define DEFAULT_DATA_DIR   "${ASTDATADIR}"
++#define DEFAULT_KEY_DIR    "${ASTDATADIR}/keys"
+ 
+-#define DEFAULT_SPOOL_DIR  "${INSTALL_PATH}${ASTSPOOLDIR}"
+-#define DEFAULT_TMP_DIR    "${INSTALL_PATH}${ASTSPOOLDIR}/tmp"
++#define DEFAULT_SPOOL_DIR  "${ASTSPOOLDIR}"
++#define DEFAULT_TMP_DIR    "${ASTSPOOLDIR}/tmp"
+ 
+ #define DEFAULT_SBIN_DIR   "${INSTALL_PATH}${ASTSBINDIR}"
+ END
diff --git a/nixpkgs/pkgs/servers/atlassian/confluence.nix b/nixpkgs/pkgs/servers/atlassian/confluence.nix
new file mode 100644
index 000000000000..617ae3ee1d10
--- /dev/null
+++ b/nixpkgs/pkgs/servers/atlassian/confluence.nix
@@ -0,0 +1,46 @@
+{ stdenv, lib, fetchurl
+, enableSSO ? false
+, crowdProperties ? null
+}:
+
+stdenv.mkDerivation rec {
+  name = "atlassian-confluence-${version}";
+  version = "6.11.1";
+
+  src = fetchurl {
+    url = "https://www.atlassian.com/software/confluence/downloads/binary/${name}.tar.gz";
+    sha256 = "0sp1ggllvxdz0pf409yyil1x9dah1jyqspknfzgivkmwhcqj7brr";
+  };
+
+  phases = [ "unpackPhase" "buildPhase" "installPhase" ];
+
+  buildPhase = ''
+    echo "confluence.home=/run/confluence/home" > confluence/WEB-INF/classes/confluence-init.properties
+    mv conf/server.xml conf/server.xml.dist
+    ln -sf /run/confluence/home/deploy conf/Standalone
+    ln -sf /run/confluence/server.xml conf/server.xml
+    rm -r logs; ln -sf /run/confluence/logs/ .
+    rm -r work; ln -sf /run/confluence/work/ .
+    rm -r temp; ln -sf /run/confluence/temp/ .
+  '' + lib.optionalString enableSSO ''
+    substituteInPlace confluence/WEB-INF/classes/seraph-config.xml \
+      --replace com.atlassian.confluence.user.ConfluenceAuthenticator\
+                com.atlassian.confluence.user.ConfluenceCrowdSSOAuthenticator
+  '' + lib.optionalString (crowdProperties != null) ''
+    cat <<EOF > confluence/WEB-INF/classes/crowd.properties
+    ${crowdProperties}
+    EOF
+  '';
+
+  installPhase = ''
+    cp -rva . $out
+    patchShebangs $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Team collaboration software written in Java and mainly used in corporate environments";
+    homepage = https://www.atlassian.com/software/confluence;
+    license = licenses.unfree;
+    maintainers = with maintainers; [ fpletz globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/atlassian/crowd.nix b/nixpkgs/pkgs/servers/atlassian/crowd.nix
new file mode 100644
index 000000000000..4ad0388e8db4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/atlassian/crowd.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchurl, home ? "/var/lib/crowd"
+, port ? 8092, proxyUrl ? null, openidPassword ? "WILL_NEVER_BE_SET" }:
+
+stdenv.mkDerivation rec {
+  name = "atlassian-crowd-${version}";
+  version = "3.2.5";
+
+  src = fetchurl {
+    url = "https://www.atlassian.com/software/crowd/downloads/binary/${name}.tar.gz";
+    sha256 = "1h8kxh89d2wm0hkgrzx5dnnfy8sbhpgisgdwn3srhb4js8h4qil6";
+  };
+
+  phases = [ "unpackPhase" "buildPhase" "installPhase" "fixupPhase" ];
+
+  buildPhase = ''
+    mv apache-tomcat/conf/server.xml apache-tomcat/conf/server.xml.dist
+    ln -s /run/atlassian-crowd/server.xml apache-tomcat/conf/server.xml
+
+    rm -rf apache-tomcat/work
+    ln -s /run/atlassian-crowd/work apache-tomcat/work
+
+    ln -s /run/atlassian-crowd/database database
+
+    substituteInPlace apache-tomcat/bin/startup.sh --replace start run
+
+    echo "crowd.home=${home}" > crowd-webapp/WEB-INF/classes/crowd-init.properties
+    substituteInPlace build.properties \
+      --replace "openidserver.url=http://localhost:8095/openidserver" \
+                "openidserver.url=http://localhost:${toString port}/openidserver"
+    substituteInPlace crowd-openidserver-webapp/WEB-INF/classes/crowd.properties \
+      --replace "http://localhost:8095/" \
+                "http://localhost:${toString port}/"
+    sed -r -i crowd-openidserver-webapp/WEB-INF/classes/crowd.properties \
+      -e 's,application.password\s+password,application.password ${openidPassword},'
+  '' + stdenv.lib.optionalString (proxyUrl != null) ''
+    sed -i crowd-openidserver-webapp/WEB-INF/classes/crowd.properties \
+      -e 's,http://localhost:${toString port}/openidserver,${proxyUrl}/openidserver,'
+  '';
+
+  installPhase = ''
+    cp -rva . $out
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Single sign-on and identity management tool";
+    homepage = https://www.atlassian.com/software/crowd;
+    license = licenses.unfree;
+    maintainers = with maintainers; [ fpletz globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/atlassian/jira.nix b/nixpkgs/pkgs/servers/atlassian/jira.nix
new file mode 100644
index 000000000000..b9c5951b0b29
--- /dev/null
+++ b/nixpkgs/pkgs/servers/atlassian/jira.nix
@@ -0,0 +1,43 @@
+{ stdenv, lib, fetchurl
+, enableSSO ? false
+, crowdProperties ? null
+}:
+
+stdenv.mkDerivation rec {
+  name = "atlassian-jira-${version}";
+  version = "7.12.3";
+
+  src = fetchurl {
+    url = "https://downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-${version}.tar.gz";
+    sha256 = "0gna0pr8g78pahm4ci14742w40f0nwfn4hpm3iwbsiw2w6vziahv";
+  };
+
+  phases = [ "unpackPhase" "buildPhase" "installPhase" "fixupPhase" ];
+
+  buildPhase = ''
+    mv conf/server.xml conf/server.xml.dist
+    ln -sf /run/atlassian-jira/server.xml conf/server.xml
+    rm -r logs; ln -sf /run/atlassian-jira/logs/ .
+    rm -r work; ln -sf /run/atlassian-jira/work/ .
+    rm -r temp; ln -sf /run/atlassian-jira/temp/ .
+  '' + lib.optionalString enableSSO ''
+    substituteInPlace atlassian-jira/WEB-INF/classes/seraph-config.xml \
+      --replace com.atlassian.jira.security.login.JiraSeraphAuthenticator \
+                com.atlassian.jira.security.login.SSOSeraphAuthenticator
+  '' + lib.optionalString (crowdProperties != null) ''
+    cat <<EOF > atlassian-jira/WEB-INF/classes/crowd.properties
+    ${crowdProperties}
+    EOF
+  '';
+
+  installPhase = ''
+    cp -rva . $out
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Proprietary issue tracking product, also providing project management functions";
+    homepage = https://www.atlassian.com/software/jira;
+    license = licenses.unfree;
+    maintainers = with maintainers; [ fpletz globin ciil ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/beanstalkd/default.nix b/nixpkgs/pkgs/servers/beanstalkd/default.nix
new file mode 100644
index 000000000000..ef4621fb9a65
--- /dev/null
+++ b/nixpkgs/pkgs/servers/beanstalkd/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl }:
+stdenv.mkDerivation rec {
+  version = "1.10";
+  name = "beanstalkd-${version}";
+
+  installPhase=''make install "PREFIX=$out"'';
+
+  src = fetchurl {
+    url = "https://github.com/kr/beanstalkd/archive/v${version}.tar.gz";
+    sha256 = "0n9dlmiddcfl7i0f1lwfhqiwyvf26493fxfcmn8jm30nbqciwfwj";
+  };
+
+  hardeningDisable = [ "fortify" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://kr.github.io/beanstalkd/;
+    description = "A simple, fast work queue";
+    license = licenses.mit;
+    maintainers = [ maintainers.zimbatm ];
+    platforms = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/bird/default.nix b/nixpkgs/pkgs/servers/bird/default.nix
new file mode 100644
index 000000000000..5683da5e8e3f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/bird/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchurl, flex, bison, readline }:
+
+with lib;
+
+let
+
+  generic = { version, sha256, enableIPv6 ? false }:
+    stdenv.mkDerivation rec {
+      name = "bird-${version}";
+
+      src = fetchurl {
+        inherit sha256;
+        url = "ftp://bird.network.cz/pub/bird/${name}.tar.gz";
+      };
+
+      nativeBuildInputs = [ flex bison ];
+      buildInputs = [ readline ];
+
+      patches = [
+        (./. + "/dont-create-sysconfdir-${builtins.substring 0 1 version}.patch")
+      ];
+
+      configureFlags = [
+        "--localstatedir=/var"
+      ] ++ optional enableIPv6 "--enable-ipv6";
+
+      meta = {
+        description = "BIRD Internet Routing Daemon";
+        homepage = http://bird.network.cz;
+        license = licenses.gpl2Plus;
+        maintainers = with maintainers; [ fpletz ];
+        platforms = platforms.linux;
+      };
+    };
+
+in
+
+{
+  bird = generic {
+    version = "1.6.3";
+    sha256 = "0z3yrxqb0p7f8b7r2gk4mvrwfzk45zx7yr9aifbvba1vgksiri9r";
+  };
+
+  bird6 = generic {
+    version = "1.6.3";
+    sha256 = "0z3yrxqb0p7f8b7r2gk4mvrwfzk45zx7yr9aifbvba1vgksiri9r";
+    enableIPv6 = true;
+  };
+
+  bird2 = generic {
+    version = "2.0.2";
+    sha256 = "03s8hcl761y3489j1krarm3r3iy5qid26508i91yvy38ypb92pq3";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/bird/dont-create-sysconfdir-1.patch b/nixpkgs/pkgs/servers/bird/dont-create-sysconfdir-1.patch
new file mode 100644
index 000000000000..0a11c8a2a8d8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/bird/dont-create-sysconfdir-1.patch
@@ -0,0 +1,13 @@
+diff --git a/tools/Makefile.in b/tools/Makefile.in
+index 062ba91..4fd7453 100644
+--- a/tools/Makefile.in
++++ b/tools/Makefile.in
+@@ -68,7 +68,7 @@ tags:
+ 	cd $(srcdir) ; etags -lc `find $(static-dirs) $(addprefix $(objdir)/,$(dynamic-dirs)) $(client-dirs) -name *.[chY]`
+ 
+ install: all
+-	$(INSTALL) -d $(DESTDIR)/$(sbindir) $(DESTDIR)/$(sysconfdir) $(DESTDIR)/@runtimedir@
++	$(INSTALL) -d $(DESTDIR)/$(sbindir) $(DESTDIR)/$(sysconfdir)
+ 	$(INSTALL_PROGRAM) $(exedir)/bird $(DESTDIR)/$(sbindir)/bird@SUFFIX@
+ 	$(INSTALL_PROGRAM) $(exedir)/birdcl $(DESTDIR)/$(sbindir)/birdcl@SUFFIX@
+ 	if test -n "@CLIENT@" ; then								\
diff --git a/nixpkgs/pkgs/servers/bird/dont-create-sysconfdir-2.patch b/nixpkgs/pkgs/servers/bird/dont-create-sysconfdir-2.patch
new file mode 100644
index 000000000000..fd86da8a1298
--- /dev/null
+++ b/nixpkgs/pkgs/servers/bird/dont-create-sysconfdir-2.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile.in b/Makefile.in
+index fdd5e6c..45f81a1 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -165,7 +165,7 @@ tags:
+ # Install
+ 
+ install: all
+-	$(INSTALL) -d $(DESTDIR)/$(sbindir) $(DESTDIR)/$(sysconfdir) $(DESTDIR)/@runtimedir@
++	$(INSTALL) -d $(DESTDIR)/$(sbindir) $(DESTDIR)/$(sysconfdir)
+ 	$(INSTALL_PROGRAM) $(exedir)/bird $(DESTDIR)/$(sbindir)/bird
+ 	$(INSTALL_PROGRAM) $(exedir)/birdcl $(DESTDIR)/$(sbindir)/birdcl
+ 	if test -n "@CLIENT@" ; then								\
diff --git a/nixpkgs/pkgs/servers/brickd/default.nix b/nixpkgs/pkgs/servers/brickd/default.nix
new file mode 100644
index 000000000000..4b71aaeca3ad
--- /dev/null
+++ b/nixpkgs/pkgs/servers/brickd/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchgit, libusb, pkgconfig, pmutils, udev} :
+
+let
+
+version = "2.1.1";
+daemonlib = fetchgit {
+    url = "https://github.com/Tinkerforge/daemonlib.git";
+    rev = "refs/tags/brickd-${version}";
+    sha256 = "097kaz7d0rzg0ijvcna3y620k3m5fgxpqsac5gbhah8pd7vlj1a4";
+  };
+
+in
+
+stdenv.mkDerivation rec {
+  name = "brickd-${version}";
+
+  src = fetchgit {
+    url = "git://github.com/Tinkerforge/brickd.git";
+    rev = "refs/tags/v${version}";
+    sha256 = "0m2q01sbgf8z4559jpr6k3jivb8x98vxv1fhgx8nfcjbwz1q83gb";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libusb pmutils udev ];
+
+  # shell thing didn't work so i replaced it using nix
+  prePatch = ''
+    substituteInPlace src/brickd/Makefile --replace 'PKG_CONFIG := $(shell which pkg-config 2> /dev/null)' "PKG_CONFIG := $pkgconfig/bin/pkg_config";
+  '';
+
+  buildPhase = ''
+    export
+    # build the brickd binary
+    mkdir src/daemonlib
+    cp -r ${daemonlib}/* src/daemonlib
+    cd src/brickd
+    make
+
+    # build and execute the unit tests
+    cd ../tests
+    make
+    for i in array_test base58_test node_test putenv_test queue_test sha1_test; do
+      echo "running unit test $i:"
+      ./$i
+    done
+  '';
+
+  installPhase = ''
+    cd ../brickd
+    mkdir -p $out/bin
+    cp brickd $out/bin/brickd
+  '';
+
+  meta = {
+    homepage = https://www.tinkerforge.com/;
+    description = "A daemon (or service on Windows) that acts as a bridge between the Bricks/Bricklets and the API bindings for the different programming languages";
+    maintainers = [ stdenv.lib.maintainers.qknight ];
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/caddy/default.nix b/nixpkgs/pkgs/servers/caddy/default.nix
new file mode 100644
index 000000000000..a8db20cede79
--- /dev/null
+++ b/nixpkgs/pkgs/servers/caddy/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "caddy-${version}";
+  version = "0.11.1";
+
+  goPackagePath = "github.com/mholt/caddy";
+
+  subPackages = [ "caddy" ];
+
+  src = fetchFromGitHub {
+    owner = "mholt";
+    repo = "caddy";
+    rev = "v${version}";
+    sha256 = "0v35d3dy0f88wgk1vzznbx7p15vjjf7xm3qfi2c3192rsxgzvy0l";
+  };
+
+  buildFlagsArray = ''
+    -ldflags=
+      -X github.com/mholt/caddy/caddy/caddymain.gitTag=v${version}
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://caddyserver.com;
+    description = "Fast, cross-platform HTTP/2 web server with automatic HTTPS";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ rushmorem fpletz zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/cayley/default.nix b/nixpkgs/pkgs/servers/cayley/default.nix
new file mode 100644
index 000000000000..befa36edd9e2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/cayley/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "cayley-${version}";
+  version = "0.6.1";
+
+  goPackagePath = "github.com/cayleygraph/cayley";
+
+  src = fetchFromGitHub {
+    owner = "cayleygraph";
+    repo = "cayley";
+    rev = "v${version}";
+    sha256 = "1r0kw3y32bqm7g37svzrch2qj9n45p93xmsrf7dj1cg4wwkb65ry";
+  };
+
+  goDeps = ./deps.nix;
+
+  buildFlagsArray = ''
+    -ldflags=
+      -X=main.Version=${version}
+  '';
+  
+  meta = {
+    homepage = https://cayley.io/;
+    description = "A graph database inspired by Freebase and Knowledge Graph";
+    maintainers = with stdenv.lib.maintainers; [ sigma ];
+    license = stdenv.lib.licenses.asl20;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/cayley/deps.nix b/nixpkgs/pkgs/servers/cayley/deps.nix
new file mode 100644
index 000000000000..1e6fadf9f4d8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/cayley/deps.nix
@@ -0,0 +1,272 @@
+[
+  {
+    goPackagePath = "github.com/badgerodon/peg";
+    fetch = {
+      type = "git";
+      url = "https://github.com/badgerodon/peg";
+      rev = "9e5f7f4d07ca576562618c23e8abadda278b684f";
+      sha256 = "12vd7hzdgknn8byz77lmvcrz9m5lvmffdnz2wwk83304przkra11";
+    };
+  }
+  {
+    goPackagePath = "github.com/boltdb/bolt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/boltdb/bolt";
+      rev = "a705895fdad108f053eae7ee011ed94a0541ee13";
+      sha256 = "0ql67l2hmjhplkl80j9a49qlra4qx671il5rgn58afkvk20cgq2r";
+    };
+  }
+  {
+    goPackagePath = "github.com/cznic/mathutil";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cznic/mathutil";
+      rev = "f9551431b78e71ee24939a1e9d8f49f43898b5cd";
+      sha256 = "1158mlwzryyna1qslr9v88i0k8x6m8vs4rljnnwh04rmd63ksj75";
+    };
+  }
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "2df174808ee097f90d259e432cc04442cf60be21";
+      sha256 = "0jghd5dmwqpcjbxij9yjj8sjzll9s65i2qnxd8rdzwh77xdsfm9g";
+    };
+  }
+  {
+    goPackagePath = "github.com/dlclark/regexp2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dlclark/regexp2";
+      rev = "4009c9dc49dd8906bfd4d479c255470d6a477ce5";
+      sha256 = "1r6f0q1jvn1lkwqlrmmg5d90p6zss8s64jyp91hp6i97vpahq8xz";
+    };
+  }
+  {
+    goPackagePath = "github.com/dop251/goja";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dop251/goja";
+      rev = "64f863c4eb0329df18ecd1dab1e03609556bfaca";
+      sha256 = "0smipfs7fja286nvlr7q4b8f815br0nia0k4xp8y5fvprrzrm64h";
+    };
+  }
+  {
+    goPackagePath = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev = "50d1bd39ce4e7a96b75e3e040be9caf79dbb4c61";
+      sha256 = "09cad9j98pdqh1sp191j92ng6lvw9la3k3v6m5mv38nwirpwzra1";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/glog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/glog";
+      rev = "23def4e6c14b4da8ac2ed8007337bc5eb5007998";
+      sha256 = "0jb2834rw5sykfr937fxi8hxi2zy80sj2bdn9b3jb4b26ksqng30";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "888eb0692c857ec880338addf316bd662d5e630e";
+      sha256 = "1vhx2dwr71hma9z3dfb3l1yrkjlry0glwxknxzyp9ds51i6pjiq0";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/go-cleanhttp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/go-cleanhttp";
+      rev = "ad28ea4487f05916463e2423a55166280e8254b5";
+      sha256 = "0xw0qas3ixg8p2xh09hhc81km0mfn9lbnfgrdb309hzcwhmiyqjm";
+    };
+  }
+  {
+    goPackagePath = "github.com/julienschmidt/httprouter";
+    fetch = {
+      type = "git";
+      url = "https://github.com/julienschmidt/httprouter";
+      rev = "b59a38004596b696aca7aa2adccfa68760864d86";
+      sha256 = "0j1w2fkcghyw3lcsc13lwf2zqar9xyni2g7fqp4aq8g08ii7paac";
+    };
+  }
+  {
+    goPackagePath = "github.com/lib/pq";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lib/pq";
+      rev = "0dad96c0b94f8dee039aa40467f767467392a0af";
+      sha256 = "06c38iy37251mh8jy9s8n97b01pjnqpq8ii77nnmqh1dsph37jz4";
+    };
+  }
+  {
+    goPackagePath = "github.com/linkeddata/gojsonld";
+    fetch = {
+      type = "git";
+      url = "https://github.com/linkeddata/gojsonld";
+      rev = "a223ef39bb925d36d4c410d3e35b0e34e370cc31";
+      sha256 = "1i3vl7gbkq2xl2wyv0kszj0x32vp8jw1cf0ngpdqdhdvnbfi1w7i";
+    };
+  }
+  {
+    goPackagePath = "github.com/pborman/uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pborman/uuid";
+      rev = "ca53cad383cad2479bbba7f7a1a05797ec1386e4";
+      sha256 = "0rcx669bbjkkwdlw81spnra4ffgzd4rbpywnrj3w41m9vq6mk1gn";
+    };
+  }
+  {
+    goPackagePath = "github.com/peterh/liner";
+    fetch = {
+      type = "git";
+      url = "https://github.com/peterh/liner";
+      rev = "1bb0d1c1a25ed393d8feb09bab039b2b1b1fbced";
+      sha256 = "05ihxpmp6x3hw71xzvjdgxnyvyx2s4lf23xqnfjj16s4j4qidc48";
+    };
+  }
+  {
+    goPackagePath = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev = "d8ed2627bdf02c080bf22230dbb337003b7aba2d";
+      sha256 = "0w1jp4k4zbnrxh3jvh8fgbjgqpf2hg31pbj8fb32kh26px9ldpbs";
+    };
+  }
+  {
+    goPackagePath = "github.com/robertkrimen/otto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/robertkrimen/otto";
+      rev = "d1b4d8ef0e0e4b088c8328c95ca63ab9ebd8fc9d";
+      sha256 = "0i31p3paz3n7qi2v1g77lm3cx2hssgwgcfpar4qc2vj7m4766884";
+    };
+  }
+  {
+    goPackagePath = "github.com/russross/blackfriday";
+    fetch = {
+      type = "git";
+      url = "https://github.com/russross/blackfriday";
+      rev = "17bb7999de6cfb791d4f8986cc00b3309b370cdb";
+      sha256 = "1md0sjw69mj359cb4c8ghzllcbn2lnkvby1203wl0pf5wbyfvm5s";
+    };
+  }
+  {
+    goPackagePath = "github.com/shurcooL/sanitized_anchor_name";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shurcooL/sanitized_anchor_name";
+      rev = "8e87604bec3c645a4eeaee97dfec9f25811ff20d";
+      sha256 = "05b6yj23c3xx446kanhaj1l83av8676z7si8n1f4sqy2pp7s966v";
+    };
+  }
+  {
+    goPackagePath = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev = "08a8a7c27e3d058a8989316a850daad1c10bf4ab";
+      sha256 = "1fbh1b42alvpbw87v0v2hanliaqp6fm4h9n7byk921mcv6dai8fl";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "f390dcf405f7b83c997eac1b06768bb9f44dec18";
+      sha256 = "1l3z0ggdcjspfmm6k9glmh52a9x50806k6yldxql73p4bpynsd9g";
+    };
+  }
+  {
+    goPackagePath = "github.com/syndtr/goleveldb";
+    fetch = {
+      type = "git";
+      url = "https://github.com/syndtr/goleveldb";
+      rev = "4875955338b0a434238a31165cb87255ab6e9e4a";
+      sha256 = "0786j6kizrlskqz196ng4d13363d44whl849jcv1q07yab2nq40i";
+    };
+  }
+  {
+    goPackagePath = "github.com/syndtr/gosnappy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/syndtr/gosnappy";
+      rev = "156a073208e131d7d2e212cb749feae7c339e846";
+      sha256 = "08lf8smnp4imj5fkph9sbqzb4a5n191q9m6b2c5kamp19i9h2y6z";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "6a513affb38dc9788b449d59ffed099b8de18fa0";
+      sha256 = "1g07c05s3ccq0086f0f200k9cfjjzxd4r9nrdilkmy44lbhhrval";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "a646d33e2ee3172a661fc09bca23bb4889a41bc8";
+      sha256 = "1jniqg2nv5zhdzfm9gwfx0s9q8mwxrgcxdbkd6cddk9w0qgji9dc";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "5a42fa2464759cbb7ee0af9de00b54d69f09a29c";
+      sha256 = "0far6mb2ikwzr7icn0yqi9ygl8kv2wsaasyprbqb9qapr0dqjw0s";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/appengine";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/appengine";
+      rev = "4f7eeb5305a4ba1966344836ba4af9996b7b4e05";
+      sha256 = "09pgvlk5ay3f0avi1bawpy8khi3rmkfl36l2yr3ryp8z12i9k2qj";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/mgo.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/mgo.v2";
+      rev = "c6a7dce14133ccac2dcac3793f1d6e2ef048503a";
+      sha256 = "0rg232q1bkq3y3kd5816hgk1jpf7i38aha5q5ia7j6p9xashz7vj";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-sql-driver/mysql";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-sql-driver/mysql";
+      rev = "2e00b5cd70399450106cec6431c2e2ce3cae5034";
+      sha256 = "085g48jq9hzmlcxg122n0c4pi41sc1nn2qpx1vrl2jfa8crsppa5";
+    };
+  }
+  {
+    goPackagePath = "github.com/dennwc/graphql";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dennwc/graphql";
+      rev = "fd5c4aa13f2119414084f229600de0d73f174436";
+      sha256 = "11f9jwfc2j646732gkcjb332ih9fxh04j31zmhvqswx75gvk9wzs";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/clickhouse/default.nix b/nixpkgs/pkgs/servers/clickhouse/default.nix
new file mode 100644
index 000000000000..bddffc52fd77
--- /dev/null
+++ b/nixpkgs/pkgs/servers/clickhouse/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchFromGitHub, cmake, libtool
+, boost, capnproto, cctz, clang-unwrapped, double-conversion, gperftools, icu
+, libcpuid, libxml2, lld, llvm, lz4 , mysql, openssl, poco, re2, rdkafka
+, readline, sparsehash, unixODBC, zstd, ninja, jemalloc
+}:
+
+stdenv.mkDerivation rec {
+  name = "clickhouse-${version}";
+  version = "18.14.18";
+
+  src = fetchFromGitHub {
+    owner  = "yandex";
+    repo   = "ClickHouse";
+    rev    = "v${version}-stable";
+    sha256 = "0nivnmlnamcjxwc66ja9fagi5fqzzjsnrrfk32f4g8sxffx2rjy3";
+  };
+
+  nativeBuildInputs = [ cmake libtool ninja ];
+  buildInputs = [
+    boost capnproto cctz clang-unwrapped double-conversion gperftools icu
+    libcpuid libxml2 lld llvm lz4 mysql.connector-c openssl poco re2 rdkafka
+    readline sparsehash unixODBC zstd jemalloc
+  ];
+
+  cmakeFlags = [
+    "-DENABLE_TESTS=OFF"
+    "-DUNBUNDLED=ON"
+    "-DUSE_STATIC_LIBRARIES=OFF"
+    "-DUSE_INTERNAL_SSL_LIBRARY=False"
+  ];
+  hardeningDisable = [ "format" ];
+
+  patchPhase = ''
+    patchShebangs .
+  '';
+
+  postInstall = ''
+    rm -rf $out/share/clickhouse-test
+
+    sed -i -e '\!<log>/var/log/clickhouse-server/clickhouse-server\.log</log>!d' \
+      $out/etc/clickhouse-server/config.xml
+    substituteInPlace $out/etc/clickhouse-server/config.xml \
+      --replace "<errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>" "<console>1</console>"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://clickhouse.yandex/;
+    description = "Column-oriented database management system";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ orivej ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/cloud-print-connector/default.nix b/nixpkgs/pkgs/servers/cloud-print-connector/default.nix
new file mode 100644
index 000000000000..3db3d9327031
--- /dev/null
+++ b/nixpkgs/pkgs/servers/cloud-print-connector/default.nix
@@ -0,0 +1,35 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.0
+{ stdenv, buildGoPackage, fetchFromGitHub, avahi, cups }:
+
+# TODO: Add a service for gcp-cups-connector and perhaps some other
+# kind of configuration for the same thing that gcp-connector-util
+# provides.
+
+buildGoPackage rec {
+  name = "cloud-print-connector-unstable-${version}";
+  version = "1.11";
+  rev = "481ad139cc023a3ba65e769f08f277368fa8a5de";
+
+  goPackagePath = "github.com/google/cloud-print-connector";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "cloud-print-connector";
+    sha256 = "1vryhhv92bsncy1bsx9j4graz3sz9ddmizakv2fdrns09mmcgchm";
+    rev = "v${version}";
+  };
+
+  goDeps = ./deps.nix;
+
+  buildInputs = [ avahi cups ];
+
+  meta = with stdenv.lib; {
+    description = "Share printers from your Windows, Linux, FreeBSD or macOS computer with ChromeOS and Android devices, using the Cloud Print Connector";
+    homepage = https://github.com/google/cloud-print-connector;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ hodapp ];
+    # TODO: Fix broken build on macOS.  The GitHub presently lists the
+    # FreeBSD build as broken too, but this may change in the future.
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/cloud-print-connector/deps.nix b/nixpkgs/pkgs/servers/cloud-print-connector/deps.nix
new file mode 100644
index 000000000000..67901bdffeef
--- /dev/null
+++ b/nixpkgs/pkgs/servers/cloud-print-connector/deps.nix
@@ -0,0 +1,57 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.0
+[
+  {
+    goPackagePath = "github.com/coreos/go-systemd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/go-systemd";
+      rev = "1f9909e51b2dab2487c26d64c8f2e7e580e4c9f5";
+      sha256 = "1cc76wcmnyhhhi03dsc11lmxjwkzy09k3zx3h78bg05z8lhry4vn";
+    };
+  }
+  {
+    goPackagePath = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev = "d70f47eeca3afd795160003bc6e28b001d60c67c";
+      sha256 = "1xm203qp4sdlvffcbag7v6mc2d6q61i25iiz3y9yqpy25jpcpgif";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "513929065c19401a1c7b76ecd942f9f86a0c061b";
+      sha256 = "19ziin0k3n45nccjbk094f61hr198wzqnas93cmcxdja8f8fz27q";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/oauth2";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/oauth2";
+      rev = "f047394b6d14284165300fd82dad67edb3a4d7f6";
+      sha256 = "1l1a2iz1nmfmzzbjj1h8066prag4jvjqh13iv1jdlh05fgv6769i";
+    };
+  }
+  {
+    goPackagePath = "launchpad.net/go-xdg/v0";
+    fetch = {
+      type = "bzr";
+      url = "http://bazaar.launchpad.net/~chipaca/go-xdg/v0/";
+      rev = "10";
+      sha256 = "0fd68kkxzxjanpgannpys962bxzqdf8c1qvzk687hv504a3dp76f";
+    };
+  }
+  {
+    goPackagePath = "github.com/satori/go.uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/satori/go.uuid";
+      rev = "879c5887cd475cd7864858769793b2ceb0d44feb";
+      sha256 = "1nbydsmjr60904kz5d46nib0zid5kcv4gk9wayi44gn5wlzz80zp";
+    };
+  }
+ ]
diff --git a/nixpkgs/pkgs/servers/computing/slurm-spank-x11/default.nix b/nixpkgs/pkgs/servers/computing/slurm-spank-x11/default.nix
new file mode 100644
index 000000000000..13fad7059afe
--- /dev/null
+++ b/nixpkgs/pkgs/servers/computing/slurm-spank-x11/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, slurm } :
+let
+  version = "0.2.5";
+in
+stdenv.mkDerivation {
+  name = "slurm-spank-x11-${version}";
+  version = version;
+
+  src = fetchFromGitHub {
+    owner = "hautreux";
+    repo = "slurm-spank-x11";
+    rev = version;
+    sha256 = "1dmsr7whxcxwnlvl1x4s3bqr5cr6q5ssb28vqi67w5hj4sshisry";
+  };
+
+  buildPhase = ''
+      gcc -DX11_LIBEXEC_PROG="\"$out/bin/slurm-spank-x11\"" \
+          -g -o slurm-spank-x11 slurm-spank-x11.c
+      gcc -I${slurm.dev}/include -DX11_LIBEXEC_PROG="\"$out/bin/slurm-spank-x11\"" -shared -fPIC \
+          -g -o x11.so slurm-spank-x11-plug.c
+    '';
+
+  installPhase = ''
+      mkdir -p $out/bin $out/lib
+      install -m 755 slurm-spank-x11 $out/bin
+      install -m 755 x11.so $out/lib
+    '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/hautreux/slurm-spank-x11;
+    description = "Plugin for SLURM to allow for interactive X11 sessions";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ markuskowa ];
+  };
+}
+
+
+
diff --git a/nixpkgs/pkgs/servers/computing/slurm/default.nix b/nixpkgs/pkgs/servers/computing/slurm/default.nix
new file mode 100644
index 000000000000..c30ee04623db
--- /dev/null
+++ b/nixpkgs/pkgs/servers/computing/slurm/default.nix
@@ -0,0 +1,72 @@
+{ stdenv, fetchFromGitHub, pkgconfig, libtool, curl
+, python, munge, perl, pam, openssl, zlib
+, ncurses, mysql, gtk2, lua, hwloc, numactl
+, readline, freeipmi, libssh2, xorg, lz4
+# enable internal X11 support via libssh2
+, enableX11 ? true
+}:
+
+stdenv.mkDerivation rec {
+  name = "slurm-${version}";
+  version = "18.08.4.1";
+
+  # N.B. We use github release tags instead of https://www.schedmd.com/downloads.php
+  # because the latter does not keep older releases.
+  src = fetchFromGitHub {
+    owner = "SchedMD";
+    repo = "slurm";
+    # The release tags use - instead of .
+    rev = "${builtins.replaceStrings ["."] ["-"] name}";
+    sha256 = "1vnlh1fazqa1rhiq5sm3dxgnwf4ipli357686r5w8cgij3m7qj98";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  prePatch = stdenv.lib.optional enableX11 ''
+    substituteInPlace src/common/x11_util.c \
+        --replace '"/usr/bin/xauth"' '"${xorg.xauth}/bin/xauth"'
+  '';
+
+  # nixos test fails to start slurmd with 'undefined symbol: slurm_job_preempt_mode'
+  # https://groups.google.com/forum/#!topic/slurm-devel/QHOajQ84_Es
+  # this doesn't fix tests completely at least makes slurmd to launch
+  hardeningDisable = [ "bindnow" ];
+
+  nativeBuildInputs = [ pkgconfig libtool ];
+  buildInputs = [
+    curl python munge perl pam openssl zlib
+      mysql.connector-c ncurses gtk2 lz4
+      lua hwloc numactl readline freeipmi
+  ] ++ stdenv.lib.optionals enableX11 [ libssh2 xorg.xauth ];
+
+  configureFlags = with stdenv.lib;
+    [ "--with-freeipmi=${freeipmi}"
+      "--with-hwloc=${hwloc.dev}"
+      "--with-lz4=${lz4.dev}"
+      "--with-munge=${munge}"
+      "--with-ssl=${openssl.dev}"
+      "--with-zlib=${zlib}"
+      "--sysconfdir=/etc/slurm"
+    ] ++ (optional (gtk2 == null)  "--disable-gtktest")
+      ++ (optional enableX11 "--with-libssh2=${libssh2.dev}");
+
+
+  preConfigure = ''
+    patchShebangs ./doc/html/shtml2html.py
+    patchShebangs ./doc/man/man2html.py
+  '';
+
+  postInstall = ''
+    rm -f $out/lib/*.la $out/lib/slurm/*.la
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://www.schedmd.com/;
+    description = "Simple Linux Utility for Resource Management";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ jagajaga markuskowa ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/computing/storm/default.nix b/nixpkgs/pkgs/servers/computing/storm/default.nix
new file mode 100644
index 000000000000..8335e40de98f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/computing/storm/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, lib, fetchurl, zip, unzip
+, jzmq, jdk, python
+, confFile ? "", extraLibraryPaths ? [], extraJars ? [] }:
+
+stdenv.mkDerivation rec {
+  name = "apache-storm-" + version;
+  version = "1.2.1";
+  src = fetchurl {
+    url =
+    "mirror://apache/storm/${name}/${name}.tar.gz";
+    sha256 = "177dqgbviagrpvalg8h67mwiwwgmiqsg0hh97hcqqcjg71ypnjkv";
+  };
+
+  buildInputs = [ zip unzip jzmq ];
+
+  installPhase = ''
+    mkdir -p $out/share/${name}
+    mv public $out/docs
+    mv examples $out/share/${name}/.
+
+    rm -f lib/jzmq* || exit 1
+    mv external extlib* lib $out/.
+    mv conf bin $out/.
+    mv log4j2 $out/conf/.
+  '';
+
+  fixupPhase = ''
+    # Fix python reference
+    sed -i \
+      -e '19iPYTHON=${python}/bin/python' \
+      -e 's|#!/usr/bin/.*python|#!${python}/bin/python|' \
+      $out/bin/storm
+    sed -i \
+      -e 's|#!/usr/bin/.*python|#!${python}/bin/python|' \
+      -e "s|STORM_CONF_DIR = .*|STORM_CONF_DIR = os.getenv('STORM_CONF_DIR','$out/conf')|" \
+      -e 's|STORM_LOG4J2_CONF_DIR =.*|STORM_LOG4J2_CONF_DIR = os.path.join(STORM_CONF_DIR, "log4j2")|' \
+        $out/bin/storm.py
+    # Default jdk location
+    sed -i -e 's|#.*export JAVA_HOME=.*|export JAVA_HOME="${jdk.home}"|' \
+           $out/conf/storm-env.sh
+    unzip  $out/lib/storm-core-${version}.jar defaults.yaml;
+    zip -d $out/lib/storm-core-${version}.jar defaults.yaml;
+    sed -i \
+       -e 's|java.library.path: .*|java.library.path: "${jzmq}/lib:${lib.concatStringsSep ":" extraLibraryPaths}"|' \
+       -e 's|storm.log4j2.conf.dir: .*|storm.log4j2.conf.dir: "conf/log4j2"|' \
+      defaults.yaml
+    ${if confFile != "" then ''cat ${confFile} >> defaults.yaml'' else ""}
+    mv defaults.yaml $out/conf;
+
+    # Link to jzmq jar and extra jars
+    cd $out/lib;
+    ln -s ${jzmq}/share/java/*.jar;
+    ${lib.concatMapStrings (jar: "ln -s ${jar};\n") extraJars}
+  '';
+
+  dontStrip = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://storm.apache.org;
+    description = "Distributed realtime computation system";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ edwtjo vizanto ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/computing/torque/default.nix b/nixpkgs/pkgs/servers/computing/torque/default.nix
new file mode 100644
index 000000000000..35c830dff8a5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/computing/torque/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchurl, openssl, flex, bison, pkgconfig, groff, libxml2, utillinux
+, file, libtool, which }:
+
+stdenv.mkDerivation rec {
+  name = "torque-4.2.10";
+
+  src = fetchurl {
+    name = "${name}.tar.gz";
+    url = "http://www.adaptivecomputing.com/index.php?wpfb_dl=2880";
+    sha256 = "1qpsk3bla6b6m7m0i1xpr183yj79liy3p34xhnz1grgq0776wg5l";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ openssl flex bison groff libxml2 utillinux libtool
+                  which ];
+
+  enableParallelBuilding = true;
+
+  # added to fix build with gcc7
+  NIX_CFLAGS_COMPILE = [ "-fpermissive" ];
+
+  preConfigure = ''
+   substituteInPlace ./configure \
+     --replace '/usr/bin/file' '${file}/bin/file'
+
+   # fix broken libxml2 detection
+   sed -i '/xmlLib\=/c\xmlLib=xml2' ./configure
+
+   for s in fifo cray_t3e dec_cluster msic_cluster sgi_origin umn_cluster; do
+     substituteInPlace src/scheduler.cc/samples/$s/Makefile.in \
+       --replace "schedprivdir = " "schedprivdir = $out/"
+   done
+
+   for f in $(find ./ -name Makefile.in); do
+     echo patching $f...
+     sed -i $f -e '/PBS_MKDIRS/d' -e '/chmod u+s/d'
+   done
+
+  '';
+
+  postInstall = ''
+    mv $out/sbin/* $out/bin/
+    rmdir $out/sbin
+    cp -v buildutils/pbs_mkdirs $out/bin/
+    cp -v torque.setup $out/bin/
+    chmod +x $out/bin/pbs_mkdirs $out/bin/torque.setup
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.adaptivecomputing.com/products/open-source/torque;
+    description = "Resource management system for submitting and controlling jobs on supercomputers, clusters, and grids";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/confluent/default.nix b/nixpkgs/pkgs/servers/confluent/default.nix
new file mode 100644
index 000000000000..dd42f38f62ab
--- /dev/null
+++ b/nixpkgs/pkgs/servers/confluent/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, lib, fetchurl, jre, makeWrapper, bash, gnused }:
+
+with lib;
+
+let
+  confluentVersion = "4.1.1";
+  scalaVersion = "2.11";
+  sha256 = "e00eb4c6c7445ad7a43c9cd237778d1cd184322aebf5ff64a8e9806ba2cc27aa";
+in stdenv.mkDerivation rec {
+  name = "confluent-${version}";
+  version = "${confluentVersion}-${scalaVersion}";
+
+  src = fetchurl {
+    url = "http://packages.confluent.io/archive/${versions.majorMinor confluentVersion}/confluent-oss-${version}.tar.gz";
+    inherit sha256;
+  };
+
+  buildInputs = [ jre makeWrapper bash ];
+
+  installPhase = ''
+    mkdir -p $out
+    cp -R bin etc share src $out
+    rm -rf $out/bin/windows
+
+    patchShebangs $out/bin
+
+    # allow us the specify logging directory using env
+    substituteInPlace $out/bin/kafka-run-class \
+      --replace 'LOG_DIR="$base_dir/logs"' 'LOG_DIR="$KAFKA_LOG_DIR"'
+
+    substituteInPlace $out/bin/ksql-run-class \
+      --replace 'LOG_DIR="$base_dir/logs"' 'LOG_DIR="$KAFKA_LOG_DIR"'
+
+    for p in $out/bin\/*; do
+      wrapProgram $p \
+        --set JAVA_HOME "${jre}" \
+        --set KAFKA_LOG_DIR "/tmp/apache-kafka-logs" \
+        --prefix PATH : "${bash}/bin:${gnused}/bin"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.confluent.io/;
+    description = "Confluent platform";
+    license = licenses.asl20;
+    maintainers = [ maintainers.offline ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/consul/default.nix b/nixpkgs/pkgs/servers/consul/default.nix
new file mode 100644
index 000000000000..d1dcd78667f0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/consul/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "consul-${version}";
+  version = "1.3.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/hashicorp/consul";
+
+  # Note: Currently only release tags are supported, because they have the Consul UI
+  # vendored. See
+  #   https://github.com/NixOS/nixpkgs/pull/48714#issuecomment-433454834
+  # If you want to use a non-release commit as `src`, you probably want to improve
+  # this derivation so that it can build the UI's JavaScript from source.
+  # See https://github.com/NixOS/nixpkgs/pull/49082 for something like that.
+  # Or, if you want to patch something that doesn't touch the UI, you may want
+  # to apply your changes as patches on top of a release commit.
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = "consul";
+    inherit rev;
+    sha256 = "1zv84snvrjm74w3v3rr27linsbxj00m73xd047sb78a4766xs2h0";
+  };
+
+  preBuild = ''
+    buildFlagsArray+=("-ldflags" "-X github.com/hashicorp/consul/version.GitDescribe=v${version} -X github.com/hashicorp/consul/version.Version=${version} -X github.com/hashicorp/consul/version.VersionPrerelease=")
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tool for service discovery, monitoring and configuration";
+    homepage = https://www.consul.io/;
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ pradeepchhetri vdemeester nh2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/corosync/default.nix b/nixpkgs/pkgs/servers/corosync/default.nix
new file mode 100644
index 000000000000..d1dd7c05929d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/corosync/default.nix
@@ -0,0 +1,72 @@
+{ stdenv, fetchurl, makeWrapper, pkgconfig, nss, nspr, libqb
+, dbus, rdma-core, libstatgrab, net_snmp
+, enableDbus ? false
+, enableInfiniBandRdma ? false
+, enableMonitoring ? false
+, enableSnmp ? false
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  name = "corosync-2.4.3";
+
+  src = fetchurl {
+    url = "http://build.clusterlabs.org/corosync/releases/${name}.tar.gz";
+    sha256 = "15y5la04qn2lh1gabyifygzpa4dx3ndk5yhmaf7azxyjx0if9rxi";
+  };
+
+  nativeBuildInputs = [ makeWrapper pkgconfig ];
+
+  buildInputs = [
+    nss nspr libqb
+  ] ++ optional enableDbus dbus
+    ++ optional enableInfiniBandRdma rdma-core
+    ++ optional enableMonitoring libstatgrab
+    ++ optional enableSnmp net_snmp;
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-logdir=/var/log/corosync"
+    "--enable-watchdog"
+    "--enable-qdevices"
+  ] ++ optional enableDbus "--enable-dbus"
+    ++ optional enableInfiniBandRdma "--enable-rdma"
+    ++ optional enableMonitoring "--enable-monitoring"
+    ++ optional enableSnmp "--enable-snmp";
+
+  installFlags = [
+    "sysconfdir=$(out)/etc"
+    "localstatedir=$(out)/var"
+    "COROSYSCONFDIR=$(out)/etc/corosync"
+    "INITDDIR=$(out)/etc/init.d"
+    "LOGROTATEDIR=$(out)/etc/logrotate.d"
+  ];
+
+  preConfigure = optionalString enableInfiniBandRdma ''
+    # configure looks for the pkg-config files
+    # of librdmacm and libibverbs
+    # Howver, rmda-core does not provide a pkg-config file
+    # We give the flags manually here:
+    export rdmacm_LIBS=-lrdmacm
+    export rdmacm_CFLAGS=" "
+    export ibverbs_LIBS=-libverbs
+    export ibverbs_CFLAGS=" "
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/corosync-blackbox \
+      --prefix PATH ":" "$out/sbin:${libqb}/sbin"
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://corosync.org/;
+    description = "A Group Communication System with features for implementing high availability within applications";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ wkennington montag451 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/coturn/default.nix b/nixpkgs/pkgs/servers/coturn/default.nix
new file mode 100644
index 000000000000..9bf461938cdb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/coturn/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, openssl, libevent }:
+
+stdenv.mkDerivation rec {
+  name = "coturn-${version}";
+  version = "4.5.0.8";
+
+  src = fetchFromGitHub {
+    owner = "coturn";
+    repo = "coturn";
+    rev = "${version}";
+    sha256 = "1l2q76lzv2gff832wrqd9dcilyaqx91pixyz335822ypra89mdp8";
+  };
+
+  buildInputs = [ openssl libevent ];
+
+  patches = [ ./pure-configure.patch ];
+
+  meta = with stdenv.lib; {
+    homepage = http://coturn.net/;
+    license = with licenses; [ bsd3 ];
+    description = "A TURN server";
+    platforms = platforms.all;
+    broken = stdenv.isDarwin; # 2018-10-21
+    maintainers = [ maintainers.ralith ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/coturn/pure-configure.patch b/nixpkgs/pkgs/servers/coturn/pure-configure.patch
new file mode 100644
index 000000000000..0315a71b1844
--- /dev/null
+++ b/nixpkgs/pkgs/servers/coturn/pure-configure.patch
@@ -0,0 +1,17 @@
+diff --git a/configure b/configure
+index 28a0625..ea25488 100755
+--- a/configure
++++ b/configure
+@@ -624,12 +624,6 @@ fi
+ 
+ TMPDIR="."
+ 
+-if [ -d /var/tmp ] ; then
+-  TMPDIR="/var/tmp"
+-elif [ -d /tmp ] ; then
+-  TMPDIR=/tmp
+-fi
+-
+ ${ECHO_CMD} Use TMP dir ${TMPDIR}
+ 
+ #########################
diff --git a/nixpkgs/pkgs/servers/couchpotato/default.nix b/nixpkgs/pkgs/servers/couchpotato/default.nix
new file mode 100644
index 000000000000..a996cec0d5b5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/couchpotato/default.nix
@@ -0,0 +1,43 @@
+{ fetchurl, pythonPackages, lib }:
+
+with pythonPackages;
+
+buildPythonApplication rec {
+  name = "couchpotato-${version}";
+  version = "3.0.1";
+  disabled = isPy3k;
+
+  src = fetchurl {
+    url = "https://github.com/CouchPotato/CouchPotatoServer/archive/build/${version}.tar.gz";
+    sha256 = "1xwjis3ijh1rff32mpdsphmsclf0lkpd3phpgxkccrigq1m9r3zh";
+  };
+
+  format = "other";
+
+  postPatch = ''
+    substituteInPlace CouchPotato.py --replace "dirname(os.path.abspath(__file__))" "os.path.join(dirname(os.path.abspath(__file__)), '../${python.sitePackages}')"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    mkdir -p $out/${python.sitePackages}/
+
+    cp -r libs/* $out/${python.sitePackages}/
+    cp -r couchpotato $out/${python.sitePackages}/
+
+    cp CouchPotato.py $out/bin/couchpotato
+    chmod +x $out/bin/*
+  '';
+
+  fixupPhase = ''
+    wrapProgram "$out/bin/couchpotato" --set PYTHONPATH "$PYTHONPATH:$out/${python.sitePackages}" \
+                                       --set PATH ${python}/bin
+  '';
+
+  meta = {
+    description = "Automatic movie downloading via NZBs and torrents";
+    license     = lib.licenses.gpl3;
+    homepage    = https://couchpota.to/;
+    maintainers = with lib.maintainers; [ fadenb ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dante/default.nix b/nixpkgs/pkgs/servers/dante/default.nix
new file mode 100644
index 000000000000..1c093facde5c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dante/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, pam, libkrb5, cyrus_sasl, miniupnpc }:
+
+stdenv.mkDerivation rec {
+  name = "dante-${version}";
+  version = "1.4.2";
+
+  src = fetchurl {
+    url = "https://www.inet.no/dante/files/${name}.tar.gz";
+    sha256 = "1bfafnm445afrmyxvvcl8ckq0p59yzykmr3y8qvryzrscd85g8ms";
+  };
+
+  buildInputs = [ pam libkrb5 cyrus_sasl miniupnpc ];
+
+  configureFlags = [
+    "--with-libc=libc.so.6"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A circuit-level SOCKS client/server that can be used to provide convenient and secure network connectivity.";
+    homepage    = "https://www.inet.no/dante/";
+    maintainers = [ maintainers.arobyn ];
+    license     = licenses.bsdOriginal;
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dex/default.nix b/nixpkgs/pkgs/servers/dex/default.nix
new file mode 100644
index 000000000000..119d5f03f626
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dex/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+let version = "2.4.1"; in
+
+buildGoPackage rec {
+  name = "dex-${version}";
+
+  goPackagePath = "github.com/coreos/dex";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "coreos";
+    repo = "dex";
+    sha256 = "11qpn3wh74mq16xgl9l50n2v02ffqcd14xccf77j5il04xr764nx";
+  };
+
+  subPackages = [
+    "cmd/dex"
+  ];
+
+  buildFlagsArray = [
+    "-ldflags=-w -X ${goPackagePath}/version.Version=${src.rev}"
+  ];
+
+  meta = {
+    description = "OpenID Connect and OAuth2 identity provider with pluggable connectors";
+    license = lib.licenses.asl20;
+    homepage = https://github.com/coreos/dex;
+    maintainers = with lib.maintainers; [benley];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dgraph/default.nix b/nixpkgs/pkgs/servers/dgraph/default.nix
new file mode 100644
index 000000000000..5056df06e598
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dgraph/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "dgraph-${version}";
+  version = "0.8.2";
+
+  goPackagePath = "github.com/dgraph-io/dgraph";
+
+  src = fetchFromGitHub {
+    owner = "dgraph-io";
+    repo = "dgraph";
+    rev = "v${version}";
+    sha256 = "0zc5bda8m2srjbk0gy1nnm0bya8if0kmk1szqr1qv3xifdzmi4nf";
+  };
+
+  extraOutputsToInstall = [ "dashboard" ];
+
+  goDeps = ./deps.nix;
+  subPackages = [ "cmd/dgraph" "cmd/dgraphloader" "cmd/bulkloader"];
+
+  # let's move the dashboard to a different output, to prevent $bin from
+  # depending on $out
+  # TODO: provide a proper npm application for the dashboard.
+  postPatch = ''
+    mv dashboard/* $dashboard
+  '';
+
+  preBuild = ''
+    export buildFlagsArray="-ldflags=\
+      -X github.com/dgraph-io/dgraph/x.dgraphVersion=${version} \
+      -X github.com/dgraph-io/dgraph/cmd/dgraph/main.uiDir=$dashboard/src/assets/"
+  '';
+
+  meta = {
+    homepage = "https://dgraph.io/";
+    description = "Fast, Distributed Graph DB";
+    maintainers = with stdenv.lib.maintainers; [ sigma ];
+    license = stdenv.lib.licenses.agpl3;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dgraph/deps.nix b/nixpkgs/pkgs/servers/dgraph/deps.nix
new file mode 100644
index 000000000000..89e00e0d8cb3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dgraph/deps.nix
@@ -0,0 +1,326 @@
+[
+  {
+    goPackagePath = "github.com/AndreasBriese/bbloom";
+    fetch = {
+      type = "git";
+      url = "https://github.com/AndreasBriese/bbloom";
+      rev = "28f7e881ca57bc00e028f9ede9f0d9104cfeef5e";
+      sha256 = "03cqhqvdz8c9by5w5ls4kwnnwlm6b2kkslc6m120fanw1lgamfzp";
+    };
+  }
+  {
+    goPackagePath = "github.com/MakeNowJust/heredoc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/MakeNowJust/heredoc";
+      rev = "1d91351acdc1cb2f2c995864674b754134b86ca7";
+      sha256 = "0ia1r8ibqmx6zv3wmsvgkpqlhwk79z9l38nzp4gd4f1kcb46856x";
+    };
+  }
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9";
+      sha256 = "1hrybsql68xw57brzj805xx2mghydpdiysv3gbhr7f5wlxj2514y";
+    };
+  }
+  {
+    goPackagePath = "github.com/bkaradzic/go-lz4";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bkaradzic/go-lz4";
+      rev = "7224d8d8f27ef618c0a95f1ae69dbb0488abc33a";
+      sha256 = "10lmya17vdqg2pvqni0p73iahni48s1v11ya9a0hcz4jh5vw4dkb";
+    };
+  }
+  {
+    goPackagePath = "github.com/blevesearch/bleve";
+    fetch = {
+      type = "git";
+      url = "https://github.com/blevesearch/bleve";
+      rev = "a7ebb8480579777c6cd1c4750d2e6b5ff2b49bdd";
+      sha256 = "121jhd158slf4050kmghz25jrvv7gbsan31wr0nxyw9z32lyf6yx";
+    };
+  }
+  {
+    goPackagePath = "github.com/blevesearch/blevex";
+    fetch = {
+      type = "git";
+      url = "https://github.com/blevesearch/blevex";
+      rev = "507dcd576550f9f3260f11495ba2de4e96773a3e";
+      sha256 = "0i9azysvia99fjpx525qnc5rcgv45hfvl3zcs58gvgqyxpzpc78z";
+    };
+  }
+  {
+    goPackagePath = "github.com/blevesearch/go-porterstemmer";
+    fetch = {
+      type = "git";
+      url = "https://github.com/blevesearch/go-porterstemmer";
+      rev = "23a2c8e5cf1f380f27722c6d2ae8896431dc7d0e";
+      sha256 = "0rcfbrad79xd114h3dhy5d3zs3b5bcgqwm3h5ih1lk69zr9wi91d";
+    };
+  }
+  {
+    goPackagePath = "github.com/blevesearch/segment";
+    fetch = {
+      type = "git";
+      url = "https://github.com/blevesearch/segment";
+      rev = "762005e7a34fd909a84586299f1dd457371d36ee";
+      sha256 = "1nrm145sm0xlhqy3d12yipnb16ikjz9ykjcskmkgm7vjm47xkmfl";
+    };
+  }
+  {
+    goPackagePath = "github.com/cockroachdb/cmux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cockroachdb/cmux";
+      rev = "30d10be492927e2dcae0089c374c455d42414fcb";
+      sha256 = "0ixif6hwcm2dpi1si5ah49dmdyy5chillz1048jpvjzwzxyfv1nx";
+    };
+  }
+  {
+    goPackagePath = "github.com/codahale/hdrhistogram";
+    fetch = {
+      type = "git";
+      url = "https://github.com/codahale/hdrhistogram";
+      rev = "3a0bb77429bd3a61596f5e8a3172445844342120";
+      sha256 = "1zampgfjbxy192cbwdi7g86l1idxaam96d834wncnpfdwgh5kl57";
+    };
+  }
+  {
+    goPackagePath = "github.com/coreos/etcd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/etcd";
+      rev = "9d43462d174c664f5edf313dec0de31e1ef4ed47";
+      sha256 = "0qxqjxhhciaacag1jz2rlncmlgw861ig2yx993ylvfm30jvyj2cj";
+    };
+  }
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "6d212800a42e8ab5c146b8ace3490ee17e5225f9";
+      sha256 = "01i0n1s4j7khb7n6mz2wymniz37q0vbzkgfv7rbi6p9hpg227q93";
+    };
+  }
+  {
+    goPackagePath = "github.com/dgraph-io/badger";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgraph-io/badger";
+      rev = "64df7f57d9ee20d7b28de4a3eea90bf8d7310a77";
+      sha256 = "1ikgzn2l62kb238n0wm6s95py5ypv71p09w7zyvzkjf34x675mzz";
+    };
+  }
+  {
+    goPackagePath = "github.com/dgryski/go-farm";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgryski/go-farm";
+      rev = "d1e51a4af19092715f4ce7d8257fe5bc8f8be727";
+      sha256 = "00iijjzdg8g6jbzhdbfw8s2rf0k25gxw4x7h7r6mkxcq18n69182";
+    };
+  }
+  {
+    goPackagePath = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev = "e57a569e1882958f6b188cb42231d6db87701f2a";
+      sha256 = "0r3jpmp6wp4xyrh1ikr8iqld3rg4r1yhv99zxw5zd7d2zprw9yfc";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/geo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/geo";
+      rev = "31fb0106dc4a947e5aaee1fe186e56447f839510";
+      sha256 = "00w4kwm98hrgr3ggfdk1h7qa5gp00z4s0j0iwgwd9rgadb59kb2c";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "2bba0603135d7d7f5cb73b2125beeda19c09f4ef";
+      sha256 = "1xy0bj66qks2xlzxzlfma16w7m8g6rrwawmlhlv68bcw2k5hvvib";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/codesearch";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/codesearch";
+      rev = "a45d81b686e85d01f2838439deaf72126ccd5a96";
+      sha256 = "12bv3yz0l3bmsxbasfgv7scm9j719ch6pmlspv4bd4ix7wjpyhny";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "c12348ce28de40eed0136aa2b644d0ee0650e56c";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev = "17b591df37844cde689f4d5813e5cea0927d8dd2";
+      sha256 = "1f400f1682h1wdjknlh1ad95rbss09g0ia36a8w102bf2f1qfq8l";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/profile";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/profile";
+      rev = "5b67d428864e92711fcbd2f8629456121a56d91f";
+      sha256 = "0blqmvgqvdbqmh3fp9pfdxc9w1qfshrr0zy9whj0sn372bw64qnr";
+    };
+  }
+  {
+    goPackagePath = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev = "792786c7400a136282c1664665ae0a8db921c6c2";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "310ce84375bb84c5cbbf0d05069c92daa5673740";
+      sha256 = "11awb5bjkwqj7va3v7fgniwqkjqhmhjkp01rdvnv4xfp1laxwn7v";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "6f3806018612930941127f2a7c6c453ba2c527d2";
+      sha256 = "1413ibprinxhni51p0755dp57r9wvbw7xgj9nmdaxmhzlqhc86j4";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "0866df4b85a18d652b6965be022d007cdf076822";
+      sha256 = "0zw4rxs6zh9vgxz5wwhjnwa6mgac8jh7mb63viircgh08r889chp";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "e645f4e5aaa8506fc71d6edbc5c4ff02c04c46f2";
+      sha256 = "18hwygbawbqilz7h8fl25xpbciwalkslb4igqn4cr9d8sqp7d3np";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "976c720a22c8eb4eb6a0b4348ad85ad12491a506";
+      sha256 = "0a2gxvqzacrj9k8h022zhr8fchhn9afc6a511m07j71dzw9g4y3m";
+    };
+  }
+  {
+    goPackagePath = "github.com/tebeka/snowball";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tebeka/snowball";
+      rev = "6b06bd306c4e4442a63e546752278920ae487934";
+      sha256 = "110akijkb55k5h7m6mra8fircvi4sxd5xq7lcjgyiqj96srq8v2k";
+    };
+  }
+  {
+    goPackagePath = "github.com/twpayne/go-geom";
+    fetch = {
+      type = "git";
+      url = "https://github.com/twpayne/go-geom";
+      rev = "6753ad11e46b04e21b3f286b342e73a8c4be8216";
+      sha256 = "0qyrdnp7j7lmj0qb0p7k45m757zvbwn78s1apiy46zfnb5415df1";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "22ddb68eccda408bbf17759ac18d3120ce0d4f3f";
+      sha256 = "07ks6qal02iz24vv54qyb90wmsg9vwqc14abf68rakprpy26qwsg";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "d1e1b351919c6738fdeb9893d5c998b161464f0c";
+      sha256 = "0qzbfah03z992zyygfp7imjjas5np2gcar5aanx5y3av5g68ggjp";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "abf9c25f54453410d0c6668e519582a9e1115027";
+      sha256 = "0dmpqjfif2zg6776d366js60k21g81jvsr3jm9dc7fv7w3282al4";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "1cbadb444a806fd9430d14ad08967ed91da4fa0a";
+      sha256 = "0ih9ysagh4ylj08393497sscf3yziybc6acg4mrh0wa7mld75j56";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/genproto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-genproto";
+      rev = "1e559d0a00eef8a9a43151db4665280bd8dd5886";
+      sha256 = "1dfm8zd9mif1aswks79wgyi7n818s5brbdnnrrlg79whfhaf20hd";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/grpc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/grpc/grpc-go";
+      rev = "f92cdcd7dcdc69e81b2d7b338479a19a8723cfa3";
+      sha256 = "1li8rn2s4f8qc77npamlm2ijin44scb8vvd8c4cr0l7za2m89jfn";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "a5b47d31c556af34a302ce5d659e6fea44d90de0";
+      sha256 = "0v6l48fshdjrqzyq1kwn22gy7vy434xdr1i0lm3prsf6jbln9fam";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/dico/default.nix b/nixpkgs/pkgs/servers/dico/default.nix
new file mode 100644
index 000000000000..d64f59158815
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dico/default.nix
@@ -0,0 +1,52 @@
+{ fetchurl, stdenv, libtool, gettext, zlib, readline, gsasl
+, guile, python, pcre, libffi, groff }:
+
+stdenv.mkDerivation rec {
+  name = "dico-2.7";
+
+  src = fetchurl {
+    url = "mirror://gnu/dico/${name}.tar.xz";
+    sha256 = "0dg4aacnmlf3ljssd7dwh8z5644xzq8k1501mbsx8nz8p8a9mbsq";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  # XXX: Add support for GNU SASL.
+  buildInputs =
+    [ libtool gettext zlib readline gsasl guile python pcre libffi groff ];
+
+  # dicod fails to load modules, so the tests fail
+  doCheck = false;
+
+  preBuild = ''
+    sed -i -e '/gets is a security/d' gnu/stdio.in.h
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Flexible dictionary server and client implementing RFC 2229";
+    homepage    = https://www.gnu.org/software/dico/;
+    license     = licenses.gpl3Plus;
+    maintainers = with maintainers; [ lovek323 ];
+    platforms   = platforms.linux;
+
+    longDescription = ''
+      GNU Dico is a flexible modular implementation of DICT server
+      (RFC 2229).  In contrast to another existing servers, it does
+      not depend on particular database format, instead it handles
+      database accesses using loadable modules.
+
+      The package includes several loadable modules for interfacing
+      with various database formats, among them a module for dict.org
+      databases and a module for transparently accessing Wikipedia or
+      Wiktionary sites as a dictionary database.
+
+      New modules can easily be written in C, Guile or Python.  The
+      module API is mature and well documented.
+
+      A web interface serving several databases is available.
+
+      The package also includes a console client program for querying
+      remote dictionary servers.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dict/buildfix.diff b/nixpkgs/pkgs/servers/dict/buildfix.diff
new file mode 100644
index 000000000000..e30fcb2b0380
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dict/buildfix.diff
@@ -0,0 +1,11 @@
+--- Makefile.in~	2011-03-06 18:52:54.000000000 +0100
++++ Makefile.in	2014-01-29 19:04:51.384844897 +0100
+@@ -123,7 +123,7 @@
+ 
+ %: %.o
+ 	$(LIBTOOL) --tag=CC --mode=link $(CC) -o $@ -static \
+-		$^ $(OBJS) $(LDFLAGS) -lz ${LIBS}
++	    $(^:.o=.lo) $(OBJS) $(LDFLAGS) -lz ${LIBS}
+ 
+ include $(srcdir)/deps
+ 
diff --git a/nixpkgs/pkgs/servers/dict/default.nix b/nixpkgs/pkgs/servers/dict/default.nix
new file mode 100644
index 000000000000..bf9fd77df7c9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dict/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, which, bison, flex, libmaa, zlib, libtool }:
+
+stdenv.mkDerivation rec {
+  name = "dictd-${version}";
+  version = "1.12.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dict/dictd-${version}.tar.gz";
+    sha256 = "0min6v60b6z5mrymyjfwzx8nv6rdm8pd8phlwl6v2jl5vkngcdx2";
+  };
+
+  buildInputs = [ libmaa zlib ];
+
+  nativeBuildInputs = [ bison flex libtool which ];
+
+  # Makefile(.in) contains "clientparse.c clientparse.h: clientparse.y" which
+  # causes bison to run twice, and break the build when this happens in
+  # parallel.  Test with "make -j clientparse.c clientparse.h".  The error
+  # message may be "mv: cannot move 'y.tab.c' to 'clientparse.c'".
+  enableParallelBuilding = false;
+
+  patchPhase = "patch -p0 < ${./buildfix.diff}";
+  configureFlags = [
+    "--enable-dictorg"
+    "--datadir=/run/current-systems/sw/share/dictd"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Dict protocol server and client";
+    homepage    = http://www.dict.org;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dict/dictd-db-collector.nix b/nixpkgs/pkgs/servers/dict/dictd-db-collector.nix
new file mode 100644
index 000000000000..f635c98602d9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dict/dictd-db-collector.nix
@@ -0,0 +1,80 @@
+{stdenv, lib, dict}:
+({dictlist, allowList ? ["127.0.0.1"], denyList ? []}:
+/*
+ dictlist is a list of form 
+ [ { filename = /path/to/files/basename;
+ name = "name"; } ]
+ basename.dict.dz and basename.index should be 
+ dict files. Or look below for other options.
+ allowList is a list of IP/domain *-wildcarded strings
+ denyList is the same..
+*/
+
+let
+	link_arguments = map 
+			(x: '' "${x.filename}" '')
+			dictlist; 
+	databases = lib.concatStrings (map (x : 
+		"${x.name}	${x.filename}\n") dictlist);
+	allow = lib.concatStrings (map (x: "allow ${x}\n") allowList);
+	deny = lib.concatStrings (map (x: "deny ${x}\n") denyList);
+	accessSection = "
+		access {
+			${allow}
+			${deny}
+		}
+	";
+	installPhase = ''  
+  	mkdir -p $out/share/dictd
+	cd $out/share/dictd
+	echo "${databases}" >databases.names 
+	echo "${accessSection}" > dictd.conf
+	for j in ${toString link_arguments}; do 
+		name="$(egrep '	'"$j"\$ databases.names)"
+		name=''${name%	$j}
+		if test -d "$j"; then
+			if test -d "$j"/share/dictd ; then
+				echo "Got store path $j"
+				j="$j"/share/dictd 
+			fi
+			echo "Directory reference: $j"
+			i=$(ls "$j""/"*.index)
+			i="''${i%.index}";
+		else
+			i="$j";
+		fi
+		echo "Basename is $i"
+		locale=$(cat "$(dirname "$i")"/locale)
+		base="$(basename "$i")"
+		echo "Locale is $locale"
+		export LC_ALL=$locale 
+		export LANG=$locale 
+		if test -e "$i".dict.dz; then
+			ln -s "$i".dict.dz
+		else
+			cp "$i".dict .
+			dictzip "$base".dict
+		fi
+		ln -s "$i".index .
+		dictfmt_index2word --locale $locale < "$base".index > "$base".word || true
+		dictfmt_index2suffix --locale $locale < "$base".index > "$base".suffix || true
+
+		echo "database $name {" >> dictd.conf
+		echo "  data $out/share/dictd/$base.dict.dz" >> dictd.conf
+		echo "  index $out/share/dictd/$base.index" >> dictd.conf
+		echo "  index_word $out/share/dictd/$base.word" >> dictd.conf
+		echo "  index_suffix $out/share/dictd/$base.suffix" >> dictd.conf
+		echo "}" >> dictd.conf
+	done
+  	'';
+
+in
+
+stdenv.mkDerivation {
+  name = "dictd-dbs";
+
+  phases = ["installPhase"];
+  buildInputs = [dict];
+
+  inherit installPhase;
+})
diff --git a/nixpkgs/pkgs/servers/dict/dictd-db.nix b/nixpkgs/pkgs/servers/dict/dictd-db.nix
new file mode 100644
index 000000000000..065218a5b95d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dict/dictd-db.nix
@@ -0,0 +1,95 @@
+{ stdenv, fetchurl, callPackage }:
+
+let
+ # Probably a bug in some FreeDict release files, but easier to trivially
+ # work around than report. Not that it can cause any other problems..
+ makeDictdDBFreedict = src: name: locale:
+   makeDictdDB src name "{.,bin}" locale;
+
+ makeDictdDB = src: _name: _subdir: _locale:
+   stdenv.mkDerivation rec {
+     name = "dictd-db-${_name}";
+     inherit src;
+     locale = _locale;
+     dbName = _name;
+     buildPhase = ":";
+     unpackPhase = ''
+       tar xf  ${src}
+     '';
+     installPhase = ''
+       mkdir -p $out/share/dictd
+       cp $(ls ./${_subdir}/*.{dict*,index} || true) $out/share/dictd
+       echo "${_locale}" >$out/share/dictd/locale
+     '';
+
+     meta = {
+       description = "dictd-db dictionary for dictd";
+       platforms = stdenv.lib.platforms.linux;
+     };
+   };
+in rec {
+  deu2eng = makeDictdDBFreedict (fetchurl {
+    url = mirror://sourceforge/freedict/deu-eng.tar.gz;
+    sha256 = "0dqrhv04g4f5s84nbgisgcfwk5x0rpincif0yfhfh4sc1bsvzsrb";
+  }) "deu-eng" "de_DE";
+  eng2deu = makeDictdDBFreedict (fetchurl {
+    url = mirror://sourceforge/freedict/eng-deu.tar.gz;
+    sha256 = "01x12p72sa3071iff3jhzga8588440f07zr56r3x98bspvdlz73r";
+  }) "eng-deu" "en_EN";
+  nld2eng = makeDictdDBFreedict (fetchurl {
+    url = mirror://sourceforge/freedict/nld-eng.tar.gz;
+    sha256 = "1vhw81pphb64fzsjvpzsnnyr34ka2fxizfwilnxyjcmpn9360h07";
+  }) "nld-eng" "nl_NL";
+  eng2nld =  makeDictdDBFreedict (fetchurl {
+    url = mirror://sourceforge/freedict/eng-nld.tar.gz;
+    sha256 = "0rcg28ldykv0w2mpxc6g4rqmfs33q7pbvf68ssy1q9gpf6mz7vcl";
+  }) "eng-nld" "en_UK";
+  eng2rus = makeDictdDBFreedict (fetchurl {
+    url = mirror://sourceforge/freedict/eng-rus.tar.gz;
+    sha256 = "15409ivhww1wsfjr05083pv6mg10bak8v5pg1wkiqybk7ck61rry";
+  }) "eng-rus" "en_UK";
+  fra2eng = makeDictdDBFreedict (fetchurl {
+    url = mirror://sourceforge/freedict/fra-eng.tar.gz;
+    sha256 = "0sdd88s2zs5whiwdf3hd0s4pzzv75sdsccsrm1wxc87l3hjm85z3";
+  }) "fra-eng" "fr_FR";
+  eng2fra = makeDictdDBFreedict (fetchurl {
+    url = mirror://sourceforge/freedict/eng-fra.tar.gz;
+    sha256 = "0fi6rrnbqnhc6lq8d0nmn30zdqkibrah0mxfg27hsn9z7alwbj3m";
+  }) "eng-fra" "en_UK";
+  mueller_eng2rus_pkg = makeDictdDB (fetchurl {
+    url = mirror://sourceforge/mueller-dict/mueller-dict-3.1.tar.gz;
+    sha256 = "04r5xxznvmcb8hkxqbjgfh2gxvbdd87jnhqn5gmgvxxw53zpwfmq";
+  }) "mueller-eng-rus" "mueller-dict-*/dict" "en_UK";
+  mueller_enru_abbr = {
+    outPath = "${mueller_eng2rus_pkg}/share/dictd/mueller-abbrev";
+    name = "mueller-abbr";
+    dbName = "mueller-abbr";
+    locale = "en_UK";
+  };
+  mueller_enru_base = {
+    outPath = "${mueller_eng2rus_pkg}/share/dictd/mueller-base";
+    name = "mueller-base";
+    dbName = "mueller-base";
+    locale = "en_UK";
+  };
+  mueller_enru_dict = {
+    outPath = "${mueller_eng2rus_pkg}/share/dictd/mueller-dict";
+    name = "mueller-dict";
+    dbName = "mueller-dict";
+    locale = "en_UK";
+  };
+  mueller_enru_geo = {
+    outPath = "${mueller_eng2rus_pkg}/share/dictd/mueller-geo";
+    name = "mueller-geo";
+    dbName = "mueller-geo";
+    locale = "en_UK";
+  };
+  mueller_enru_names = {
+    outPath = "${mueller_eng2rus_pkg}/share/dictd/mueller-names";
+    name = "mueller-names";
+    dbName = "mueller-names";
+    locale = "en_UK";
+  };
+  wordnet = callPackage ./dictd-wordnet.nix {};
+  wiktionary = callPackage ./dictd-wiktionary.nix {};
+}
diff --git a/nixpkgs/pkgs/servers/dict/dictd-wiktionary.nix b/nixpkgs/pkgs/servers/dict/dictd-wiktionary.nix
new file mode 100644
index 000000000000..13e4757fe89e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dict/dictd-wiktionary.nix
@@ -0,0 +1,31 @@
+{stdenv, fetchurl, python, dict, glibcLocales, writeScript}:
+
+stdenv.mkDerivation rec {
+  version = "20161001";
+  name = "dict-db-wiktionary-${version}";
+  data = fetchurl {
+    url = "http://dumps.wikimedia.org/enwiktionary/${version}/enwiktionary-${version}-pages-articles.xml.bz2";
+    sha256 = "0g3k7kxp2nzg0v56i4cz253af3aqvhn1lwkys2fnam51cn3yqm7m";
+  };
+
+  convert = ./wiktionary2dict.py;
+  buildInputs = [python dict glibcLocales];
+
+  builder = writeScript "wiktionary-builder.sh" ''
+    source $stdenv/setup
+
+    mkdir -p $out/share/dictd/
+    cd $out/share/dictd
+
+    python -O ${convert} ${data}
+    dictzip wiktionary-en.dict
+    echo en_US.UTF-8 > locale
+  '';
+
+  meta = {
+    description = "DICT version of English Wiktionary";
+    homepage = http://en.wiktionary.org/;
+    maintainers = [ ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dict/dictd-wordnet.nix b/nixpkgs/pkgs/servers/dict/dictd-wordnet.nix
new file mode 100644
index 000000000000..8a1bb6313ad2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dict/dictd-wordnet.nix
@@ -0,0 +1,36 @@
+{stdenv, python, wordnet, writeScript}:
+
+stdenv.mkDerivation rec {
+  version = "542";
+  name = "dict-db-wordnet-${version}";
+
+  buildInputs = [python wordnet];
+  convert = ./wordnet_structures.py;
+
+  builder = writeScript "builder.sh" ''
+    . ${stdenv}/setup
+    mkdir -p $out/share/dictd/
+    cd $out/share/dictd
+
+    for i in ${wordnet}/dict/data.*; do
+      DATA="$DATA `echo $i | sed -e s,data,index,` $i";
+    done
+
+    python ${convert} $DATA
+    echo en_US.UTF-8 > locale
+  '';
+
+  meta = {
+    description = "dictd-compatible version of WordNet";
+
+    longDescription =
+      '' WordNet® is a large lexical database of English. This package makes
+         the wordnet data available to dictd and by extension for lookup with
+         the dict command. '';
+
+    homepage = https://wordnet.princeton.edu/;
+
+    maintainers = [ ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dict/libmaa.nix b/nixpkgs/pkgs/servers/dict/libmaa.nix
new file mode 100644
index 000000000000..3c04a678def5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dict/libmaa.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, libtool }:
+
+stdenv.mkDerivation rec {
+  version = "1.3.2";
+  name = "libmaa-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dict/libmaa-${version}.tar.gz";
+    sha256 = "1idi4c30pi79g5qfl7rr9s17krbjbg93bi8f2qrbsdlh78ga19ar";
+  };
+
+  buildInputs = [ libtool ];
+  # configureFlags = [ "--datadir=/var/run/current-system/share/dictd" ];
+
+  meta = with stdenv.lib; {
+    description = "Dict protocol server and client";
+    maintainers = [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dict/wiktionary2dict.py b/nixpkgs/pkgs/servers/dict/wiktionary2dict.py
new file mode 100644
index 000000000000..8a0210e7254f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dict/wiktionary2dict.py
@@ -0,0 +1,778 @@
+# Adapted to produce DICT-compatible files by Petr Rockai in 2012
+# Based on code from wiktiondict by Greg Hewgill
+import re
+import sys
+import codecs
+import os
+import textwrap
+import time
+import xml.sax
+
+class Text:
+    def __init__(self, s):
+        self.s = s
+    def process(self):
+        return s
+
+class TemplateCall:
+    def __init__(self):
+        pass
+    def process(self):
+        pass
+
+class Template:
+    def __init__(self):
+        self.parts = []
+    def append(self, part):
+        self.parts.append(part)
+    def process(self):
+        return ''.join(x.process() for x in self.parts)
+
+class Whitespace:
+    def __init__(self, s):
+        self.s = s
+
+class OpenDouble: pass
+class OpenTriple: pass
+class CloseDouble: pass
+class CloseTriple: pass
+
+class Equals:
+    def __str__(self):
+        return "="
+
+class Delimiter:
+    def __init__(self, c):
+        self.c = c
+    def __str__(self):
+        return self.c
+
+def Tokenise(s):
+    s = unicode(s)
+    stack = []
+    last = 0
+    i = 0
+    while i < len(s):
+        if s[i] == '{' and i+1 < len(s) and s[i+1] == '{':
+            if i > last:
+                yield s[last:i]
+            if i+2 < len(s) and s[i+2] == '{':
+                yield OpenTriple()
+                stack.append(3)
+                i += 3
+            else:
+                yield OpenDouble()
+                stack.append(2)
+                i += 2
+            last = i
+        elif s[i] == '}' and i+1 < len(s) and s[i+1] == '}':
+            if i > last:
+                yield s[last:i]
+            if len(stack) == 0:
+                yield "}}"
+                i += 2
+            elif stack[-1] == 2:
+                yield CloseDouble()
+                i += 2
+                stack.pop()
+            elif i+2 < len(s) and s[i+2] == '}':
+                yield CloseTriple()
+                i += 3
+                stack.pop()
+            else:
+                raise SyntaxError()
+            last = i
+        elif s[i] == ':' or s[i] == '|':
+            if i > last:
+                yield s[last:i]
+            yield Delimiter(s[i])
+            i += 1
+            last = i
+        elif s[i] == '=':
+            if i > last:
+                yield s[last:i]
+            yield Equals()
+            i += 1
+            last = i
+        #elif s[i] == ' ' or s[i] == '\t' or s[i] == '\n':
+        #    if i > last:
+        #        yield s[last:i]
+        #    last = i
+        #    m = re.match(r"\s+", s[i:])
+        #    assert m
+        #    yield Whitespace(m.group(0))
+        #    i += len(m.group(0))
+        #    last = i
+        else:
+            i += 1
+    if i > last:
+        yield s[last:i]
+
+def processSub(templates, tokens, args):
+    t = tokens.next()
+    if not isinstance(t, unicode):
+        raise SyntaxError
+    name = t
+    t = tokens.next()
+    default = None
+    if isinstance(t, Delimiter) and t.c == '|':
+        default = ""
+        while True:
+            t = tokens.next()
+            if isinstance(t, unicode):
+                default += t
+            elif isinstance(t, OpenDouble):
+                default += processTemplateCall(templates, tokens, args)
+            elif isinstance(t, OpenTriple):
+                default += processSub(templates, tokens, args)
+            elif isinstance(t, CloseTriple):
+                break
+            else:
+                print "Unexpected:", t
+                raise SyntaxError()
+    if name in args:
+        return args[name]
+    if default is not None:
+        return default
+    if name == "lang":
+        return "en"
+    return "{{{%s}}}" % name
+
+def processTemplateCall(templates, tokens, args):
+    template = tokens.next().strip().lower()
+    args = {}
+    a = 1
+    t = tokens.next()
+    while True:
+        if isinstance(t, Delimiter):
+            name = unicode(a)
+            arg = ""
+            while True:
+                t = tokens.next()
+                if isinstance(t, unicode):
+                    arg += t
+                elif isinstance(t, OpenDouble):
+                    arg += processTemplateCall(templates, tokens, args)
+                elif isinstance(t, OpenTriple):
+                    arg += processSub(templates, tokens, args)
+                elif isinstance(t, Delimiter) and t.c != '|':
+                    arg += str(t)
+                else:
+                    break
+            if isinstance(t, Equals):
+                name = arg.strip()
+                arg = ""
+                while True:
+                    t = tokens.next()
+                    if isinstance(t, (unicode, Equals)):
+                        arg += unicode(t)
+                    elif isinstance(t, OpenDouble):
+                        arg += processTemplateCall(templates, tokens, args)
+                    elif isinstance(t, OpenTriple):
+                        arg += processSub(templates, tokens, args)
+                    elif isinstance(t, Delimiter) and t.c != '|':
+                        arg += str(t)
+                    else:
+                        break
+                arg = arg.strip()
+            else:
+                a += 1
+            args[name] = arg
+        elif isinstance(t, CloseDouble):
+            break
+        else:
+            print "Unexpected:", t
+            raise SyntaxError
+    #print template, args
+    if template[0] == '#':
+        if template == "#if":
+            if args['1'].strip():
+                return args['2']
+            elif '3' in args:
+                return args['3']
+            else:
+                return ""
+        elif template == "#ifeq":
+            if args['1'].strip() == args['2'].strip():
+                return args['3']
+            elif '4' in args:
+                return args['4']
+            else:
+                return ""
+        elif template == "#ifexist":
+            return ""
+        elif template == "#switch":
+            sw = args['1'].strip()
+            if sw in args:
+                return args[sw]
+            else:
+                return ""
+        else:
+            print "Unknown ParserFunction:", template
+            sys.exit(1)
+    if template not in templates:
+        return "{{%s}}" % template
+    return process(templates, templates[template], args)
+
+def process(templates, s, args = {}):
+    s = re.compile(r"<!--.*?-->", re.DOTALL).sub("", s)
+    s = re.compile(r"<noinclude>.*?</noinclude>", re.DOTALL).sub("", s)
+    assert "<onlyinclude>" not in s
+    #s = re.sub(r"(.*?)<onlyinclude>(.*?)</onlyinclude>(.*)", r"\1", s)
+    s = re.compile(r"<includeonly>(.*?)</includeonly>", re.DOTALL).sub(r"\1", s)
+    r = ""
+    #print list(Tokenise(s))
+    tokens = Tokenise(s)
+    try:
+        while True:
+            t = tokens.next()
+            if isinstance(t, OpenDouble):
+                r += processTemplateCall(templates, tokens, args)
+            elif isinstance(t, OpenTriple):
+                r += processSub(templates, tokens, args)
+            else:
+                r += unicode(t)
+    except StopIteration:
+        pass
+    return r
+
+def test():
+    templates = {
+        'lb': "{{",
+        'name-example': "I am a template example, my first name is '''{{{firstName}}}''' and my last name is '''{{{lastName}}}'''. You can reference my page at [[{{{lastName}}}, {{{firstName}}}]].",
+        't': "start-{{{1|pqr}}}-end",
+        't0': "start-{{{1}}}-end",
+        't1': "start{{{1}}}end<noinclude>moo</noinclude>",
+        't2a1': "{{t2demo|a|{{{1}}}}}",
+        't2a2': "{{t2demo|a|2={{{1}}}}}",
+        't2demo': "start-{{{1}}}-middle-{{{2}}}-end",
+        't5': "{{t2demo|{{{a}}}=b}}",
+        't6': "t2demo|a",
+    }
+    def t(text, expected):
+        print "text:", text
+        s = process(templates, text)
+        if s != expected:
+            print "got:", s
+            print "expected:", expected
+            sys.exit(1)
+    t("{{Name-example}}", "I am a template example, my first name is '''{{{firstName}}}''' and my last name is '''{{{lastName}}}'''. You can reference my page at [[{{{lastName}}}, {{{firstName}}}]].")
+    t("{{Name-example | firstName=John | lastName=Smith }}", "I am a template example, my first name is '''John''' and my last name is '''Smith'''. You can reference my page at [[Smith, John]].")
+    t("{{t0|a}}", "start-a-end")
+    t("{{t0| }}", "start- -end")
+    t("{{t0|}}", "start--end")
+    t("{{t0}}", "start-{{{1}}}-end")
+    t("{{t0|     }}", "start-     -end")
+    t("{{t0|\n}}", "start-\n-end")
+    t("{{t0|1=     }}", "start--end")
+    t("{{t0|1=\n}}", "start--end")
+    t("{{T}}", "start-pqr-end")
+    t("{{T|}}", "start--end")
+    t("{{T|abc}}", "start-abc-end")
+    t("{{T|abc|def}}", "start-abc-end")
+    t("{{T|1=abc|1=def}}", "start-def-end")
+    t("{{T|abc|1=def}}", "start-def-end")
+    t("{{T|1=abc|def}}", "start-def-end")
+    t("{{T|{{T}}}}", "start-start-pqr-end-end")
+    t("{{T|{{T|{{T}}}}}}", "start-start-start-pqr-end-end-end")
+    t("{{T|{{T|{{T|{{T}}}}}}}}", "start-start-start-start-pqr-end-end-end-end")
+    t("{{T|a{{t|b}}}}", "start-astart-b-end-end")
+    t("{{T|{{T|a=b}}}}", "start-start-pqr-end-end")
+    t("{{T|a=b}}", "start-pqr-end")
+    t("{{T|1=a=b}}", "start-a=b-end")
+    #t("{{t1|{{lb}}tc}}}}", "start{{tcend}}")
+    #t("{{t2a1|1=x=y}}", "start-a-middle-{{{2}}}-end")
+    #t("{{t2a2|1=x=y}}", "start-a-middle-x=y-end")
+    #t("{{t5|a=2=d}}", "start-{{{1}}}-middle-d=b-end")
+    #t("{{ {{t6}} }}", "{{ t2demo|a }}")
+    t("{{t|[[a|b]]}}", "start-b-end")
+    t("{{t|[[a|b]] }}", "start-b -end")
+
+Parts = {
+    # Standard POS headers
+    'noun': "n.",
+    'Noun': "n.",
+    'Noun 1': "n.",
+    'Noun 2': "n.",
+    'Verb': "v.",
+    'Adjective': "adj.",
+    'Adverb': "adv.",
+    'Pronoun': "pron.",
+    'Conjunction': "conj.",
+    'Interjection': "interj.",
+    'Preposition': "prep.",
+    'Proper noun': "n.p.",
+    'Proper Noun': "n.p.",
+    'Article': "art.",
+
+    # Standard non-POS level 3 headers
+    '{{acronym}}': "acr.",
+    'Acronym': "acr.",
+    '{{abbreviation}}': "abbr.",
+    '[[Abbreviation]]': "abbr.",
+    'Abbreviation': "abbr.",
+    '[[initialism]]': "init.",
+    '{{initialism}}': "init.",
+    'Initialism': "init.",
+    'Contraction': "cont.",
+    'Prefix': "prefix",
+    'Suffix': "suffix",
+    'Symbol': "sym.",
+    'Letter': "letter",
+    'Idiom': "idiom",
+    'Idioms': "idiom",
+    'Phrase': "phrase",
+
+    # Debated POS level 3 headers
+    'Number': "num.",
+    'Numeral': "num.",
+    'Cardinal number': "num.",
+    'Ordinal number': "num.",
+    'Cardinal numeral': "num.",
+    'Ordinal numeral': "num.",
+
+    # Other headers in use
+    'Personal pronoun': "pers.pron.",
+    'Adjective/Adverb': "adj./adv.",
+    'Proper adjective': "prop.adj.",
+    'Determiner': "det.",
+    'Demonstrative determiner': "dem.det.",
+    'Clitic': "clitic",
+    'Infix': "infix",
+    'Counter': "counter",
+    'Kanji': None,
+    'Kanji reading': None,
+    'Hiragana letter': None,
+    'Katakana letter': None,
+    'Pinyin': None,
+    'Han character': None,
+    'Hanzi': None,
+    'Hanja': None,
+    'Proverb': "prov.",
+    'Expression': None,
+    'Adjectival noun': None,
+    'Quasi-adjective': None,
+    'Particle': "part.",
+    'Infinitive particle': "part.",
+    'Possessive adjective': "poss.adj.",
+    'Verbal prefix': "v.p.",
+    'Postposition': "post.",
+    'Prepositional article': "prep.art.",
+    'Phrasal verb': "phr.v.",
+    'Participle': "participle",
+    'Interrogative auxiliary verb': "int.aux.v.",
+    'Pronominal adverb': "pron.adv.",
+    'Adnominal': "adn.",
+    'Abstract pronoun': "abs.pron.",
+    'Conjunction particle': None,
+    'Root': "root",
+
+    # Non-standard, deprecated headers
+    'Noun form': "n.",
+    'Verb form': "v.",
+    'Adjective form': "adj.form.",
+    'Nominal phrase': "nom.phr.",
+    'Noun phrase': "n. phrase",
+    'Verb phrase': "v. phrase",
+    'Transitive verb': "v.t.",
+    'Intransitive verb': "v.i.",
+    'Reflexive verb': "v.r.",
+    'Cmavo': None,
+    'Romaji': "rom.",
+    'Hiragana': None,
+    'Furigana': None,
+    'Compounds': None,
+
+    # Other headers seen
+    'Alternative forms': None,
+    'Alternative spellings': None,
+    'Anagrams': None,
+    'Antonym': None,
+    'Antonyms': None,
+    'Conjugation': None,
+    'Declension': None,
+    'Declension and pronunciations': None,
+    'Definite Article': "def.art.",
+    'Definite article': "def.art.",
+    'Demonstrative pronoun': "dem.pron.",
+    'Derivation': None,
+    'Derived expression': None,
+    'Derived expressions': None,
+    'Derived forms': None,
+    'Derived phrases': None,
+    'Derived terms': None,
+    'Derived, Related terms': None,
+    'Descendants': None,
+    #'Etymology': None,
+    #'Etymology 1': None,
+    #'Etymology 2': None,
+    #'Etymology 3': None,
+    #'Etymology 4': None,
+    #'Etymology 5': None,
+    'Examples': None,
+    'External links': None,
+    '[[Gismu]]': None,
+    'Gismu': None,
+    'Homonyms': None,
+    'Homophones': None,
+    'Hyphenation': None,
+    'Indefinite article': "art.",
+    'Indefinite pronoun': "ind.pron.",
+    'Indefinite Pronoun': "ind.pron.",
+    'Indetermined pronoun': "ind.pron.",
+    'Interrogative conjunction': "int.conj.",
+    'Interrogative determiner': "int.det.",
+    'Interrogative particle': "int.part.",
+    'Interrogative pronoun': "int.pron.",
+    'Legal expression': "legal",
+    'Mass noun': "n.",
+    'Miscellaneous': None,
+    'Mutations': None,
+    'Noun and verb': "n/v.",
+    'Other language': None,
+    'Pinyin syllable': None,
+    'Possessive determiner': "poss.det.",
+    'Possessive pronoun': "poss.pron.",
+    'Prepositional phrase': "prep.phr.",
+    'Prepositional Pronoun': "prep.pron.",
+    'Pronunciation': None,
+    'Pronunciation 1': None,
+    'Pronunciation 2': None,
+    'Quotations': None,
+    'References': None,
+    'Reflexive pronoun': "refl.pron.",
+    'Related expressions': None,
+    'Related terms': None,
+    'Related words': None,
+    'Relative pronoun': "rel.pron.",
+    'Saying': "saying",
+    'See also': None,
+    'Shorthand': None,
+    '[http://en.wikipedia.org/wiki/Shorthand Shorthand]': None,
+    'Sister projects': None,
+    'Spelling note': None,
+    'Synonyms': None,
+    'Translation': None,
+    'Translations': None,
+    'Translations to be checked': None,
+    'Transliteration': None,
+    'Trivia': None,
+    'Usage': None,
+    'Usage in English': None,
+    'Usage notes': None,
+    'Verbal noun': "v.n.",
+}
+PartsUsed = {}
+for p in Parts.keys():
+    PartsUsed[p] = 0
+
+def encode(s):
+    r = e(s)
+    assert r[1] == len(s)
+    return r[0]
+
+def dowikilink(m):
+    a = m.group(1).split("|")
+    if len(a) > 1:
+        link = a[1]
+    else:
+        link = a[0]
+    if ':' in link:
+        link = ""
+    return link
+
+seentemplates = {}
+def dotemplate(m):
+    aa = m.group(1).split("|")
+    args = {}
+    n = 0
+    for a in aa:
+        am = re.match(r"(.*?)(=(.*))?", a)
+        if am:
+            args[am.group(1)] = am.group(3)
+        else:
+            n += 1
+            args[n] = am.group(1)
+
+    #if aa[0] in seentemplates:
+    #    seentemplates[aa[0]] += 1
+    #else:
+    #    seentemplates[aa[0]] = 1
+    #    print len(seentemplates), aa[0]
+    #print aa[0]
+
+    #if aa[0] not in Templates:
+    #    return "(unknown template %s)" % aa[0]
+    #body = Templates[aa[0]]
+    #body = re.sub(r"<noinclude>.*?</noinclude>", "", body)
+    #assert "<onlyinclude>" not in body
+    ##body = re.sub(r"(.*?)<onlyinclude>(.*?)</onlyinclude>(.*)", r"\1", body)
+    #body = re.sub(r"<includeonly>(.*?)</includeonly>", r"\1", body)
+    #def dotemplatearg(m):
+    #    ta = m.group(1).split("|")
+    #    if ta[0] in args:
+    #        return args[ta[0]]
+    #    elif len(ta) > 1:
+    #        return ta[1]
+    #    else:
+    #        return "{{{%s}}}" % ta[0]
+    #body = re.sub(r"{{{(.*?)}}}", dotemplatearg, body)
+    #return dewiki(body)
+
+def doparserfunction(m):
+    a = m.group(2).split("|")
+    if m.group(1) == "ifeq":
+        if a[0] == a[1]:
+            return a[2]
+        elif len(a) >= 4:
+            return a[3]
+    return ""
+
+def dewiki(body, indent = 0):
+    # process in this order:
+    #   {{{ }}}
+    #   <> <>
+    #   [[ ]]
+    #   {{ }}
+    #   ''' '''
+    #   '' ''
+    #body = wikimediatemplate.process(Templates, body)
+    body = re.sub(r"\[\[(.*?)\]\]", dowikilink, body)
+    #body = re.sub(r"{{(.*?)}}", dotemplate, body)
+    #body = re.sub(r"{{#(.*?):(.*?)}}", doparserfunction, body)
+    body = re.sub(r"'''(.*?)'''", r"\1", body)
+    body = re.sub(r"''(.*?)''", r"\1", body)
+    lines = body.split("\n")
+    n = 0
+    i = 0
+    while i < len(lines):
+        if len(lines[i]) > 0 and lines[i][0] == "#":
+            if len(lines[i]) > 1 and lines[i][1] == '*':
+                wlines = textwrap.wrap(lines[i][2:].strip(),
+                    initial_indent = "    * ",
+                    subsequent_indent = "      ")
+            elif len(lines[i]) > 1 and lines[i][1] == ':':
+                wlines = textwrap.wrap(lines[i][2:].strip(),
+                    initial_indent = "        ",
+                    subsequent_indent = "        ")
+            else:
+                n += 1
+                wlines = textwrap.wrap(str(n) + ". " + lines[i][1:].strip(),
+                    subsequent_indent = "   ")
+        elif len(lines[i]) > 0 and lines[i][0] == "*":
+            n = 0
+            wlines = textwrap.wrap(lines[i][1:].strip(),
+                initial_indent = "* ",
+                subsequent_indent = "  ")
+        else:
+            n = 0
+            wlines = textwrap.wrap(lines[i].strip())
+            if len(wlines) == 0:
+                wlines = ['']
+        lines[i:i+1] = wlines
+        i += len(wlines)
+    return ''.join("  "*(indent-1)+x+"\n" for x in lines)
+
+class WikiSection:
+    def __init__(self, heading, body):
+        self.heading = heading
+        self.body = body
+        #self.lines = re.split("\n+", body.strip())
+        #if len(self.lines) == 1 and len(self.lines[0]) == 0:
+        #    self.lines = []
+        self.children = []
+    def __str__(self):
+        return "<%s:%i:%s>" % (self.heading, len(self.body or ""), ','.join([str(x) for x in self.children]))
+    def add(self, section):
+        self.children.append(section)
+
+def parse(word, text):
+    headings = list(re.finditer("^(=+)\s*(.*?)\s*=+\n", text, re.MULTILINE))
+    #print [x.group(1) for x in headings]
+    doc = WikiSection(word, "")
+    stack = [doc]
+    for i, m in enumerate(headings):
+        depth = len(m.group(1))
+        if depth < len(stack):
+            stack = stack[:depth]
+        else:
+            while depth > len(stack):
+                s = WikiSection(None, "")
+                stack[-1].add(s)
+                stack.append(s)
+        if i+1 < len(headings):
+            s = WikiSection(m.group(2), text[m.end(0):headings[i+1].start(0)].strip())
+        else:
+            s = WikiSection(m.group(2), text[m.end(0):].strip())
+        assert len(stack) == depth
+        stack[-1].add(s)
+        stack.append(s)
+    #while doc.heading is None and len(doc.lines) == 0 and len(doc.children) == 1:
+    #    doc = doc.children[0]
+    return doc
+
+def formatFull(word, doc):
+    def f(depth, section):
+        if section.heading:
+            r = "  "*(depth-1) + section.heading + "\n\n"
+        else:
+            r = ""
+        if section.body:
+            r += dewiki(section.body, depth+1)+"\n"
+        #r += "".join("  "*depth + x + "\n" for x in dewiki(section.body))
+        #if len(section.lines) > 0:
+        #    r += "\n"
+        for c in section.children:
+            r += f(depth+1, c)
+        return r
+    s = f(0, doc)
+    s += "Ref: http://en.wiktionary.org/wiki/%s\n" % word
+    return s
+
+def formatNormal(word, doc):
+    def f(depth, posdepth, section):
+        r = ""
+        if depth == posdepth:
+            if not section.heading or section.heading.startswith("Etymology"):
+                posdepth += 1
+            elif section.heading in Parts:
+                #p = Parts[section.heading]
+                #if p:
+                #    r += "  "*(depth-1) + word + " (" + p + ")\n\n"
+                r += "  "*(depth-1) + section.heading + "\n\n"
+            else:
+                print >>errors, "Unknown part: (%s) %s" % (word, section.heading)
+                return ""
+        elif depth > posdepth:
+            return ""
+        elif section.heading:
+            r += "  "*(depth-1) + section.heading + "\n\n"
+        if section.body:
+            r += dewiki(section.body, depth+1)+"\n"
+        #r += "".join("  "*depth + x + "\n" for x in dewiki(section.lines))
+        #if len(section.lines) > 0:
+        #    r += "\n"
+        for c in section.children:
+            r += f(depth+1, posdepth, c)
+        return r
+    s = f(0, 3, doc)
+    s += "Ref: http://en.wiktionary.org/wiki/%s\n" % word
+    return s
+
+def formatBrief(word, doc):
+    def f(depth, posdepth, section):
+        if depth == posdepth:
+            h = section.heading
+            if not section.heading or section.heading.startswith("Etymology"):
+                posdepth += 1
+            elif section.heading in Parts:
+                #h = Parts[section.heading]
+                #if h:
+                #    h = "%s (%s)" % (word, h)
+                pass
+            stack.append([h, False])
+        elif depth > 0:
+            stack.append([section.heading, False])
+        else:
+            stack.append(["%h " + section.heading, False])
+        r = ""
+        #if section.heading:
+        #    r += "  "*(depth-1) + section.heading + "\n"
+        body = ''.join(x+"\n" for x in section.body.split("\n") if len(x) > 0 and x[0] == '#')
+        if len(body) > 0:
+            for i in range(len(stack)):
+                if not stack[i][1]:
+                    if stack[i][0]:
+                        r += "  "*(i-1) + stack[i][0] + "\n"
+                    stack[i][1] = True
+            r += dewiki(body, depth+1)
+        for c in section.children:
+            r += f(depth+1, posdepth, c)
+        stack.pop()
+        return r
+    stack = []
+    s = f(0, 3, doc)
+    s += "Ref: http://en.wiktionary.org/wiki/%s\n" % word
+    return s
+
+class WikiHandler(xml.sax.ContentHandler):
+    def __init__(self):
+        self.element = None
+        self.page = None
+        self.text = ""
+        self.long = {}
+    def startElement(self, name, attrs):
+        #print "start", name, attrs
+        self.element = name
+    def endElement(self, name):
+        #print "end", name
+        if self.element == "text":
+            if self.page:
+                if self.page in self.long:
+                    print self.page, len(self.text)
+                    print
+                self.doPage(self.page, self.text)
+                self.page = None
+            self.text = ""
+        self.element = None
+    def characters(self, content):
+        #print "characters", content
+        if self.element == "title":
+            if self.checkPage(content):
+                self.page = content
+        elif self.element == "text":
+            if self.page:
+                self.text += content
+                if len(self.text) > 100000 and self.page not in self.long:
+                    self.long[self.page] = 1
+    def checkPage(self, page):
+        return False
+    def doPage(self, page, text):
+        pass
+
+class TemplateHandler(WikiHandler):
+    def checkPage(self, page):
+        return page.startswith("Template:")
+    def doPage(self, page, text):
+        Templates[page[page.find(':')+1:].lower()] = text
+
+class WordHandler(WikiHandler):
+    def checkPage(self, page):
+        return ':' not in page
+    def doPage(self, page, text):
+        m = re.match(r"#redirect\s*\[\[(.*?)\]\]", text, re.IGNORECASE)
+        if m:
+            out.write("  See <%s>" % page)
+            return
+        doc = parse(page, text)
+        out.write(formatBrief(page, doc))
+        #print formatBrief(page, doc)
+
+fn = sys.argv[1]
+info = """   This file was converted from the original database on:
+             %s
+
+   The original data is available from:
+             http://en.wiktionary.org
+   The version from which this file was generated was:
+             %s
+
+  Wiktionary is available under the GNU Free Documentation License.
+""" % (time.ctime(), os.path.basename(fn))
+
+errors = codecs.open("mkdict.err", "w", "utf_8")
+e = codecs.getencoder("utf_8")
+
+Templates = {}
+f = os.popen("bunzip2 -c %s" % fn, "r")
+xml.sax.parse(f, TemplateHandler())
+f.close()
+
+f = os.popen("bunzip2 -c %s" % fn, "r")
+out = codecs.getwriter("utf_8")(
+        os.popen("dictfmt -p wiktionary-en --locale en_US.UTF-8 --columns 0 -u http://en.wiktionary.org", "w"))
+
+out.write(("%%h English Wiktionary\n%s" % info).encode('utf-8'))
+xml.sax.parse(f, WordHandler())
+f.close()
+out.close()
diff --git a/nixpkgs/pkgs/servers/dict/wordnet_structures.py b/nixpkgs/pkgs/servers/dict/wordnet_structures.py
new file mode 100644
index 000000000000..6a88427c5da1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dict/wordnet_structures.py
@@ -0,0 +1,319 @@
+#!/usr/bin/env python
+#Copyright 2007 Sebastian Hagen
+# This file is part of wordnet_tools.
+
+# wordnet_tools is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2
+# as published by the Free Software Foundation
+
+# wordnet_tools is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with wordnet_tools; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+# This program requires python >= 2.4.
+
+# This program converts wordnet index/data file pairs into dict index/data
+# files usable by dictd.
+# This is basically a reimplementation of the wnfilter program by Rik Faith,
+# which unfortunately doesn't work correctly for wordnet files in the newer
+# formats. This version of wordnet_structures whould parse wordnet 2.1 files
+# correctly, and create output very similar to what wnfilter would have
+# written.
+
+import datetime
+from textwrap import TextWrapper
+
+CAT_ADJECTIVE = 0
+CAT_ADVERB = 1
+CAT_NOUN = 2
+CAT_VERB = 3
+
+category_map = {
+   'n': CAT_NOUN,
+   'v': CAT_VERB,
+   'a': CAT_ADJECTIVE,
+   's': CAT_ADJECTIVE,
+   'r': CAT_ADVERB
+}
+
+
+class WordIndex:
+   def __init__(self, lemma, category, ptrs, synsets, tagsense_count):
+      self.lemma = lemma
+      self.category = category
+      self.ptrs = ptrs
+      self.synsets = synsets
+      self.tagsense_count = tagsense_count
+   
+   @classmethod
+   def build_from_line(cls, line_data, synset_map):
+      line_split = line_data.split()
+      lemma = line_split[0]
+      category = category_map[line_split[1]]
+      synset_count = int(line_split[2],10)
+      ptr_count = int(line_split[3],10)
+      ptrs = [line_split[i] for i in range(3, 3+ptr_count)]
+      tagsense_count = int(line_split[5 + ptr_count],10)
+      synsets = [synset_map[int(line_split[i],10)] for i in range(6 + ptr_count, 6 + ptr_count + synset_count)]
+      return cls(lemma, category, ptrs, synsets, tagsense_count)
+   
+   @classmethod
+   def build_from_file(cls, f, synset_map, rv_base=None):
+      if (rv_base is None):
+         rv = {}
+      else:
+         rv = rv_base
+         
+      for line in f:
+         if (line.startswith('  ')):
+            continue
+         wi = cls.build_from_line(line, synset_map)
+         word = wi.lemma.lower()
+         if not (word in rv):
+            rv[word] = []
+         rv[word].append(wi)
+      return rv
+
+   def __repr__(self):
+      return '%s%s' % (self.__class__.__name__, (self.lemma, self.category, self.ptrs, self.synsets, self.tagsense_count))
+   
+   
+class WordIndexDictFormatter(WordIndex):
+   category_map_rev = {
+      CAT_NOUN: 'n',
+      CAT_VERB: 'v',
+      CAT_ADJECTIVE: 'adj',
+      CAT_ADVERB: 'adv'
+   }
+   linesep = '\n'
+   LINE_WIDTH_MAX = 68
+   prefix_fmtf_line_first = '%5s 1: '
+   prefix_fmtn_line_first = '         '
+   prefix_fmtf_line_nonfirst = '%5d: '
+   prefix_fmtn_line_nonfirst = '       '
+   
+   def dict_str(self):
+      tw = TextWrapper(width=self.LINE_WIDTH_MAX,
+         initial_indent=(self.prefix_fmtf_line_first % self.category_map_rev[self.category]),
+         subsequent_indent=self.prefix_fmtn_line_first)
+         
+      lines = (tw.wrap(self.synsets[0].dict_str()))
+      i = 2
+      for synset in self.synsets[1:]:
+         tw = TextWrapper(width=self.LINE_WIDTH_MAX,
+            initial_indent=(self.prefix_fmtf_line_nonfirst % i),
+            subsequent_indent=self.prefix_fmtn_line_nonfirst)
+         lines.extend(tw.wrap(synset.dict_str()))
+         i += 1
+      return self.linesep.join(lines)
+
+
+class Synset:
+   def __init__(self, offset, ss_type, words, ptrs, gloss, frames=()):
+      self.offset = offset
+      self.type = ss_type
+      self.words = words
+      self.ptrs = ptrs
+      self.gloss = gloss
+      self.frames = frames
+      self.comments = []
+   
+   @classmethod
+   def build_from_line(cls, line_data):
+      line_split = line_data.split()
+      synset_offset = int(line_split[0],10)
+      ss_type = category_map[line_split[2]]
+      word_count = int(line_split[3],16)
+      words = [line_split[i] for i in range(4, 4 + word_count*2,2)]
+      ptr_count = int(line_split[4 + word_count*2],10)
+      ptrs = [(line_split[i], line_split[i+1], line_split[i+2], line_split[i+3]) for i in range(5 + word_count*2,4 + word_count*2 + ptr_count*4,4)]
+     
+      tok = line_split[5 + word_count*2 + ptr_count*4]
+      base = 6 + word_count*2 + ptr_count*4
+      if (tok != '|'):
+         frame_count = int(tok, 10)
+         frames = [(int(line_split[i+1],10), int(line_split[i+2],16)) for i in range(base, base + frame_count*3, 3)]
+         base += frame_count*3 + 1
+      else:
+         frames = []
+     
+      line_split2 = line_data.split(None, base)
+      if (len(line_split2) < base):
+         gloss = None
+      else:
+         gloss = line_split2[-1]
+     
+      return cls(synset_offset, ss_type, words, ptrs, gloss, frames)
+   
+   @classmethod
+   def build_from_file(cls, f):
+      rv = {}
+      comments = []
+     
+      for line in f:
+         if (line.startswith('  ')):
+            line_s = line.lstrip().rstrip('\n')
+            line_elements = line_s.split(None,1)
+            try:
+               int(line_elements[0])
+            except ValueError:
+               continue
+            if (len(line_elements) == 1):
+               line_elements.append('')
+            comments.append(line_elements[1])
+            continue
+         synset = cls.build_from_line(line.rstrip())
+         rv[synset.offset] = synset
+
+      return (rv, comments)
+
+   def dict_str(self):
+      rv = self.gloss
+      if (len(self.words) > 1):
+         rv += ' [syn: %s]' % (', '.join([('{%s}' % word) for word in self.words]))
+      return rv
+
+   def __repr__(self):
+      return '%s%s' % (self.__class__.__name__, (self.offset, self.type, self.words, self.ptrs, self.gloss, self.frames))
+
+
+class WordnetDict:
+   db_info_fmt = '''This file was converted from the original database on:
+          %(conversion_datetime)s
+
+The original data is available from:
+     %(wn_url)s
+
+The original data was distributed with the notice shown below. No
+additional restrictions are claimed.  Please redistribute this changed
+version under the same conditions and restriction that apply to the
+original version.\n\n
+%(wn_license)s'''
+
+   datetime_fmt = '%Y-%m-%dT%H:%M:%S'
+   base64_map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
+   
+   def __init__(self, wn_url, desc_short, desc_long):
+      self.word_data = {}
+      self.wn_url = wn_url
+      self.desc_short = desc_short
+      self.desc_long = desc_long
+      self.wn_license = None
+   
+   def wn_dict_add(self, file_index, file_data):
+      file_data.seek(0)
+      file_index.seek(0)
+      (synsets, license_lines) = Synset.build_from_file(file_data)
+      WordIndexDictFormatter.build_from_file(file_index, synsets, self.word_data)
+      if (license_lines):
+         self.wn_license = '\n'.join(license_lines) + '\n'
+   
+   @classmethod
+   def base64_encode(cls, i):
+      """Encode a non-negative integer into a dictd compatible base64 string"""
+      if (i < 0):
+         raise ValueError('Value %r for i is negative' % (i,))
+      r = 63
+      e = 1
+      while (r < i):
+         e += 1
+         r = 64**e - 1
+     
+      rv = ''
+      while (e > 0):
+         e -= 1
+         d = (i / 64**e)
+         rv += cls.base64_map[d]
+         i = i % (64**e)
+      return rv
+     
+   @classmethod
+   def dict_entry_write(cls, file_index, file_data, key, entry, linesep='\n'):
+      """Write a single dict entry for <key> to index and data files"""
+      entry_start = file_data.tell()
+      file_data.write(entry)
+      entry_len = len(entry)
+      file_index.write('%s\t%s\t%s%s' % (key, cls.base64_encode(entry_start),
+            cls.base64_encode(entry_len), linesep))
+     
+   def dict_generate(self, file_index, file_data):
+      file_index.seek(0)
+      file_data.seek(0)
+      # The dictd file format is fairly iffy on the subject of special
+      # headwords: either dictd is buggy, or the manpage doesn't tell the whole
+      # story about the format.
+      # The upshot is that order of these entries in the index *matters*.
+      # Putting them at the beginning and in alphabetic order is afaict ok.
+      # Some other orders completely and quietly break the ability to look
+      # those headwords up.
+      # -- problem encountered with 1.10.2, at 2007-08-05.
+      file_data.write('\n')
+      wn_url = self.wn_url
+      conversion_datetime = datetime.datetime.now().strftime(self.datetime_fmt)
+      wn_license = self.wn_license
+      self.dict_entry_write(file_index, file_data, '00-database-info', '00-database-info\n%s\n' % (self.db_info_fmt % vars()))
+      self.dict_entry_write(file_index, file_data, '00-database-long', '00-database-long\n%s\n' % self.desc_long)
+      self.dict_entry_write(file_index, file_data, '00-database-short', '00-database-short\n%s\n' % self.desc_short)
+      self.dict_entry_write(file_index, file_data, '00-database-url', '00-database-url\n%s\n' % self.wn_url)
+
+     
+      words = self.word_data.keys()
+      words.sort()
+      for word in words:
+         for wi in self.word_data[word]:
+            word_cs = word
+            # Use case-sensitivity information of first entry of first synset that
+            # matches this word case-insensitively
+            for synset in wi.synsets:
+               for ss_word in synset.words:
+                  if (ss_word.lower() == word_cs.lower()):
+                     word_cs = ss_word
+                     break
+               else:
+                  continue
+               break
+            else:
+               continue
+            break
+           
+         outstr = ''
+         for wi in self.word_data[word]:
+            outstr += wi.dict_str() + '\n'
+         
+         outstr = '%s%s%s' % (word_cs, wi.linesep, outstr)
+         self.dict_entry_write(file_index, file_data, word_cs, outstr, wi.linesep)
+     
+      file_index.truncate()
+      file_data.truncate()
+
+
+if (__name__ == '__main__'):
+   import optparse
+   op = optparse.OptionParser(usage='usage: %prog [options] (<wn_index_file> <wn_data_file>)+')
+   op.add_option('-i', '--outindex', dest='oi', default='wn.index', help='filename of index file to write to')
+   op.add_option('-d', '--outdata', dest='od', default='wn.dict', help='filename of data file to write to')
+   op.add_option('--wn_url', dest='wn_url', default='ftp://ftp.cogsci.princeton.edu/pub/wordnet/2.0', help='URL for wordnet sources')
+   op.add_option('--db_desc_short', dest='desc_short', default='     WordNet (r) 2.1 (2005)', help='short dict DB description')
+   op.add_option('--db_desc_long', dest='desc_long', default='    WordNet (r): A Lexical Database for English from the\n     Cognitive Science Laboratory at Princeton University', help='long dict DB description')
+   
+   (options, args) = op.parse_args()
+   
+   wnd = WordnetDict(wn_url=options.wn_url, desc_short=options.desc_short, desc_long=options.desc_long)
+   
+   for i in range(0,len(args),2):
+      print 'Opening index file %r...' % args[i]
+      file_index = file(args[i])
+      print 'Opening data file %r...' % args[i+1]
+      file_data = file(args[i+1])
+      print 'Parsing index file and data file...'
+      wnd.wn_dict_add(file_index, file_data)
+
+   print 'All input files parsed. Writing output to index file %r and data file %r.' % (options.oi, options.od)
+   
+   wnd.dict_generate(file(options.oi, 'w'),file(options.od, 'w'))
+   print 'All done.' 
diff --git a/nixpkgs/pkgs/servers/diod/default.nix b/nixpkgs/pkgs/servers/diod/default.nix
new file mode 100644
index 000000000000..eba73b2692a2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/diod/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, munge, lua, libcap, perl, ncurses }:
+
+stdenv.mkDerivation rec {
+  name = "diod-${version}";
+  version = "1.0.24";
+
+  src = fetchurl {
+    url = "https://github.com/chaos/diod/releases/download/${version}/${name}.tar.gz";
+    sha256 = "17wckwfsqj61yixz53nwkc35z66arb1x3napahpi64m7q68jn7gl";
+  };
+
+  buildInputs = [ munge lua libcap perl ncurses ];
+
+  meta = {
+    description = "An I/O forwarding server that implements a variant of the 9P protocol";
+    maintainers = [ stdenv.lib.maintainers.rickynils];
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dns/bind/darwin-openssl-linking-fix.patch b/nixpkgs/pkgs/servers/dns/bind/darwin-openssl-linking-fix.patch
new file mode 100644
index 000000000000..8276c28c3f4b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/bind/darwin-openssl-linking-fix.patch
@@ -0,0 +1,26 @@
+diff --git a/configure b/configure
+index b9ad66b..a2a7382 100755
+--- a/configure
++++ b/configure
+@@ -16033,21 +16033,6 @@ $as_echo "not found" >&6; }
+ 			*-hp-hpux*)
+ 				DST_OPENSSL_LIBS="-L$use_openssl/lib -Wl,+b: -lcrypto"
+ 				;;
+-			*-apple-darwin*)
+-				#
+-				# Apple's ld seaches for serially for dynamic
+-				# then static libraries.  This means you can't
+-				# use -L to override dynamic system libraries
+-				# with static ones when linking.  Instead
+-				# we specify a absolute path.
+-				#
+-				if test -f "$use_openssl/lib/libcrypto.dylib"
+-				then
+-					DST_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto"
+-				else
+-					DST_OPENSSL_LIBS="$use_openssl/lib/libcrypto.a"
+-				fi
+-				;;
+ 			*)
+ 				DST_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto"
+ 				;;
diff --git a/nixpkgs/pkgs/servers/dns/bind/default.nix b/nixpkgs/pkgs/servers/dns/bind/default.nix
new file mode 100644
index 000000000000..74e1fda2d423
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/bind/default.nix
@@ -0,0 +1,87 @@
+{ stdenv, lib, fetchurl
+, perl
+, libcap, libtool, libxml2, openssl
+, enablePython ? false, python3 ? null
+, enableSeccomp ? false, libseccomp ? null, buildPackages
+}:
+
+assert enableSeccomp -> libseccomp != null;
+assert enablePython -> python3 != null;
+
+let version = "9.12.3-P1"; in
+
+stdenv.mkDerivation rec {
+  name = "bind-${version}";
+
+  src = fetchurl {
+    url = "https://ftp.isc.org/isc/bind9/${version}/${name}.tar.gz";
+    sha256 = "0wzdbn6ig851354cjdys5q3gvqcvl2gmmih1gzr8ldl7sy4r7dvc";
+  };
+
+  outputs = [ "out" "lib" "dev" "man" "dnsutils" "host" ];
+
+  patches = [ ./dont-keep-configure-flags.patch ./remove-mkdir-var.patch ] ++
+    stdenv.lib.optional stdenv.isDarwin ./darwin-openssl-linking-fix.patch;
+
+  nativeBuildInputs = [ perl ];
+  buildInputs = [ libtool libxml2 openssl ]
+    ++ lib.optional stdenv.isLinux libcap
+    ++ lib.optional enableSeccomp libseccomp
+    ++ lib.optional enablePython python3;
+
+  STD_CDEFINES = [ "-DDIG_SIGCHASE=1" ]; # support +sigchase
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  configureFlags = [
+    "--localstatedir=/var"
+    "--with-libtool"
+    "--with-libxml2=${libxml2.dev}"
+    "--with-openssl=${openssl.dev}"
+    (if enablePython then "--with-python" else "--without-python")
+    "--without-atf"
+    "--without-dlopen"
+    "--without-docbook-xsl"
+    "--without-gssapi"
+    "--without-idn"
+    "--without-idnlib"
+    "--without-lmdb"
+    "--without-libjson"
+    "--without-pkcs11"
+    "--without-purify"
+    "--with-randomdev=/dev/random"
+    "--with-ecdsa"
+    "--with-gost"
+    "--without-eddsa"
+    "--with-aes"
+  ] ++ lib.optional stdenv.isLinux "--with-libcap=${libcap.dev}"
+    ++ lib.optional enableSeccomp "--enable-seccomp";
+
+  postInstall = ''
+    moveToOutput bin/bind9-config $dev
+    moveToOutput bin/isc-config.sh $dev
+
+    moveToOutput bin/host $host
+
+    moveToOutput bin/dig $dnsutils
+    moveToOutput bin/nslookup $dnsutils
+    moveToOutput bin/nsupdate $dnsutils
+
+    for f in "$lib/lib/"*.la "$dev/bin/"{isc-config.sh,bind*-config}; do
+      sed -i "$f" -e 's|-L${openssl.dev}|-L${openssl.out}|g'
+    done
+  '';
+
+  doCheck = false; # requires root and the net
+
+  meta = {
+    homepage = http://www.isc.org/software/bind;
+    description = "Domain name server";
+    license = stdenv.lib.licenses.mpl20;
+
+    maintainers = with stdenv.lib.maintainers; [peti];
+    platforms = with stdenv.lib.platforms; unix;
+
+    outputsToInstall = [ "out" "dnsutils" "host" ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dns/bind/dont-keep-configure-flags.patch b/nixpkgs/pkgs/servers/dns/bind/dont-keep-configure-flags.patch
new file mode 100644
index 000000000000..5a934056d13d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/bind/dont-keep-configure-flags.patch
@@ -0,0 +1,41 @@
+diff --git a/bin/named/include/named/globals.h b/bin/named/include/named/globals.h
+index 388dc97..3c6135c 100644
+--- a/bin/named/include/named/globals.h
++++ b/bin/named/include/named/globals.h
+@@ -65,7 +65,9 @@ EXTERN const char *		named_g_version		INIT(VERSION);
+ EXTERN const char *		named_g_product		INIT(PRODUCT);
+ EXTERN const char *		named_g_description	INIT(DESCRIPTION);
+ EXTERN const char *		named_g_srcid		INIT(SRCID);
++#if 0
+ EXTERN const char *		named_g_configargs	INIT(CONFIGARGS);
++#endif
+ EXTERN const char *		named_g_builder		INIT(BUILDER);
+ EXTERN in_port_t		named_g_port		INIT(0);
+ EXTERN isc_dscp_t		named_g_dscp		INIT(-1);
+diff --git a/bin/named/main.c b/bin/named/main.c
+index 4fb0566..60d56cd 100644
+--- a/bin/named/main.c
++++ b/bin/named/main.c
+@@ -672,8 +672,10 @@ parse_command_line(int argc, char *argv[]) {
+ 			       (*named_g_description != '\0') ? " " : "",
+ 			       named_g_description, named_g_srcid);
+ 			printf("running on %s\n", named_os_uname());
++			#if 0
+ 			printf("built by %s with %s\n",
+ 			       named_g_builder, named_g_configargs);
++			#endif
+ #ifdef __clang__
+ 			printf("compiled by CLANG %s\n", __VERSION__);
+ #else
+@@ -1075,9 +1077,11 @@ setup(void) {
+ 		      NAMED_LOGMODULE_MAIN, ISC_LOG_NOTICE,
+ 		      "running on %s", named_os_uname());
+ 
++#if 0
+ 	isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
+ 		      NAMED_LOGMODULE_MAIN, ISC_LOG_NOTICE,
+ 		      "built with %s", named_g_configargs);
++#endif
+ 
+ 	isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
+ 		      NAMED_LOGMODULE_MAIN, ISC_LOG_NOTICE,
diff --git a/nixpkgs/pkgs/servers/dns/bind/remove-mkdir-var.patch b/nixpkgs/pkgs/servers/dns/bind/remove-mkdir-var.patch
new file mode 100644
index 000000000000..d0dcd580c20a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/bind/remove-mkdir-var.patch
@@ -0,0 +1,12 @@
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -53,8 +53,7 @@ docclean manclean maintainer-clean::
+ doc man:: ${MANOBJS}
+ 
+ installdirs:
+-	$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${bindir} \
+-	${DESTDIR}${localstatedir}/run ${DESTDIR}${sysconfdir}
++	$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${bindir} ${DESTDIR}${sysconfdir}
+	$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man1
+ 
+ install:: isc-config.sh installdirs
diff --git a/nixpkgs/pkgs/servers/dns/coredns/default.nix b/nixpkgs/pkgs/servers/dns/coredns/default.nix
new file mode 100644
index 000000000000..bc01d9946c71
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/coredns/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "coredns-${version}";
+  version = "005";
+
+  goPackagePath = "github.com/miekg/coredns";
+  subPackages = [ "." ];
+
+  src = fetchFromGitHub {
+    owner = "miekg";
+    repo = "coredns";
+    rev = "v${version}";
+    sha256 = "15q8l4apspaw1xbbb9j1d8s2cc5zrgycan6iq597ga9m0vyf7wiw";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    homepage = https://coredns.io;
+    description = "A DNS server that runs middleware";
+    license = licenses.asl20;
+    maintainers = [ maintainers.rushmorem maintainers.rtreffer ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dns/coredns/deps.nix b/nixpkgs/pkgs/servers/dns/coredns/deps.nix
new file mode 100644
index 000000000000..18bd2b1f85d8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/coredns/deps.nix
@@ -0,0 +1,317 @@
+[
+  {
+    goPackagePath = "github.com/cockroachdb/cmux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cockroachdb/cmux";
+      rev = "30d10be492927e2dcae0089c374c455d42414fcb";
+      sha256 = "0ixif6hwcm2dpi1si5ah49dmdyy5chillz1048jpvjzwzxyfv1nx";
+    };
+  }
+  {
+    goPackagePath = "github.com/coreos/go-semver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/go-semver";
+      rev = "5e3acbb5668c4c3deb4842615c4098eb61fb6b1e";
+      sha256 = "0kbfr8q7s10z2r01xvbv6i31n4wq6z1qvgfj7njgbcgb65bkjjrh";
+    };
+  }
+  {
+    goPackagePath = "github.com/eapache/go-xerial-snappy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/eapache/go-xerial-snappy";
+      rev = "bb955e01b9346ac19dc29eb16586c90ded99a98c";
+      sha256 = "1zhxcil8hn88hvxr2d6rmj4cls5zgss1scj0ikwiqq89f8vcgwn4";
+    };
+  }
+  {
+    goPackagePath = "github.com/eapache/queue";
+    fetch = {
+      type = "git";
+      url = "https://github.com/eapache/queue";
+      rev = "44cc805cf13205b55f69e14bcb69867d1ae92f98";
+      sha256 = "07dp54n94gn3gsvdcki56yqh7py7wqqigxbamhxwgbr05n61fqyg";
+    };
+  }
+  {
+    goPackagePath = "github.com/flynn/go-shlex";
+    fetch = {
+      type = "git";
+      url = "https://github.com/flynn/go-shlex";
+      rev = "3f9db97f856818214da2e1057f8ad84803971cff";
+      sha256 = "1j743lysygkpa2s2gii2xr32j7bxgc15zv4113b0q9jhn676ysia";
+    };
+  }
+  {
+    goPackagePath = "github.com/fsnotify/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify";
+      rev = "a904159b9206978bb6d53fcc7a769e5cd726c737";
+      sha256 = "0qq758fcnhlqa1913jki79a1ic7p2iczdx1l2mn8s886nxydn0fi";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/snappy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/snappy";
+      rev = "553a641470496b2327abcac10b36396bd98e45c9";
+      sha256 = "0kssxnih1l722hx9219c7javganjqkqhvl3i0hp0hif6xm6chvqk";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-logfmt/logfmt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-logfmt/logfmt";
+      rev = "390ab7935ee28ec6b286364bba9b4dd6410cb3d5";
+      sha256 = "1gkgh3k5w1xwb2qbjq52p6azq3h1c1rr6pfwjlwj1zrijpzn2xb9";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/golang-lru";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/golang-lru";
+      rev = "0a025b7e63adc15a622f29b0b2c4c3848243bbf6";
+      sha256 = "1iq7lbpsz7ks052mpznmkf8s4k43p51z4dik2n9ivrxk666q2wxi";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/go-syslog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/go-syslog";
+      rev = "b609c7d9de4658cded34a7336b90886c56f9dbdb";
+      sha256 = "1k0dqkizj4vwgdsb7x7fzmcgz9079sczhpn9whd0r3xcnqs7pkkb";
+    };
+  }
+  {
+    goPackagePath = "github.com/klauspost/crc32";
+    fetch = {
+      type = "git";
+      url = "https://github.com/klauspost/crc32";
+      rev = "1bab8b35b6bb565f92cbc97939610af9369f942a";
+      sha256 = "0n71bf2xkrk3b6svzsph3brwvam0cbz21pcwyymdw8scdn7mmyak";
+    };
+  }
+  {
+    goPackagePath = "github.com/mholt/caddy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mholt/caddy";
+      rev = "60838710883baa70cf6aae08e73820b21134ee72";
+      sha256 = "15dx12sap8ziwyn2wkgiy7fj1s320444zh0pn32mwjvn065c2k3z";
+    };
+  }
+  {
+    goPackagePath = "github.com/miekg/coredns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/miekg/coredns";
+      rev = "a7c9fd5d6b5157958a3df8dba0cdc1f24407957b";
+      sha256 = "11zbwx74hhgrd3qlwm91gqw6zcj4yf7af54cn3183ca8v66f3xyf";
+    };
+  }
+  {
+    goPackagePath = "github.com/miekg/dns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/miekg/dns";
+      rev = "75229eecb7af00b2736e93b779a78429dcb19472";
+      sha256 = "1vsjy07kkyx11iz4qsihhykac3ddq3ywdgv6bwrv407504f7x6wl";
+    };
+  }
+  {
+    goPackagePath = "github.com/opentracing/opentracing-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/opentracing/opentracing-go";
+      rev = "6edb48674bd9467b8e91fda004f2bd7202d60ce4";
+      sha256 = "0kwighhdm187b1yzcccm4hpy7m5sv1dij5ckg31n2614xvpippby";
+    };
+  }
+  {
+    goPackagePath = "github.com/openzipkin/zipkin-go-opentracing";
+    fetch = {
+      type = "git";
+      url = "https://github.com/openzipkin/zipkin-go-opentracing";
+      rev = "6022d4d3ed39632fad842942bda1813a9b4f63c8";
+      sha256 = "0gg9g2nxjf9almgzhx5sgqvbcx4zwvs873nl1d62jb6kqhsr8sjd";
+    };
+  }
+  {
+    goPackagePath = "github.com/pierrec/lz4";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pierrec/lz4";
+      rev = "5c9560bfa9ace2bf86080bf40d46b34ae44604df";
+      sha256 = "0j74a3xc48ispj8sb9c2sd1h53q99ws0f2x827b5p86xlpam8xyj";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "a1dba9ce8baed984a2495b658c82687f8157b98f";
+      sha256 = "1k2460bjzsm238sqx7wi42bym5bk7ybdr4qadk9szdbv65hh8vf6";
+    };
+  }
+  {
+    goPackagePath = "github.com/rcrowley/go-metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rcrowley/go-metrics";
+      rev = "1f30fe9094a513ce4c700b9a54458bbb0c96996c";
+      sha256 = "1hvbiaq4b6dqgjz6jkkxglfh9gf71zin6qsg508sh0r0ixfavrzj";
+    };
+  }
+  {
+    goPackagePath = "github.com/Shopify/sarama";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Shopify/sarama";
+      rev = "1416bd78f804d523005322194994f08c2a0ad797";
+      sha256 = "1skfkb1yhwf8w2n31dawr1kk145h3nwdf7xmm6yrwn69vbv8jqns";
+    };
+  }
+  {
+    goPackagePath = "github.com/apache/thrift";
+    fetch = {
+      type = "git";
+      url = "https://github.com/apache/thrift";
+      rev = "655b9b6ef86c45b423a194abee2a9cd057a16a74";
+      sha256 = "1kagirgxy2a9iabm8i32i5hdr36v5p0h651bsbyr0l99970myqfp";
+    };
+  }
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9";
+      sha256 = "1hrybsql68xw57brzj805xx2mghydpdiysv3gbhr7f5wlxj2514y";
+    };
+  }
+  {
+    goPackagePath = "github.com/coreos/etcd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/etcd";
+      rev = "2533c2a50c4b6114ad6fd4c0000175fac3b6ee06";
+      sha256 = "0z8byms8hfn7ncq8sqcw9avn9nfal5hw75ckbladd6gzjc8jay02";
+    };
+  }
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "346938d642f2ec3594ed81d874461961cd0faa76";
+      sha256 = "0d4jfmak5p6lb7n2r6yvf5p1zcw0l8j74kn55ghvr7zr7b7axm6c";
+    };
+  }
+  {
+    goPackagePath = "github.com/eapache/go-resiliency";
+    fetch = {
+      type = "git";
+      url = "https://github.com/eapache/go-resiliency";
+      rev = "b86b1ec0dd4209a588dc1285cdd471e73525c0b3";
+      sha256 = "1kzv95bh3nidm2cr7iv9lk3s2qiw1i17n8gyl2x6xk6qv8b0bc21";
+    };
+  }
+  {
+    goPackagePath = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev = "d2e1ade2d719b78fe5b061b4c18a9f7111b5bdc8";
+      sha256 = "1fh4jyxv1drh9jmadidrlszcnjp4zfazysbq5075lqd1mhq99lz0";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "69b215d01a5606c843240eab4937eab3acee6530";
+      sha256 = "1cy9jxqi6ba5qnjmvznlq49n2zzr5vqgky6pa9mckrbli8ssvzw7";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "c12348ce28de40eed0136aa2b644d0ee0650e56c";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
+    };
+  }
+  {
+    goPackagePath = "github.com/pierrec/xxHash";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pierrec/xxHash";
+      rev = "5a004441f897722c627870a981d02b29924215fa";
+      sha256 = "146ibrgvgh61jhbbv9wks0mabkci3s0m68sg6shmlv1yixkw6gja";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "6ab3432d241cbe3cb7543da7e7e9a934c7e9fe76";
+      sha256 = "19phcsvq1gn53af3nnh1lvvyzg8kpwribka9mszk18jv7l6nq9mf";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "6f3806018612930941127f2a7c6c453ba2c527d2";
+      sha256 = "1413ibprinxhni51p0755dp57r9wvbw7xgj9nmdaxmhzlqhc86j4";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "3007b6072c17c8d985734e6e19b1dea9174e13d3";
+      sha256 = "0jpvnmzqbzy2krwzan7pp3bc8pj9f1qic98lqq4hanccr0g5cmk3";
+    };
+  }
+  {
+    goPackagePath = "github.com/ugorji/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ugorji/go";
+      rev = "c88ee250d0221a57af388746f5cf03768c21d6e2";
+      sha256 = "0ylb5p5i9hln8chq8whk5iy8qypjpzyrp07zpwjd1zbf5nsm1nmv";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "6b27048ae5e6ad1ef927e72e437531493de612fe";
+      sha256 = "08zk0vavl7g6jzklhxhwrgcjh42mn2flbx2d2rxsblyxkbqri07j";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "075e574b89e4c2d22f2286a7e2b919519c6f3547";
+      sha256 = "1p38siwqcbd592lphaqpigl7scshkfy67k6jcwscbcsl6akw51km";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/dns/dnsdist/default.nix b/nixpkgs/pkgs/servers/dns/dnsdist/default.nix
new file mode 100644
index 000000000000..6757542050af
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/dnsdist/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, pkgconfig, systemd
+, boost, libsodium, libedit, re2
+, net_snmp, lua, protobuf, openssl }: stdenv.mkDerivation rec {
+  name = "dnsdist-${version}";
+  version = "1.3.2";
+
+  src = fetchurl {
+    url = "https://downloads.powerdns.com/releases/dnsdist-${version}.tar.bz2";
+    sha256 = "1i3b1vpk9a8zbx9aby2s1ckkzhlvzgn11hcgj3b8x2j1b9771rqb";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ systemd boost libsodium libedit re2 net_snmp lua protobuf openssl ];
+
+  configureFlags = [
+    "--enable-libsodium"
+    "--enable-re2"
+    "--enable-dnscrypt"
+    "--enable-dns-over-tls"
+    "--with-protobuf=yes"
+    "--with-net-snmp"
+    "--disable-dependency-tracking"
+    "--enable-unit-tests"
+    "--enable-systemd"
+  ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "DNS Loadbalancer";
+    homepage = "https://dnsdist.org";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ das_j ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dns/doh-proxy/default.nix b/nixpkgs/pkgs/servers/dns/doh-proxy/default.nix
new file mode 100644
index 000000000000..ac44dbbf04d1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/doh-proxy/default.nix
@@ -0,0 +1,22 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "doh-proxy";
+  version = "0.0.8";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "0mfl84mcklby6cnsw29kpcxj7mh1cx5yw6mjs4sidr1psyni7x6c";
+  };
+
+  propagatedBuildInputs = with python3Packages;
+    [ aioh2 dnspython aiohttp-remotes pytestrunner flake8 ];
+  doCheck = false; # Trouble packaging unittest-data-provider
+
+  meta = with lib; {
+    homepage = https://facebookexperimental.github.io/doh-proxy/;
+    description = "A proof of concept DNS-Over-HTTPS proxy";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.qyliss ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dns/knot-dns/default.nix b/nixpkgs/pkgs/servers/dns/knot-dns/default.nix
new file mode 100644
index 000000000000..2ff80906c01b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/knot-dns/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchurl, pkgconfig, gnutls, liburcu, lmdb, libcap_ng, libidn2, libunistring
+, systemd, nettle, libedit, zlib, libiconv, libintl
+}:
+
+let inherit (stdenv.lib) optional optionals; in
+
+# Note: ATM only the libraries have been tested in nixpkgs.
+stdenv.mkDerivation rec {
+  name = "knot-dns-${version}";
+  version = "2.7.4";
+
+  src = fetchurl {
+    url = "https://secure.nic.cz/files/knot-dns/knot-${version}.tar.xz";
+    sha256 = "0x7xx6jh4x8ljnvj30zh3n1zw5jkhla62dv9i75v0rwgrpxy5sxc";
+  };
+
+  outputs = [ "bin" "out" "dev" ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    gnutls liburcu libidn2 libunistring
+    nettle libedit
+    libiconv lmdb libintl
+    # without sphinx &al. for developer documentation
+  ]
+    ++ optionals stdenv.isLinux [ libcap_ng systemd ]
+    ++ optional stdenv.isDarwin zlib; # perhaps due to gnutls
+
+  enableParallelBuilding = true;
+
+  CFLAGS = [ "-O2" "-DNDEBUG" ];
+
+  doCheck = true;
+  doInstallCheck = false; # needs pykeymgr?
+
+  postInstall = ''rm -r "$out"/var "$out"/lib/*.la'';
+
+  meta = with stdenv.lib; {
+    description = "Authoritative-only DNS server from .cz domain registry";
+    homepage = https://knot-dns.cz;
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.vcunat ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dns/knot-resolver/default.nix b/nixpkgs/pkgs/servers/dns/knot-resolver/default.nix
new file mode 100644
index 000000000000..b4768f32bf16
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/knot-resolver/default.nix
@@ -0,0 +1,87 @@
+{ stdenv, fetchurl, runCommand, pkgconfig, hexdump, which
+, knot-dns, luajit, libuv, lmdb, gnutls, nettle
+, cmocka, systemd, dns-root-data, makeWrapper
+, extraFeatures ? false /* catch-all if defaults aren't enough */
+, luajitPackages
+}:
+let # un-indented, over the whole file
+
+result = if extraFeatures then wrapped-full else unwrapped;
+
+inherit (stdenv.lib) optional concatStringsSep;
+
+unwrapped = stdenv.mkDerivation rec {
+  name = "knot-resolver-${version}";
+  version = "3.2.0";
+
+  src = fetchurl {
+    url = "https://secure.nic.cz/files/knot-resolver/${name}.tar.xz";
+    sha256 = "924f1aebad04cacbc4545571239914d2c42e9253784c0df0f391dfad97c59f42";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  configurePhase = "patchShebangs scripts/";
+
+  nativeBuildInputs = [ pkgconfig which hexdump ];
+
+  # http://knot-resolver.readthedocs.io/en/latest/build.html#requirements
+  buildInputs = [ knot-dns luajit libuv gnutls nettle lmdb ]
+    ++ optional stdenv.isLinux systemd # sd_notify
+    ## optional dependencies; TODO: libedit, dnstap
+    ;
+
+  checkInputs = [ cmocka ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "ROOTHINTS=${dns-root-data}/root.hints"
+    "KEYFILE_DEFAULT=${dns-root-data}/root.ds"
+  ];
+  CFLAGS = [ "-O2" "-DNDEBUG" ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+  doInstallCheck = false; # FIXME
+  preInstallCheck = ''
+    patchShebangs tests/config/runtest.sh
+  '';
+
+  postInstall = ''
+    rm "$out"/etc/knot-resolver/root.hints # using system-wide instead
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Caching validating DNS resolver, from .cz domain registry";
+    homepage = https://knot-resolver.cz;
+    license = licenses.gpl3Plus;
+    # Platforms using negative pointers for stack won't work ATM due to LuaJIT impl.
+    platforms = filter (p: p != "aarch64-linux") platforms.unix;
+    maintainers = [ maintainers.vcunat /* upstream developer */ ];
+  };
+};
+
+wrapped-full = with luajitPackages; let
+    luaPkgs =  [
+      luasec luasocket # trust anchor bootstrap, prefill module
+      lfs # prefill module
+      # Almost all is for the 'http' module:
+      http cqueues fifo lpeg lpeg_patterns luaossl compat53 basexx
+    ];
+  in runCommand unwrapped.name
+  {
+    nativeBuildInputs = [ makeWrapper ];
+    preferLocalBuild = true;
+    allowSubstitutes = false;
+  }
+  ''
+    mkdir -p "$out/sbin" "$out/share"
+    makeWrapper '${unwrapped}/sbin/kresd' "$out"/sbin/kresd \
+      --set LUA_PATH  '${concatStringsSep ";" (map getLuaPath  luaPkgs)}' \
+      --set LUA_CPATH '${concatStringsSep ";" (map getLuaCPath luaPkgs)}'
+    ln -sr '${unwrapped}/share/man' "$out"/share/
+    ln -sr "$out"/{sbin,bin}
+  '';
+
+in result
diff --git a/nixpkgs/pkgs/servers/dns/nsd/default.nix b/nixpkgs/pkgs/servers/dns/nsd/default.nix
new file mode 100644
index 000000000000..8c0fc7377661
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/nsd/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl, libevent, openssl
+, bind8Stats       ? false
+, checking         ? false
+, ipv6             ? true
+, mmap             ? false
+, minimalResponses ? true
+, nsec3            ? true
+, ratelimit        ? false
+, recvmmsg         ? false
+, rootServer       ? false
+, rrtypes          ? false
+, zoneStats        ? false
+
+, configFile ? "etc/nsd/nsd.conf"
+}:
+
+stdenv.mkDerivation rec {
+  name = "nsd-4.1.26";
+
+  src = fetchurl {
+    url = "https://www.nlnetlabs.nl/downloads/nsd/${name}.tar.gz";
+    sha256 = "1x0mvj4872dzj1rr9adnchdm4dhn41xmc459p5j4s0r13m1l32lz";
+  };
+
+  prePatch = ''
+    substituteInPlace nsd-control-setup.sh.in --replace openssl ${openssl}/bin/openssl
+  '';
+
+  buildInputs = [ libevent openssl ];
+
+  configureFlags =
+    let edf = c: o: if c then ["--enable-${o}"] else ["--disable-${o}"];
+     in edf bind8Stats       "bind8-stats"
+     ++ edf checking         "checking"
+     ++ edf ipv6             "ipv6"
+     ++ edf mmap             "mmap"
+     ++ edf minimalResponses "minimal-responses"
+     ++ edf nsec3            "nsec3"
+     ++ edf ratelimit        "ratelimit"
+     ++ edf recvmmsg         "recvmmsg"
+     ++ edf rootServer       "root-server"
+     ++ edf rrtypes          "draft-rrtypes"
+     ++ edf zoneStats        "zone-stats"
+     ++ [ "--with-ssl=${openssl.dev}"
+          "--with-libevent=${libevent.dev}"
+          "--with-nsd_conf_file=${configFile}"
+          "--with-configdir=etc/nsd"
+        ];
+
+  patchPhase = ''
+    sed 's@$(INSTALL_DATA) nsd.conf.sample $(DESTDIR)$(nsdconfigfile).sample@@g' -i Makefile.in
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.nlnetlabs.nl;
+    description = "Authoritative only, high performance, simple and open source name server";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.hrdinka ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dns/pdns-recursor/default.nix b/nixpkgs/pkgs/servers/dns/pdns-recursor/default.nix
new file mode 100644
index 000000000000..e4a4bcf5760a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/pdns-recursor/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, pkgconfig, boost
+, openssl, systemd, lua, luajit, protobuf
+, enableProtoBuf ? false
+}:
+assert enableProtoBuf -> protobuf != null;
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  name = "pdns-recursor-${version}";
+  version = "4.1.8";
+
+  src = fetchurl {
+    url = "https://downloads.powerdns.com/releases/pdns-recursor-${version}.tar.bz2";
+    sha256 = "1xg5swappik8v5mjyl7magw7picf5cqp6rbhckd6ijssz16qzy38";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    boost openssl systemd
+    lua luajit
+  ] ++ optional enableProtoBuf protobuf;
+
+  configureFlags = [
+    "--enable-reproducible"
+    "--with-systemd"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "A recursive DNS server";
+    homepage = https://www.powerdns.com/;
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ rnhmjoj ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dns/powerdns/default.nix b/nixpkgs/pkgs/servers/dns/powerdns/default.nix
new file mode 100644
index 000000000000..f9f94f002a36
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/powerdns/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchurl, pkgconfig
+, boost, libyamlcpp, libsodium, sqlite, protobuf, botan2
+, mysql57, postgresql, lua, openldap, geoip, curl, opendbx, unixODBC
+}:
+
+stdenv.mkDerivation rec {
+  name = "powerdns-${version}";
+  version = "4.1.5";
+
+  src = fetchurl {
+    url = "https://downloads.powerdns.com/releases/pdns-${version}.tar.bz2";
+    sha256 = "12jgkdsh6hzaznq6y9y7hfdpjhnn7ar2qn7x706k9iyqcq55faf3";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    boost mysql57.connector-c postgresql lua openldap sqlite protobuf geoip
+    libyamlcpp libsodium curl opendbx unixODBC botan2
+  ];
+
+  patches = [
+    # checksum type not found, maybe a dependency is to old?
+    ./skip-sha384-test.patch
+  ];
+
+  # nix destroy with-modules arguments, when using configureFlags
+  preConfigure = ''
+    configureFlagsArray=(
+      "--with-modules=bind gmysql geoip godbc gpgsql gsqlite3 ldap lua mydns opendbx pipe random remote"
+      --with-sqlite3
+      --with-socketdir=/var/lib/powerdns
+      --enable-libsodium
+      --enable-botan
+      --enable-tools
+      --disable-dependency-tracking
+      --disable-silent-rules
+      --enable-reproducible
+      --enable-unit-tests
+    )
+  '';
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Authoritative DNS server";
+    homepage = https://www.powerdns.com;
+    platforms = platforms.linux;
+    # cannot find postgresql libs on macos x
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ mic92 disassembler ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/dns/powerdns/skip-sha384-test.patch b/nixpkgs/pkgs/servers/dns/powerdns/skip-sha384-test.patch
new file mode 100644
index 000000000000..3fafb38c48fb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/powerdns/skip-sha384-test.patch
@@ -0,0 +1,14 @@
+--- pdns-4.1.1.org/pdns/test-signers.cc	2018-02-17 11:43:15.953228279 +0000
++++ pdns-4.1.1/pdns/test-signers.cc	2018-02-17 11:44:21.089516393 +0000
+@@ -212,11 +212,6 @@
+       BOOST_CHECK_EQUAL(ds2.getZoneRepresentation(), signer.dsSHA256);
+     }
+ 
+-    auto ds4 = makeDSFromDNSKey(name, drc, DNSSECKeeper::SHA384);
+-    if (!signer.dsSHA384.empty()) {
+-      BOOST_CHECK_EQUAL(ds4.getZoneRepresentation(), signer.dsSHA384);
+-    }
+-
+     auto signature = dcke->sign(message);
+     BOOST_CHECK(dcke->verify(message, signature));
+ 
diff --git a/nixpkgs/pkgs/servers/echoip/default.nix b/nixpkgs/pkgs/servers/echoip/default.nix
new file mode 100644
index 000000000000..e71abb8bc00f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/echoip/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "echoip-${version}";
+  version = "unstable-2018-11-20";
+
+  goPackagePath = "github.com/mpolden/echoip";
+
+  src = fetchFromGitHub {
+    owner = "mpolden";
+    repo = "echoip";
+    rev = "4bfaf671b9f75a7b2b37543b2991401cbf57f1f0";
+    sha256 = "0n5d9i8cc5lqgy5apqd3zhyl3h1xjacf612z8xpvbm75jnllcvxy";
+  };
+
+  goDeps = ./deps.nix;
+
+  outputs = [ "bin" "out" ];
+
+  postInstall = ''
+    mkdir -p $out
+    cp $src/index.html $out/index.html
+  '';
+
+  meta = with lib; {
+    homepage = https://github.com/mpolden/echoip;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ rvolosatovs ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/echoip/deps.nix b/nixpkgs/pkgs/servers/echoip/deps.nix
new file mode 100644
index 000000000000..4e4f0799bdae
--- /dev/null
+++ b/nixpkgs/pkgs/servers/echoip/deps.nix
@@ -0,0 +1,74 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "v1.1.1";
+      sha256 = "0hka6hmyvp701adzag2g26cxdj47g21x6jz4sc6jjz1mn59d474y";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/jessevdk/go-flags";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jessevdk/go-flags";
+      rev = "v1.4.0";
+      sha256 = "0algnnigph27spgn655zm4723yfjxjjvlf4k14z9drj3682df25a";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/oschwald/geoip2-golang";
+    fetch = {
+      type = "FromGitHub";
+      owner = "oschwald";
+      repo = "geoip2-golang";
+      rev = "v1.2.1";
+      sha256 = "0zpgpz577rghvgis6ji9l99pq87z5izbgzmnbyn3dy533bayrgpw";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/oschwald/maxminddb-golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/oschwald/maxminddb-golang";
+      rev = "v1.2.1";
+      sha256 = "0nlip5a2yiig0sv9y3ky4kn8730236wal3zjcs4yfgnw6nxl3rjr";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev = "v1.0.0";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "v1.2.2";
+      sha256 = "0dlszlshlxbmmfxj5hlwgv3r22x0y1af45gn1vd198nvvs3pnvfs";
+    };
+  }
+
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "37707fdb30a5";
+      sha256 = "1abrr2507a737hdqv4q7pw7hv6ls9pdiq9crhdi52r3gcz6hvizg";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/elasticmq/default.nix b/nixpkgs/pkgs/servers/elasticmq/default.nix
new file mode 100644
index 000000000000..c1216becaf3d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/elasticmq/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, jre, makeWrapper, which }:
+
+stdenv.mkDerivation rec {
+  name = "elasticmq-0.5";
+
+  src = fetchurl {
+    url = "https://github.com/downloads/adamw/elasticmq/${name}.tar.gz";
+    sha256 = "1zpv3vzairprh4x9fia82qqr14kf5hpxq1r90mn4ww7ighbv9pf1";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase =
+    ''
+      mkdir -p $out/bin
+      cp -prd lib conf $out/
+      
+      cp bin/run.sh $out/bin/elasticmq
+      substituteInPlace $out/bin/elasticmq --replace '-DBASEDIR=$BASEDIR' '-DBASEDIR=''${ELASTICMQ_DATA_PREFIX:-.}'
+
+      wrapProgram $out/bin/elasticmq --prefix PATH : "${stdenv.lib.makeBinPath [ which jre ]}"
+    '';
+
+  meta = {
+    homepage = https://github.com/adamw/elasticmq;
+    description = "Message queueing system with Java, Scala and Amazon SQS-compatible interfaces";
+    longDescription =
+      ''
+        ElasticMQ is a message queueing system with Java, Scala and
+        Amazon SQS-compatible interfaces.  You should set the
+        environment ELASTICMQ_DATA_PREFIX to a writable directory
+        where ElasticMQ will store its data and log files.  It also
+        looks for its configuration file in
+        $ELASTICMQ_DATA_PREFIX/conf/Default.scala.  You can use the
+        Default.scala included in the distribution as a template.
+      '';
+    license = stdenv.lib.licenses.asl20;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/emby/default.nix b/nixpkgs/pkgs/servers/emby/default.nix
new file mode 100644
index 000000000000..12b0dde0c9b4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/emby/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchurl, unzip, sqlite, makeWrapper, dotnet-sdk, ffmpeg }:
+
+stdenv.mkDerivation rec {
+  name = "emby-${version}";
+  version = "3.5.3.0";
+
+  # We are fetching a binary here, however, a source build is possible.
+  # See -> https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=emby-server-git#n43
+  # Though in my attempt it failed with this error repeatedly
+  # The type 'Attribute' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
+  # This may also need msbuild (instead of xbuild) which isn't in nixpkgs
+  # See -> https://github.com/NixOS/nixpkgs/issues/29817
+  src = fetchurl {
+    url = "https://github.com/MediaBrowser/Emby.Releases/releases/download/${version}/embyserver-netcore_${version}.zip";
+    sha256 = "0311af3q813cx0ykbdk9vkmnyqi2l8rx66jnvdkw927q6invnnpj";
+  };
+
+  buildInputs = [
+    unzip
+    makeWrapper
+  ];
+
+  propagatedBuildInputs = [
+    dotnet-sdk
+    sqlite
+  ];
+
+  preferLocalBuild = true;
+
+  buildPhase = ''
+    rm -rf {electron,runtimes}
+  '';
+
+  installPhase = ''
+    install -dm 755 "$out/opt/emby-server"
+    cp -r * "$out/opt/emby-server"
+
+    makeWrapper "${dotnet-sdk}/bin/dotnet" $out/bin/emby \
+      --prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [
+        sqlite
+      ]}" \
+      --add-flags "$out/opt/emby-server/EmbyServer.dll -ffmpeg ${ffmpeg}/bin/ffmpeg -ffprobe ${ffmpeg}/bin/ffprobe"
+  '';
+
+  meta =  with stdenv.lib; {
+    description = "MediaBrowser - Bring together your videos, music, photos, and live television";
+    homepage = https://emby.media/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ fadenb ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/etcd/default.nix b/nixpkgs/pkgs/servers/etcd/default.nix
new file mode 100644
index 000000000000..d6b71f816083
--- /dev/null
+++ b/nixpkgs/pkgs/servers/etcd/default.nix
@@ -0,0 +1,36 @@
+{ lib, libpcap, buildGoPackage, fetchFromGitHub }:
+
+with lib;
+
+buildGoPackage rec {
+  name = "etcd-${version}";
+  version = "3.3.1"; # After updating check that nixos tests pass
+  rev = "v${version}";
+
+  goPackagePath = "github.com/coreos/etcd";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "coreos";
+    repo = "etcd";
+    sha256 = "11gzmi05y4kpnzgqc737l0wk5svxai4z17nl92jazqga6zhyavyl";
+  };
+
+  subPackages = [
+    "cmd/etcd"
+    "cmd/etcdctl"
+    "cmd/tools/benchmark"
+    "cmd/tools/etcd-dump-db"
+    "cmd/tools/etcd-dump-logs"
+  ];
+
+  buildInputs = [ libpcap ];
+
+  meta = {
+    description = "Distributed reliable key-value store for the most critical data of a distributed system";
+    license = licenses.asl20;
+    homepage = https://coreos.com/etcd/;
+    maintainers = with maintainers; [offline];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/exhibitor/default.nix b/nixpkgs/pkgs/servers/exhibitor/default.nix
new file mode 100644
index 000000000000..5e2381ada1d1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/exhibitor/default.nix
@@ -0,0 +1,54 @@
+{ fetchFromGitHub, maven, jdk, makeWrapper, stdenv, ... }:
+stdenv.mkDerivation rec {
+  name = "exhibitor-${version}";
+  version = "1.5.6";
+
+  src = fetchFromGitHub {
+    owner = "soabase";
+    repo = "exhibitor";
+    sha256 = "07vikhkldxy51jbpy3jgva6wz75jksch6bjd6dqkagfgqd6baw45";
+    rev = "5fcdb411d06e8638c2380f7acb72a8a6909739cd";
+  };
+  mavenDependenciesSha256 = "00r69n9hwvrn5cbhxklx7w00sjmqvcxs7gvhbm150ggy7bc865qv";
+  # This is adapted from https://github.com/volth/nixpkgs/blob/6aa470dfd57cae46758b62010a93c5ff115215d7/pkgs/applications/networking/cluster/hadoop/default.nix#L20-L32
+  fetchedMavenDeps = stdenv.mkDerivation {
+    name = "exhibitor-${version}-maven-deps";
+    inherit src nativeBuildInputs;
+    buildPhase = ''
+      cd ${pomFileDir};
+      while timeout --kill-after=21m 20m mvn package -Dmaven.repo.local=$out/.m2; [ $? = 124 ]; do
+        echo "maven hangs while downloading :("
+      done
+    '';
+    installPhase = ''find $out/.m2 -type f \! -regex '.+\(pom\|jar\|xml\|sha1\)' -delete''; # delete files with lastModified timestamps inside
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = mavenDependenciesSha256;
+  };
+
+  # The purpose of this is to fetch the jar file out of public Maven and use Maven
+  # to build a monolithic, standalone jar, rather than build everything from source
+  # (given the state of Maven support in Nix). We're not actually building any java
+  # source here.
+  pomFileDir = "exhibitor-standalone/src/main/resources/buildscripts/standalone/maven";
+  nativeBuildInputs = [ maven ];
+  buildInputs = [ makeWrapper ];
+  buildPhase = ''
+      cd ${pomFileDir}
+      mvn package --offline -Dmaven.repo.local=$(cp -dpR ${fetchedMavenDeps}/.m2 ./ && chmod +w -R .m2 && pwd)/.m2
+  '';
+  meta = with stdenv.lib; {
+    homepage = https://github.com/soabase/exhibitor;
+    description = "ZooKeeper co-process for instance monitoring, backup/recovery, cleanup and visualization";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/java
+    mv target/$name.jar $out/share/java/
+    makeWrapper ${jdk}/bin/java $out/bin/startExhibitor.sh --add-flags "-jar $out/share/java/$name.jar" --suffix PATH : ${stdenv.lib.makeBinPath [ jdk ]}
+  '';
+
+}
diff --git a/nixpkgs/pkgs/servers/fcgiwrap/default.nix b/nixpkgs/pkgs/servers/fcgiwrap/default.nix
new file mode 100644
index 000000000000..a1ec3a7deb08
--- /dev/null
+++ b/nixpkgs/pkgs/servers/fcgiwrap/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, systemd, fcgi, autoreconfHook, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  name = "fcgiwrap-${version}";
+  version = "1.1.0";
+
+  src = fetchurl {
+    url = "http://github.com/gnosek/fcgiwrap/archive/${version}.tar.gz";
+    sha256 = "07y6s4mm86cv7p1ljz94sxnqa89y9amn3vzwsnbq5hrl4vdy0zac";
+  };
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=implicit-fallthrough";
+  configureFlags = [ "--with-systemd" "--with-systemdsystemunitdir=$(out)/etc/systemd/system" ];
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ systemd fcgi ];
+
+  # systemd 230 no longer has libsystemd-daemon as a separate entity from libsystemd
+  postPatch = ''
+    substituteInPlace configure.ac --replace libsystemd-daemon libsystemd
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://nginx.localdomain.pl/wiki/FcgiWrap;
+    description = "Simple server for running CGI applications over FastCGI";
+    maintainers = with maintainers; [ lethalman ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/felix/default.nix b/nixpkgs/pkgs/servers/felix/default.nix
new file mode 100644
index 000000000000..5ce680e36460
--- /dev/null
+++ b/nixpkgs/pkgs/servers/felix/default.nix
@@ -0,0 +1,23 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  name = "apache-felix-${version}";
+  version = "5.6.1";
+  src = fetchurl {
+    url = "mirror://apache/felix/org.apache.felix.main.distribution-${version}.tar.gz";
+    sha256 = "0kis26iajzdid162j4i7g558q09x4hn9z7pqqys6ipb0fj84hz1x";
+  };
+  buildCommand =
+  ''
+    tar xfvz $src
+    cd felix-framework-*
+    mkdir -p $out
+    cp -av * $out
+  '';
+  meta = with stdenv.lib; {
+    description = "An OSGi gateway";
+    homepage = https://felix.apache.org;
+    license = licenses.asl20;
+    maintainers = [ maintainers.sander ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/felix/remoteshell.nix b/nixpkgs/pkgs/servers/felix/remoteshell.nix
new file mode 100644
index 000000000000..3ac3c98718f7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/felix/remoteshell.nix
@@ -0,0 +1,15 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  version = "1.1.2";
+  name = "apache-felix-remoteshell-bundle-${version}";
+  src = fetchurl {
+    url = "http://apache.proserve.nl/felix/org.apache.felix.shell.remote-${version}.jar";
+    sha256 = "147zw5ppn98wfl3pr32isyb267xm3gwsvdfdvjr33m9g2v1z69aq";
+  };
+  buildCommand =
+  ''
+    mkdir -p $out/bundle
+    cp ${src} $out/bundle/org.apache.felix.shell.remote-${version}.jar
+  '';
+}
diff --git a/nixpkgs/pkgs/servers/fingerd/bsd-fingerd/default.nix b/nixpkgs/pkgs/servers/fingerd/bsd-fingerd/default.nix
new file mode 100644
index 000000000000..d5671921abad
--- /dev/null
+++ b/nixpkgs/pkgs/servers/fingerd/bsd-fingerd/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+# !!! Duplication: this package is almost exactly the same as `bsd-fingerd'.
+
+stdenv.mkDerivation rec {
+  name = "bsd-fingerd-0.17";
+
+  src = fetchurl {
+    url = "ftp://ftp.metalab.unc.edu/pub/linux/system/network/finger/bsd-finger-0.17.tar.gz";
+    sha256 = "1yhkiv0in588il7f84k2xiy78g9lv12ll0y7047gazhiimk5v244";
+  };
+
+  NIX_CFLAGS_COMPILE = "-D_GNU_SOURCE";
+
+  patches = [ ./ubuntu-0.17-9.patch ];
+
+  preBuild = "cd fingerd";
+
+  preInstall = '' mkdir -p $out/man/man8 $out/sbin '';
+
+  meta = with stdenv.lib; {
+    platforms = platforms.linux;
+    license = licenses.bsdOriginal;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/fingerd/bsd-fingerd/ubuntu-0.17-9.patch b/nixpkgs/pkgs/servers/fingerd/bsd-fingerd/ubuntu-0.17-9.patch
new file mode 100644
index 000000000000..80968d587ba9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/fingerd/bsd-fingerd/ubuntu-0.17-9.patch
@@ -0,0 +1,67 @@
+--- bsd-finger-0.17.orig/fingerd/fingerd.8
++++ bsd-finger-0.17/fingerd/fingerd.8
+@@ -36,10 +36,10 @@
+ .Dt FINGERD 8
+ .Os "Linux NetKit (0.17)"
+ .Sh NAME
+-.Nm fingerd
++.Nm in.fingerd
+ .Nd remote user information server
+ .Sh SYNOPSIS
+-.Nm fingerd
++.Nm in.fingerd
+ .Op Fl wulf
+ .Op Fl pL Ar path
+ .Op Fl t Ar timeout
+@@ -61,7 +61,7 @@
+ banner
+ which also shows some informations (e.g. uptime, operating system name and
+ release) about the system the
+-.Nm fingerd
++.Nm in.fingerd
+ is running on. Some sites may consider this a security risk as it
+ gives out information that may be useful to crackers. 
+ .Pp
+@@ -85,7 +85,7 @@
+ .Pp
+ The 
+ .Fl p
+-option allows specification of an alternate location for fingerd to find
++option allows specification of an alternate location for in.fingerd to find
+ the 
+ .Dq finger
+ program. The
+@@ -97,7 +97,7 @@
+ option specifies the time to wait for a request before closing the
+ connection.  A value of 0 waits forever.  The default is 60 seconds.
+ .Pp
+-Options to fingerd should be specified in 
++Options to in.fingerd should be specified in 
+ .Pa /etc/inetd.conf .
+ .Pp
+ The finger protocol consists mostly of specifying command arguments.
+@@ -105,12 +105,12 @@
+ .Xr inetd 8
+ .Dq super-server
+ runs
+-.Nm fingerd
++.Nm in.fingerd
+ for 
+ .Tn TCP
+ requests received on port 79.
+ Once connected 
+-.Nm fingerd
++.Nm in.fingerd
+ reads a single command line
+ terminated by a
+ .Aq Tn CRLF
+--- bsd-finger-0.17.orig/fingerd/fingerd.c
++++ bsd-finger-0.17/fingerd/fingerd.c
+@@ -55,6 +55,7 @@
+ #include <netinet/in.h>
+ #include <sys/utsname.h>
+ #include <sys/wait.h>
++#include <sys/socket.h>
+ 
+ #include "pathnames.h"
+ #include "../version.h"
diff --git a/nixpkgs/pkgs/servers/firebird/default.nix b/nixpkgs/pkgs/servers/firebird/default.nix
new file mode 100644
index 000000000000..caf7d8360f07
--- /dev/null
+++ b/nixpkgs/pkgs/servers/firebird/default.nix
@@ -0,0 +1,91 @@
+{stdenv, fetchurl, libedit, automake, autoconf, libtool
+,
+  # icu = null: use icu which comes with firebird
+
+  # icu = pkgs.icu => you may have trouble sharing database files with windows
+  # users if "Collation unicode" columns are being used
+  # windows icu version is *30.dll, however neither the icu 3.0 nor the 3.6
+  # sources look close to what ships with this package.
+  # Thus I think its best to trust firebird devs and use their version
+
+  # icu version missmatch may cause such error when selecting from a table:
+  # "Collation unicode for character set utf8 is not installed"
+
+  # icu 3.0 can still be built easily by nix (by dropping the #elif case and
+  # make | make)
+  icu ? null
+
+, superServer ? false
+, port ? 3050
+, serviceName ? "gds_db"
+}:
+
+/*
+   there are 3 ways to use firebird:
+   a) superserver
+    - one process, one thread for each connection
+   b) classic
+    - is built by default
+    - one process for each connection
+    - on linux direct io operations (?)
+   c) embedded.
+
+   manual says that you usually don't notice the difference between a and b.
+
+   I'm only interested in the embedder shared libary for now.
+   So everything isn't tested yet
+
+*/
+
+stdenv.mkDerivation rec {
+  version = "2.5.7.27050-0";
+  name = "firebird-${version}";
+
+  # enableParallelBuilding = false; build fails
+
+  # http://tracker.firebirdsql.org/browse/CORE-3246
+  preConfigure = ''
+    makeFlags="$makeFlags CPU=$NIX_BUILD_CORES"
+  '';
+
+  configureFlags =
+    [ "--with-serivec-port=${builtins.toString port}"
+      "--with-service-name=${serviceName}"
+      # "--disable-static"
+      "--with-system-editline"
+      "--with-fblog=/var/log/firebird"
+      "--with-fbconf=/etc/firebird"
+      "--with-fbsecure-db=/var/db/firebird/system"
+    ]
+    ++ (stdenv.lib.optional  (icu != null) "--with-system-icu")
+    ++ (stdenv.lib.optional superServer "--enable-superserver");
+
+  src = fetchurl {
+    url = "mirror://sourceforge/firebird/Firebird-${version}.tar.bz2";
+    sha256 = "06hp6bq5irqvm3h03s79qjgcc3jsjpq150y9aq7anklx9v4nhfqa";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  # configurePhase = ''
+  #   sed -i 's@cp /usr/share/automake-.*@@' autogen.sh
+  #   sh autogen.sh $configureFlags --prefix=$out
+  # '';
+  buildInputs = [libedit icu automake autoconf libtool];
+
+  # TODO: Probably this hase to be tidied up..
+  # make install requires beeing. disabling the root checks
+  # dosen't work. Copying the files manually which can be found
+  # in ubuntu -dev -classic, -example packages:
+  # maybe some of those files can be removed again
+  installPhase = ''cp -r gen/firebird $out'';
+
+  meta = {
+    description = "SQL relational database management system";
+    homepage = https://www.firebirdnews.org;
+    license = ["IDPL" "Interbase-1.0"];
+    maintainers = [stdenv.lib.maintainers.marcweber];
+    platforms = stdenv.lib.platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/foswiki/default.nix b/nixpkgs/pkgs/servers/foswiki/default.nix
new file mode 100644
index 000000000000..542322d0e621
--- /dev/null
+++ b/nixpkgs/pkgs/servers/foswiki/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, perlPackages }:
+
+perlPackages.buildPerlPackage rec {
+  name = "foswiki-${version}";
+  version = "2.1.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/foswiki/${version}/Foswiki-${version}.tgz";
+    sha256 = "03286pb966h99zgickm2f20rgnqwp9wga5wfkdvirv084kjdh8vp";
+  };
+
+  outputs = [ "out" ];
+
+  buildInputs = with perlPackages; [
+    # minimum requirements from INSTALL.html#System_Requirements
+    AlgorithmDiff ArchiveTar AuthenSASL CGI CGISession CryptPasswdMD5
+    EmailMIME Encode Error FileCopyRecursive HTMLParser HTMLTree
+    IOSocketIP IOSocketSSL JSON
+    LocaleMaketext LocaleMaketextLexicon LocaleMsgfmt
+    LWP URI perlPackages.version
+    /*# optional dependencies
+    libapreq2 DBI DBDmysql DBDPg DBDSQLite FCGI FCGIProcManager
+    CryptSMIME CryptX509 ConvertPEM
+    */
+  ];
+
+  preConfigure = ''
+    touch Makefile.PL
+    patchShebangs .
+  '';
+  configureScript = "bin/configure";
+
+  # there's even no makefile
+  doCheck = false;
+  installPhase = ''cp -r . "$out" '';
+
+  meta = with stdenv.lib; {
+    description = "An open, programmable collaboration platform";
+    homepage = http://foswiki.org;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/foundationdb/default.nix b/nixpkgs/pkgs/servers/foundationdb/default.nix
new file mode 100644
index 000000000000..5d8e347de99d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/foundationdb/default.nix
@@ -0,0 +1,194 @@
+{ stdenv49
+, lib, fetchurl, fetchpatch, fetchFromGitHub
+
+, which, findutils, m4, gawk
+, python, openjdk, mono, libressl
+}:
+
+let
+  # hysterical raisins dictate a version of boost this old. however,
+  # we luckily do not need to build anything, we just need the header
+  # files.
+  boost152 = stdenv49.mkDerivation rec {
+    name = "boost-headers-1.52.0";
+
+    src = fetchurl {
+      url = "mirror://sourceforge/boost/boost_1_52_0.tar.bz2";
+      sha256 = "14mc7gsnnahdjaxbbslzk79rc0d12h1i681cd3srdwr3fzynlar2";
+    };
+
+    configurePhase = ":";
+    buildPhase = ":";
+    installPhase = "mkdir -p $out/include && cp -R boost $out/include/";
+  };
+
+  makeFdb =
+    { version
+    , branch
+    , sha256
+
+    # the revision can be inferred from the fdb tagging policy
+    , rev    ? "refs/tags/${version}"
+
+    # in theory newer versions of fdb support newer compilers, but they
+    # don't :( maybe one day
+    , stdenv ? stdenv49
+
+    # in theory newer versions of fdb support newer boost versions, but they
+    # don't :( maybe one day
+    , boost ? boost152
+
+    # if an release is unofficial/a prerelease, then make sure this is set
+    , officialRelease ? true
+    }: stdenv.mkDerivation rec {
+        name = "foundationdb-${version}";
+        inherit version;
+
+        src = fetchFromGitHub {
+          owner = "apple";
+          repo  = "foundationdb";
+          inherit rev sha256;
+        };
+
+        nativeBuildInputs = [ python openjdk gawk which m4 findutils mono ];
+        buildInputs = [ libressl boost ];
+
+        patches =
+          [ # For 5.2+, we need a slightly adjusted patch to fix all the ldflags
+            (if lib.versionAtLeast version "5.2"
+             then (if lib.versionAtLeast version "6.0"
+                   then ./ldflags-6.0.patch
+                   else ./ldflags-5.2.patch)
+             else ./ldflags-5.1.patch)
+          ]
+          # for 6.0+, we do NOT need to apply this version fix, since we can specify
+          # it ourselves. see configurePhase
+          ++ (lib.optional (!lib.versionAtLeast version "6.0") ./fix-scm-version.patch)
+          # Versions less than 6.0 have a busted Python 3 build due to an outdated
+          # use of 'print'. Also apply an update to the six module with many bugfixes,
+          # which is in 6.0+ as well
+          ++ (lib.optional (!lib.versionAtLeast version "6.0") (fetchpatch {
+            name   = "update-python-six.patch";
+            url    = "https://github.com/apple/foundationdb/commit/4bd9efc4fc74917bc04b07a84eb065070ea7edb2.patch";
+            sha256 = "030679lmc86f1wzqqyvxnwjyfrhh54pdql20ab3iifqpp9i5mi85";
+          }))
+          ++ (lib.optional (!lib.versionAtLeast version "6.0") (fetchpatch {
+            name   = "import-for-python-print.patch";
+            url    = "https://github.com/apple/foundationdb/commit/ded17c6cd667f39699cf663c0e87fe01e996c153.patch";
+            sha256 = "11y434w68cpk7shs2r22hyrpcrqi8vx02cw7v5x79qxvnmdxv2an";
+          }))
+          ;
+
+        postPatch = ''
+          # note: this does not do anything for 6.0+
+          substituteInPlace ./build/scver.mk \
+            --subst-var-by NIXOS_FDB_VERSION_ID "${rev}" \
+            --subst-var-by NIXOS_FDB_SCBRANCH   "${branch}"
+
+          substituteInPlace ./Makefile \
+            --replace 'shell which ccache' 'shell true' \
+            --replace -Werror ""
+
+          substituteInPlace ./Makefile \
+            --replace libstdc++_pic libstdc++
+
+          substituteInPlace ./build/link-validate.sh \
+            --replace 'exit 1' '#exit 1'
+
+          patchShebangs .
+        '' + lib.optionalString (lib.versionAtLeast version "6.0") ''
+          substituteInPlace ./Makefile \
+            --replace 'TLS_LIBS +=' '#TLS_LIBS +=' \
+            --replace 'LDFLAGS :=' 'LDFLAGS := -ltls -lssl -lcrypto'
+        '';
+
+        separateDebugInfo = true;
+        enableParallelBuilding = true;
+
+        makeFlags = [ "all" "fdb_java" "fdb_python" ]
+          # Don't compile FDBLibTLS if we don't need it in 6.0 or later;
+          # it gets statically linked in
+          ++ lib.optional (!lib.versionAtLeast version "6.0") [ "fdb_c" ]
+          # Needed environment overrides
+          ++ [ "KVRELEASE=1"
+               "NOSTRIP=1"
+             ] ++ lib.optional officialRelease [ "RELEASE=true" ];
+
+        # on 6.0 and later, we can specify all this information manually
+        configurePhase = lib.optionalString (lib.versionAtLeast version "6.0") ''
+          export SOURCE_CONTROL=GIT
+          export SCBRANCH="${branch}"
+          export VERSION_ID="${rev}"
+        '';
+
+        installPhase = ''
+          mkdir -vp $out/{bin,libexec/plugins} $lib/{lib,share/java} $dev/include/foundationdb
+
+        '' + lib.optionalString (!lib.versionAtLeast version "6.0") ''
+          # we only copy the TLS library on < 6.0, since it's compiled-in otherwise
+          cp -v ./lib/libFDBLibTLS.so $out/libexec/plugins/FDBLibTLS.so
+        '' + ''
+
+          # C API
+          cp -v ./lib/libfdb_c.so                           $lib/lib
+          cp -v ./bindings/c/foundationdb/fdb_c.h           $dev/include/foundationdb
+          cp -v ./bindings/c/foundationdb/fdb_c_options.g.h $dev/include/foundationdb
+          cp -v ./fdbclient/vexillographer/fdb.options      $dev/include/foundationdb
+
+          # java
+          cp -v ./bindings/java/foundationdb-client.jar     $lib/share/java/fdb-java.jar
+
+          # python
+          cp LICENSE ./bindings/python
+          substitute ./bindings/python/setup.py.in ./bindings/python/setup.py \
+            --replace 'VERSION' "${version}"
+          rm -f ./bindings/python/setup.py.in
+          rm -f ./bindings/python/fdb/*.pth # remove useless files
+          rm -f ./bindings/python/*.rst ./bindings/python/*.mk
+
+          cp -R ./bindings/python/                          tmp-pythonsrc/
+          tar -zcf $pythonsrc --transform s/tmp-pythonsrc/python-foundationdb/ ./tmp-pythonsrc/
+
+          # binaries
+          for x in fdbbackup fdbcli fdbserver fdbmonitor; do
+            cp -v "./bin/$x" $out/bin;
+          done
+
+          ln -sfv $out/bin/fdbbackup $out/bin/dr_agent
+          ln -sfv $out/bin/fdbbackup $out/bin/fdbrestore
+          ln -sfv $out/bin/fdbbackup $out/bin/fdbdr
+
+          ln -sfv $out/bin/fdbbackup $out/libexec/backup_agent
+        '';
+
+        outputs = [ "out" "lib" "dev" "pythonsrc" ];
+
+        meta = with stdenv.lib; {
+          description = "Open source, distributed, transactional key-value store";
+          homepage    = https://www.foundationdb.org;
+          license     = licenses.asl20;
+          platforms   = [ "x86_64-linux" ];
+          maintainers = with maintainers; [ thoughtpolice ];
+       };
+    };
+
+in with builtins; {
+
+  foundationdb51 = makeFdb rec {
+    version = "5.1.7";
+    branch  = "release-5.1";
+    sha256  = "1rc472ih24f9s5g3xmnlp3v62w206ny0pvvw02bzpix2sdrpbp06";
+  };
+
+  foundationdb52 = makeFdb rec {
+    version = "5.2.8";
+    branch  = "release-5.2";
+    sha256  = "1kbmmhk2m9486r4kyjlc7bb3wd50204i0p6dxcmvl6pbp1bs0wlb";
+  };
+
+  foundationdb60 = makeFdb rec {
+    version = "6.0.17";
+    branch  = "release-6.0";
+    sha256  = "00m6dkv2nm51zhiq049fiivnz8hpc8w21y024lykhn16kyjdnfhs";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/foundationdb/fix-scm-version.patch b/nixpkgs/pkgs/servers/foundationdb/fix-scm-version.patch
new file mode 100644
index 000000000000..0e0df7ade82b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/foundationdb/fix-scm-version.patch
@@ -0,0 +1,42 @@
+diff --git a/build/scver.mk b/build/scver.mk
+index bdae8be..7539864 100644
+--- a/build/scver.mk
++++ b/build/scver.mk
+@@ -98,33 +98,10 @@ endif
+ GITPRESENT := $(wildcard $(FDBDIR)/.git)
+ HGPRESENT := $(wildcard $(FDBDIR)/.hg)
+ 
+-# Use Git, if not missing
+-ifneq ($(GITPRESENT),)
+-	SCVER := $(shell cd "$(FDBDIR)" && git --version 2>/dev/null)
+-	ifneq ($(SCVER),)
+-		VERSION_ID := $(shell cd "$(FDBDIR)" && git rev-parse --verify HEAD)
+-		SOURCE_CONTROL := GIT
+-		SCBRANCH := $(shell cd "$(FDBDIR)" && git rev-parse --abbrev-ref HEAD)
+-	else
+-$(error Missing git executable on $(PLATFORM) )
+-	endif
+-# Otherwise, use Mercurial
+-else
+-	# Otherwise, use Mercurial, if not missing
+-	ifneq ($(HGPRESENT),)
+-		SCVER := $(shell cd "$(FDBDIR)" && hg --version 2>/dev/null)
+-		ifdef SCVER
+-			VERSION_ID := $(shell cd "$(FDBDIR)" && hg id -n)
+-			SOURCE_CONTROL := MERCURIAL
+-			SCBRANCH := $(shell cd "$(FDBDIR)" && hg branch)
+-		else
+-$(error Missing hg executable on $(PLATFORM))
+-		endif
+-	else
+-	FDBFILES := (shell ls -la $(FDBDIR))
+-$(error Missing source control information for source on $(PLATFORM) in directory: $(FDBDIR) with files: $(FDBFILES))
+-	endif
+-endif
++# NixOS-specific non-VCS packaging, filled out by the nix build
++SOURCE_CONTROL := GIT
++VERSION_ID     := @NIXOS_FDB_VERSION_ID@
++SCBRANCH       := @NIXOS_FDB_SCBRANCH@
+ 
+ # Set the RELEASE variable based on the KVRELEASE variable.
+ ifeq ($(KVRELEASE),1)
diff --git a/nixpkgs/pkgs/servers/foundationdb/ldflags-5.1.patch b/nixpkgs/pkgs/servers/foundationdb/ldflags-5.1.patch
new file mode 100644
index 000000000000..4d523a7ecdd3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/foundationdb/ldflags-5.1.patch
@@ -0,0 +1,90 @@
+diff --git a/FDBLibTLS/local.mk b/FDBLibTLS/local.mk
+index 0b6eac8..b1891ca 100644
+--- a/FDBLibTLS/local.mk
++++ b/FDBLibTLS/local.mk
+@@ -1,6 +1,5 @@
+ FDBLibTLS_CFLAGS := -fPIC -I/usr/local/include -I$(BOOSTDIR)
+-FDBLibTLS_STATIC_LIBS := -ltls -lssl -lcrypto
+-FDBLibTLS_LDFLAGS := -L/usr/local/lib -static-libstdc++ -static-libgcc -lrt
++FDBLibTLS_LDFLAGS := -L/usr/local/lib -static-libstdc++ -static-libgcc -lrt -ltls -lssl -lcrypto
+ FDBLibTLS_LDFLAGS += -Wl,-soname,FDBLibTLS.so -Wl,--version-script=FDBLibTLS/FDBLibTLS.map
+ 
+ # The plugin isn't a typical library, so it feels more sensible to have a copy
+diff --git a/bindings/c/local.mk b/bindings/c/local.mk
+index 44f0c31..7aea5a4 100644
+--- a/bindings/c/local.mk
++++ b/bindings/c/local.mk
+@@ -29,8 +29,8 @@ fdb_c_tests_HEADERS := -Ibindings/c
+ CLEAN_TARGETS += fdb_c_tests_clean
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdb_c_LIBS += lib/libstdc++.a -lm -lpthread -lrt -ldl
+-  fdb_c_LDFLAGS += -Wl,--version-script=bindings/c/fdb_c.map -static-libgcc -Wl,-z,nodelete
++  fdb_c_LIBS += lib/libstdc++.a
++  fdb_c_LDFLAGS += -Wl,--version-script=bindings/c/fdb_c.map -static-libgcc -Wl,-z,nodelete -lm -lpthread -lrt -ldl
+   fdb_c_tests_LIBS += -lpthread
+ endif
+ 
+diff --git a/bindings/flow/tester/local.mk b/bindings/flow/tester/local.mk
+index 2ef4fcb..6e59625 100644
+--- a/bindings/flow/tester/local.mk
++++ b/bindings/flow/tester/local.mk
+@@ -35,8 +35,7 @@ _fdb_flow_tester_clean:
+ 	@rm -rf bindings/flow/bin
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdb_flow_tester_LIBS += -ldl -lpthread -lrt
+-  fdb_flow_tester_LDFLAGS += -static-libstdc++ -static-libgcc
++  fdb_flow_tester_LDFLAGS += -static-libstdc++ -static-libgcc -ldl -lpthread -lrt
+ else ifeq ($(PLATFORM),osx)
+   fdb_flow_tester_LDFLAGS += -lc++
+ endif
+diff --git a/fdbbackup/local.mk b/fdbbackup/local.mk
+index 033fe7d..865fc92 100644
+--- a/fdbbackup/local.mk
++++ b/fdbbackup/local.mk
+@@ -25,8 +25,7 @@ fdbbackup_LDFLAGS := $(fdbrpc_LDFLAGS)
+ fdbbackup_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdbbackup_LIBS += -ldl -lpthread -lrt
+-  fdbbackup_LDFLAGS += -static-libstdc++ -static-libgcc
++  fdbbackup_LDFLAGS += -static-libstdc++ -static-libgcc -ldl -lpthread -lrt
+ 
+   # GPerfTools profiler (uncomment to use)
+   # fdbbackup_CFLAGS += -I/opt/gperftools/include -DUSE_GPERFTOOLS=1
+diff --git a/fdbcli/local.mk b/fdbcli/local.mk
+index 81a4a42..892c079 100644
+--- a/fdbcli/local.mk
++++ b/fdbcli/local.mk
+@@ -22,14 +22,13 @@
+ 
+ fdbcli_CFLAGS := $(fdbclient_CFLAGS)
+ fdbcli_LDFLAGS := $(fdbrpc_LDFLAGS)
+-fdbcli_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a -ldl
++fdbcli_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a
+ fdbcli_STATIC_LIBS :=
+ 
+ fdbcli_GENERATED_SOURCES += versions.h
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdbcli_LDFLAGS += -static-libstdc++ -static-libgcc
+-  fdbcli_LIBS += -lpthread -lrt
++  fdbcli_LDFLAGS += -static-libstdc++ -static-libgcc -lpthread -lrt -ldl
+ else ifeq ($(PLATFORM),osx)
+   fdbcli_LDFLAGS += -lc++
+ endif
+diff --git a/fdbserver/local.mk b/fdbserver/local.mk
+index 78cad1b..36f2c0f 100644
+--- a/fdbserver/local.mk
++++ b/fdbserver/local.mk
+@@ -25,8 +25,7 @@ fdbserver_LDFLAGS := $(fdbrpc_LDFLAGS)
+ fdbserver_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdbserver_LIBS += -ldl -lpthread -lrt
+-  fdbserver_LDFLAGS += -static-libstdc++ -static-libgcc
++  fdbserver_LDFLAGS += -static-libstdc++ -static-libgcc -ldl -lpthread -lrt
+ 
+   # GPerfTools profiler (uncomment to use)
+   # fdbserver_CFLAGS += -I/opt/gperftools/include -DUSE_GPERFTOOLS=1
diff --git a/nixpkgs/pkgs/servers/foundationdb/ldflags-5.2.patch b/nixpkgs/pkgs/servers/foundationdb/ldflags-5.2.patch
new file mode 100644
index 000000000000..ee5911e495f8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/foundationdb/ldflags-5.2.patch
@@ -0,0 +1,90 @@
+diff --git a/FDBLibTLS/local.mk b/FDBLibTLS/local.mk
+index 5e6b9cfb..73f4e5f3 100644
+--- a/FDBLibTLS/local.mk
++++ b/FDBLibTLS/local.mk
+@@ -1,6 +1,5 @@
+ FDBLibTLS_CFLAGS := -fPIC -I/usr/local/include -I$(BOOSTDIR) -Ifdbrpc
+-FDBLibTLS_STATIC_LIBS := -ltls -lssl -lcrypto
+-FDBLibTLS_LDFLAGS := -L/usr/local/lib -static-libstdc++ -static-libgcc -lrt
++FDBLibTLS_LDFLAGS := -L/usr/local/lib -static-libstdc++ -static-libgcc -lrt -ltls -lssl -lcrypto
+ FDBLibTLS_LDFLAGS += -Wl,-soname,FDBLibTLS.so -Wl,--version-script=FDBLibTLS/FDBLibTLS.map
+ 
+ # The plugin isn't a typical library, so it feels more sensible to have a copy
+diff --git a/bindings/c/local.mk b/bindings/c/local.mk
+index 44f0c31b..7aea5a4f 100644
+--- a/bindings/c/local.mk
++++ b/bindings/c/local.mk
+@@ -29,8 +29,8 @@ fdb_c_tests_HEADERS := -Ibindings/c
+ CLEAN_TARGETS += fdb_c_tests_clean
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdb_c_LIBS += lib/libstdc++.a -lm -lpthread -lrt -ldl
+-  fdb_c_LDFLAGS += -Wl,--version-script=bindings/c/fdb_c.map -static-libgcc -Wl,-z,nodelete
++  fdb_c_LIBS += lib/libstdc++.a
++  fdb_c_LDFLAGS += -Wl,--version-script=bindings/c/fdb_c.map -static-libgcc -Wl,-z,nodelete -lm -lpthread -lrt -ldl
+   fdb_c_tests_LIBS += -lpthread
+ endif
+ 
+diff --git a/bindings/flow/tester/local.mk b/bindings/flow/tester/local.mk
+index 2ef4fcb7..6e59625c 100644
+--- a/bindings/flow/tester/local.mk
++++ b/bindings/flow/tester/local.mk
+@@ -35,8 +35,7 @@ _fdb_flow_tester_clean:
+ 	@rm -rf bindings/flow/bin
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdb_flow_tester_LIBS += -ldl -lpthread -lrt
+-  fdb_flow_tester_LDFLAGS += -static-libstdc++ -static-libgcc
++  fdb_flow_tester_LDFLAGS += -static-libstdc++ -static-libgcc -ldl -lpthread -lrt
+ else ifeq ($(PLATFORM),osx)
+   fdb_flow_tester_LDFLAGS += -lc++
+ endif
+diff --git a/fdbbackup/local.mk b/fdbbackup/local.mk
+index 033fe7d4..865fc923 100644
+--- a/fdbbackup/local.mk
++++ b/fdbbackup/local.mk
+@@ -25,8 +25,7 @@ fdbbackup_LDFLAGS := $(fdbrpc_LDFLAGS)
+ fdbbackup_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdbbackup_LIBS += -ldl -lpthread -lrt
+-  fdbbackup_LDFLAGS += -static-libstdc++ -static-libgcc
++  fdbbackup_LDFLAGS += -static-libstdc++ -static-libgcc -ldl -lpthread -lrt
+ 
+   # GPerfTools profiler (uncomment to use)
+   # fdbbackup_CFLAGS += -I/opt/gperftools/include -DUSE_GPERFTOOLS=1
+diff --git a/fdbcli/local.mk b/fdbcli/local.mk
+index 81a4a42e..892c079c 100644
+--- a/fdbcli/local.mk
++++ b/fdbcli/local.mk
+@@ -22,14 +22,13 @@
+ 
+ fdbcli_CFLAGS := $(fdbclient_CFLAGS)
+ fdbcli_LDFLAGS := $(fdbrpc_LDFLAGS)
+-fdbcli_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a -ldl
++fdbcli_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a
+ fdbcli_STATIC_LIBS :=
+ 
+ fdbcli_GENERATED_SOURCES += versions.h
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdbcli_LDFLAGS += -static-libstdc++ -static-libgcc
+-  fdbcli_LIBS += -lpthread -lrt
++  fdbcli_LDFLAGS += -static-libstdc++ -static-libgcc -lpthread -lrt -ldl
+ else ifeq ($(PLATFORM),osx)
+   fdbcli_LDFLAGS += -lc++
+ endif
+diff --git a/fdbserver/local.mk b/fdbserver/local.mk
+index 78cad1bf..36f2c0f7 100644
+--- a/fdbserver/local.mk
++++ b/fdbserver/local.mk
+@@ -25,8 +25,7 @@ fdbserver_LDFLAGS := $(fdbrpc_LDFLAGS)
+ fdbserver_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdbserver_LIBS += -ldl -lpthread -lrt
+-  fdbserver_LDFLAGS += -static-libstdc++ -static-libgcc
++  fdbserver_LDFLAGS += -static-libstdc++ -static-libgcc -ldl -lpthread -lrt
+ 
+   # GPerfTools profiler (uncomment to use)
+   # fdbserver_CFLAGS += -I/opt/gperftools/include -DUSE_GPERFTOOLS=1
diff --git a/nixpkgs/pkgs/servers/foundationdb/ldflags-6.0.patch b/nixpkgs/pkgs/servers/foundationdb/ldflags-6.0.patch
new file mode 100644
index 000000000000..1fa17a9615aa
--- /dev/null
+++ b/nixpkgs/pkgs/servers/foundationdb/ldflags-6.0.patch
@@ -0,0 +1,78 @@
+diff --git a/bindings/c/local.mk b/bindings/c/local.mk
+index c861a29c..ff886e93 100644
+--- a/bindings/c/local.mk
++++ b/bindings/c/local.mk
+@@ -30,8 +30,8 @@ fdb_c_tests_HEADERS := -Ibindings/c
+ CLEAN_TARGETS += fdb_c_tests_clean
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdb_c_LIBS += lib/libstdc++.a -lm -lpthread -lrt -ldl
+-  fdb_c_LDFLAGS += -Wl,--version-script=bindings/c/fdb_c.map -static-libgcc -Wl,-z,nodelete
++  fdb_c_LIBS += lib/libstdc++.a
++  fdb_c_LDFLAGS += -Wl,--version-script=bindings/c/fdb_c.map -static-libgcc -Wl,-z,nodelete -lm -lpthread -lrt -ldl
+   fdb_c_tests_LIBS += -lpthread
+ endif
+ 
+diff --git a/bindings/flow/tester/local.mk b/bindings/flow/tester/local.mk
+index 2ef4fcb7..6e59625c 100644
+--- a/bindings/flow/tester/local.mk
++++ b/bindings/flow/tester/local.mk
+@@ -35,8 +35,7 @@ _fdb_flow_tester_clean:
+ 	@rm -rf bindings/flow/bin
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdb_flow_tester_LIBS += -ldl -lpthread -lrt
+-  fdb_flow_tester_LDFLAGS += -static-libstdc++ -static-libgcc
++  fdb_flow_tester_LDFLAGS += -static-libstdc++ -static-libgcc -ldl -lpthread -lrt
+ else ifeq ($(PLATFORM),osx)
+   fdb_flow_tester_LDFLAGS += -lc++
+ endif
+diff --git a/fdbbackup/local.mk b/fdbbackup/local.mk
+index ca5dbab6..012f0130 100644
+--- a/fdbbackup/local.mk
++++ b/fdbbackup/local.mk
+@@ -26,8 +26,7 @@ fdbbackup_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a $(FDB_TLS_LIB
+ fdbbackup_STATIC_LIBS := $(TLS_LIBS)
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdbbackup_LIBS += -ldl -lpthread -lrt
+-  fdbbackup_LDFLAGS += -static-libstdc++ -static-libgcc
++  fdbbackup_LDFLAGS += -static-libstdc++ -static-libgcc -ldl -lpthread -lrt
+ 
+   # GPerfTools profiler (uncomment to use)
+   # fdbbackup_CFLAGS += -I/opt/gperftools/include -DUSE_GPERFTOOLS=1
+diff --git a/fdbcli/local.mk b/fdbcli/local.mk
+index fd738876..3af026b9 100644
+--- a/fdbcli/local.mk
++++ b/fdbcli/local.mk
+@@ -22,14 +22,13 @@
+ 
+ fdbcli_CFLAGS := $(fdbclient_CFLAGS)
+ fdbcli_LDFLAGS := $(fdbrpc_LDFLAGS)
+-fdbcli_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a -ldl $(FDB_TLS_LIB)
++fdbcli_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a $(FDB_TLS_LIB)
+ fdbcli_STATIC_LIBS := $(TLS_LIBS)
+ 
+ fdbcli_GENERATED_SOURCES += versions.h
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdbcli_LDFLAGS += -static-libstdc++ -static-libgcc
+-  fdbcli_LIBS += -lpthread -lrt
++  fdbcli_LDFLAGS += -static-libstdc++ -static-libgcc -lpthread -lrt -ldl
+ else ifeq ($(PLATFORM),osx)
+   fdbcli_LDFLAGS += -lc++
+ endif
+diff --git a/fdbserver/local.mk b/fdbserver/local.mk
+index 690916d0..475abbaf 100644
+--- a/fdbserver/local.mk
++++ b/fdbserver/local.mk
+@@ -26,8 +26,7 @@ fdbserver_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a $(FDB_TLS_LIB
+ fdbserver_STATIC_LIBS := $(TLS_LIBS)
+ 
+ ifeq ($(PLATFORM),linux)
+-  fdbserver_LIBS += -ldl -lpthread -lrt
+-  fdbserver_LDFLAGS += -static-libstdc++ -static-libgcc
++  fdbserver_LDFLAGS += -static-libstdc++ -static-libgcc -ldl -lpthread -lrt
+ 
+   # GPerfTools profiler (uncomment to use)
+   # fdbserver_CFLAGS += -I/opt/gperftools/include -DUSE_GPERFTOOLS=1
diff --git a/nixpkgs/pkgs/servers/foundationdb/python.nix b/nixpkgs/pkgs/servers/foundationdb/python.nix
new file mode 100644
index 000000000000..55b834c54369
--- /dev/null
+++ b/nixpkgs/pkgs/servers/foundationdb/python.nix
@@ -0,0 +1,24 @@
+{ buildPythonPackage, lib, foundationdb }:
+
+buildPythonPackage rec {
+  pname = "foundationdb";
+  version = foundationdb.version;
+
+  src = foundationdb.pythonsrc;
+  unpackCmd = "tar xf $curSrc";
+
+  patchPhase = ''
+    substituteInPlace ./fdb/impl.py \
+      --replace libfdb_c.so "${foundationdb.lib}/lib/libfdb_c.so"
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Python bindings for FoundationDB";
+    homepage    = https://www.foundationdb.org;
+    license     = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ thoughtpolice ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/freeradius/default.nix b/nixpkgs/pkgs/servers/freeradius/default.nix
new file mode 100644
index 000000000000..df2130777bb8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/freeradius/default.nix
@@ -0,0 +1,94 @@
+{ stdenv, fetchurl, autoreconfHook, talloc, finger_bsd, perl
+, openssl
+, linkOpenssl? true
+, openldap
+, withLdap ? true
+, sqlite
+, withSqlite ? true
+, libpcap
+, withPcap ? true
+, libcap
+, withCap ? true
+, libmemcached
+, withMemcached ? false
+, hiredis
+, withRedis ? false
+, mysql
+, withMysql ? false
+, json_c
+, withJson ? false
+, libyubikey
+, withYubikey ? false
+, collectd
+, withCollectd ? false
+, curl
+, withRest ? false
+}:
+
+assert withSqlite -> sqlite != null;
+assert withLdap -> openldap != null;
+assert withPcap -> libpcap != null;
+assert withCap -> libcap != null;
+assert withMemcached -> libmemcached != null;
+assert withRedis -> hiredis != null;
+assert withMysql -> mysql != null;
+assert withYubikey -> libyubikey != null;
+assert withCollectd -> collectd != null;
+assert withRest -> curl != null && withJson;
+
+## TODO: include windbind optionally (via samba?)
+## TODO: include oracle optionally
+## TODO: include ykclient optionally
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+  name = "freeradius-${version}";
+  version = "3.0.17";
+
+  src = fetchurl {
+    url = "ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-${version}.tar.gz";
+    sha256 = "0bc35knv46z729l4h22rirqns5v6jb0fzcffnjayhs8wjysfkfyy";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ openssl talloc finger_bsd perl ]
+    ++ optional withLdap openldap
+    ++ optional withSqlite sqlite
+    ++ optional withPcap libpcap
+    ++ optional withCap libcap
+    ++ optional withMemcached libmemcached
+    ++ optional withRedis hiredis
+    ++ optional withMysql mysql.connector-c
+    ++ optional withJson json_c
+    ++ optional withYubikey libyubikey
+    ++ optional withCollectd collectd
+    ++ optional withRest curl;
+
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ] ++ optional (!linkOpenssl) "--with-openssl=no";
+
+  postPatch = ''
+    substituteInPlace src/main/checkrad.in --replace "/usr/bin/finger" "${finger_bsd}/bin/finger"
+  '';
+
+  installFlags = [
+    "sysconfdir=\${out}/etc"
+    "localstatedir=\${TMPDIR}"
+  ];
+
+  outputs = [ "out" "dev" "man" "doc" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://freeradius.org/;
+    description = "A modular, high performance free RADIUS suite";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ sheenobu willibutz ];
+    platforms = with platforms; linux;
+  };
+
+}
+
diff --git a/nixpkgs/pkgs/servers/ftp/bftpd/default.nix b/nixpkgs/pkgs/servers/ftp/bftpd/default.nix
new file mode 100644
index 000000000000..02bf714a42bf
--- /dev/null
+++ b/nixpkgs/pkgs/servers/ftp/bftpd/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl }:
+
+let
+  pname = "bftpd";
+
+in stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+  version = "5.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/${pname}/${pname}/${name}/${name}.tar.gz";
+    sha256 = "1qagqsbg7zblkhg3vrj47k5f1q09r4az7gna86rxf253kmg90yqp";
+  };
+
+  preConfigure = ''
+    sed -re 's/-[og] 0//g' -i Makefile*
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/doc/${pname}
+    mv $out/etc/*.conf $out/share/doc/${pname}
+    rm -rf $out/{etc,var}
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    inherit version;
+    description = "A minimal ftp server";
+    downloadPage = "http://bftpd.sf.net/download.html";
+    homepage = http://bftpd.sf.net/;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/ftp/pure-ftpd/default.nix b/nixpkgs/pkgs/servers/ftp/pure-ftpd/default.nix
new file mode 100644
index 000000000000..f41bb726a28c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/ftp/pure-ftpd/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, openssl }:
+
+stdenv.mkDerivation rec {
+  name = "pure-ftpd-1.0.47";
+
+  src = fetchurl {
+    url = "https://download.pureftpd.org/pub/pure-ftpd/releases/${name}.tar.gz";
+    sha256 = "1b97ixva8m10vln8xrfwwwzi344bkgxqji26d0nrm1yzylbc6h27";
+  };
+
+  buildInputs = [ openssl ];
+
+  configureFlags = [ "--with-tls" ];
+
+  meta = with stdenv.lib; {
+    description = "A free, secure, production-quality and standard-conformant FTP server";
+    homepage = https://www.pureftpd.org;
+    license = licenses.isc; # with some parts covered by BSD3(?)
+    maintainers = [ maintainers.lethalman ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/ftp/vsftpd/CVE-2015-1419.patch b/nixpkgs/pkgs/servers/ftp/vsftpd/CVE-2015-1419.patch
new file mode 100644
index 000000000000..0a6144395116
--- /dev/null
+++ b/nixpkgs/pkgs/servers/ftp/vsftpd/CVE-2015-1419.patch
@@ -0,0 +1,104 @@
+Description: CVE-2015-1419: config option deny_file is not handled correctly
+Author: Marcus Meissner <meissner@suse.com>
+Origin: https://bugzilla.novell.com/show_bug.cgi?id=CVE-2015-1419
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=776922
+Last-Update: 2015-02-24
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: trunk/ls.c
+===================================================================
+--- trunk.orig/ls.c
++++ trunk/ls.c
+@@ -7,6 +7,7 @@
+  * Would you believe, code to handle directory listing.
+  */
+ 
++#include <stdlib.h>
+ #include "ls.h"
+ #include "access.h"
+ #include "defs.h"
+@@ -243,11 +244,42 @@ vsf_filename_passes_filter(const struct
+   struct mystr temp_str = INIT_MYSTR;
+   struct mystr brace_list_str = INIT_MYSTR;
+   struct mystr new_filter_str = INIT_MYSTR;
++  struct mystr normalize_filename_str = INIT_MYSTR;
++  const char *normname;
++  const char *path;
+   int ret = 0;
+   char last_token = 0;
+   int must_match_at_current_pos = 1;
++
+   str_copy(&filter_remain_str, p_filter_str);
+-  str_copy(&name_remain_str, p_filename_str);
++
++  /* normalize filepath */
++  path = str_strdup(p_filename_str);
++  normname = realpath(path, NULL);
++  if (normname == NULL)
++     goto out;
++  str_alloc_text(&normalize_filename_str, normname);
++
++  if (!str_isempty (&filter_remain_str) && !str_isempty(&normalize_filename_str)) {
++    if (str_get_char_at(p_filter_str, 0) == '/') {
++      if (str_get_char_at(&normalize_filename_str, 0) != '/') {
++        str_getcwd (&name_remain_str);
++
++        if (str_getlen(&name_remain_str) > 1) /* cwd != root dir */
++          str_append_char (&name_remain_str, '/');
++
++        str_append_str (&name_remain_str, &normalize_filename_str);
++      }
++      else
++       str_copy (&name_remain_str, &normalize_filename_str);
++    } else {
++      if (str_get_char_at(p_filter_str, 0) != '{')
++        str_basename (&name_remain_str, &normalize_filename_str);
++      else
++        str_copy (&name_remain_str, &normalize_filename_str);
++    }
++  } else
++    str_copy(&name_remain_str, &normalize_filename_str);
+ 
+   while (!str_isempty(&filter_remain_str) && *iters < VSFTP_MATCHITERS_MAX)
+   {
+@@ -379,6 +411,9 @@ vsf_filename_passes_filter(const struct
+     ret = 0;
+   }
+ out:
++  free((char*) normname);
++  free((char*) path);
++  str_free(&normalize_filename_str);
+   str_free(&filter_remain_str);
+   str_free(&name_remain_str);
+   str_free(&temp_str);
+Index: trunk/str.c
+===================================================================
+--- trunk.orig/str.c
++++ trunk/str.c
+@@ -723,3 +723,14 @@ str_replace_unprintable(struct mystr* p_
+   }
+ }
+ 
++void
++str_basename (struct mystr* d_str, const struct mystr* path)
++{
++  static struct mystr tmp;
++
++  str_copy (&tmp, path);
++  str_split_char_reverse(&tmp, d_str, '/');
++
++  if (str_isempty(d_str))
++   str_copy (d_str, path);
++}
+Index: trunk/str.h
+===================================================================
+--- trunk.orig/str.h
++++ trunk/str.h
+@@ -101,6 +101,7 @@ void str_replace_unprintable(struct myst
+ int str_atoi(const struct mystr* p_str);
+ filesize_t str_a_to_filesize_t(const struct mystr* p_str);
+ unsigned int str_octal_to_uint(const struct mystr* p_str);
++void str_basename (struct mystr* d_str, const struct mystr* path);
+ 
+ /* PURPOSE: Extract a line of text (delimited by \n or EOF) from a string
+  * buffer, starting at character position 'p_pos'. The extracted line will
diff --git a/nixpkgs/pkgs/servers/ftp/vsftpd/default.nix b/nixpkgs/pkgs/servers/ftp/vsftpd/default.nix
new file mode 100644
index 000000000000..cc7493f9533c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/ftp/vsftpd/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, openssl, sslEnable ? false, libcap, pam }:
+
+stdenv.mkDerivation rec {
+  name = "vsftpd-3.0.3";
+
+  src = fetchurl {
+    url = "https://security.appspot.com/downloads/${name}.tar.gz";
+    sha256 = "1xsyjn68k3fgm2incpb3lz2nikffl9by2safp994i272wvv2nkcx";
+  };
+
+  patches = [ ./CVE-2015-1419.patch ];
+
+  preConfigure = stdenv.lib.optionalString sslEnable ''
+    echo "Will enable SSL"
+    sed -i "/VSF_BUILD_SSL/s/^#undef/#define/" builddefs.h
+  '';
+
+  # The gcc-wrappers use -idirafter for glibc, and vsftpd also, and
+  # their dummyinc come before those of glibc, then the build works bad.
+  prePatch = ''
+    sed -i -e 's/-idirafter.*//' Makefile
+  '';
+
+  preBuild =
+    let
+      sslLibs = if sslEnable then "-lcrypt -lssl -lcrypto" else "";
+    in ''
+      makeFlagsArray=( "LIBS=${sslLibs} -lpam -lcap -fstack-protector" )
+    '';
+
+  # It won't link without this flag, used in CFLAGS
+
+  buildInputs = [ openssl libcap pam ];
+
+  installPhase = ''
+    mkdir -pv $out/sbin
+    install -v -m 755 vsftpd $out/sbin/vsftpd
+
+    mkdir -pv $out/share/man/man{5,8}
+    install -v -m 644 vsftpd.8 $out/share/man/man8/vsftpd.8
+    install -v -m 644 vsftpd.conf.5 $out/share/man/man5/vsftpd.conf.5
+
+    mkdir -pv $out/etc/xinetd.d
+    install -v -m 644 xinetd.d/vsftpd $out/etc/xinetd.d/vsftpd
+  '';
+
+  meta = {
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/gnatsd/default.nix b/nixpkgs/pkgs/servers/gnatsd/default.nix
new file mode 100644
index 000000000000..81ea4056e091
--- /dev/null
+++ b/nixpkgs/pkgs/servers/gnatsd/default.nix
@@ -0,0 +1,26 @@
+{  buildGoPackage, fetchFromGitHub, lib  }:
+
+with lib;
+
+buildGoPackage rec {
+  name = "gnatsd-${version}";
+  version = "1.2.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/nats-io/gnatsd";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "nats-io";
+    repo = "gnatsd";
+    sha256 = "186xywzdrmvlhlh9wgjs71rqvgab8vinlr3gkzkknny82nv7hcjw";
+  };
+
+  meta = {
+    description = "High-Performance server for NATS";
+    license = licenses.asl20;
+    maintainers = [ maintainers.swdunlop ];
+    homepage = https://nats.io/;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/gopher/gofish/default.nix b/nixpkgs/pkgs/servers/gopher/gofish/default.nix
new file mode 100644
index 000000000000..754cba588258
--- /dev/null
+++ b/nixpkgs/pkgs/servers/gopher/gofish/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+
+  name = "gofish-${version}";
+  version = "1.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/gofish/gofish/${version}/${name}.tar.gz";
+    sha256 = "0br5nvlna86k4ya4q13gz0i7nlmk225lqmpfiqlkldxkr473kf0s";
+  };
+  	
+  meta = with stdenv.lib; {
+    description = "A lightweight Gopher server";
+    homepage = http://gofish.sourceforge.net/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/gotty/default.nix b/nixpkgs/pkgs/servers/gotty/default.nix
new file mode 100644
index 000000000000..ebade244bdf7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/gotty/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "gotty-${version}";
+  version = "0.0.13";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/yudai/gotty";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "yudai";
+    repo = "gotty";
+    sha256 = "1hsfjyjjzr1zc9m8bnhid1ag6ipcbx59111y9p7k8az8jiyr112g";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Share your terminal as a web application";
+    homepage = https://github.com/yudai/gotty;
+    maintainers = with maintainers; [ ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/gotty/deps.nix b/nixpkgs/pkgs/servers/gotty/deps.nix
new file mode 100644
index 000000000000..4f59dc414c49
--- /dev/null
+++ b/nixpkgs/pkgs/servers/gotty/deps.nix
@@ -0,0 +1,74 @@
+[
+  {
+    goPackagePath = "github.com/gorilla/websocket";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/websocket";
+      rev = "a622679ebd7a3b813862379232f645f8e690e43f";
+      sha256 = "1nc9jbcmgya1i6dmf6sbcqsnxi9hbjg6dz1z0k7zmc6xdwlq0y4q";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/pty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/pty";
+      rev = "67e2db24c831afa6c64fc17b4a143390674365ef";
+      sha256 = "1l3z3wbb112ar9br44m8g838z0pq2gfxcp5s3ka0xvm1hjvanw2d";
+    };
+  }
+  {
+    goPackagePath = "github.com/braintree/manners";
+    fetch = {
+      type = "git";
+      url = "https://github.com/braintree/manners";
+      rev = "cab36f97339b1925cd89e158632728025557e550";
+      sha256 = "1q508c62iiklghkhwqz9c0zsn9hrij7kqb93gdywzj7ms7x6hlfh";
+    };
+  }
+  {
+    goPackagePath = "github.com/codegangsta/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/codegangsta/cli";
+      rev = "71f57d300dd6a780ac1856c005c4b518cfd498ec";
+      sha256 = "1fxznirkvank5461789dm5aw5z8aqi0jvwligvz44659rfl376p3";
+    };
+  }
+  {
+    goPackagePath = "github.com/elazarl/go-bindata-assetfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/elazarl/go-bindata-assetfs";
+      rev = "d5cac425555ca5cf00694df246e04f05e6a55150";
+      sha256 = "636ce247ff6f85c14f38a421f46662fa77bdc29762692e1f72b3cd1f9d7a1d17";
+    };
+  }
+  {
+    goPackagePath = "github.com/fatih/structs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/structs";
+      rev = "a9f7daa9c2729e97450c2da2feda19130a367d8f";
+      sha256 = "0pyrc7svc826g37al3db19n5l4r2m9h1mlhjh3hz2r41xfaqia50";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/hcl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/hcl";
+      rev = "54864211433d45cb780682431585b3e573b49e4a";
+      sha256 = "07l2dydzjpdgm2d4a72hkmincn455j3nrafg6hs3c23bkvizj950";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/go-multierror";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/go-multierror";
+      rev = "56912fb08d85084aa318edcf2bba735b97cf35c5";
+      sha256 = "0s01cqdab2f7fxkkjjk2wqx05a1shnwlvfn45h2pi3i4gapvcn0r";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/gpm/default.nix b/nixpkgs/pkgs/servers/gpm/default.nix
new file mode 100644
index 000000000000..7636dca15d8d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/gpm/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, fetchurl, automake, autoconf, libtool, flex, bison, texinfo, fetchpatch
+
+# Optional Dependencies
+, ncurses ? null
+}:
+
+stdenv.mkDerivation rec {
+  name = "gpm-1.20.7";
+
+  src = fetchurl {
+    url = "https://www.nico.schottelius.org/software/gpm/archives/${name}.tar.bz2";
+    sha256 = "13d426a8h403ckpc8zyf7s2p5rql0lqbg2bv0454x0pvgbfbf4gh";
+  };
+
+  postPatch = ''
+    substituteInPlace src/prog/gpm-root.y --replace __sigemptyset sigemptyset
+  '';
+
+  nativeBuildInputs = [ automake autoconf libtool flex bison texinfo ];
+  buildInputs = [ ncurses ];
+
+  hardeningDisable = [ "format" ];
+
+  patches = [
+    # musl compat patches, safe everywhere
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/gentoo/musl/5aed405d87dfa92a5cab1596f898e9dea07169b8/sys-libs/gpm/files/gpm-1.20.7-musl-missing-headers.patch";
+      sha256 = "1g338m6j1sba84wlqp1r6rpabj5nm6ki577hjalg46czg0lfp20h";
+    })
+    # Touches same code as glibc fix in postPatch above, but on the non-glibc route
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/gentoo/musl/5aed405d87dfa92a5cab1596f898e9dea07169b8/sys-libs/gpm/files/gpm-1.20.7-musl-portable-sigaction.patch";
+      sha256 = "0hfdqm9977hd5dpzn05y0a6jbj55w1kp4hd9gyzmg9wslmxni4rg";
+    })
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/gentoo/musl/5aed405d87dfa92a5cab1596f898e9dea07169b8/sys-libs/gpm/files/gpm-1.20.7-sysmacros.patch";
+      sha256 = "0lg4l9phvy2n8gy17qsn6zn0qq52vm8g01pgq5kqpr8sd3fb21c2";
+    })
+  ];
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    (if ncurses == null then "--without-curses" else "--with-curses")
+  ];
+
+  # Provide libgpm.so for compatability
+  postInstall = ''
+    ln -sv $out/lib/libgpm.so.2 $out/lib/libgpm.so
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.nico.schottelius.org/software/gpm/;
+    description = "A daemon that provides mouse support on the Linux console";
+    license = licenses.gpl2;
+    platforms = platforms.linux ++ platforms.cygwin;
+    maintainers = with maintainers; [ eelco wkennington ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/gpsd/0001-Import-LD_LIBRARY_PATH-to-allow-running-scons-check-.patch b/nixpkgs/pkgs/servers/gpsd/0001-Import-LD_LIBRARY_PATH-to-allow-running-scons-check-.patch
new file mode 100644
index 000000000000..a8721a3e7029
--- /dev/null
+++ b/nixpkgs/pkgs/servers/gpsd/0001-Import-LD_LIBRARY_PATH-to-allow-running-scons-check-.patch
@@ -0,0 +1,25 @@
+From e08583ddb8445241c38c88d828271be908d52f9f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= <bjorn.forsman@gmail.com>
+Date: Mon, 17 Feb 2014 20:52:50 +0000
+Subject: [PATCH 1/2] Import LD_LIBRARY_PATH to allow running 'scons check'
+ without 'chrpath'
+
+---
+ SConstruct | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/SConstruct b/SConstruct
+index fe444a2..f73c87e 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -220,6 +220,7 @@ import_env = (
+     'STAGING_DIR',     # Required by the OpenWRT and CeroWrt builds.
+     'STAGING_PREFIX',  # Required by the OpenWRT and CeroWrt builds.
+     'WRITE_PAD',       # So we can test WRITE_PAD values on the fly.
++    'LD_LIBRARY_PATH', # Allows running 'scons check' without 'chrpath'
+     )
+ envs = {}
+ for var in import_env:
+-- 
+2.9.0
+
diff --git a/nixpkgs/pkgs/servers/gpsd/0001-Use-pkgconfig-for-dbus-library.patch b/nixpkgs/pkgs/servers/gpsd/0001-Use-pkgconfig-for-dbus-library.patch
new file mode 100644
index 000000000000..58ae754ecfb5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/gpsd/0001-Use-pkgconfig-for-dbus-library.patch
@@ -0,0 +1,31 @@
+From b4ed6e9e89e3b7d57e5de9f2c1987a489bb5628c Mon Sep 17 00:00:00 2001
+From: Alexey Shmalko <rasen.dubi@gmail.com>
+Date: Sat, 9 Jul 2016 20:54:05 +0300
+Subject: [PATCH] Use pkgconfig for dbus library
+
+Without this, gcc can't find library path for the dbus.
+
+This is already fixed upstream, so the patch shouldn't be necessary with
+the next version of gpsd.
+---
+ SConstruct | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index 0d4b29d..d8624b0 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -586,8 +586,8 @@ else:
+ 
+     if env['dbus_export'] and config.CheckPKG('dbus-1'):
+         confdefs.append("#define HAVE_DBUS 1\n")
+-        dbusflags = ["-ldbus-1"]
+-        env.MergeFlags(pkg_config("dbus-1"))
++        dbusflags = pkg_config("dbus-1")
++        env.MergeFlags(dbusflags)
+     else:
+         confdefs.append("/* #undef HAVE_DBUS */\n")
+         dbusflags = []
+-- 
+2.9.0
+
diff --git a/nixpkgs/pkgs/servers/gpsd/0002-Import-XML_CATALOG_FILES-to-be-able-to-validate-the-.patch b/nixpkgs/pkgs/servers/gpsd/0002-Import-XML_CATALOG_FILES-to-be-able-to-validate-the-.patch
new file mode 100644
index 000000000000..3e387167d6fb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/gpsd/0002-Import-XML_CATALOG_FILES-to-be-able-to-validate-the-.patch
@@ -0,0 +1,28 @@
+From 21e5295a633c8c450629106c4603b78b2de7d786 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= <bjorn.forsman@gmail.com>
+Date: Sat, 15 Mar 2014 15:08:01 +0100
+Subject: [PATCH 2/2] Import XML_CATALOG_FILES to be able to validate the
+ manual
+
+In nixos/nixpkgs, 'xmlto' depends on $XML_CATALOG_FILES to be able to
+validate XML documents. Because without it, it'll try to go online to
+download DTD's and builders don't have network access...
+---
+ SConstruct | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/SConstruct b/SConstruct
+index f73c87e..0d4b29d 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -221,6 +221,7 @@ import_env = (
+     'STAGING_PREFIX',  # Required by the OpenWRT and CeroWrt builds.
+     'WRITE_PAD',       # So we can test WRITE_PAD values on the fly.
+     'LD_LIBRARY_PATH', # Allows running 'scons check' without 'chrpath'
++    'XML_CATALOG_FILES', # Enables validating the manual with 'xmlto' using nix build system
+     )
+ envs = {}
+ for var in import_env:
+-- 
+2.9.0
+
diff --git a/nixpkgs/pkgs/servers/gpsd/0002-scons-envs-patch.patch b/nixpkgs/pkgs/servers/gpsd/0002-scons-envs-patch.patch
new file mode 100644
index 000000000000..fbb06db6aa39
--- /dev/null
+++ b/nixpkgs/pkgs/servers/gpsd/0002-scons-envs-patch.patch
@@ -0,0 +1,11 @@
+--- b/SConstruct	2018-07-03 23:13:51.986746857 +0200
++++ a/SConstruct	2018-07-03 23:14:50.495252914 +0200
+@@ -221,7 +221,7 @@
+     'STAGING_PREFIX',  # Required by the OpenWRT and CeroWrt builds.
+     'WRITE_PAD',       # So we can test WRITE_PAD values on the fly.
+     )
+-envs = {}
++envs = os.environ
+ for var in import_env:
+     if var in os.environ:
+         envs[var] = os.environ[var]
diff --git a/nixpkgs/pkgs/servers/gpsd/default.nix b/nixpkgs/pkgs/servers/gpsd/default.nix
new file mode 100644
index 000000000000..f205b600dd95
--- /dev/null
+++ b/nixpkgs/pkgs/servers/gpsd/default.nix
@@ -0,0 +1,101 @@
+{ fetchurl, stdenv, scons, pkgconfig, dbus, dbus-glib
+, ncurses, libX11, libXt, libXpm, libXaw, libXext
+, libusb1, docbook_xml_dtd_412, docbook_xsl, bc
+, libxslt, xmlto, gpsdUser ? "gpsd", gpsdGroup ? "dialout"
+, pps-tools
+, python2Packages
+}:
+
+# TODO: put the X11 deps behind a guiSupport parameter for headless support
+
+stdenv.mkDerivation rec {
+  name = "gpsd-3.16";
+
+  src = fetchurl {
+    url = "https://download-mirror.savannah.gnu.org/releases/gpsd/${name}.tar.gz";
+    sha256 = "0a90ph4qrlz5kkcz2mwkfk3cmwy9fmglp94znz2y0gsd7bqrlmq3";
+  };
+
+  nativeBuildInputs = [
+    scons pkgconfig docbook_xml_dtd_412 docbook_xsl xmlto bc
+    python2Packages.python
+    python2Packages.wrapPython
+  ];
+
+  buildInputs = [
+    python2Packages.python dbus dbus-glib ncurses libX11 libXt libXpm libXaw libXext
+    libxslt libusb1 pps-tools
+  ];
+
+  pythonPath = [
+    python2Packages.pygobject2
+    python2Packages.pygtk
+  ];
+
+  patches = [
+    ./0001-Import-LD_LIBRARY_PATH-to-allow-running-scons-check-.patch
+    ./0002-Import-XML_CATALOG_FILES-to-be-able-to-validate-the-.patch
+
+    # TODO: remove the patch with the next release
+    ./0001-Use-pkgconfig-for-dbus-library.patch
+    # to be able to find pps-tools
+    ./0002-scons-envs-patch.patch
+  ];
+
+  # - leapfetch=no disables going online at build time to fetch leap-seconds
+  #   info. See <gpsd-src>/build.txt for more info.
+  preBuild = ''
+    patchShebangs .
+    sed -e "s|systemd_dir = .*|systemd_dir = '$out/lib/systemd/system'|" -i SConstruct
+
+    sconsFlags+=" udevdir=$out/lib/udev"
+    sconsFlags+=" python_libdir=$out/lib/${python2Packages.python.libPrefix}/site-packages"
+  '';
+
+  sconsFlags = [
+    "leapfetch=no"
+    "gpsd_user=${gpsdUser}"
+    "gpsd_group=${gpsdGroup}"
+    "systemd=yes"
+  ];
+
+  preCheck = ''
+    export LD_LIBRARY_PATH="$PWD"
+  '';
+
+  # TODO: the udev rules file and the hotplug script need fixes to work on NixOS
+  preInstall = ''
+    mkdir -p "$out/lib/udev/rules.d"
+  '';
+  installTargets = "install udev-install";
+
+  postFixup = ''
+    wrapPythonProgramsIn $out/bin "$out $pythonPath"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "GPS service daemon";
+    longDescription = ''
+      gpsd is a service daemon that monitors one or more GPSes or AIS
+      receivers attached to a host computer through serial or USB ports,
+      making all data on the location/course/velocity of the sensors
+      available to be queried on TCP port 2947 of the host computer. With
+      gpsd, multiple location-aware client applications (such as navigational
+      and wardriving software) can share access to receivers without
+      contention or loss of data. Also, gpsd responds to queries with a
+      format that is substantially easier to parse than the NMEA 0183 emitted
+      by most GPSes. The gpsd distribution includes a linkable C service
+      library, a C++ wrapper class, and a Python module that developers of
+      gpsd-aware applications can use to encapsulate all communication with
+      gpsd. Third-party client bindings for Java and Perl also exist.
+
+      Besides gpsd itself, the project provides auxiliary tools for
+      diagnostic monitoring and profiling of receivers and feeding
+      location-aware applications GPS/AIS logs for diagnostic purposes.
+    '';
+    homepage = http://catb.org/gpsd/;
+    license = "BSD-style";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bjornfor rasendubi ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/h2/default.nix b/nixpkgs/pkgs/servers/h2/default.nix
new file mode 100644
index 000000000000..c4be1f3c3b34
--- /dev/null
+++ b/nixpkgs/pkgs/servers/h2/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchzip, jre, makeWrapper }:
+stdenv.mkDerivation rec {
+  name = "h2-${version}";
+
+  version = "1.4.193";
+
+  src = fetchzip {
+    url = "https://www.h2database.com/h2-2016-10-31.zip";
+    sha256 = "1da1qcfwi5gvh68i6w6y0qpcqp3rbgakizagkajmjxk2ryc4b3z9";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase =
+    let
+      h2ToolScript = ''
+        #!/usr/bin/env bash
+        dir=$(dirname "$0")
+
+        if [ -n "$1" ]; then
+          ${jre}/bin/java -cp "$dir/h2-${version}.jar:$H2DRIVERS:$CLASSPATH" $1 "''${@:2}"
+        else
+          echo "You have to provide the full java class path for the h2 tool you want to run. E.g. 'org.h2.tools.Server'"
+        fi
+      '';
+    in ''
+      mkdir -p $out
+      cp -R * $out
+
+      echo '${h2ToolScript}' > $out/bin/h2tool.sh
+
+      substituteInPlace $out/bin/h2.sh --replace "java" "${jre}/bin/java"
+
+      chmod +x $out/bin/*.sh
+    '';
+
+  meta = with stdenv.lib; {
+    description = "The Java SQL database";
+    homepage = http://www.h2database.com/html/main.html;
+    license = licenses.mpl20;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with maintainers; [ mahe ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/hbase/default.nix b/nixpkgs/pkgs/servers/hbase/default.nix
new file mode 100644
index 000000000000..6a33ac638d21
--- /dev/null
+++ b/nixpkgs/pkgs/servers/hbase/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, makeWrapper }:
+stdenv.mkDerivation rec {
+  name = "hbase-${version}";
+  version = "0.98.24";
+
+  src = fetchurl {
+    url = "mirror://apache/hbase/${version}/hbase-${version}-hadoop2-bin.tar.gz";
+    sha256 = "0kz72wqsii09v9hxkw10mzyvjhji5sx3l6aijjalgbybavpcxglb";
+  };
+
+  buildInputs = [ makeWrapper ];
+  installPhase = ''
+    mkdir -p $out
+    cp -R * $out
+  '';
+  meta = with stdenv.lib; {
+    description = "A distributed, scalable, big data store";
+    homepage = https://hbase.apache.org;
+    license = licenses.asl20;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/hitch/default.nix b/nixpkgs/pkgs/servers/hitch/default.nix
new file mode 100644
index 000000000000..366934829b86
--- /dev/null
+++ b/nixpkgs/pkgs/servers/hitch/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, docutils, libev, openssl, pkgconfig }:
+stdenv.mkDerivation rec {
+  version = "1.4.8";
+  name = "hitch-${version}";
+
+  src = fetchurl {
+    url = "https://hitch-tls.org/source/${name}.tar.gz";
+    sha256 = "1hqs5p69gr1lb3xldbrgq7d6d0vk4za0wpizlzybn98cv68acaym";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ docutils libev openssl ];
+
+  outputs = [ "out" "doc" "man" ];
+
+  meta = with stdenv.lib; {
+    description = "Hitch is a libev-based high performance SSL/TLS proxy by Varnish Software";
+    homepage = https://hitch-tls.org/;
+    license = licenses.bsd2;
+    maintainers = [ maintainers.jflanglois ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/holochain-go/default.nix b/nixpkgs/pkgs/servers/holochain-go/default.nix
new file mode 100644
index 000000000000..95ec267dba24
--- /dev/null
+++ b/nixpkgs/pkgs/servers/holochain-go/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "holochain-go${version}";
+  version = "0.1.0-alpha";
+  rev = "a17510b910a7a377441c152b8dccdbae1999f63f";
+
+  goPackagePath = "github.com/holochain/holochain-proto";
+
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "holochain";
+    repo = "holochain-proto";
+    sha256 = "19l29jnr63ximmyn4i4llv2mdwh306c2mpzmx2anj9z12wjpach0";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = {
+    description = "core implementation of validating DHT dApps in go";
+    longDescription = "Holographic storage for distributed applications -- a validating monotonic DHT backed by authoritative hashchains for data provenance";
+    homepage = "https://holochain.org/";
+    downloadPage = "https://developer.holochain.org/";
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = with stdenv.lib.maintainers; [ gavin ];
+
+  };
+}
diff --git a/nixpkgs/pkgs/servers/holochain-go/deps.nix b/nixpkgs/pkgs/servers/holochain-go/deps.nix
new file mode 100644
index 000000000000..bad01c01a6bd
--- /dev/null
+++ b/nixpkgs/pkgs/servers/holochain-go/deps.nix
@@ -0,0 +1,1056 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "a368813c5e648fee92e5f6c30e3944ff9d5e8895";
+      sha256 = "1sjxs2lwc8jpln80s4rlzp7nprbcljhy5mz4rf9995gq93wqnym5";
+    };
+  }
+  {
+    goPackagePath = "github.com/agl/ed25519";
+    fetch = {
+      type = "git";
+      url = "https://github.com/agl/ed25519";
+      rev = "5312a61534124124185d41f09206b9fef1d88403";
+      sha256 = "1v8mhkf1m3ga5262s75vabskxvsw5rpqvi5nwhxwiv7gfk6h823i";
+    };
+  }
+  {
+    goPackagePath = "github.com/btcsuite/btcd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/btcsuite/btcd";
+      rev = "675abc5df3c5531bc741b56a765e35623459da6d";
+      sha256 = "1sg7dmns8smsfcjpn9dnqapzf4b6r1vrp62j753izmbmc55rjm0f";
+    };
+  }
+  {
+    goPackagePath = "github.com/coreos/go-semver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/go-semver";
+      rev = "e214231b295a8ea9479f11b70b35d5acf3556d9b";
+      sha256 = "0770h1mpig2j5sbiha3abnwaw8p6dg9i87r8pc7cf6m4kwml3sc9";
+    };
+  }
+  {
+    goPackagePath = "github.com/docker/spdystream";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/spdystream";
+      rev = "bc6354cbbc295e925e4c611ffe90c1f287ee54db";
+      sha256 = "08746a15snvmax6cnzn2qy7cvsspxbsx97vdbjpdadir3pypjxya";
+    };
+  }
+  {
+    goPackagePath = "github.com/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev = "507f6050b8568533fb3f5504de8e5205fa62a114";
+      sha256 = "0k1v9dkhrxiqhg48yqkwzpd7x40xx38gv2pgknswbsy4r8w644i7";
+    };
+  }
+  {
+    goPackagePath = "github.com/fd/go-nat";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fd/go-nat";
+      rev = "dcaf50131e4810440bed2cbb6f7f32c4f4cc95dd";
+      sha256 = "094aqkjv9qfmy1k8xrg7cl4njbvamm51fdilay9c75wcax9p41jv";
+    };
+  }
+  {
+    goPackagePath = "github.com/ghodss/yaml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ghodss/yaml";
+      rev = "e9ed3c6dfb39bb1a32197cb10d527906fe4da4b6";
+      sha256 = "07cf0j3wbsl1gmn175mdgljcarfz4xbqd6pgc7b08a5lcn7zwhjz";
+    };
+  }
+  {
+    goPackagePath = "github.com/glycerine/blake2b";
+    fetch = {
+      type = "git";
+      url = "https://github.com/glycerine/blake2b";
+      rev = "3c8c640cd7bea3ca78209d812b5854442ab92fed";
+      sha256 = "1hw0y15yf4fhjkfgh8jnk257chhmpzyppgnnck9aijhkvk41rply";
+    };
+  }
+  {
+    goPackagePath = "github.com/glycerine/goconvey";
+    fetch = {
+      type = "git";
+      url = "https://github.com/glycerine/goconvey";
+      rev = "83515ca83cca5aef8af8eab6eb7368f8e7500976";
+      sha256 = "1n9drlng7pbyqfxyfa14vik8vd3vj4m2b7v73410fxll36djj4s8";
+    };
+  }
+  {
+    goPackagePath = "github.com/glycerine/greenpack";
+    fetch = {
+      type = "git";
+      url = "https://github.com/glycerine/greenpack";
+      rev = "3f7f38f101dc36e64a4176ded8443684516d76c2";
+      sha256 = "0w468v8zpsmgml1bgr51rzfvcymlfpdzy091wid67i1z25gwyik0";
+    };
+  }
+  {
+    goPackagePath = "github.com/glycerine/liner";
+    fetch = {
+      type = "git";
+      url = "https://github.com/glycerine/liner";
+      rev = "72909af234e0e355af10d0ace679446a6c5d7ec3";
+      sha256 = "118dig6vg1pz5jq2w1kyq0102rvgq676z8zsdyi13ynw8phlpcnc";
+    };
+  }
+  {
+    goPackagePath = "github.com/glycerine/zebrapack";
+    fetch = {
+      type = "git";
+      url = "https://github.com/glycerine/zebrapack";
+      rev = "7858d9b3e1a2ca613b770bb4cdce84ad04cefbbb";
+      sha256 = "0wgk719q428q415628hw2glj9divw172iqnrn02hkgiwfnv005rp";
+    };
+  }
+  {
+    goPackagePath = "github.com/glycerine/tmframe";
+    fetch = {
+      type = "git";
+      url = "https://github.com/glycerine/tmframe";
+      rev = "092b9413cc9ce8cb9fffadbfbf9038bb0bad5418";
+      sha256 = "19h9hq53g8wf12h15w07qlz7035x3k2z3zs6bj1dzm68xca26lcn";
+    };
+  }
+  {
+    goPackagePath = "github.com/glycerine/zygomys";
+    fetch = {
+      type = "git";
+      url = "https://github.com/glycerine/zygomys";
+      rev = "22c88044c7c2a3f845b8bbd1df6d990e8ee4f29c";
+      sha256 = "1psbx4p022c19bq58bf9fs0mlm7mqavpbggsdkw7wqga0yn1vp18";
+    };
+  }
+  {
+    goPackagePath = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev = "1ef32a8b9fc3f8ec940126907cedb5998f6318e4";
+      sha256 = "0zk2n0n35ksskr5cd83k5k8wg21ckrcggjy88bym2s21ngj5w4fh";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/uuid";
+      rev = "dec09d789f3dba190787f8b4454c7d3c936fed9e";
+      sha256 = "1hc4w67p6zkh2qk7wm1yrl69jjrjjk615mly5ll4iidn1m4mzi4i";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/websocket";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/websocket";
+      rev = "21ab95fa12b9bdd8fecf5fa3586aad941cc98785";
+      sha256 = "1ygg6cr84461d6k3nzbja0dxhcgf5zvry2w10f6i7291ghrcwhyy";
+    };
+  }
+  {
+    goPackagePath = "github.com/gxed/hashland";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gxed/hashland";
+      rev = "d9f6b97f8db22dd1e090fd0bbbe98f09cc7dd0a8";
+      sha256 = "1q23y4lacsz46k9gmgfw4iwwydw36j2601rbidmmswl94grpc386";
+    };
+  }
+  {
+    goPackagePath = "github.com/gxed/eventfd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gxed/eventfd";
+      rev = "80a92cca79a8041496ccc9dd773fcb52a57ec6f9";
+      sha256 = "1p15rsimkcp2flj6wb41flac72zhf97zd8jxrahsw05nyfbp58z5";
+    };
+  }
+  {
+    goPackagePath = "github.com/gxed/GoEndian";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gxed/GoEndian";
+      rev = "0f5c6873267e5abf306ffcdfcfa4bf77517ef4a7";
+      sha256 = "0fn28h9gs1finrpfs388a3ycavlcf3qylsn803cflmrwaj5piqia";
+    };
+  }
+  {
+    goPackagePath = "github.com/huin/goupnp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/huin/goupnp";
+      rev = "1395d1447324cbea88d249fbfcfd70ea878fdfca";
+      sha256 = "03fp94757vzclkv5khmydhvcm2gjhxgd0mi8q7wqksy9l93ixgl4";
+    };
+  }
+  {
+    goPackagePath = "github.com/ipfs/go-ipfs-util";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ipfs/go-ipfs-util";
+      rev = "9ed527918c2f20abdf0adfab0553cd87db34f656";
+      sha256 = "03lq5378p31c6ghfa20vwa7b1vgd96ypc9dmwp1p62bddz6apci6";
+    };
+  }
+  {
+    goPackagePath = "github.com/ipfs/go-log";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ipfs/go-log";
+      rev = "0ef81702b797a2ecef05f45dcc82b15298f54355";
+      sha256 = "0q375wbh014hca8n6g3z2x875f5m9cads75chs0sqlhr5rfgncal";
+    };
+  }
+  {
+    goPackagePath = "github.com/ipfs/go-todocounter";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ipfs/go-todocounter";
+      rev = "1e832b829506383050e6eebd12e05ea41a451532";
+      sha256 = "0cydbwivwp2k3x63rl6crhiw3svglc184saxyjrahvp7rv6cqdbq";
+    };
+  }
+  {
+    goPackagePath = "github.com/jackpal/gateway";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jackpal/gateway";
+      rev = "cbcf4e3f3baee7952fc386c8b2534af4d267c875";
+      sha256 = "1ird5xmizj632l3dq24s2xgb8w1dn6v8xznlqz252gvngyr2gjl1";
+    };
+  }
+  {
+    goPackagePath = "github.com/jackpal/go-nat-pmp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jackpal/go-nat-pmp";
+      rev = "28a68d0c24adce1da43f8df6a57340909ecd7fdd";
+      sha256 = "17l8vh4g1akhgm7hbw5n9k2hdphlsvm5vwdc8z3mzlxjmdww5z70";
+    };
+  }
+  {
+    goPackagePath = "github.com/jbenet/go-base58";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jbenet/go-base58";
+      rev = "6237cf65f3a6f7111cd8a42be3590df99a66bc7d";
+      sha256 = "11yp7yg62bhw6jqdrlf2144bffk12jmb1nvqkm172pdhxfwrp3bf";
+    };
+  }
+  {
+    goPackagePath = "github.com/jbenet/go-temp-err-catcher";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jbenet/go-temp-err-catcher";
+      rev = "aac704a3f4f27190b4ccc05f303a4931fd1241ff";
+      sha256 = "1fyqkcggnrzwxa8iii15g60w2jikdm26sr7l36km7y0nc2kvf7jc";
+    };
+  }
+  {
+    goPackagePath = "github.com/jbenet/goprocess";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jbenet/goprocess";
+      rev = "b497e2f366b8624394fb2e89c10ab607bebdde0b";
+      sha256 = "1lnvkzki7vnqn5c4m6bigk0k85haicmg27w903kwg30rdvblm82s";
+    };
+  }
+  {
+    goPackagePath = "github.com/jtolds/gls";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jtolds/gls";
+      rev = "77f18212c9c7edc9bd6a33d383a7b545ce62f064";
+      sha256 = "1vm37pvn0k4r6d3m620swwgama63laz8hhj3pyisdhxwam4m2g1h";
+    };
+  }
+  {
+    goPackagePath = "github.com/lestrrat/go-jspointer";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lestrrat/go-jspointer";
+      rev = "d5f7c71bfd03c8e9489a636874cd106c22d3a47c";
+      sha256 = "10b94qdnvla9ax8b3djzwqz35gvqcvqrcafhqn0r4lay6y2i3241";
+    };
+  }
+  {
+    goPackagePath = "github.com/lestrrat/go-jsref";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lestrrat/go-jsref";
+      rev = "50df7b2d07d799426a9ac43fa24bdb4785f72a54";
+      sha256 = "16mz2mm1ggvdighglmf48qkir070gig64cf26vmiwfq3z5w47s7p";
+    };
+  }
+  {
+    goPackagePath = "github.com/lestrrat/go-jsschema";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lestrrat/go-jsschema";
+      rev = "a6a42341b50d8d7e2a733db922eefaa756321021";
+      sha256 = "0cyz9pzw53haabpxhxsqp1gb9z742gs6l6dp45skag6abdwgpi13";
+    };
+  }
+  {
+    goPackagePath = "github.com/lestrrat/go-jsval";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lestrrat/go-jsval";
+      rev = "cf70aae60f5b41a32922066c41287b0168e55904";
+      sha256 = "06ba6rh9f0nwqsam3bvmazcv6y8zma6njljbhjswjamylsfhclcs";
+    };
+  }
+  {
+    goPackagePath = "github.com/lestrrat/go-pdebug";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lestrrat/go-pdebug";
+      rev = "569c97477ae8837e053e5a50bc739e15172b8ebe";
+      sha256 = "0r56ppr6l6z3gcbxyyr3kiiw07a9gr3qxr26w8sbiq1np3zzpmzw";
+    };
+  }
+  {
+    goPackagePath = "github.com/lestrrat/go-structinfo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lestrrat/go-structinfo";
+      rev = "8204d40bbcd79eb7603cd4c2c998e60eb2479ded";
+      sha256 = "0p52xp2x4zyv91k820pnarz8xidgil8191cwfr1rasp8z07a9d3j";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-addr-util";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-addr-util";
+      rev = "3bd34419494fb7f15182ddd19a5d92ac017a27c6";
+      sha256 = "11f0g9zd4barbdqplmflxbm3yp2plby5qbsk66zbad3xd28kllc0";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-flow-metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-flow-metrics";
+      rev = "3b3bcfcf78f2dc0e85be13ef3c3adc64cc5a9347";
+      sha256 = "06kgn72bmvljigycgdbw2nywss3g3r0ysfcw4k48938akxydgc6d";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-circuit";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-circuit";
+      rev = "772fa57b88017ff6bce887a8d1486b228cacf488";
+      sha256 = "03jl9b2g6z82pgkiqanvhlm3wyddp9x07b31h72r79g40lw6j7kz";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-conn";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-conn";
+      rev = "5c445d258745408186410e0ad5128224b00e47fe";
+      sha256 = "01a8hnkpxg73v48i2gbr3y8fs6881h5g965nak4bn05iy6jn1cr8";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-crypto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-crypto";
+      rev = "18915b5467c77ad8c07a35328c2cab468667a4e8";
+      sha256 = "00pgxh53g60ij18mb2l5g8id9c46sw4pfsaw3cprv5mqacc1dlfg";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-host";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-host";
+      rev = "acf01b322989cf731f66ce70b1ed7c41fe007798";
+      sha256 = "0gxqyw6azsp65yam6f667gdidwdfzlxri8xb7iwyqp58y9973i9c";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-interface-conn";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-interface-conn";
+      rev = "47718f905cc3ccd621b65fc106c521555c4040d3";
+      sha256 = "1ykd46mdqjy9yj2i4srx6m0f5jwaw2f5pm4pfdcrq4wh30r0xg3j";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-interface-connmgr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-interface-connmgr";
+      rev = "d00fbee4d35c7b5fdbd12499f673a236c6303865";
+      sha256 = "1ynmn8p0d145mbykr375lqzxl4h0gdcxdiz3bxfxnwxcl5x73pah";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-interface-pnet";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-interface-pnet";
+      rev = "c6acc383ec0b7b98112971df590d6702885ca821";
+      sha256 = "1micl8nvk29sac9zhvzxb0mgadp83kz725jbl4hs3a9a0ar9gxln";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-loggables";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-loggables";
+      rev = "3a7ad4dd32462b4d9c07a85021e0f5e1110debb2";
+      sha256 = "12h5lxxwnh5b8ch8q7fk6nky4fx5ajhf83bjxm0cdapv85y3cjz2";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-metrics";
+      rev = "2b4a2757a26649c9a603519647cc9d4478ade5c6";
+      sha256 = "1d2rfvkmaccajbljb7p1dwscf422la0qy1xl7h5d9ks4pk5pgcxr";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-nat";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-nat";
+      rev = "d090f00e553d1b6582e1ec829608a8a9bbf262e1";
+      sha256 = "1j6m3rs80zizgd6sy0rclfa95k7i9dxa6yfy6ca52lfqmwhh9ghk";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-net";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-net";
+      rev = "70a8d93f2d8c33b5c1a5f6cc4d2aea21663a264c";
+      sha256 = "04l67xnghr4bbgpdi5fw570zb6nl4k2nj0jpl6hmwbw0jhdd9hkn";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-peer";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-peer";
+      rev = "aa0e03e559bde9d4749ad8e38595e15a6fe808fa";
+      sha256 = "1rmfsnwaij3klby30aqgvx85hk5swhp5dlxg1z255z6r4mmvvdwk";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-peerstore";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-peerstore";
+      rev = "7ac092e7f77f5bda1cb6e4ef95efbe911e97db41";
+      sha256 = "1kmj3dwnvkl08hb8j3zfispl2q582p5b5v76hk5yn46drs7da276";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-protocol";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-protocol";
+      rev = "b29f3d97e3a2fb8b29c5d04290e6cb5c5018004b";
+      sha256 = "1xgjfnx9zcqglg9li29wdqywsp8hz22wx6phns9zscni2jsfidld";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-secio";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-secio";
+      rev = "146b7055645501f741c5644d4a3d207614f08899";
+      sha256 = "1df5f2r7wc34l6nycc1f4ni06cd2hhjncjyvzzw4vnmlqsncrx1w";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-swarm";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-swarm";
+      rev = "48d6d0ff2d2a4724f6b47f1ed5ffc0ae63e30460";
+      sha256 = "1z595f71p1i89fhc5qc63mcgnfiy0p1gyda77p6jmzxyzgzwvlmz";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-transport";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-transport";
+      rev = "49533464477a869fee537c8cc3fcee286aa8bdcd";
+      sha256 = "0dj0rzrykjmhnhpn8ac5696zvql8rq0amw87bj62qn4hpi7ri64h";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p";
+      rev = "3b8f2275a2b24de5777aaa4fc77f1af57c5c4387";
+      sha256 = "0jyk4zvhipknnwn1w3i11lsrzybh30p190xrkj7zgh5whz2rdqj1";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-maddr-filter";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-maddr-filter";
+      rev = "3c9947befbb92277cc5f85057d387097debc4139";
+      sha256 = "022xmvv6djpycbcaw4hhxhbspl2g72yjla218j08xp8l0gp6w0hq";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-msgio";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-msgio";
+      rev = "d82125c9907e1365775356505f14277d47dfd4d6";
+      sha256 = "0jawhcr6hm9apmdbl09s12mmqzwnphzn8k6wqwxfbmhs7gg2s1wq";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-peerstream";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-peerstream";
+      rev = "2679b7430e519fc39f9cfbb0c7b7d016705b4ce1";
+      sha256 = "10rxbn21hp7c8x1hzc770hnh9zgcz13dn9mjd94fg2yxkf7fq6mn";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-reuseport";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-reuseport";
+      rev = "15a1cd37f0502f3b2eccb6d71a7958edda314633";
+      sha256 = "1pcy6qpz804apsgxmh8irkj80viz5zrh2f3a0ipxkzq2nb6jx36k";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-sockaddr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-sockaddr";
+      rev = "f3e9f73a53d14d8257cb9da3d83dda07bbd8b2fe";
+      sha256 = "04saphhq5zbphzbd87lfpjkdf8k21x7q4hn8d03f8ykm19d51nlg";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-stream-muxer";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-stream-muxer";
+      rev = "6ebe3f58af097068454b167a89442050b023b571";
+      sha256 = "1w1hypcg010npzlbabigrz65c4inj7w9js9ai4iw6z2d3s7ymc6v";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-tcp-transport";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-tcp-transport";
+      rev = "2852032418949429c7d683502e7ea9bff2e951e7";
+      sha256 = "0j4cm890qbgj3ry757pcd21j4q2i3bkksc5z8y8hszyq8njc7ac5";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-ws-transport";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-ws-transport";
+      rev = "2c20090616127904f706139653cd40ecac600227";
+      sha256 = "0yirawpv416fs9amzp0i6r2j0lmpw9bplqxiqixcvi7kkinb42hq";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev = "efa589957cd060542a26d2dd7832fd6a6c6c3ade";
+      sha256 = "0kshi4hvm0ayrsxqxy0599iv81kryhd2fn9lwjyczpj593cq069r";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev = "6ca4dbf54d38eea1a992b3c722a76a5d1c4cb25c";
+      sha256 = "0zs92j2cqaw9j8qx1sdxpv3ap0rgbs0vrvi72m40mg8aa36gd39w";
+    };
+  }
+  {
+    goPackagePath = "github.com/miekg/dns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/miekg/dns";
+      rev = "01d59357d468872339068bcd5d55a00e2463051f";
+      sha256 = "0m595w0azrsvlfqqvrsrf0yd0myavn129rg1nsq1mnfy9c8768xa";
+    };
+  }
+  {
+    goPackagePath = "github.com/minio/blake2b-simd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/minio/blake2b-simd";
+      rev = "3f5f724cb5b182a5c278d6d3d55b40e7f8c2efb4";
+      sha256 = "0b6jbnj62c0gmmfd4zdmh8xbg01p80f13yygir9xprqkzk6fikmd";
+    };
+  }
+  {
+    goPackagePath = "github.com/minio/sha256-simd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/minio/sha256-simd";
+      rev = "ad98a36ba0da87206e3378c556abbfeaeaa98668";
+      sha256 = "0yfnqn3kqdnlfm54yvc4fr5vpdmwdi2kw571nlkbpmy8ldhsqqfi";
+    };
+  }
+  {
+    goPackagePath = "github.com/mr-tron/base58";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mr-tron/base58";
+      rev = "c1bdf7c52f59d6685ca597b9955a443ff95eeee6";
+      sha256 = "1dq6i8619manxdhb0fwhdm9ar23kx88pc2xwl1pjla9djrgql6a8";
+    };
+  }
+  {
+    goPackagePath = "github.com/multiformats/go-multiaddr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/multiformats/go-multiaddr";
+      rev = "123a717755e0559ec8fda308019cd24e0a37bb07";
+      sha256 = "0lx2m83y0ffqn7ygqppa1ri1ykdrbvl1qzb4x2w8k97chxfjx4ip";
+    };
+  }
+  {
+    goPackagePath = "github.com/multiformats/go-multiaddr-dns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/multiformats/go-multiaddr-dns";
+      rev = "c3d4fcd3cbaf54a24b0b68f1461986ede1d59859";
+      sha256 = "13a8xbr5zb49aq570b51a5japb3rnsnwjncgqsd91bnqr8v68vdb";
+    };
+  }
+  {
+    goPackagePath = "github.com/multiformats/go-multiaddr-net";
+    fetch = {
+      type = "git";
+      url = "https://github.com/multiformats/go-multiaddr-net";
+      rev = "97d80565f68c5df715e6ba59c2f6a03d1fc33aaf";
+      sha256 = "0gsncnwn8b9i2hyh0kgiw51sz96wswww5m032dr87jld2zl7kdrb";
+    };
+  }
+  {
+    goPackagePath = "github.com/multiformats/go-multihash";
+    fetch = {
+      type = "git";
+      url = "https://github.com/multiformats/go-multihash";
+      rev = "265e72146e710ff649c6982e3699d01d4e9a18bb";
+      sha256 = "1yzjqwwwwd1yb22g2vf12y5w4gbgsa4g9arf66xk5m2r7r79h8hq";
+    };
+  }
+  {
+    goPackagePath = "github.com/multiformats/go-multistream";
+    fetch = {
+      type = "git";
+      url = "https://github.com/multiformats/go-multistream";
+      rev = "612ce31c03aebe1d5adbd3c850ee89e05a82b16d";
+      sha256 = "0yg7pkg8nvgz8ywcg55kqm1jk264qbdyilkjsnn32siyh5xwmcd1";
+    };
+  }
+  {
+    goPackagePath = "github.com/nats-io/nats";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nats-io/go-nats";
+      rev = "247b2a84d8d0ff15cbc6faafc77ef15ea4317011";
+      sha256 = "0ig494i7j94wr0f8mpaai9hy5knbvqlhqj280m969m219h8di2qy";
+    };
+  }
+  {
+    goPackagePath = "github.com/nats-io/go-nats";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nats-io/go-nats";
+      rev = "247b2a84d8d0ff15cbc6faafc77ef15ea4317011";
+      sha256 = "0ig494i7j94wr0f8mpaai9hy5knbvqlhqj280m969m219h8di2qy";
+    };
+  }
+  {
+    goPackagePath = "github.com/nats-io/nuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nats-io/nuid";
+      rev = "3e58d42c9cfe5cd9429f1a21ad8f35cd859ba829";
+      sha256 = "05xzdfcji3jv63c5sysmfypzg6xc2mm92gdcck7qvk10n60dndp4";
+    };
+  }
+  {
+    goPackagePath = "github.com/op/go-logging";
+    fetch = {
+      type = "git";
+      url = "https://github.com/op/go-logging";
+      rev = "970db520ece77730c7e4724c61121037378659d9";
+      sha256 = "1cpna2x5l071z1vrnk7zipdkka8dzwsjyx7m79xk0lr08rip0kcj";
+    };
+  }
+  {
+    goPackagePath = "github.com/opentracing/opentracing-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/opentracing/opentracing-go";
+      rev = "6c572c00d1830223701e155de97408483dfcd14a";
+      sha256 = "1qw5s858zd2gsg1962jg3jpz38awpldv3vajlsj78qvzi0v0pmq4";
+    };
+  }
+  {
+    goPackagePath = "github.com/philhofer/fwd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/philhofer/fwd";
+      rev = "bb6d471dc95d4fe11e432687f8b70ff496cf3136";
+      sha256 = "1pg84khadh79v42y8sjsdgfb54vw2kzv7hpapxkifgj0yvcp30g2";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev = "816c9085562cd7ee03e7f8188a1cfd942858cded";
+      sha256 = "1ws5crb7c70wdicavl6qr4g03nn6m92zd6wwp9n2ygz5c8rmxh8k";
+    };
+  }
+  {
+    goPackagePath = "github.com/robertkrimen/otto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/robertkrimen/otto";
+      rev = "6c383dd335ef8dcccef05e651ce1eccfe4d0f011";
+      sha256 = "1n6h7c8gi6wv4nklqd7ygzx2afvh7ddxbml9w9x0jxwcfb3bdy17";
+    };
+  }
+  {
+    goPackagePath = "github.com/satori/go.uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/satori/go.uuid";
+      rev = "36e9d2ebbde5e3f13ab2e25625fd453271d6522e";
+      sha256 = "0nc0ggn0a6bcwdrwinnx3z6889x65c20a2dwja0n8can3xblxs35";
+    };
+  }
+  {
+    goPackagePath = "github.com/shirou/gopsutil";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shirou/gopsutil";
+      rev = "57f370e13068146efe1cb7129f79e5d51da8a242";
+      sha256 = "1ij0bbnfjj65afin8vhccr3cxvg6r0awmvcvb2ilza5wbbsslggb";
+    };
+  }
+  {
+    goPackagePath = "github.com/shurcooL/go-goon";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shurcooL/go-goon";
+      rev = "37c2f522c041b74919a9e5e3a6c5c47eb34730a5";
+      sha256 = "17ac6j6msdcxbmfhq6pxhw5z339b87bd6ciln9909drjv2szyxqv";
+    };
+  }
+  {
+    goPackagePath = "github.com/shurcooL/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shurcooL/go";
+      rev = "47fa5b7ceee66c60ac3a281416089035bf526a3c";
+      sha256 = "1wr4fgb8w1zi3z7b76wjr68h0152lrcamphyhpbljc0sx8ygv8xd";
+    };
+  }
+  {
+    goPackagePath = "github.com/smartystreets/assertions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smartystreets/assertions";
+      rev = "7678a5452ebea5b7090a6b163f844c133f523da2";
+      sha256 = "0df2z0f4l0yzbx38bphwyjsyxfgsza1yw4cq46zikbnknqjb8s1c";
+    };
+  }
+  {
+    goPackagePath = "github.com/smartystreets/goconvey";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smartystreets/goconvey";
+      rev = "ef6db91d284a0e7badaa1f0c404c30aa7dee3aed";
+      sha256 = "16znlpsms8z2qc3airawyhzvrzcp70p9bx375i19bg489hgchxb7";
+    };
+  }
+  {
+    goPackagePath = "github.com/spaolacci/murmur3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spaolacci/murmur3";
+      rev = "f09979ecbc725b9e6d41a297405f65e7e8804acc";
+      sha256 = "1lv3zyz3jy2d76bhvvs8svygx66606iygdvwy5cwc0p5z8yghq25";
+    };
+  }
+  {
+    goPackagePath = "github.com/tidwall/btree";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tidwall/btree";
+      rev = "9876f1454cf0993a53d74c27196993e345f50dd1";
+      sha256 = "0rys4pw7cf2yqr0qdls33ndbpas6d1qxi0wn8zacb315j1dd7cnp";
+    };
+  }
+  {
+    goPackagePath = "github.com/tidwall/buntdb";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tidwall/buntdb";
+      rev = "75d89283d5ba2a97e02ada50dc800fd65b601b7b";
+      sha256 = "11sgfwqfgn33fy62spqrqqx9lbp1cpb7f93wp2ngic5svpza0ykl";
+    };
+  }
+  {
+    goPackagePath = "github.com/tidwall/gjson";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tidwall/gjson";
+      rev = "3cd3a1192327ac5e24f7e87824be578b0b07c604";
+      sha256 = "1v9fmbz7j4ny5cnbmzs1nnv3nm34f129grfk8kxl0klydixg2jvx";
+    };
+  }
+  {
+    goPackagePath = "github.com/tidwall/grect";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tidwall/grect";
+      rev = "ba9a043346eba55344e40d66a5e74cfda3a9d293";
+      sha256 = "0iz948vwqk7n47pkrrmw20rd4f0m67qdhgs9xijc5swyrlj6yr61";
+    };
+  }
+  {
+    goPackagePath = "github.com/tidwall/match";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tidwall/match";
+      rev = "1731857f09b1f38450e2c12409748407822dc6be";
+      sha256 = "14nv96h0mjki5q685qx8y331h4yga6hlfh3z9nz6acvnv284q578";
+    };
+  }
+  {
+    goPackagePath = "github.com/tidwall/rtree";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tidwall/rtree";
+      rev = "6cd427091e0e662cb4f8e2c9eb1a41e1c46ff0d3";
+      sha256 = "0s3h3zjmz60d92gsb3vfqfbrgnjyai607adxg78674s1vdlm221l";
+    };
+  }
+  {
+    goPackagePath = "github.com/tidwall/tinyqueue";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tidwall/tinyqueue";
+      rev = "1e39f55115634cad2c504631c8bfcc292f2c9c55";
+      sha256 = "0yyl7qskmn9fb9h11z71ri30cml7d1k576wf1573wbqv59b81f2x";
+    };
+  }
+  {
+    goPackagePath = "github.com/tinylib/msgp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tinylib/msgp";
+      rev = "3b5c87ab5fb00c660bf85b888445d9a01db64db4";
+      sha256 = "0n30zjip3kips23w6wlp41nh4z2qc5cg8s1hf17kc3shnaj04n1n";
+    };
+  }
+  {
+    goPackagePath = "github.com/ugorji/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ugorji/go";
+      rev = "f3cacc17c85ecb7f1b6a9e373ee85d1480919868";
+      sha256 = "1g5jcxans5vjvg8k4wksilfx50izfhb9g0jdmcknlqbn17ww1fir";
+    };
+  }
+  {
+    goPackagePath = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev = "8e01ec4cd3e2d84ab2fe90d8210528ffbb06d8ff";
+      sha256 = "0cpr10n4ps3gcdbcink71ry9hzhdb5rrcysmylybs8h2lzxqgc1i";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/go-logging";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/go-logging";
+      rev = "0457bb6b88fc1973573aaf6b5145d8d3ae972390";
+      sha256 = "1bl180mhg03hdqhyr5sfjcg16ns2ppal625g9ag5m10l2pvlwnqn";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/go-notifier";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/go-notifier";
+      rev = "097c5d47330ff6a823f67e3515faa13566a62c6f";
+      sha256 = "081h4a33603n0mlh53by1mg21rr42xjvxk7r10x8l4v671bq0kha";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/go-smux-multistream";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/go-smux-multistream";
+      rev = "afa6825376c14a0462fd420a7d4b4d157c937a42";
+      sha256 = "14vimxvlz48js4mkq5fp2ni8qbs0h2spv3qjgnqbg3jfbi8ynn5k";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/go-smux-spdystream";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/go-smux-spdystream";
+      rev = "a6182ff2a058b177f3dc7513fe198e6002f7be78";
+      sha256 = "1x2p5h73q90rz221xvhm29sampqbimhrajb5bglj8lqkh502ip7g";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/go-smux-yamux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/go-smux-yamux";
+      rev = "49f324a2b63e778df703cf8e5a502bd56a683ef3";
+      sha256 = "15ndv8qr2n9k1icsxd7yismzdis0aasi28xcxqgw8nq2ldj9j9dz";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/mafmt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/mafmt";
+      rev = "ab6a47300c1df531e468771e7d08fcd6d33f032e";
+      sha256 = "03is8fjnjpkp1pipgachf7cx76wa1wrlgijgw25qygkycyxins06";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/mdns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/mdns";
+      rev = "348bb87e5cd39b33dba9a33cb20802111e5ee029";
+      sha256 = "0z1qwras8yh3q05zvdifw1s3phbppbc0659qndamxsfq8jlds462";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/multiaddr-filter";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/multiaddr-filter";
+      rev = "e903e4adabd70b78bc9293b6ee4f359afb3f9f59";
+      sha256 = "0ksd8vnp207dvphmhrazwldj8if900fnyc1pqa9pfvj04qp92640";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/yamux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/yamux";
+      rev = "63d22127b261bf7014885d25fabe034bed14f04b";
+      sha256 = "0xifqmpcj1awjhqif2fc62vj7bds34q95lw1a3pi0sqmla6r8xhc";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "8b1d31080a7692e075c4681cb2458454a1fe0706";
+      sha256 = "1l5n2vjyxrsmhqn5nas68mf58f2kcnb5zyqrcar608bxh9dlsnsl";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "640f4622ab692b87c2f3a94265e6f579fe38263d";
+      sha256 = "097m4qhcljhp180171j5fjhq4740iirfkkajfd7yrxqhp4s9hljx";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "78d5f264b493f125018180c204871ecf58a2dce1";
+      sha256 = "0x23n60wskys39dwybz5za77ldky9i518kp58ragpd5528kcc68s";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "7922cc490dd5a7dbaa7fd5d6196b49db59ac042f";
+      sha256 = "06sicjc24hv7v9p1l6psaq87w4lycx3mjixd6gsd1wnd4jhqvlnr";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/mgo.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/mgo.v2";
+      rev = "3f83fa5005286a7fe593b055f0d7771a7dce4655";
+      sha256 = "19vwb6qlcyh3nh6pkk0bynwmr5cmi6mm4hdz01lwb4ybnkzxryc7";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/sourcemap.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/sourcemap.v1";
+      rev = "6e83acea0053641eff084973fee085f0c193c61a";
+      sha256 = "08rf2dl13hbnm3fq2cm0nnsspy9fhf922ln23cz5463cv7h62as4";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "5420a8b6744d3b0345ab293f6fcba19c978f1183";
+      sha256 = "0dwjrs2lp2gdlscs7bsrmyc5yf6mm4fvgw71bzr9mv2qrd2q73s1";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/home-assistant/appdaemon.nix b/nixpkgs/pkgs/servers/home-assistant/appdaemon.nix
new file mode 100644
index 000000000000..15ebccbc0dae
--- /dev/null
+++ b/nixpkgs/pkgs/servers/home-assistant/appdaemon.nix
@@ -0,0 +1,59 @@
+{ lib, python3 }:
+
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+
+      aiohttp = super.aiohttp.overridePythonAttrs (oldAttrs: rec {
+        version = "2.3.10";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "8adda6583ba438a4c70693374e10b60168663ffa6564c5c75d3c7a9055290964";
+        };
+        # TODO: remove after pinning aiohttp to a newer version
+        propagatedBuildInputs = oldAttrs.propagatedBuildInputs ++ [ self.idna-ssl ];
+      });
+
+      yarl = super.yarl.overridePythonAttrs (oldAttrs: rec {
+        version = "1.1.0";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "6af895b45bd49254cc309ac0fe6e1595636a024953d710e01114257736184698";
+        };
+      });
+
+      aiohttp-jinja2 = super.aiohttp-jinja2.overridePythonAttrs (oldAttrs: rec {
+        version = "0.15.0";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "0f390693f46173d8ffb95669acbb0e2a3ec54ecce676703510ad47f1a6d9dc83";
+        };
+      });
+
+    };
+  };
+
+in python.pkgs.buildPythonApplication rec {
+  pname = "appdaemon";
+  version = "3.0.2";
+
+  src = python.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "c32d9139566cc8147c39196a18c317accd1f0b2ef8e6c0ff31bddd4bc0f80bd3";
+  };
+
+  propagatedBuildInputs = with python.pkgs; [
+    daemonize astral requests sseclient websocket_client aiohttp yarl jinja2
+    aiohttp-jinja2 pyyaml voluptuous feedparser iso8601 bcrypt paho-mqtt
+  ];
+
+  # no tests implemented
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Sandboxed python execution environment for writing automation apps for Home Assistant";
+    homepage = https://github.com/home-assistant/appdaemon;
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/home-assistant/cli.nix b/nixpkgs/pkgs/servers/home-assistant/cli.nix
new file mode 100644
index 000000000000..c889610963d6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/home-assistant/cli.nix
@@ -0,0 +1,35 @@
+{ lib, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "homeassistant-cli";
+  version = "0.3.0";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "42d7cb008801d7a448b62aed1fc46dd450ee67397bf16faabb02f691417db4b2";
+  };
+
+  postPatch = ''
+    # Ignore pinned versions
+    sed -i "s/'\(.*\)==.*'/'\1'/g" setup.py
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests pyyaml netdisco click click-log tabulate idna jsonpath_rw jinja2
+  ];
+
+  checkInputs = with python3.pkgs; [
+    pytest requests-mock
+  ];
+
+  checkPhase = ''
+    pytest
+  '';
+
+  meta = with lib; {
+    description = "Command-line tool for Home Asssistant";
+    homepage = https://github.com/home-assistant/home-assistant-cli;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/home-assistant/component-packages.nix b/nixpkgs/pkgs/servers/home-assistant/component-packages.nix
new file mode 100644
index 000000000000..fbea4ceff6ae
--- /dev/null
+++ b/nixpkgs/pkgs/servers/home-assistant/component-packages.nix
@@ -0,0 +1,1439 @@
+# Generated by parse-requirements.py
+# Do not edit!
+
+{
+  version = "0.84.6";
+  components = {
+    "abode" = ps: with ps; [  ];
+    "ads" = ps: with ps; [  ];
+    "alarm_control_panel" = ps: with ps; [  ];
+    "alarm_control_panel.abode" = ps: with ps; [  ];
+    "alarm_control_panel.alarmdecoder" = ps: with ps; [  ];
+    "alarm_control_panel.alarmdotcom" = ps: with ps; [  ];
+    "alarm_control_panel.arlo" = ps: with ps; [  ];
+    "alarm_control_panel.blink" = ps: with ps; [  ];
+    "alarm_control_panel.canary" = ps: with ps; [  ];
+    "alarm_control_panel.concord232" = ps: with ps; [  ];
+    "alarm_control_panel.demo" = ps: with ps; [  ];
+    "alarm_control_panel.egardia" = ps: with ps; [  ];
+    "alarm_control_panel.elkm1" = ps: with ps; [  ];
+    "alarm_control_panel.envisalink" = ps: with ps; [  ];
+    "alarm_control_panel.homematicip_cloud" = ps: with ps; [  ];
+    "alarm_control_panel.ialarm" = ps: with ps; [  ];
+    "alarm_control_panel.ifttt" = ps: with ps; [ aiohttp-cors pyfttt ];
+    "alarm_control_panel.lupusec" = ps: with ps; [  ];
+    "alarm_control_panel.manual" = ps: with ps; [  ];
+    "alarm_control_panel.manual_mqtt" = ps: with ps; [ paho-mqtt ];
+    "alarm_control_panel.mqtt" = ps: with ps; [ paho-mqtt ];
+    "alarm_control_panel.nx584" = ps: with ps; [  ];
+    "alarm_control_panel.satel_integra" = ps: with ps; [  ];
+    "alarm_control_panel.simplisafe" = ps: with ps; [  ];
+    "alarm_control_panel.spc" = ps: with ps; [  ];
+    "alarm_control_panel.totalconnect" = ps: with ps; [  ];
+    "alarm_control_panel.verisure" = ps: with ps; [  ];
+    "alarm_control_panel.wink" = ps: with ps; [  ];
+    "alarm_control_panel.yale_smart_alarm" = ps: with ps; [  ];
+    "alarmdecoder" = ps: with ps; [  ];
+    "alert" = ps: with ps; [  ];
+    "alexa" = ps: with ps; [ aiohttp-cors ];
+    "alexa.const" = ps: with ps; [  ];
+    "alexa.flash_briefings" = ps: with ps; [  ];
+    "alexa.intent" = ps: with ps; [  ];
+    "alexa.smart_home" = ps: with ps; [  ];
+    "amcrest" = ps: with ps; [ ha-ffmpeg ];
+    "android_ip_webcam" = ps: with ps; [  ];
+    "apcupsd" = ps: with ps; [  ];
+    "api" = ps: with ps; [ aiohttp-cors ];
+    "apple_tv" = ps: with ps; [  ];
+    "aqualogic" = ps: with ps; [  ];
+    "arduino" = ps: with ps; [  ];
+    "arlo" = ps: with ps; [  ];
+    "asterisk_mbox" = ps: with ps; [  ];
+    "asuswrt" = ps: with ps; [  ];
+    "august" = ps: with ps; [  ];
+    "auth" = ps: with ps; [ aiohttp-cors ];
+    "auth.indieauth" = ps: with ps; [  ];
+    "auth.login_flow" = ps: with ps; [  ];
+    "auth.mfa_setup_flow" = ps: with ps; [  ];
+    "automation" = ps: with ps; [  ];
+    "automation.event" = ps: with ps; [  ];
+    "automation.geo_location" = ps: with ps; [  ];
+    "automation.homeassistant" = ps: with ps; [  ];
+    "automation.litejet" = ps: with ps; [  ];
+    "automation.mqtt" = ps: with ps; [ paho-mqtt ];
+    "automation.numeric_state" = ps: with ps; [  ];
+    "automation.state" = ps: with ps; [  ];
+    "automation.sun" = ps: with ps; [  ];
+    "automation.template" = ps: with ps; [  ];
+    "automation.time" = ps: with ps; [  ];
+    "automation.webhook" = ps: with ps; [ aiohttp-cors ];
+    "automation.zone" = ps: with ps; [  ];
+    "axis" = ps: with ps; [  ];
+    "bbb_gpio" = ps: with ps; [  ];
+    "binary_sensor" = ps: with ps; [  ];
+    "binary_sensor.abode" = ps: with ps; [  ];
+    "binary_sensor.ads" = ps: with ps; [  ];
+    "binary_sensor.alarmdecoder" = ps: with ps; [  ];
+    "binary_sensor.android_ip_webcam" = ps: with ps; [  ];
+    "binary_sensor.apcupsd" = ps: with ps; [  ];
+    "binary_sensor.arest" = ps: with ps; [  ];
+    "binary_sensor.august" = ps: with ps; [  ];
+    "binary_sensor.aurora" = ps: with ps; [  ];
+    "binary_sensor.axis" = ps: with ps; [  ];
+    "binary_sensor.bayesian" = ps: with ps; [  ];
+    "binary_sensor.bbb_gpio" = ps: with ps; [  ];
+    "binary_sensor.blink" = ps: with ps; [  ];
+    "binary_sensor.bloomsky" = ps: with ps; [  ];
+    "binary_sensor.bmw_connected_drive" = ps: with ps; [  ];
+    "binary_sensor.command_line" = ps: with ps; [  ];
+    "binary_sensor.concord232" = ps: with ps; [  ];
+    "binary_sensor.deconz" = ps: with ps; [  ];
+    "binary_sensor.demo" = ps: with ps; [  ];
+    "binary_sensor.digital_ocean" = ps: with ps; [ digital-ocean ];
+    "binary_sensor.ecobee" = ps: with ps; [  ];
+    "binary_sensor.egardia" = ps: with ps; [  ];
+    "binary_sensor.eight_sleep" = ps: with ps; [  ];
+    "binary_sensor.enocean" = ps: with ps; [  ];
+    "binary_sensor.envisalink" = ps: with ps; [  ];
+    "binary_sensor.ffmpeg_motion" = ps: with ps; [ ha-ffmpeg ];
+    "binary_sensor.ffmpeg_noise" = ps: with ps; [ ha-ffmpeg ];
+    "binary_sensor.fibaro" = ps: with ps; [  ];
+    "binary_sensor.flic" = ps: with ps; [  ];
+    "binary_sensor.fritzbox" = ps: with ps; [  ];
+    "binary_sensor.gc100" = ps: with ps; [  ];
+    "binary_sensor.hikvision" = ps: with ps; [  ];
+    "binary_sensor.hive" = ps: with ps; [  ];
+    "binary_sensor.homematic" = ps: with ps; [ pyhomematic ];
+    "binary_sensor.homematicip_cloud" = ps: with ps; [  ];
+    "binary_sensor.hydrawise" = ps: with ps; [  ];
+    "binary_sensor.ihc" = ps: with ps; [  ];
+    "binary_sensor.insteon" = ps: with ps; [  ];
+    "binary_sensor.iss" = ps: with ps; [  ];
+    "binary_sensor.isy994" = ps: with ps; [  ];
+    "binary_sensor.knx" = ps: with ps; [  ];
+    "binary_sensor.konnected" = ps: with ps; [ aiohttp-cors netdisco ];
+    "binary_sensor.linode" = ps: with ps; [ linode-api ];
+    "binary_sensor.lupusec" = ps: with ps; [  ];
+    "binary_sensor.maxcube" = ps: with ps; [  ];
+    "binary_sensor.modbus" = ps: with ps; [  ];
+    "binary_sensor.mqtt" = ps: with ps; [ paho-mqtt ];
+    "binary_sensor.mychevy" = ps: with ps; [  ];
+    "binary_sensor.mysensors" = ps: with ps; [  ];
+    "binary_sensor.mystrom" = ps: with ps; [ aiohttp-cors ];
+    "binary_sensor.nest" = ps: with ps; [  ];
+    "binary_sensor.netatmo" = ps: with ps; [  ];
+    "binary_sensor.nx584" = ps: with ps; [  ];
+    "binary_sensor.octoprint" = ps: with ps; [  ];
+    "binary_sensor.opentherm_gw" = ps: with ps; [  ];
+    "binary_sensor.openuv" = ps: with ps; [  ];
+    "binary_sensor.pilight" = ps: with ps; [  ];
+    "binary_sensor.ping" = ps: with ps; [  ];
+    "binary_sensor.point" = ps: with ps; [  ];
+    "binary_sensor.qwikswitch" = ps: with ps; [  ];
+    "binary_sensor.rachio" = ps: with ps; [  ];
+    "binary_sensor.raincloud" = ps: with ps; [  ];
+    "binary_sensor.rainmachine" = ps: with ps; [  ];
+    "binary_sensor.random" = ps: with ps; [  ];
+    "binary_sensor.raspihats" = ps: with ps; [  ];
+    "binary_sensor.rest" = ps: with ps; [  ];
+    "binary_sensor.rflink" = ps: with ps; [  ];
+    "binary_sensor.rfxtrx" = ps: with ps; [  ];
+    "binary_sensor.ring" = ps: with ps; [  ];
+    "binary_sensor.rpi_gpio" = ps: with ps; [  ];
+    "binary_sensor.rpi_pfio" = ps: with ps; [  ];
+    "binary_sensor.satel_integra" = ps: with ps; [  ];
+    "binary_sensor.sense" = ps: with ps; [  ];
+    "binary_sensor.skybell" = ps: with ps; [  ];
+    "binary_sensor.sleepiq" = ps: with ps; [  ];
+    "binary_sensor.spc" = ps: with ps; [  ];
+    "binary_sensor.tahoma" = ps: with ps; [  ];
+    "binary_sensor.tapsaff" = ps: with ps; [  ];
+    "binary_sensor.tcp" = ps: with ps; [  ];
+    "binary_sensor.tellduslive" = ps: with ps; [  ];
+    "binary_sensor.template" = ps: with ps; [  ];
+    "binary_sensor.tesla" = ps: with ps; [  ];
+    "binary_sensor.threshold" = ps: with ps; [  ];
+    "binary_sensor.trend" = ps: with ps; [ numpy ];
+    "binary_sensor.upcloud" = ps: with ps; [  ];
+    "binary_sensor.uptimerobot" = ps: with ps; [  ];
+    "binary_sensor.velbus" = ps: with ps; [  ];
+    "binary_sensor.vera" = ps: with ps; [  ];
+    "binary_sensor.verisure" = ps: with ps; [  ];
+    "binary_sensor.volvooncall" = ps: with ps; [  ];
+    "binary_sensor.vultr" = ps: with ps; [ vultr ];
+    "binary_sensor.w800rf32" = ps: with ps; [  ];
+    "binary_sensor.wemo" = ps: with ps; [  ];
+    "binary_sensor.wink" = ps: with ps; [  ];
+    "binary_sensor.wirelesstag" = ps: with ps; [  ];
+    "binary_sensor.workday" = ps: with ps; [  ];
+    "binary_sensor.xiaomi_aqara" = ps: with ps; [  ];
+    "binary_sensor.zha" = ps: with ps; [  ];
+    "binary_sensor.zigbee" = ps: with ps; [  ];
+    "binary_sensor.zwave" = ps: with ps; [  ];
+    "blink" = ps: with ps; [  ];
+    "bloomsky" = ps: with ps; [  ];
+    "bmw_connected_drive" = ps: with ps; [  ];
+    "browser" = ps: with ps; [  ];
+    "calendar" = ps: with ps; [ aiohttp-cors ];
+    "calendar.caldav" = ps: with ps; [  ];
+    "calendar.demo" = ps: with ps; [  ];
+    "calendar.google" = ps: with ps; [  ];
+    "calendar.todoist" = ps: with ps; [ todoist ];
+    "camera" = ps: with ps; [ aiohttp-cors ];
+    "camera.abode" = ps: with ps; [  ];
+    "camera.amcrest" = ps: with ps; [ ha-ffmpeg ];
+    "camera.arlo" = ps: with ps; [ ha-ffmpeg ];
+    "camera.august" = ps: with ps; [  ];
+    "camera.axis" = ps: with ps; [  ];
+    "camera.blink" = ps: with ps; [  ];
+    "camera.bloomsky" = ps: with ps; [  ];
+    "camera.canary" = ps: with ps; [ ha-ffmpeg ];
+    "camera.demo" = ps: with ps; [  ];
+    "camera.doorbird" = ps: with ps; [  ];
+    "camera.familyhub" = ps: with ps; [  ];
+    "camera.ffmpeg" = ps: with ps; [ ha-ffmpeg ];
+    "camera.foscam" = ps: with ps; [  ];
+    "camera.generic" = ps: with ps; [  ];
+    "camera.local_file" = ps: with ps; [  ];
+    "camera.logi_circle" = ps: with ps; [  ];
+    "camera.mjpeg" = ps: with ps; [  ];
+    "camera.mqtt" = ps: with ps; [ paho-mqtt ];
+    "camera.neato" = ps: with ps; [  ];
+    "camera.nest" = ps: with ps; [  ];
+    "camera.netatmo" = ps: with ps; [  ];
+    "camera.onvif" = ps: with ps; [ ha-ffmpeg ];
+    "camera.proxy" = ps: with ps; [ pillow ];
+    "camera.push" = ps: with ps; [ aiohttp-cors ];
+    "camera.ring" = ps: with ps; [ ha-ffmpeg ];
+    "camera.rpi_camera" = ps: with ps; [  ];
+    "camera.skybell" = ps: with ps; [  ];
+    "camera.synology" = ps: with ps; [  ];
+    "camera.usps" = ps: with ps; [  ];
+    "camera.uvc" = ps: with ps; [  ];
+    "camera.verisure" = ps: with ps; [  ];
+    "camera.xeoma" = ps: with ps; [  ];
+    "camera.xiaomi" = ps: with ps; [ ha-ffmpeg ];
+    "camera.yi" = ps: with ps; [ ha-ffmpeg ];
+    "camera.zoneminder" = ps: with ps; [  ];
+    "canary" = ps: with ps; [  ];
+    "cast" = ps: with ps; [ PyChromecast ];
+    "climate" = ps: with ps; [  ];
+    "climate.daikin" = ps: with ps; [  ];
+    "climate.demo" = ps: with ps; [  ];
+    "climate.dyson" = ps: with ps; [  ];
+    "climate.ecobee" = ps: with ps; [  ];
+    "climate.elkm1" = ps: with ps; [  ];
+    "climate.ephember" = ps: with ps; [  ];
+    "climate.eq3btsmart" = ps: with ps; [ construct ];
+    "climate.evohome" = ps: with ps; [  ];
+    "climate.flexit" = ps: with ps; [  ];
+    "climate.fritzbox" = ps: with ps; [  ];
+    "climate.generic_thermostat" = ps: with ps; [  ];
+    "climate.heatmiser" = ps: with ps; [  ];
+    "climate.hive" = ps: with ps; [  ];
+    "climate.homekit_controller" = ps: with ps; [  ];
+    "climate.homematic" = ps: with ps; [ pyhomematic ];
+    "climate.homematicip_cloud" = ps: with ps; [  ];
+    "climate.honeywell" = ps: with ps; [  ];
+    "climate.knx" = ps: with ps; [  ];
+    "climate.maxcube" = ps: with ps; [  ];
+    "climate.melissa" = ps: with ps; [  ];
+    "climate.mill" = ps: with ps; [  ];
+    "climate.modbus" = ps: with ps; [  ];
+    "climate.mqtt" = ps: with ps; [ paho-mqtt ];
+    "climate.mysensors" = ps: with ps; [  ];
+    "climate.nest" = ps: with ps; [  ];
+    "climate.netatmo" = ps: with ps; [  ];
+    "climate.nuheat" = ps: with ps; [  ];
+    "climate.oem" = ps: with ps; [  ];
+    "climate.opentherm_gw" = ps: with ps; [  ];
+    "climate.proliphix" = ps: with ps; [  ];
+    "climate.radiotherm" = ps: with ps; [  ];
+    "climate.sensibo" = ps: with ps; [  ];
+    "climate.spider" = ps: with ps; [  ];
+    "climate.tado" = ps: with ps; [  ];
+    "climate.tesla" = ps: with ps; [  ];
+    "climate.toon" = ps: with ps; [  ];
+    "climate.touchline" = ps: with ps; [  ];
+    "climate.tuya" = ps: with ps; [  ];
+    "climate.velbus" = ps: with ps; [  ];
+    "climate.venstar" = ps: with ps; [  ];
+    "climate.vera" = ps: with ps; [  ];
+    "climate.wink" = ps: with ps; [  ];
+    "climate.zhong_hong" = ps: with ps; [  ];
+    "climate.zwave" = ps: with ps; [  ];
+    "cloud" = ps: with ps; [ aiohttp-cors warrant ];
+    "cloud.auth_api" = ps: with ps; [  ];
+    "cloud.cloud_api" = ps: with ps; [  ];
+    "cloud.cloudhooks" = ps: with ps; [  ];
+    "cloud.const" = ps: with ps; [  ];
+    "cloud.http_api" = ps: with ps; [  ];
+    "cloud.iot" = ps: with ps; [  ];
+    "cloud.prefs" = ps: with ps; [  ];
+    "cloudflare" = ps: with ps; [  ];
+    "coinbase" = ps: with ps; [  ];
+    "comfoconnect" = ps: with ps; [  ];
+    "config" = ps: with ps; [ aiohttp-cors ];
+    "config.auth" = ps: with ps; [  ];
+    "config.automation" = ps: with ps; [  ];
+    "config.config_entries" = ps: with ps; [  ];
+    "config.core" = ps: with ps; [  ];
+    "config.customize" = ps: with ps; [  ];
+    "config.device_registry" = ps: with ps; [ aiohttp-cors ];
+    "config.entity_registry" = ps: with ps; [ aiohttp-cors ];
+    "config.group" = ps: with ps; [  ];
+    "config.hassbian" = ps: with ps; [  ];
+    "config.script" = ps: with ps; [  ];
+    "config.zwave" = ps: with ps; [  ];
+    "configurator" = ps: with ps; [  ];
+    "conversation" = ps: with ps; [ aiohttp-cors ];
+    "conversation.util" = ps: with ps; [  ];
+    "counter" = ps: with ps; [  ];
+    "cover" = ps: with ps; [  ];
+    "cover.abode" = ps: with ps; [  ];
+    "cover.aladdin_connect" = ps: with ps; [  ];
+    "cover.brunt" = ps: with ps; [  ];
+    "cover.command_line" = ps: with ps; [  ];
+    "cover.deconz" = ps: with ps; [  ];
+    "cover.demo" = ps: with ps; [  ];
+    "cover.fibaro" = ps: with ps; [  ];
+    "cover.garadget" = ps: with ps; [  ];
+    "cover.gogogate2" = ps: with ps; [  ];
+    "cover.group" = ps: with ps; [  ];
+    "cover.homematic" = ps: with ps; [ pyhomematic ];
+    "cover.insteon" = ps: with ps; [  ];
+    "cover.isy994" = ps: with ps; [  ];
+    "cover.knx" = ps: with ps; [  ];
+    "cover.lutron" = ps: with ps; [  ];
+    "cover.lutron_caseta" = ps: with ps; [  ];
+    "cover.mqtt" = ps: with ps; [ paho-mqtt ];
+    "cover.myq" = ps: with ps; [  ];
+    "cover.mysensors" = ps: with ps; [  ];
+    "cover.opengarage" = ps: with ps; [  ];
+    "cover.rflink" = ps: with ps; [  ];
+    "cover.rfxtrx" = ps: with ps; [  ];
+    "cover.rpi_gpio" = ps: with ps; [  ];
+    "cover.scsgate" = ps: with ps; [  ];
+    "cover.tahoma" = ps: with ps; [  ];
+    "cover.tellduslive" = ps: with ps; [  ];
+    "cover.tellstick" = ps: with ps; [  ];
+    "cover.template" = ps: with ps; [  ];
+    "cover.tuya" = ps: with ps; [  ];
+    "cover.velbus" = ps: with ps; [  ];
+    "cover.vera" = ps: with ps; [  ];
+    "cover.wink" = ps: with ps; [  ];
+    "cover.xiaomi_aqara" = ps: with ps; [  ];
+    "cover.zwave" = ps: with ps; [  ];
+    "daikin" = ps: with ps; [  ];
+    "datadog" = ps: with ps; [ datadog ];
+    "deconz" = ps: with ps; [  ];
+    "deconz.config_flow" = ps: with ps; [  ];
+    "deconz.const" = ps: with ps; [  ];
+    "deconz.gateway" = ps: with ps; [  ];
+    "demo" = ps: with ps; [ aiohttp-cors ];
+    "device_sun_light_trigger" = ps: with ps; [  ];
+    "device_tracker" = ps: with ps; [  ];
+    "device_tracker.actiontec" = ps: with ps; [  ];
+    "device_tracker.aruba" = ps: with ps; [ pexpect ];
+    "device_tracker.asuswrt" = ps: with ps; [  ];
+    "device_tracker.automatic" = ps: with ps; [ aiohttp-cors ];
+    "device_tracker.bbox" = ps: with ps; [  ];
+    "device_tracker.bluetooth_le_tracker" = ps: with ps; [  ];
+    "device_tracker.bluetooth_tracker" = ps: with ps; [ bt_proximity ];
+    "device_tracker.bmw_connected_drive" = ps: with ps; [  ];
+    "device_tracker.bt_home_hub_5" = ps: with ps; [  ];
+    "device_tracker.bt_smarthub" = ps: with ps; [  ];
+    "device_tracker.cisco_ios" = ps: with ps; [ pexpect ];
+    "device_tracker.ddwrt" = ps: with ps; [  ];
+    "device_tracker.demo" = ps: with ps; [  ];
+    "device_tracker.freebox" = ps: with ps; [  ];
+    "device_tracker.fritz" = ps: with ps; [ fritzconnection ];
+    "device_tracker.geofency" = ps: with ps; [ aiohttp-cors ];
+    "device_tracker.google_maps" = ps: with ps; [  ];
+    "device_tracker.googlehome" = ps: with ps; [  ];
+    "device_tracker.gpslogger" = ps: with ps; [ aiohttp-cors ];
+    "device_tracker.hitron_coda" = ps: with ps; [  ];
+    "device_tracker.huawei_lte" = ps: with ps; [  ];
+    "device_tracker.huawei_router" = ps: with ps; [  ];
+    "device_tracker.icloud" = ps: with ps; [  ];
+    "device_tracker.keenetic_ndms2" = ps: with ps; [  ];
+    "device_tracker.linksys_ap" = ps: with ps; [ beautifulsoup4 ];
+    "device_tracker.linksys_smart" = ps: with ps; [  ];
+    "device_tracker.locative" = ps: with ps; [ aiohttp-cors ];
+    "device_tracker.luci" = ps: with ps; [  ];
+    "device_tracker.meraki" = ps: with ps; [ aiohttp-cors ];
+    "device_tracker.mikrotik" = ps: with ps; [  ];
+    "device_tracker.mqtt" = ps: with ps; [ paho-mqtt ];
+    "device_tracker.mqtt_json" = ps: with ps; [ paho-mqtt ];
+    "device_tracker.mysensors" = ps: with ps; [  ];
+    "device_tracker.netgear" = ps: with ps; [  ];
+    "device_tracker.nmap_tracker" = ps: with ps; [  ];
+    "device_tracker.owntracks" = ps: with ps; [ aiohttp-cors libnacl ];
+    "device_tracker.ping" = ps: with ps; [  ];
+    "device_tracker.quantum_gateway" = ps: with ps; [  ];
+    "device_tracker.ritassist" = ps: with ps; [  ];
+    "device_tracker.sky_hub" = ps: with ps; [  ];
+    "device_tracker.snmp" = ps: with ps; [ pysnmp ];
+    "device_tracker.swisscom" = ps: with ps; [  ];
+    "device_tracker.tado" = ps: with ps; [  ];
+    "device_tracker.tesla" = ps: with ps; [  ];
+    "device_tracker.thomson" = ps: with ps; [  ];
+    "device_tracker.tile" = ps: with ps; [  ];
+    "device_tracker.tomato" = ps: with ps; [  ];
+    "device_tracker.tplink" = ps: with ps; [  ];
+    "device_tracker.traccar" = ps: with ps; [  ];
+    "device_tracker.trackr" = ps: with ps; [  ];
+    "device_tracker.ubus" = ps: with ps; [  ];
+    "device_tracker.unifi" = ps: with ps; [ pyunifi ];
+    "device_tracker.unifi_direct" = ps: with ps; [ pexpect ];
+    "device_tracker.upc_connect" = ps: with ps; [ defusedxml ];
+    "device_tracker.volvooncall" = ps: with ps; [  ];
+    "device_tracker.xiaomi" = ps: with ps; [  ];
+    "device_tracker.xiaomi_miio" = ps: with ps; [ construct ];
+    "dialogflow" = ps: with ps; [ aiohttp-cors ];
+    "digital_ocean" = ps: with ps; [ digital-ocean ];
+    "discovery" = ps: with ps; [ netdisco ];
+    "dominos" = ps: with ps; [ aiohttp-cors ];
+    "doorbird" = ps: with ps; [  ];
+    "downloader" = ps: with ps; [  ];
+    "duckdns" = ps: with ps; [  ];
+    "dweet" = ps: with ps; [  ];
+    "dyson" = ps: with ps; [  ];
+    "ecobee" = ps: with ps; [  ];
+    "ecovacs" = ps: with ps; [  ];
+    "edp_redy" = ps: with ps; [  ];
+    "egardia" = ps: with ps; [  ];
+    "eight_sleep" = ps: with ps; [  ];
+    "elkm1" = ps: with ps; [  ];
+    "emoncms_history" = ps: with ps; [  ];
+    "emulated_hue" = ps: with ps; [ aiohttp-cors ];
+    "emulated_hue.hue_api" = ps: with ps; [  ];
+    "emulated_hue.upnp" = ps: with ps; [  ];
+    "enocean" = ps: with ps; [  ];
+    "envisalink" = ps: with ps; [  ];
+    "eufy" = ps: with ps; [  ];
+    "evohome" = ps: with ps; [  ];
+    "fan" = ps: with ps; [  ];
+    "fan.comfoconnect" = ps: with ps; [  ];
+    "fan.demo" = ps: with ps; [  ];
+    "fan.dyson" = ps: with ps; [  ];
+    "fan.insteon" = ps: with ps; [  ];
+    "fan.isy994" = ps: with ps; [  ];
+    "fan.mqtt" = ps: with ps; [ paho-mqtt ];
+    "fan.template" = ps: with ps; [  ];
+    "fan.tuya" = ps: with ps; [  ];
+    "fan.wemo" = ps: with ps; [  ];
+    "fan.wink" = ps: with ps; [  ];
+    "fan.xiaomi_miio" = ps: with ps; [ construct ];
+    "fan.zha" = ps: with ps; [  ];
+    "fan.zwave" = ps: with ps; [  ];
+    "feedreader" = ps: with ps; [ feedparser ];
+    "ffmpeg" = ps: with ps; [ ha-ffmpeg ];
+    "fibaro" = ps: with ps; [  ];
+    "folder_watcher" = ps: with ps; [ watchdog ];
+    "foursquare" = ps: with ps; [ aiohttp-cors ];
+    "freedns" = ps: with ps; [  ];
+    "fritzbox" = ps: with ps; [  ];
+    "frontend" = ps: with ps; [ aiohttp-cors ];
+    "gc100" = ps: with ps; [  ];
+    "geo_location" = ps: with ps; [  ];
+    "geo_location.demo" = ps: with ps; [  ];
+    "geo_location.geo_json_events" = ps: with ps; [  ];
+    "geo_location.nsw_rural_fire_service_feed" = ps: with ps; [  ];
+    "geo_location.usgs_earthquakes_feed" = ps: with ps; [  ];
+    "geofency" = ps: with ps; [ aiohttp-cors ];
+    "goalfeed" = ps: with ps; [  ];
+    "google" = ps: with ps; [ google_api_python_client httplib2 oauth2client ];
+    "google_assistant" = ps: with ps; [ aiohttp-cors ];
+    "google_assistant.const" = ps: with ps; [  ];
+    "google_assistant.helpers" = ps: with ps; [  ];
+    "google_assistant.http" = ps: with ps; [  ];
+    "google_assistant.smart_home" = ps: with ps; [  ];
+    "google_assistant.trait" = ps: with ps; [  ];
+    "google_domains" = ps: with ps; [  ];
+    "graphite" = ps: with ps; [  ];
+    "greeneye_monitor" = ps: with ps; [  ];
+    "group" = ps: with ps; [  ];
+    "habitica" = ps: with ps; [  ];
+    "hangouts" = ps: with ps; [  ];
+    "hangouts.config_flow" = ps: with ps; [  ];
+    "hangouts.const" = ps: with ps; [  ];
+    "hangouts.hangouts_bot" = ps: with ps; [  ];
+    "hangouts.intents" = ps: with ps; [  ];
+    "hassio" = ps: with ps; [ aiohttp-cors ];
+    "hassio.auth" = ps: with ps; [  ];
+    "hassio.const" = ps: with ps; [  ];
+    "hassio.discovery" = ps: with ps; [  ];
+    "hassio.handler" = ps: with ps; [  ];
+    "hassio.http" = ps: with ps; [  ];
+    "hdmi_cec" = ps: with ps; [  ];
+    "history" = ps: with ps; [ aiohttp-cors sqlalchemy ];
+    "history_graph" = ps: with ps; [ aiohttp-cors sqlalchemy ];
+    "hive" = ps: with ps; [  ];
+    "hlk_sw16" = ps: with ps; [  ];
+    "homekit" = ps: with ps; [  ];
+    "homekit.const" = ps: with ps; [  ];
+    "homekit.util" = ps: with ps; [  ];
+    "homekit_controller" = ps: with ps; [  ];
+    "homematic" = ps: with ps; [ pyhomematic ];
+    "homematicip_cloud" = ps: with ps; [  ];
+    "homematicip_cloud.config_flow" = ps: with ps; [  ];
+    "homematicip_cloud.const" = ps: with ps; [  ];
+    "homematicip_cloud.device" = ps: with ps; [  ];
+    "homematicip_cloud.errors" = ps: with ps; [  ];
+    "homematicip_cloud.hap" = ps: with ps; [  ];
+    "http" = ps: with ps; [ aiohttp-cors ];
+    "http.auth" = ps: with ps; [  ];
+    "http.ban" = ps: with ps; [  ];
+    "http.const" = ps: with ps; [  ];
+    "http.cors" = ps: with ps; [  ];
+    "http.data_validator" = ps: with ps; [  ];
+    "http.real_ip" = ps: with ps; [  ];
+    "http.static" = ps: with ps; [  ];
+    "http.view" = ps: with ps; [  ];
+    "huawei_lte" = ps: with ps; [  ];
+    "hue" = ps: with ps; [ aiohue ];
+    "hue.bridge" = ps: with ps; [  ];
+    "hue.config_flow" = ps: with ps; [  ];
+    "hue.const" = ps: with ps; [  ];
+    "hue.errors" = ps: with ps; [  ];
+    "hydrawise" = ps: with ps; [  ];
+    "ifttt" = ps: with ps; [ aiohttp-cors pyfttt ];
+    "ihc" = ps: with ps; [  ];
+    "ihc.const" = ps: with ps; [  ];
+    "ihc.ihcdevice" = ps: with ps; [  ];
+    "image_processing" = ps: with ps; [ aiohttp-cors ];
+    "image_processing.demo" = ps: with ps; [  ];
+    "image_processing.dlib_face_detect" = ps: with ps; [ face_recognition ];
+    "image_processing.dlib_face_identify" = ps: with ps; [ face_recognition ];
+    "image_processing.facebox" = ps: with ps; [  ];
+    "image_processing.microsoft_face_detect" = ps: with ps; [ aiohttp-cors ];
+    "image_processing.microsoft_face_identify" = ps: with ps; [ aiohttp-cors ];
+    "image_processing.openalpr_cloud" = ps: with ps; [  ];
+    "image_processing.openalpr_local" = ps: with ps; [  ];
+    "image_processing.opencv" = ps: with ps; [ numpy ];
+    "image_processing.seven_segments" = ps: with ps; [  ];
+    "image_processing.tensorflow" = ps: with ps; [ numpy pillow protobuf ];
+    "influxdb" = ps: with ps; [ influxdb ];
+    "input_boolean" = ps: with ps; [  ];
+    "input_datetime" = ps: with ps; [  ];
+    "input_number" = ps: with ps; [  ];
+    "input_select" = ps: with ps; [  ];
+    "input_text" = ps: with ps; [  ];
+    "insteon" = ps: with ps; [  ];
+    "insteon_local" = ps: with ps; [  ];
+    "insteon_plm" = ps: with ps; [  ];
+    "intent_script" = ps: with ps; [  ];
+    "introduction" = ps: with ps; [  ];
+    "ios" = ps: with ps; [ aiohttp-cors zeroconf ];
+    "iota" = ps: with ps; [  ];
+    "isy994" = ps: with ps; [  ];
+    "joaoapps_join" = ps: with ps; [  ];
+    "juicenet" = ps: with ps; [  ];
+    "keyboard" = ps: with ps; [  ];
+    "keyboard_remote" = ps: with ps; [ evdev ];
+    "kira" = ps: with ps; [  ];
+    "knx" = ps: with ps; [  ];
+    "konnected" = ps: with ps; [ aiohttp-cors netdisco ];
+    "lametric" = ps: with ps; [  ];
+    "lifx" = ps: with ps; [  ];
+    "light" = ps: with ps; [  ];
+    "light.abode" = ps: with ps; [  ];
+    "light.ads" = ps: with ps; [  ];
+    "light.avion" = ps: with ps; [  ];
+    "light.blinksticklight" = ps: with ps; [ BlinkStick ];
+    "light.blinkt" = ps: with ps; [  ];
+    "light.deconz" = ps: with ps; [  ];
+    "light.decora" = ps: with ps; [  ];
+    "light.decora_wifi" = ps: with ps; [  ];
+    "light.demo" = ps: with ps; [  ];
+    "light.elkm1" = ps: with ps; [  ];
+    "light.enocean" = ps: with ps; [  ];
+    "light.eufy" = ps: with ps; [  ];
+    "light.fibaro" = ps: with ps; [  ];
+    "light.flux_led" = ps: with ps; [  ];
+    "light.futurenow" = ps: with ps; [  ];
+    "light.greenwave" = ps: with ps; [  ];
+    "light.group" = ps: with ps; [  ];
+    "light.hive" = ps: with ps; [  ];
+    "light.homekit_controller" = ps: with ps; [  ];
+    "light.homematic" = ps: with ps; [ pyhomematic ];
+    "light.homematicip_cloud" = ps: with ps; [  ];
+    "light.hue" = ps: with ps; [ aiohue ];
+    "light.hyperion" = ps: with ps; [  ];
+    "light.iglo" = ps: with ps; [  ];
+    "light.ihc" = ps: with ps; [  ];
+    "light.insteon" = ps: with ps; [  ];
+    "light.isy994" = ps: with ps; [  ];
+    "light.knx" = ps: with ps; [  ];
+    "light.lifx" = ps: with ps; [  ];
+    "light.lifx_legacy" = ps: with ps; [  ];
+    "light.lightwave" = ps: with ps; [  ];
+    "light.limitlessled" = ps: with ps; [  ];
+    "light.litejet" = ps: with ps; [  ];
+    "light.lutron" = ps: with ps; [  ];
+    "light.lutron_caseta" = ps: with ps; [  ];
+    "light.lw12wifi" = ps: with ps; [  ];
+    "light.mochad" = ps: with ps; [  ];
+    "light.mqtt" = ps: with ps; [ paho-mqtt ];
+    "light.mysensors" = ps: with ps; [  ];
+    "light.mystrom" = ps: with ps; [  ];
+    "light.nanoleaf_aurora" = ps: with ps; [ nanoleaf ];
+    "light.niko_home_control" = ps: with ps; [  ];
+    "light.opple" = ps: with ps; [  ];
+    "light.osramlightify" = ps: with ps; [  ];
+    "light.piglow" = ps: with ps; [  ];
+    "light.qwikswitch" = ps: with ps; [  ];
+    "light.rflink" = ps: with ps; [  ];
+    "light.rfxtrx" = ps: with ps; [  ];
+    "light.rpi_gpio_pwm" = ps: with ps; [  ];
+    "light.scsgate" = ps: with ps; [  ];
+    "light.sensehat" = ps: with ps; [  ];
+    "light.sisyphus" = ps: with ps; [  ];
+    "light.skybell" = ps: with ps; [  ];
+    "light.switch" = ps: with ps; [  ];
+    "light.tellduslive" = ps: with ps; [  ];
+    "light.tellstick" = ps: with ps; [  ];
+    "light.template" = ps: with ps; [  ];
+    "light.tikteck" = ps: with ps; [  ];
+    "light.tplink" = ps: with ps; [  ];
+    "light.tradfri" = ps: with ps; [  ];
+    "light.tuya" = ps: with ps; [  ];
+    "light.vera" = ps: with ps; [  ];
+    "light.wemo" = ps: with ps; [  ];
+    "light.wink" = ps: with ps; [  ];
+    "light.x10" = ps: with ps; [  ];
+    "light.xiaomi_aqara" = ps: with ps; [  ];
+    "light.xiaomi_miio" = ps: with ps; [ construct ];
+    "light.yeelight" = ps: with ps; [  ];
+    "light.yeelightsunflower" = ps: with ps; [  ];
+    "light.zengge" = ps: with ps; [  ];
+    "light.zha" = ps: with ps; [  ];
+    "light.zigbee" = ps: with ps; [  ];
+    "light.zwave" = ps: with ps; [  ];
+    "lightwave" = ps: with ps; [  ];
+    "linode" = ps: with ps; [ linode-api ];
+    "lirc" = ps: with ps; [  ];
+    "litejet" = ps: with ps; [  ];
+    "lock" = ps: with ps; [  ];
+    "lock.abode" = ps: with ps; [  ];
+    "lock.august" = ps: with ps; [  ];
+    "lock.bmw_connected_drive" = ps: with ps; [  ];
+    "lock.demo" = ps: with ps; [  ];
+    "lock.homematic" = ps: with ps; [ pyhomematic ];
+    "lock.isy994" = ps: with ps; [  ];
+    "lock.kiwi" = ps: with ps; [  ];
+    "lock.lockitron" = ps: with ps; [  ];
+    "lock.mqtt" = ps: with ps; [ paho-mqtt ];
+    "lock.nello" = ps: with ps; [  ];
+    "lock.nuki" = ps: with ps; [  ];
+    "lock.sesame" = ps: with ps; [  ];
+    "lock.template" = ps: with ps; [  ];
+    "lock.tesla" = ps: with ps; [  ];
+    "lock.vera" = ps: with ps; [  ];
+    "lock.verisure" = ps: with ps; [  ];
+    "lock.volvooncall" = ps: with ps; [  ];
+    "lock.wink" = ps: with ps; [  ];
+    "lock.xiaomi_aqara" = ps: with ps; [  ];
+    "lock.zwave" = ps: with ps; [  ];
+    "logbook" = ps: with ps; [ aiohttp-cors sqlalchemy ];
+    "logentries" = ps: with ps; [  ];
+    "logger" = ps: with ps; [  ];
+    "logi_circle" = ps: with ps; [  ];
+    "lovelace" = ps: with ps; [  ];
+    "luftdaten" = ps: with ps; [ luftdaten ];
+    "luftdaten.config_flow" = ps: with ps; [  ];
+    "luftdaten.const" = ps: with ps; [  ];
+    "lupusec" = ps: with ps; [  ];
+    "lutron" = ps: with ps; [  ];
+    "lutron_caseta" = ps: with ps; [  ];
+    "mailbox" = ps: with ps; [ aiohttp-cors ];
+    "mailbox.asterisk_cdr" = ps: with ps; [  ];
+    "mailbox.asterisk_mbox" = ps: with ps; [  ];
+    "mailbox.demo" = ps: with ps; [  ];
+    "mailgun" = ps: with ps; [ aiohttp-cors ];
+    "map" = ps: with ps; [  ];
+    "matrix" = ps: with ps; [ matrix-client ];
+    "maxcube" = ps: with ps; [  ];
+    "media_extractor" = ps: with ps; [ aiohttp-cors youtube-dl-light ];
+    "media_player" = ps: with ps; [ aiohttp-cors ];
+    "media_player.anthemav" = ps: with ps; [  ];
+    "media_player.apple_tv" = ps: with ps; [  ];
+    "media_player.aquostv" = ps: with ps; [  ];
+    "media_player.blackbird" = ps: with ps; [  ];
+    "media_player.bluesound" = ps: with ps; [ xmltodict ];
+    "media_player.braviatv" = ps: with ps; [  ];
+    "media_player.cast" = ps: with ps; [ PyChromecast ];
+    "media_player.channels" = ps: with ps; [  ];
+    "media_player.clementine" = ps: with ps; [  ];
+    "media_player.cmus" = ps: with ps; [  ];
+    "media_player.demo" = ps: with ps; [  ];
+    "media_player.denon" = ps: with ps; [  ];
+    "media_player.denonavr" = ps: with ps; [  ];
+    "media_player.directv" = ps: with ps; [  ];
+    "media_player.dlna_dmr" = ps: with ps; [  ];
+    "media_player.dunehd" = ps: with ps; [  ];
+    "media_player.emby" = ps: with ps; [  ];
+    "media_player.epson" = ps: with ps; [  ];
+    "media_player.firetv" = ps: with ps; [  ];
+    "media_player.frontier_silicon" = ps: with ps; [  ];
+    "media_player.gpmdp" = ps: with ps; [ websocket_client ];
+    "media_player.gstreamer" = ps: with ps; [  ];
+    "media_player.hdmi_cec" = ps: with ps; [  ];
+    "media_player.horizon" = ps: with ps; [  ];
+    "media_player.itunes" = ps: with ps; [  ];
+    "media_player.kodi" = ps: with ps; [ jsonrpc-async jsonrpc-websocket ];
+    "media_player.lg_netcast" = ps: with ps; [  ];
+    "media_player.lg_soundbar" = ps: with ps; [  ];
+    "media_player.liveboxplaytv" = ps: with ps; [  ];
+    "media_player.mediaroom" = ps: with ps; [  ];
+    "media_player.monoprice" = ps: with ps; [  ];
+    "media_player.mpchc" = ps: with ps; [  ];
+    "media_player.mpd" = ps: with ps; [ mpd2 ];
+    "media_player.nad" = ps: with ps; [  ];
+    "media_player.nadtcp" = ps: with ps; [  ];
+    "media_player.onkyo" = ps: with ps; [ onkyo-eiscp ];
+    "media_player.openhome" = ps: with ps; [  ];
+    "media_player.panasonic_bluray" = ps: with ps; [  ];
+    "media_player.panasonic_viera" = ps: with ps; [ wakeonlan ];
+    "media_player.pandora" = ps: with ps; [ pexpect ];
+    "media_player.philips_js" = ps: with ps; [  ];
+    "media_player.pioneer" = ps: with ps; [  ];
+    "media_player.pjlink" = ps: with ps; [  ];
+    "media_player.plex" = ps: with ps; [  ];
+    "media_player.roku" = ps: with ps; [  ];
+    "media_player.russound_rio" = ps: with ps; [  ];
+    "media_player.russound_rnet" = ps: with ps; [  ];
+    "media_player.samsungtv" = ps: with ps; [ wakeonlan ];
+    "media_player.sisyphus" = ps: with ps; [  ];
+    "media_player.snapcast" = ps: with ps; [ snapcast ];
+    "media_player.songpal" = ps: with ps; [  ];
+    "media_player.sonos" = ps: with ps; [  ];
+    "media_player.soundtouch" = ps: with ps; [ libsoundtouch ];
+    "media_player.spotify" = ps: with ps; [ aiohttp-cors ];
+    "media_player.squeezebox" = ps: with ps; [  ];
+    "media_player.ue_smart_radio" = ps: with ps; [  ];
+    "media_player.universal" = ps: with ps; [  ];
+    "media_player.vizio" = ps: with ps; [  ];
+    "media_player.vlc" = ps: with ps; [  ];
+    "media_player.volumio" = ps: with ps; [  ];
+    "media_player.webostv" = ps: with ps; [ websockets ];
+    "media_player.xiaomi_tv" = ps: with ps; [  ];
+    "media_player.yamaha" = ps: with ps; [  ];
+    "media_player.yamaha_musiccast" = ps: with ps; [  ];
+    "media_player.ziggo_mediabox_xl" = ps: with ps; [  ];
+    "melissa" = ps: with ps; [  ];
+    "microsoft_face" = ps: with ps; [ aiohttp-cors ];
+    "mochad" = ps: with ps; [  ];
+    "modbus" = ps: with ps; [  ];
+    "mqtt" = ps: with ps; [ paho-mqtt ];
+    "mqtt.config_flow" = ps: with ps; [  ];
+    "mqtt.const" = ps: with ps; [  ];
+    "mqtt.discovery" = ps: with ps; [  ];
+    "mqtt.server" = ps: with ps; [ aiohttp-cors hbmqtt ];
+    "mqtt.subscription" = ps: with ps; [  ];
+    "mqtt_eventstream" = ps: with ps; [ paho-mqtt ];
+    "mqtt_statestream" = ps: with ps; [ paho-mqtt ];
+    "mychevy" = ps: with ps; [  ];
+    "mycroft" = ps: with ps; [  ];
+    "mysensors" = ps: with ps; [  ];
+    "mysensors.const" = ps: with ps; [  ];
+    "mysensors.device" = ps: with ps; [  ];
+    "mysensors.gateway" = ps: with ps; [  ];
+    "mysensors.handler" = ps: with ps; [  ];
+    "mysensors.helpers" = ps: with ps; [  ];
+    "namecheapdns" = ps: with ps; [  ];
+    "neato" = ps: with ps; [  ];
+    "nest" = ps: with ps; [  ];
+    "nest.config_flow" = ps: with ps; [  ];
+    "nest.const" = ps: with ps; [  ];
+    "nest.local_auth" = ps: with ps; [  ];
+    "netatmo" = ps: with ps; [  ];
+    "netgear_lte" = ps: with ps; [  ];
+    "no_ip" = ps: with ps; [  ];
+    "notify" = ps: with ps; [  ];
+    "notify.apns" = ps: with ps; [  ];
+    "notify.aws_lambda" = ps: with ps; [ boto3 ];
+    "notify.aws_sns" = ps: with ps; [ boto3 ];
+    "notify.aws_sqs" = ps: with ps; [ boto3 ];
+    "notify.ciscospark" = ps: with ps; [  ];
+    "notify.clickatell" = ps: with ps; [  ];
+    "notify.clicksend" = ps: with ps; [  ];
+    "notify.clicksend_tts" = ps: with ps; [  ];
+    "notify.command_line" = ps: with ps; [  ];
+    "notify.demo" = ps: with ps; [  ];
+    "notify.discord" = ps: with ps; [  ];
+    "notify.ecobee" = ps: with ps; [  ];
+    "notify.facebook" = ps: with ps; [  ];
+    "notify.file" = ps: with ps; [  ];
+    "notify.flock" = ps: with ps; [  ];
+    "notify.free_mobile" = ps: with ps; [  ];
+    "notify.gntp" = ps: with ps; [  ];
+    "notify.group" = ps: with ps; [  ];
+    "notify.hangouts" = ps: with ps; [  ];
+    "notify.hipchat" = ps: with ps; [  ];
+    "notify.homematic" = ps: with ps; [ pyhomematic ];
+    "notify.html5" = ps: with ps; [ aiohttp-cors ];
+    "notify.ios" = ps: with ps; [ aiohttp-cors zeroconf ];
+    "notify.joaoapps_join" = ps: with ps; [  ];
+    "notify.knx" = ps: with ps; [  ];
+    "notify.kodi" = ps: with ps; [ jsonrpc-async ];
+    "notify.lametric" = ps: with ps; [  ];
+    "notify.lannouncer" = ps: with ps; [  ];
+    "notify.llamalab_automate" = ps: with ps; [  ];
+    "notify.mailgun" = ps: with ps; [ aiohttp-cors ];
+    "notify.mastodon" = ps: with ps; [  ];
+    "notify.matrix" = ps: with ps; [ matrix-client ];
+    "notify.message_bird" = ps: with ps; [  ];
+    "notify.mycroft" = ps: with ps; [  ];
+    "notify.mysensors" = ps: with ps; [  ];
+    "notify.netgear_lte" = ps: with ps; [  ];
+    "notify.nfandroidtv" = ps: with ps; [  ];
+    "notify.prowl" = ps: with ps; [  ];
+    "notify.pushbullet" = ps: with ps; [ pushbullet ];
+    "notify.pushetta" = ps: with ps; [  ];
+    "notify.pushover" = ps: with ps; [ python-pushover ];
+    "notify.pushsafer" = ps: with ps; [  ];
+    "notify.rest" = ps: with ps; [  ];
+    "notify.rocketchat" = ps: with ps; [  ];
+    "notify.sendgrid" = ps: with ps; [  ];
+    "notify.simplepush" = ps: with ps; [  ];
+    "notify.slack" = ps: with ps; [  ];
+    "notify.smtp" = ps: with ps; [  ];
+    "notify.stride" = ps: with ps; [  ];
+    "notify.synology_chat" = ps: with ps; [  ];
+    "notify.syslog" = ps: with ps; [  ];
+    "notify.telegram" = ps: with ps; [ python-telegram-bot ];
+    "notify.tibber" = ps: with ps; [  ];
+    "notify.tplink_lte" = ps: with ps; [  ];
+    "notify.twilio_call" = ps: with ps; [ aiohttp-cors twilio ];
+    "notify.twilio_sms" = ps: with ps; [ aiohttp-cors twilio ];
+    "notify.twitter" = ps: with ps; [  ];
+    "notify.webostv" = ps: with ps; [  ];
+    "notify.xmpp" = ps: with ps; [ slixmpp ];
+    "notify.yessssms" = ps: with ps; [  ];
+    "nuheat" = ps: with ps; [  ];
+    "nuimo_controller" = ps: with ps; [  ];
+    "octoprint" = ps: with ps; [  ];
+    "onboarding" = ps: with ps; [ aiohttp-cors ];
+    "onboarding.const" = ps: with ps; [  ];
+    "onboarding.views" = ps: with ps; [  ];
+    "opentherm_gw" = ps: with ps; [  ];
+    "openuv" = ps: with ps; [  ];
+    "openuv.config_flow" = ps: with ps; [  ];
+    "openuv.const" = ps: with ps; [  ];
+    "owntracks" = ps: with ps; [ aiohttp-cors libnacl ];
+    "owntracks.config_flow" = ps: with ps; [  ];
+    "panel_custom" = ps: with ps; [ aiohttp-cors ];
+    "panel_iframe" = ps: with ps; [ aiohttp-cors ];
+    "persistent_notification" = ps: with ps; [  ];
+    "pilight" = ps: with ps; [  ];
+    "plant" = ps: with ps; [  ];
+    "point" = ps: with ps; [ aiohttp-cors ];
+    "point.config_flow" = ps: with ps; [  ];
+    "point.const" = ps: with ps; [  ];
+    "prometheus" = ps: with ps; [ aiohttp-cors prometheus_client ];
+    "proximity" = ps: with ps; [  ];
+    "python_script" = ps: with ps; [  ];
+    "qwikswitch" = ps: with ps; [  ];
+    "rachio" = ps: with ps; [  ];
+    "rainbird" = ps: with ps; [  ];
+    "raincloud" = ps: with ps; [  ];
+    "rainmachine" = ps: with ps; [  ];
+    "rainmachine.config_flow" = ps: with ps; [  ];
+    "rainmachine.const" = ps: with ps; [  ];
+    "raspihats" = ps: with ps; [  ];
+    "recorder" = ps: with ps; [ sqlalchemy ];
+    "recorder.const" = ps: with ps; [  ];
+    "recorder.migration" = ps: with ps; [  ];
+    "recorder.purge" = ps: with ps; [  ];
+    "recorder.util" = ps: with ps; [  ];
+    "remember_the_milk" = ps: with ps; [ httplib2 ];
+    "remote" = ps: with ps; [  ];
+    "remote.apple_tv" = ps: with ps; [  ];
+    "remote.demo" = ps: with ps; [  ];
+    "remote.harmony" = ps: with ps; [  ];
+    "remote.itach" = ps: with ps; [  ];
+    "remote.kira" = ps: with ps; [  ];
+    "remote.xiaomi_miio" = ps: with ps; [ construct ];
+    "rest_command" = ps: with ps; [  ];
+    "rflink" = ps: with ps; [  ];
+    "rfxtrx" = ps: with ps; [  ];
+    "ring" = ps: with ps; [  ];
+    "route53" = ps: with ps; [ boto3 ];
+    "rpi_gpio" = ps: with ps; [  ];
+    "rpi_pfio" = ps: with ps; [  ];
+    "rss_feed_template" = ps: with ps; [ aiohttp-cors ];
+    "sabnzbd" = ps: with ps; [  ];
+    "satel_integra" = ps: with ps; [  ];
+    "scene" = ps: with ps; [  ];
+    "scene.deconz" = ps: with ps; [  ];
+    "scene.elkm1" = ps: with ps; [  ];
+    "scene.fibaro" = ps: with ps; [  ];
+    "scene.homeassistant" = ps: with ps; [  ];
+    "scene.hunterdouglas_powerview" = ps: with ps; [  ];
+    "scene.knx" = ps: with ps; [  ];
+    "scene.lifx_cloud" = ps: with ps; [  ];
+    "scene.litejet" = ps: with ps; [  ];
+    "scene.lutron_caseta" = ps: with ps; [  ];
+    "scene.tahoma" = ps: with ps; [  ];
+    "scene.tuya" = ps: with ps; [  ];
+    "scene.velux" = ps: with ps; [  ];
+    "scene.vera" = ps: with ps; [  ];
+    "scene.wink" = ps: with ps; [  ];
+    "script" = ps: with ps; [  ];
+    "scsgate" = ps: with ps; [  ];
+    "sense" = ps: with ps; [  ];
+    "sensor" = ps: with ps; [  ];
+    "sensor.abode" = ps: with ps; [  ];
+    "sensor.ads" = ps: with ps; [  ];
+    "sensor.airvisual" = ps: with ps; [ pyairvisual ];
+    "sensor.alarmdecoder" = ps: with ps; [  ];
+    "sensor.alpha_vantage" = ps: with ps; [  ];
+    "sensor.amcrest" = ps: with ps; [ ha-ffmpeg ];
+    "sensor.android_ip_webcam" = ps: with ps; [  ];
+    "sensor.apcupsd" = ps: with ps; [  ];
+    "sensor.api_streams" = ps: with ps; [  ];
+    "sensor.aqualogic" = ps: with ps; [  ];
+    "sensor.arduino" = ps: with ps; [  ];
+    "sensor.arest" = ps: with ps; [  ];
+    "sensor.arlo" = ps: with ps; [  ];
+    "sensor.arwn" = ps: with ps; [ paho-mqtt ];
+    "sensor.asuswrt" = ps: with ps; [  ];
+    "sensor.awair" = ps: with ps; [  ];
+    "sensor.bbox" = ps: with ps; [  ];
+    "sensor.bh1750" = ps: with ps; [  ];
+    "sensor.bitcoin" = ps: with ps; [  ];
+    "sensor.blink" = ps: with ps; [  ];
+    "sensor.blockchain" = ps: with ps; [  ];
+    "sensor.bloomsky" = ps: with ps; [  ];
+    "sensor.bme280" = ps: with ps; [  ];
+    "sensor.bme680" = ps: with ps; [  ];
+    "sensor.bmw_connected_drive" = ps: with ps; [  ];
+    "sensor.bom" = ps: with ps; [  ];
+    "sensor.broadlink" = ps: with ps; [ broadlink ];
+    "sensor.buienradar" = ps: with ps; [  ];
+    "sensor.canary" = ps: with ps; [  ];
+    "sensor.cert_expiry" = ps: with ps; [  ];
+    "sensor.citybikes" = ps: with ps; [  ];
+    "sensor.coinbase" = ps: with ps; [  ];
+    "sensor.coinmarketcap" = ps: with ps; [ coinmarketcap ];
+    "sensor.comed_hourly_pricing" = ps: with ps; [  ];
+    "sensor.comfoconnect" = ps: with ps; [  ];
+    "sensor.command_line" = ps: with ps; [  ];
+    "sensor.cpuspeed" = ps: with ps; [ py-cpuinfo ];
+    "sensor.crimereports" = ps: with ps; [  ];
+    "sensor.cups" = ps: with ps; [ pycups ];
+    "sensor.currencylayer" = ps: with ps; [  ];
+    "sensor.daikin" = ps: with ps; [  ];
+    "sensor.darksky" = ps: with ps; [ python-forecastio ];
+    "sensor.deconz" = ps: with ps; [  ];
+    "sensor.deluge" = ps: with ps; [ deluge-client ];
+    "sensor.demo" = ps: with ps; [  ];
+    "sensor.deutsche_bahn" = ps: with ps; [  ];
+    "sensor.dht" = ps: with ps; [  ];
+    "sensor.discogs" = ps: with ps; [ discogs_client ];
+    "sensor.dnsip" = ps: with ps; [ aiodns ];
+    "sensor.dovado" = ps: with ps; [  ];
+    "sensor.dsmr" = ps: with ps; [  ];
+    "sensor.dte_energy_bridge" = ps: with ps; [  ];
+    "sensor.dublin_bus_transport" = ps: with ps; [  ];
+    "sensor.duke_energy" = ps: with ps; [  ];
+    "sensor.dwd_weather_warnings" = ps: with ps; [  ];
+    "sensor.dweet" = ps: with ps; [  ];
+    "sensor.dyson" = ps: with ps; [  ];
+    "sensor.ebox" = ps: with ps; [  ];
+    "sensor.ecobee" = ps: with ps; [  ];
+    "sensor.eddystone_temperature" = ps: with ps; [ construct ];
+    "sensor.edp_redy" = ps: with ps; [  ];
+    "sensor.efergy" = ps: with ps; [  ];
+    "sensor.eight_sleep" = ps: with ps; [  ];
+    "sensor.eliqonline" = ps: with ps; [  ];
+    "sensor.elkm1" = ps: with ps; [  ];
+    "sensor.emoncms" = ps: with ps; [  ];
+    "sensor.enocean" = ps: with ps; [  ];
+    "sensor.enphase_envoy" = ps: with ps; [  ];
+    "sensor.entur_public_transport" = ps: with ps; [  ];
+    "sensor.envirophat" = ps: with ps; [  ];
+    "sensor.envisalink" = ps: with ps; [  ];
+    "sensor.etherscan" = ps: with ps; [  ];
+    "sensor.fail2ban" = ps: with ps; [  ];
+    "sensor.fastdotcom" = ps: with ps; [  ];
+    "sensor.fedex" = ps: with ps; [  ];
+    "sensor.fibaro" = ps: with ps; [  ];
+    "sensor.fido" = ps: with ps; [  ];
+    "sensor.file" = ps: with ps; [  ];
+    "sensor.filesize" = ps: with ps; [  ];
+    "sensor.filter" = ps: with ps; [  ];
+    "sensor.fints" = ps: with ps; [  ];
+    "sensor.fitbit" = ps: with ps; [ aiohttp-cors ];
+    "sensor.fixer" = ps: with ps; [  ];
+    "sensor.flunearyou" = ps: with ps; [  ];
+    "sensor.folder" = ps: with ps; [  ];
+    "sensor.foobot" = ps: with ps; [  ];
+    "sensor.fritzbox_callmonitor" = ps: with ps; [ fritzconnection ];
+    "sensor.fritzbox_netmonitor" = ps: with ps; [ fritzconnection ];
+    "sensor.gearbest" = ps: with ps; [  ];
+    "sensor.geizhals" = ps: with ps; [  ];
+    "sensor.geo_rss_events" = ps: with ps; [  ];
+    "sensor.gitlab_ci" = ps: with ps; [ python-gitlab ];
+    "sensor.gitter" = ps: with ps; [  ];
+    "sensor.glances" = ps: with ps; [  ];
+    "sensor.google_travel_time" = ps: with ps; [  ];
+    "sensor.google_wifi" = ps: with ps; [  ];
+    "sensor.gpsd" = ps: with ps; [  ];
+    "sensor.greeneye_monitor" = ps: with ps; [  ];
+    "sensor.gtfs" = ps: with ps; [  ];
+    "sensor.habitica" = ps: with ps; [  ];
+    "sensor.haveibeenpwned" = ps: with ps; [  ];
+    "sensor.hddtemp" = ps: with ps; [  ];
+    "sensor.history_stats" = ps: with ps; [ aiohttp-cors sqlalchemy ];
+    "sensor.hive" = ps: with ps; [  ];
+    "sensor.homematic" = ps: with ps; [ pyhomematic ];
+    "sensor.homematicip_cloud" = ps: with ps; [  ];
+    "sensor.hp_ilo" = ps: with ps; [  ];
+    "sensor.htu21d" = ps: with ps; [  ];
+    "sensor.huawei_lte" = ps: with ps; [  ];
+    "sensor.hydrawise" = ps: with ps; [  ];
+    "sensor.hydroquebec" = ps: with ps; [  ];
+    "sensor.ihc" = ps: with ps; [  ];
+    "sensor.imap" = ps: with ps; [ aioimaplib ];
+    "sensor.imap_email_content" = ps: with ps; [  ];
+    "sensor.influxdb" = ps: with ps; [ influxdb ];
+    "sensor.insteon" = ps: with ps; [  ];
+    "sensor.ios" = ps: with ps; [ aiohttp-cors zeroconf ];
+    "sensor.iota" = ps: with ps; [  ];
+    "sensor.iperf3" = ps: with ps; [  ];
+    "sensor.irish_rail_transport" = ps: with ps; [  ];
+    "sensor.isy994" = ps: with ps; [  ];
+    "sensor.jewish_calendar" = ps: with ps; [  ];
+    "sensor.juicenet" = ps: with ps; [  ];
+    "sensor.kira" = ps: with ps; [  ];
+    "sensor.knx" = ps: with ps; [  ];
+    "sensor.kwb" = ps: with ps; [  ];
+    "sensor.lacrosse" = ps: with ps; [  ];
+    "sensor.lastfm" = ps: with ps; [ pylast ];
+    "sensor.launch_library" = ps: with ps; [  ];
+    "sensor.linky" = ps: with ps; [  ];
+    "sensor.linux_battery" = ps: with ps; [ batinfo ];
+    "sensor.logi_circle" = ps: with ps; [  ];
+    "sensor.london_air" = ps: with ps; [  ];
+    "sensor.london_underground" = ps: with ps; [  ];
+    "sensor.loopenergy" = ps: with ps; [  ];
+    "sensor.luftdaten" = ps: with ps; [ luftdaten ];
+    "sensor.lyft" = ps: with ps; [  ];
+    "sensor.magicseaweed" = ps: with ps; [  ];
+    "sensor.meteo_france" = ps: with ps; [  ];
+    "sensor.metoffice" = ps: with ps; [  ];
+    "sensor.mfi" = ps: with ps; [  ];
+    "sensor.mhz19" = ps: with ps; [  ];
+    "sensor.miflora" = ps: with ps; [  ];
+    "sensor.min_max" = ps: with ps; [  ];
+    "sensor.mitemp_bt" = ps: with ps; [  ];
+    "sensor.modbus" = ps: with ps; [  ];
+    "sensor.modem_callerid" = ps: with ps; [  ];
+    "sensor.mold_indicator" = ps: with ps; [  ];
+    "sensor.moon" = ps: with ps; [  ];
+    "sensor.mopar" = ps: with ps; [  ];
+    "sensor.mqtt" = ps: with ps; [ paho-mqtt ];
+    "sensor.mqtt_room" = ps: with ps; [ paho-mqtt ];
+    "sensor.mvglive" = ps: with ps; [ PyMVGLive ];
+    "sensor.mychevy" = ps: with ps; [  ];
+    "sensor.mysensors" = ps: with ps; [  ];
+    "sensor.nederlandse_spoorwegen" = ps: with ps; [  ];
+    "sensor.nest" = ps: with ps; [  ];
+    "sensor.netatmo" = ps: with ps; [  ];
+    "sensor.netatmo_public" = ps: with ps; [  ];
+    "sensor.netdata" = ps: with ps; [  ];
+    "sensor.netgear_lte" = ps: with ps; [  ];
+    "sensor.neurio_energy" = ps: with ps; [  ];
+    "sensor.noaa_tides" = ps: with ps; [  ];
+    "sensor.nsw_fuel_station" = ps: with ps; [  ];
+    "sensor.nut" = ps: with ps; [  ];
+    "sensor.nzbget" = ps: with ps; [  ];
+    "sensor.octoprint" = ps: with ps; [  ];
+    "sensor.ohmconnect" = ps: with ps; [  ];
+    "sensor.onewire" = ps: with ps; [  ];
+    "sensor.openevse" = ps: with ps; [  ];
+    "sensor.openexchangerates" = ps: with ps; [  ];
+    "sensor.openhardwaremonitor" = ps: with ps; [  ];
+    "sensor.opensky" = ps: with ps; [  ];
+    "sensor.opentherm_gw" = ps: with ps; [  ];
+    "sensor.openuv" = ps: with ps; [  ];
+    "sensor.openweathermap" = ps: with ps; [ pyowm ];
+    "sensor.otp" = ps: with ps; [ pyotp ];
+    "sensor.pi_hole" = ps: with ps; [  ];
+    "sensor.pilight" = ps: with ps; [  ];
+    "sensor.plex" = ps: with ps; [  ];
+    "sensor.pocketcasts" = ps: with ps; [  ];
+    "sensor.point" = ps: with ps; [  ];
+    "sensor.pollen" = ps: with ps; [ numpy ];
+    "sensor.postnl" = ps: with ps; [  ];
+    "sensor.pushbullet" = ps: with ps; [ pushbullet ];
+    "sensor.pvoutput" = ps: with ps; [  ];
+    "sensor.pyload" = ps: with ps; [  ];
+    "sensor.qbittorrent" = ps: with ps; [  ];
+    "sensor.qnap" = ps: with ps; [  ];
+    "sensor.qwikswitch" = ps: with ps; [  ];
+    "sensor.radarr" = ps: with ps; [  ];
+    "sensor.rainbird" = ps: with ps; [  ];
+    "sensor.raincloud" = ps: with ps; [  ];
+    "sensor.rainmachine" = ps: with ps; [  ];
+    "sensor.random" = ps: with ps; [  ];
+    "sensor.rest" = ps: with ps; [  ];
+    "sensor.rflink" = ps: with ps; [  ];
+    "sensor.rfxtrx" = ps: with ps; [  ];
+    "sensor.ring" = ps: with ps; [  ];
+    "sensor.ripple" = ps: with ps; [  ];
+    "sensor.rmvtransport" = ps: with ps; [  ];
+    "sensor.rtorrent" = ps: with ps; [  ];
+    "sensor.ruter" = ps: with ps; [  ];
+    "sensor.sabnzbd" = ps: with ps; [  ];
+    "sensor.scrape" = ps: with ps; [ beautifulsoup4 ];
+    "sensor.season" = ps: with ps; [ ephem ];
+    "sensor.sense" = ps: with ps; [  ];
+    "sensor.sensehat" = ps: with ps; [  ];
+    "sensor.serial" = ps: with ps; [  ];
+    "sensor.serial_pm" = ps: with ps; [  ];
+    "sensor.seventeentrack" = ps: with ps; [  ];
+    "sensor.shodan" = ps: with ps; [  ];
+    "sensor.sht31" = ps: with ps; [  ];
+    "sensor.sigfox" = ps: with ps; [  ];
+    "sensor.simulated" = ps: with ps; [  ];
+    "sensor.skybeacon" = ps: with ps; [  ];
+    "sensor.skybell" = ps: with ps; [  ];
+    "sensor.sleepiq" = ps: with ps; [  ];
+    "sensor.sma" = ps: with ps; [  ];
+    "sensor.smappee" = ps: with ps; [  ];
+    "sensor.snmp" = ps: with ps; [ pysnmp ];
+    "sensor.sochain" = ps: with ps; [  ];
+    "sensor.socialblade" = ps: with ps; [  ];
+    "sensor.sonarr" = ps: with ps; [  ];
+    "sensor.speedtest" = ps: with ps; [ speedtest-cli ];
+    "sensor.spotcrime" = ps: with ps; [  ];
+    "sensor.sql" = ps: with ps; [ sqlalchemy ];
+    "sensor.srp_energy" = ps: with ps; [  ];
+    "sensor.starlingbank" = ps: with ps; [  ];
+    "sensor.startca" = ps: with ps; [ xmltodict ];
+    "sensor.statistics" = ps: with ps; [  ];
+    "sensor.steam_online" = ps: with ps; [  ];
+    "sensor.supervisord" = ps: with ps; [  ];
+    "sensor.swiss_hydrological_data" = ps: with ps; [  ];
+    "sensor.swiss_public_transport" = ps: with ps; [  ];
+    "sensor.syncthru" = ps: with ps; [  ];
+    "sensor.synologydsm" = ps: with ps; [  ];
+    "sensor.systemmonitor" = ps: with ps; [ psutil ];
+    "sensor.sytadin" = ps: with ps; [ beautifulsoup4 ];
+    "sensor.tado" = ps: with ps; [  ];
+    "sensor.tahoma" = ps: with ps; [  ];
+    "sensor.tank_utility" = ps: with ps; [  ];
+    "sensor.tautulli" = ps: with ps; [  ];
+    "sensor.tcp" = ps: with ps; [  ];
+    "sensor.ted5000" = ps: with ps; [ xmltodict ];
+    "sensor.teksavvy" = ps: with ps; [  ];
+    "sensor.tellduslive" = ps: with ps; [  ];
+    "sensor.tellstick" = ps: with ps; [  ];
+    "sensor.temper" = ps: with ps; [  ];
+    "sensor.template" = ps: with ps; [  ];
+    "sensor.tesla" = ps: with ps; [  ];
+    "sensor.thermoworks_smoke" = ps: with ps; [  ];
+    "sensor.thethingsnetwork" = ps: with ps; [  ];
+    "sensor.thinkingcleaner" = ps: with ps; [  ];
+    "sensor.tibber" = ps: with ps; [  ];
+    "sensor.time_date" = ps: with ps; [  ];
+    "sensor.toon" = ps: with ps; [  ];
+    "sensor.torque" = ps: with ps; [ aiohttp-cors ];
+    "sensor.tradfri" = ps: with ps; [  ];
+    "sensor.trafikverket_weatherstation" = ps: with ps; [  ];
+    "sensor.transmission" = ps: with ps; [ transmissionrpc ];
+    "sensor.transport_nsw" = ps: with ps; [  ];
+    "sensor.travisci" = ps: with ps; [  ];
+    "sensor.twitch" = ps: with ps; [  ];
+    "sensor.uber" = ps: with ps; [  ];
+    "sensor.uk_transport" = ps: with ps; [  ];
+    "sensor.upnp" = ps: with ps; [  ];
+    "sensor.ups" = ps: with ps; [  ];
+    "sensor.uptime" = ps: with ps; [  ];
+    "sensor.uscis" = ps: with ps; [  ];
+    "sensor.usps" = ps: with ps; [  ];
+    "sensor.vasttrafik" = ps: with ps; [  ];
+    "sensor.velbus" = ps: with ps; [  ];
+    "sensor.vera" = ps: with ps; [  ];
+    "sensor.verisure" = ps: with ps; [  ];
+    "sensor.version" = ps: with ps; [  ];
+    "sensor.viaggiatreno" = ps: with ps; [  ];
+    "sensor.volkszaehler" = ps: with ps; [  ];
+    "sensor.volvooncall" = ps: with ps; [  ];
+    "sensor.vultr" = ps: with ps; [ vultr ];
+    "sensor.waqi" = ps: with ps; [  ];
+    "sensor.waterfurnace" = ps: with ps; [  ];
+    "sensor.waze_travel_time" = ps: with ps; [ WazeRouteCalculator ];
+    "sensor.whois" = ps: with ps; [  ];
+    "sensor.wink" = ps: with ps; [  ];
+    "sensor.wirelesstag" = ps: with ps; [  ];
+    "sensor.worldclock" = ps: with ps; [  ];
+    "sensor.worldtidesinfo" = ps: with ps; [  ];
+    "sensor.worxlandroid" = ps: with ps; [  ];
+    "sensor.wsdot" = ps: with ps; [  ];
+    "sensor.wunderground" = ps: with ps; [  ];
+    "sensor.xbox_live" = ps: with ps; [  ];
+    "sensor.xiaomi_aqara" = ps: with ps; [  ];
+    "sensor.xiaomi_miio" = ps: with ps; [ construct ];
+    "sensor.yr" = ps: with ps; [ xmltodict ];
+    "sensor.yweather" = ps: with ps; [ yahooweather ];
+    "sensor.zabbix" = ps: with ps; [  ];
+    "sensor.zamg" = ps: with ps; [  ];
+    "sensor.zestimate" = ps: with ps; [ xmltodict ];
+    "sensor.zha" = ps: with ps; [  ];
+    "sensor.zigbee" = ps: with ps; [  ];
+    "sensor.zoneminder" = ps: with ps; [  ];
+    "sensor.zwave" = ps: with ps; [  ];
+    "shell_command" = ps: with ps; [  ];
+    "shiftr" = ps: with ps; [ paho-mqtt ];
+    "shopping_list" = ps: with ps; [ aiohttp-cors ];
+    "simplisafe" = ps: with ps; [  ];
+    "simplisafe.config_flow" = ps: with ps; [  ];
+    "simplisafe.const" = ps: with ps; [  ];
+    "sisyphus" = ps: with ps; [  ];
+    "skybell" = ps: with ps; [  ];
+    "sleepiq" = ps: with ps; [  ];
+    "smappee" = ps: with ps; [  ];
+    "smhi" = ps: with ps; [  ];
+    "smhi.config_flow" = ps: with ps; [  ];
+    "smhi.const" = ps: with ps; [  ];
+    "snips" = ps: with ps; [ paho-mqtt ];
+    "sonos" = ps: with ps; [  ];
+    "spaceapi" = ps: with ps; [ aiohttp-cors ];
+    "spc" = ps: with ps; [  ];
+    "spider" = ps: with ps; [  ];
+    "splunk" = ps: with ps; [  ];
+    "statsd" = ps: with ps; [ statsd ];
+    "sun" = ps: with ps; [  ];
+    "switch" = ps: with ps; [  ];
+    "switch.abode" = ps: with ps; [  ];
+    "switch.acer_projector" = ps: with ps; [ pyserial ];
+    "switch.ads" = ps: with ps; [  ];
+    "switch.amcrest" = ps: with ps; [ ha-ffmpeg ];
+    "switch.android_ip_webcam" = ps: with ps; [  ];
+    "switch.anel_pwrctrl" = ps: with ps; [  ];
+    "switch.aqualogic" = ps: with ps; [  ];
+    "switch.arduino" = ps: with ps; [  ];
+    "switch.arest" = ps: with ps; [  ];
+    "switch.bbb_gpio" = ps: with ps; [  ];
+    "switch.broadlink" = ps: with ps; [ broadlink ];
+    "switch.command_line" = ps: with ps; [  ];
+    "switch.deconz" = ps: with ps; [  ];
+    "switch.deluge" = ps: with ps; [ deluge-client ];
+    "switch.demo" = ps: with ps; [  ];
+    "switch.digital_ocean" = ps: with ps; [ digital-ocean ];
+    "switch.digitalloggers" = ps: with ps; [  ];
+    "switch.dlink" = ps: with ps; [  ];
+    "switch.doorbird" = ps: with ps; [  ];
+    "switch.edimax" = ps: with ps; [  ];
+    "switch.edp_redy" = ps: with ps; [  ];
+    "switch.elkm1" = ps: with ps; [  ];
+    "switch.enocean" = ps: with ps; [  ];
+    "switch.eufy" = ps: with ps; [  ];
+    "switch.fibaro" = ps: with ps; [  ];
+    "switch.flux" = ps: with ps; [  ];
+    "switch.fritzbox" = ps: with ps; [  ];
+    "switch.fritzdect" = ps: with ps; [  ];
+    "switch.gc100" = ps: with ps; [  ];
+    "switch.hdmi_cec" = ps: with ps; [  ];
+    "switch.hikvisioncam" = ps: with ps; [  ];
+    "switch.hive" = ps: with ps; [  ];
+    "switch.hlk_sw16" = ps: with ps; [  ];
+    "switch.homekit_controller" = ps: with ps; [  ];
+    "switch.homematic" = ps: with ps; [ pyhomematic ];
+    "switch.homematicip_cloud" = ps: with ps; [  ];
+    "switch.hook" = ps: with ps; [  ];
+    "switch.hydrawise" = ps: with ps; [  ];
+    "switch.ihc" = ps: with ps; [  ];
+    "switch.insteon" = ps: with ps; [  ];
+    "switch.isy994" = ps: with ps; [  ];
+    "switch.kankun" = ps: with ps; [  ];
+    "switch.knx" = ps: with ps; [  ];
+    "switch.konnected" = ps: with ps; [ aiohttp-cors netdisco ];
+    "switch.lightwave" = ps: with ps; [  ];
+    "switch.linode" = ps: with ps; [ linode-api ];
+    "switch.litejet" = ps: with ps; [  ];
+    "switch.lupusec" = ps: with ps; [  ];
+    "switch.lutron_caseta" = ps: with ps; [  ];
+    "switch.mfi" = ps: with ps; [  ];
+    "switch.mochad" = ps: with ps; [  ];
+    "switch.modbus" = ps: with ps; [  ];
+    "switch.mqtt" = ps: with ps; [ paho-mqtt ];
+    "switch.mysensors" = ps: with ps; [  ];
+    "switch.mystrom" = ps: with ps; [  ];
+    "switch.neato" = ps: with ps; [  ];
+    "switch.netio" = ps: with ps; [ aiohttp-cors ];
+    "switch.orvibo" = ps: with ps; [  ];
+    "switch.pilight" = ps: with ps; [  ];
+    "switch.pulseaudio_loopback" = ps: with ps; [  ];
+    "switch.qwikswitch" = ps: with ps; [  ];
+    "switch.rachio" = ps: with ps; [  ];
+    "switch.rainbird" = ps: with ps; [  ];
+    "switch.raincloud" = ps: with ps; [  ];
+    "switch.rainmachine" = ps: with ps; [  ];
+    "switch.raspihats" = ps: with ps; [  ];
+    "switch.recswitch" = ps: with ps; [  ];
+    "switch.rest" = ps: with ps; [  ];
+    "switch.rflink" = ps: with ps; [  ];
+    "switch.rfxtrx" = ps: with ps; [  ];
+    "switch.rpi_gpio" = ps: with ps; [  ];
+    "switch.rpi_pfio" = ps: with ps; [  ];
+    "switch.rpi_rf" = ps: with ps; [  ];
+    "switch.scsgate" = ps: with ps; [  ];
+    "switch.skybell" = ps: with ps; [  ];
+    "switch.smappee" = ps: with ps; [  ];
+    "switch.snmp" = ps: with ps; [ pysnmp ];
+    "switch.spider" = ps: with ps; [  ];
+    "switch.switchbot" = ps: with ps; [  ];
+    "switch.switchmate" = ps: with ps; [  ];
+    "switch.tahoma" = ps: with ps; [  ];
+    "switch.tellduslive" = ps: with ps; [  ];
+    "switch.tellstick" = ps: with ps; [  ];
+    "switch.telnet" = ps: with ps; [  ];
+    "switch.template" = ps: with ps; [  ];
+    "switch.tesla" = ps: with ps; [  ];
+    "switch.thinkingcleaner" = ps: with ps; [  ];
+    "switch.toon" = ps: with ps; [  ];
+    "switch.tplink" = ps: with ps; [  ];
+    "switch.tradfri" = ps: with ps; [  ];
+    "switch.transmission" = ps: with ps; [ transmissionrpc ];
+    "switch.tuya" = ps: with ps; [  ];
+    "switch.unifi" = ps: with ps; [  ];
+    "switch.upcloud" = ps: with ps; [  ];
+    "switch.velbus" = ps: with ps; [  ];
+    "switch.vera" = ps: with ps; [  ];
+    "switch.verisure" = ps: with ps; [  ];
+    "switch.vesync" = ps: with ps; [  ];
+    "switch.volvooncall" = ps: with ps; [  ];
+    "switch.vultr" = ps: with ps; [ vultr ];
+    "switch.wake_on_lan" = ps: with ps; [ wakeonlan ];
+    "switch.wemo" = ps: with ps; [  ];
+    "switch.wink" = ps: with ps; [  ];
+    "switch.wirelesstag" = ps: with ps; [  ];
+    "switch.xiaomi_aqara" = ps: with ps; [  ];
+    "switch.xiaomi_miio" = ps: with ps; [ construct ];
+    "switch.zha" = ps: with ps; [  ];
+    "switch.zigbee" = ps: with ps; [  ];
+    "switch.zoneminder" = ps: with ps; [  ];
+    "switch.zwave" = ps: with ps; [  ];
+    "system_log" = ps: with ps; [ aiohttp-cors ];
+    "tado" = ps: with ps; [  ];
+    "tahoma" = ps: with ps; [  ];
+    "telegram_bot" = ps: with ps; [ python-telegram-bot ];
+    "telegram_bot.broadcast" = ps: with ps; [  ];
+    "telegram_bot.polling" = ps: with ps; [  ];
+    "telegram_bot.webhooks" = ps: with ps; [ aiohttp-cors ];
+    "tellduslive" = ps: with ps; [  ];
+    "tellduslive.const" = ps: with ps; [  ];
+    "tellduslive.entry" = ps: with ps; [  ];
+    "tellstick" = ps: with ps; [  ];
+    "tesla" = ps: with ps; [  ];
+    "thethingsnetwork" = ps: with ps; [  ];
+    "thingspeak" = ps: with ps; [  ];
+    "tibber" = ps: with ps; [  ];
+    "timer" = ps: with ps; [  ];
+    "toon" = ps: with ps; [  ];
+    "tplink_lte" = ps: with ps; [  ];
+    "tradfri" = ps: with ps; [  ];
+    "tradfri.config_flow" = ps: with ps; [  ];
+    "tradfri.const" = ps: with ps; [  ];
+    "tts" = ps: with ps; [ aiohttp-cors mutagen ];
+    "tts.amazon_polly" = ps: with ps; [ boto3 ];
+    "tts.baidu" = ps: with ps; [  ];
+    "tts.demo" = ps: with ps; [  ];
+    "tts.google" = ps: with ps; [  ];
+    "tts.marytts" = ps: with ps; [  ];
+    "tts.microsoft" = ps: with ps; [  ];
+    "tts.picotts" = ps: with ps; [  ];
+    "tts.voicerss" = ps: with ps; [  ];
+    "tts.yandextts" = ps: with ps; [  ];
+    "tuya" = ps: with ps; [  ];
+    "twilio" = ps: with ps; [ aiohttp-cors twilio ];
+    "unifi" = ps: with ps; [  ];
+    "unifi.const" = ps: with ps; [  ];
+    "unifi.controller" = ps: with ps; [  ];
+    "unifi.errors" = ps: with ps; [  ];
+    "upcloud" = ps: with ps; [  ];
+    "updater" = ps: with ps; [ distro ];
+    "upnp" = ps: with ps; [  ];
+    "upnp.config_flow" = ps: with ps; [  ];
+    "upnp.const" = ps: with ps; [  ];
+    "upnp.device" = ps: with ps; [  ];
+    "usps" = ps: with ps; [  ];
+    "vacuum" = ps: with ps; [  ];
+    "vacuum.demo" = ps: with ps; [  ];
+    "vacuum.dyson" = ps: with ps; [  ];
+    "vacuum.ecovacs" = ps: with ps; [  ];
+    "vacuum.mqtt" = ps: with ps; [ paho-mqtt ];
+    "vacuum.neato" = ps: with ps; [  ];
+    "vacuum.roomba" = ps: with ps; [  ];
+    "vacuum.xiaomi_miio" = ps: with ps; [ construct ];
+    "velbus" = ps: with ps; [  ];
+    "velux" = ps: with ps; [  ];
+    "vera" = ps: with ps; [  ];
+    "verisure" = ps: with ps; [  ];
+    "volvooncall" = ps: with ps; [  ];
+    "vultr" = ps: with ps; [ vultr ];
+    "w800rf32" = ps: with ps; [  ];
+    "wake_on_lan" = ps: with ps; [ wakeonlan ];
+    "water_heater" = ps: with ps; [  ];
+    "water_heater.demo" = ps: with ps; [  ];
+    "water_heater.econet" = ps: with ps; [  ];
+    "water_heater.wink" = ps: with ps; [  ];
+    "waterfurnace" = ps: with ps; [  ];
+    "watson_iot" = ps: with ps; [  ];
+    "weather" = ps: with ps; [  ];
+    "weather.bom" = ps: with ps; [  ];
+    "weather.buienradar" = ps: with ps; [  ];
+    "weather.darksky" = ps: with ps; [ python-forecastio ];
+    "weather.demo" = ps: with ps; [  ];
+    "weather.ecobee" = ps: with ps; [  ];
+    "weather.ipma" = ps: with ps; [  ];
+    "weather.met" = ps: with ps; [  ];
+    "weather.metoffice" = ps: with ps; [  ];
+    "weather.openweathermap" = ps: with ps; [ pyowm ];
+    "weather.smhi" = ps: with ps; [  ];
+    "weather.yweather" = ps: with ps; [ yahooweather ];
+    "weather.zamg" = ps: with ps; [  ];
+    "webhook" = ps: with ps; [ aiohttp-cors ];
+    "weblink" = ps: with ps; [  ];
+    "websocket_api" = ps: with ps; [ aiohttp-cors ];
+    "websocket_api.auth" = ps: with ps; [  ];
+    "websocket_api.commands" = ps: with ps; [  ];
+    "websocket_api.connection" = ps: with ps; [  ];
+    "websocket_api.const" = ps: with ps; [  ];
+    "websocket_api.decorators" = ps: with ps; [  ];
+    "websocket_api.error" = ps: with ps; [  ];
+    "websocket_api.http" = ps: with ps; [  ];
+    "websocket_api.messages" = ps: with ps; [  ];
+    "wemo" = ps: with ps; [  ];
+    "wink" = ps: with ps; [  ];
+    "wirelesstag" = ps: with ps; [  ];
+    "wunderlist" = ps: with ps; [  ];
+    "xiaomi_aqara" = ps: with ps; [  ];
+    "zabbix" = ps: with ps; [  ];
+    "zeroconf" = ps: with ps; [ aiohttp-cors zeroconf ];
+    "zha" = ps: with ps; [  ];
+    "zha.config_flow" = ps: with ps; [  ];
+    "zha.const" = ps: with ps; [  ];
+    "zha.entities" = ps: with ps; [  ];
+    "zha.helpers" = ps: with ps; [  ];
+    "zigbee" = ps: with ps; [  ];
+    "zone" = ps: with ps; [  ];
+    "zone.config_flow" = ps: with ps; [  ];
+    "zone.const" = ps: with ps; [  ];
+    "zone.zone" = ps: with ps; [  ];
+    "zoneminder" = ps: with ps; [  ];
+    "zwave" = ps: with ps; [ homeassistant-pyozw pydispatcher ];
+    "zwave.config_flow" = ps: with ps; [  ];
+    "zwave.const" = ps: with ps; [  ];
+    "zwave.discovery_schemas" = ps: with ps; [  ];
+    "zwave.node_entity" = ps: with ps; [  ];
+    "zwave.util" = ps: with ps; [  ];
+    "zwave.workaround" = ps: with ps; [  ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/home-assistant/default.nix b/nixpkgs/pkgs/servers/home-assistant/default.nix
new file mode 100644
index 000000000000..049a1d5c2931
--- /dev/null
+++ b/nixpkgs/pkgs/servers/home-assistant/default.nix
@@ -0,0 +1,134 @@
+{ lib, fetchFromGitHub, fetchpatch, python3
+
+# Look up dependencies of specified components in component-packages.nix
+, extraComponents ? []
+
+# Additional packages to add to propagatedBuildInputs
+, extraPackages ? ps: []
+
+# Override Python packages using
+# self: super: { pkg = super.pkg.overridePythonAttrs (oldAttrs: { ... }); }
+# Applied after defaultOverrides
+, packageOverrides ? self: super: { }
+
+# Skip pip install of required packages on startup
+, skipPip ? true }:
+
+let
+
+  defaultOverrides = [
+    # Override the version of some packages pinned in Home Assistant's setup.py
+    (mkOverride "aiohttp" "3.4.4"
+      "51afec6ffa50a9da4cdef188971a802beb1ca8e8edb40fa429e5e529db3475fa")
+    (mkOverride "astral" "1.7.1"
+      "88086fd2006c946567285286464b2da3294a3b0cbba4410b7008ec2458f82a07")
+    (mkOverride "async-timeout" "3.0.1"
+      "0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f")
+    (mkOverride "attrs" "18.2.0"
+      "10cbf6e27dbce8c30807caf056c8eb50917e0eaafe86347671b57254006c3e69")
+    (mkOverride "bcrypt" "3.1.4"
+      "67ed1a374c9155ec0840214ce804616de49c3df9c5bc66740687c1c9b1cd9e8d")
+    (mkOverride "pyjwt" "1.6.4"
+      "4ee413b357d53fd3fb44704577afac88e72e878716116270d722723d65b42176")
+    (mkOverride "cryptography" "2.3.1"
+      "8d10113ca826a4c29d5b85b2c4e045ffa8bad74fb525ee0eceb1d38d4c70dfd6")
+    (mkOverride "cryptography_vectors" "2.3.1" # required by cryptography==2.3.1
+      "bf4d9b61dce69c49e830950aa36fad194706463b0b6dfe81425b9e0bc6644d46")
+    (mkOverride "requests" "2.20.1"
+      "ea881206e59f41dbd0bd445437d792e43906703fff75ca8ff43ccdb11f33f263")
+    (mkOverride "ruamel_yaml" "0.15.80"
+      "4f203351575dba0829c7b1e5d376d08cf5f58e4a2b844e8ce552b3e41cd414e6")
+    (mkOverride "voluptuous" "0.11.5"
+      "567a56286ef82a9d7ae0628c5842f65f516abcb496e74f3f59f1d7b28df314ef")
+    (mkOverride "voluptuous-serialize" "2.0.0"
+      "44be04d87aec34bd7d31ab539341fadc505205f2299031ed9be985112c21aa41")
+
+    # used by auth.mfa_modules.totp
+    (mkOverride "pyotp" "2.2.6"
+      "dd9130dd91a0340d89a0f06f887dbd76dd07fb95a8886dc4bc401239f2eebd69")
+
+    # used by check_config script
+    # can be unpinned once https://github.com/home-assistant/home-assistant/issues/11917 is resolved
+    (mkOverride "colorlog" "3.1.4"
+      "418db638c9577f37f0fae4914074f395847a728158a011be2a193ac491b9779d")
+
+    # hass-frontend does not exist in python3.pkgs
+    (self: super: {
+      hass-frontend = self.callPackage ./frontend.nix { };
+    })
+  ];
+
+  mkOverride = attrname: version: sha256:
+    self: super: {
+      ${attrname} = super.${attrname}.overridePythonAttrs (oldAttrs: {
+        inherit version;
+        src = oldAttrs.src.override {
+          inherit version sha256;
+        };
+      });
+    };
+    
+  py = python3.override {
+    # Put packageOverrides at the start so they are applied after defaultOverrides
+    packageOverrides = lib.foldr lib.composeExtensions (self: super: { }) ([ packageOverrides ] ++ defaultOverrides);
+  };
+
+  componentPackages = import ./component-packages.nix;
+
+  availableComponents = builtins.attrNames componentPackages.components;
+
+  getPackages = component: builtins.getAttr component componentPackages.components;
+
+  componentBuildInputs = lib.concatMap (component: getPackages component py.pkgs) extraComponents;
+
+  # Ensure that we are using a consistent package set
+  extraBuildInputs = extraPackages py.pkgs;
+
+  # Don't forget to run parse-requirements.py after updating
+  hassVersion = "0.84.6";
+
+in with py.pkgs; buildPythonApplication rec {
+  pname = "homeassistant";
+  version = assert (componentPackages.version == hassVersion); hassVersion;
+
+  disabled = pythonOlder "3.5";
+
+  inherit availableComponents;
+
+  # PyPI tarball is missing tests/ directory
+  src = fetchFromGitHub {
+    owner = "home-assistant";
+    repo = "home-assistant";
+    rev = version;
+    sha256 = "142hxsvhb9lh77h54975vkvl1fx5lslrydq1vbqyy51dy85ms8lc";
+  };
+
+  propagatedBuildInputs = [
+    # From setup.py
+    aiohttp astral async-timeout attrs bcrypt certifi jinja2 pyjwt cryptography pip pytz pyyaml requests ruamel_yaml voluptuous voluptuous-serialize
+    # From http, frontend and recorder components and auth.mfa_modules.totp
+    sqlalchemy aiohttp-cors hass-frontend pyotp pyqrcode
+  ] ++ componentBuildInputs ++ extraBuildInputs;
+
+  checkInputs = [
+    asynctest pytest pytest-aiohttp requests-mock pydispatcher
+  ];
+
+  checkPhase = ''
+    # The components' dependencies are not included, so they cannot be tested
+    py.test --ignore tests/components
+    # Some basic components should be tested however
+    py.test \
+      tests/components/{group,http,frontend,config,websocket_api} \
+      tests/components/test_{api,configurator,demo,discovery,init,introduction,logger,script,shell_command,system_log}.py
+  '';
+
+  makeWrapperArgs = lib.optional skipPip "--add-flags --skip-pip";
+
+  meta = with lib; {
+    homepage = https://home-assistant.io/;
+    description = "Open-source home automation platform running on Python 3";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ f-breidenstein dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/home-assistant/frontend.nix b/nixpkgs/pkgs/servers/home-assistant/frontend.nix
new file mode 100644
index 000000000000..74145d87589b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/home-assistant/frontend.nix
@@ -0,0 +1,20 @@
+{ lib, fetchPypi, buildPythonPackage, user-agents }:
+
+buildPythonPackage rec {
+  pname = "home-assistant-frontend";
+  version = "20181211.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "75dd525922efc1f9a6a4a42c720764a539b18636769e2febc33bb68967c7ebff";
+  };
+
+  propagatedBuildInputs = [ user-agents ];
+
+  meta = with lib; {
+    description = "Polymer frontend for Home Assistant";
+    homepage = https://github.com/home-assistant/home-assistant-polymer;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/home-assistant/parse-requirements.py b/nixpkgs/pkgs/servers/home-assistant/parse-requirements.py
new file mode 100755
index 000000000000..63374b017956
--- /dev/null
+++ b/nixpkgs/pkgs/servers/home-assistant/parse-requirements.py
@@ -0,0 +1,131 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i python3 -p "python3.withPackages (ps: with ps; [ aiohttp astral async-timeout attrs certifi jinja2 pyjwt cryptography pip pytz pyyaml requests ruamel_yaml voluptuous ])"
+#
+# This script downloads Home Assistant's source tarball.
+# Inside the homeassistant/components directory, each component has an associated .py file,
+# specifying required packages and other components it depends on:
+#
+# REQUIREMENTS = [ 'package==1.2.3' ]
+# DEPENDENCIES = [ 'component' ]
+#
+# By parsing the files, a dictionary mapping component to requirements and dependencies is created.
+# For all of these requirements and the dependencies' requirements,
+# Nixpkgs' python3Packages are searched for appropriate names.
+# Then, a Nix attribute set mapping component name to dependencies is created.
+
+from urllib.request import urlopen
+import tempfile
+from io import BytesIO
+import tarfile
+import importlib
+import subprocess
+import os
+import sys
+import json
+import re
+
+COMPONENT_PREFIX = 'homeassistant.components'
+PKG_SET = 'python3Packages'
+
+# If some requirements are matched by multiple python packages,
+# the following can be used to choose one of them
+PKG_PREFERENCES = {
+    # Use python3Packages.youtube-dl-light instead of python3Packages.youtube-dl
+    'youtube-dl': 'youtube-dl-light'
+}
+
+def get_version():
+    with open(os.path.dirname(sys.argv[0]) + '/default.nix') as f:
+        m = re.search('hassVersion = "([\\d\\.]+)";', f.read())
+        return m.group(1)
+
+def parse_components(version='master'):
+    components = {}
+    with tempfile.TemporaryDirectory() as tmp:
+        with urlopen('https://github.com/home-assistant/home-assistant/archive/{}.tar.gz'.format(version)) as response:
+            tarfile.open(fileobj=BytesIO(response.read())).extractall(tmp)
+        # Use part of a script from the Home Assistant codebase
+        sys.path.append(tmp + '/home-assistant-{}'.format(version))
+        from script.gen_requirements_all import explore_module
+        for package in explore_module(COMPONENT_PREFIX, True):
+            # Remove 'homeassistant.components.' prefix
+            component = package[len(COMPONENT_PREFIX + '.'):]
+            try:
+                module = importlib.import_module(package)
+                components[component] = {}
+                components[component]['requirements'] = getattr(module, 'REQUIREMENTS', [])
+                components[component]['dependencies'] = getattr(module, 'DEPENDENCIES', [])
+            # If there is an ImportError, the imported file is not the main file of the component
+            except ImportError:
+                continue
+    return components
+
+# Recursively get the requirements of a component and its dependencies
+def get_reqs(components, component):
+    requirements = set(components[component]['requirements'])
+    for dependency in components[component]['dependencies']:
+        requirements.update(get_reqs(components, dependency))
+    return requirements
+
+# Store a JSON dump of Nixpkgs' python3Packages
+output = subprocess.check_output(['nix-env', '-f', os.path.dirname(sys.argv[0]) + '/../../..', '-qa', '-A', PKG_SET, '--json'])
+packages = json.loads(output)
+
+def name_to_attr_path(req):
+    attr_paths = set()
+    names = [req]
+    # E.g. python-mpd2 is actually called python3.6-mpd2
+    # instead of python-3.6-python-mpd2 inside Nixpkgs
+    if req.startswith('python-') or req.startswith('python_'):
+        names.append(req[len('python-'):])
+    for name in names:
+        # treat "-" and "_" equally
+        name = re.sub('[-_]', '[-_]', name)
+        pattern = re.compile('^python\\d\\.\\d-{}-\\d'.format(name), re.I)
+        for attr_path, package in packages.items():
+            if pattern.match(package['name']):
+                attr_paths.add(attr_path)
+    if len(attr_paths) > 1:
+        for to_replace, replacement in PKG_PREFERENCES.items():
+            try:
+                attr_paths.remove(PKG_SET + '.' + to_replace)
+                attr_paths.add(PKG_SET + '.' + replacement)
+            except KeyError:
+                pass
+    # Let's hope there's only one derivation with a matching name
+    assert len(attr_paths) <= 1, "{} matches more than one derivation: {}".format(req, attr_paths)
+    if len(attr_paths) == 1:
+        return attr_paths.pop()
+    else:
+        return None
+
+version = get_version()
+print('Generating component-packages.nix for version {}'.format(version))
+components = parse_components(version=version)
+build_inputs = {}
+for component in sorted(components.keys()):
+    attr_paths = []
+    for req in sorted(get_reqs(components, component)):
+        # Some requirements are specified by url, e.g. https://example.org/foobar#xyz==1.0.0
+        # Therefore, if there's a "#" in the line, only take the part after it
+        req = req[req.find('#') + 1:]
+        name = req.split('==')[0]
+        attr_path = name_to_attr_path(name)
+        if attr_path is not None:
+            # Add attribute path without "python3Packages." prefix
+            attr_paths.append(attr_path[len(PKG_SET + '.'):])
+    else:
+        build_inputs[component] = attr_paths
+
+with open(os.path.dirname(sys.argv[0]) + '/component-packages.nix', 'w') as f:
+    f.write('# Generated by parse-requirements.py\n')
+    f.write('# Do not edit!\n\n')
+    f.write('{\n')
+    f.write('  version = "{}";\n'.format(version))
+    f.write('  components = {\n')
+    for component, attr_paths in build_inputs.items():
+        f.write('    "{}" = ps: with ps; [ '.format(component))
+        f.write(' '.join(attr_paths))
+        f.write(' ];\n')
+    f.write('  };\n')
+    f.write('}\n')
diff --git a/nixpkgs/pkgs/servers/http/4store/4store-1.1.6-glibc-2.26.patch b/nixpkgs/pkgs/servers/http/4store/4store-1.1.6-glibc-2.26.patch
new file mode 100644
index 000000000000..dda21c54f693
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/4store/4store-1.1.6-glibc-2.26.patch
@@ -0,0 +1,12 @@
+diff --git a/src/frontend/filter-datatypes.c b/src/frontend/filter-datatypes.c
+index 8aae1dd..49ed358 100644
+--- a/src/frontend/filter-datatypes.c
++++ b/src/frontend/filter-datatypes.c
+@@ -23,6 +23,7 @@
+ #include <string.h>
+ #include <math.h>
+ #define __USE_MISC
++#define __USE_XOPEN_EXTENDED
+ #include <time.h>
+ 
+ #include "filter.h"
diff --git a/nixpkgs/pkgs/servers/http/4store/default.nix b/nixpkgs/pkgs/servers/http/4store/default.nix
new file mode 100644
index 000000000000..664953ca34dc
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/4store/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchFromGitHub, librdf_raptor
+, librdf_rasqal, glib, libxml2, pcre
+, avahi, readline, ncurses, expat, autoreconfHook
+, zlib, pkgconfig, which, perl, libuuid
+, gmp, mpfr
+, db_dir ? "/var/lib/4store" }:
+
+
+stdenv.mkDerivation rec {
+  name = "4store-${version}";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "4store";
+    repo = "4store";
+    rev = "v${version}";
+    sha256 = "1kzdfmwpzy64cgqlkcz5v4klwx99w0jk7afckyf7yqbqb4rydmpk";
+  };
+
+  patches = [ ./4store-1.1.6-glibc-2.26.patch ];
+
+  nativeBuildInputs = [ autoreconfHook perl pkgconfig which ];
+
+  buildInputs = [ librdf_raptor librdf_rasqal glib libxml2 pcre
+    avahi readline ncurses expat zlib libuuid gmp mpfr ];
+
+  # needed for ./autogen.sh
+  prePatch = ''
+    echo "${version}" > .version
+  '';
+
+  preConfigure =  ''
+    sed -e 's@#! */bin/bash@#! ${stdenv.shell}@' -i configure
+    find . -name Makefile -exec sed -e "s@/usr/local@$out@g" -i '{}' ';'
+
+    rm src/utilities/4s-backend
+    sed -e 's@/var/lib/4store@${db_dir}@g' -i configure.ac src/utilities/*
+    sed -e '/FS_STORE_ROOT/d' -i src/utilities/Makefile*
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "SparQL query server (RDF storage)";
+    homepage = https://4store.danielknoell.de/;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    broken = true; # since 2018-04-11
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/4store/src-for-default.nix b/nixpkgs/pkgs/servers/http/4store/src-for-default.nix
new file mode 100644
index 000000000000..7076b921911e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/4store/src-for-default.nix
@@ -0,0 +1,9 @@
+rec {
+   version="v1.1.5";
+   name="4store-v1.1.5";
+   hash="0nwckvf8xqwvc2h3v6s1rvmxvcx2xrjy6yapghc052180jw6zp9b";
+   url="http://4store.org/download/4store-${version}.tar.gz";
+   advertisedUrl="http://4store.org/download/4store-v1.1.5.tar.gz";
+  
+  
+}
diff --git a/nixpkgs/pkgs/servers/http/4store/src-info-for-default.nix b/nixpkgs/pkgs/servers/http/4store/src-info-for-default.nix
new file mode 100644
index 000000000000..91a9bad92def
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/4store/src-info-for-default.nix
@@ -0,0 +1,6 @@
+{
+  downloadPage = "http://4store.org/download/";
+  baseName = "4store";
+  choiceCommand = "tail -n 1";
+  versionExtractorSedScript = "s@.*-(v[0-9.]+)[.].*@\\1@";
+}
diff --git a/nixpkgs/pkgs/servers/http/apache-httpd/2.4.nix b/nixpkgs/pkgs/servers/http/apache-httpd/2.4.nix
new file mode 100644
index 000000000000..bf82e916590b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/apache-httpd/2.4.nix
@@ -0,0 +1,100 @@
+{ stdenv, fetchurl, perl, zlib, apr, aprutil, pcre, libiconv, lynx
+, proxySupport ? true
+, sslSupport ? true, openssl
+, http2Support ? true, nghttp2
+, ldapSupport ? true, openldap
+, libxml2Support ? true, libxml2
+, brotliSupport ? true, brotli
+, luaSupport ? false, lua5
+}:
+
+let inherit (stdenv.lib) optional optionalString;
+in
+
+assert sslSupport -> aprutil.sslSupport && openssl != null;
+assert ldapSupport -> aprutil.ldapSupport && openldap != null;
+assert http2Support -> nghttp2 != null;
+
+stdenv.mkDerivation rec {
+  version = "2.4.37";
+  name = "apache-httpd-${version}";
+
+  src = fetchurl {
+    url = "mirror://apache/httpd/httpd-${version}.tar.bz2";
+    sha256 = "09npb7vlz5sizgj0nvl0bqxj9zig29ipkp07fgmw5ykjcxfdr61l";
+  };
+
+  # FIXME: -dev depends on -doc
+  outputs = [ "out" "dev" "man" "doc" ];
+  setOutputFlags = false; # it would move $out/modules, etc.
+
+  buildInputs = [perl] ++
+    optional brotliSupport brotli ++
+    optional sslSupport openssl ++
+    optional ldapSupport openldap ++    # there is no --with-ldap flag
+    optional libxml2Support libxml2 ++
+    optional http2Support nghttp2 ++
+    optional stdenv.isDarwin libiconv;
+
+  prePatch = ''
+    sed -i config.layout -e "s|installbuilddir:.*|installbuilddir: $dev/share/build|"
+    sed -i support/apachectl.in -e 's|@LYNX_PATH@|${lynx}/bin/lynx|'
+  '';
+
+  # Required for ‘pthread_cancel’.
+  NIX_LDFLAGS = stdenv.lib.optionalString (!stdenv.isDarwin) "-lgcc_s";
+
+  preConfigure = ''
+    configureFlags="$configureFlags --includedir=$dev/include"
+  '';
+
+  configureFlags = [
+    "--with-apr=${apr.dev}"
+    "--with-apr-util=${aprutil.dev}"
+    "--with-z=${zlib.dev}"
+    "--with-pcre=${pcre.dev}"
+    "--disable-maintainer-mode"
+    "--disable-debugger-mode"
+    "--enable-mods-shared=all"
+    "--enable-mpms-shared=all"
+    "--enable-cern-meta"
+    "--enable-imagemap"
+    "--enable-cgi"
+    (stdenv.lib.enableFeature proxySupport "proxy")
+    (stdenv.lib.enableFeature sslSupport "ssl")
+    (stdenv.lib.withFeatureAs libxml2Support "libxml2" "${libxml2.dev}/include/libxml2")
+    "--docdir=$(doc)/share/doc"
+
+    (stdenv.lib.enableFeature brotliSupport "brotli")
+    (stdenv.lib.withFeatureAs brotliSupport "brotli" brotli)
+
+    (stdenv.lib.enableFeature http2Support "http2")
+    (stdenv.lib.withFeature http2Support "nghttp2")
+
+    (stdenv.lib.enableFeature luaSupport "lua")
+    (stdenv.lib.withFeatureAs luaSupport "lua" lua5)
+  ];
+
+  enableParallelBuilding = true;
+
+  stripDebugList = "lib modules bin";
+
+  postInstall = ''
+    mkdir -p $doc/share/doc/httpd
+    mv $out/manual $doc/share/doc/httpd
+    mkdir -p $dev/bin
+    mv $out/bin/apxs $dev/bin/apxs
+  '';
+
+  passthru = {
+    inherit apr aprutil sslSupport proxySupport ldapSupport;
+  };
+
+  meta = with stdenv.lib; {
+    description = "Apache HTTPD, the world's most popular web server";
+    homepage    = http://httpd.apache.org/;
+    license     = licenses.asl20;
+    platforms   = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+    maintainers = with maintainers; [ lovek323 peti ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/apache-modules/mod_auth_mellon/default.nix b/nixpkgs/pkgs/servers/http/apache-modules/mod_auth_mellon/default.nix
new file mode 100644
index 000000000000..8a773631ee6c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/apache-modules/mod_auth_mellon/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, apacheHttpd, autoconf, automake, autoreconfHook, curl, fetchFromGitHub, glib, lasso, libtool, libxml2, libxslt, openssl, pkgconfig, xmlsec }:
+
+stdenv.mkDerivation rec {
+
+  name = "mod_auth_mellon-${version}";
+  version = "0.13.1";
+
+  src = fetchFromGitHub {
+    owner = "UNINETT";
+    repo = "mod_auth_mellon";
+    rev = "v${version}";
+    sha256 = "16b43y5a5p8g1287x04rv923230cy8dfs2j18cx6208n4bv4dvnk";
+  };
+
+  patches = [
+    ./fixdeps.patch
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ apacheHttpd autoconf automake curl glib lasso libtool libxml2 libxslt openssl xmlsec ];
+
+  configureFlags = ["--with-apxs2=${apacheHttpd.dev}/bin/apxs" "--exec-prefix=$out"];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./mellon_create_metadata.sh $out/bin
+    mkdir -p $out/modules
+    cp ./.libs/mod_auth_mellon.so $out/modules
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/UNINETT/mod_auth_mellon;
+    description = "An Apache module with a simple SAML 2.0 service provider";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ womfoo ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/http/apache-modules/mod_auth_mellon/fixdeps.patch b/nixpkgs/pkgs/servers/http/apache-modules/mod_auth_mellon/fixdeps.patch
new file mode 100644
index 000000000000..63b69fb142f6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/apache-modules/mod_auth_mellon/fixdeps.patch
@@ -0,0 +1,30 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -74,6 +74,16 @@ PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.12])
+ AC_SUBST(GLIB_CFLAGS)
+ AC_SUBST(GLIB_LIBS)
+ 
++#include <libxml/uri.h>
++PKG_CHECK_MODULES(LIBXML2, libxml-2.0)
++AC_SUBST(LIBXML2_CFLAGS)
++AC_SUBST(LIBXML2_LIBS)
++
++#include <xmlsec/xmlenc.h>
++PKG_CHECK_MODULES(XMLSEC, xmlsec1-openssl)
++AC_SUBST(XMLSEC_CFLAGS)
++AC_SUBST(XMLSEC_LIBS)
++
+ # Test to see if we can include lasso/utils.h
+ # AC_CHECK_HEADER won't work correctly unless we specifiy the include directories
+ # found in the LASSO_CFLAGS. Save and restore CFLAGS and CPPFLAGS.
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -25,7 +25,7 @@
+ all:	mod_auth_mellon.la
+ 
+ mod_auth_mellon.la: $(SRC) auth_mellon.h auth_mellon_compat.h
+-	@APXS2@ -Wc,"-std=c99 @OPENSSL_CFLAGS@ @LASSO_CFLAGS@ @CURL_CFLAGS@ @GLIB_CFLAGS@ @CFLAGS@" -Wl,"@OPENSSL_LIBS@ @LASSO_LIBS@ @CURL_LIBS@ @GLIB_LIBS@" -Wc,-Wall -Wc,-g -c $(SRC)
++	@APXS2@ -Wc,"-std=c99 @OPENSSL_CFLAGS@ @LASSO_CFLAGS@ @CURL_CFLAGS@ @GLIB_CFLAGS@ @CFLAGS@ @LIBXML2_CFLAGS@ @XMLSEC_CFLAGS@ @CFLAGS@" -Wl,"@OPENSSL_LIBS@ @LASSO_LIBS@ @CURL_LIBS@ @GLIB_LIBS@ @LIBXML2_LIBS@ @XMLSEC_LIBS@" -Wc,-Wall -Wc,-g -c $(SRC)
+ 
+ 
+ # Building configure (for distribution)
diff --git a/nixpkgs/pkgs/servers/http/apache-modules/mod_dnssd/default.nix b/nixpkgs/pkgs/servers/http/apache-modules/mod_dnssd/default.nix
new file mode 100644
index 000000000000..d681146eee5d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/apache-modules/mod_dnssd/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, fetchpatch, pkgconfig, apacheHttpd, apr, avahi }:
+
+stdenv.mkDerivation rec {
+  name = "mod_dnssd-0.6";
+
+  src = fetchurl {
+    url = "http://0pointer.de/lennart/projects/mod_dnssd/${name}.tar.gz";
+    sha256 = "2cd171d76eba398f03c1d5bcc468a1756f4801cd8ed5bd065086e4374997c5aa";
+  };
+
+  configureFlags = [ "--disable-lynx" ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ apacheHttpd avahi apr ];
+
+  patches = [ (fetchpatch {
+    url = "http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/vivid/mod-dnssd/vivid/download/package-import%40ubuntu.com-20130530193334-kqebiy78q534or5k/portforapache2.4.pat-20130530222510-7tlw5btqchd04edb-3/port-for-apache2.4.patch";
+    sha256 = "1hgcxwy1q8fsxfqyg95w8m45zbvxzskf1jxd87ljj57l7x1wwp4r";
+  }) ];
+
+  installPhase = ''
+    mkdir -p $out/modules
+    cp src/.libs/mod_dnssd.so $out/modules
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://0pointer.de/lennart/projects/mod_dnssd;
+    description = "Provide Zeroconf support via DNS-SD using Avahi";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lethalman ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/apache-modules/mod_evasive/default.nix b/nixpkgs/pkgs/servers/http/apache-modules/mod_evasive/default.nix
new file mode 100644
index 000000000000..2b8693f7379d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/apache-modules/mod_evasive/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, apacheHttpd }:
+
+if lib.versionAtLeast (lib.getVersion apacheHttpd) "2.4" then
+
+  throw "mod_evasive is not supported on Apache httpd 2.4"
+
+else
+
+stdenv.mkDerivation {
+  name = "mod_evasive-1.10.1";
+
+  src = fetchurl {
+    url = http://www.zdziarski.com/blog/wp-content/uploads/2010/02/mod_evasive_1.10.1.tar.gz;
+    sha256 = "0rsnx50rjv6xygbp9r0gyss7xqdkcb0hy3wh9949jf1im8wm3i07";
+  };
+
+  buildInputs = [ apacheHttpd ];
+
+  buildPhase = ''
+    export APACHE_LIBEXECDIR=$out/modules
+    export makeFlagsArray=(APACHE_LIBEXECDIR=$out/modules)
+    apxs -ca mod_evasive20.c
+  '';
+
+  installPhase = ''
+    mkdir -p $out/modules
+    cp .libs/mod_evasive20.so $out/modules
+  '';
+
+  meta = {
+    homepage = http://www.zdziarski.com/blog/?page_id=442;
+    description = "Evasive maneuvers module for Apache to provide evasive action in the event of an HTTP DoS or DDoS attack or brute force attack";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/apache-modules/mod_fastcgi/default.nix b/nixpkgs/pkgs/servers/http/apache-modules/mod_fastcgi/default.nix
new file mode 100644
index 000000000000..647589621029
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/apache-modules/mod_fastcgi/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, apacheHttpd }:
+
+stdenv.mkDerivation rec {
+  name = "mod_fastcgi-2.4.6";
+
+  src = fetchurl {
+    url = "http://www.fastcgi.com/dist/${name}.tar.gz";
+    sha256 = "12g6vcfl9jl8rqf8lzrkdxg2ngca310d3d6an563xqcgrkp8ga55";
+  };
+
+  patches =
+    [ (fetchurl {
+        name = "compile-against-apache24.diff";
+        url = "https://projects.archlinux.org/svntogit/packages.git/plain/trunk/compile-against-apache24.diff?h=packages/mod_fastcgi&id=81c7cb99d15682df3bdb1edcaeea5259e9e43a42";
+        sha256 = "000qvrf5jb979i37rimrdivcgjijcffgrpkx38c0rn62z9jz61g4";
+      })
+    ];
+
+  buildInputs = [ apacheHttpd ];
+
+  preBuild = ''
+    cp Makefile.AP2 Makefile
+    makeFlags="top_dir=${apacheHttpd.dev}/share prefix=$out"
+  '';
+
+  meta = {
+    homepage = http://www.fastcgi.com/;
+    description = "Provide support for the FastCGI protocol";
+
+    longDescription = ''
+      mod_fastcgi is a module for the Apache web server that enables
+      FastCGI - a standards based protocol for communicating with
+      applications that generate dynamic content for web pages. FastCGI
+      provides a superset of CGI functionality, but a subset of the
+      functionality of programming for a particular web server API.
+      Nonetheless, the feature set is rich enough for programming
+      virtually any type of web application, but the result is generally
+      more scalable.
+    '';
+
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.peti ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/apache-modules/mod_perl/default.nix b/nixpkgs/pkgs/servers/http/apache-modules/mod_perl/default.nix
new file mode 100644
index 000000000000..04746d678c52
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/apache-modules/mod_perl/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, apacheHttpd, perl }:
+
+stdenv.mkDerivation rec {
+  name = "mod_perl-2.0.10";
+
+  src = fetchurl {
+    url = "mirror://apache/perl/${name}.tar.gz";
+    sha256 = "0r1bhzwl5gr0202r6448943hjxsickzn55kdmb7dzad39vnq7kyi";
+  };
+
+  buildInputs = [ apacheHttpd perl ];
+  buildPhase = ''
+    perl Makefile.PL \
+      MP_APXS=${apacheHttpd.dev}/bin/apxs
+    make
+  '';
+  installPhase = ''
+    mkdir -p $out
+    make install DESTDIR=$out
+    mv $out${apacheHttpd}/* $out
+    mv $out${apacheHttpd.dev}/* $out
+    mv $out${perl}/* $out
+    rm $out/nix -rf
+  '';
+}
diff --git a/nixpkgs/pkgs/servers/http/apache-modules/mod_python/default.nix b/nixpkgs/pkgs/servers/http/apache-modules/mod_python/default.nix
new file mode 100644
index 000000000000..f947bf535cc9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/apache-modules/mod_python/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, apacheHttpd, python2 }:
+
+stdenv.mkDerivation rec {
+  name = "mod_python-3.5.0";
+
+  src = fetchurl {
+    url = "http://dist.modpython.org/dist/${name}.tgz";
+    sha256 = "146apll3yfqk05s8fkf4acmxzqncl08bgn4rv0c1rd4qxmc91w0f";
+  };
+
+  patches = [ ./install.patch ];
+
+  postPatch = ''
+    substituteInPlace dist/version.sh \
+        --replace 'GIT=`git describe --always`' "" \
+        --replace '-$GIT' ""
+  '';
+
+  preInstall = ''
+    installFlags="LIBEXECDIR=$out/modules $installFlags"
+    mkdir -p $out/modules $out/bin
+  '';
+
+  passthru = { inherit apacheHttpd; };
+
+  buildInputs = [ apacheHttpd python2 ];
+
+  meta = {
+    homepage = http://modpython.org/;
+    description = "An Apache module that embeds the Python interpreter within the server";
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/apache-modules/mod_python/install.patch b/nixpkgs/pkgs/servers/http/apache-modules/mod_python/install.patch
new file mode 100644
index 000000000000..29667e11ed8e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/apache-modules/mod_python/install.patch
@@ -0,0 +1,12 @@
+diff -ru -x '*~' mod_python-3.5.0-orig/dist/Makefile.in mod_python-3.5.0/dist/Makefile.in
+--- mod_python-3.5.0-orig/dist/Makefile.in	2013-11-12 04:21:34.000000000 +0100
++++ mod_python-3.5.0/dist/Makefile.in	2014-11-07 11:28:24.466377733 +0100
+@@ -34,7 +34,7 @@
+ install_py_lib: mod_python src
+ 	@cd src; $(MAKE) psp_parser.c
+ 	if test -z "$(DESTDIR)" ; then \
+-		$(PYTHON_BIN) setup.py install --optimize 2 --force ; \
++		$(PYTHON_BIN) setup.py install --optimize 2 --force --prefix $(out) ; \
+ 	else \
+ 		$(PYTHON_BIN) setup.py install --optimize 2 --force --root $(DESTDIR) ; \
+ 	fi
diff --git a/nixpkgs/pkgs/servers/http/apache-modules/mod_wsgi/default.nix b/nixpkgs/pkgs/servers/http/apache-modules/mod_wsgi/default.nix
new file mode 100644
index 000000000000..19a9be8e86e8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/apache-modules/mod_wsgi/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, apacheHttpd, python2 }:
+
+stdenv.mkDerivation rec {
+  name = "mod_wsgi-${version}";
+  version = "4.6.5";
+
+  src = fetchurl {
+    url = "https://github.com/GrahamDumpleton/mod_wsgi/archive/${version}.tar.gz";
+    sha256 = "1q75ifadjd5frr5i2b9swbjiwfv4fr4ny8npsm09w6mjp7w0bgjw";
+  };
+
+  buildInputs = [ apacheHttpd python2 ];
+
+  patchPhase = ''
+    sed -r -i -e "s|^LIBEXECDIR=.*$|LIBEXECDIR=$out/modules|" \
+      ${if stdenv.isDarwin then "-e 's|/usr/bin/lipo|lipo|'" else ""} \
+      configure
+  '';
+
+  meta = {
+    homepage = https://github.com/GrahamDumpleton/mod_wsgi;
+    description = "Host Python applications in Apache through the WSGI interface";
+    license = stdenv.lib.licenses.asl20;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/apache-modules/tomcat-connectors/default.nix b/nixpkgs/pkgs/servers/http/apache-modules/tomcat-connectors/default.nix
new file mode 100644
index 000000000000..138864aec7d0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/apache-modules/tomcat-connectors/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, apacheHttpd, jdk }:
+
+stdenv.mkDerivation rec {
+  name = "tomcat-connectors-1.2.46";
+
+  src = fetchurl {
+    url = "mirror://apache/tomcat/tomcat-connectors/jk/${name}-src.tar.gz";
+    sha256 = "1sfbcsmshjkj4wc969ngjcxhjyp4mbkjprbs111d1b0x3l7547by";
+  };
+
+  configureFlags = [
+    "--with-apxs=${apacheHttpd.dev}/bin/apxs"
+    "--with-java-home=${jdk}"
+  ];
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */native)
+  '';
+
+  installPhase = ''
+    mkdir -p $out/modules
+    cp apache-2.0/mod_jk.so $out/modules
+  '';
+
+  buildInputs = [ apacheHttpd jdk ];
+
+  meta = with stdenv.lib; {
+    description = "Provides web server plugins to connect web servers with Tomcat";
+    homepage = https://tomcat.apache.org/download-connectors.cgi;
+    license = licenses.asl20;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/apt-cacher-ng/default.nix b/nixpkgs/pkgs/servers/http/apt-cacher-ng/default.nix
new file mode 100644
index 000000000000..aa826a9c528b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/apt-cacher-ng/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, bzip2
+, cmake
+, doxygen
+, fetchurl
+, fuse
+, lzma
+, openssl
+, pkgconfig
+, systemd
+, tcp_wrappers
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  name = "apt-cacher-ng-${version}";
+  version = "3.2";
+
+  src = fetchurl {
+    url = "http://ftp.debian.org/debian/pool/main/a/apt-cacher-ng/apt-cacher-ng_${version}.orig.tar.xz";
+    sha256 = "1kas5xq44rx33pczhrz05dsdhjaavxdmcs5h1ygfi76bpqvyhpa0";
+  };
+
+  nativeBuildInputs = [ cmake doxygen pkgconfig ];
+  buildInputs = [ bzip2 fuse lzma openssl systemd tcp_wrappers zlib ];
+
+  meta = with stdenv.lib; {
+    description = "A caching proxy specialized for linux distribution files";
+    homepage = https://www.unix-ag.uni-kl.de/~bloch/acng/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/couchdb/2.0.0.nix b/nixpkgs/pkgs/servers/http/couchdb/2.0.0.nix
new file mode 100644
index 000000000000..fa8cb23bf1f8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/couchdb/2.0.0.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchurl, erlang, icu, openssl, spidermonkey
+, coreutils, bash, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "couchdb-${version}";
+  version = "2.3.0";
+
+  src = fetchurl {
+    url = "mirror://apache/couchdb/source/${version}/apache-${name}.tar.gz";
+    sha256 = "0lpk64n6fip85j1jz59kq20jdliwv6mh8j2h5zyxjn5i8b86hf0b";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ erlang icu openssl spidermonkey ];
+
+  patches = [ ./jsapi.patch ];
+  postPatch = ''
+    substituteInPlace src/couch/rebar.config.script --replace '-DHAVE_CURL -I/usr/local/include' "-DHAVE_CURL -I/usr/local/include $NIX_CFLAGS_COMPILE"
+
+    patch bin/rebar <<EOF
+    1c1
+    < #!/usr/bin/env escript
+    ---
+    > #!${coreutils}/bin/env escript
+    EOF
+
+  '';
+
+  # Configure a username.  The build system would use "couchdb" as
+  # default if none is provided.  Note that it is unclear where this
+  # username is actually used in the build, as any choice seems to be
+  # working.
+  configurePhase = ''
+    ./configure -u nobody
+  '';
+
+  buildPhase = ''
+    make release
+  '';
+
+  installPhase = ''
+    mkdir -p $out
+    cp -r rel/couchdb/* $out
+    wrapProgram $out/bin/couchdb --suffix PATH : ${bash}/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A database that uses JSON for documents, JavaScript for MapReduce queries, and regular HTTP for an API";
+    homepage = http://couchdb.apache.org;
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ garbas ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/couchdb/default.nix b/nixpkgs/pkgs/servers/http/couchdb/default.nix
new file mode 100644
index 000000000000..5239c027b8fa
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/couchdb/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, erlang, icu, openssl, spidermonkey, curl, help2man
+, sphinx, which, file, pkgconfig, getopt }:
+
+stdenv.mkDerivation rec {
+  name = "couchdb-${version}";
+  version = "1.7.1";
+
+  src = fetchurl {
+    url = "mirror://apache/couchdb/source/${version}/apache-${name}.tar.gz";
+    sha256 = "1b9cbdrmh1i71mrwvhm17v4cf7lckpil1vvq7lpmxyn6zfk0l84i";
+  };
+
+  nativeBuildInputs = [ help2man which file pkgconfig sphinx ];
+  buildInputs = [ erlang icu openssl spidermonkey curl ];
+
+  postInstall = ''
+    substituteInPlace $out/bin/couchdb --replace getopt "${getopt}/bin/getopt"
+  '';
+
+  /*
+  Versions of SpiderMonkey after the js185-1.0.0 release remove the optional
+  enforcement of preventing anonymous functions in a statement context. This
+  will most likely break your existing JavaScript code as well as render all
+  example code invalid.
+
+  If you wish to ignore this error pass --enable-js-trunk to ./configure.
+  */
+  configureFlags = [
+    "--enable-js-trunk"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A database that uses JSON for documents, JavaScript for MapReduce queries, and regular HTTP for an API";
+    homepage = http://couchdb.apache.org;
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ garbas ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/couchdb/jsapi.patch b/nixpkgs/pkgs/servers/http/couchdb/jsapi.patch
new file mode 100644
index 000000000000..bb7d4ca610c7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/couchdb/jsapi.patch
@@ -0,0 +1,60 @@
+diff -ru couch_js/http.c couch_js-patched/http.c
+--- apache-couchdb-2.0.0/src/couch/priv/couch_js/http.c	2016-09-12 11:28:51.000000000 +0200
++++ apache-couchdb-2.0.0-patched/src/couch/priv/couch_js/http.c	2017-02-10 10:52:33.025854045 +0100
+@@ -15,7 +15,7 @@
+ #include <string.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+-#include <jsapi.h>
++#include <js/jsapi.h>
+ #include "config.h"
+ #include "utf8.h"
+ #include "util.h"
+diff -ru couch_js/main.c couch_js-patched/main.c
+--- apache-couchdb-2.0.0/src/couch/priv/couch_js/main.c	2016-09-12 11:28:51.000000000 +0200
++++ apache-couchdb-2.0.0-patched/src/couch/priv/couch_js/main.c	2017-02-10 10:52:33.001854154 +0100
+@@ -20,7 +20,7 @@
+ #include <unistd.h>
+ #endif
+ 
+-#include <jsapi.h>
++#include <js/jsapi.h>
+ #include "config.h"
+ #include "http.h"
+ #include "utf8.h"
+diff -ru couch_js/utf8.c couch_js-patched/utf8.c
+--- apache-couchdb-2.0.0/src/couch/priv/couch_js/utf8.c	2016-09-12 11:28:51.000000000 +0200
++++ apache-couchdb-2.0.0-patched/src/couch/priv/couch_js/utf8.c	2017-02-10 10:52:33.009854117 +0100
+@@ -10,7 +10,7 @@
+ // License for the specific language governing permissions and limitations under
+ // the License.
+ 
+-#include <jsapi.h>
++#include <js/jsapi.h>
+ #include "config.h"
+ 
+ static int
+diff -ru couch_js/util.c couch_js-patched/util.c
+--- apache-couchdb-2.0.0/src/couch/priv/couch_js/util.c	2016-09-12 11:28:51.000000000 +0200
++++ apache-couchdb-2.0.0-patched/src/couch/priv/couch_js/util.c	2017-02-10 10:52:33.017854081 +0100
+@@ -13,7 +13,7 @@
+ #include <stdlib.h>
+ #include <string.h>
+ 
+-#include <jsapi.h>
++#include <js/jsapi.h>
+ 
+ #include "help.h"
+ #include "util.h"
+diff -ru couch_js/util.h couch_js-patched/util.h
+--- apache-couchdb-2.0.0/src/couch/priv/couch_js/util.h	2016-09-12 11:28:51.000000000 +0200
++++ apache-couchdb-2.0.0-patched/src/couch/priv/couch_js/util.h	2017-02-10 10:52:32.988854212 +0100
+@@ -13,7 +13,7 @@
+ #ifndef COUCHJS_UTIL_H
+ #define COUCHJS_UTIL_H
+ 
+-#include <jsapi.h>
++#include <js/jsapi.h>
+ 
+ typedef struct {
+     int          no_eval;
diff --git a/nixpkgs/pkgs/servers/http/darkhttpd/default.nix b/nixpkgs/pkgs/servers/http/darkhttpd/default.nix
new file mode 100644
index 000000000000..3efc97f6296b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/darkhttpd/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "darkhttpd-${version}";
+  version = "1.12";
+
+  src = fetchurl {
+    url = "https://unix4lyfe.org/darkhttpd/${name}.tar.bz2";
+    sha256 = "0185wlyx4iqiwfigp1zvql14zw7gxfacncii3d15yaxk4av1f155";
+  };
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    # install darkhttpd
+    install -Dm755 "darkhttpd" "$out/bin/darkhttpd"
+
+    # install license
+    install -d "$out/share/licenses/darkhttpd"
+    head -n 18 darkhttpd.c > "$out/share/licenses/darkhttpd/LICENSE"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Small and secure static webserver";
+    homepage    = https://unix4lyfe.org/darkhttpd/;
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ bobvanderlinden ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/gatling/default.nix b/nixpkgs/pkgs/servers/http/gatling/default.nix
new file mode 100644
index 000000000000..19b2d01f5be8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/gatling/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, libowfat, zlib, openssl }:
+
+let
+  version = "0.15";
+in
+stdenv.mkDerivation rec {
+  name = "gatling-${version}";
+
+  src = fetchurl {
+    url = "https://www.fefe.de/gatling/${name}.tar.xz";
+    sha256 = "194srqyja3pczpbl6l169zlvx179v7ln0m6yipmhvj6hrv82k8vg";
+  };
+
+  buildInputs = [  libowfat zlib openssl.dev ];
+
+  configurePhase = ''
+    substituteInPlace Makefile --replace "/usr/local" "$out"
+    substituteInPlace GNUmakefile --replace "/opt/diet" "$out"
+  '';
+
+  buildPhase = ''
+    make gatling
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A high performance web server";
+    homepage = http://www.fefe.de/gatling/;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.the-kenny ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/h2o/default.nix b/nixpkgs/pkgs/servers/http/h2o/default.nix
new file mode 100644
index 000000000000..ceffd3e0260d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/h2o/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub
+, pkgconfig, cmake
+, libressl, libuv, zlib
+}:
+
+with builtins;
+
+stdenv.mkDerivation rec {
+  name = "h2o-${version}";
+  version = "2.2.5";
+
+  src = fetchFromGitHub {
+    owner  = "h2o";
+    repo   = "h2o";
+    rev    = "refs/tags/v${version}";
+    sha256 = "0jyvbp6cjiirj44nxqa2fi5y473gnc8awfn8zv82hb1y9rlxqfyv";
+  };
+
+  # We have to fix up some function prototypes, because despite upstream h2o
+  # issue #1705 (https://github.com/h2o/h2o/issues/1706), libressl 2.7+ doesn't
+  # seem to work
+  patchPhase = ''
+    substituteInPlace ./deps/neverbleed/neverbleed.c \
+      --replace 'static void RSA_' 'void RSA_' \
+      --replace 'static int RSA_'  'int RSA_'
+  '';
+
+  nativeBuildInputs = [ pkgconfig cmake ];
+  buildInputs = [ libressl libuv zlib ];
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Optimized HTTP/1 and HTTP/2 server";
+    homepage    = https://h2o.examp1e.net;
+    license     = stdenv.lib.licenses.mit;
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+    platforms   = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/hiawatha/default.nix b/nixpkgs/pkgs/servers/http/hiawatha/default.nix
new file mode 100644
index 000000000000..d99a04642deb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/hiawatha/default.nix
@@ -0,0 +1,56 @@
+{ stdenv
+, fetchFromGitLab
+
+, cmake
+, ninja
+, mbedtls
+
+, enableCache     ? true     # Internal cache support.
+, enableIpV6      ? true
+, enableTls       ? true
+, enableMonitor   ? false    # Support for the Hiawatha Monitor.
+, enableRproxy    ? true     # Reverse proxy support.
+, enableTomahawk  ? false    # Tomahawk, the Hiawatha command shell.
+, enableXslt      ? true, libxml2 ? null, libxslt ? null
+, enableToolkit   ? true     # The URL Toolkit.
+}:
+
+stdenv.mkDerivation rec {
+  name = "hiawatha-${version}";
+  version = "10.8.3";
+
+  src = fetchFromGitLab {
+    owner = "hsleisink";
+    repo = "hiawatha";
+    rev = "v${version}";
+    sha256 = "057kglz5grrxg5m2brr7mcncwd3idxzczq5vg8yd1iri2rq63hdc";
+  };
+
+  nativeBuildInputs = [ cmake ninja ];
+  buildInputs = [ mbedtls ] ++ stdenv.lib.optionals enableXslt [ libxslt libxml2 ];
+
+  prePatch = ''
+    substituteInPlace CMakeLists.txt --replace SETUID ""
+  '';
+
+  cmakeFlags = [
+    "-DUSE_SYSTEM_MBEDTLS=on" # Policy to use Nix deps, and Nix uses up to date deps
+    ( if enableCache     then "-DENABLE_CACHE=on"       else "-DENABLE_CACHE=off"       )
+    ( if enableIpV6      then "-DENABLE_IPV6=on"        else "-DENABLE_IPV6=off"        )
+    ( if enableTls       then "-DENABLE_TLS=on"         else "-DENABLE_TLS=off"         )
+    ( if enableMonitor   then "-DENABLE_MONITOR=on"     else "-DENABLE_MONITOR=off"     )
+    ( if enableRproxy    then "-DENABLE_RPROXY=on"      else "-DENABLE_RPROXY=off"      )
+    ( if enableTomahawk  then "-DENABLE_TOMAHAWK=on"    else "-DENABLE_TOMAHAWK=off"    )
+    ( if enableXslt      then "-DENABLE_XSLT=on"        else "-DENABLE_XSLT=off"        )
+    ( if enableToolkit   then "-DENABLE_TOOLKIT=on"     else "-DENABLE_TOOLKIT=off"     )
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.hiawatha-webserver.org;
+    description = "An advanced and secure webserver";
+    license = licenses.gpl2;
+    platforms = platforms.unix;    # "Hiawatha runs perfectly on Linux, BSD and MacOS X"
+    maintainers = [ maintainers.ndowens ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/http/hyp/default.nix b/nixpkgs/pkgs/servers/http/hyp/default.nix
new file mode 100644
index 000000000000..3a1eb50f05be
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/hyp/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, python3Packages }:
+
+python3Packages.buildPythonPackage rec {
+  name = "hyp-server-${version}";
+  version = "1.2.0";
+
+  src = fetchurl {
+    url    = "mirror://pypi/h/hyp-server/${name}.tar.gz";
+    sha256 = "1lafjdcn9nnq6xc3hhyizfwh6l69lc7rixn6dx65aq71c913jc15";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Hyperminimal https server";
+    homepage    = https://github.com/rnhmjoj/hyp;
+    license     = with licenses; [gpl3Plus mit];
+    maintainers = with maintainers; [ rnhmjoj ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/jboss/default.nix b/nixpkgs/pkgs/servers/http/jboss/default.nix
new file mode 100644
index 000000000000..c5702132d280
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/jboss/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, unzip, jdk }:
+
+stdenv.mkDerivation {
+  name = "jboss-as-7.1.1.Final";
+  src = fetchurl {
+    url = https://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.tar.gz;
+    sha256 = "1bdjw0ib9qr498vpfbg8klqw6rl11vbz7vwn6gp1r5gpqkd3zzc8";
+  };
+
+  buildInputs = [ unzip ];
+
+  phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
+  
+  installPhase = ''
+    mv $PWD $out
+    find $out/bin -name \*.sh -print0 | xargs -0 sed -i -e '/#!\/bin\/sh/aJAVA_HOME=${jdk}'
+  '';
+  
+  meta = with stdenv.lib; {
+    homepage = http://www.jboss.org/;
+    description = "Open Source J2EE application server";
+    license = licenses.lgpl21;
+    maintainers = [ maintainers.sander ];
+    platforms = platforms.unix;
+    knownVulnerabilities = [
+      "CVE-2015-7501: remote code execution in apache-commons-collections: InvokerTransformer during deserialisation"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/jboss/jdbc/mysql/builder.sh b/nixpkgs/pkgs/servers/http/jboss/jdbc/mysql/builder.sh
new file mode 100644
index 000000000000..6af39a0cb633
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/jboss/jdbc/mysql/builder.sh
@@ -0,0 +1,5 @@
+buildInputs="$mysql_jdbc"
+source $stdenv/setup
+
+mkdir -p $out/server/default/lib
+ln -s $mysql_jdbc/share/java/mysql-connector-java.jar $out/server/default/lib/mysql-connector-java.jar
diff --git a/nixpkgs/pkgs/servers/http/jboss/jdbc/mysql/default.nix b/nixpkgs/pkgs/servers/http/jboss/jdbc/mysql/default.nix
new file mode 100644
index 000000000000..fd2dec44c7f3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/jboss/jdbc/mysql/default.nix
@@ -0,0 +1,13 @@
+{ stdenv, mysql_jdbc }:
+
+stdenv.mkDerivation {
+  name = "jboss-mysql-jdbc";
+
+  builder = ./builder.sh;
+
+  inherit mysql_jdbc;
+
+  meta = {
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/jetty/default.nix b/nixpkgs/pkgs/servers/http/jetty/default.nix
new file mode 100644
index 000000000000..70c48fc95f4b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/jetty/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "jetty-${version}";
+  version = "9.4.14.v20181114";
+  src = fetchurl {
+    url = "https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/${version}/jetty-distribution-${version}.tar.gz";
+    name = "jetty-distribution-${version}.tar.gz";
+    sha256 = "1i83jfd17d9sl9pjc8r9i8mx3nr9x0m5s50fd4l5ppzn4drvssn6";
+  };
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  installPhase = ''
+    mkdir -p $out
+    mv etc lib modules start.ini start.jar $out
+  '';
+
+  meta = {
+    description = "A Web server and javax.servlet container";
+    homepage = http://www.eclipse.org/jetty/;
+    platforms = stdenv.lib.platforms.all;
+    license = [ stdenv.lib.licenses.asl20 stdenv.lib.licenses.epl10 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/lighttpd/default.nix b/nixpkgs/pkgs/servers/http/lighttpd/default.nix
new file mode 100644
index 000000000000..cdebbf739e6a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/lighttpd/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, fetchurl, pkgconfig, pcre, libxml2, zlib, attr, bzip2, which, file
+, openssl, enableMagnet ? false, lua5_1 ? null
+, enableMysql ? false, mysql ? null
+, enableLdap ? false, openldap ? null
+, enableWebDAV ? true, sqlite ? null, libuuid ? null
+, perl
+}:
+
+assert enableMagnet -> lua5_1 != null;
+assert enableMysql -> mysql != null;
+assert enableLdap -> openldap != null;
+assert enableWebDAV -> sqlite != null;
+assert enableWebDAV -> libuuid != null;
+
+stdenv.mkDerivation rec {
+  name = "lighttpd-1.4.52";
+
+  src = fetchurl {
+    url = "https://download.lighttpd.net/lighttpd/releases-1.4.x/${name}.tar.xz";
+    sha256 = "0r57zp7050qxlwg41xqnqnhw3lrl34cg5zvfbqrwddrhqn8hkg17";
+  };
+
+  postPatch = ''
+    patchShebangs tests
+  '';
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ pcre libxml2 zlib attr bzip2 which file openssl ]
+             ++ stdenv.lib.optional enableMagnet lua5_1
+             ++ stdenv.lib.optional enableMysql mysql.connector-c
+             ++ stdenv.lib.optional enableLdap openldap
+             ++ stdenv.lib.optional enableWebDAV sqlite
+             ++ stdenv.lib.optional enableWebDAV libuuid;
+
+  configureFlags = [ "--with-openssl" ]
+                ++ stdenv.lib.optional enableMagnet "--with-lua"
+                ++ stdenv.lib.optional enableMysql "--with-mysql"
+                ++ stdenv.lib.optional enableLdap "--with-ldap"
+                ++ stdenv.lib.optional enableWebDAV "--with-webdav-props"
+                ++ stdenv.lib.optional enableWebDAV "--with-webdav-locks";
+
+  preConfigure = ''
+    sed -i "s:/usr/bin/file:${file}/bin/file:g" configure
+  '';
+
+  checkInputs = [ perl ];
+  doCheck = false; # fails 2 tests
+
+  postInstall = ''
+    mkdir -p "$out/share/lighttpd/doc/config"
+    cp -vr doc/config "$out/share/lighttpd/doc/"
+    # Remove files that references needless store paths (dependency bloat)
+    rm "$out/share/lighttpd/doc/config/Makefile"*
+    rm "$out/share/lighttpd/doc/config/conf.d/Makefile"*
+    rm "$out/share/lighttpd/doc/config/vhosts.d/Makefile"*
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Lightweight high-performance web server";
+    homepage = http://www.lighttpd.net/;
+    license = stdenv.lib.licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/lwan/default.nix b/nixpkgs/pkgs/servers/http/lwan/default.nix
new file mode 100644
index 000000000000..878211ebf024
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/lwan/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, pkgconfig, zlib, cmake, jemalloc }:
+
+stdenv.mkDerivation rec {
+  pname = "lwan";
+  version = "0.1";
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "lpereira";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1mckryzb06smky0bx2bkqwqzpnq4pb8vlgmmwsvqmwi4mmw9wmi1";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  buildInputs = [ jemalloc zlib ];
+
+  meta = with stdenv.lib; {
+    description = "Lightweight high-performance multi-threaded web server";
+    longDescription = "A lightweight and speedy web server with a low memory
+      footprint (~500KiB for 10k idle connections), with minimal system calls and
+      memory allocation.  Lwan contains a hand-crafted HTTP request parser. Files are
+      served using the most efficient way according to their size: no copies between
+      kernel and userland for files larger than 16KiB.  Smaller files are sent using
+      vectored I/O of memory-mapped buffers. Header overhead is considered before
+      compressing small files.  Features include: mustache templating engine and IPv6
+      support.
+    ";
+    homepage = "https://lwan.ws/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ leenaars ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/micro-httpd/default.nix b/nixpkgs/pkgs/servers/http/micro-httpd/default.nix
new file mode 100644
index 000000000000..b636f79e6c60
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/micro-httpd/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "micro-httpd-20140814";
+
+  src = fetchurl {
+    url   = "https://acme.com/software/micro_httpd/micro_httpd_14Aug2014.tar.gz";
+    sha256 = "0mlm24bi31s0s8w55i0sysv2nc1n2x4cfp6dm47slz49h2fz24rk";
+  };
+
+  preBuild = ''
+    makeFlagsArray=(BINDIR="$out/bin" MANDIR="$out/share/man/man8")
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man8
+  '';
+
+  meta = with stdenv.lib; {
+    homepage    = "http://acme.com/software/micro_httpd/";
+    description = "A really small HTTP server";
+    license     = licenses.bsd2;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ copumpkin ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/http/mini-httpd/default.nix b/nixpkgs/pkgs/servers/http/mini-httpd/default.nix
new file mode 100644
index 000000000000..37a0a98d4e01
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/mini-httpd/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, boost }:
+
+stdenv.mkDerivation rec {
+  name = "mini-httpd-1.7";
+
+  src = fetchurl {
+    url = "https://download-mirror.savannah.gnu.org/releases/mini-httpd/${name}.tar.gz";
+    sha256 = "0jggmlaywjfbdljzv5hyiz49plnxh0har2bnc9dq4xmj1pmjgs49";
+  };
+
+  buildInputs = [ boost ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://mini-httpd.nongnu.org/;
+    description = "minimalistic high-performance web server";
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.peti ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/myserver/default.nix b/nixpkgs/pkgs/servers/http/myserver/default.nix
new file mode 100644
index 000000000000..b18e1ea162f0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/myserver/default.nix
@@ -0,0 +1,52 @@
+{ lib, fetchurl, stdenv, libgcrypt, libevent, libidn, gnutls
+, libxml2, zlib, guile, texinfo, cppunit, killall }:
+
+let version = "0.11"; in
+
+stdenv.mkDerivation rec {
+  name = "myserver-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnu/myserver/${version}/${name}.tar.xz";
+    sha256 = "02y3vv4hxpy5h710y79s8ipzshhc370gbz1wm85x0lnq5nqxj2ax";
+  };
+
+  patches =
+    [ ./disable-dns-lookup-in-chroot.patch ];
+
+  buildInputs = [
+    libgcrypt libevent libidn gnutls libxml2 zlib guile texinfo
+  ];
+
+  checkInputs = [ cppunit ];
+
+  makeFlags = [ "V=1" ];
+
+  doCheck = true;
+
+  enableParallelBuilding = true;
+
+  # On GNU/Linux the `test_suite' process sometimes stays around, so
+  # forcefully terminate it.
+  postCheck = "${killall}/bin/killall test_suite || true";
+
+  meta = {
+    description = "GNU MyServer, a powerful and easy to configure web server";
+
+    longDescription = ''
+      GNU MyServer is a powerful and easy to configure web server.  Its
+      multi-threaded architecture makes it extremely scalable and usable in
+      large scale sites as well as in small networks, it has a lot of
+      built-in features.  Share your files in minutes!
+    '';
+
+    homepage = https://www.gnu.org/software/myserver/;
+
+    license = lib.licenses.gpl3Plus;
+
+    # libevent fails to build on Cygwin and Guile has troubles on Darwin.
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;
+
+    broken = true; # needs patch for gets()
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/myserver/disable-dns-lookup-in-chroot.patch b/nixpkgs/pkgs/servers/http/myserver/disable-dns-lookup-in-chroot.patch
new file mode 100644
index 000000000000..31b24915c4da
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/myserver/disable-dns-lookup-in-chroot.patch
@@ -0,0 +1,12 @@
+Disable this test because it attempts to do a DNS lookup, which fails
+in a chroot.
+
+--- myserver-0.10/tests/test_socket.cpp	2010-10-19 00:12:59.000000000 +0200
++++ myserver-0.10/tests/test_socket.cpp	2010-10-19 00:13:07.000000000 +0200
+@@ -56,7 +56,6 @@ class TestSocket : public CppUnit::TestF
+ 
+   CPPUNIT_TEST (testGethostname);
+   CPPUNIT_TEST (testRecv);
+-  CPPUNIT_TEST (testGetLocalIPsList);
+ 
+   CPPUNIT_TEST_SUITE_END ();
diff --git a/nixpkgs/pkgs/servers/http/nginx/generic.nix b/nixpkgs/pkgs/servers/http/nginx/generic.nix
new file mode 100644
index 000000000000..25ff20635aff
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/nginx/generic.nix
@@ -0,0 +1,80 @@
+{ stdenv, fetchurl, openssl, zlib, pcre, libxml2, libxslt
+, gd, geoip
+, withDebug ? false
+, withStream ? true
+, withMail ? false
+, modules ? []
+, version, sha256, ...
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation {
+  name = "nginx-${version}";
+
+  src = fetchurl {
+    url = "https://nginx.org/download/nginx-${version}.tar.gz";
+    inherit sha256;
+  };
+
+  buildInputs = [ openssl zlib pcre libxml2 libxslt gd geoip ]
+    ++ concatMap (mod: mod.inputs or []) modules;
+
+  configureFlags = [
+    "--with-http_ssl_module"
+    "--with-http_v2_module"
+    "--with-http_realip_module"
+    "--with-http_addition_module"
+    "--with-http_xslt_module"
+    "--with-http_geoip_module"
+    "--with-http_sub_module"
+    "--with-http_dav_module"
+    "--with-http_flv_module"
+    "--with-http_mp4_module"
+    "--with-http_gunzip_module"
+    "--with-http_gzip_static_module"
+    "--with-http_auth_request_module"
+    "--with-http_random_index_module"
+    "--with-http_secure_link_module"
+    "--with-http_degradation_module"
+    "--with-http_stub_status_module"
+    "--with-threads"
+    "--with-pcre-jit"
+    # Install destination problems
+    # "--with-http_perl_module"
+  ] ++ optional withDebug [
+    "--with-debug"
+  ] ++ optional withStream [
+    "--with-stream"
+    "--with-stream_geoip_module"
+    "--with-stream_realip_module"
+    "--with-stream_ssl_module"
+    "--with-stream_ssl_preread_module"
+  ] ++ optional withMail [
+    "--with-mail"
+    "--with-mail_ssl_module"
+  ]
+    ++ optional (gd != null) "--with-http_image_filter_module"
+    ++ optional (with stdenv.hostPlatform; isLinux || isFreeBSD) "--with-file-aio"
+    ++ map (mod: "--add-module=${mod.src}") modules;
+
+  NIX_CFLAGS_COMPILE = [ "-I${libxml2.dev}/include/libxml2" ] ++ optional stdenv.isDarwin "-Wno-error=deprecated-declarations";
+
+  preConfigure = (concatMapStringsSep "\n" (mod: mod.preConfigure or "") modules);
+
+  hardeningEnable = optional (!stdenv.isDarwin) "pie";
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    mv $out/sbin $out/bin
+  '';
+
+  meta = {
+    description = "A reverse proxy and lightweight webserver";
+    homepage    = http://nginx.org;
+    license     = licenses.bsd2;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ thoughtpolice raskin fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/nginx/mainline.nix b/nixpkgs/pkgs/servers/http/nginx/mainline.nix
new file mode 100644
index 000000000000..8f33fa8d33b1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/nginx/mainline.nix
@@ -0,0 +1,6 @@
+{ callPackage, ... }@args:
+
+callPackage ./generic.nix (args // {
+  version = "1.15.7";
+  sha256 = "14yz5cag9jdi088kdyammpi0ixrzi91bc0nwdldj42hfdhpyl8lg";
+})
diff --git a/nixpkgs/pkgs/servers/http/nginx/mainline.upstream b/nixpkgs/pkgs/servers/http/nginx/mainline.upstream
new file mode 100644
index 000000000000..7bb025499592
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/nginx/mainline.upstream
@@ -0,0 +1,8 @@
+url http://nginx.org/en/download.html
+version_link '.*-([0-9]+[.][0-9]+([.][0-9]+)*)[.]tar[.][a-z0-9]*$' 
+
+do_overwrite() {
+  ensure_hash
+  set_var_value version "$CURRENT_VERSION"
+  set_var_value sha256 "$CURRENT_HASH"
+}
diff --git a/nixpkgs/pkgs/servers/http/nginx/modules.nix b/nixpkgs/pkgs/servers/http/nginx/modules.nix
new file mode 100644
index 000000000000..6b4510bfe824
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/nginx/modules.nix
@@ -0,0 +1,312 @@
+{ fetchFromGitHub, lib, pkgs }:
+
+{
+  brotli = {
+    src = let gitsrc = pkgs.fetchFromGitHub {
+      owner = "eustas";
+      repo = "ngx_brotli";
+      rev = "v0.1.2";
+      sha256 = "19r9igxm4hrzrhxajlxw2ccq0057h8ipkfiif725x0xqbxjskl6c";
+    }; in pkgs.runCommandNoCC "ngx_brotli-src" {} ''
+      cp -a ${gitsrc} $out
+      substituteInPlace $out/config \
+        --replace /usr/local ${lib.getDev pkgs.brotli}
+    '';
+    inputs = [ pkgs.brotli ];
+  };
+
+  dav = {
+    src = fetchFromGitHub {
+      owner = "arut";
+      repo = "nginx-dav-ext-module";
+      rev = "v0.1.0";
+      sha256 = "1ifahd69vz715g3zim618jbmxb7kcmzykc696grskxm0svpy294k";
+    };
+    inputs = [ pkgs.expat ];
+  };
+
+  develkit = {
+    src = fetchFromGitHub {
+      owner = "simpl";
+      repo = "ngx_devel_kit";
+      rev = "v0.3.1rc1";
+      sha256 = "00vqvpx67qra2hr85hkvj1dha4h7x7v9sblw7w1df11nq1gzsdbb";
+    };
+  };
+
+  echo = {
+    src = fetchFromGitHub {
+      owner = "openresty";
+      repo = "echo-nginx-module";
+      rev = "v0.61";
+      sha256 = "0brjhhphi94ms4gia7za0mfx0png4jbhvq6j0nzjwp537iyiy23k";
+    };
+  };
+
+  fancyindex = {
+    src = fetchFromGitHub {
+      owner = "aperezdc";
+      repo = "ngx-fancyindex";
+      rev = "v0.4.3";
+      sha256 = "12xdx6a76sfrq0yciylvyjlnvyczszpadn31jqya8c2dzdkyyx7f";
+    };
+  };
+
+  fastcgi-cache-purge = {
+    src = fetchFromGitHub {
+      owner  = "FRiCKLE";
+      repo   = "ngx_cache_purge";
+      rev    = "2.3";
+      sha256 = "0ib2jrbjwrhvmihhnzkp4w87fxssbbmmmj6lfdwpm6ni8p9g60dw";
+    };
+  };
+
+  fluentd = {
+    src = fetchFromGitHub {
+      owner = "fluent";
+      repo = "nginx-fluentd-module";
+      rev = "8af234043059c857be27879bc547c141eafd5c13";
+      sha256 = "1ycb5zd9sw60ra53jpak1m73zwrjikwhrrh9q6266h1mlyns7zxm";
+    };
+  };
+
+  ipscrub = {
+    src = fetchFromGitHub {
+      owner = "masonicboom";
+      repo = "ipscrub";
+      rev = "v1.0.1";
+      sha256 = "0qcx15c8wbsmyz2hkmyy5yd7qn1n84kx9amaxnfxkpqi05vzm1zz";
+    } + "/ipscrub";
+    inputs = [ pkgs.libbsd ];
+  };
+
+  lua = {
+    src = fetchFromGitHub {
+      owner = "openresty";
+      repo = "lua-nginx-module";
+      rev = "v0.10.13";
+      sha256 = "19mpc76lfhyyvkfs2n08b4rc9cf2v7rm8fskkf60hsdcf6qna822";
+    };
+    inputs = [ pkgs.luajit ];
+    preConfigure = ''
+      export LUAJIT_LIB="${pkgs.luajit}/lib"
+      export LUAJIT_INC="${pkgs.luajit}/include/luajit-2.0"
+    '';
+  };
+
+  lua-upstream = {
+    src = fetchFromGitHub {
+      owner = "openresty";
+      repo = "lua-upstream-nginx-module";
+      rev = "v0.07";
+      sha256 = "1gqccg8airli3i9103zv1zfwbjm27h235qjabfbfqk503rjamkpk";
+    };
+    inputs = [ pkgs.luajit ];
+  };
+
+  modsecurity = {
+    src = "${pkgs.modsecurity_standalone.nginx}/nginx/modsecurity";
+    inputs = [ pkgs.curl pkgs.apr pkgs.aprutil pkgs.apacheHttpd pkgs.yajl ];
+    preConfigure = ''
+      export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${pkgs.aprutil.dev}/include/apr-1 -I${pkgs.apacheHttpd.dev}/include -I${pkgs.apr.dev}/include/apr-1 -I${pkgs.yajl}/include"
+    '';
+  };
+
+  modsecurity-nginx = {
+    src = fetchFromGitHub {
+      owner = "SpiderLabs";
+      repo = "ModSecurity-nginx";
+      rev = "v1.0.0";
+      sha256 = "0zzpdqhbdqqy8kjkszv0mrq6136ah9v3zwr1jbh312j8izmzdyi7";
+    };
+    inputs = [ pkgs.curl pkgs.geoip pkgs.libmodsecurity pkgs.libxml2 pkgs.lmdb pkgs.yajl ];
+  };
+
+  moreheaders = {
+    src = fetchFromGitHub {
+      owner = "openresty";
+      repo = "headers-more-nginx-module";
+      rev = "v0.33";
+      sha256 = "1cgdjylrdd69vlkwwmn018hrglzjwd83nqva1hrapgcfw12f7j53";
+    };
+  };
+
+  ngx_aws_auth = {
+    src = fetchFromGitHub {
+      owner = "anomalizer";
+      repo = "ngx_aws_auth";
+      rev = "2.1.1";
+      sha256 = "10z67g40w7wpd13fwxyknkbg3p6hn61i4v8xw6lh27br29v1y6h9";
+    };
+  };
+
+  opentracing = {
+    src =
+      let src' = fetchFromGitHub {
+        owner = "opentracing-contrib";
+        repo = "nginx-opentracing";
+        rev = "v0.7.0";
+        sha256 = "16jzxhhsyfjaxb50jy5py9ppscidfx1shvc29ihldp0zs6d8khma";
+      };
+      in "${src'}/opentracing";
+    inputs = [ pkgs.opentracing-cpp ];
+  };
+
+  pagespeed =
+    let
+      version = pkgs.psol.version;
+
+      moduleSrc = fetchFromGitHub {
+        owner  = "pagespeed";
+        repo   = "ngx_pagespeed";
+        rev    = "v${version}-stable";
+        sha256 = "0ry7vmkb2bx0sspl1kgjlrzzz6lbz07313ks2lr80rrdm2zb16wp";
+      };
+
+      ngx_pagespeed = pkgs.runCommand
+        "ngx_pagespeed"
+        {
+          meta = {
+            description = "PageSpeed module for Nginx";
+            homepage    = "https://developers.google.com/speed/pagespeed/module/";
+            license     = pkgs.stdenv.lib.licenses.asl20;
+          };
+        }
+        ''
+          cp -r "${moduleSrc}" "$out"
+          chmod -R +w "$out"
+          ln -s "${pkgs.psol}" "$out/psol"
+        '';
+    in {
+      src = ngx_pagespeed;
+      inputs = [ pkgs.zlib pkgs.libuuid ]; # psol deps
+    };
+
+  pam = {
+    src = fetchFromGitHub {
+      owner = "stogh";
+      repo = "ngx_http_auth_pam_module";
+      rev = "v1.5.1";
+      sha256 = "031q006bcv10dzxi3mzamqiyg14p48v0bzd5mrwz073pbf0ba2fl";
+    };
+    inputs = [ pkgs.pam ];
+  };
+
+  push-stream ={
+    src = fetchFromGitHub {
+      owner = "wandenberg";
+      repo = "nginx-push-stream-module";
+      rev = "0.5.4";
+      sha256 = "0izn7lqrp2zfl738aqa9i8c5lba97wkhcnqg8qbw3ipp5cysb2hr";
+    };
+  };
+
+  rtmp ={
+    src = fetchFromGitHub {
+      owner = "arut";
+      repo = "nginx-rtmp-module";
+      rev = "v1.2.1";
+      sha256 = "0na1aam176irz6w148hnvamqy1ilbn4abhdzkva0yrm35a3ksbzn";
+    };
+  };
+
+  set-misc = {
+    src = fetchFromGitHub {
+      owner = "openresty";
+      repo = "set-misc-nginx-module";
+      rev = "v0.32";
+      sha256 = "048a6jwinbjgxiprjj9ml3fdp0mhkx89g6ggams57fsx9m5vaxax";
+    };
+  };
+
+  shibboleth = {
+    src = fetchFromGitHub {
+      owner = "nginx-shib";
+      repo = "nginx-http-shibboleth";
+      rev = "48b70d87bf7796d7813813a837e52b3a86e6f6f4";
+      sha256 = "0k8xcln5sf0m4r0m550dkhl07zhncp285dpysk6r4v6vqzqmhzdc";
+    };
+  };
+
+  sla = {
+    src = fetchFromGitHub {
+      owner = "goldenclone";
+      repo = "nginx-sla";
+      rev = "7778f0125974befbc83751d0e1cadb2dcea57601";
+      sha256 = "1x5hm6r0dkm02ffny8kjd7mmq8przyd9amg2qvy5700x6lb63pbs";
+    };
+  };
+
+  statsd = {
+    src = fetchFromGitHub {
+      owner = "apcera";
+      repo = "nginx-statsd";
+      rev = "b970e40467a624ba710c9a5106879a0554413d15";
+      sha256 = "1x8j4i1i2ahrr7qvz03vkldgdjdxi6mx75mzkfizfcc8smr4salr";
+    };
+  };
+
+  stream-sts = {
+    src = fetchFromGitHub {
+      owner = "vozlt";
+      repo = "nginx-module-stream-sts";
+      rev = "v0.1.1";
+      sha256 = "1jdj1kik6l3rl9nyx61xkqk7hmqbncy0rrqjz3dmjqsz92y8zaya";
+    };
+  };
+
+  sts = {
+    src = fetchFromGitHub {
+      owner = "vozlt";
+      repo = "nginx-module-sts";
+      rev = "v0.1.1";
+      sha256 = "0nvb29641x1i7mdbydcny4qwlvdpws38xscxirajd2x7nnfdflrk";
+    };
+  };
+
+  sysguard = {
+    src = fetchFromGitHub {
+      owner = "vozlt";
+      repo = "nginx-module-sysguard";
+      rev = "e512897f5aba4f79ccaeeebb51138f1704a58608";
+      sha256 = "19c6w6wscbq9phnx7vzbdf4ay6p2ys0g7kp2rmc9d4fb53phrhfx";
+    };
+  };
+
+  upstream-check = {
+    src = fetchFromGitHub {
+      owner = "yaoweibin";
+      repo = "nginx_upstream_check_module";
+      rev = "9aecf15ec379fe98f62355c57b60c0bc83296f04";
+      sha256 = "1cjisxw1wykll683nw09k0i1nvzslp4dr59x58cvarpk43paim2y";
+    };
+  };
+
+  upstream-tarantool = {
+    src = fetchFromGitHub {
+      owner = "tarantool";
+      repo = "nginx_upstream_module";
+      rev = "v2.7";
+      sha256 = "05dwj0caj910p7kan2qjvm6x2x601igryhny2xzr47hhsk5q1cnx";
+    };
+    inputs = [ pkgs.msgpuck.dev pkgs.yajl ];
+  };
+
+  url = {
+    src = fetchFromGitHub {
+      owner = "vozlt";
+      repo = "nginx-module-url";
+      rev = "9299816ca6bc395625c3683fbd2aa7b916bfe91e";
+      sha256 = "0mk1gjmfnry6hgdsnlavww9bn7223idw50jlkhh5k00q5509w4ip";
+    };
+  };
+
+  vts = {
+    src = fetchFromGitHub {
+      owner = "vozlt";
+      repo = "nginx-module-vts";
+      rev = "v0.1.18";
+      sha256 = "1jq2s9k7hah3b317hfn9y3g1q4g4x58k209psrfsqs718a9sw8c7";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/nginx/stable.nix b/nixpkgs/pkgs/servers/http/nginx/stable.nix
new file mode 100644
index 000000000000..f4cb22a38f61
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/nginx/stable.nix
@@ -0,0 +1,6 @@
+{ callPackage, ... } @ args:
+
+callPackage ./generic.nix (args // {
+  version = "1.14.2";
+  sha256 = "15wppq12qmq8acjs35xfj61czhf9cdc0drnl5mm8hcg3aihryb80";
+})
diff --git a/nixpkgs/pkgs/servers/http/nginx/stable.upstream b/nixpkgs/pkgs/servers/http/nginx/stable.upstream
new file mode 100644
index 000000000000..c20139017436
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/nginx/stable.upstream
@@ -0,0 +1,8 @@
+url http://nginx.org/en/download.html
+version_link '.*-([0-9]+[.][0-9]*[02468]([.][0-9]+)*)[.]tar[.][a-z0-9]*$' 
+
+do_overwrite() {
+  ensure_hash
+  set_var_value version "$CURRENT_VERSION"
+  set_var_value sha256 "$CURRENT_HASH"
+}
diff --git a/nixpkgs/pkgs/servers/http/nix-binary-cache/default.nix b/nixpkgs/pkgs/servers/http/nix-binary-cache/default.nix
new file mode 100644
index 000000000000..479c9e41aa91
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/nix-binary-cache/default.nix
@@ -0,0 +1,61 @@
+{stdenv
+, coreutils, findutils, nix, xz, bzip2, gnused, gnugrep, openssl
+, lighttpd, iproute }:
+stdenv.mkDerivation rec {
+  version = "2014-06-29-1";
+  name = "nix-binary-cache-${version}";
+
+  phases = ["installPhase"];
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    substitute "${./nix-binary-cache.cgi.in}" "$out"/bin/nix-binary-cache.cgi \
+      --replace @out@ "$out/bin" \
+      --replace @shell@ "${stdenv.shell}" \
+      --replace @coreutils@ "${coreutils}/bin" \
+      --replace @findutils@ "${findutils}/bin" \
+      --replace @nix@ "${nix.out}/bin" \
+      --replace @xz@ "${xz.bin}/bin" \
+      --replace @bzip2@ "${bzip2.bin}/bin" \
+      --replace @gnused@ "${gnused}/bin" \
+      --replace @gnugrep@ "${gnugrep}/bin" \
+      --replace @openssl@ "${openssl.bin}/bin" \
+      --replace @lighttpd@ "${lighttpd}/sbin" \
+      --replace @iproute@ "${iproute}/sbin" \
+      --replace "xXxXx" "xXxXx"
+
+    chmod a+x "$out/bin/nix-binary-cache.cgi"
+
+    substitute "${./nix-binary-cache-start.in}" "$out"/bin/nix-binary-cache-start \
+      --replace @out@ "$out/bin" \
+      --replace @shell@ "${stdenv.shell}" \
+      --replace @coreutils@ "${coreutils}/bin" \
+      --replace @findutils@ "${findutils}/bin" \
+      --replace @nix@ "${nix.out}/bin" \
+      --replace @xz@ "${xz.bin}/bin" \
+      --replace @bzip2@ "${bzip2.bin}/bin" \
+      --replace @gnused@ "${gnused}/bin" \
+      --replace @gnugrep@ "${gnugrep}/bin" \
+      --replace @openssl@ "${openssl.bin}/bin" \
+      --replace @lighttpd@ "${lighttpd}/sbin" \
+      --replace @iproute@ "${iproute}/sbin" \
+      --replace "xXxXx" "xXxXx"
+
+    chmod a+x "$out/bin/nix-binary-cache-start"
+  '';
+
+  meta = {
+    description = ''A set of scripts to serve the Nix store as a binary cache'';
+    longDescription = ''
+      This package installs a CGI script that serves Nix store path in the 
+      binary cache format. It also installs a launcher called 
+      nix-binary-cache-start that can be run without any setup to launch
+      a binary cache and get the example arguments for its usage.
+    '';
+    maintainers = [stdenv.lib.maintainers.raskin];
+    license = stdenv.lib.licenses.gpl2Plus;
+    inherit version;
+    platforms = stdenv.lib.platforms.all;
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/nix-binary-cache/nix-binary-cache-start.in b/nixpkgs/pkgs/servers/http/nix-binary-cache/nix-binary-cache-start.in
new file mode 100644
index 000000000000..13b62a8829da
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/nix-binary-cache/nix-binary-cache-start.in
@@ -0,0 +1,117 @@
+#! @shell@
+
+parse_opts () {
+  while @coreutils@/test -n "$1" && @coreutils@/test "x$1" != x-- ; do 
+    case "$1" in
+      --store-dir)
+        shift;
+        echo "STORE_DIR='$1'"
+        shift;
+        ;;
+      --priority)
+        shift;
+        echo "PRIORITY=$1";
+        shift;
+        ;;
+      --compression)
+        shift;
+        echo "COMPRESSION=$1";
+        shift;
+        ;;
+      --key)
+        shift;
+        echo "KEY=${1#*:}"
+        echo "KEYNAME=${1%%:*}"
+        shift;
+        ;;
+      --nix-remote)
+        shift;
+        echo "NIX_REMOTE=$1"
+        shift;
+        ;;
+      --mass-query)
+        shift;
+        echo "MASS_QUERY=$1"
+        shift;
+        ;;
+      --port)
+        shift;
+        echo "PORT=$1"
+        shift;
+        ;;
+      --ipv6)
+        shift;
+	echo "USE_IPV6=enable"
+	;;
+      --help)
+        cat <<EOF >&2
+"$0": start the Nix binary cache serving the Nix store dynamically.
+
+Recognized options:
+
+--port           server port
+--store-dir      served Nix store
+
+--priority       binary cache priority
+--mass-query     0 or 1 - whether binary cache expects queries for nix-env -qas
+
+--compression    compression to use: bzip2 or xz
+--key            name:/path/to/key - key to use for narinfo signing
+
+--nix-remote     'daemon' or empty string '' - whether to use daemon for store
+                   operations
+
+--ipv6           enable ipv6
+
+--help           show help and exit
+EOF
+	exit 1;
+        ;;
+      *) shift ;;
+    esac;
+  done
+}
+
+workingdir="$(@coreutils@/mktemp -d)"
+cd "$workingdir"
+
+PORT=8080
+(echo "STORE_DIR=${NIX_STORE_DIR:-/nix/store}"; parse_opts "$@" 
+  ) > nix-binary-cache.conf || exit
+. "$workingdir/nix-binary-cache.conf"
+
+echo "
+server.port = $PORT
+server.modules = ( \"mod_cgi\", \"mod_setenv\", )
+server.document-root = \"$workingdir\"
+cgi.assign = ( \".cgi\" => \"@shell@\" )
+setenv.add-request-header = ( \"NIX_BINARY_CACHE_CONFIG\" => \"$workingdir/nix-binary-cache.conf\" )
+" > lighttpd.conf
+
+test -n "$USE_IPV6" && echo "
+\$SERVER[\"socket\"] == \"[::]:$PORT\" {
+server.use-ipv6 = \"enable\"
+}
+" >> lighttpd.conf
+
+cp @out@/nix-binary-cache.cgi . 
+cp @out@/nix-binary-cache.cgi ./nix-bc.cgi 
+
+ip="$(@iproute@/ip a | @gnugrep@/grep 'inet .* scope global' | @coreutils@/head -n 1)"
+ip="${ip%%/*}"
+ip="${ip##* }"
+
+url="http://$ip:$PORT/nix-bc.cgi?"
+
+echo "Working directory: $workingdir"
+echo
+echo "Address of the binary cache: $url"
+echo
+echo "Usage example: NIX_REMOTE= nix-store --option binary-caches '$url'"
+echo
+echo
+
+@lighttpd@/lighttpd -D -f "$workingdir/lighttpd.conf"
+
+cd /
+@coreutils@/rm -rf "$workingdir"
diff --git a/nixpkgs/pkgs/servers/http/nix-binary-cache/nix-binary-cache.cgi.in b/nixpkgs/pkgs/servers/http/nix-binary-cache/nix-binary-cache.cgi.in
new file mode 100644
index 000000000000..890e68765b40
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/nix-binary-cache/nix-binary-cache.cgi.in
@@ -0,0 +1,105 @@
+#! @shell@
+
+STORE_DIR="${NIX_STORE_DIR:-/nix/store}"
+MASS_QUERY=0
+PRIORITY=75
+COMPRESSION=bzip2
+KEY=
+KEYNAME=na
+
+export NIX_REMOTE=daemon
+
+config="${NIX_BINARY_CACHE_CONFIG:-${HTTP_NIX_BINARY_CACHE_CONFIG:-/etc/nix/nix-binary-cache.cgi.conf}}"
+config="$(cd "$(@coreutils@/dirname "$config")";
+  @coreutils@/pwd)/$(@coreutils@/basename "$config")"
+@coreutils@/test -e "$config" && . "$config"
+
+header(){
+	echo "Content-Type: text/plain; charset=utf-8"
+	echo
+}
+
+header404(){
+	echo "Status: 404 Not Found"
+	echo
+}
+
+clean_path() {
+	@gnused@/sed -re "s@^$STORE_DIR/?@@" | @findutils@/xargs
+}
+
+storeq(){
+	@nix@/nix-store -q "$@"
+}
+
+sign(){
+	test -n "$1" &&
+	  @coreutils@/sha256sum | @gnused@/sed -e 's/ .*//' |
+	  @openssl@/openssl rsautl -sign -inkey "$@" | @coreutils@/base64 -w 0
+}
+
+case "$QUERY_STRING" in
+	"")
+		header
+		echo "Hello, this is a dynamically-generated Nix binary cache"
+		;;
+	/debug)
+		header
+		set
+		;;
+	/nix-cache-info)
+		header
+		echo "StoreDir: $STORE_DIR"
+		echo "WantMassQuery: $MASS_QUERY"
+		echo "Priority: $PRIORITY"
+		;;
+	*.narinfo)
+		hash=${QUERY_STRING%.narinfo}
+		hash=${hash#/}
+		path="$(echo "$STORE_DIR/$hash-"* | @coreutils@/sort | @coreutils@/head -n 1)"
+		if [ -n "$path" ] && [ -e "$path" ]; then
+			header
+			info="$(
+			echo "StorePath: $path"
+			echo "URL: $(@coreutils@/basename "$path"
+			  ).nar.$COMPRESSION"
+			echo "Compression: $COMPRESSION"
+			echo "NarHash: $(storeq --hash "$path")"
+			echo "NarSize: $(storeq --size "$path")"
+			echo "References: $(storeq --references "$path" |
+			  @coreutils@/tac | clean_path )"
+			echo "Deriver: $(storeq --deriver "$path" |
+			  clean_path )"
+			)"
+			signature="$(echo "$info" | sign "$KEY")"
+
+			echo "$info"
+			echo "Signature: 1;$KEYNAME;$signature"
+
+		else
+			header404
+			exit 1
+		fi
+		;;
+	*.nar.xz)
+		path="$STORE_DIR${QUERY_STRING%.nar.xz}"
+		if [ -n "$path" ] && [ -e "$path" ]; then
+			header
+			@nix@/nix-store --dump "$path" | @xz@/xz
+		else
+			header404
+			exit 1
+		fi
+		;;
+	*.nar.bzip2)
+		path="$STORE_DIR${QUERY_STRING%.nar.bzip2}"
+		echo "$path" >&2;
+		if [ -n "$path" ] && [ -e "$path" ]; then
+			header
+			@nix@/nix-store --dump "$path" | @bzip2@/bzip2
+		else
+			header404
+			exit 1
+		fi
+		;;
+esac
diff --git a/nixpkgs/pkgs/servers/http/openresty/default.nix b/nixpkgs/pkgs/servers/http/openresty/default.nix
new file mode 100644
index 000000000000..1fe48e84fac7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/openresty/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, fetchurl, openssl, zlib, pcre, postgresql, libxml2, libxslt,
+gd, geoip, perl }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  name = "openresty-${version}";
+  version = "1.13.6.2";
+
+  src = fetchurl {
+    url = "https://openresty.org/download/openresty-${version}.tar.gz";
+    sha256 = "0hi9zw4344a4i636g3nbnnlm8qbnq37f50irhd1xncih4xc1jvll";
+  };
+
+  buildInputs = [ openssl zlib pcre libxml2 libxslt gd geoip postgresql ];
+  nativeBuildInputs = [ perl ];
+
+  NIX_CFLAGS_COMPILE = ["-I${libxml2.dev}/include/libxml2"];
+
+  preConfigure = ''
+    patchShebangs .
+  '';
+
+  configureFlags = [
+    "--with-pcre-jit"
+    "--with-http_ssl_module"
+    "--with-http_v2_module"
+    "--with-http_realip_module"
+    "--with-http_addition_module"
+    "--with-http_xslt_module"
+    "--with-http_image_filter_module"
+    "--with-http_geoip_module"
+    "--with-http_sub_module"
+    "--with-http_dav_module"
+    "--with-http_flv_module"
+    "--with-http_mp4_module"
+    "--with-http_gunzip_module"
+    "--with-http_gzip_static_module"
+    "--with-http_auth_request_module"
+    "--with-http_random_index_module"
+    "--with-http_secure_link_module"
+    "--with-http_degradation_module"
+    "--with-http_stub_status_module"
+    "--with-http_postgres_module"
+    "--with-ipv6"
+  ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    ln -s $out/luajit/bin/luajit-2.1.0-beta3 $out/bin/luajit-openresty
+    ln -s $out/nginx/sbin/nginx $out/bin/nginx
+  '';
+
+  meta = {
+    description = "A fast web application server built on Nginx";
+    homepage    = http://openresty.org;
+    license     = licenses.bsd2;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ thoughtpolice lblasc ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/pshs/default.nix b/nixpkgs/pkgs/servers/http/pshs/default.nix
new file mode 100644
index 000000000000..c38ca046a35b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/pshs/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, libevent, file, qrencode, miniupnpc }:
+
+stdenv.mkDerivation rec {
+  name = "pshs-${version}";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "mgorny";
+    repo = "pshs";
+    rev = "v${version}";
+    sha256 = "04l03myh99npl78y8nss053gnc7k8q60vdbdpml19sshmwaw3fgi";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ libevent file qrencode miniupnpc ];
+
+  # SSL requires libevent at 2.1 with ssl support
+  configureFlags = [ "--disable-ssl" ];
+
+  meta = {
+    description = "Pretty small HTTP server - a command-line tool to share files";
+    homepage = https://github.com/mgorny/pshs;
+    license = stdenv.lib.licenses.bsd3;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/redstore/default.nix b/nixpkgs/pkgs/servers/http/redstore/default.nix
new file mode 100644
index 000000000000..7d592d0256b7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/redstore/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, redland, pkgconfig, gmp, zlib, librdf_raptor2
+  , librdf_rasqal }:
+
+stdenv.mkDerivation rec {
+  name = "redstore-0.5.4";
+
+  src = fetchurl {
+    url = "https://www.aelius.com/njh/redstore/${name}.tar.gz";
+    sha256 = "0hc1fjfbfvggl72zqx27v4wy84f5m7bp4dnwd8g41aw8lgynbgaq";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gmp redland zlib librdf_raptor2 librdf_rasqal ];
+
+  preConfigure = ''
+    # Define _XOPEN_SOURCE to enable, e.g., getaddrinfo.
+    configureFlagsArray+=(
+      "CFLAGS=-D_XOPEN_SOURCE=600 -I${librdf_raptor2}/include/raptor2 -I${librdf_rasqal}/include/rasqal"
+    )
+  '';
+
+  meta = {
+    description = "An HTTP interface to Redland RDF store";
+    homepage = https://www.aelius.com/njh/redstore/;
+    maintainers = [ stdenv.lib.maintainers.raskin ];
+    platforms = with stdenv.lib.platforms;
+      linux ++ freebsd ++ gnu;
+    license = stdenv.lib.licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/spawn-fcgi/default.nix b/nixpkgs/pkgs/servers/http/spawn-fcgi/default.nix
new file mode 100644
index 000000000000..b5d5d5f7992d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/spawn-fcgi/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchsvn, autoconf, automake }:
+
+stdenv.mkDerivation rec {
+  name = "spawn-fcgi-${version}";
+  version = "1.6.4";
+
+  src = fetchsvn {
+    url = "svn://svn.lighttpd.net/spawn-fcgi/tags/spawn-fcgi-${version}";
+    sha256 = "07r6nwbg4881mdgp0hqh80c4x9wb7jg6cgc84ghwhfbd2abc2iq5";
+  };
+
+  buildInputs = [ automake autoconf ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with stdenv.lib; {
+    homepage    = "http://redmine.lighttpd.net/projects/spawn-fcgi";
+    description = "Provides an interface to external programs that support the FastCGI interface";
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ cstrahan ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/tengine/default.nix b/nixpkgs/pkgs/servers/http/tengine/default.nix
new file mode 100644
index 000000000000..36f326d5590b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/tengine/default.nix
@@ -0,0 +1,85 @@
+{ stdenv, fetchurl, openssl, zlib, pcre, libxml2, libxslt
+, gd, geoip
+, withDebug ? false
+, withMail ? false
+, withIPv6 ? true
+, modules ? []
+, ...
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  version = "2.2.2";
+  name = "tengine-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/alibaba/tengine/archive/${name}.tar.gz";
+    sha256 = "1vq73wsldvj7rc61ag85pvnaacrrq9rs0pfqv71z5iyvb5r3bxc2";
+  };
+
+  buildInputs =
+    [ openssl zlib pcre libxml2 libxslt gd geoip ]
+    ++ concatMap (mod: mod.inputs or []) modules;
+
+  configureFlags = [
+    "--with-http_ssl_module"
+    "--with-http_v2_module"
+    "--with-http_realip_module"
+    "--with-http_addition_module"
+    "--with-http_xslt_module"
+    "--with-http_geoip_module"
+    "--with-http_sub_module"
+    "--with-http_dav_module"
+    "--with-http_flv_module"
+    "--with-http_mp4_module"
+    "--with-http_gunzip_module"
+    "--with-http_gzip_static_module"
+    "--with-http_auth_request_module"
+    "--with-http_concat_module"
+    "--with-http_random_index_module"
+    "--with-http_secure_link_module"
+    "--with-http_degradation_module"
+    "--with-http_stub_status_module"
+    "--with-http_sysguard_module"
+    "--with-threads"
+    "--with-pcre-jit"
+    "--with-http_slice_module"
+  ] ++ optional withDebug [
+    "--with-debug"
+  ] ++ optional withMail [
+    "--with-mail"
+    "--with-mail_ssl_module"
+  ] ++ optional (withMail != true) [
+    "--without-mail_pop3_module"
+    "--without-mail_imap_module"
+    "--without-mail_smtp_module"
+  ] ++ optional withIPv6 [
+    "--with-ipv6"
+  ] ++ optional (gd != null) "--with-http_image_filter_module"
+    ++ optional (with stdenv.hostPlatform; isLinux || isFreeBSD) "--with-file-aio"
+    ++ map (mod: "--add-module=${mod.src}") modules;
+
+  NIX_CFLAGS_COMPILE = [
+    "-I${libxml2.dev}/include/libxml2"
+    "-Wno-error=implicit-fallthrough"
+  ] ++ optional stdenv.isDarwin "-Wno-error=deprecated-declarations";
+
+  preConfigure = (concatMapStringsSep "\n" (mod: mod.preConfigure or "") modules);
+
+  hardeningEnable = optional (!stdenv.isDarwin) "pie";
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    mv $out/sbin $out/bin
+  '';
+
+  meta = {
+    description = "A web server based on Nginx and has many advanced features, originated by Taobao.";
+    homepage    = https://tengine.taobao.org;
+    license     = licenses.bsd2;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ izorkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/thttpd/default.nix b/nixpkgs/pkgs/servers/http/thttpd/default.nix
new file mode 100644
index 000000000000..6e012c98737e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/thttpd/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "thttpd-${version}";
+  version = "2.29";
+
+  src = fetchurl {
+    url = "https://acme.com/software/thttpd/${name}.tar.gz";
+    sha256 = "15x3h4b49wgfywn82i3wwbf38mdns94mbi4ma9xiwsrjv93rzh4r";
+  };
+
+  prePatch = ''
+    sed -i -e 's/getline/getlineX/' extras/htpasswd.c
+    sed -i -e 's/chmod 2755/chmod 755/' extras/Makefile.in
+  '';
+
+  preInstall = ''
+    mkdir -p "$out/man/man1"
+    sed -i -e 's/-o bin -g bin *//' Makefile
+    sed -i -e '/chgrp/d' extras/Makefile
+  '';
+
+  meta = {
+    description = "Tiny/turbo/throttling HTTP server";
+    homepage = http://www.acme.com/software/thttpd/;
+    license = stdenv.lib.licenses.bsd2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/tomcat/axis2/builder.sh b/nixpkgs/pkgs/servers/http/tomcat/axis2/builder.sh
new file mode 100644
index 000000000000..2e36367e9dcf
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/tomcat/axis2/builder.sh
@@ -0,0 +1,15 @@
+source $stdenv/setup
+
+unzip $src
+cd axis2-*
+mkdir -p $out
+cp -av * $out
+cd webapp
+ant
+cd ..
+mkdir -p $out/webapps
+cp dist/axis2.war $out/webapps
+cd $out/webapps
+mkdir axis2
+cd axis2
+unzip ../axis2.war
diff --git a/nixpkgs/pkgs/servers/http/tomcat/axis2/default.nix b/nixpkgs/pkgs/servers/http/tomcat/axis2/default.nix
new file mode 100644
index 000000000000..7f14f6fff195
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/tomcat/axis2/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, apacheAnt, jdk, unzip }:
+
+stdenv.mkDerivation rec {
+  name = "axis2-${version}";
+  version = "1.6.4";
+
+  src = fetchurl {
+    url = "http://apache.proserve.nl/axis/axis2/java/core/${version}/${name}-bin.zip";
+    sha256 = "12ir706dn95567j6lkxdwrh28vnp6292h59qwjyqjm7ckglkmgyr";
+  };
+
+  buildInputs = [ unzip apacheAnt jdk ];
+  builder = ./builder.sh;
+
+  meta = {
+    description = "Web Services / SOAP / WSDL engine, the successor to the widely used Apache Axis SOAP stack";
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/tomcat/default.nix b/nixpkgs/pkgs/servers/http/tomcat/default.nix
new file mode 100644
index 000000000000..8fe34cd6183d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/tomcat/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, lib, fetchurl }:
+
+let
+
+  common = { versionMajor, versionMinor, sha256 }: stdenv.mkDerivation (rec {
+    name = "apache-tomcat-${version}";
+    version = "${versionMajor}.${versionMinor}";
+
+    src = fetchurl {
+      url = "mirror://apache/tomcat/tomcat-${versionMajor}/v${version}/bin/${name}.tar.gz";
+      inherit sha256;
+    };
+
+    outputs = [ "out" "webapps" ];
+    installPhase =
+      ''
+        mkdir $out
+        mv * $out
+        mkdir -p $webapps/webapps
+        mv $out/webapps $webapps/
+      '';
+
+    meta = {
+      homepage = https://tomcat.apache.org/;
+      description = "An implementation of the Java Servlet and JavaServer Pages technologies";
+      platforms = with lib.platforms; all;
+      maintainers = with lib.maintainers; [ danbst ];
+      license = [ lib.licenses.asl20 ];
+    };
+  });
+
+in {
+  tomcat7 = common {
+    versionMajor = "7";
+    versionMinor = "0.82";
+    sha256 = "0vb7c5i50ral4rr39ss95k7cxnzd7fs21zd7f97d1f3qslzwl69g";
+  };
+
+  tomcat8 = common {
+    versionMajor = "8";
+    versionMinor = "0.47";
+    sha256 = "0xv4v3i08rwzfmz7rkhglq5cbjgnfava8dw0i33vsp7dk162a4g4";
+  };
+
+  tomcat85 = common {
+    versionMajor = "8";
+    versionMinor = "5.23";
+    sha256 = "1qnww70x75c0qf2wn8mkpz5lszggjnh78dpb4chyw2fnbm3wxain";
+  };
+
+  tomcat9 = common {
+    versionMajor = "9";
+    versionMinor = "0.2";
+    sha256 = "0aaykzi0b2xsdmjp60ihcjzh1m95p0a79kn5l2v7vgbkyg449638";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/tomcat/jdbc/mysql/builder.sh b/nixpkgs/pkgs/servers/http/tomcat/jdbc/mysql/builder.sh
new file mode 100644
index 000000000000..14829c5e85d8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/tomcat/jdbc/mysql/builder.sh
@@ -0,0 +1,4 @@
+source $stdenv/setup
+
+mkdir -p $out/lib
+ln -s $mysql_jdbc/share/java/mysql-connector-java.jar $out/lib/mysql-connector-java.jar
diff --git a/nixpkgs/pkgs/servers/http/tomcat/jdbc/mysql/default.nix b/nixpkgs/pkgs/servers/http/tomcat/jdbc/mysql/default.nix
new file mode 100644
index 000000000000..d070a9f17404
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/tomcat/jdbc/mysql/default.nix
@@ -0,0 +1,13 @@
+{ stdenv, mysql_jdbc }:
+
+stdenv.mkDerivation {
+  name = "tomcat-mysql-jdbc";
+  builder = ./builder.sh;
+  buildInputs = [ mysql_jdbc ];
+
+  inherit mysql_jdbc;
+
+  meta = {
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/unit/default.nix b/nixpkgs/pkgs/servers/http/unit/default.nix
new file mode 100644
index 000000000000..a3948bb69088
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/unit/default.nix
@@ -0,0 +1,69 @@
+{ stdenv, fetchFromGitHub, which
+, withPython ? true, python
+, withPHP71 ? false, php71
+, withPHP72 ? true, php72
+, withPHP73 ? false, php73
+, withPerl ? true, perl
+, withPerldevel ? false, perldevel
+, withRuby_2_3 ? false, ruby_2_3
+, withRuby_2_4 ? false, ruby_2_4
+, withRuby ? true, ruby
+, withSSL ? true, openssl ? null
+, withIPv6 ? true
+, withDebug ? false
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  version = "1.7";
+  name = "unit-${version}";
+
+  src = fetchFromGitHub {
+    owner = "nginx";
+    repo = "unit";
+    rev = "${version}";
+    sha256 = "1klwricr0mxhw5wka35vnl919821vcvaf5w3ixvkbxaisml19qq4";
+  };
+
+  nativeBuildInputs = [ which ];
+
+  buildInputs = [ ]
+    ++ optional withPython python
+    ++ optional withPHP71 php71
+    ++ optional withPHP72 php72
+    ++ optional withPHP73 php73
+    ++ optional withPerl perl
+    ++ optional withPerldevel perldevel
+    ++ optional withRuby_2_3 ruby_2_3
+    ++ optional withRuby_2_4 ruby_2_4
+    ++ optional withRuby ruby
+    ++ optional withSSL openssl;
+
+  configureFlags = [
+    "--control=unix:/run/control.unit.sock"
+    "--pid=/run/unit.pid"
+  ] ++ optional withSSL     [ "--openssl" ]
+    ++ optional (!withIPv6) [ "--no-ipv6" ]
+    ++ optional withDebug   [ "--debug" ];
+
+  postConfigure = ''
+    ${optionalString withPython     "./configure python  --module=python    --config=${python}/bin/python-config  --lib-path=${python}/lib"}
+    ${optionalString withPHP71      "./configure php     --module=php71     --config=${php71.dev}/bin/php-config  --lib-path=${php71}/lib"}
+    ${optionalString withPHP72      "./configure php     --module=php72     --config=${php72.dev}/bin/php-config  --lib-path=${php72}/lib"}
+    ${optionalString withPHP73      "./configure php     --module=php73     --config=${php73.dev}/bin/php-config  --lib-path=${php73}/lib"}
+    ${optionalString withPerl       "./configure perl    --module=perl      --perl=${perl}/bin/perl"}
+    ${optionalString withPerldevel  "./configure perl    --module=perl529   --perl=${perldevel}/bin/perl"}
+    ${optionalString withRuby_2_3   "./configure ruby    --module=ruby23    --ruby=${ruby_2_3}/bin/ruby"}
+    ${optionalString withRuby_2_4   "./configure ruby    --module=ruby24    --ruby=${ruby_2_4}/bin/ruby"}
+    ${optionalString withRuby       "./configure ruby    --module=ruby      --ruby=${ruby}/bin/ruby"}
+  '';
+
+  meta = {
+    description = "Dynamic web and application server, designed to run applications in multiple languages.";
+    homepage    = https://unit.nginx.org/;
+    license     = licenses.asl20;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ izorkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/webfs/default.nix b/nixpkgs/pkgs/servers/http/webfs/default.nix
new file mode 100644
index 000000000000..3fb3890f9c4e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/webfs/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, openssl }:
+let
+  # Let's not pull the whole apache httpd package
+  mime_file = fetchurl {
+    url = https://raw.githubusercontent.com/apache/httpd/906e419c1f703360e2e8ec077b393347f993884f/docs/conf/mime.types;
+    sha256 = "ef972fc545cbff4c0daa2b2e6b440859693b3c10435ee90f10fa6fffad800c16";
+  };
+in
+stdenv.mkDerivation rec {
+  name = "webfs-${version}";
+  version = "1.21";
+
+  src = fetchurl {
+    url = "https://www.kraxel.org/releases/webfs/${name}.tar.gz";
+    sha256 = "98c1cb93473df08e166e848e549f86402e94a2f727366925b1c54ab31064a62a";
+  };
+
+  patches = [ ./ls.c.patch ];
+
+  buildInputs = [ openssl ];
+
+  makeFlags = [
+    "mimefile=${mime_file}"
+    "prefix=$(out)"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "HTTP server for purely static content";
+    homepage    = http://linux.bytesex.org/misc/webfs.html;
+    license     = licenses.gpl2;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/webfs/ls.c.patch b/nixpkgs/pkgs/servers/http/webfs/ls.c.patch
new file mode 100644
index 000000000000..78b83b725887
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/webfs/ls.c.patch
@@ -0,0 +1,13 @@
+# Source: homebrew
+# https://raw.githubusercontent.com/Homebrew/patches/0518a6d1/webfs/patch-ls.c
+--- ./ls.c.orig	Fri Oct 15 14:20:50 2004
++++ ./ls.c	Fri Oct 15 14:21:13 2004
+@@ -160,7 +160,7 @@
+     return buf;
+ }
+ 
+-#if !defined(__FreeBSD__) && !defined(__OpenBSD__)
++#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__APPLE__)
+ static void strmode(mode_t mode, char *dest)
+ {
+     static const char *rwx[] = {
diff --git a/nixpkgs/pkgs/servers/http/webhook/default.nix b/nixpkgs/pkgs/servers/http/webhook/default.nix
new file mode 100644
index 000000000000..5d6b47d28b5d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/webhook/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "webhook-${version}";
+  version = "2.6.8";
+
+  goPackagePath = "github.com/adnanh/webhook";
+  excludedPackages = [ "test" ];
+
+  src = fetchFromGitHub {
+    owner = "adnanh";
+    repo = "webhook";
+    rev = version;
+    sha256 = "05q6nv04ml1gr4k79czg03i3ifl05xq29iapkgrl3k0a36czxlgs";
+  };
+
+  meta = with lib; {
+    homepage = https://github.com/adnanh/webhook;
+    license = [ licenses.mit ];
+    description = "incoming webhook server that executes shell commands";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/winstone/default.nix b/nixpkgs/pkgs/servers/http/winstone/default.nix
new file mode 100644
index 000000000000..6a92c0a228af
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/winstone/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "winstone-${version}";
+  version = "0.9.10";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/winstone/${name}.jar";
+    sha256 = "17xvq3yk95335c6ag1bmbmxlvh7gqq35ifi64r2l6rnvrf6pqyan";
+  };
+
+  phases = [ "installPhase" ];
+
+  installPhase = ''
+    mkdir -p $out/lib
+    cp $src $out/lib/winstone.jar
+  '';
+
+  meta = {
+    homepage = http://winstone.sourceforge.net/;
+    description = "A simple Java Servlet container";
+    license = stdenv.lib.licenses.cddl;
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [ stdenv.lib.maintainers.rickynils ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/http/yaws/default.nix b/nixpkgs/pkgs/servers/http/yaws/default.nix
new file mode 100644
index 000000000000..827f6122b573
--- /dev/null
+++ b/nixpkgs/pkgs/servers/http/yaws/default.nix
@@ -0,0 +1,35 @@
+{stdenv, fetchurl, erlang, pam, perl }:
+
+stdenv.mkDerivation rec {
+  name = "yaws-${version}";
+  version = "2.0.6";
+
+  src = fetchurl {
+    url = "http://yaws.hyber.org/download/${name}.tar.gz";
+    sha256 = "03nh97g7smsgm6sw5asssmlq7zgx6y2gnn7jn0lv2x5mkf5nzyb9";
+  };
+
+  # The tarball includes a symlink yaws -> yaws-1.95, which seems to be
+  # necessary for importing erlang files
+  unpackPhase = ''
+    tar xzf $src
+    cd $name
+  '';
+
+  configureFlags = [ "--with-extrainclude=${pam}/include/security" ];
+
+  buildInputs = [ erlang pam perl ];
+
+  postInstall = ''
+    sed -i "s#which #type -P #" $out/bin/yaws
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A high performance HTTP 1.1 server in Erlang";
+    homepage = http://yaws.hyber.org;
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ goibhniu the-kenny ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/hydron/default.nix b/nixpkgs/pkgs/servers/hydron/default.nix
new file mode 100644
index 000000000000..c96eed7a57b3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/hydron/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, pkgconfig, ffmpeg-full, graphicsmagick
+, quicktemplate, go-bindata, easyjson }:
+
+buildGoPackage rec {
+  name = "hydron-unstable-${version}";
+  version = "2018-10-08";
+  goPackagePath = "github.com/bakape/hydron";
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "bakape";
+    repo = "hydron";
+    rev = "0a834bcaf9af3a6bac8873fad981aa3736115258";
+    sha256 = "154s1jjcdcwaxial2gsxaqb8bc1hwagz844ld2jr928jxj7ffqww";
+  };
+
+  enableParallelBuilding = true;
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ ffmpeg-full graphicsmagick quicktemplate go-bindata easyjson ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/bakape/hydron";
+    description = "High performance media tagger and organizer";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ chiiruno ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/hydron/deps.nix b/nixpkgs/pkgs/servers/hydron/deps.nix
new file mode 100644
index 000000000000..92ac9a8325d9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/hydron/deps.nix
@@ -0,0 +1,102 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/Masterminds/squirrel";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Masterminds/squirrel";
+      rev = "e5bf00f96d4a5779be0d78f7565598856cae9b47";
+      sha256 = "13fkdc4kbdmbl42i80lm5x9aqnwlhj2c6s6y5vsblmw042p7012q";
+    };
+  }
+  {
+    goPackagePath = "github.com/bakape/thumbnailer";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bakape/thumbnailer";
+      rev = "f191a43e9c3c7c9522a67dd81ed1aec9cea0280d";
+      sha256 = "065qxhc83ncfxl813gm2f80pydkilnyim0q4wv08xm4gz3010s1x";
+    };
+  }
+  {
+    goPackagePath = "github.com/dimfeld/httptreemux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dimfeld/httptreemux";
+      rev = "0ffa82afd135e2aafd48602dc46843cb86304f7d";
+      sha256 = "0akariyk9igr25rbjkvq7v1hwx8llld6d2dalkdla9jsh7iw6ddj";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/handlers";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/handlers";
+      rev = "350d97a79266938cd77a9192b7d995132d4e2b5b";
+      sha256 = "1rk69bnhcp4s4cv7hwsafag8d3fj1mgxli0bkazc69ig90a71h1b";
+    };
+  }
+  {
+    goPackagePath = "github.com/lann/builder";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lann/builder";
+      rev = "47ae307949d02aa1f1069fdafc00ca08e1dbabac";
+      sha256 = "1kg9jy1rciznj627hafpq2mi7hr5d3ssgqcpwrm3bnlk9sqnydil";
+    };
+  }
+  {
+    goPackagePath = "github.com/lann/ps";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lann/ps";
+      rev = "62de8c46ede02a7675c4c79c84883eb164cb71e3";
+      sha256 = "10yhcyymypvdiiipchsp80jbglk8c4r7lq7h54v9f4mxmvz6xgf7";
+    };
+  }
+  {
+    goPackagePath = "github.com/lib/pq";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lib/pq";
+      rev = "9eb73efc1fcc404148b56765b0d3f61d9a5ef8ee";
+      sha256 = "17wkjdz265iqf92gj3ljslvjcqvkfblw11jdq2scc3kp1hcsfr10";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-sqlite3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-sqlite3";
+      rev = "6a9185d7b1f12363e2c904449d374b63b6093b16";
+      sha256 = "1yb04vhzkaxnm11i34lpcdgzmcydfnlky3xxj9q2hm1wd7hn3hki";
+    };
+  }
+  {
+    goPackagePath = "github.com/valyala/bytebufferpool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/valyala/bytebufferpool";
+      rev = "cdfbe9377474227bb42120c1e22fd4433e7f69bf";
+      sha256 = "0c6cixd85dvl2gvs7sdh0k2wm8r3grl4fw0jg4w7d78cp8s2k7ag";
+    };
+  }
+  {
+    goPackagePath = "github.com/valyala/quicktemplate";
+    fetch = {
+      type = "git";
+      url = "https://github.com/valyala/quicktemplate";
+      rev = "4c04039b1358b0f49af22a699f9193f05d80be40";
+      sha256 = "1qf7wpalk3n2jmcc2sw05cnwysl4rx986avykbfic5wq4fgxh9a5";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "351d144fa1fc0bd934e2408202be0c29f25e35a0";
+      sha256 = "1c5x25qjyz83y92bq0lll5kmznyi3m02wd4c54scgf0866gy938k";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/hylafaxplus/config.site b/nixpkgs/pkgs/servers/hylafaxplus/config.site
new file mode 100644
index 000000000000..7c8014449216
--- /dev/null
+++ b/nixpkgs/pkgs/servers/hylafaxplus/config.site
@@ -0,0 +1,20 @@
+@config_maxgid@
+DIR_BIN="@out_@/bin"
+DIR_FONTMAP="@out_@/share/ghostscript/@ghostscript_version@"
+DIR_LIB="@out_@/lib"
+DIR_LIBDATA="@out_@/spool/etc"
+DIR_LIBEXEC="@out_@/spool/bin"
+DIR_LOCKS=/var/lock
+DIR_MAN="@out_@/share/man"
+DIR_SBIN="@out_@/spool/bin"
+DIR_SPOOL="@out_@/spool"
+FONTMAP="@ghostscript@/share/ghostscript/@ghostscript_version@"
+PATH_AFM="@ghostscript@/share/ghostscript/fonts"
+PATH_DPSRIP="@out_@/spool/bin/ps2fax"
+PATH_EGETTY="@coreutils@/bin/false"
+PATH_GSRIP="@ghostscript@/bin/gs"
+PATH_IMPRIP="@coreutils@/bin/false"
+PATH_SENDMAIL="@coreutils@/bin/false"
+PATH_VGETTY="@coreutils@/bin/false"
+SYSVINIT=no
+TIFFBIN="@libtiff@/bin"
diff --git a/nixpkgs/pkgs/servers/hylafaxplus/default.nix b/nixpkgs/pkgs/servers/hylafaxplus/default.nix
new file mode 100644
index 000000000000..dc53ee36f702
--- /dev/null
+++ b/nixpkgs/pkgs/servers/hylafaxplus/default.nix
@@ -0,0 +1,95 @@
+{ stdenv
+, lib
+, fakeroot
+, fetchurl
+, libfaketime
+, substituteAll
+## runtime dependencies
+, coreutils
+, file
+, findutils
+, gawk
+, ghostscript
+, gnugrep
+, gnused
+, libtiff
+, psmisc
+, sharutils
+, utillinux
+, zlib
+## optional packages (using `null` disables some functionality)
+, jbigkit ? null
+, lcms2 ? null  # for colored faxes
+, openldap ? null
+, pam ? null
+## system-dependent settings that have to be hardcoded
+, maxgid ? 65534  # null -> try to auto-detect (bad on linux)
+, maxuid ? 65534  # null -> hardcoded value 60002
+}:
+
+let
+
+  name = "hylafaxplus-${version}";
+  version = "5.6.1";
+  sha256 = "100jcnkf44g659fh732a3ic2ik6l619cv0zhhp37n2kaydv876s1";
+
+  configSite = substituteAll {
+    name = "hylafaxplus-config.site";
+    src = ./config.site;
+    config_maxgid = lib.optionalString (maxgid!=null) ''CONFIG_MAXGID=${builtins.toString maxgid}'';
+    ghostscript_version = ghostscript.version;
+    out_ = "@out@";  # "out" will be resolved in post-install.sh
+    inherit coreutils ghostscript libtiff;
+  };
+
+  postPatch = substituteAll {
+    name = "hylafaxplus-post-patch.sh";
+    src = ./post-patch.sh;
+    inherit configSite;
+    maxuid = lib.optionalString (maxuid!=null) (builtins.toString maxuid);
+    faxcover_binpath = lib.makeBinPath
+      [stdenv.shellPackage coreutils];
+    faxsetup_binpath = lib.makeBinPath
+      [stdenv.shellPackage coreutils findutils gnused gnugrep gawk];
+  };
+
+  postInstall = substituteAll {
+    name = "hylafaxplus-post-install.sh";
+    src = ./post-install.sh;
+    inherit fakeroot libfaketime;
+  };
+
+in
+
+stdenv.mkDerivation {
+  inherit name version;
+  src = fetchurl {
+    url = "mirror://sourceforge/hylafax/hylafax-${version}.tar.gz";
+    inherit sha256;
+  };
+  # Note that `configure` (and maybe `faxsetup`) are looking
+  # for a couple of standard binaries in the `PATH` and
+  # hardcode their absolute paths in the new package.
+  buildInputs = [
+    file  # for `file` command
+    ghostscript
+    libtiff
+    psmisc  # for `fuser` command
+    sharutils  # for `uuencode` command
+    utillinux  # for `agetty` command
+    zlib
+    jbigkit  # optional
+    lcms2  # optional
+    openldap  # optional
+    pam  # optional
+  ];
+  postPatch = ''. ${postPatch}'';
+  dontAddPrefix = true;
+  postInstall = ''. ${postInstall}'';
+  postInstallCheck = ''. ${./post-install-check.sh}'';
+  meta.description = "enterprise-class system for sending and receiving facsimiles";
+  meta.homepage = http://hylafax.sourceforge.net;
+  meta.license = lib.licenses.bsd3;
+  meta.maintainers = [ lib.maintainers.yarny ];
+  meta.platforms = lib.platforms.linux;
+}
diff --git a/nixpkgs/pkgs/servers/hylafaxplus/post-install-check.sh b/nixpkgs/pkgs/servers/hylafaxplus/post-install-check.sh
new file mode 100644
index 000000000000..2850738edccc
--- /dev/null
+++ b/nixpkgs/pkgs/servers/hylafaxplus/post-install-check.sh
@@ -0,0 +1,7 @@
+# check if the package contains all the files needed
+for x in faxq faxquit hfaxd faxcron faxqclean faxgetty
+do
+  test -x "$out/spool/bin/$x"
+done
+test -d "$out/spool/config"
+test -f "$out/spool/etc/setup.cache"
diff --git a/nixpkgs/pkgs/servers/hylafaxplus/post-install.sh b/nixpkgs/pkgs/servers/hylafaxplus/post-install.sh
new file mode 100644
index 000000000000..ddc7c3f85eda
--- /dev/null
+++ b/nixpkgs/pkgs/servers/hylafaxplus/post-install.sh
@@ -0,0 +1,24 @@
+# Parts of the `install` make target don't
+# dare to set file modes (or owners), but put the
+# needed commands in a new file called `root.sh`.
+# We execute the `chmod` commands of
+# this script to set execute bits.
+sed '/chown/d;/chgrp/d' --in-place root.sh
+. root.sh
+
+# We run `faxsetup` to prepare some config files
+# that the admin would have to create otherwise.
+# Since `faxsetup` is quite picky about its environment,
+# we have to prepare some dummy files.
+# `faxsetup` stores today's date in the output files,
+# so we employ faketime to simulate a deterministic date.
+echo "uucp:x:0" >> "$TMPDIR/passwd.dummy"  # dummy uucp user
+touch "$out/spool/etc/config.dummy"  # dummy modem config
+mkdir "$TMPDIR/lock.dummy"  # dummy lock dir
+"@libfaketime@/bin/faketime" -f "$(date --utc --date=@$SOURCE_DATE_EPOCH '+%F %T')" \
+  "@fakeroot@/bin/fakeroot" -- \
+  "$out/spool/bin/faxsetup" -with-DIR_LOCKS="$TMPDIR/lock.dummy" -with-PASSWD="$TMPDIR/passwd.dummy"
+rm "$out/spool/etc/config.dummy"
+
+# Ensure all binaries are reachable within the spooling area.
+ln --symbolic --target-directory="$out/spool/bin/" "$out/bin/"*
diff --git a/nixpkgs/pkgs/servers/hylafaxplus/post-patch.sh b/nixpkgs/pkgs/servers/hylafaxplus/post-patch.sh
new file mode 100644
index 000000000000..6ec5937147e2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/hylafaxplus/post-patch.sh
@@ -0,0 +1,25 @@
+# `configure` (maybe others) set `POSIXLY_CORRECT`, which
+# breaks the gcc wrapper script of nixpkgs (maybe others).
+# We simply un-export `POSIXLY_CORRECT` after each export so
+# its effects don't apply within nixpkgs wrapper scripts.
+grep -rlF POSIXLY_CORRECT | xargs \
+  sed '/export *POSIXLY_CORRECT/a export -n POSIXLY_CORRECT' -i
+
+# Replace strange default value for the nobody account.
+if test -n "@maxuid@"
+then
+  for f in util/faxadduser.c hfaxd/manifest.h
+  do
+    substituteInPlace "$f" --replace 60002 "@maxuid@"
+  done
+fi
+
+# Replace hardcoded `PATH` variables with proper paths.
+# Note: `findutils` is needed for `faxcron`.
+substituteInPlace faxcover/edit-faxcover.sh.in \
+  --replace 'PATH=/bin' 'PATH="@faxcover_binpath@"'
+substituteInPlace etc/faxsetup.sh.in \
+  --replace 'PATH=/bin' 'PATH="@faxsetup_binpath@"'
+
+# Create `config.site`
+substitute "@configSite@" config.site --subst-var out
diff --git a/nixpkgs/pkgs/servers/icecast/default.nix b/nixpkgs/pkgs/servers/icecast/default.nix
new file mode 100644
index 000000000000..55ec611d6053
--- /dev/null
+++ b/nixpkgs/pkgs/servers/icecast/default.nix
@@ -0,0 +1,35 @@
+{stdenv, fetchurl
+, libxml2, libxslt, curl
+, libvorbis, libtheora, speex, libkate, libopus }:
+
+stdenv.mkDerivation rec {
+  name = "icecast-2.4.4";
+
+  src = fetchurl {
+    url = "http://downloads.xiph.org/releases/icecast/${name}.tar.gz";
+    sha256 = "0i2d9rhav0x6js2qhjf5iy6j2a7f0d11ail0lfv40hb1kygrgda9";
+  };
+
+  buildInputs = [ libxml2 libxslt curl libvorbis libtheora speex libkate libopus ];
+
+  hardeningEnable = [ "pie" ];
+
+  meta = {
+    description = "Server software for streaming multimedia";
+
+    longDescription = ''
+      Icecast is a streaming media server which currently supports
+      Ogg (Vorbis and Theora), Opus, WebM and MP3 audio streams.
+      It can be used to create an Internet radio station or a privately
+      running jukebox and many things in between. It is very versatile
+      in that new formats can be added relatively easily and supports
+      open standards for commuincation and interaction.
+    '';
+
+    homepage = http://www.icecast.org;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [ jcumming ];
+    platforms = with stdenv.lib.platforms; unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/identd/nullidentdmod/default.nix b/nixpkgs/pkgs/servers/identd/nullidentdmod/default.nix
new file mode 100644
index 000000000000..fdad63d67af4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/identd/nullidentdmod/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, ... }: stdenv.mkDerivation rec {
+  name = "nullidentdmod-${version}";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "Acidhub";
+    repo = "nullidentdmod";
+    rev = "v${version}";
+    sha256 = "1ahwm5pyidc6m07rh5ls2lc25kafrj233nnbcybprgl7bqdq1b0k";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+
+    install -Dm755 nullidentdmod $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Simple identd that just replies with a random string or customized userid";
+    license = licenses.gpl2;
+    homepage = http://acidhub.click/NullidentdMod;
+    maintainers = with maintainers; [ das_j ];
+    platforms = platforms.linux; # Must be run by systemd
+  };
+}
diff --git a/nixpkgs/pkgs/servers/identd/oidentd/default.nix b/nixpkgs/pkgs/servers/identd/oidentd/default.nix
new file mode 100644
index 000000000000..80049cea7379
--- /dev/null
+++ b/nixpkgs/pkgs/servers/identd/oidentd/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, bison, flex }:
+
+stdenv.mkDerivation rec {
+  name = "oidentd-${version}";
+  version = "2.3.1";
+  nativeBuildInputs = [ bison flex ];
+
+  src = fetchurl {
+    url = "https://files.janikrabe.com/pub/oidentd/releases/${version}/${name}.tar.gz";
+    sha256 = "1sljid4jyz9gjyx8wy3xd6bq4624dxs422nqd3mcxnsvgxr6d6zd";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Configurable Ident protocol server";
+    homepage = https://oidentd.janikrabe.com/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/interlock/default.nix b/nixpkgs/pkgs/servers/interlock/default.nix
new file mode 100644
index 000000000000..f57c94cd1084
--- /dev/null
+++ b/nixpkgs/pkgs/servers/interlock/default.nix
@@ -0,0 +1,37 @@
+{ sudo, coreutils, systemd, cryptsetup
+, mount, umount
+, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "interlock-${version}";
+  version = "2016.04.13";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/inversepath/interlock";
+
+  subPackages = [ "./cmd/interlock" ];
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "inversepath";
+    repo = "interlock";
+    sha256 = "06aqx3jy744yx29xyg8ips0dw16186hfqbxdv3hfrmwxmaxhl4lz";
+  };
+
+  goDeps = ./deps.nix;
+
+  nativeBuildInputs = [ sudo ];
+  buildFlags = [ "-tags textsecure" ];
+  postPatch = ''
+    grep -lr '/s\?bin/' | xargs sed -i \
+      -e 's|/bin/mount|${mount}/bin/mount|' \
+      -e 's|/bin/umount|${umount}/bin/umount|' \
+      -e 's|/bin/cp|${coreutils}/bin/cp|' \
+      -e 's|/bin/mv|${coreutils}/bin/mv|' \
+      -e 's|/bin/chown|${coreutils}/bin/chown|' \
+      -e 's|/bin/date|${coreutils}/bin/date|' \
+      -e 's|/sbin/poweroff|${systemd}/sbin/poweroff|' \
+      -e 's|/usr/bin/sudo|/run/wrappers/bin/sudo|' \
+      -e 's|/sbin/cryptsetup|${cryptsetup}/bin/cryptsetup|'
+  '';
+}
diff --git a/nixpkgs/pkgs/servers/interlock/deps.nix b/nixpkgs/pkgs/servers/interlock/deps.nix
new file mode 100644
index 000000000000..be5c05295731
--- /dev/null
+++ b/nixpkgs/pkgs/servers/interlock/deps.nix
@@ -0,0 +1,65 @@
+[
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "a83829b6f1293c91addabc89d0571c246397bbf4";
+      sha256 = "1m4dsmk90sbi17571h6pld44zxz7jc4lrnl4f27dpd1l8g5xvjhh";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "575fdbe86e5dd89229707ebec0575ce7d088a4a6";
+      sha256 = "1kgv1mkw9y404pk3lcwbs0vgl133mwyp294i18jg9hp10s5d56xa";
+    };
+  }
+  {
+    goPackagePath = "github.com/Sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Sirupsen/logrus";
+      rev = "be52937128b38f1d99787bb476c789e2af1147f1";
+      sha256 = "1m6vvd4pg4lwglhk54lv5mf6cc8h7bi0d9zb3gar4crz531r66y4";
+    };
+  }
+  {
+    goPackagePath = "github.com/agl/ed25519";
+    fetch = {
+      type = "git";
+      url = "https://github.com/agl/ed25519";
+      rev = "278e1ec8e8a6e017cd07577924d6766039146ced";
+      sha256 = "165d89cc6dl28j4hkn86pny0jz3sa6hamzdvpvwdj4iha3x6lzc9";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "59b73b37c1e45995477aae817e4a653c89a858db";
+      sha256 = "1dx22jvhvj34ivpr7gw01fncg9yyx35mbpal4mpgnqka7ajmgjsa";
+    };
+  }
+  {
+    goPackagePath = "github.com/janimo/textsecure";
+    fetch = {
+      type = "git";
+      url = "https://github.com/janimo/textsecure";
+      rev = "c38f429e48d6b2776d17b4171f216f132185b0f6";
+      sha256 = "191pwgfgphr0x04dwpvniax4wilpv52l25bw7d3igvnw302y7i94";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "62ac18b461605b4be188bbc7300e9aa2bc836cd4";
+      sha256 = "0lwwvbbwbf3yshxkfhn6z20gd45dkvnmw2ms36diiy34krgy402p";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/irc/charybdis/default.nix b/nixpkgs/pkgs/servers/irc/charybdis/default.nix
new file mode 100644
index 000000000000..dc053f4581cc
--- /dev/null
+++ b/nixpkgs/pkgs/servers/irc/charybdis/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, bison, flex, openssl, gnutls }:
+
+stdenv.mkDerivation rec {
+  name = "charybdis-4.1.1";
+
+  src = fetchFromGitHub {
+    owner = "charybdis-ircd";
+    repo = "charybdis";
+    rev = name;
+    sha256 = "0wvssc8b1xq6svcqrwxrpc1ga8ip0sksv73wwbk8na0pmysdvpg0";
+  };
+
+  postPatch = ''
+    substituteInPlace include/defaults.h --replace 'PKGLOCALSTATEDIR "' '"/var/lib/charybdis'
+  '';
+
+  autoreconfPhase = "sh autogen.sh";
+
+  configureFlags = [
+    "--enable-epoll"
+    "--enable-ipv6"
+    "--enable-openssl=${openssl.dev}"
+    "--with-program-prefix=charybdis-"
+  ];
+
+  nativeBuildInputs = [ autoreconfHook bison flex ];
+  buildInputs = [ openssl gnutls ];
+
+  meta = with stdenv.lib; {
+    description = "IRCv3 server designed to be highly scalable";
+    homepage    = http://atheme.org/projects/charybdis.html;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ lassulus fpletz ];
+    platforms   = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/irc/ircd-hybrid/default.nix b/nixpkgs/pkgs/servers/irc/ircd-hybrid/default.nix
new file mode 100644
index 000000000000..cf5b572c9eb4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/irc/ircd-hybrid/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  name = "ircd-hybrid-8.2.24";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ircd-hybrid/${name}.tgz";
+    sha256 = "03nmzrhqfsxwry316nm80m9p285v65fz75ns7fg623hcy65jv97a";
+  };
+
+  buildInputs = [ openssl zlib ];
+
+  configureFlags = [
+    "--with-nicklen=100"
+    "--with-topiclen=360"
+    "--enable-openssl=${openssl.dev}"
+  ];
+
+  postInstall = "echo postinstall; mkdir -p \${out}/ ; rm -rf \${out}/logs ; ln -s /home/ircd \${out}/logs;";
+
+  meta = {
+    description = "An IPv6-capable IRC server";
+    platforms = stdenv.lib.platforms.unix;
+    homepage = http://www.ircd-hybrid.org/;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/irc/ngircd/default.nix b/nixpkgs/pkgs/servers/irc/ngircd/default.nix
new file mode 100644
index 000000000000..f3b67741c191
--- /dev/null
+++ b/nixpkgs/pkgs/servers/irc/ngircd/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, zlib, openssl, pam, libiconv }:
+
+stdenv.mkDerivation rec {
+  name = "ngircd-24";
+
+  src = fetchurl {
+    url = "https://ngircd.barton.de/pub/ngircd/${name}.tar.xz";
+    sha256 = "020h9d1awyxqr0l42x1fhs47q7cmm17fdxzjish8p2kq23ma0gqp";
+  };
+
+  configureFlags = [
+    "--with-syslog"
+    "--with-zlib"
+    "--with-pam"
+    "--with-openssl"
+    "--enable-ipv6"
+    "--with-iconv"
+  ];
+
+  buildInputs = [ zlib pam openssl libiconv ];
+
+  meta = {
+    description = "Next Generation IRC Daemon";
+    homepage    = https://ngircd.barton.de;
+    license     = stdenv.lib.licenses.gpl2;
+    platforms   = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/irker/default.nix b/nixpkgs/pkgs/servers/irker/default.nix
new file mode 100644
index 000000000000..002760ff0fd3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/irker/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitLab, python, pkgconfig
+, xmlto, docbook2x, docbook_xsl, docbook_xml_dtd_412 }:
+
+stdenv.mkDerivation rec {
+  name = "irker-${version}";
+  version = "2017-02-12";
+
+  src = fetchFromGitLab {
+    owner = "esr";
+    repo = "irker";
+    rev = "dc0f65a7846a3922338e72d8c6140053fe914b54";
+    sha256 = "1hslwqa0gqsnl3l6hd5hxpn0wlachxd51infifhlwhyhd6iwgx8p";
+  };
+
+  nativeBuildInputs = [ pkgconfig xmlto docbook2x docbook_xsl docbook_xml_dtd_412 ];
+
+  buildInputs = [
+    python
+    # Needed for proxy support I believe, which I haven't tested.
+    # Probably needs to be propagated and some wrapPython magic
+    # python.pkgs.pysocks
+  ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace '-o 0 -g 0' ""
+  '';
+
+  installFlags = [
+    "prefix=/"
+    "DESTDIR=$$out"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "IRC client that runs as a daemon accepting notification requests";
+    homepage = https://gitlab.com/esr/irker;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ dtzWill ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/isso/default.nix b/nixpkgs/pkgs/servers/isso/default.nix
new file mode 100644
index 000000000000..b41115339873
--- /dev/null
+++ b/nixpkgs/pkgs/servers/isso/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, python2, fetchFromGitHub }:
+
+with python2.pkgs; buildPythonApplication rec {
+  pname = "isso";
+  version = "0.11.1";
+
+  # no tests on PyPI
+  src = fetchFromGitHub {
+    owner = "posativ";
+    repo = pname;
+    rev = version;
+    sha256 = "0545vh0sb5i4cz9c0qgch77smpwgav3rhl1dxk9ij6rx4igjk03j";
+  };
+
+  propagatedBuildInputs = [
+    bleach
+    cffi
+    configparser
+    html5lib
+    ipaddr
+    jinja2
+    misaka
+    werkzeug
+  ];
+
+  checkInputs = [ nose ];
+
+  checkPhase = ''
+    ${python.interpreter} setup.py nosetests
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A commenting server similar to Disqus";
+    homepage = https://posativ.org/isso/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/jackett/default.nix b/nixpkgs/pkgs/servers/jackett/default.nix
new file mode 100644
index 000000000000..41da87d4065c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/jackett/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, mono, curl, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "jackett-${version}";
+  version = "0.10.504";
+
+  src = fetchurl {
+    url = "https://github.com/Jackett/Jackett/releases/download/v${version}/Jackett.Binaries.Mono.tar.gz";
+    sha256 = "1nqci6a9is0kf0vn8wlbfbynllf0pkndcb1z49d1n3wwc8dhji86";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/${name}}
+    cp -r * $out/share/${name}
+
+    makeWrapper "${mono}/bin/mono" $out/bin/Jackett \
+      --add-flags "$out/share/${name}/JackettConsole.exe" \
+      --prefix LD_LIBRARY_PATH ':' "${curl.out}/lib"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "API Support for your favorite torrent trackers.";
+    homepage = https://github.com/Jackett/Jackett/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ edwtjo ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/jetbrains/youtrack.nix b/nixpkgs/pkgs/servers/jetbrains/youtrack.nix
new file mode 100644
index 000000000000..0518a78f9d6b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/jetbrains/youtrack.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, makeWrapper, jre, gawk }:
+
+stdenv.mkDerivation rec {
+  name = "youtrack-${version}";
+  version = "2018.2.44329";
+
+  jar = fetchurl {
+    url = "https://download.jetbrains.com/charisma/${name}.jar";
+    sha256 = "1fnnpyikr1x443vxy6f7vlv550sbahpps8awyn13jpg7kpgfm7lk";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  unpackPhase = ":";
+
+  installPhase = ''
+    runHook preInstall
+    makeWrapper ${jre}/bin/java $out/bin/youtrack \
+      --add-flags "\$YOUTRACK_JVM_OPTS -jar $jar" \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ gawk ]}" \
+      --set JRE_HOME ${jre}
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Issue tracking and project management tool for developers";
+    maintainers = with maintainers; [ yorickvp ];
+    # https://www.jetbrains.com/youtrack/buy/license.html
+    license = licenses.unfree;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/kippo/default.nix b/nixpkgs/pkgs/servers/kippo/default.nix
new file mode 100644
index 000000000000..3ebcaf7286b4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/kippo/default.nix
@@ -0,0 +1,100 @@
+# This is the installation portion of kippo.
+# This is somewhat jumbled together. There is no "easy_install" for kippo,
+# and there isn't a way to regenerate the twistd plugin cache.
+#
+# Use the services.kippo options to properly configure if on NixOS.
+# On other platforms there is a problem with hardcoded paths.
+# Your best bet is to change kippo source to customise
+# or manually copy the proper filesystems.
+# At a minimum the following are required in  /var/lib/kippo:
+#     honeyfs/
+#     fs.pickle
+#     data/
+#     txtcmds/
+#
+# There is also benefit in preparing /var/log/kippo
+#     tty/
+#     dl/
+#
+# Most of these files need read/write permissions.
+#
+# Read only files: kippo.tac and kippo.cfg
+#
+# Execution may look like this:
+# twistd -y kippo.tac --syslog --pidfile=kippo.pid
+#
+# Use this package at your own risk.
+
+{stdenv, fetchurl, pythonPackages }:
+
+let
+
+  twisted_13 = pythonPackages.buildPythonPackage rec {
+    # NOTE: When updating please check if new versions still cause issues
+    # to packages like carbon (http://stackoverflow.com/questions/19894708/cant-start-carbon-12-04-python-error-importerror-cannot-import-name-daem)
+    disabled = pythonPackages.isPy3k;
+
+    name = "Twisted-13.2.0";
+    src = fetchurl {
+      url = "mirror://pypi/T/Twisted/${name}.tar.bz2";
+      sha256 = "1wrcqv5lvgwk2aq83qb2s2ng2vx14hbjjk2gc30cg6h1iiipal89";
+    };
+
+    propagatedBuildInputs = with pythonPackages; [ zope_interface ];
+
+    # Generate Twisted's plug-in cache.  Twited users must do it as well.  See
+    # http://twistedmatrix.com/documents/current/core/howto/plugin.html#auto3
+    # and http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=477103 for
+    # details.
+    postInstall = "$out/bin/twistd --help > /dev/null";
+
+    meta = with stdenv.lib; {
+      homepage = https://twistedmatrix.com/;
+      description = "Twisted, an event-driven networking engine written in Python";
+      longDescription = ''
+        Twisted is an event-driven networking engine written in Python
+        and licensed under the MIT license.
+      '';
+      license = licenses.mit;
+    };
+  };
+
+in stdenv.mkDerivation rec {
+    name = "kippo-${version}";
+    version = "0.8";
+    src = fetchurl {
+      url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/kippo/${name}.tar.gz";
+      sha256 = "0rd2mk36d02qd24z8s4xyy64fy54rzpar4379iq4dcjwg7l7f63d";
+    };
+    buildInputs = with pythonPackages; [ pycrypto pyasn1 twisted_13 ];
+    installPhase = ''
+        substituteInPlace ./kippo.tac --replace "kippo.cfg" "$out/src/kippo.cfg"
+        substituteInPlace ./kippo.cfg --replace "log_path = log" "log_path = /var/log/kippo" \
+            --replace "download_path = dl" "download_path = /var/log/kippo/dl" \
+            --replace "contents_path = honeyfs" "filesystem_file = /var/lib/kippo/honeyfs" \
+            --replace "filesystem_file = fs.pickle" "filesystem_file = /var/lib/kippo/fs.pickle" \
+            --replace "data_path = data" "data_path = /var/lib/kippo/data" \
+            --replace "txtcmds_path = txtcmds" "txtcmds_path = /var/lib/kippo/txtcmds" \
+            --replace "public_key = public.key" "public_key = /var/lib/kippo/keys/public.key" \
+            --replace "private_key = private.key" "private_key = /var/lib/kippo/keys/private.key"
+        mkdir -p $out/bin
+        mkdir -p $out/src
+        mv ./* $out/src
+        mv $out/src/utils/* $out/bin
+        '';
+
+    passthru.twisted = twisted_13;
+
+    meta = with stdenv.lib; {
+      homepage = https://github.com/desaster/kippo;
+      description = "SSH Honeypot";
+      longDescription = ''
+        Default port is 2222. Recommend using something like this for port redirection to default SSH port:
+        networking.firewall.extraCommands = '''
+        iptables -t nat -A PREROUTING -i IN_IFACE -p tcp --dport 22 -j REDIRECT --to-port 2222''' '';
+      license = licenses.bsd3;
+      platforms = platforms.linux;
+      maintainers = with maintainers; [ tomberek ];
+      broken = true; # 2018-09-12, failed on hydra since 2017-12-11
+    };
+}
diff --git a/nixpkgs/pkgs/servers/kwakd/default.nix b/nixpkgs/pkgs/servers/kwakd/default.nix
new file mode 100644
index 000000000000..7c7755dee482
--- /dev/null
+++ b/nixpkgs/pkgs/servers/kwakd/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "kwakd-${version}";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    owner = "fetchinson";
+    repo = "kwakd";
+    rev = "acdf0e1491204ae30622a60fde0bcae4769f78be";
+    sha256 = "1inf9ngrbxmkkdhqf1xday12nf0hxjxlx1810phkmivyyp6fl3nj";
+  };
+
+  postInstall = ''
+    serviceDir=$out/share/dbus-1/system-services
+    mkdir -p $serviceDir
+    cp kwakd.service $serviceDir/
+    substituteInPlace $serviceDir/kwakd.service \
+      --replace "kwakd -p 80" "$out/bin/kwakd -p 80"
+  '';
+
+  meta = with lib; {
+    description = "A super small webserver that serves blank pages";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.nicknovitski ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/ldap/389/default.nix b/nixpkgs/pkgs/servers/ldap/389/default.nix
new file mode 100644
index 000000000000..4276a51715a6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/ldap/389/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, fetchurl, pkgconfig, perl, pam, nspr, nss, openldap
+, db, cyrus_sasl, svrcore, icu, net_snmp, kerberos, pcre, perlPackages
+}:
+let
+  version = "1.3.5.19";
+in
+stdenv.mkDerivation rec {
+  name = "389-ds-base-${version}";
+
+  src = fetchurl {
+    url = "http://directory.fedoraproject.org/binaries/${name}.tar.bz2";
+    sha256 = "1r1n44xfvy51r4r1180dfmjziyj3pqxwmnv6rjvvvjjm87fslmdd";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    perl pam nspr nss openldap db cyrus_sasl svrcore icu
+    net_snmp kerberos pcre
+  ] ++ (with perlPackages; [ MozillaLdap NetAddrIP DBFile ]);
+
+  # TODO: Fix bin/ds-logpipe.py, bin/logconv, bin/cl-dump
+
+  patches = [ ./perl-path.patch
+  ];
+
+  preConfigure = ''
+    # Create perl paths for library imports in perl scripts
+    PERLPATH=""
+    for P in $(echo $PERL5LIB | sed 's/:/ /g'); do
+      PERLPATH="$PERLPATH $(echo $P/*/*)"
+    done
+    export PERLPATH
+  '';
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-openldap"
+    "--with-db"
+    "--with-db-inc=${db.dev}/include"
+    "--with-db-lib=${db.out}/lib"
+    "--with-sasl=${cyrus_sasl.dev}"
+    "--with-netsnmp=${net_snmp}"
+  ];
+
+  preInstall = ''
+    # The makefile doesn't create this directory for whatever reason
+    mkdir -p $out/lib/dirsrv
+  '';
+
+  installFlags = [
+    "sysconfdir=\${out}/etc"
+    "localstatedir=\${TMPDIR}"
+  ];
+
+  passthru.version = version;
+
+  meta = with stdenv.lib; {
+    homepage = http://www.port389.org/;
+    description = "Enterprise-class Open Source LDAP server for Linux";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ wkennington ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/ldap/389/perl-path.patch b/nixpkgs/pkgs/servers/ldap/389/perl-path.patch
new file mode 100644
index 000000000000..73af83a9d6aa
--- /dev/null
+++ b/nixpkgs/pkgs/servers/ldap/389/perl-path.patch
@@ -0,0 +1,34 @@
+From 78a814e4d5e8708893b6ed8b673a4577abae05f4 Mon Sep 17 00:00:00 2001
+From: "William A. Kennington III" <william@wkennington.com>
+Date: Fri, 9 Jan 2015 14:52:11 -0800
+Subject: [PATCH 2/2] Makefile: Add PERLPATH to perl files
+
+---
+ Makefile.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index c97d1e1..763bf3b 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -2870,7 +2870,7 @@ rsearch_bin_LDADD = $(NSPR_LINK) $(NSS_LINK) $(LDAPSDK_LINK) $(SASL_LINK) $(LIBS
+ @BUNDLE_FALSE@	-e 's,@CONSOLE_VERSION\@,$(CONSOLE_VERSION),g' \
+ @BUNDLE_FALSE@	-e 's,@BUILDNUM\@,$(BUILDNUM),g' \
+ @BUNDLE_FALSE@	-e 's,@NQBUILD_NUM\@,$(NQBUILDNUM),g' \
+-@BUNDLE_FALSE@	-e 's,@perlpath\@,$(perldir),g' \
++@BUNDLE_FALSE@	-e 's,@perlpath\@,$(perldir) $(PERLPATH),g' \
+ @BUNDLE_FALSE@	-e 's,@defaultuser\@,$(defaultuser),g' \
+ @BUNDLE_FALSE@	-e 's,@defaultgroup\@,$(defaultgroup),g' \
+ @BUNDLE_FALSE@	-e 's,@with_fhs_opt\@,@with_fhs_opt@,g' \
+@@ -2947,7 +2947,7 @@ rsearch_bin_LDADD = $(NSPR_LINK) $(NSS_LINK) $(LDAPSDK_LINK) $(SASL_LINK) $(LIBS
+ @BUNDLE_TRUE@	-e 's,@CONSOLE_VERSION\@,$(CONSOLE_VERSION),g' \
+ @BUNDLE_TRUE@	-e 's,@BUILDNUM\@,$(BUILDNUM),g' \
+ @BUNDLE_TRUE@	-e 's,@NQBUILD_NUM\@,$(NQBUILDNUM),g' \
+-@BUNDLE_TRUE@	-e 's,@perlpath\@,$(perldir) $(libdir)/perl/arch $(libdir)/perl,g' \
++@BUNDLE_TRUE@	-e 's,@perlpath\@,$(perldir) $(PERLPATH) $(libdir)/perl/arch $(libdir)/perl,g' \
+ @BUNDLE_TRUE@	-e 's,@defaultuser\@,$(defaultuser),g' \
+ @BUNDLE_TRUE@	-e 's,@defaultgroup\@,$(defaultgroup),g' \
+ @BUNDLE_TRUE@	-e 's,@with_fhs_opt\@,@with_fhs_opt@,g' \
+-- 
+2.1.4
+
diff --git a/nixpkgs/pkgs/servers/lidarr/default.nix b/nixpkgs/pkgs/servers/lidarr/default.nix
new file mode 100644
index 000000000000..897c061c918d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/lidarr/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, mono, libmediainfo, sqlite, curl, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "lidarr-${version}";
+  version = "0.5.0.583";
+
+  src = fetchurl {
+    url = "https://github.com/lidarr/Lidarr/releases/download/v${version}/Lidarr.develop.${version}.linux.tar.gz";
+    sha256 = "0vqnx8vd7mv4lsl7ffsjanl9pm107bk3ndvfka2ky74qisrqcyz7";
+  };
+
+  buildInputs = [
+    makeWrapper
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r * $out/bin/
+
+    # Mark all executable files as non-executable
+    find $out/bin -type f -executable | xargs chmod -x
+
+    makeWrapper "${mono}/bin/mono" $out/bin/Lidarr \
+      --add-flags "$out/bin/Lidarr.exe" \
+      --prefix LD_LIBRARY_PATH : ${stdenv.lib.makeLibraryPath [
+          curl sqlite libmediainfo ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A Usenet/BitTorrent music downloader";
+    homepage = https://lidarr.audio/;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.etu ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/limesurvey/default.nix b/nixpkgs/pkgs/servers/limesurvey/default.nix
new file mode 100644
index 000000000000..270844730d88
--- /dev/null
+++ b/nixpkgs/pkgs/servers/limesurvey/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, lib, fetchFromGitHub, writeText, makeWrapper, php }:
+
+stdenv.mkDerivation rec {
+  name = "limesurvey-${version}";
+  version = "2.05_plus_141210";
+
+  src = fetchFromGitHub {
+    owner = "LimeSurvey";
+    repo = "LimeSurvey";
+    rev = version;
+    sha256 = "1b5yixrlrjm055ag07c7phk84mk1892v20nsss1y0xzvgn6s14gq";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  phpConfig = writeText "config.php" ''
+  <?php
+    return require(getenv('LIMESURVEY_CONFIG'));
+  ?>
+  '';
+
+  patchPhase = ''
+    substituteInPlace application/core/LSYii_Application.php \
+      --replace "'basePath" "//'basePath"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/limesurvey}
+    cp -R . $out/share/limesurvey
+    cp ${phpConfig} $out/share/limesurvey/application/config/config.php
+    makeWrapper ${php}/bin/php $out/bin/limesurvey-console \
+      --add-flags "$out/share/limesurvey/application/commands/console.php"
+  '';
+
+  meta = with lib; {
+    description = "Open source survey application";
+    license = licenses.gpl2;
+    homepage = https://www.limesurvey.org;
+    maintainers = with maintainers; [offline];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/livepeer/default.nix b/nixpkgs/pkgs/servers/livepeer/default.nix
new file mode 100644
index 000000000000..2e17001abc50
--- /dev/null
+++ b/nixpkgs/pkgs/servers/livepeer/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, buildGoPackage
+, pkgconfig, ffmpeg
+}:
+
+buildGoPackage rec {
+  name = "livepeer-${version}";
+  version = "0.2.4";
+
+  goPackagePath = "github.com/livepeer/go-livepeer";
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "livepeer";
+    repo = "go-livepeer";
+    rev = version;
+    sha256 = "07vhw787wq5q4xm7zvswjdsmr20pwfa39wfkgamb7hkrffn3k2ia";
+  };
+
+  buildInputs = [ pkgconfig ffmpeg ];
+
+  # XXX This removes the -O2 flag, to avoid errors like:
+  #   cgo-dwarf-inference:2:8: error: enumerator value for '__cgo_enum__0' is not an integer constant
+  # This is a workaround for nixpkgs+golang BUG https://github.com/NixOS/nixpkgs/issues/25959
+  hardeningDisable = [ "fortify" ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Official Go implementation of the Livepeer protocol";
+    homepage = https://livepeer.org;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ elitak ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/livepeer/deps.nix b/nixpkgs/pkgs/servers/livepeer/deps.nix
new file mode 100644
index 000000000000..297d0724a496
--- /dev/null
+++ b/nixpkgs/pkgs/servers/livepeer/deps.nix
@@ -0,0 +1,20 @@
+[
+  {
+    goPackagePath = "github.com/golang/glog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/glog";
+      rev = "23def4e6c14b4da8ac2ed8007337bc5eb5007998";
+      sha256 = "0jb2834rw5sykfr937fxi8hxi2zy80sj2bdn9b3jb4b26ksqng30";
+    };
+  }
+  {
+    goPackagePath = "github.com/ericxtang/m3u8";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ericxtang/m3u8";
+      rev = "575aeb9f754a5dabcc03d4aa0ed05ecaee26499e";
+      sha256 = "08811y4kg6rgj40v80cwjcwhy094qrfigdwjsgr8d6bn64cf9fz2";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/mail/archiveopteryx/default.nix b/nixpkgs/pkgs/servers/mail/archiveopteryx/default.nix
new file mode 100644
index 000000000000..080cbc897756
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/archiveopteryx/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, openssl, perl, zlib, jam }:
+stdenv.mkDerivation rec {
+  version = "3.2.0";
+  name = "archiveopteryx-${version}";
+
+  src = fetchurl {
+    url = "http://archiveopteryx.org/download/${name}.tar.bz2";
+    sha256 = "0i0zg8di8nbh96qnyyr156ikwcsq1w9b2291bazm5whb351flmqx";
+  };
+
+  nativeBuildInputs = [ jam ];
+  buildInputs = [ openssl perl zlib ];
+
+  preConfigure = ''
+    export INSTALLROOT=installroot
+    sed -i 's:BINDIR = $(PREFIX)/bin:BINDIR = '$out'/bin:' ./Jamsettings
+    sed -i 's:SBINDIR = $(PREFIX)/sbin:SBINDIR = '$out'/bin:' ./Jamsettings
+    sed -i 's:LIBDIR = $(PREFIX)/lib:LIBDIR = '$out'/lib:' ./Jamsettings
+    sed -i 's:MANDIR = $(PREFIX)/man:MANDIR = '$out'/share/man:' ./Jamsettings
+    sed -i 's:READMEDIR = $(PREFIX):READMEDIR = '$out'/share/doc/archiveopteryx:' ./Jamsettings
+  '';
+
+  # fix build on gcc7
+  NIX_CFLAGS_COMPILE = [
+    "-Wno-error=builtin-declaration-mismatch"
+    "-Wno-error=implicit-fallthrough"
+  ];
+
+  buildPhase = ''jam "-j$NIX_BUILD_CORES" '';
+  installPhase = ''
+    jam install
+    mv installroot/$out $out
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://archiveopteryx.org/;
+    description = "An advanced PostgreSQL-based IMAP/POP server";
+    license = licenses.postgresql;
+    maintainers = [ maintainers.phunehehe ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/clamsmtp/default.nix b/nixpkgs/pkgs/servers/mail/clamsmtp/default.nix
new file mode 100644
index 000000000000..7214c08d2427
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/clamsmtp/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "clamsmtp-" + version;
+  version = "1.10";
+
+  src = fetchurl {
+    url = "http://thewalter.net/stef/software/clamsmtp/${name}.tar.gz";
+    sha256 = "0apr1pxifw6f1rbbsdrrwzs1dnhybg4hda3qqhqcw7p14r5xnbx5";
+  };
+
+  patches = [ ./header-order.patch ];
+
+  meta = with stdenv.lib; {
+    description = "SMTP filter that allows to check for viruses using the ClamAV
+                   anti-virus software";
+    homepage = http://thewalter.net/stef/software/clamsmtp/;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.ekleog ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/clamsmtp/header-order.patch b/nixpkgs/pkgs/servers/mail/clamsmtp/header-order.patch
new file mode 100644
index 000000000000..102ae0a471dd
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/clamsmtp/header-order.patch
@@ -0,0 +1,25 @@
+diff --git a/common/smtppass.c b/common/smtppass.c
+index d9be1ba..4a366f4 100644
+--- a/common/smtppass.c
++++ b/common/smtppass.c
+@@ -60,15 +60,15 @@
+ 
+ #include "usuals.h"
+ 
+-#ifdef LINUX_TRANSPARENT_PROXY
+-#include <linux/netfilter_ipv4.h>
+-#endif
+-
+ #include "compat.h"
+ #include "sock_any.h"
+ #include "stringx.h"
+ #include "sppriv.h"
+ 
++#ifdef LINUX_TRANSPARENT_PROXY
++#include <linux/netfilter_ipv4.h>
++#endif
++
+ /* -----------------------------------------------------------------------
+  *  STRUCTURES
+  */
+
diff --git a/nixpkgs/pkgs/servers/mail/dkimproxy/default.nix b/nixpkgs/pkgs/servers/mail/dkimproxy/default.nix
new file mode 100644
index 000000000000..2912ce4cfcaa
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/dkimproxy/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, perl, fetchurl, Error, MailDKIM, MIMETools, NetServer }:
+
+let
+  pkg = "dkimproxy";
+  version = "1.4.1";
+in
+stdenv.mkDerivation rec {
+  name = "${pkg}-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dkimproxy/${name}.tar.gz";
+    sha256 = "1gc5c7lg2qrlck7b0lvjfqr824ch6jkrzkpsn0gjvlzg7hfmld75";
+  };
+
+  # Idea taken from pkgs/development/perl-modules/generic/builder.sh
+  preFixup = ''
+    perlFlags=
+    for i in $(IFS=:; echo $PERL5LIB); do
+      perlFlags="$perlFlags -I$i"
+    done
+    for f in $(ls $out/bin); do
+      sed -i $out/bin/$f -e "s|#\!\(.*/perl.*\)$|#\! \1 $perlFlags|"
+    done
+  '';
+
+  buildInputs = [ perl ];
+  propagatedBuildInputs = [ Error MailDKIM MIMETools NetServer ];
+
+  meta = with stdenv.lib; {
+    description = "SMTP-proxy that signs and/or verifies emails";
+    homepage = http://dkimproxy.sourceforge.net/;
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.ekleog ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/dovecot/2.2.x-module_dir.patch b/nixpkgs/pkgs/servers/mail/dovecot/2.2.x-module_dir.patch
new file mode 100644
index 000000000000..1914933c558c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/dovecot/2.2.x-module_dir.patch
@@ -0,0 +1,122 @@
+diff --git a/src/auth/main.c b/src/auth/main.c
+index 5a87c57..74bff52 100644
+--- a/src/auth/main.c
++++ b/src/auth/main.c
+@@ -194,7 +194,7 @@ static void main_preinit(void)
+ 	mod_set.debug = global_auth_settings->debug;
+ 	mod_set.filter_callback = auth_module_filter;
+ 
+-	modules = module_dir_load(AUTH_MODULE_DIR, NULL, &mod_set);
++	modules = module_dir_load("/etc/dovecot/modules/auth", NULL, &mod_set);
+ 	module_dir_init(modules);
+ 
+ 	if (!worker)
+@@ -225,7 +225,7 @@ void auth_module_load(const char *names)
+ 	mod_set.debug = global_auth_settings->debug;
+ 	mod_set.ignore_missing = TRUE;
+ 
+-	modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, names,
++	modules = module_dir_load_missing(modules, "/etc/dovecot/modules/auth", names,
+ 					  &mod_set);
+ 	module_dir_init(modules);
+ }
+diff --git a/src/config/all-settings.c b/src/config/all-settings.c
+index de223a5..2df2d21 100644
+--- a/src/config/all-settings.c
++++ b/src/config/all-settings.c
+@@ -836,7 +836,7 @@ static const struct mail_user_settings mail_user_default_settings = {
+ 	.last_valid_gid = 0,
+ 
+ 	.mail_plugins = "",
+-	.mail_plugin_dir = MODULEDIR,
++	.mail_plugin_dir = "/etc/dovecot/modules",
+ 
+ 	.mail_log_prefix = "%s(%u): ",
+ 
+@@ -3545,7 +3545,7 @@ const struct doveadm_settings doveadm_default_settings = {
+ 	.base_dir = PKG_RUNDIR,
+ 	.libexec_dir = PKG_LIBEXECDIR,
+ 	.mail_plugins = "",
+-	.mail_plugin_dir = MODULEDIR,
++	.mail_plugin_dir = "/etc/dovecot/modules",
+ 	.auth_debug = FALSE,
+ 	.auth_socket_path = "auth-userdb",
+ 	.doveadm_socket_path = "doveadm-server",
+diff --git a/src/config/config-parser.c b/src/config/config-parser.c
+index 2a5009a..134f92b 100644
+--- a/src/config/config-parser.c
++++ b/src/config/config-parser.c
+@@ -1047,7 +1047,7 @@ void config_parse_load_modules(void)
+ 
+ 	memset(&mod_set, 0, sizeof(mod_set));
+ 	mod_set.abi_version = DOVECOT_ABI_VERSION;
+-	modules = module_dir_load(CONFIG_MODULE_DIR, NULL, &mod_set);
++	modules = module_dir_load("/etc/dovecot/modules/settings", NULL, &mod_set);
+ 	module_dir_init(modules);
+ 
+ 	i_array_init(&new_roots, 64);
+diff --git a/src/dict/main.c b/src/dict/main.c
+index e6c945e..06ad6c5 100644
+--- a/src/dict/main.c
++++ b/src/dict/main.c
+@@ -62,7 +62,7 @@ static void main_init(void)
+ 	mod_set.abi_version = DOVECOT_ABI_VERSION;
+ 	mod_set.require_init_funcs = TRUE;
+ 
+-	modules = module_dir_load(DICT_MODULE_DIR, NULL, &mod_set);
++	modules = module_dir_load("/etc/dovecot/modules/dict", NULL, &mod_set);
+ 	module_dir_init(modules);
+ 
+ 	/* Register only after loading modules. They may contain SQL drivers,
+diff --git a/src/doveadm/doveadm-settings.c b/src/doveadm/doveadm-settings.c
+index df12284..19c18da 100644
+--- a/src/doveadm/doveadm-settings.c
++++ b/src/doveadm/doveadm-settings.c
+@@ -81,7 +81,7 @@ const struct doveadm_settings doveadm_default_settings = {
+ 	.base_dir = PKG_RUNDIR,
+ 	.libexec_dir = PKG_LIBEXECDIR,
+ 	.mail_plugins = "",
+-	.mail_plugin_dir = MODULEDIR,
++	.mail_plugin_dir = "/etc/dovecot/modules",
+ 	.auth_debug = FALSE,
+ 	.auth_socket_path = "auth-userdb",
+ 	.doveadm_socket_path = "doveadm-server",
+diff --git a/src/lib-fs/fs-api.c b/src/lib-fs/fs-api.c
+index b50fbe0..ace3aff 100644
+--- a/src/lib-fs/fs-api.c
++++ b/src/lib-fs/fs-api.c
+@@ -114,7 +114,7 @@ static void fs_class_try_load_plugin(const char *driver)
+ 	mod_set.abi_version = DOVECOT_ABI_VERSION;
+ 	mod_set.ignore_missing = TRUE;
+ 
+-	fs_modules = module_dir_load_missing(fs_modules, MODULE_DIR,
++	fs_modules = module_dir_load_missing(fs_modules, "/etc/dovecot/modules",
+ 					     module_name, &mod_set);
+ 	module_dir_init(fs_modules);
+ 
+diff --git a/src/lib-ssl-iostream/iostream-ssl.c b/src/lib-ssl-iostream/iostream-ssl.c
+index a0659ab..dba3729 100644
+--- a/src/lib-ssl-iostream/iostream-ssl.c
++++ b/src/lib-ssl-iostream/iostream-ssl.c
+@@ -34,7 +34,7 @@ static int ssl_module_load(const char **error_r)
+ 	mod_set.abi_version = DOVECOT_ABI_VERSION;
+ 	mod_set.setting_name = "<built-in lib-ssl-iostream lookup>";
+ 	mod_set.require_init_funcs = TRUE;
+-	ssl_module = module_dir_load(MODULE_DIR, plugin_name, &mod_set);
++	ssl_module = module_dir_load("/etc/dovecot/modules", plugin_name, &mod_set);
+ 	if (module_dir_try_load_missing(&ssl_module, MODULE_DIR, plugin_name,
+ 					&mod_set, error_r) < 0)
+ 		return -1;
+diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c
+index e2233bf..bbf981e 100644
+--- a/src/lib-storage/mail-storage-settings.c
++++ b/src/lib-storage/mail-storage-settings.c
+@@ -274,7 +274,7 @@ static const struct mail_user_settings mail_user_default_settings = {
+ 	.last_valid_gid = 0,
+ 
+ 	.mail_plugins = "",
+-	.mail_plugin_dir = MODULEDIR,
++	.mail_plugin_dir = "/etc/dovecot/modules",
+ 
+ 	.mail_log_prefix = "%s(%u): ",
+ 
diff --git a/nixpkgs/pkgs/servers/mail/dovecot/default.nix b/nixpkgs/pkgs/servers/mail/dovecot/default.nix
new file mode 100644
index 000000000000..6c6ddf651e62
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/dovecot/default.nix
@@ -0,0 +1,75 @@
+{ stdenv, lib, fetchurl, perl, pkgconfig, systemd, openssl
+, bzip2, zlib, lz4, inotify-tools, pam, libcap
+, clucene_core_2, icu, openldap, libsodium, libstemmer, cyrus_sasl
+, nixosTests
+# Auth modules
+, withMySQL ? false, mysql
+, withPgSQL ? false, postgresql
+, withSQLite ? true, sqlite
+}:
+
+stdenv.mkDerivation rec {
+  name = "dovecot-2.3.4";
+
+  nativeBuildInputs = [ perl pkgconfig ];
+  buildInputs =
+    [ openssl bzip2 zlib lz4 clucene_core_2 icu openldap libsodium libstemmer cyrus_sasl.dev ]
+    ++ lib.optionals (stdenv.isLinux) [ systemd pam libcap inotify-tools ]
+    ++ lib.optional withMySQL mysql.connector-c
+    ++ lib.optional withPgSQL postgresql
+    ++ lib.optional withSQLite sqlite;
+
+  src = fetchurl {
+    url = "https://dovecot.org/releases/2.3/${name}.tar.gz";
+    sha256 = "01ggzf7b3jpl89mjiqr7xbpbs181g2gjf6wzg70qaqfzz3ppc6yr";
+  };
+
+  preConfigure = ''
+    patchShebangs src/config/settings-get.pl
+  '';
+
+  # We need this for sysconfdir, see remark below.
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postInstall = ''
+    cp -r $out/$out/* $out
+    rm -rf $out/$(echo "$out" | cut -d "/" -f2)
+  '';
+
+  patches = [
+    # Make dovecot look for plugins in /etc/dovecot/modules
+    # so we can symlink plugins from several packages there.
+    # The symlinking needs to be done in NixOS.
+    ./2.2.x-module_dir.patch
+  ];
+
+  configureFlags = [
+    # It will hardcode this for /var/lib/dovecot.
+    # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=626211
+    "--localstatedir=/var"
+    # We need this so utilities default to reading /etc/dovecot/dovecot.conf file.
+    "--sysconfdir=/etc"
+    "--with-ldap"
+    "--with-ssl=openssl"
+    "--with-zlib"
+    "--with-bzlib"
+    "--with-lz4"
+    "--with-ldap"
+    "--with-lucene"
+    "--with-icu"
+  ] ++ lib.optional (stdenv.isLinux) "--with-systemdsystemunitdir=$(out)/etc/systemd/system"
+    ++ lib.optional (stdenv.isDarwin) "--enable-static"
+    ++ lib.optional withMySQL "--with-mysql"
+    ++ lib.optional withPgSQL "--with-pgsql"
+    ++ lib.optional withSQLite "--with-sqlite";
+
+  meta = {
+    homepage = https://dovecot.org/;
+    description = "Open source IMAP and POP3 email server written with security primarily in mind";
+    maintainers = with stdenv.lib.maintainers; [ peti rickynils fpletz ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+  passthru.tests = {
+    opensmtpd-interaction = nixosTests.opensmtpd;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/dovecot/plugins/pigeonhole/default.nix b/nixpkgs/pkgs/servers/mail/dovecot/plugins/pigeonhole/default.nix
new file mode 100644
index 000000000000..73d6b5d593c9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/dovecot/plugins/pigeonhole/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, dovecot, openssl }:
+
+stdenv.mkDerivation rec {
+  name = "dovecot-pigeonhole-${version}";
+  version = "0.5.4";
+
+  src = fetchurl {
+    url = "https://pigeonhole.dovecot.org/releases/2.3/dovecot-2.3-pigeonhole-${version}.tar.gz";
+    sha256 = "05l5y0gc8ycswdbl58j7kbx5gq1z7mjkazjccmgbq6h0gbk9jyal";
+  };
+
+  buildInputs = [ dovecot openssl ];
+
+  preConfigure = ''
+    substituteInPlace src/managesieve/managesieve-settings.c --replace \
+      ".executable = \"managesieve\"" \
+      ".executable = \"$out/libexec/dovecot/managesieve\""
+    substituteInPlace src/managesieve-login/managesieve-login-settings.c --replace \
+      ".executable = \"managesieve-login\"" \
+      ".executable = \"$out/libexec/dovecot/managesieve-login\""
+  '';
+
+  configureFlags = [
+    "--with-dovecot=${dovecot}/lib/dovecot"
+    "--without-dovecot-install-dirs"
+    "--with-moduledir=$(out)/lib/dovecot"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://pigeonhole.dovecot.org/;
+    description = "A sieve plugin for the Dovecot IMAP server";
+    license = licenses.lgpl21;
+    maintainers = [ maintainers.rickynils ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/dspam/default.nix b/nixpkgs/pkgs/servers/mail/dspam/default.nix
new file mode 100644
index 000000000000..8fa7719a722b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/dspam/default.nix
@@ -0,0 +1,108 @@
+{ stdenv, lib, fetchurl, makeWrapper
+, gawk, gnused, gnugrep, coreutils, which
+, perl, libnet
+, withMySQL ? false, zlib, mysql57
+, withPgSQL ? false, postgresql
+, withSQLite ? false, sqlite
+, withDB ? false, db
+}:
+
+let
+  drivers = lib.concatStringsSep ","
+            ([ "hash_drv" ]
+             ++ lib.optional withMySQL "mysql_drv"
+             ++ lib.optional withPgSQL "pgsql_drv"
+             ++ lib.optional withSQLite "sqlite3_drv"
+             ++ lib.optional withDB "libdb4_drv"
+            );
+  maintenancePath = lib.makeBinPath [ gawk gnused gnugrep coreutils which ];
+
+in stdenv.mkDerivation rec {
+  name = "dspam-3.10.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dspam/dspam/${name}/${name}.tar.gz";
+    sha256 = "1acklnxn1wvc7abn31l3qdj8q6k13s51k5gv86vka7q20jb5cxmf";
+  };
+
+  buildInputs = [ perl ]
+                ++ lib.optionals withMySQL [ zlib mysql57.connector-c ]
+                ++ lib.optional withPgSQL postgresql
+                ++ lib.optional withSQLite sqlite
+                ++ lib.optional withDB db;
+  nativeBuildInputs = [ makeWrapper ];
+
+  configureFlags = [
+    "--with-storage-driver=${drivers}"
+    "--sysconfdir=/etc/dspam"
+    "--localstatedir=/var"
+    "--with-dspam-home=/var/lib/dspam"
+    "--with-logdir=/var/log/dspam"
+    "--with-logfile=/var/log/dspam/dspam.log"
+
+    "--enable-daemon"
+    "--enable-clamav"
+    "--enable-syslog"
+    "--enable-large-scale"
+    "--enable-virtual-users"
+    "--enable-split-configuration"
+    "--enable-preferences-extension"
+    "--enable-long-usernames"
+    "--enable-external-lookup"
+  ] ++ lib.optional withMySQL "--with-mysql-includes=${mysql57.connector-c}/include/mysql"
+    ++ lib.optional withPgSQL "--with-pgsql-libraries=${postgresql.lib}/lib";
+
+  # Lots of things are hardwired to paths like sysconfdir. That's why we install with both "prefix" and "DESTDIR"
+  # and fix directory structure manually after that.
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postInstall = ''
+    cp -r $out/$out/* $out
+    rm -rf $out/$(echo "$out" | cut -d "/" -f2)
+    rm -rf $out/var
+
+    wrapProgram $out/bin/dspam_notify \
+      --set PERL5LIB "${lib.makePerlPath [ libnet ]}"
+
+    # Install SQL scripts
+    mkdir -p $out/share/dspam/sql
+    # MySQL
+    cp src/tools.mysql_drv/mysql_*.sql $out/share/dspam/sql
+    for i in src/tools.mysql_drv/{purge*.sql,virtual*.sql}; do
+      cp "$i" $out/share/dspam/sql/mysql_$(basename "$i")
+    done
+    # PostgreSQL
+    cp src/tools.pgsql_drv/pgsql_*.sql $out/share/dspam/sql
+    for i in src/tools.pgsql_drv/{purge*.sql,virtual*.sql}; do
+      cp "$i" $out/share/dspam/sql/pgsql_$(basename "$i")
+    done
+    # SQLite
+    for i in src/tools.sqlite_drv/purge*.sql; do
+      cp "$i" $out/share/dspam/sql/sqlite_$(basename "$i")
+    done
+
+    # Install maintenance script
+    install -Dm755 contrib/dspam_maintenance/dspam_maintenance.sh $out/bin/dspam_maintenance
+    sed -i \
+      -e "2iexport PATH=$out/bin:${maintenancePath}:\$PATH" \
+      -e 's,/usr/[a-z0-9/]*,,g' \
+      -e 's,^DSPAM_CONFIGDIR=.*,DSPAM_CONFIGDIR=/etc/dspam,' \
+      -e "s,^DSPAM_HOMEDIR=.*,DSPAM_HOMEDIR=/var/lib/dspam," \
+      -e "s,^DSPAM_PURGE_SCRIPT_DIR=.*,DSPAM_PURGE_SCRIPT_DIR=$out/share/dspam/sql," \
+      -e "s,^DSPAM_BIN_DIR=.*,DSPAM_BIN_DIR=$out/bin," \
+      -e "s,^MYSQL_BIN_DIR=.*,MYSQL_BIN_DIR=/run/current-system/sw/bin," \
+      -e "s,^PGSQL_BIN_DIR=.*,PGSQL_BIN_DIR=/run/current-system/sw/bin," \
+      -e "s,^SQLITE_BIN_DIR=.*,SQLITE_BIN_DIR=/run/current-system/sw/bin," \
+      -e "s,^SQLITE3_BIN_DIR=.*,SQLITE3_BIN_DIR=/run/current-system/sw/bin," \
+      -e 's,^DSPAM_CRON_LOCKFILE=.*,DSPAM_CRON_LOCKFILE=/run/dspam/dspam_maintenance.pid,' \
+      $out/bin/dspam_maintenance
+  '';
+
+  meta = with lib; {
+    homepage = http://nuclearelephant.com/;
+    description = "Community Driven Antispam Filter";
+    license = licenses.agpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/exim/default.nix b/nixpkgs/pkgs/servers/mail/exim/default.nix
new file mode 100644
index 000000000000..07623a80f243
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/exim/default.nix
@@ -0,0 +1,96 @@
+{ coreutils, db, fetchurl, openssl, pcre, perl, pkgconfig, stdenv
+, enableLDAP ? false, openldap
+, enableMySQL ? false, mysql, zlib
+, enableAuthDovecot ? false, dovecot
+, enablePAM ? false, pam
+}:
+
+stdenv.mkDerivation rec {
+  name = "exim-4.91";
+
+  src = fetchurl {
+    url = "https://ftp.exim.org/pub/exim/exim4/${name}.tar.xz";
+    sha256 = "066ip7a5lqfn9rcr14j4nm0kqysw6mzvbbb0ip50lmfm0fqsqmzc";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ coreutils db openssl perl pcre ]
+    ++ stdenv.lib.optional enableLDAP openldap
+    ++ stdenv.lib.optionals enableMySQL [ mysql zlib ]
+    ++ stdenv.lib.optional enableAuthDovecot dovecot
+    ++ stdenv.lib.optional enablePAM pam;
+
+  preBuild = ''
+    ${stdenv.lib.optionalString enableMySQL "PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${mysql}/share/mysql/pkgconfig/"}
+    sed '
+      s:^\(BIN_DIRECTORY\)=.*:\1='"$out"'/bin:
+      s:^\(CONFIGURE_FILE\)=.*:\1=/etc/exim.conf:
+      s:^\(EXIM_USER\)=.*:\1=ref\:nobody:
+      s:^\(SPOOL_DIRECTORY\)=.*:\1=/exim-homeless-shelter:
+      s:^# \(TRANSPORT_LMTP\)=.*:\1=yes:
+      s:^# \(SUPPORT_MAILDIR\)=.*:\1=yes:
+      s:^EXIM_MONITOR=.*$:# &:
+      s:^\(FIXED_NEVER_USERS\)=root$:\1=0:
+      s:^# \(WITH_CONTENT_SCAN\)=.*:\1=yes:
+      s:^# \(AUTH_PLAINTEXT\)=.*:\1=yes:
+      s:^# \(SUPPORT_TLS\)=.*:\1=yes:
+      s:^# \(USE_OPENSSL_PC=openssl\)$:\1:
+      s:^# \(LOG_FILE_PATH=syslog\)$:\1:
+      s:^# \(HAVE_IPV6=yes\)$:\1:
+      s:^# \(CHOWN_COMMAND\)=.*:\1=${coreutils}/bin/chown:
+      s:^# \(CHGRP_COMMAND\)=.*:\1=${coreutils}/bin/chgrp:
+      s:^# \(CHMOD_COMMAND\)=.*:\1=${coreutils}/bin/chmod:
+      s:^# \(MV_COMMAND\)=.*:\1=${coreutils}/bin/mv:
+      s:^# \(RM_COMMAND\)=.*:\1=${coreutils}/bin/rm:
+      s:^# \(TOUCH_COMMAND\)=.*:\1=${coreutils}/bin/touch:
+      s:^# \(PERL_COMMAND\)=.*:\1=${perl}/bin/perl:
+      ${stdenv.lib.optionalString enableLDAP ''
+        s:^# \(LDAP_LIB_TYPE=OPENLDAP2\)$:\1:
+        s:^# \(LOOKUP_LDAP=yes\)$:\1:
+        s:^\(LOOKUP_LIBS\)=\(.*\):\1=\2 -lldap:
+        s:^# \(LOOKUP_LIBS\)=.*:\1=-lldap:
+      ''}
+      ${stdenv.lib.optionalString enableMySQL ''
+        s:^# \(LOOKUP_MYSQL=yes\)$:\1:
+        s:^# \(LOOKUP_MYSQL_PC=mariadb\)$:\1:
+        s:^\(LOOKUP_LIBS\)=\(.*\):\1=\2 -lmysqlclient:
+        s:^# \(LOOKUP_LIBS\)=.*:\1=-lmysqlclient:
+        s:^# \(LOOKUP_INCLUDE\)=.*:\1=-I${mysql}/include/mysql/:
+      ''}
+      ${stdenv.lib.optionalString enableAuthDovecot ''
+        s:^# \(AUTH_DOVECOT\)=.*:\1=yes:
+      ''}
+      ${stdenv.lib.optionalString enablePAM ''
+        s:^# \(SUPPORT_PAM\)=.*:\1=yes:
+        s:^\(EXTRALIBS_EXIM\)=\(.*\):\1=\2 -lpam:
+        s:^# \(EXTRALIBS_EXIM\)=.*:\1=-lpam:
+      ''}
+      #/^\s*#.*/d
+      #/^\s*$/d
+    ' < src/EDITME > Local/Makefile
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man8
+    cp doc/exim.8 $out/share/man/man8
+
+    ( cd build-Linux-*
+      cp exicyclog exim_checkaccess exim_dumpdb exim_lock exim_tidydb \
+        exipick exiqsumm exigrep exim_dbmbuild exim exim_fixdb eximstats \
+        exinext exiqgrep exiwhat \
+        $out/bin )
+
+    ( cd $out/bin
+      for i in mailq newaliases rmail rsmtp runq sendmail; do
+        ln -s exim $i
+      done )
+  '';
+
+  meta = {
+    homepage = http://exim.org/;
+    description = "A mail transfer agent (MTA)";
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.tv ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/freepops/default.nix b/nixpkgs/pkgs/servers/mail/freepops/default.nix
new file mode 100644
index 000000000000..b4f671862f88
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/freepops/default.nix
@@ -0,0 +1,29 @@
+{stdenv, fetchurl, pkgconfig, openssl, lua5, curl, readline, bison, expat}:
+
+stdenv.mkDerivation {
+  name = "freepops-0.2.9";
+  src = fetchurl {
+    url = mirror://sourceforge/freepops/0.2.9/freepops-0.2.9.tar.gz;
+    sha256 = "3a065e30cafed03d9b6fdb28251ae5bf0d8aeb62181746154beecd25dc0c9cae";
+  };
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ openssl lua5 curl readline bison expat];
+  configurePhase =
+  ''
+    export WHERE=$prefix/
+    export LOCALEDIR=$prefix/share/locale/
+    ./configure.sh linux
+  '';
+
+  meta = {
+    description = "An extensible pop3 server";
+    longDescription = ''
+      FreePOPs is an extensible pop3 server. Its main purpose is to provide
+      a pop3 interface to a webmail.
+    '';
+    homepage = http://www.freepops.org/;
+    platforms = with stdenv.lib.platforms; linux;
+    maintainers = with stdenv.lib.maintainers; [ pierron ];
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/mailhog/default.nix b/nixpkgs/pkgs/servers/mail/mailhog/default.nix
new file mode 100644
index 000000000000..019c84d2898b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/mailhog/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "MailHog-${version}";
+  version = "1.0.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/mailhog/MailHog";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "mailhog";
+    repo = "MailHog";
+    sha256 = "0r6zidkffb8q12zyxd063jy0ig2x93llna4zb5i2qjh9gb971i83";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Web and API based SMTP testing";
+    homepage = https://github.com/mailhog/MailHog;
+    maintainers = with maintainers; [ disassembler ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/mailhog/deps.nix b/nixpkgs/pkgs/servers/mail/mailhog/deps.nix
new file mode 100644
index 000000000000..9967c3a549a5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/mailhog/deps.nix
@@ -0,0 +1,191 @@
+[
+  {
+    goPackagePath = "github.com/gorilla/pat";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/pat";
+      rev = "cf955c3d1f2c27ee96f93e9738085c762ff5f49d";
+      sha256 = "1jnhdhba3cwgsgv6qf7shvmk2nbbp8z30n9cimz9w6vd940ipisf";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/context";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/context";
+      rev = "1ea25387ff6f684839d82767c1733ff4d4d15d0a";
+      sha256 = "1nh1nzxcsgd215x4xn59wc4cbqfa8zvhvnnx5p8fkrn4bj1cgak4";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/mux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/mux";
+      rev = "bcd8bc72b08df0f70df986b97f95590779502d31";
+      sha256 = "0majd18zn8v1b1agn015vnk3xk2v8j5nyckczlf72gm3kaq3icga";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/websocket";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/websocket";
+      rev = "3ab3a8b8831546bd18fd182c20687ca853b2bb13";
+      sha256 = "17y94ngp1yrswq5pxxy97naiw6jgxz2yvm8zydi83gfixdgs99fc";
+    };
+  }
+  {
+    goPackagePath = "github.com/ian-kent/go-log";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ian-kent/go-log";
+      rev = "5731446c36ab9f716106ce0731f484c50fdf1ad1";
+      sha256 = "1qr0myg68r9zq43fnx0rbnxcny2jpyg3gc269pc2riskqk0a731d";
+    };
+  }
+  {
+    goPackagePath = "github.com/ian-kent/envconf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ian-kent/envconf";
+      rev = "c19809918c02ab33dc8635d68c77649313185275";
+      sha256 = "1085863rnx4h0q9xvg4zlsc7xf7jngfmjrq83cpcv1ayi664mzdx";
+    };
+  }
+  {
+    goPackagePath = "github.com/ian-kent/goose";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ian-kent/goose";
+      rev = "c3541ea826ad9e0f8a4a8c15ca831e8b0adde58c";
+      sha256 = "0v98d2554vlrm8mzk2zx8wj3daq076273w0zs8ww1aa57a1l74qv";
+    };
+  }
+  {
+    goPackagePath = "github.com/ian-kent/linkio";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ian-kent/linkio";
+      rev = "77fb4b01842cb4b019137c0227df9a8f9779d0bd";
+      sha256 = "0fixidplxzmw7aakw19d64nvrykwm5xk55fj1q74n70s8j5d8hiq";
+    };
+  }
+  {
+    goPackagePath = "github.com/mailhog/MailHog-Server";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mailhog/MailHog-Server";
+      rev = "50f74a1aa2991b96313144d1ac718ce4d6739dfd";
+      sha256 = "1h0qs66bvgygpq0sz3w6y445vm3pvlrljr5x7xr13y0087mrpjla";
+    };
+  }
+  {
+    goPackagePath = "github.com/mailhog/MailHog-UI";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mailhog/MailHog-UI";
+      rev = "24b31a47cc5b65d23576bb9884c941d2b88381f7";
+      sha256 = "0309jmryhx3n0yksssk2j4xkh1xb01468i5f2sy3a83xkz9p3d54";
+    };
+  }
+  {
+    goPackagePath = "github.com/mailhog/http";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mailhog/http";
+      rev = "2e653938bf190d0e2fbe4825ce74e5bc149a62f2";
+      sha256 = "18j03lvyis7z0mv3fym3j9a7pi2qvnhggmhpxnjbwvwb86dhxjm8";
+    };
+  }
+  {
+    goPackagePath = "github.com/mailhog/mhsendmail";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mailhog/mhsendmail";
+      rev = "002527025ef50364446d7560600aedc5daaa1997";
+      sha256 = "11l2y0xb7hwk0zs7pwif3xkclhz32sc0jff3jkaxi3jdf3q3kz91";
+    };
+  }
+  {
+    goPackagePath = "github.com/mailhog/data";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mailhog/data";
+      rev = "024d554958b5bea5db220bfd84922a584d878ded";
+      sha256 = "0dgh0pcsn0xrxsn1qlxgdssaimch57kxj5vyvhqjnsdnh814g9vf";
+    };
+  }
+  {
+    goPackagePath = "github.com/mailhog/smtp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mailhog/smtp";
+      rev = "0c4e9b7e0625fec61d0c30d7b2f6c62852be6c54";
+      sha256 = "1w46w3asdxsgzyall16hi2s4jvkka1k3a1l52ryfhrzg187krir6";
+    };
+  }
+  {
+    goPackagePath = "github.com/mailhog/storage";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mailhog/storage";
+      rev = "6d871fb23ecd873cb10cdfc3a8dec5f50d2af8fa";
+      sha256 = "1ya0xigm2xysin59zlp2sbqncnmw9h77r9dn9k7vxhf0z8vvbibk";
+    };
+  }
+  {
+    goPackagePath = "github.com/ogier/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ogier/pflag";
+      rev = "32a05c62658bd1d7c7e75cbc8195de5d585fde0f";
+      sha256 = "1lyrr9wx0j087mnpsxcbspjcgh9a5c6bqwrasd8s237jlyc50qmj";
+    };
+  }
+  {
+    goPackagePath = "github.com/tinylib/msgp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tinylib/msgp";
+      rev = "02d047e07459c5a7b02b1244161d0f2f6d8f660d";
+      sha256 = "12y7qz1x266m0a0w3zwd49achxbh036yhkmx93xfs2283xh70q1r";
+    };
+  }
+  {
+    goPackagePath = "github.com/philhofer/fwd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/philhofer/fwd";
+      rev = "1612a298117663d7bc9a760ae20d383413859798";
+      sha256 = "155l0nvvblpx0fy683q6bzins7csh8fw7yf64hbia8hc7wh0gjdl";
+    };
+  }
+  {
+    goPackagePath = "github.com/t-k/fluent-logger-golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/t-k/fluent-logger-golang";
+      rev = "0f8ec08f2057a61574b6943e75045fffbeae894e";
+      sha256 = "0ic5bj87wpq1kncixd5mklwqn1jjwqfqfvkyl0mrnwp3p5p24v5c";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "c197bcf24cde29d3f73c7b4ac6fd41f4384e8af6";
+      sha256 = "1y2bbghi594m8p4pcm9pwrzql06179xj6zvhaghwcc6y0l48rbgp";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/mgo.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/mgo.v2";
+      rev = "d90005c5262a3463800497ea5a89aed5fe22c886";
+      sha256 = "1z81k6mnfk07hkrkw31l16qycyiwa6wzyhysmywgkh58sm5dc9m7";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/mail/mailman/default.nix b/nixpkgs/pkgs/servers/mail/mailman/default.nix
new file mode 100644
index 000000000000..91445afa97df
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/mailman/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, python2 }:
+
+stdenv.mkDerivation rec {
+  name = "mailman-${version}";
+  version = "2.1.29";
+
+  src = fetchurl {
+    url = "mirror://gnu/mailman/${name}.tgz";
+    sha256 = "0b0dpwf6ap260791c7lg2vpw30llf19hymbf2hja3s016rqp5243";
+  };
+
+  buildInputs = [ python2 python2.pkgs.dnspython ];
+
+  patches = [ ./fix-var-prefix.patch ];
+
+  configureFlags = [
+    "--without-permcheck"
+    "--with-cgi-ext=.cgi"
+    "--with-var-prefix=/var/lib/mailman"
+  ];
+
+  installTargets = "doinstall"; # Leave out the 'update' target that's implied by 'install'.
+
+  makeFlags = [ "DIRSETGID=:" ];
+
+  meta = {
+    homepage = https://www.gnu.org/software/mailman/;
+    description = "Free software for managing electronic mail discussion and e-newsletter lists";
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.peti ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/mailman/fix-var-prefix.patch b/nixpkgs/pkgs/servers/mail/mailman/fix-var-prefix.patch
new file mode 100644
index 000000000000..9bb735ecbed7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/mailman/fix-var-prefix.patch
@@ -0,0 +1,33 @@
+diff -ubr mailman-2.1.16-orig/contrib/redhat_fhs.patch mailman-2.1.16/contrib/redhat_fhs.patch
+--- mailman-2.1.16-orig/contrib/redhat_fhs.patch	2013-10-21 14:55:48.797631434 +0200
++++ mailman-2.1.16/contrib/redhat_fhs.patch	2013-10-21 14:56:42.534310378 +0200
+@@ -197,7 +197,7 @@
+ +	    else true; \
+ +	    fi; \
+ +	done
+- 	chmod o-r $(DESTDIR)$(var_prefix)/archives/private
++ 	chmod o-r $(prefix)$(var_prefix)/archives/private
+  	@for d in $(ARCH_INDEP_DIRS); \
+  	do \
+ Only in mailman-2.1.5.FHS: Makefile.in~
+diff -ubr mailman-2.1.16-orig/Makefile.in mailman-2.1.16/Makefile.in
+--- mailman-2.1.16-orig/Makefile.in	2013-10-21 14:55:48.798631519 +0200
++++ mailman-2.1.16/Makefile.in	2013-10-21 14:56:42.562313220 +0200
+@@ -87,7 +87,7 @@
+ 	@echo "Creating architecture independent directories..."
+ 	@for d in $(VAR_DIRS); \
+ 	do \
+-	    dir=$(DESTDIR)$(var_prefix)/$$d; \
++	    dir=$(prefix)$(var_prefix)/$$d; \
+ 	    if test ! -d $$dir; then \
+ 		echo "Creating directory hierarchy $$dir"; \
+ 		$(srcdir)/mkinstalldirs $$dir; \
+@@ -96,7 +96,7 @@
+ 	    else true; \
+ 	    fi; \
+ 	done
+-	chmod o-r $(DESTDIR)$(var_prefix)/archives/private
++	chmod o-r $(prefix)$(var_prefix)/archives/private
+ 	@for d in $(ARCH_INDEP_DIRS); \
+ 	do \
+ 	    dir=$(DESTDIR)$(prefix)/$$d; \
diff --git a/nixpkgs/pkgs/servers/mail/mlmmj/default.nix b/nixpkgs/pkgs/servers/mail/mlmmj/default.nix
new file mode 100644
index 000000000000..98b270ad7d41
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/mlmmj/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+
+  name = "mlmmj-${version}";
+  version = "1.3.0";
+
+  src = fetchurl {
+    url = "http://mlmmj.org/releases/${name}.tar.gz";
+    sha256 = "1sghqvwizvm1a9w56r34qy5njaq1c26bagj85r60h32gh3fx02bn";
+  };
+
+  postInstall = ''
+    # grab all documentation files
+    docfiles=$(find -maxdepth 1 -name "[[:upper:]][[:upper:]]*")
+    install -vDm 644 -t $out/share/doc/mlmmj/ $docfiles
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://mlmmj.org;
+    description = "Mailing List Management Made Joyful";
+    maintainers = [ maintainers.edwtjo ];
+    platforms = platforms.linux;
+    license = licenses.mit;
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/mail/nullmailer/default.nix b/nixpkgs/pkgs/servers/mail/nullmailer/default.nix
new file mode 100644
index 000000000000..4b753bdf0cdb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/nullmailer/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, lib, tls ? true, gnutls ? null }:
+
+assert tls -> gnutls != null;
+
+stdenv.mkDerivation rec {
+
+  version = "2.2";
+  name = "nullmailer-${version}";
+
+  src = fetchurl {
+    url = "https://untroubled.org/nullmailer/nullmailer-${version}.tar.gz";
+    sha256 = "0md8cf90fl2yf3zh9njjy42a673v4j4ygyq95xg7fzkygdigm1lq";
+  };
+
+  buildInputs = stdenv.lib.optional tls gnutls;
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ] ++ stdenv.lib.optional tls "--enable-tls";
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  # We have to remove the ''var'' directory, since nix can't handle named pipes
+  # and we can't use it in the store anyway. Same for ''etc''.
+  # The second line is need, because the installer of nullmailer will copy its
+  # own prepared version of ''etc'' and ''var'' and also uses the prefix path (configure phase)
+  # for hardcoded absolute references to its own binary farm, e.g. sendmail binary is
+  # calling nullmailer-inject binary. Since we can't configure inside the store of
+  # the derivation we need both directories in the root, but don't want to put them there
+  # during install, hence we have to fix mumbling inside the install directory.
+  # This is kind of a hack, but the only way I know of, yet.
+  postInstall = ''
+    rm -rf $out/var/ $out/etc/
+    mv $out/$out/* $out/
+    rmdir $out/$out
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://untroubled.org/nullmailer/;
+    description = ''
+      A sendmail/qmail/etc replacement MTA for hosts which relay to a fixed set of smart relays.
+      It is designed to be simple to configure, secure, and easily extendable.
+    '';
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.all;
+    maintainers = with lib.maintainers ; [ sargon ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/opensmtpd/default.nix b/nixpkgs/pkgs/servers/mail/opensmtpd/default.nix
new file mode 100644
index 000000000000..695450f18222
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/opensmtpd/default.nix
@@ -0,0 +1,68 @@
+{ stdenv, lib, fetchurl, fetchpatch, autoconf, automake, libtool, bison
+, libasr, libevent, zlib, libressl, db, pam, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  name = "opensmtpd-${version}";
+  version = "6.4.0p2";
+
+  nativeBuildInputs = [ autoconf automake libtool bison ];
+  buildInputs = [ libasr libevent zlib libressl db pam ];
+
+  src = fetchurl {
+    url = "https://www.opensmtpd.org/archives/${name}.tar.gz";
+    sha256 = "1y7snhsrcdi56vaa23iwjpybhyrnnh2f6dxrfnacn7xgy5xwzbvn";
+  };
+
+  patches = [
+    ./proc_path.diff
+    ./fix-build.diff # See https://github.com/OpenSMTPD/OpenSMTPD/pull/884
+  ];
+
+  # See https://github.com/OpenSMTPD/OpenSMTPD/issues/885 for the `sh bootstrap`
+  # requirement
+  postPatch = ''
+    substituteInPlace smtpd/parse.y \
+      --replace "/usr/libexec/" "$out/libexec/opensmtpd/"
+    substituteInPlace mk/smtpctl/Makefile.am --replace "chgrp" "true"
+    substituteInPlace mk/smtpctl/Makefile.am --replace "chmod 2555" "chmod 0555"
+    sh bootstrap
+  '';
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-mantype=doc"
+    "--with-auth-pam"
+    "--without-auth-bsdauth"
+    "--with-path-socket=/run"
+    "--with-user-smtpd=smtpd"
+    "--with-user-queue=smtpq"
+    "--with-group-queue=smtpq"
+    "--with-path-CAfile=/etc/ssl/certs/ca-certificates.crt"
+    "--with-libevent=${libevent.dev}"
+    "--with-table-db"
+  ];
+
+  # See https://github.com/OpenSMTPD/OpenSMTPD/pull/884
+  makeFlags = [ "CFLAGS=-ffunction-sections" "LDFLAGS=-Wl,--gc-sections" ];
+
+  installFlags = [
+    "sysconfdir=\${out}/etc"
+    "localstatedir=\${TMPDIR}"
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.opensmtpd.org/;
+    description = ''
+      A free implementation of the server-side SMTP protocol as defined by
+      RFC 5321, with some additional standard extensions
+    '';
+    license = licenses.isc;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ rickynils obadz ekleog ];
+  };
+  passthru.tests = {
+    basic-functionality-and-dovecot-interaction = nixosTests.opensmtpd;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/opensmtpd/extras.nix b/nixpkgs/pkgs/servers/mail/opensmtpd/extras.nix
new file mode 100644
index 000000000000..1d4ad63c37d2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/opensmtpd/extras.nix
@@ -0,0 +1,92 @@
+{ stdenv, fetchurl, openssl, libevent, libasr,
+  python2, pkgconfig, lua5, perl, mysql, postgresql, sqlite, hiredis,
+  enablePython ? true,
+  enableLua ? true,
+  enablePerl ? true,
+  enableMysql ? true,
+  enablePostgres ? true,
+  enableSqlite ? true,
+  enableRedis ? true,
+}:
+
+stdenv.mkDerivation rec {
+  name = "opensmtpd-extras-${version}";
+  version = "6.4.0";
+
+  src = fetchurl {
+    url = "https://www.opensmtpd.org/archives/${name}.tar.gz";
+    sha256 = "09k25l7zy5ch3fk6qphni2h0rxdp8wacmfag1whi608dgimrhrnb";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ openssl libevent
+    libasr python2 lua5 perl mysql.connector-c postgresql sqlite hiredis ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-privsep-user=smtpd"
+    "--with-libevent-dir=${libevent.dev}"
+
+    "--with-filter-clamav"
+    "--with-filter-dkim-signer"
+    "--with-filter-dnsbl"
+    "--with-filter-monkey"
+    "--with-filter-pause"
+    "--with-filter-regex"
+    "--with-filter-spamassassin"
+    "--with-filter-stub"
+    "--with-filter-trace"
+    "--with-filter-void"
+    "--with-queue-null"
+    "--with-queue-ram"
+    "--with-queue-stub"
+    "--with-table-ldap"
+    "--with-table-socketmap"
+    "--with-table-passwd"
+    "--with-table-stub"
+    "--with-scheduler-ram"
+    "--with-scheduler-stub"
+
+  ] ++ stdenv.lib.optional enablePython [
+    "--with-python=${python2}"
+    "--with-filter-python"
+    "--with-queue-python"
+    "--with-table-python"
+    "--with-scheduler-python"
+
+  ] ++ stdenv.lib.optional enableLua [
+    "--with-lua=${pkgconfig}"
+    "--with-filter-lua"
+
+  ] ++ stdenv.lib.optional enablePerl [
+    "--with-perl=${perl}"
+    "--with-filter-perl"
+
+  ] ++ stdenv.lib.optional enableMysql [
+    "--with-table-mysql"
+
+  ] ++ stdenv.lib.optional enablePostgres [
+    "--with-table-postgres"
+
+  ] ++ stdenv.lib.optional enableSqlite [
+    "--with-table-sqlite"
+
+  ] ++ stdenv.lib.optional enableRedis [
+    "--with-table-redis"
+  ];
+
+  NIX_CFLAGS_COMPILE =
+    stdenv.lib.optional enableRedis
+      "-I${hiredis}/include/hiredis -lhiredis"
+    ++ stdenv.lib.optional enableMysql
+      "-L${mysql.connector-c}/lib/mysql";
+
+  meta = with stdenv.lib; {
+    homepage = https://www.opensmtpd.org/;
+    description = "Extra plugins for the OpenSMTPD mail server";
+    license = licenses.isc;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ gebner ekleog ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/opensmtpd/fix-build.diff b/nixpkgs/pkgs/servers/mail/opensmtpd/fix-build.diff
new file mode 100644
index 000000000000..1f995fd4f623
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/opensmtpd/fix-build.diff
@@ -0,0 +1,12 @@
+diff --git a/mk/smtpctl/Makefile.am b/mk/smtpctl/Makefile.am
+index 5af0b713..f0fce735 100644
+--- a/mk/smtpctl/Makefile.am
++++ b/mk/smtpctl/Makefile.am
+@@ -4,6 +4,7 @@ sbin_PROGRAMS=          smtpctl
+ 
+ smtpctl_SOURCES=	$(smtpd_srcdir)/enqueue.c
+ smtpctl_SOURCES+=	$(smtpd_srcdir)/parser.c
++smtpctl_SOURCES+=	$(smtpd_srcdir)/config.c
+ smtpctl_SOURCES+=	$(smtpd_srcdir)/log.c
+ smtpctl_SOURCES+=	$(smtpd_srcdir)/envelope.c
+ smtpctl_SOURCES+=	$(smtpd_srcdir)/queue_backend.c
diff --git a/nixpkgs/pkgs/servers/mail/opensmtpd/proc_path.diff b/nixpkgs/pkgs/servers/mail/opensmtpd/proc_path.diff
new file mode 100644
index 000000000000..5e1cfd004299
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/opensmtpd/proc_path.diff
@@ -0,0 +1,59 @@
+diff --git a/smtpd/smtpd.c b/smtpd/smtpd.c
+index e049f07c..a1bd03a0 100644
+--- a/smtpd/smtpd.c
++++ b/smtpd/smtpd.c
+@@ -1157,6 +1157,7 @@ fork_proc_backend(const char *key, const char *conf, const char *procname)
+ 	char		path[PATH_MAX];
+ 	char		name[PATH_MAX];
+ 	char		*arg;
++	char		*proc_path;
+ 
+ 	if (strlcpy(name, conf, sizeof(name)) >= sizeof(name)) {
+ 		log_warnx("warn: %s-proc: conf too long", key);
+@@ -1167,7 +1168,12 @@ fork_proc_backend(const char *key, const char *conf, const char *procname)
+ 	if (arg)
+ 		*arg++ = '\0';
+ 
+-	if (snprintf(path, sizeof(path), PATH_LIBEXEC "/%s-%s", key, name) >=
++	proc_path = getenv("OPENSMTPD_PROC_PATH");
++	if (proc_path == NULL) {
++		proc_path = PATH_LIBEXEC;
++	}
++
++	if (snprintf(path, sizeof(path), "%s/%s-%s", proc_path, key, name) >=
+ 	    (ssize_t)sizeof(path)) {
+ 		log_warn("warn: %s-proc: exec path too long", key);
+ 		return (-1);
+diff --git a/smtpd/table.c b/smtpd/table.c
+index 9cfdfb99..24dfcca4 100644
+--- a/smtpd/table.c
++++ b/smtpd/table.c
+@@ -201,6 +201,7 @@ table_create(const char *backend, const char *name, const char *tag,
+ 	struct table_backend	*tb;
+ 	char			 buf[LINE_MAX];
+ 	char			 path[LINE_MAX];
++	const char		*proc_path;
+ 	size_t			 n;
+ 	struct stat		 sb;
+ 
+@@ -215,11 +216,16 @@ table_create(const char *backend, const char *name, const char *tag,
+ 	if (name && table_find(name, NULL))
+ 		fatalx("table_create: table \"%s\" already defined", name);
+ 
++	proc_path = getenv("OPENSMTPD_PROC_PATH");
++	if (proc_path == NULL) {
++		proc_path = PATH_LIBEXEC;
++	}
++
+ 	if ((tb = table_backend_lookup(backend)) == NULL) {
+-		if ((size_t)snprintf(path, sizeof(path), PATH_LIBEXEC"/table-%s",
+-			backend) >= sizeof(path)) {
+-			fatalx("table_create: path too long \""
+-			    PATH_LIBEXEC"/table-%s\"", backend);
++		if ((size_t)snprintf(path, sizeof(path), "%s/table-%s",
++			proc_path, backend) >= sizeof(path)) {
++			fatalx("table_create: path too long \"%s/table-%s\"",
++				proc_path, backend);
+ 		}
+ 		if (stat(path, &sb) == 0) {
+ 			tb = table_backend_lookup("proc");
diff --git a/nixpkgs/pkgs/servers/mail/petidomo/default.nix b/nixpkgs/pkgs/servers/mail/petidomo/default.nix
new file mode 100644
index 000000000000..c97d8e4ccf38
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/petidomo/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, flex, bison, sendmailPath ? "/run/wrappers/bin/sendmail" }:
+
+stdenv.mkDerivation rec {
+  name = "petidomo-4.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/petidomo/${name}.tar.gz";
+    sha256 = "0x4dbxc4fcfg1rw5ywpcypvylnzn3y4rh0m6fz4h4cdnzb8p1lvm";
+  };
+
+  buildInputs = [ flex bison ];
+
+  configureFlags = [ "--with-mta=${sendmailPath}" ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = {
+    homepage = http://petidomo.sourceforge.net/;
+    description = "A simple and easy to administer mailing list server";
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.peti ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/popa3d/default.nix b/nixpkgs/pkgs/servers/mail/popa3d/default.nix
new file mode 100644
index 000000000000..e14b62a85971
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/popa3d/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl,  openssl }:
+
+stdenv.mkDerivation rec {
+
+  name = "popa3d-1.0.3";
+
+  src = fetchurl {
+    url = "http://www.openwall.com/popa3d/${name}.tar.gz";
+    sha256 = "1g48cd74sqhl496wmljhq44iyfpghaz363a1ip8nyhpjz7d57f03";
+  };
+
+  buildInputs = [ openssl ];
+
+  patches = [
+    ./fix-mail-spool-path.patch
+    ./use-openssl.patch
+    ./use-glibc-crypt.patch
+    ./enable-standalone-mode.patch
+  ];
+
+  configurePhase = ''makeFlags="PREFIX=$out MANDIR=$out/share/man"'';
+
+  meta = {
+    homepage = http://www.openwall.com/popa3d/;
+    description = "Tiny POP3 daemon with security as the primary goal";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/popa3d/enable-standalone-mode.patch b/nixpkgs/pkgs/servers/mail/popa3d/enable-standalone-mode.patch
new file mode 100644
index 000000000000..763ede102f25
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/popa3d/enable-standalone-mode.patch
@@ -0,0 +1,12 @@
+diff -ubr popa3d-1.0.2-orig/params.h popa3d-1.0.2/params.h
+--- popa3d-1.0.2-orig/params.h	2012-09-19 01:19:56.698098130 +0200
++++ popa3d-1.0.2/params.h	2012-09-19 01:37:06.749130665 +0200
+@@ -13,7 +13,7 @@
+ /*
+  * Are we going to be a standalone server or start via an inetd clone?
+  */
+-#define POP_STANDALONE			0
++#define POP_STANDALONE			1
+ 
+ #if POP_STANDALONE
+ 
diff --git a/nixpkgs/pkgs/servers/mail/popa3d/fix-mail-spool-path.patch b/nixpkgs/pkgs/servers/mail/popa3d/fix-mail-spool-path.patch
new file mode 100644
index 000000000000..4f440ae59663
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/popa3d/fix-mail-spool-path.patch
@@ -0,0 +1,12 @@
+diff -ubr popa3d-1.0.2-orig/params.h popa3d-1.0.2/params.h
+--- popa3d-1.0.2-orig/params.h	2012-09-19 01:19:56.698098130 +0200
++++ popa3d-1.0.2/params.h	2012-09-19 01:21:13.748065132 +0200
+@@ -191,7 +191,7 @@
+  *
+  * #undef this for qmail-style $HOME/Mailbox mailboxes.
+  */
+-#define MAIL_SPOOL_PATH			"/var/mail"
++#define MAIL_SPOOL_PATH			"/var/spool/mail"
+ 
+ #ifndef MAIL_SPOOL_PATH
+ /*
diff --git a/nixpkgs/pkgs/servers/mail/popa3d/use-glibc-crypt.patch b/nixpkgs/pkgs/servers/mail/popa3d/use-glibc-crypt.patch
new file mode 100644
index 000000000000..35843a38bb31
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/popa3d/use-glibc-crypt.patch
@@ -0,0 +1,12 @@
+diff -ubr popa3d-1.0.2-orig/Makefile popa3d-1.0.2/Makefile
+--- popa3d-1.0.2-orig/Makefile	2012-09-19 01:19:56.698098130 +0200
++++ popa3d-1.0.2/Makefile	2012-09-19 01:24:33.871750473 +0200
+@@ -9,7 +9,7 @@
+ LDFLAGS = -s
+ LIBS =
+ # Linux with glibc, FreeBSD, NetBSD
+-#LIBS += -lcrypt
++LIBS += -lcrypt
+ # HP-UX trusted system
+ #LIBS += -lsec
+ # Solaris (POP_STANDALONE, POP_VIRTUAL)
diff --git a/nixpkgs/pkgs/servers/mail/popa3d/use-openssl.patch b/nixpkgs/pkgs/servers/mail/popa3d/use-openssl.patch
new file mode 100644
index 000000000000..54301dd873b9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/popa3d/use-openssl.patch
@@ -0,0 +1,21 @@
+diff -ubr popa3d-1.0.2-orig/Makefile popa3d-1.0.2/Makefile
+--- popa3d-1.0.2-orig/Makefile	2012-09-19 01:19:56.698098130 +0200
++++ popa3d-1.0.2/Makefile	2012-09-19 01:23:00.309636423 +0200
+@@ -5,7 +5,7 @@
+ INSTALL = install -c
+ CFLAGS = -Wall -O2 -fomit-frame-pointer
+ # You may use OpenSSL's MD5 routines instead of the ones supplied here
+-#CFLAGS += -DHAVE_OPENSSL
++CFLAGS += -DHAVE_OPENSSL
+ LDFLAGS = -s
+ LIBS =
+ # Linux with glibc, FreeBSD, NetBSD
+@@ -21,7 +21,7 @@
+ # libwrap may also want this
+ #LIBS += -lnsl
+ # OpenSSL (-DHAVE_OPENSSL)
+-#LIBS += -lcrypto
++LIBS += -lcrypto
+ 
+ DESTDIR =
+ PREFIX = /usr/local
diff --git a/nixpkgs/pkgs/servers/mail/postfix/0001-Fix-build-with-unbound-1.6.1.patch b/nixpkgs/pkgs/servers/mail/postfix/0001-Fix-build-with-unbound-1.6.1.patch
new file mode 100644
index 000000000000..5de22573ea33
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/postfix/0001-Fix-build-with-unbound-1.6.1.patch
@@ -0,0 +1,54 @@
+From bf269dda3c81bb9eaa244b3015d426de38c85ccf Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Carles=20Pag=C3=A8s?= <page@ruiec.cat>
+Date: Fri, 3 Mar 2017 09:59:09 +0100
+Subject: [PATCH] Fix build with unbound 1.6.1
+
+From their changelog: Fix to rename ub_callback_t to ub_callback_type, because POSIX reserves _t typedefs
+---
+ postlicyd/dns.c       | 2 +-
+ postlicyd/dns.h       | 2 +-
+ postlicyd/spf-proto.c | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/postlicyd/dns.c b/postlicyd/dns.c
+index d8409c2..97f1c4d 100644
+--- a/postlicyd/dns.c
++++ b/postlicyd/dns.c
+@@ -123,7 +123,7 @@ static int dns_handler(client_t *event, void *config)
+ }
+ 
+ bool dns_resolve(const char *hostname, dns_rrtype_t type,
+-                 ub_callback_t callback, void *data)
++                 ub_callback_type callback, void *data)
+ {
+     if (_G.ctx == NULL) {
+         _G.ctx = ub_ctx_create();
+diff --git a/postlicyd/dns.h b/postlicyd/dns.h
+index d84de3b..905b924 100644
+--- a/postlicyd/dns.h
++++ b/postlicyd/dns.h
+@@ -89,7 +89,7 @@ typedef void (*dns_result_callback_f)(dns_result_t *result, void *data);
+  */
+ __attribute__((nonnull(1,3,4)))
+ bool dns_resolve(const char *hostname, dns_rrtype_t type,
+-                 ub_callback_t callback, void *data);
++                 ub_callback_type callback, void *data);
+ 
+ /** Fetch the DNS record of the given type.
+  */
+diff --git a/postlicyd/spf-proto.c b/postlicyd/spf-proto.c
+index 31cb0a5..79a2d83 100644
+--- a/postlicyd/spf-proto.c
++++ b/postlicyd/spf-proto.c
+@@ -279,7 +279,7 @@ static bool spf_validate_domain(const char* restrict domain)
+ }
+ 
+ static bool spf_query(spf_t *spf, const char* query, dns_rrtype_t rtype,
+-                      ub_callback_t cb)
++                      ub_callback_type cb)
+ {
+     buffer_reset(&_G.query_buffer);
+     buffer_addstr(&_G.query_buffer, query);
+-- 
+2.12.0
+
diff --git a/nixpkgs/pkgs/servers/mail/postfix/default.nix b/nixpkgs/pkgs/servers/mail/postfix/default.nix
new file mode 100644
index 000000000000..e2a78477bb63
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/postfix/default.nix
@@ -0,0 +1,98 @@
+{ stdenv, lib, fetchurl, makeWrapper, gnused, db, openssl, cyrus_sasl, libnsl
+, coreutils, findutils, gnugrep, gawk, icu, pcre, m4
+, withLDAP ? true, openldap
+, withPgSQL ? false, postgresql
+, withMySQL ? false, mysql
+, withSQLite ? false, sqlite
+}:
+
+let
+  ccargs = lib.concatStringsSep " " ([
+    "-DUSE_TLS" "-DUSE_SASL_AUTH" "-DUSE_CYRUS_SASL" "-I${cyrus_sasl.dev}/include/sasl"
+    "-DHAS_DB_BYPASS_MAKEDEFS_CHECK"
+   ] ++ lib.optional withPgSQL "-DHAS_PGSQL"
+     ++ lib.optionals withMySQL [ "-DHAS_MYSQL" "-I${mysql.connector-c}/include/mysql" "-L${mysql.connector-c}/lib/mysql" ]
+     ++ lib.optional withSQLite "-DHAS_SQLITE"
+     ++ lib.optionals withLDAP ["-DHAS_LDAP" "-DUSE_LDAP_SASL"]);
+   auxlibs = lib.concatStringsSep " " ([
+     "-ldb" "-lnsl" "-lresolv" "-lsasl2" "-lcrypto" "-lssl"
+   ] ++ lib.optional withPgSQL "-lpq"
+     ++ lib.optional withMySQL "-lmysqlclient"
+     ++ lib.optional withSQLite "-lsqlite3"
+     ++ lib.optional withLDAP "-lldap");
+
+in stdenv.mkDerivation rec {
+
+  name = "postfix-${version}";
+
+  version = "3.3.2";
+
+  src = fetchurl {
+    url = "ftp://ftp.cs.uu.nl/mirror/postfix/postfix-release/official/${name}.tar.gz";
+    sha256 = "0nxkszdgs6fs86j6w1lf3vhxvjh1hw2jmrii5icqx9a9xqgg74rw";
+  };
+
+  nativeBuildInputs = [ makeWrapper m4 ];
+  buildInputs = [ db openssl cyrus_sasl icu libnsl pcre ]
+                ++ lib.optional withPgSQL postgresql
+                ++ lib.optional withMySQL mysql.connector-c
+                ++ lib.optional withSQLite sqlite
+                ++ lib.optional withLDAP openldap;
+
+  hardeningDisable = [ "format" ];
+  hardeningEnable = [ "pie" ];
+
+  patches = [
+    ./postfix-script-shell.patch
+    ./postfix-3.0-no-warnings.patch
+    ./post-install-script.patch
+    ./relative-symlinks.patch
+  ];
+
+  preBuild = ''
+    sed -e '/^PATH=/d' -i postfix-install
+    sed -e "s|@PACKAGE@|$out|" -i conf/post-install
+
+    # post-install need skip permissions check/set on all symlinks following to /nix/store
+    sed -e "s|@NIX_STORE@|$NIX_STORE|" -i conf/post-install
+
+    export command_directory=$out/sbin
+    export config_directory=/etc/postfix
+    export meta_directory=$out/etc/postfix
+    export daemon_directory=$out/libexec/postfix
+    export data_directory=/var/lib/postfix/data
+    export html_directory=$out/share/postfix/doc/html
+    export mailq_path=$out/bin/mailq
+    export manpage_directory=$out/share/man
+    export newaliases_path=$out/bin/newaliases
+    export queue_directory=/var/lib/postfix/queue
+    export readme_directory=$out/share/postfix/doc
+    export sendmail_path=$out/bin/sendmail
+
+    make makefiles CCARGS='${ccargs}' AUXLIBS='${auxlibs}'
+  '';
+
+  installTargets = [ "non-interactive-package" ];
+
+  installFlags = [ "install_root=installdir" ];
+
+  postInstall = ''
+    mkdir -p $out
+    mv -v installdir/$out/* $out/
+    cp -rv installdir/etc $out
+    sed -e '/^PATH=/d' -i $out/libexec/postfix/post-install
+    wrapProgram $out/libexec/postfix/post-install \
+      --prefix PATH ":" ${lib.makeBinPath [ coreutils findutils gnugrep ]}
+    wrapProgram $out/libexec/postfix/postfix-script \
+      --prefix PATH ":" ${lib.makeBinPath [ coreutils findutils gnugrep gawk gnused ]}
+  '';
+
+  meta = {
+    homepage = http://www.postfix.org/;
+    description = "A fast, easy to administer, and secure mail server";
+    license = with lib.licenses; [ ipl10 epl20 ];
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.rickynils ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/mail/postfix/pfixtools.nix b/nixpkgs/pkgs/servers/mail/postfix/pfixtools.nix
new file mode 100644
index 000000000000..8c00bcdbee25
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/postfix/pfixtools.nix
@@ -0,0 +1,55 @@
+{ stdenv, lib, fetchFromGitHub, git, gperf, pcre, unbound, libev, tokyocabinet, pkgconfig, bash, libsrs2 }:
+
+let
+  version = "0.9";
+
+  pfixtoolsSrc = fetchFromGitHub {
+    owner = "Fruneau";
+    repo = "pfixtools";
+    rev = "pfixtools-${version}";
+    sha256 = "1vmbrw686f41n6xfjphfshn96vl07ynvnsyjdw9yfn9bfnldcjcq";
+  };
+
+  srcRoot = pfixtoolsSrc.name;
+
+  libCommonSrc = fetchFromGitHub {
+    owner = "Fruneau";
+    repo = "libcommon";
+    rev = "b07e6bdea3d24748e0d39783d7d817096d10cc67";
+    sha256 = "14fxldp29j4vmfmhfgwwi37pj8cz0flm1aykkxlbgakz92d4pm35";
+  };
+
+in
+
+stdenv.mkDerivation {
+  name = "pfixtools-${version}";
+
+  src = pfixtoolsSrc;
+
+  patches = [ ./0001-Fix-build-with-unbound-1.6.1.patch ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [git gperf pcre unbound libev tokyocabinet bash libsrs2];
+
+  postUnpack = ''
+    cp -Rp ${libCommonSrc}/* ${srcRoot}/common;
+    chmod -R +w ${srcRoot}/common;
+  '';
+
+  postPatch = ''
+    substituteInPlace postlicyd/policy_tokens.sh \
+                      --replace /bin/bash ${bash}/bin/bash;
+  '';
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=unused-result -Wno-error=nonnull-compare";
+
+  makeFlags = "DESTDIR=$(out) prefix=";
+
+  meta = {
+    description = "A collection of postfix-related tools";
+    license = with lib.licenses; [ bsd3 ];
+    homepage = https://github.com/Fruneau/pfixtools;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with lib.maintainers; [ jerith666 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/postfix/pflogsumm.nix b/nixpkgs/pkgs/servers/mail/postfix/pflogsumm.nix
new file mode 100644
index 000000000000..821999380606
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/postfix/pflogsumm.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, perlPackages }:
+
+perlPackages.buildPerlPackage rec {
+  name = "pflogsumm-${version}";
+  version = "1.1.3";
+
+  src = fetchurl {
+    url = "https://jimsun.linxnet.com/downloads/${name}.tar.gz";
+    sha256 = "0hkim9s5f1yg5sfs5048jydhy3sbxafls496wcjk0cggxb113py4";
+  };
+
+  outputs = [ "out" "man" ];
+  buildInputs = [ perlPackages.DateCalc ];
+
+  preConfigure = ''
+    touch Makefile.PL
+  '';
+  doCheck = false;
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mv "pflogsumm.pl" "$out/bin/pflogsumm"
+
+    mkdir -p "$out/share/man/man1"
+    mv "pflogsumm.1" "$out/share/man/man1"
+  '';
+
+  meta = {
+    homepage = http://jimsun.linxnet.com/postfix_contrib.html;
+    maintainers = with stdenv.lib.maintainers; [ schneefux ];
+    description = "Postfix activity overview";
+    license = stdenv.lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/postfix/post-install-script.patch b/nixpkgs/pkgs/servers/mail/postfix/post-install-script.patch
new file mode 100644
index 000000000000..350fbf929b74
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/postfix/post-install-script.patch
@@ -0,0 +1,28 @@
+--- a/conf/post-install	1970-01-01 03:00:01.000000000 +0300
++++ b/conf/post-install	2016-01-20 13:25:18.382233172 +0200
+@@ -254,6 +254,8 @@
+ }
+ 
+ # Bootstrapping problem.
++meta_directory="@PACKAGE@/etc/postfix"
++command_directory="@PACKAGE@/bin"
+ 
+ if [ -n "$command_directory" ]
+ then
+@@ -528,7 +530,16 @@
+ 	    # Skip uninstalled files.
+ 	    case $path in
+ 	    no|no/*) continue;;
++        # Skip immutable files from package, correct permissions provided by Nix.
++        @PACKAGE@/*) continue;
+ 	    esac
++        # Also skip symlinks following to /nix/store
++        if test -L $path; then
++            case "$(readlink $path)" in
++                @NIX_STORE@/*) continue;
++            esac
++        fi
++
+ 	    # Pick up the flags.
+ 	    case $flags in *u*) upgrade_flag=1;; *) upgrade_flag=;; esac
+ 	    case $flags in *c*) create_flag=1;; *) create_flag=;; esac
diff --git a/nixpkgs/pkgs/servers/mail/postfix/postfix-3.0-no-warnings.patch b/nixpkgs/pkgs/servers/mail/postfix/postfix-3.0-no-warnings.patch
new file mode 100644
index 000000000000..d93eaf0aaa0d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/postfix/postfix-3.0-no-warnings.patch
@@ -0,0 +1,86 @@
+diff -ru3 postfix-3.0.3/conf/postfix-script postfix-3.0.3-new/conf/postfix-script
+--- postfix-3.0.3/conf/postfix-script	2014-06-27 18:05:15.000000000 +0400
++++ postfix-3.0.3-new/conf/postfix-script	2016-01-09 17:51:38.545733631 +0300
+@@ -84,24 +84,6 @@
+ 	exit 1
+ }
+ 
+-# If this is a secondary instance, don't touch shared files.
+-
+-instances=`test ! -f $def_config_directory/main.cf ||
+-    $command_directory/postconf -c $def_config_directory \
+-    -h multi_instance_directories | sed 's/,/ /'` || {
+-	$FATAL cannot execute $command_directory/postconf!
+-	exit 1
+-}
+-
+-check_shared_files=1
+-for name in $instances
+-do
+-    case "$name" in
+-    "$def_config_directory") ;;
+-    "$config_directory") check_shared_files=; break;;
+-    esac
+-done
+-
+ #
+ # Parse JCL
+ #
+@@ -262,22 +244,6 @@
+ 	    -prune \( -perm -020 -o -perm -002 \) \
+ 	    -exec $WARN group or other writable: {} \;
+ 
+-	# Check Postfix root-owned directory tree owner/permissions.
+-
+-	todo="$config_directory/."
+-	test -n "$check_shared_files" && {
+-		todo="$daemon_directory/. $meta_directory/. $todo"
+-		test "$shlib_directory" = "no" || 
+-		    todo="$shlib_directory/. $todo"
+-	}
+-	todo=`echo "$todo" | tr ' ' '\12' | sort -u`
+-
+-	find $todo ! -user root \
+-	    -exec $WARN not owned by root: {} \;
+-
+-	find $todo \( -perm -020 -o -perm -002 \) \
+-	    -exec $WARN group or other writable: {} \;
+-
+ 	# Check Postfix mail_owner-owned directory tree owner/permissions.
+ 
+ 	find $data_directory/. ! -user $mail_owner \
+@@ -302,18 +268,11 @@
+ 	# Check Postfix setgid_group-owned directory and file group/permissions.
+ 
+ 	todo="$queue_directory/public $queue_directory/maildrop"
+-	test -n "$check_shared_files" && 
+-	   todo="$command_directory/postqueue $command_directory/postdrop $todo"
+ 
+ 	find $todo \
+ 	    -prune ! -group $setgid_group \
+ 	    -exec $WARN not owned by group $setgid_group: {} \;
+ 
+-	test -n "$check_shared_files" &&
+-	find $command_directory/postqueue $command_directory/postdrop \
+-	    -prune ! -perm -02111 \
+-	    -exec $WARN not set-gid or not owner+group+world executable: {} \;
+-
+ 	# Check non-Postfix root-owned directory tree owner/content.
+ 
+ 	for dir in bin etc lib sbin usr
+@@ -334,15 +293,6 @@
+ 
+ 	find corrupt -type f -exec $WARN damaged message: {} \;
+ 
+-	# Check for non-Postfix MTA remnants.
+-
+-	test -n "$check_shared_files" -a -f /usr/sbin/sendmail -a \
+-		-f /usr/lib/sendmail && {
+-	    cmp -s /usr/sbin/sendmail /usr/lib/sendmail || {
+-		$WARN /usr/lib/sendmail and /usr/sbin/sendmail differ
+-		$WARN Replace one by a symbolic link to the other
+-	    }
+-	}
+ 	exit 0
+ 	;;
+ 
diff --git a/nixpkgs/pkgs/servers/mail/postfix/postfix-script-shell.patch b/nixpkgs/pkgs/servers/mail/postfix/postfix-script-shell.patch
new file mode 100644
index 000000000000..4f5d2f611110
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/postfix/postfix-script-shell.patch
@@ -0,0 +1,21 @@
+diff --git a/conf/postfix-script b/conf/postfix-script
+index 19088a6..04fae23 100755
+--- a/conf/postfix-script
++++ b/conf/postfix-script
+@@ -43,7 +43,6 @@ FATAL="$LOGGER -p fatal"
+ PANIC="$LOGGER -p panic"
+ 
+ umask 022
+-SHELL=/bin/sh
+ 
+ #
+ # Can't do much without these in place.
+@@ -229,7 +228,7 @@ status)
+ check-fatal)
+ 	# This command is NOT part of the public interface.
+ 
+-	$SHELL $daemon_directory/post-install create-missing || {
++	$daemon_directory/post-install create-missing || {
+ 		$FATAL unable to create missing queue directories
+ 		exit 1
+ 	}
diff --git a/nixpkgs/pkgs/servers/mail/postfix/relative-symlinks.patch b/nixpkgs/pkgs/servers/mail/postfix/relative-symlinks.patch
new file mode 100644
index 000000000000..f7a2078c0343
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/postfix/relative-symlinks.patch
@@ -0,0 +1,13 @@
+diff --git a/postfix-install b/postfix/postfix-install
+index 1662c3d..0f20ec0 100644
+--- a/postfix-install
++++ b/postfix-install
+@@ -336,7 +336,7 @@ compare_or_symlink() {
+ 	# 2) we cannot use mv to replace a symlink-to-directory;
+ 	# 3) "ln -n" is not in POSIX, therefore it's not portable.
+ 	# rm+ln is less atomic but this affects compatibility symlinks only.
+-	rm -f $2 && ln -sf $link $2 || exit 1
++	rm -f $2 && ln -rsf $link $2 || exit 1
+     }
+ }
+ 
diff --git a/nixpkgs/pkgs/servers/mail/postgrey/default.nix b/nixpkgs/pkgs/servers/mail/postgrey/default.nix
new file mode 100644
index 000000000000..3e7163cb1541
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/postgrey/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, perl, perlPackages, lib, runCommand, postfix }:
+
+let
+    mk-perl-flags = inputs: lib.concatStringsSep " " (map (dep: "-I ${dep}/lib/perl5/site_perl") inputs);
+    postgrey-flags = mk-perl-flags (with perlPackages; [
+      NetServer BerkeleyDB DigestSHA1 NetAddrIP IOMultiplex
+    ]);
+    policy-test-flags = mk-perl-flags (with perlPackages; [
+      ParseSyslog
+    ]);
+    version = "1.37";
+    name = "postgrey-${version}";
+in runCommand name {
+  src = fetchurl {
+    url = "https://postgrey.schweikert.ch/pub/${name}.tar.gz";
+    sha256 = "1xx51xih4711vrvc6d57il9ccallbljj5zhgqdb07jzmz11rakgz";
+  };
+  meta = with stdenv.lib; {
+    description = "A postfix policy server to provide greylisting";
+    homepage = https://postgrey.schweikert.ch/;
+    platforms = postfix.meta.platforms;
+    license = licenses.gpl2;
+  };
+} ''
+    mkdir -p $out/bin
+    cd $out
+    tar -xzf $src --strip-components=1
+    mv postgrey policy-test bin
+    sed -i -e "s,#!/usr/bin/perl -T,#!${perl}/bin/perl -T ${postgrey-flags}," \
+           -e "s#/etc/postfix#$out#" \
+        bin/postgrey
+    sed -i -e "s,#!/usr/bin/perl,#!${perl}/bin/perl ${policy-test-flags}," \
+        bin/policy-test
+''
diff --git a/nixpkgs/pkgs/servers/mail/postsrsd/default.nix b/nixpkgs/pkgs/servers/mail/postsrsd/default.nix
new file mode 100644
index 000000000000..01eeeb15efaf
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/postsrsd/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, cmake, help2man }:
+
+stdenv.mkDerivation rec {
+  name = "postsrsd-${version}";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "roehling";
+    repo = "postsrsd";
+    rev = version;
+    sha256 = "09yzb0fvnbfy534maqlqk79c41p1yz8r9f73n7bahm5lwd0livk9";
+  };
+
+  cmakeFlags = [ "-DGENERATE_SRS_SECRET=OFF" "-DINIT_FLAVOR=systemd" ];
+
+  preConfigure = ''
+    sed -i "s,\"/etc\",\"$out/etc\",g" CMakeLists.txt
+  '';
+
+  nativeBuildInputs = [ cmake help2man ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/roehling/postsrsd;
+    description = "Postfix Sender Rewriting Scheme daemon";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/pypolicyd-spf/default.nix b/nixpkgs/pkgs/servers/mail/pypolicyd-spf/default.nix
new file mode 100644
index 000000000000..d5e410a86c1f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/pypolicyd-spf/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildPythonApplication, fetchurl, pyspf }:
+
+buildPythonApplication rec {
+  name = "pypolicyd-spf-${version}";
+  majorVersion = "2.0";
+  version = "${majorVersion}.2";
+
+  src = fetchurl {
+    url = "https://launchpad.net/pypolicyd-spf/${majorVersion}/${version}/+download/${name}.tar.gz";
+    sha256 = "1nm8y1jjgx6mxrbcxrbdnmkf8vglwp0wiw6jipzh641wb24gi76z";
+  };
+
+  propagatedBuildInputs = [ pyspf ];
+
+  preBuild = ''
+    substituteInPlace setup.py --replace "'/etc'" "'$out/etc'"
+  '';
+
+  meta = with lib; {
+    homepage = https://launchpad.net/pypolicyd-spf/;
+    description = "Postfix policy engine for Sender Policy Framework (SPF) checking";
+    maintainers = with maintainers; [ abbradar ];
+    license = licenses.asl20;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/rmilter/default.nix b/nixpkgs/pkgs/servers/mail/rmilter/default.nix
new file mode 100644
index 000000000000..739270326e5b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/rmilter/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, cmake, bison, flex, pkgconfig, openssl, pcre
+, libmilter, opendkim, libmemcached, glib }:
+
+let patchedLibmilter = stdenv.lib.overrideDerivation  libmilter (_ : {
+    patches = libmilter.patches ++ [ ./fd-passing-libmilter.patch ];
+});
+in
+
+stdenv.mkDerivation rec {
+  name = "rmilter-${version}";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "vstakhov";
+    repo = "rmilter";
+    rev = version;
+    sha256 = "1gbp6jah88l6xqgflim01ycyp63l733bgir65fxnnrmifj1qzymh";
+  };
+
+  nativeBuildInputs = [ bison cmake flex pkgconfig ];
+  buildInputs = [ libmemcached patchedLibmilter openssl pcre opendkim glib ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/vstakhov/rmilter;
+    license = licenses.asl20;
+    description = ''
+      Daemon to integrate rspamd and milter compatible MTA, for example
+      postfix or sendmail
+    '';
+    maintainers = with maintainers; [ avnik fpletz ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/rmilter/fd-passing-libmilter.patch b/nixpkgs/pkgs/servers/mail/rmilter/fd-passing-libmilter.patch
new file mode 100644
index 000000000000..3ab61a6fab00
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/rmilter/fd-passing-libmilter.patch
@@ -0,0 +1,80 @@
+Description: systemd-like socket activation support for libmilter
+Author: Mikhail Gusarov <dottedmag@debian.org
+diff --git a/libmilter/docs/smfi_setconn.html b/libmilter/docs/smfi_setconn.html
+index 70a510e..013f04e 100644
+--- a/libmilter/docs/smfi_setconn.html
++++ b/libmilter/docs/smfi_setconn.html
+@@ -43,6 +43,7 @@ Set the socket through which this filter should communicate with sendmail.
+ 	<LI><CODE>{unix|local}:/path/to/file</CODE> -- A named pipe.
+ 	<LI><CODE>inet:port@{hostname|ip-address}</CODE> -- An IPV4 socket.
+ 	<LI><CODE>inet6:port@{hostname|ip-address}</CODE> -- An IPV6 socket.
++	<LI><CODE>fd:number</CODE> -- Pre-opened file descriptor.
+ 	</UL>
+ 	</TD></TR>
+     </TABLE>
+diff --git a/libmilter/listener.c b/libmilter/listener.c
+index 48c552f..2249a1f 100644
+--- a/libmilter/listener.c
++++ b/libmilter/listener.c
+@@ -197,6 +197,11 @@ mi_milteropen(conn, backlog, rmsocket, name)
+ 			L_socksize = sizeof addr.sin6;
+ 		}
+ #endif /* NETINET6 */
++		else if (strcasecmp(p, "fd") == 0)
++		{
++			addr.sa.sa_family = AF_UNSPEC;
++			L_socksize = sizeof (_SOCK_ADDR);
++		}
+ 		else
+ 		{
+ 			smi_log(SMI_LOG_ERR, "%s: unknown socket type %s",
+@@ -443,7 +448,21 @@ mi_milteropen(conn, backlog, rmsocket, name)
+ 	}
+ #endif /* NETINET || NETINET6 */
+ 
+-	sock = socket(addr.sa.sa_family, SOCK_STREAM, 0);
++	if (addr.sa.sa_family == AF_UNSPEC)
++	{
++		char *end;
++		sock = strtol(colon, &end, 10);
++		if (*end != '\0' || sock < 0)
++		{
++			smi_log(SMI_LOG_ERR, "%s: expected positive integer as fd, got %s", name, colon);
++			return INVALID_SOCKET;
++		}
++	}
++	else
++	{
++		sock = socket(addr.sa.sa_family, SOCK_STREAM, 0);
++	}
++
+ 	if (!ValidSocket(sock))
+ 	{
+ 		smi_log(SMI_LOG_ERR,
+@@ -466,6 +485,7 @@ mi_milteropen(conn, backlog, rmsocket, name)
+ #if NETUNIX
+ 	    addr.sa.sa_family != AF_UNIX &&
+ #endif /* NETUNIX */
++	    addr.sa.sa_family != AF_UNSPEC &&
+ 	    setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *) &sockopt,
+ 		       sizeof(sockopt)) == -1)
+ 	{
+@@ -511,7 +531,8 @@ mi_milteropen(conn, backlog, rmsocket, name)
+ 	}
+ #endif /* NETUNIX */
+ 
+-	if (bind(sock, &addr.sa, L_socksize) < 0)
++	if (addr.sa.sa_family != AF_UNSPEC &&
++	    bind(sock, &addr.sa, L_socksize) < 0)
+ 	{
+ 		smi_log(SMI_LOG_ERR,
+ 			"%s: Unable to bind to port %s: %s",
+@@ -817,7 +838,7 @@ mi_listener(conn, dbg, smfi, timeout, backlog)
+ # ifdef BSD4_4_SOCKADDR
+ 		     cliaddr.sa.sa_len == 0 ||
+ # endif /* BSD4_4_SOCKADDR */
+-		     cliaddr.sa.sa_family != L_family))
++		     (L_family != AF_UNSPEC && cliaddr.sa.sa_family != L_family)))
+ 		{
+ 			(void) closesocket(connfd);
+ 			connfd = INVALID_SOCKET;
diff --git a/nixpkgs/pkgs/servers/mail/rspamd/default.nix b/nixpkgs/pkgs/servers/mail/rspamd/default.nix
new file mode 100644
index 000000000000..fda7a1a80ef7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/rspamd/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, lib, fetchFromGitHub, cmake, perl
+, file, glib, libevent, luajit, openssl, pcre, pkgconfig, sqlite, ragel, icu
+, hyperscan, libfann, gd, jemalloc, openblas
+, withFann ? true
+, withGd ? false
+, withBlas ? true
+, withHyperscan ? stdenv.isx86_64
+}:
+
+assert withHyperscan -> stdenv.isx86_64;
+
+let libmagic = file;  # libmagic provided by file package ATM
+in
+
+stdenv.mkDerivation rec {
+  name = "rspamd-${version}";
+  version = "1.8.3";
+
+  src = fetchFromGitHub {
+    owner = "rspamd";
+    repo = "rspamd";
+    rev = version;
+    sha256 = "1aikmscb3hywac4sf4xkl4kw0x3syzphfrmxhigz2jjqzxn8f50k";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig perl ];
+  buildInputs = [ glib libevent libmagic luajit openssl pcre sqlite ragel icu jemalloc ]
+    ++ lib.optional withFann libfann
+    ++ lib.optional withGd gd
+    ++ lib.optional withHyperscan hyperscan
+    ++ lib.optional withBlas openblas;
+
+  cmakeFlags = [
+    "-DDEBIAN_BUILD=ON"
+    "-DRUNDIR=/var/run/rspamd"
+    "-DDBDIR=/var/lib/rspamd"
+    "-DLOGDIR=/var/log/rspamd"
+    "-DLOCAL_CONFDIR=/etc/rspamd"
+    "-DENABLE_JEMALLOC=ON"
+  ] ++ lib.optional withFann "-DENABLE_FANN=ON"
+    ++ lib.optional withHyperscan "-DENABLE_HYPERSCAN=ON"
+    ++ lib.optional withGd "-DENABLE_GD=ON";
+
+  meta = with stdenv.lib; {
+    homepage = https://rspamd.com;
+    license = licenses.asl20;
+    description = "Advanced spam filtering system";
+    maintainers = with maintainers; [ avnik fpletz ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/spamassassin/default.nix b/nixpkgs/pkgs/servers/mail/spamassassin/default.nix
new file mode 100644
index 000000000000..d32957210132
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/spamassassin/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, perl, perlPackages, HTMLParser, NetDNS, NetAddrIP, DBFile
+, HTTPDate, MailDKIM, LWP, IOSocketSSL, makeWrapper, gnupg1
+}:
+
+perlPackages.buildPerlPackage rec {
+  name = "SpamAssassin-3.4.1";
+
+  src = fetchurl {
+    url = "mirror://apache/spamassassin/source/Mail-${name}.tar.bz2";
+    sha256 = "0la6s5ilamf9129kyjckcma8cr6fpb6b5f2fb64v7106iy0ckhd0";
+  };
+
+  # https://bz.apache.org/SpamAssassin/show_bug.cgi?id=7434
+  patches = [ ./sa-update_add--siteconfigpath.patch ];
+
+  buildInputs = with perlPackages; [ makeWrapper HTMLParser NetDNS NetAddrIP DBFile HTTPDate MailDKIM
+    LWP IOSocketSSL DBI EncodeDetect IPCountry NetIdent Razor2ClientAgent MailSPF NetDNSResolverProgrammable ];
+
+  # Enabling 'taint' mode is desirable, but that flag disables support
+  # for the PERL5LIB environment variable. Needs further investigation.
+  makeFlags = "PERL_BIN=${perl}/bin/perl PERL_TAINT=no";
+
+  makeMakerFlags = "CONFDIR=/homeless/shelter LOCALSTATEDIR=/var/lib/spamassassin";
+
+  doCheck = false;
+
+  postInstall = ''
+    mkdir -p $out/share/spamassassin
+    mv "rules/"* $out/share/spamassassin/
+
+    for n in "$out/bin/"*; do
+      wrapProgram "$n" --prefix PERL5LIB : "$PERL5LIB" --prefix PATH : "${gnupg1}/bin"
+    done
+  '';
+
+  meta = {
+    homepage = http://spamassassin.apache.org/;
+    description = "Open-Source Spam Filter";
+    license = stdenv.lib.licenses.asl20;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ peti qknight ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/spamassassin/sa-update_add--siteconfigpath.patch b/nixpkgs/pkgs/servers/mail/spamassassin/sa-update_add--siteconfigpath.patch
new file mode 100644
index 000000000000..3264aefc0722
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/spamassassin/sa-update_add--siteconfigpath.patch
@@ -0,0 +1,59 @@
+From 60abf3ee8864980a95b32e2d6cf60e26b49654c0 Mon Sep 17 00:00:00 2001
+From: joachim schiele <js@lastlog.de>
+Date: Wed, 7 Jun 2017 22:15:39 +0200
+Subject: [PATCH 2/2] Adding --siteconfigpath to not be forced to use global /etc/spamasassin configuration directory but to provide an alternative location.
+
+---
+ sa-update.raw | 5 +++++
+ lib/Mail/SpamAssassin/PerMsgStatus.pm | 2 +
+ 2 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/sa-update.raw b/sa-update.raw
+index bb7396d..39f681f 100755
+--- a/sa-update.raw
++++ b/sa-update.raw
+@@ -196,6 +196,7 @@ GetOptions(
+   'gpgkeyfile=s'			=> \$opt{'gpgkeyfile'},
+   'channelfile=s'			=> \$opt{'channelfile'},
+   'updatedir=s'				=> \$opt{'updatedir'},
++  'siteconfigpath=s'                           => \$opt{'siteconfigpath'},
+   'gpg!'				=> \$GPG_ENABLED,
+ 
+   '4'                                   => sub { $opt{'force_pf'} = 'inet' },
+@@ -267,6 +268,9 @@ else {
+   $opt{'updatedir'} = $SA->sed_path('__local_state_dir__/__version__');
+ }
+ 
++if (defined $opt{'siteconfigpath'}) {
++  $LOCAL_RULES_DIR = untaint_file_path($opt{'siteconfigpath'});
++}
+ 
+ # check only disabled gpg
+ # https://issues.apache.org/SpamAssassin/show_bug.cgi?id=5854
+@@ -1808,6 +1812,7 @@ Options:
+   --updatedir path        Directory to place updates, defaults to the
+                           SpamAssassin site rules directory
+                           (default: @@LOCAL_STATE_DIR@@/@@VERSION@@)
++  --siteconfigpath=path   Path for site configs
+   --refreshmirrors        Force the MIRRORED.BY file to be updated
+   -D, --debug [area=n,...]  Print debugging messages
+   -v, --verbose           Be verbose, like print updated channel names;
+-- 
+diff --git a/lib/Mail/SpamAssassin/PerMsgStatus.pm b/lib/Mail/SpamAssassin/PerMsgStatus.pm
+index 6d8beaa..6ad87dc 100644
+--- a/lib/Mail/SpamAssassin/PerMsgStatus.pm
++++ b/lib/Mail/SpamAssassin/PerMsgStatus.pm
+@@ -389,7 +389,8 @@ sub check_timed {
+     if (!$self->{main}->have_plugin("check_main")) {
+       die "check: no loaded plugin implements 'check_main': cannot scan!\n".
+             "Check that the necessary '.pre' files are in the config directory.\n".
+-              "At a minimum, v320.pre loads the Check plugin which is required.\n";
++              "At a minimum, v320.pre loads the Check plugin which is required.\n".
++              "NixOS: Since there is no '/etc/spamassassin' simply restart 'spamd.service' which on its behalf will run 'sa-learn --siteconfigpath=/nix/store/l4hr4yxk8mb4wbkha6vm6rh92pj19rj6-spamd-env ...' to update the /var/lib/spamassassin configs.\n";
+     }
+   }
+ 
+-- 
+
+2.12.2
+
diff --git a/nixpkgs/pkgs/servers/mail/system-sendmail/default.nix b/nixpkgs/pkgs/servers/mail/system-sendmail/default.nix
new file mode 100644
index 000000000000..0e290f135181
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/system-sendmail/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, writeText }:
+
+let script = writeText "script" ''
+  #!/bin/sh
+
+  if command -v sendmail > /dev/null 2>&1 && [ "$(command -v sendmail)" != "{{MYPATH}}" ]; then
+    exec sendmail "$@"
+  elif [ -x /run/wrappers/bin/sendmail ]; then
+    exec /run/wrappers/bin/sendmail "$@"
+  elif [ -x /run/current-system/sw/bin/sendmail ]; then
+    exec /run/current-system/sw/bin/sendmail "$@"
+  else
+    echo "Unable to find system sendmail." >&2
+    exit 1
+  fi
+''; in
+stdenv.mkDerivation {
+  name = "system-sendmail-1.0";
+
+  src = script;
+
+  phases = [ "buildPhase" ];
+  buildPhase = ''
+    mkdir -p $out/bin
+    < $src sed "s#{{MYPATH}}#$out/bin/sendmail#" > $out/bin/sendmail
+    chmod +x $out/bin/sendmail
+  '';
+
+  meta = with stdenv.lib; {
+    description = ''
+      A sendmail wrapper that calls the system sendmail. Do not install as system-wide sendmail!
+    '';
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ekleog ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/matrix-synapse/default.nix b/nixpkgs/pkgs/servers/matrix-synapse/default.nix
new file mode 100644
index 000000000000..5db09284874c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/matrix-synapse/default.nix
@@ -0,0 +1,104 @@
+{ lib, stdenv, python2
+, enableSystemd ? true
+}:
+
+with python2.pkgs;
+
+let
+  matrix-angular-sdk = buildPythonPackage rec {
+    pname = "matrix-angular-sdk";
+    version = "0.6.8";
+
+    src = fetchPypi {
+      inherit pname version;
+      sha256 = "0gmx4y5kqqphnq3m7xk2vpzb0w2a4palicw7wfdr1q2schl9fhz2";
+    };
+
+    # no checks from Pypi but as this is abandonware, there will be no
+    # new version anyway
+    doCheck = false;
+  };
+
+  matrix-synapse-ldap3 = buildPythonPackage rec {
+    pname = "matrix-synapse-ldap3";
+    version = "0.1.3";
+
+    src = fetchPypi {
+      inherit pname version;
+      sha256 = "0a0d1y9yi0abdkv6chbmxr3vk36gynnqzrjhbg26q4zg06lh9kgn";
+    };
+
+    propagatedBuildInputs = [ service-identity ldap3 twisted ];
+
+    # ldaptor is not ready for py3 yet
+    doCheck = !isPy3k;
+    checkInputs = [ ldaptor mock ];
+  };
+
+in buildPythonApplication rec {
+  pname = "matrix-synapse";
+  version = "0.34.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1bqwivzfx3kikzjmn4mng829ll8y62pd08hvsx99arr7cyzp6gri";
+  };
+
+  patches = [
+    ./matrix-synapse.patch
+  ];
+
+  propagatedBuildInputs = [
+    bcrypt
+    bleach
+    canonicaljson
+    daemonize
+    dateutil
+    frozendict
+    jinja2
+    jsonschema
+    lxml
+    matrix-angular-sdk
+    matrix-synapse-ldap3
+    msgpack-python
+    netaddr
+    phonenumbers
+    pillow
+    (prometheus_client.overrideAttrs (x: {
+      src = fetchPypi {
+        pname = "prometheus_client";
+        version = "0.3.1";
+        sha256 = "093yhvz7lxl7irnmsfdnf2030lkj4gsfkg6pcmy4yr1ijk029g0p";
+      };
+    }))
+    psutil
+    psycopg2
+    pyasn1
+    pydenticon
+    pymacaroons-pynacl
+    pynacl
+    pyopenssl
+    pysaml2
+    pyyaml
+    requests
+    signedjson
+    sortedcontainers
+    treq
+    twisted
+    unpaddedbase64
+  ] ++ lib.optional enableSystemd systemd;
+
+  # tests fail under py3 for now, but version 0.34.0 will use py3 by default
+  # https://github.com/matrix-org/synapse/issues/4036
+  doCheck = true;
+  checkPhase = "python -m twisted.trial test";
+
+  checkInputs = [ mock setuptoolsTrial ];
+
+  meta = with stdenv.lib; {
+    homepage = https://matrix.org;
+    description = "Matrix reference homeserver";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ralith roblabla ekleog ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/matrix-synapse/matrix-synapse.patch b/nixpkgs/pkgs/servers/matrix-synapse/matrix-synapse.patch
new file mode 100644
index 000000000000..288e6ff16245
--- /dev/null
+++ b/nixpkgs/pkgs/servers/matrix-synapse/matrix-synapse.patch
@@ -0,0 +1,20 @@
+diff --git a/homeserver b/homeserver
+new file mode 120000
+index 0000000..2f1d413
+--- /dev/null
++++ b/homeserver
+@@ -0,0 +1,1 @@
++synapse/app/homeserver.py
+\ No newline at end of file
+diff --git a/setup.py b/setup.py
+index b00c2af..c7f6e0a 100755
+--- a/setup.py
++++ b/setup.py
+@@ -92,6 +92,6 @@ setup(
+     include_package_data=True,
+     zip_safe=False,
+     long_description=long_description,
+-    scripts=["synctl"] + glob.glob("scripts/*"),
++    scripts=["synctl", "homeserver"] + glob.glob("scripts/*"),
+     cmdclass={'test': TestCommand},
+ )
diff --git a/nixpkgs/pkgs/servers/matterbridge/default.nix b/nixpkgs/pkgs/servers/matterbridge/default.nix
new file mode 100644
index 000000000000..9e5a9ffe780d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/matterbridge/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, buildGoPackage, fetchurl }:
+
+buildGoPackage rec {
+  name = "matterbridge-${version}";
+  version = "1.11.0";
+
+  goPackagePath = "github.com/42wim/matterbridge";
+
+  src = fetchurl {
+    url = "https://github.com/42wim/matterbridge/archive/v${version}.tar.gz";
+    sha256 = "1fjpgdaq4mfgf36gzk3hhmlbpfn44b7xll2rdpy69y460jrjfg6k";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Simple bridge between Mattermost, IRC, XMPP, Gitter, Slack, Discord, Telegram, Rocket.Chat, Hipchat(via xmpp), Matrix and Steam";
+    homepage = https://github.com/42wim/matterbridge;
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ ryantm ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mattermost/default.nix b/nixpkgs/pkgs/servers/mattermost/default.nix
new file mode 100644
index 000000000000..2969f723b50a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mattermost/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchurl, fetchFromGitHub, buildGoPackage, buildEnv }:
+
+let
+  version = "5.4.0";
+
+  mattermost-server = buildGoPackage rec {
+    name = "mattermost-server-${version}";
+
+    src = fetchFromGitHub {
+      owner = "mattermost";
+      repo = "mattermost-server";
+      rev = "v${version}";
+      sha256 = "0sal5ydm1cwnvf3acmiy0400ghhd6v0wj64mkxqwqf8ysnbxizwq";
+    };
+
+    goPackagePath = "github.com/mattermost/mattermost-server";
+
+    buildFlagsArray = ''
+      -ldflags=
+        -X ${goPackagePath}/model.BuildNumber=nixpkgs-${version}
+    '';
+
+  };
+
+  mattermost-webapp = stdenv.mkDerivation {
+    name = "mattermost-webapp-${version}";
+
+    src = fetchurl {
+      url = "https://releases.mattermost.com/${version}/mattermost-${version}-linux-amd64.tar.gz";
+      sha256 = "06dg0f6nrh3a2v3lnyn2s39nj5jpsvfkx3ypq4zjpks0srv4mgfz";
+    };
+
+    installPhase = ''
+      mkdir -p $out
+      tar --strip 1 --directory $out -xf $src \
+        mattermost/client \
+        mattermost/i18n \
+        mattermost/fonts \
+        mattermost/templates \
+        mattermost/config
+    '';
+  };
+
+in
+  buildEnv {
+    name = "mattermost-${version}";
+    paths = [ mattermost-server mattermost-webapp ];
+
+    meta = with stdenv.lib; {
+      description = "Open-source, self-hosted Slack-alternative";
+      homepage = https://www.mattermost.org;
+      license = with licenses; [ agpl3 asl20 ];
+      maintainers = with maintainers; [ fpletz ryantm ];
+      platforms = platforms.unix;
+    };
+  }
diff --git a/nixpkgs/pkgs/servers/mattermost/matterircd.nix b/nixpkgs/pkgs/servers/mattermost/matterircd.nix
new file mode 100644
index 000000000000..6707055eaa6b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mattermost/matterircd.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "matterircd-${version}";
+  version = "0.18.2";
+
+  src = fetchFromGitHub {
+    owner = "42wim";
+    repo = "matterircd";
+    rev = "v${version}";
+    sha256 = "0g57g91v7208yynf758k9v73jdhz4fbc1v23p97rzrl97aq0rd5r";
+  };
+
+  goPackagePath = "github.com/42wim/matterircd";
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Minimal IRC server bridge to Mattermost";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fpletz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mediatomb/default.nix b/nixpkgs/pkgs/servers/mediatomb/default.nix
new file mode 100644
index 000000000000..75d12a5f66fe
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mediatomb/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchgit
+, sqlite, expat, mp4v2, flac, spidermonkey_1_8_5, taglib, libexif, curl, ffmpeg, file
+, pkgconfig, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  name = "mediatomb-${version}";
+  version = "0.12.1";
+
+  src = fetchgit {
+    url = meta.repositories.git;
+    rev = "7ab761696354868bd5d67ff4f2d849994e4c98e2";
+    sha256 = "1mimslr4q6mky865y6561rr64cbn4gf0qc2dhgb31hxp4rc1kmzd";
+  };
+
+  buildInputs = [ sqlite expat spidermonkey_1_8_5 taglib libexif curl ffmpeg file mp4v2 flac
+                  pkgconfig autoreconfHook ];
+
+  meta = with stdenv.lib; {
+    homepage = http://mediatomb.cc;
+    repositories.git = git://mediatomb.git.sourceforge.net/gitroot/mediatomb/mediatomb;
+    description = "UPnP MediaServer with a web user interface";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.phreedom ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/meguca/default.nix b/nixpkgs/pkgs/servers/meguca/default.nix
new file mode 100644
index 000000000000..504df8bae0cb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/meguca/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, pkgconfig, cmake, ffmpeg-full, ghostscript
+, graphicsmagick, quicktemplate, go-bindata, easyjson, nodePackages, emscripten, opencv }:
+
+buildGoPackage rec {
+  name = "meguca-unstable-${version}";
+  version = "2018-12-06";
+  goPackagePath = "github.com/bakape/meguca";
+  goDeps = ./server_deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "bakape";
+    repo = "meguca";
+    rev = "300b007cab238838f813faa9aad6abb3f22ad4d2";
+    sha256 = "1rvnvhkm8l7h9rvw9vr8pm1qrr3zz5x7vayaw0caqx99xlyp93r9";
+    fetchSubmodules = true;
+  };
+
+  enableParallelBuilding = true;
+  nativeBuildInputs = [ pkgconfig cmake ];
+  buildInputs = [ ffmpeg-full graphicsmagick ghostscript quicktemplate go-bindata easyjson emscripten opencv ];
+
+  buildPhase = ''
+    export HOME=`pwd`
+    export GOPATH=$GOPATH:$HOME/go/src/github.com/bakape/meguca/server
+    cd $HOME/go/src/github.com/bakape/meguca
+    ln -sf ${nodePackages.meguca}/lib/node_modules/meguca/node_modules
+    sed -i "/npm install --progress false --depth 0/d" Makefile
+    make generate_clean
+    go generate meguca/...
+    go build -v -p $NIX_BUILD_CORES meguca
+    make -j $NIX_BUILD_CORES client
+  '' + stdenv.lib.optionalString (!stdenv.isDarwin) ''
+    make -j $NIX_BUILD_CORES wasm
+  '';
+
+  installPhase = ''
+    mkdir -p $bin/bin $bin/share/meguca
+    cp meguca $bin/bin
+    cp -r www $bin/share/meguca
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/bakape/meguca";
+    description = "High performance anonymous realtime imageboard";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ chiiruno ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/meguca/server_deps.nix b/nixpkgs/pkgs/servers/meguca/server_deps.nix
new file mode 100644
index 000000000000..5dc53820a9d2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/meguca/server_deps.nix
@@ -0,0 +1,372 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/ErikDubbelboer/gspt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ErikDubbelboer/gspt";
+      rev = "e39e726e09cc23d1ccf13b36ce10dbdb4a4510e0";
+      sha256 = "1l0s9srl7kbi7rs9ki989rgvx1kx6an7d6pwfqyy42x48f7a5g81";
+    };
+  }
+  {
+    goPackagePath = "github.com/Masterminds/squirrel";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Masterminds/squirrel";
+      rev = "e5bf00f96d4a5779be0d78f7565598856cae9b47";
+      sha256 = "13fkdc4kbdmbl42i80lm5x9aqnwlhj2c6s6y5vsblmw042p7012q";
+    };
+  }
+  {
+    goPackagePath = "github.com/PuerkitoBio/goquery";
+    fetch = {
+      type = "git";
+      url = "https://github.com/PuerkitoBio/goquery";
+      rev = "2d2796f41742ece03e8086188fa4db16a3a0b458";
+      sha256 = "1fqf4rs66wy02nxz6w4mvs2qawf2j8srz17i294v64y8gvxisp56";
+    };
+  }
+  {
+    goPackagePath = "github.com/Soreil/apngdetector";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Soreil/apngdetector";
+      rev = "e412c29dbc998dfcffe266b12587b29096ac4d46";
+      sha256 = "0ci71nk6jijspzbgcfrgi4in9lmd2c39f6xzcf9k3z9ixwv8c79j";
+    };
+  }
+  {
+    goPackagePath = "github.com/andybalholm/cascadia";
+    fetch = {
+      type = "git";
+      url = "https://github.com/andybalholm/cascadia";
+      rev = "680b6a57bda4f657485ad44bdea42342ead737bc";
+      sha256 = "0v95plagirbjlc4p00y9brhpvv4nm8q0gr63gcfs3shyh1a8xwbm";
+    };
+  }
+  {
+    goPackagePath = "github.com/aquilax/tripcode";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aquilax/tripcode";
+      rev = "db58da84bb12e26032493b73eb3b58ba884590ef";
+      sha256 = "0maqk0rwp39kcc64w4mfkgcvn2q76hqwziwc3g7ckc1qpwxql5z3";
+    };
+  }
+  {
+    goPackagePath = "github.com/badoux/goscraper";
+    fetch = {
+      type = "git";
+      url = "https://github.com/badoux/goscraper";
+      rev = "363803726ad4e2ab262b4e01362e98458df0b231";
+      sha256 = "1p388s7jmyrr6p4ralhcg36jz1cw2mgra9brcp6m32lrc3mpws48";
+    };
+  }
+  {
+    goPackagePath = "github.com/bakape/boorufetch";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bakape/boorufetch";
+      rev = "4e9f999d98ed9a4e8374a516265dd4c7b4f4cca0";
+      sha256 = "0jpf71nxm8msx3imgyl3jdpi8fsai3yp7ajapivghrwj7y0nr1d0";
+    };
+  }
+  {
+    goPackagePath = "github.com/bakape/captchouli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bakape/captchouli";
+      rev = "6434ea655cf8f1fed6791877c74e5e2f2c396680";
+      sha256 = "1n96g3c7i3gbk8blm6qgw9lcpmwq3s8yjp6l1krdladb0xpanwjm";
+    };
+  }
+  {
+    goPackagePath = "github.com/bakape/mnemonics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bakape/mnemonics";
+      rev = "056d8d3259923b93bb0449a45b0c56ac20c77f1b";
+      sha256 = "137dl4bkpszj7pm4dyj222xdvy9lmwsgmm0l6bxni0msc3jdrqkl";
+    };
+  }
+  {
+    goPackagePath = "github.com/bakape/thumbnailer";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bakape/thumbnailer";
+      rev = "f191a43e9c3c7c9522a67dd81ed1aec9cea0280d";
+      sha256 = "065qxhc83ncfxl813gm2f80pydkilnyim0q4wv08xm4gz3010s1x";
+    };
+  }
+  {
+    goPackagePath = "github.com/boltdb/bolt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/boltdb/bolt";
+      rev = "fd01fc79c553a8e99d512a07e8e0c63d4a3ccfc5";
+      sha256 = "12f5swiwzcamk87r9j73nn7rmyyday7jkgzfh7x5wdg9blzhrir2";
+    };
+  }
+  {
+    goPackagePath = "github.com/dimfeld/httptreemux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dimfeld/httptreemux";
+      rev = "0ffa82afd135e2aafd48602dc46843cb86304f7d";
+      sha256 = "0akariyk9igr25rbjkvq7v1hwx8llld6d2dalkdla9jsh7iw6ddj";
+    };
+  }
+  {
+    goPackagePath = "github.com/dsnet/compress";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dsnet/compress";
+      rev = "cc9eb1d7ad760af14e8f918698f745e80377af4f";
+      sha256 = "159liclywmyb6zx88ga5gn42hfl4cpk1660zss87fkx31hdq9fgx";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-playground/ansi";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-playground/ansi";
+      rev = "777788a9be1a7296979a999c86b251fc777077a9";
+      sha256 = "1y2pqx04lc7cqg50scfivzw0n8f0dliflnih14f5jf4svff8s561";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-playground/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-playground/errors";
+      rev = "9aa88f624b398d37201c30583065aee54071bc0c";
+      sha256 = "0d4b73m564gc12ddbss78929kcya81ifqxv28f05zqhrywkih4mh";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-playground/log";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-playground/log";
+      rev = "736ecb55f80c7121af3754a7ea62e96733451fe1";
+      sha256 = "1gr2658m8nwswiybnz5i54d4gzwx4nk79gnh7j5fj1rcmbxdkkjh";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/snappy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/snappy";
+      rev = "2e65f85255dbc3072edf28d6b5b8efc472979f5a";
+      sha256 = "05w6mpc4qcy0pv8a2bzng8nf4s5rf5phfang4jwy9rgf808q0nxf";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/handlers";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/handlers";
+      rev = "350d97a79266938cd77a9192b7d995132d4e2b5b";
+      sha256 = "1rk69bnhcp4s4cv7hwsafag8d3fj1mgxli0bkazc69ig90a71h1b";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/websocket";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/websocket";
+      rev = "95ba29eb981bbb27d92e1f70bf8a1949452d926b";
+      sha256 = "08lvc9l0qagyhyrjj6jkhpq3zapa5gqr966bm33nb4bc0pd38f48";
+    };
+  }
+  {
+    goPackagePath = "github.com/julienschmidt/httprouter";
+    fetch = {
+      type = "git";
+      url = "https://github.com/julienschmidt/httprouter";
+      rev = "26a05976f9bf5c3aa992cc20e8588c359418ee58";
+      sha256 = "0bmvrgg373fxwqsr6nri01bmi9qdj6knxkmnbw70h9rmi2d9c585";
+    };
+  }
+  {
+    goPackagePath = "github.com/lann/builder";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lann/builder";
+      rev = "47ae307949d02aa1f1069fdafc00ca08e1dbabac";
+      sha256 = "1kg9jy1rciznj627hafpq2mi7hr5d3ssgqcpwrm3bnlk9sqnydil";
+    };
+  }
+  {
+    goPackagePath = "github.com/lann/ps";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lann/ps";
+      rev = "62de8c46ede02a7675c4c79c84883eb164cb71e3";
+      sha256 = "10yhcyymypvdiiipchsp80jbglk8c4r7lq7h54v9f4mxmvz6xgf7";
+    };
+  }
+  {
+    goPackagePath = "github.com/lib/pq";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lib/pq";
+      rev = "9eb73efc1fcc404148b56765b0d3f61d9a5ef8ee";
+      sha256 = "17wkjdz265iqf92gj3ljslvjcqvkfblw11jdq2scc3kp1hcsfr10";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-sqlite3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-sqlite3";
+      rev = "6a9185d7b1f12363e2c904449d374b63b6093b16";
+      sha256 = "1yb04vhzkaxnm11i34lpcdgzmcydfnlky3xxj9q2hm1wd7hn3hki";
+    };
+  }
+  {
+    goPackagePath = "github.com/nwaples/rardecode";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nwaples/rardecode";
+      rev = "197ef08ef68c4454ae5970a9c2692d6056ceb8d7";
+      sha256 = "0vvijw7va283dbdvnf4bgkn7bjngxqzk1rzdpy8sl343r62bmh4g";
+    };
+  }
+  {
+    goPackagePath = "github.com/nyarlabo/go-crypt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nyarlabo/go-crypt";
+      rev = "d9a5dc2b789bc330075d4b805d9b7c971f2865a1";
+      sha256 = "0249hbwvhy0xywi9b5k8964km27pvfkr3jvliy3azri6vnyvkkx1";
+    };
+  }
+  {
+    goPackagePath = "github.com/oschwald/maxminddb-golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/oschwald/maxminddb-golang";
+      rev = "ed835b22606182ff576f244643e52b25b7d6c4e7";
+      sha256 = "0zm4nyxz89s05fkz0fcaab3dmm24cb24iwjbzh06a49dwvcxxrgw";
+    };
+  }
+  {
+    goPackagePath = "github.com/otium/ytdl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/otium/ytdl";
+      rev = "0227c2bacb82a434f2332d7d8c64093615c08a40";
+      sha256 = "1g5h6s5c860yamgr606l6ibpqx39676vas75c9426556hwgp3pqs";
+    };
+  }
+  {
+    goPackagePath = "github.com/pierrec/lz4";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pierrec/lz4";
+      rev = "623b5a2f4d2a41e411730dcdfbfdaeb5c0c4564e";
+      sha256 = "1hhf7vyz5irrqs7ixdmvsvzmy9izv3ha8jbyy0cs486h61nzqkki";
+    };
+  }
+  {
+    goPackagePath = "github.com/sevlyar/go-daemon";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sevlyar/go-daemon";
+      rev = "12616e426b1522ef2099701fafdd6ad9f476e8c1";
+      sha256 = "1hakfpdxlqvdbp4c597ldf33s5yalsh5db6ym1xh5y7h27v8bk01";
+    };
+  }
+  {
+    goPackagePath = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev = "29d7eb25e8ffa54207ff5a9a5c3d63e95be2cc39";
+      sha256 = "1barxwfwnmsa45iqqrppzj830ypm500aq9w234gyyh1gdknijck4";
+    };
+  }
+  {
+    goPackagePath = "github.com/ulikunitz/xz";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ulikunitz/xz";
+      rev = "590df8077fbcb06ad62d7714da06c00e5dd2316d";
+      sha256 = "07mivr4aiw3b8qzwajsxyjlpbkf3my4xx23lv0yryc4pciam5lhy";
+    };
+  }
+  {
+    goPackagePath = "github.com/valyala/bytebufferpool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/valyala/bytebufferpool";
+      rev = "cdfbe9377474227bb42120c1e22fd4433e7f69bf";
+      sha256 = "0c6cixd85dvl2gvs7sdh0k2wm8r3grl4fw0jg4w7d78cp8s2k7ag";
+    };
+  }
+  {
+    goPackagePath = "github.com/valyala/quicktemplate";
+    fetch = {
+      type = "git";
+      url = "https://github.com/valyala/quicktemplate";
+      rev = "4c04039b1358b0f49af22a699f9193f05d80be40";
+      sha256 = "1qf7wpalk3n2jmcc2sw05cnwysl4rx986avykbfic5wq4fgxh9a5";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "505ab145d0a99da450461ae2c1a9f6cd10d1f447";
+      sha256 = "1vbsvcvmjz6c00p5vf8ls533p52fx2y3gy6v4k5qrdlzl4wf0i5s";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "351d144fa1fc0bd934e2408202be0c29f25e35a0";
+      sha256 = "1c5x25qjyz83y92bq0lll5kmznyi3m02wd4c54scgf0866gy938k";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "70b957f3b65e069b4930ea94e2721eefa0f8f695";
+      sha256 = "146jwkr39asigqbsnsigxpkpb4vydld4k9q34xvvw0bp10qzjxxw";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "6f44c5a2ea40ee3593d98cdcc905cc1fdaa660e2";
+      sha256 = "00mwzxly5isgf0glz7k3k2dkyqkjfc4z55qxajx4lgcp3h8xn9xj";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/gomail.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/gomail.v2";
+      rev = "81ebce5c23dfd25c6c67194b37d3dd3f338c98b1";
+      sha256 = "0zdykrv5s19lnq0g49p6njldy4cpk4g161vyjafiw7f84h8r28mc";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/mholt/archiver.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/mholt/archiver.v2";
+      rev = "de0d89e255e17c8d75a40122055763e743ab0593";
+      sha256 = "02fsc0za0yi3dg0r5caa8vpxz6kqxjxxlmwzzj5899dlmdvqk57g";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/memcached/default.nix b/nixpkgs/pkgs/servers/memcached/default.nix
new file mode 100644
index 000000000000..f35b8ff01884
--- /dev/null
+++ b/nixpkgs/pkgs/servers/memcached/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchurl, cyrus_sasl, libevent}:
+
+stdenv.mkDerivation rec {
+  version = "1.5.12";
+  name = "memcached-${version}";
+
+  src = fetchurl {
+    url = "https://memcached.org/files/${name}.tar.gz";
+    sha256 = "0aav15f0lh8k4i62aza2bdv4s8vv65j38pz2zc4v45snd3arfby0";
+  };
+
+  buildInputs = [cyrus_sasl libevent];
+
+  hardeningEnable = [ "pie" ];
+
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isDarwin "-Wno-error";
+
+  meta = with stdenv.lib; {
+    description = "A distributed memory object caching system";
+    repositories.git = https://github.com/memcached/memcached.git;
+    homepage = http://memcached.org/;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.coconnor ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mesos-dns/default.nix b/nixpkgs/pkgs/servers/mesos-dns/default.nix
new file mode 100644
index 000000000000..fe1f1c6760d8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mesos-dns/default.nix
@@ -0,0 +1,21 @@
+{ buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "mesos-dns-${version}";
+  version = "0.1.2";
+  rev = "v${version}";
+  
+  goPackagePath = "github.com/mesosphere/mesos-dns";
+
+  # Avoid including the benchmarking test helper in the output:
+  subPackages = [ "." ];
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "mesosphere";
+    repo = "mesos-dns";
+    sha256 = "0zs6lcgk43j7jp370qnii7n55cd9pa8gl56r8hy4nagfvlvrcm02";
+  };
+
+  goDeps = ./deps.nix;
+}
diff --git a/nixpkgs/pkgs/servers/mesos-dns/deps.nix b/nixpkgs/pkgs/servers/mesos-dns/deps.nix
new file mode 100644
index 000000000000..00f0f245f6b3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mesos-dns/deps.nix
@@ -0,0 +1,101 @@
+[
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "62ac18b461605b4be188bbc7300e9aa2bc836cd4";
+      sha256 = "0lwwvbbwbf3yshxkfhn6z20gd45dkvnmw2ms36diiy34krgy402p";
+    };
+  }
+  {
+    goPackagePath = "github.com/miekg/dns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/miekg/dns";
+      rev = "7e024ce8ce18b21b475ac6baf8fa3c42536bf2fa";
+      sha256 = "0hlwb52lnnj3c6papjk9i5w5cjdw6r7c891v4xksnfvk1f9cy9kl";
+    };
+  }
+  {
+    goPackagePath = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev = "7883e1468d48d969e1c3ce4bcde89b6a7dd4adc4";
+      sha256 = "16ja7lqq96q0pnzgnbwnh0j8qzvqgns1nfk8ndxgkg4sg93bg372";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/glog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/glog";
+      rev = "fca8c8854093a154ff1eb580aae10276ad6b1b5f";
+      sha256 = "1nr2q0vas0a2f395f4shjxqpas18mjsf8yhgndsav7svngpbbpg8";
+    };
+  }
+  {
+    goPackagePath = "github.com/mesos/mesos-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mesos/mesos-go";
+      rev = "aaa5b2fecf0e2db463f4f996c89617d6766b2969";
+      sha256 = "1pk1fpxksjln6kqvgm1igw3582jgrn14fwa8bdj5cwbpy6skjdvk";
+    };
+  }
+  {
+    goPackagePath = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev = "d8ed2627bdf02c080bf22230dbb337003b7aba2d";
+      sha256 = "0w1jp4k4zbnrxh3jvh8fgbjgqpf2hg31pbj8fb32kh26px9ldpbs";
+    };
+  }
+  {
+    goPackagePath = "github.com/samuel/go-zookeeper";
+    fetch = {
+      type = "git";
+      url = "https://github.com/samuel/go-zookeeper";
+      rev = "5bb5cfc093ad18a28148c578f8632cfdb4d802e4";
+      sha256 = "1kpx1ymh7rds0b2km291idnyqi0zck74nd8hnk72crgz7wmpqv6z";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/objx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/objx";
+      rev = "cbeaeb16a013161a98496fad62933b1d21786672";
+      sha256 = "1xn7iibjik77h6h0jilfvcjkkzaqz45baf44p3rb2i03hbmkqkp1";
+    };
+  }
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "5215b55f46b2b919f50a1df0eaa5886afe4e3b3d";
+      sha256 = "15h9kl73rdbzlfmsdxp13jja5gs7sknvqkpq2qizq3qv3nr1x8dk";
+    };
+  }
+  {
+    goPackagePath = "github.com/emicklei/go-restful";
+    fetch = {
+      type = "git";
+      url = "https://github.com/emicklei/go-restful";
+      rev = "892402ba11a2e2fd5e1295dd633481f27365f14d";
+      sha256 = "0gr9f53vayc6501a1kaw4p3h9pgf376cgxsfnr3f2dvp0xacvw8x";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "089c7181b8c728499929ff09b62d3fdd8df8adff";
+      sha256 = "03dzxkxbs298pvfsjz4kdadfaf9jkzsdhshqmg4p12wbyaj09s4p";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/metabase/default.nix b/nixpkgs/pkgs/servers/metabase/default.nix
new file mode 100644
index 000000000000..0f2f291318c7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/metabase/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  name = "metabase-${version}";
+  version = "0.30.4";
+
+  src = fetchurl {
+    url = "http://downloads.metabase.com/v${version}/metabase.jar";
+    sha256 = "0mvyl5v798qwdydqsjjq94ihfwi62kq4gprxjg3rcckmjdyx2ycs";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  unpackPhase = "true";
+
+  installPhase = ''
+    makeWrapper ${jre}/bin/java $out/bin/metabase --add-flags "-jar $src"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "The easy, open source way for everyone in your company to ask questions and learn from data.";
+    homepage    = https://metabase.com;
+    license     = licenses.agpl3;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ schneefux thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/meteor/default.nix b/nixpkgs/pkgs/servers/meteor/default.nix
new file mode 100644
index 000000000000..132f812bf464
--- /dev/null
+++ b/nixpkgs/pkgs/servers/meteor/default.nix
@@ -0,0 +1,93 @@
+{ stdenv, lib, fetchurl, zlib, patchelf }:
+
+let
+  bootstrap = fetchurl {
+    url = "https://meteorinstall-4168.kxcdn.com/packages-bootstrap/1.5/meteor-bootstrap-os.linux.x86_64.tar.gz";
+    sha256 = "0cwwqv88h1ji7g4zmfz34xsrxkn640wr11ddjq5c6b9ygcljci3p";
+  };
+in
+
+stdenv.mkDerivation rec {
+  name = "meteor-${version}";
+  version = "1.5";
+
+  dontStrip = true;
+
+  unpackPhase = ''
+    tar xf ${bootstrap}
+    sourceRoot=.meteor
+  '';
+
+  installPhase = ''
+    mkdir $out
+
+    cp -r packages $out
+    chmod -R +w $out/packages
+
+    cp -r package-metadata $out
+    chmod -R +w $out/package-metadata
+
+    devBundle=$(find $out/packages/meteor-tool -name dev_bundle)
+    ln -s $devBundle $out/dev_bundle
+
+    toolsDir=$(dirname $(find $out/packages -print | grep "meteor-tool/.*/tools/index.js$"))
+    ln -s $toolsDir $out/tools
+
+    # Patch Meteor to dynamically fixup shebangs and ELF metadata where
+    # necessary.
+    pushd $out
+    patch -p1 < ${./main.patch}
+    popd
+    substituteInPlace $out/tools/cli/main.js \
+      --replace "@INTERPRETER@" "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --replace "@RPATH@" "${lib.makeLibraryPath [ stdenv.cc.cc zlib ]}" \
+      --replace "@PATCHELF@" "${patchelf}/bin/patchelf"
+
+    # Patch node.
+    node=$devBundle/bin/node
+    patchelf \
+      --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+      --set-rpath "$(patchelf --print-rpath $node):${stdenv.cc.cc.lib}/lib" \
+      $node
+
+    # Patch mongo.
+    for p in $devBundle/mongodb/bin/mongo{,d}; do
+      patchelf \
+        --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+        --set-rpath "$(patchelf --print-rpath $p):${lib.makeLibraryPath [ stdenv.cc.cc zlib ]}" \
+        $p
+    done
+
+    # Patch node dlls.
+    for p in $(find $out/packages -name '*.node'); do
+      patchelf \
+        --set-rpath "$(patchelf --print-rpath $p):${stdenv.cc.cc.lib}/lib" \
+        $p || true
+    done
+
+    # Meteor needs an initial package-metadata in $HOME/.meteor,
+    # otherwise it fails spectacularly.
+    mkdir -p $out/bin
+    cat << EOF > $out/bin/meteor
+    #!${stdenv.shell}
+
+    if [[ ! -f \$HOME/.meteor/package-metadata/v2.0.1/packages.data.db ]]; then
+      mkdir -p \$HOME/.meteor/package-metadata/v2.0.1
+      cp $out/package-metadata/v2.0.1/packages.data.db "\$HOME/.meteor/package-metadata/v2.0.1"
+      chown "\$(whoami)" "\$HOME/.meteor/package-metadata/v2.0.1/packages.data.db"
+      chmod +w "\$HOME/.meteor/package-metadata/v2.0.1/packages.data.db"
+    fi
+
+    $node \''${TOOL_NODE_FLAGS} $out/tools/index.js "\$@"
+    EOF
+    chmod +x $out/bin/meteor
+  '';
+
+  meta = with lib; {
+    description = "Complete open source platform for building web and mobile apps in pure JavaScript";
+    homepage = http://www.meteor.com;
+    license = licenses.mit;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/meteor/main.patch b/nixpkgs/pkgs/servers/meteor/main.patch
new file mode 100644
index 000000000000..3282c91abac8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/meteor/main.patch
@@ -0,0 +1,56 @@
+diff --git a/tools/cli/main.js b/tools/cli/main.js
+index 84f94bc..4fbda17 100644
+--- a/tools/cli/main.js
++++ b/tools/cli/main.js
+@@ -554,6 +554,44 @@
+     }).await());
+   } // Now exec; we're not coming back.
+ 
++  // BEGIN HACK
++  // patch shebang:
++  var fs = require('fs');
++  var path = require("path")
++  var Future = require("fibers/future")
++  var srcOld = fs.readFileSync(executable, 'utf8');
++  srcNew = srcOld.replace(/^#!\/bin\/bash/, '#!/bin/sh');
++  if (srcOld !== srcNew) {
++    fs.writeFileSync(executable, srcNew, 'utf8');
++  }
++  // patch elfs:
++  var dir = path.dirname(executable);
++  var interpreter = "@INTERPRETER@";
++  var rpath = "@RPATH@";
++  function spawnSync(/*...*/) {
++    var args = Array.prototype.slice.call(arguments);
++    var proc = require("child_process").spawn.apply(null, args);
++    var future = new Future();
++    proc.on('close', function (code) {
++      future.return();
++    });
++    return future.wait();
++  }
++  function patchelf(/*...*/) {
++    var pathParts = Array.prototype.slice.call(arguments);
++    var p = path.join.apply(null, [dir, "dev_bundle"].concat(pathParts));
++    spawnSync('@PATCHELF@', [
++      "--set-interpreter",
++      interpreter,
++      "--set-rpath",
++      rpath,
++      p
++    ], {stdio: 'inherit'});
++  }
++  patchelf("bin", "node");
++  patchelf("mongodb", "bin", "mongo");
++  patchelf("mongodb", "bin", "mongod");
++  // END HACK
+
+   require('kexec')(executable, newArgv);
+
+@@ -1485,4 +1523,4 @@
+
+   process.exit(ret);
+ }).run();
+-//# sourceMappingURL=main.js.map
+\ No newline at end of file
++//# sourceMappingURL=main.js.map
diff --git a/nixpkgs/pkgs/servers/miniflux/default.nix b/nixpkgs/pkgs/servers/miniflux/default.nix
new file mode 100644
index 000000000000..5000e4c396c3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/miniflux/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, buildGoPackage
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  pname = "miniflux";
+  version = "2.0.13";
+
+  goPackagePath = "miniflux.app";
+
+  src = fetchFromGitHub {
+    owner = "miniflux";
+    repo = "miniflux";
+    rev = "refs/tags/${version}";
+    sha256 = "16c9jszrz3153kr0xyj7na09hpqvnjsrmsbic7qkp5a9aa839b9s";
+  };
+    
+  goDeps = ./deps.nix;
+
+  doCheck = true;
+
+  buildFlagsArray = ''
+    -ldflags=-X ${goPackagePath}/version.Version=${version}
+  '';
+
+  postInstall = ''
+    mv $bin/bin/miniflux.app $bin/bin/miniflux
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Minimalist and opinionated feed reader";
+    homepage = https://miniflux.app/;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ benpye ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/miniflux/deps.nix b/nixpkgs/pkgs/servers/miniflux/deps.nix
new file mode 100644
index 000000000000..4ef30bec3b8d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/miniflux/deps.nix
@@ -0,0 +1,153 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+
+  {
+    goPackagePath = "github.com/PuerkitoBio/goquery";
+    fetch = {
+      type = "git";
+      url = "https://github.com/PuerkitoBio/goquery";
+      rev = "v1.4.1";
+      sha256 = "11010z9ask21r0dskvm2pbh3z8951bnpcqg8aqa213if4h34gaa2";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/andybalholm/cascadia";
+    fetch = {
+      type = "git";
+      url = "https://github.com/andybalholm/cascadia";
+      rev = "v1.0.0";
+      sha256 = "09j8cavbhqqdxjqrkwbc40g8p0i49zf3184rpjm5p2rjbprcghcc";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "v1.1.0";
+      sha256 = "0ya4ha7m20bw048m1159ppqzlvda4x0vdprlbk5sdgmy74h3xcdq";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/gorilla/context";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/context";
+      rev = "v1.1.1";
+      sha256 = "03p4hn87vcmfih0p9w663qbx9lpsf7i7j3lc7yl7n84la3yz63m4";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/gorilla/mux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/mux";
+      rev = "v1.6.2";
+      sha256 = "0pvzm23hklxysspnz52mih6h1q74vfrdhjfm1l3sa9r8hhqmmld2";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/lib/pq";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lib/pq";
+      rev = "v1.0.0";
+      sha256 = "1zqnnyczaf00xi6xh53vq758v5bdlf0iz7kf22l02cal4i6px47i";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/tdewolff/minify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tdewolff/minify";
+      rev = "v2.3.5";
+      sha256 = "0x67kgjhc6mfzjhr4xmw0j3qapzhkgwwahvv5b44rb449ml2qx5m";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/tdewolff/parse";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tdewolff/parse";
+      rev = "v2.3.3";
+      sha256 = "190y2jykp8qyp6y58ky1v1fvmaqjnrsr1ksbqrrspf1gpjy69i94";
+    };
+  }
+
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "614d502a4dac";
+      sha256 = "1rcyvsl8b8pk7h8lwl0fpiflrx8zs121wi5490ln0qnvkk8d4bwy";
+    };
+  }
+
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "8a410e7b638d";
+      sha256 = "0hp0l8f6fir5gmgrjq0mhh5ikc0rlrm72774228800kfwqjrxxny";
+    };
+  }
+
+  {
+    goPackagePath = "golang.org/x/oauth2";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/oauth2";
+      rev = "d2e6202438be";
+      sha256 = "0wbn75fd10485nb93bm4kqldqifdim5xqy4v7r5sdvimvf3fyhn7";
+    };
+  }
+
+  {
+    goPackagePath = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev = "1d60e4601c6f";
+      sha256 = "046jlanz2lkxq1r57x9bl6s4cvfqaic6p2xybsj8mq1120jv4rs6";
+    };
+  }
+
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "4910a1d54f87";
+      sha256 = "0p2pp6mny34gjcvylx3ddzdaxn7hv008hppsr11w1bvyzj7s27by";
+    };
+  }
+
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "v0.3.0";
+      sha256 = "0r6x6zjzhr8ksqlpiwm5gdd7s209kwk5p4lw54xjvz10cs3qlq19";
+    };
+  }
+
+  {
+    goPackagePath = "google.golang.org/appengine";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/appengine";
+      rev = "v1.1.0";
+      sha256 = "1pz202zszg8f35dk5pfhwgcdi3r6dx1l4yk6x6ly7nb4j45zi96x";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/minio/default.nix b/nixpkgs/pkgs/servers/minio/default.nix
new file mode 100644
index 000000000000..5b19d6dd37eb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/minio/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "minio-${version}";
+
+  version = "2018-12-06T01-27-43Z";
+
+  src = fetchFromGitHub {
+    owner = "minio";
+    repo = "minio";
+    rev = "RELEASE.${version}";
+    sha256 = "0j10rhrg98zsv62sdc9wgrh2kdpv2179szvzyg8rm9rb89rzdhd2";
+  };
+
+  goPackagePath = "github.com/minio/minio";
+
+  buildFlagsArray = [''-ldflags=
+    -X github.com/minio/minio/cmd.Version=${version}
+  ''];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.minio.io/;
+    description = "An S3-compatible object storage server";
+    maintainers = with maintainers; [ eelco bachp ];
+    platforms = platforms.unix;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mirrorbits/default.nix b/nixpkgs/pkgs/servers/mirrorbits/default.nix
new file mode 100644
index 000000000000..10c8811c548f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mirrorbits/default.nix
@@ -0,0 +1,48 @@
+{ lib, buildGoPackage, fetchFromGitHub, fetchpatch
+, pkgconfig, zlib, geoip }:
+
+buildGoPackage rec {
+  name = "mirrorbits-${version}";
+  version = "0.4";
+  rev = "v${version}";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "etix";
+    repo = "mirrorbits";
+    sha256 = "11f9wczajba147qk5j73pxjrvlxkgr598sjvgjn2b8nxm49g2pan";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/etix/mirrorbits/commit/03a4e02214bdb7bb60240ddf25b887ccac5fb118.patch";
+      sha256 = "08332cfxmp2nsfdj2ymg3lxkav8h44f6cf2h6g9jkn03mkliblm5";
+    })
+  ];
+
+  postPatch = ''
+    rm -rf testing
+  '';
+
+  goPackagePath = "github.com/etix/mirrorbits";
+  goDeps = ./deps.nix;
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ zlib geoip ];
+
+  meta = {
+    description = "geographical download redirector for distributing files efficiently across a set of mirrors";
+    homepage = "https://github.com/etix/mirrorbits";
+    longDescription = ''
+      Mirrorbits is a geographical download redirector written in Go for
+      distributing files efficiently across a set of mirrors. It offers
+      a simple and economic way to create a Content Delivery Network
+      layer using a pure software stack. It is primarily designed for
+      the distribution of large-scale Open-Source projects with a lot
+      of traffic.
+    '';
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ fpletz ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mirrorbits/deps.nix b/nixpkgs/pkgs/servers/mirrorbits/deps.nix
new file mode 100644
index 000000000000..373654126614
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mirrorbits/deps.nix
@@ -0,0 +1,66 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/etix/geoip";
+    fetch = {
+      type = "git";
+      url = "https://github.com/etix/geoip";
+      rev = "db8457352061099b2a1840c712b3223900216588";
+      sha256 = "1768237bngcjgw0s8wba0f4nw1xahg28cq2nd6vrbmhavd1ppim9";
+    };
+  }
+  {
+    goPackagePath = "github.com/etix/goftp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/etix/goftp";
+      rev = "0c13163a1028e83f0f1cce113dddd3900e935bc7";
+      sha256 = "15kwk57yk63j28d1lwrykc9nr7ickqgk2fpw4g0b0404b95l101k";
+    };
+  }
+  {
+    goPackagePath = "github.com/garyburd/redigo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/garyburd/redigo";
+      rev = "70e1b1943d4fc9c56791abaa6f4d1e727b9ab925";
+      sha256 = "1nw22r0vagmayjg51rz55yi9ppkd60ya0nzmp113mcz25vhxa0d0";
+    };
+  }
+  {
+    goPackagePath = "github.com/op/go-logging";
+    fetch = {
+      type = "git";
+      url = "https://github.com/op/go-logging";
+      rev = "970db520ece77730c7e4724c61121037378659d9";
+      sha256 = "1cpna2x5l071z1vrnk7zipdkka8dzwsjyx7m79xk0lr08rip0kcj";
+    };
+  }
+  {
+    goPackagePath = "github.com/youtube/vitess";
+    fetch = {
+      type = "git";
+      url = "https://github.com/youtube/vitess";
+      rev = "6cf14dbf97f28eebd37dc2bc36374852946336a8";
+      sha256 = "1g76q84wipyprn05brpjxf8xri87293r7nyf647crjy5d9k950lz";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/tylerb/graceful.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/tylerb/graceful.v1";
+      rev = "4654dfbb6ad53cb5e27f37d99b02e16c1872fbbb";
+      sha256 = "1qspbrzr3h6c89v75c99avn7iizkfnjh901wp650vyy0j3p6ydnd";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "eb3733d160e74a9c7e442f435eb3bea458e1d19f";
+      sha256 = "1srhvcaa9db3a6xj29mkjr5kg33y71pclrlx4vcwz5m1lgb5c7q6";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/misc/airsonic/default.nix b/nixpkgs/pkgs/servers/misc/airsonic/default.nix
new file mode 100644
index 000000000000..059a6b8f0aaa
--- /dev/null
+++ b/nixpkgs/pkgs/servers/misc/airsonic/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "airsonic-${version}";
+  version = "10.1.2";
+
+  src = fetchurl {
+    url = "https://github.com/airsonic/airsonic/releases/download/v${version}/airsonic.war";
+    sha256 = "0hpk801dipmzsswgx0y6m0xhwn5iz97agnb2bzbr5xhkl4a0d33k";
+  };
+
+  buildCommand = ''
+    mkdir -p "$out/webapps"
+    cp "$src" "$out/webapps/airsonic.war"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Personal media streamer";
+    homepage = https://airsonic.github.io;
+    license = stdenv.lib.licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ disassembler ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/misc/client-ip-echo/client-ip-echo.nix b/nixpkgs/pkgs/servers/misc/client-ip-echo/client-ip-echo.nix
new file mode 100644
index 000000000000..1f5c6a20843a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/misc/client-ip-echo/client-ip-echo.nix
@@ -0,0 +1,16 @@
+{ mkDerivation, fetchFromGitHub, base, bytestring, network, stdenv }:
+mkDerivation {
+  pname = "client-ip-echo";
+  version = "0.1.0.3";
+  src = fetchFromGitHub {
+    owner = "jerith666";
+    repo = "client-ip-echo";
+    rev = "8d1a79d94a962b3266c1db51200913c2295d8922";
+    sha256 = "1g1s7i68n3906m3yjfygw96j64n8nh88lmf77blnz0xzrq4y3bgf";
+  };
+  isLibrary = false;
+  isExecutable = true;
+  executableHaskellDepends = [ base bytestring network ];
+  description = "accepts TCP connections and echoes the client's IP address back to it";
+  license = stdenv.lib.licenses.lgpl3;
+}
diff --git a/nixpkgs/pkgs/servers/misc/client-ip-echo/default.nix b/nixpkgs/pkgs/servers/misc/client-ip-echo/default.nix
new file mode 100644
index 000000000000..5bc0ea45e2b6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/misc/client-ip-echo/default.nix
@@ -0,0 +1,2 @@
+{ pkgs }:
+pkgs.haskellPackages.callPackage ./client-ip-echo.nix { }
diff --git a/nixpkgs/pkgs/servers/misc/subsonic/default.nix b/nixpkgs/pkgs/servers/misc/subsonic/default.nix
new file mode 100644
index 000000000000..50e754791e6d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/misc/subsonic/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, jre }:
+
+stdenv.mkDerivation rec {
+  name = "subsonic-${version}";
+  version = "6.1.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/subsonic/subsonic-${version}-standalone.tar.gz";
+    sha256 = "1xz3flxd5hxcvvg1izzxpv5rxwb5zprk92vsgvmcniy7j7r66936";
+  };
+
+  inherit jre;
+
+  # Create temporary directory to extract tarball into to satisfy Nix's need
+  # for a directory to be created in the unpack phase.
+  unpackPhase = ''
+    runHook preUnpack
+    mkdir ${name}
+    tar -C ${name} -xzf $src
+    runHook postUnpack
+  '';
+  installPhase = ''
+    runHook preInstall
+    mkdir $out
+    cp -r ${name}/* $out
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://subsonic.org;
+    description = "Personal media streamer";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ telotortium ];
+    platforms = platforms.unix;
+  };
+
+  phases = ["unpackPhase" "installPhase"];
+}
diff --git a/nixpkgs/pkgs/servers/misc/taskserver/default.nix b/nixpkgs/pkgs/servers/misc/taskserver/default.nix
new file mode 100644
index 000000000000..63925d30c644
--- /dev/null
+++ b/nixpkgs/pkgs/servers/misc/taskserver/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, cmake, libuuid, gnutls, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "taskserver-${version}";
+  version = "1.1.0";
+
+  enableParallelBuilding = true;
+
+  src = fetchurl {
+    url = "http://www.taskwarrior.org/download/taskd-${version}.tar.gz";
+    sha256 = "1d110q9vw8g5syzihxymik7hd27z1592wkpz55kya6lphzk8i13v";
+  };
+
+  patchPhase = ''
+    pkipath=$out/share/taskd/pki
+    mkdir -p $pkipath
+    cp -r pki/* $pkipath
+    echo "patching paths in pki/generate"
+    sed -i "s#^\.#$pkipath#" $pkipath/generate
+    for f in $pkipath/generate* ;do
+      i=$(basename $f)
+      echo patching $i
+      sed -i \
+          -e 's/which/type -p/g' \
+          -e 's#^\. ./vars#if test -e ./vars;then . ./vars; else echo "cannot find ./vars - copy the template from '$pkipath'/vars into the working directory";exit 1; fi#' $f
+
+      echo wrapping $i
+      makeWrapper  $pkipath/$i $out/bin/taskd-pki-$i \
+        --prefix PATH : ${stdenv.lib.makeBinPath [ gnutls ]}
+    done
+  '';
+
+  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ cmake libuuid gnutls ];
+
+  meta = {
+    description = "Server for synchronising Taskwarrior clients";
+    homepage = https://taskwarrior.org;
+    license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/bosun/default.nix b/nixpkgs/pkgs/servers/monitoring/bosun/default.nix
new file mode 100644
index 000000000000..905244833602
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/bosun/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+
+buildGoPackage rec {
+  name = "bosun-${version}";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "bosun-monitor";
+    repo = "bosun";
+    rev = version;
+    sha256 = "1qj97wiqj6awivvac1n00k0x8wdv4ambzdj4502nmmnr5rdbqq88";
+  };
+
+  subPackages = [ "cmd/bosun" "cmd/scollector" ];
+  goPackagePath = "bosun.org";
+
+  meta = with lib; {
+    description = "Time Series Alerting Framework";
+    license = licenses.mit;
+    homepage = https://bosun.org;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/cadvisor/default.nix b/nixpkgs/pkgs/servers/monitoring/cadvisor/default.nix
new file mode 100644
index 000000000000..ff0c926de595
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/cadvisor/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, go, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "cadvisor-${version}";
+  version = "0.32.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "cadvisor";
+    rev = "v${version}";
+    sha256 = "1li2qgfi4lfa2i1m7ykjxy1xm9hlq42fgdkb2wh2db9chyg5r4qp";
+  };
+
+  nativeBuildInputs = [ go ];
+
+  buildPhase = ''
+    mkdir -p Godeps/_workspace/src/github.com/google/
+    ln -s $(pwd) Godeps/_workspace/src/github.com/google/cadvisor
+    GOPATH=$(pwd)/Godeps/_workspace go build -v -o cadvisor github.com/google/cadvisor
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv cadvisor $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Analyzes resource usage and performance characteristics of running docker containers";
+    homepage = https://github.com/google/cadvisor;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/consul-alerts/default.nix b/nixpkgs/pkgs/servers/monitoring/consul-alerts/default.nix
new file mode 100644
index 000000000000..a888549bb6aa
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/consul-alerts/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "consul-alerts-${version}";
+  version = "0.5.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/AcalephStorage/consul-alerts";
+
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "AcalephStorage";
+    repo = "consul-alerts";
+    sha256 = "0dff2cpk3lkgjsh97rvlrpacpka0kwm29691diyvj7lb9ydzlx3r";
+  };
+
+  meta = with stdenv.lib; {
+    description = "An extendable open source continuous integration server";
+    homepage = https://github.com/AcalephStorage/consul-alerts;
+    # As per README
+    platforms = platforms.linux ++ platforms.freebsd ++ platforms.darwin;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ nh2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/consul-alerts/deps.nix b/nixpkgs/pkgs/servers/monitoring/consul-alerts/deps.nix
new file mode 100644
index 000000000000..6494dc61a87c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/consul-alerts/deps.nix
@@ -0,0 +1,34 @@
+let
+  mkAwsPackage = name: {
+    goPackagePath = "github.com/aws/aws-sdk-go/${name}";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aws/aws-sdk-go";
+      rev = "v1.14.13";
+      sha256 = "0014b6kl3rbjhjbk7jz116wdgdls54b1bwz454pkn1snlvkj3qil";
+    };
+  };
+in
+[
+  (mkAwsPackage "")
+  (mkAwsPackage "aws/session")
+  (mkAwsPackage "aws/sns")
+  (mkAwsPackage "service/sns")
+  {
+    goPackagePath = "github.com/imdario/mergo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/imdario/mergo";
+      rev = "v0.3.5";
+      sha256 = "1mvgn89vp39gcpvhiq4n7nw5ipj7fk6h03jgc6fjwgvwvss213pb";
+    };
+  }{
+    goPackagePath = "github.com/mitchellh/hashstructure";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/hashstructure";
+      rev = "2bca23e0e452137f789efbc8610126fd8b94f73b"; # has no releases as of writing
+      sha256 = "0vpacsls26474wya360fjhzi6l4y8s8s251c4szvqxh17n5f5gk1";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/facette/default.nix b/nixpkgs/pkgs/servers/monitoring/facette/default.nix
new file mode 100644
index 000000000000..efa62e261b74
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/facette/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub
+, go, pkgconfig, nodejs, nodePackages, pandoc, rrdtool }:
+
+stdenv.mkDerivation rec {
+  name = "facette-${version}";
+  version = "0.4.1";
+  src = fetchFromGitHub {
+    owner = "facette";
+    repo = "facette";
+    rev = "${version}";
+    sha256 = "0p28s2vn18cqg8p7bzhb38wky0m98d5xv3wvf1nmg1kmwhwim6mi";
+  };
+  nativeBuildInputs = [ go pkgconfig nodejs nodePackages.npm pandoc ];
+  buildInputs = [ rrdtool ];
+  preBuild = ''
+    export HOME="$NIX_BUILD_ROOT" # npm needs a writable home
+  '';
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Time series data visualization software";
+    longDescription = ''
+      Facette is a web application to display time series data from various
+      sources — such as collectd, Graphite, InfluxDB or KairosDB — on graphs.
+    '';
+    homepage = https://facette.io/;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ fgaz ];
+    broken = true; # not really broken, it just requires an internet connection to build. see #45382
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/fusion-inventory/default.nix b/nixpkgs/pkgs/servers/monitoring/fusion-inventory/default.nix
new file mode 100644
index 000000000000..33725cb62839
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/fusion-inventory/default.nix
@@ -0,0 +1,93 @@
+{ stdenv, lib, fetchurl, perlPackages, nix, dmidecode, pciutils, usbutils, iproute, nettools
+, fetchFromGitHub, makeWrapper
+}:
+
+perlPackages.buildPerlPackage rec {
+  name = "FusionInventory-Agent-${version}";
+  version = "2.3.21";
+
+  src = fetchFromGitHub {
+    owner = "fusioninventory";
+    repo = "fusioninventory-agent";
+    rev = version;
+    sha256 = "034clffcn0agx85macjgml4lyhvvck7idn94pqd2c77pk6crvw2y";
+  };
+
+  patches = [
+    ./remove_software_test.patch
+    # support for os-release file
+    (fetchurl {
+      url = https://github.com/fusioninventory/fusioninventory-agent/pull/396.diff;
+      sha256 = "0bxrjmff80ab01n23xggci32ajsah6zvcmz5x4hj6ayy6dzwi6jb";
+    })
+    # support for Nix software inventory
+    (fetchurl {
+      url = https://github.com/fusioninventory/fusioninventory-agent/pull/397.diff;
+      sha256 = "0pyf7mp0zsb3zcqb6yysr1zfp54p9ciwjn1pzayw6s9flmcgrmbw";
+    })
+    ];
+
+  postPatch = ''
+
+    patchShebangs bin
+
+    substituteInPlace "lib/FusionInventory/Agent/Tools/Linux.pm" \
+      --replace /sbin/ip ${iproute}/sbin/ip
+    substituteInPlace "lib/FusionInventory/Agent/Task/Inventory/Linux/Networks.pm" \
+      --replace /sbin/ip ${iproute}/sbin/ip
+  '';
+
+  buildTools = [];
+  buildInputs = [ makeWrapper ] ++ (with perlPackages; [
+    CGI
+    DataStructureUtil
+    FileCopyRecursive
+    HTTPProxy
+    HTTPServerSimple
+    HTTPServerSimpleAuthen
+    IOCapture
+    IOSocketSSL
+    IPCRun
+    JSON
+    LWPProtocolHttps
+    ModuleInstall
+    NetSNMP
+    TestCompile
+    TestDeep
+    TestException
+    TestMockModule
+    TestMockObject
+    TestNoWarnings
+  ]);
+  propagatedBuildInputs = with perlPackages; [
+    FileWhich
+    LWP
+    NetIP
+    TextTemplate
+    UNIVERSALrequire
+    XMLTreePP
+  ];
+
+  installPhase = ''
+    mkdir -p $out
+
+    cp -r bin $out
+    cp -r lib $out
+
+    for cur in $out/bin/*; do
+      if [ -x "$cur" ]; then
+        sed -e "s|./lib|$out/lib|" -i "$cur"
+        wrapProgram "$cur" --prefix PATH : ${lib.makeBinPath [nix dmidecode pciutils usbutils nettools iproute]}
+      fi
+    done
+  '';
+
+  outputs = [ "out" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.fusioninventory.org;
+    description = "FusionInventory unified Agent for UNIX, Linux, Windows and MacOSX";
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ maintainers.phile314 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/fusion-inventory/remove_software_test.patch b/nixpkgs/pkgs/servers/monitoring/fusion-inventory/remove_software_test.patch
new file mode 100644
index 000000000000..b360f418aa0b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/fusion-inventory/remove_software_test.patch
@@ -0,0 +1,67 @@
+diff --git a/t/agent/snmp/live.t b/t/agent/snmp/live.t
+index 8ee7ff02c..bd5551ab3 100755
+--- a/t/agent/snmp/live.t
++++ b/t/agent/snmp/live.t
+@@ -11,7 +11,7 @@ use Test::More;
+ use FusionInventory::Agent::XML::Response;
+ use FusionInventory::Agent::SNMP::Live;
+ 
+-plan tests => 12;
++plan tests => 11;
+ 
+ my $snmp;
+ throws_ok {
+@@ -52,15 +52,6 @@ throws_ok {
+ } qr/^Unable to resolve the UDP\/IPv4 address "none"/,
+ 'instanciation: unresolvable host';
+ 
+-throws_ok {
+-    $snmp = FusionInventory::Agent::SNMP::Live->new(
+-        version   => 1,
+-        community => 'public',
+-        hostname  => '1.1.1.1'
+-    );
+-} qr/no response from host 1.1.1.1/,
+-'instanciation: unresponding host';
+-
+ SKIP: {
+ skip 'live SNMP test disabled', 6 unless $ENV{TEST_LIVE_SNMP};
+ 
+diff --git a/t/apps/agent.t b/t/apps/agent.t
+index c0f6fc52f..c83837d70 100755
+--- a/t/apps/agent.t
++++ b/t/apps/agent.t
+@@ -12,7 +12,7 @@ use XML::TreePP;
+ use FusionInventory::Agent::Tools;
+ use FusionInventory::Test::Utils;
+ 
+-plan tests => 34;
++plan tests => 33;
+ 
+ my ($content, $out, $err, $rc);
+ 
+@@ -71,11 +71,6 @@ subtest "first inventory execution and content" => sub {
+     check_content_ok($out);
+ };
+ 
+-ok(
+-    exists $content->{REQUEST}->{CONTENT}->{SOFTWARES},
+-    'inventory has software'
+-);
+-
+ ok(
+     exists $content->{REQUEST}->{CONTENT}->{ENVS},
+     'inventory has environment variables'
+diff --git a/t/tasks/inventory/linux/softwares.t b/t/tasks/inventory/linux/softwares.t
+index 72a0e578c..13944f34f 100755
+--- a/t/tasks/inventory/linux/softwares.t
++++ b/t/tasks/inventory/linux/softwares.t
+@@ -89,7 +89,7 @@ my $rpm_packages = [
+         PUBLISHER   => 'Mageia.Org',
+         NAME        => 'xfsprogs',
+         COMMENTS    => 'Utilities for managing the XFS filesystem',
+-        INSTALLDATE => '25/03/2012',
++        INSTALLDATE => '24/03/2012',
+         FILESIZE    => '3628382',
+         FROM        => 'rpm',
+         ARCH        => 'x86_64',
diff --git a/nixpkgs/pkgs/servers/monitoring/grafana-reporter/default.nix b/nixpkgs/pkgs/servers/monitoring/grafana-reporter/default.nix
new file mode 100644
index 000000000000..03ed37b8b3f5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/grafana-reporter/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, tetex, makeWrapper }:
+
+with stdenv.lib;
+
+buildGoPackage rec {
+  name = "reporter-${version}";
+  version = "2.0.1";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/IzakMarais/reporter";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "IzakMarais";
+    repo = "reporter";
+    sha256 = "0yi7nx8ig5xgkwizddl0gdicnmcdp4qgg1fdxyq04l2y3qs176sg";
+  };
+
+  postInstall = ''
+    wrapProgram $bin/bin/grafana-reporter \
+      --prefix PATH : ${makeBinPath [ tetex ]}
+  '';
+
+  meta = {
+    description = "PDF report generator from a Grafana dashboard";
+    homepage = https://github.com/IzakMarais/reporter;
+    license = licenses.mit;
+    maintainers = with maintainers; [ disassembler ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/grafana/default.nix b/nixpkgs/pkgs/servers/monitoring/grafana/default.nix
new file mode 100644
index 000000000000..c8e49a851e90
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/grafana/default.nix
@@ -0,0 +1,41 @@
+{ lib, buildGoPackage, fetchurl, fetchFromGitHub, phantomjs2 }:
+
+buildGoPackage rec {
+  version = "5.4.2";
+  name = "grafana-${version}";
+  goPackagePath = "github.com/grafana/grafana";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "grafana";
+    repo = "grafana";
+    sha256 = "113cas1grvigfvgpkz3na6kaf2shfl7mpaikqsxn3z7xab7nqm96";
+  };
+
+  srcStatic = fetchurl {
+    url = "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-${version}.linux-amd64.tar.gz";
+    sha256 = "0rpq0q84619g5cixrcnzkvx6875g8mxc12gl8y5nzmq7zdavfa32";
+  };
+
+  postPatch = ''
+    substituteInPlace pkg/cmd/grafana-server/main.go \
+      --replace 'var version = "5.0.0"'  'var version = "${version}"'
+  '';
+
+  preBuild = "export GOPATH=$GOPATH:$NIX_BUILD_TOP/go/src/${goPackagePath}/Godeps/_workspace";
+
+  postInstall = ''
+    tar -xvf $srcStatic
+    mkdir -p $bin/share/grafana
+    mv grafana-*/{public,conf,tools} $bin/share/grafana/
+    ln -sf ${phantomjs2}/bin/phantomjs $bin/share/grafana/tools/phantomjs/phantomjs
+  '';
+
+  meta = with lib; {
+    description = "Gorgeous metric viz, dashboards & editors for Graphite, InfluxDB & OpenTSDB";
+    license = licenses.asl20;
+    homepage = https://grafana.org/;
+    maintainers = with maintainers; [ offline fpletz willibutz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/heapster/default.nix b/nixpkgs/pkgs/servers/monitoring/heapster/default.nix
new file mode 100644
index 000000000000..39c048576388
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/heapster/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoPackage, fetchFromGitHub, docker }:
+
+buildGoPackage rec {
+  rev = "3057a2c07061c8d9ffaf77e5442ffd7512ac0133";
+  name = "heapster-${lib.strings.substring 0 7 rev}";
+  goPackagePath = "k8s.io/heapster";
+  subPackages = [ "./" ];
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "kubernetes";
+    repo = "heapster";
+    sha256 = "1vg83207y7yigydnnhlvzs3s94vx02i56lqgs6a96c6i3mr3ydpb";
+  };
+
+  preBuild = ''
+    export GOPATH=$GOPATH:$NIX_BUILD_TOP/go/src/${goPackagePath}/Godeps/_workspace
+  '';
+
+  meta = with lib; {
+    description = "Compute Resource Usage Analysis and Monitoring of Container Clusters";
+    license = licenses.asl20;
+    homepage = https://github.com/kubernetes/heapster;
+    maintainers = with maintainers; [ offline ];
+    platforms = docker.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/kapacitor/default.nix b/nixpkgs/pkgs/servers/monitoring/kapacitor/default.nix
new file mode 100644
index 000000000000..969a58aff85d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/kapacitor/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+
+buildGoPackage rec {
+  name = "kapacitor-${version}";
+  version = "1.5.1";
+
+  goPackagePath = "github.com/influxdata/kapacitor";
+
+  src = fetchFromGitHub {
+    owner = "influxdata";
+    repo = "kapacitor";
+    rev = "v${version}";
+    sha256 = "17f3my1zmqmcx7qqhdcq8n73l60bsxnnxqgvnw0cnf0xsa5g1yks";
+  };
+
+  meta = with lib; {
+    description = "Open source framework for processing, monitoring, and alerting on time series data";
+    license = licenses.mit;
+    homepage = https://influxdata.com/time-series-platform/kapacitor/;
+    maintainers = with maintainers; [offline];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/lcdproc/default.nix b/nixpkgs/pkgs/servers/monitoring/lcdproc/default.nix
new file mode 100644
index 000000000000..af5f2880a0f8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/lcdproc/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, makeWrapper, pkgconfig
+, doxygen, freetype, libX11, libftdi, libusb, libusb1, ncurses, perl }:
+
+stdenv.mkDerivation rec {
+  name = "lcdproc-${version}";
+  version = "0.5.9";
+
+  src = fetchFromGitHub {
+    owner  = "lcdproc";
+    repo   = "lcdproc";
+    rev    = "v${version}";
+    sha256 = "1r885zv1gsh88j43x6fvzbdgfkh712a227d369h4fdcbnnfd0kpm";
+  };
+
+  patches = [
+    ./hardcode_mtab.patch
+  ];
+
+  configureFlags = [
+    "--enable-lcdproc-menus"
+    "--enable-drivers=all"
+    "--with-pidfile-dir=/run"
+  ];
+
+  buildInputs = [ freetype libX11 libftdi libusb libusb1 ncurses ];
+  nativeBuildInputs = [ autoreconfHook doxygen makeWrapper pkgconfig ];
+
+  # In 0.5.9: gcc: error: libbignum.a: No such file or directory
+  enableParallelBuilding = false;
+
+  postFixup = ''
+    for f in $out/bin/*.pl ; do
+      substituteInPlace $f \
+        --replace /usr/bin/perl ${stdenv.lib.getBin perl}/bin/perl
+    done
+
+    # NixOS will not use this file anyway but at least we can now execute LCDd
+    substituteInPlace $out/etc/LCDd.conf \
+      --replace server/drivers/ $out/lib/lcdproc/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Client/server suite for controlling a wide variety of LCD devices";
+    homepage    = http://lcdproc.org/;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/lcdproc/hardcode_mtab.patch b/nixpkgs/pkgs/servers/monitoring/lcdproc/hardcode_mtab.patch
new file mode 100644
index 000000000000..33c4b8e83b2d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/lcdproc/hardcode_mtab.patch
@@ -0,0 +1,17 @@
+diff --git a/clients/lcdproc/machine_Linux.c b/clients/lcdproc/machine_Linux.c
+index 7bb7266..a629674 100644
+--- a/clients/lcdproc/machine_Linux.c
++++ b/clients/lcdproc/machine_Linux.c
+@@ -259,11 +259,7 @@ machine_get_fs(mounts_type fs[], int *cnt)
+	char line[256];
+	int x = 0, err;
+
+-#ifdef MTAB_FILE
+-	mtab_fd = fopen(MTAB_FILE, "r");
+-#else
+-#error "Can't find your mounted filesystem table file."
+-#endif
++	mtab_fd = fopen("/etc/mtab", "r");
+
+	/* Get rid of old, unmounted filesystems... */
+	memset(fs, 0, sizeof(mounts_type) * 256);
diff --git a/nixpkgs/pkgs/servers/monitoring/longview/default.nix b/nixpkgs/pkgs/servers/monitoring/longview/default.nix
new file mode 100644
index 000000000000..45e380379d2f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/longview/default.nix
@@ -0,0 +1,68 @@
+{stdenv, fetchFromGitHub, perl, perlPackages, makeWrapper, glibc }:
+
+stdenv.mkDerivation rec {
+  version = "1.1.5";
+  name = "longview-${version}";
+
+  src = fetchFromGitHub {
+    owner = "linode";
+    repo = "longview";
+    rev = "v${version}";
+    sha256 = "1i9lli8iw8sb1bd633i82fzhx5gz85ma9d1hra41pkv2p3h823pa";
+  };
+
+  patches = [
+    # log to systemd journal
+    ./log-stdout.patch
+  ];
+
+  # Read all configuration from /run/longview
+  postPatch = ''
+    substituteInPlace Linode/Longview/Util.pm \
+        --replace /var/run/longview.pid /run/longview/longview.pid \
+        --replace /etc/linode /run/longview
+    substituteInPlace Linode/Longview.pl \
+        --replace /etc/linode /run/longview
+  '';
+
+  buildInputs = [ perl makeWrapper glibc ]
+    ++ (with perlPackages; [
+      LWP
+      LWPProtocolHttps
+      MozillaCA
+      CryptSSLeay
+      IOSocketInet6
+      LinuxDistribution
+      JSONPP
+      JSON
+      LogLogLite
+      TryTiny
+      DBI
+      DBDmysql
+    ]);
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/usr
+    mv Linode $out
+    ln -s ../Linode/Longview.pl $out/bin/longview
+    for h in syscall.h sys/syscall.h asm/unistd.h asm/unistd_32.h asm/unistd_64.h bits/wordsize.h bits/syscall.h; do
+        ${perl}/bin/h2ph -d $out ${glibc.dev}/include/$h
+        mkdir -p $out/usr/include/$(dirname $h)
+        mv $out${glibc.dev}/include/''${h%.h}.ph $out/usr/include/$(dirname $h)
+    done
+    wrapProgram $out/Linode/Longview.pl --prefix PATH : ${perl}/bin:$out/bin \
+     --suffix PERL5LIB : $out/Linode --suffix PERL5LIB : $PERL5LIB \
+     --suffix PERL5LIB : $out --suffix INC : $out
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.linode.com/longview;
+    description = "Longview collects all of your system-level metrics and sends them to Linode";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.rvl ];
+    inherit version;
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/longview/log-stdout.patch b/nixpkgs/pkgs/servers/monitoring/longview/log-stdout.patch
new file mode 100644
index 000000000000..3e009254bcad
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/longview/log-stdout.patch
@@ -0,0 +1,38 @@
+diff -ru longview-5bcc9b60896b72de2d14f046f911477c26eb70ba-src.orig/Linode/Longview/Logger.pm longview-5bcc9b60896b72de2d14f046f911477c26eb70ba-src/Linode/Longview/Logger.pm
+--- longview-5bcc9b60896b72de2d14f046f911477c26eb70ba-src.orig/Linode/Longview/Logger.pm	2015-10-28 17:15:32.816515318 +0000
++++ longview-5bcc9b60896b72de2d14f046f911477c26eb70ba-src/Linode/Longview/Logger.pm	2015-10-28 18:00:50.760332026 +0000
+@@ -26,9 +26,7 @@
+         my ( $self, $message ) = @_;
+ 
+         my $ts = strftime( '%m/%d %T', localtime );
+-        $self->{logger}->write(
+-            sprintf( '%s %s Longview[%i] - %s', $ts, uc($level), $$, $message ),
+-            $levels->{$level} );
++        printf( "%s %s Longview[%i] - %s\n", $ts, uc($level), $$, $message );
+         die "$message" if $level eq 'logdie';
+     };
+ }
+@@ -37,12 +35,6 @@
+     my ( $class, $level ) = @_;
+     my $self = {};
+ 
+-    mkpath($LOGDIR) unless (-d $LOGDIR);
+-    $self->{logger}
+-        = Log::LogLite->new( $LOGDIR . 'longview.log', $level )
+-        or die "Couldn't create logger object: $!";
+-    $self->{logger}->template("<message>\n");
+-
+     return bless $self, $class;
+ }
+ 
+diff -ru longview-5bcc9b60896b72de2d14f046f911477c26eb70ba-src.orig/Linode/Longview/Util.pm longview-5bcc9b60896b72de2d14f046f911477c26eb70ba-src/Linode/Longview/Util.pm
+--- longview-5bcc9b60896b72de2d14f046f911477c26eb70ba-src.orig/Linode/Longview/Util.pm	2015-10-28 17:15:32.816515318 +0000
++++ longview-5bcc9b60896b72de2d14f046f911477c26eb70ba-src/Linode/Longview/Util.pm	2015-10-28 19:20:30.894314658 +0000
+@@ -225,7 +225,6 @@
+  	#<<<   perltidy ignore
+  	chdir '/'                      or $logger->logdie("Can't chdir to /: $!");
+  	open STDIN, '<', '/dev/null'   or $logger->logdie("Can't read /dev/null: $!");
+- 	open STDOUT, '>>', '/dev/null' or $logger->logdie("Can't write to /dev/null: $!");
+  	open STDERR, '>>', '/dev/null' or $logger->logdie("Can't write to /dev/null: $!");
+ 	tie *STDERR, "Linode::Longview::STDERRLogger";
+  	defined( my $pid = fork )      or $logger->logdie("Can't fork: $!");
diff --git a/nixpkgs/pkgs/servers/monitoring/mtail/default.nix b/nixpkgs/pkgs/servers/monitoring/mtail/default.nix
new file mode 100644
index 000000000000..5044aef2bb53
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/mtail/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, gotools, buildGoPackage }:
+
+buildGoPackage rec {
+  name = "mtail-${version}";
+  version = "3.0.0-rc4";
+  goPackagePath = "github.com/google/mtail";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "mtail";
+    rev = "v${version}";
+    sha256 = "1n7pqvid48ayn15qfpgpbsx0iqg24x08wphzpc08mlfw47gq7jg3";
+  };
+
+  buildInputs = [ gotools ];
+  goDeps = ./deps.nix;
+  patches = [ ./fix-gopath.patch ];
+  preBuild = "go generate -x ./go/src/github.com/google/mtail/vm/";
+
+
+  meta = with lib; {
+    license = licenses.asl20;
+    homepage = "https://github.com/google/mtail";
+    description = "Tool for extracting metrics from application logs";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/mtail/deps.nix b/nixpkgs/pkgs/servers/monitoring/mtail/deps.nix
new file mode 100644
index 000000000000..6de3c8b6e139
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/mtail/deps.nix
@@ -0,0 +1,56 @@
+[
+  rec {
+    goPackagePath = "github.com/golang/glog";
+    fetch = {
+      type = "git";
+      url = "https://${goPackagePath}.git";
+      rev = "23def4e6c14b4da8ac2ed8007337bc5eb5007998";
+      sha256 = "0jb2834rw5sykfr937fxi8hxi2zy80sj2bdn9b3jb4b26ksqng30";
+    };
+  }
+  rec {
+    goPackagePath = "github.com/spf13/afero";
+    fetch = {
+      type = "git";
+      url = "https://${goPackagePath}.git";
+      rev = "5660eeed305fe5f69c8fc6cf899132a459a97064";
+      sha256 = "0rpwvjp9xfmy2yvbmy810qamjhimr56zydvx7hb1gjn3b7jp4rhd";
+    };
+  }
+  rec {
+    goPackagePath = "github.com/fsnotify/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://${goPackagePath}.git";
+      rev = "v1.4.2";
+      sha256 = "06wfg1mmzjj04z7d0q1x2fai9k6hm957brngsaf02fa9a3qqanv3";
+    };
+  }
+  rec {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://${goPackagePath}.git";
+      rev = "v0.8.0";
+      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "95c6576299259db960f6c5b9b69ea52422860fce";
+      sha256 = "1fhq8bianb9a1iccpr92mi2hix9zvm10n0f7syx6vfbxdw32i316";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "3ba1a4dc141f5236b19ccbf2f67cb63d1a688d46";
+      sha256 = "07sbakmman41p5hmdbf4y2wak0gh7k1z88m0zb72acsypp4179h1";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/mtail/fix-gopath.patch b/nixpkgs/pkgs/servers/monitoring/mtail/fix-gopath.patch
new file mode 100644
index 000000000000..9421d194a9e5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/mtail/fix-gopath.patch
@@ -0,0 +1,13 @@
+diff --git a/vm/compiler.go b/vm/compiler.go
+index c55266b..a46417c 100644
+--- a/vm/compiler.go
++++ b/vm/compiler.go
+@@ -2,7 +2,7 @@
+ // This file is available under the Apache license.
+ 
+ // Build the parser:
+-//go:generate $GOPATH/bin/goyacc -v y.output -o parser.go -p mtail parser.y
++//go:generate goyacc -v y.output -o parser.go -p mtail parser.y
+ 
+ package vm
+ 
diff --git a/nixpkgs/pkgs/servers/monitoring/munin/adding_sconfdir_munin-node.patch b/nixpkgs/pkgs/servers/monitoring/munin/adding_sconfdir_munin-node.patch
new file mode 100644
index 000000000000..6e14d6137034
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/munin/adding_sconfdir_munin-node.patch
@@ -0,0 +1,41 @@
+commit af5fa3623bb9a73052f9154be4a0f38c60ea42a2
+Author: Kjetil Orbekk <kjetil.orbekk@gmail.com>
+Date:   Thu Nov 23 21:21:36 2017 -0500
+
+    node: add --sconfdir to set plugin configuration dir
+
+diff --git a/node/sbin/munin-node b/node/sbin/munin-node
+index 909c8c4e..0ccf3941 100755
+--- a/node/sbin/munin-node
++++ b/node/sbin/munin-node
+@@ -100,9 +100,11 @@ sub parse_args
+     my @ORIG_ARGV  = @ARGV;
+ 
+     my $servicedir_cmdline;
++    my $sconfdir_cmdline;
+     print_usage_and_exit() unless GetOptions(
+         "config=s"     => \$conffile,
+         "servicedir=s" => \$servicedir_cmdline,
++        "sconfdir=s"   => \$sconfdir_cmdline,
+         "debug!"       => \$DEBUG,
+         "pidebug!"     => \$PIDEBUG,
+         "paranoia!"    => \$paranoia,
+@@ -112,6 +114,7 @@ sub parse_args
+ 
+     # We untaint the args brutally, since the sysadm should know what he does
+     $servicedir = $1 if defined $servicedir_cmdline && $servicedir_cmdline =~ m/(.*)/;
++    $sconfdir = $1 if defined $sconfdir_cmdline && $sconfdir_cmdline =~ m/(.*)/;
+ 
+     # Reset ARGV (for HUPing)
+     @ARGV = @ORIG_ARGV;
+@@ -175,6 +178,10 @@ Use E<lt>fileE<gt> as configuration file. [@@CONFDIR@@/munin-node.conf]
+ 
+ Override plugin directory [@@CONFDIR@@/plugins/]
+ 
++=item B<< --sconfdir <dir> >>
++
++Override plugin configuration directory [@@CONFDIR@@/plugin-conf.d/]
++
+ =item B< --[no]paranoia >
+ 
+ Only run plugins owned by root. Check permissions as well. [--noparanoia]
diff --git a/nixpkgs/pkgs/servers/monitoring/munin/adding_servicedir_munin-node.patch b/nixpkgs/pkgs/servers/monitoring/munin/adding_servicedir_munin-node.patch
new file mode 100644
index 000000000000..856f3d73011e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/munin/adding_servicedir_munin-node.patch
@@ -0,0 +1,84 @@
+From 75a3ec48814e7b9a9b22259a04009076363be3f1 Mon Sep 17 00:00:00 2001
+From: Igor Kolar <igor.kolar@gmail.com>
+Date: Thu, 17 Oct 2013 00:48:23 +0200
+Subject: [PATCH 1/2] node: added --servicedir switch to munin-node
+
+This code is copied over from munin-node-config, that already does the same
+---
+ node/sbin/munin-node | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/node/sbin/munin-node b/node/sbin/munin-node
+index 7b2e180..0a93450 100755
+--- a/node/sbin/munin-node
++++ b/node/sbin/munin-node
+@@ -35,7 +35,7 @@ use Munin::Node::OS;
+ use Munin::Node::Service;
+ use Munin::Node::Server;
+ 
+-my $servicedir;
++my $servicedir = "$Munin::Common::Defaults::MUNIN_CONFDIR/plugins";
+ my $sconfdir = "$Munin::Common::Defaults::MUNIN_CONFDIR/plugin-conf.d";
+ my $conffile = "$Munin::Common::Defaults::MUNIN_CONFDIR/munin-node.conf";
+ my $DEBUG    = 0;
+@@ -101,6 +101,7 @@ sub parse_args
+ 
+     print_usage_and_exit() unless GetOptions(
+         "config=s"     => \$conffile,
++        "servicedir=s" => \$servicedir,
+         "debug!"       => \$DEBUG,
+         "pidebug!"     => \$PIDEBUG,
+         "paranoia!"    => \$paranoia,
+@@ -166,6 +167,10 @@ and returning the output they produce.
+ 
+ Use E<lt>fileE<gt> as configuration file. [@@CONFDIR@@/munin-node.conf]
+ 
++=item B<< --servicedir <dir> >>
++
++Override plugin directory [@@CONFDIR@@/plugins/]
++
+ =item B< --[no]paranoia >
+ 
+ Only run plugins owned by root. Check permissions as well. [--noparanoia]
+-- 
+1.8.4
+
+
+From b8e17cbe73ae4c71b93ff5687ba86db1d0c1f5bd Mon Sep 17 00:00:00 2001
+From: Steve Schnepp <steve.schnepp@pwkf.org>
+Date: Thu, 17 Oct 2013 11:52:10 +0200
+Subject: [PATCH 2/2] node: untaint the service-dir args
+
+---
+ node/sbin/munin-node | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/node/sbin/munin-node b/node/sbin/munin-node
+index 0a93450..909c8c4 100755
+--- a/node/sbin/munin-node
++++ b/node/sbin/munin-node
+@@ -99,9 +99,10 @@ sub parse_args
+ {
+     my @ORIG_ARGV  = @ARGV;
+ 
++    my $servicedir_cmdline;
+     print_usage_and_exit() unless GetOptions(
+         "config=s"     => \$conffile,
+-        "servicedir=s" => \$servicedir,
++        "servicedir=s" => \$servicedir_cmdline,
+         "debug!"       => \$DEBUG,
+         "pidebug!"     => \$PIDEBUG,
+         "paranoia!"    => \$paranoia,
+@@ -109,6 +110,9 @@ sub parse_args
+         "help"         => \&print_usage_and_exit,
+     );
+ 
++    # We untaint the args brutally, since the sysadm should know what he does
++    $servicedir = $1 if defined $servicedir_cmdline && $servicedir_cmdline =~ m/(.*)/;
++
+     # Reset ARGV (for HUPing)
+     @ARGV = @ORIG_ARGV;
+ 
+-- 
+1.8.4
+
diff --git a/nixpkgs/pkgs/servers/monitoring/munin/default.nix b/nixpkgs/pkgs/servers/monitoring/munin/default.nix
new file mode 100644
index 000000000000..72d5f124c63d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/munin/default.nix
@@ -0,0 +1,142 @@
+{ stdenv, fetchFromGitHub, makeWrapper, which, coreutils, rrdtool, perl, perlPackages
+, python, ruby, jre, nettools, bc
+}:
+
+stdenv.mkDerivation rec {
+  version = "2.0.37";
+  name = "munin-${version}";
+
+  src = fetchFromGitHub {
+    owner = "munin-monitoring";
+    repo = "munin";
+    rev = version;
+    sha256 = "10niyzckx90dwdr4d7vj07d1qjy3nk7xzp30nqnlxzbaww7n5v78";
+  };
+
+  buildInputs = [
+    makeWrapper
+    which
+    coreutils
+    rrdtool
+    nettools
+    perl
+    perlPackages.ModuleBuild
+    perlPackages.HTMLTemplate
+    perlPackages.NetCIDR
+    perlPackages.NetSSLeay
+    perlPackages.NetServer
+    perlPackages.LogLog4perl
+    perlPackages.IOSocketInet6
+    perlPackages.Socket6
+    perlPackages.URI
+    perlPackages.DBFile
+    perlPackages.DateManip
+    perlPackages.FileCopyRecursive
+    perlPackages.FCGI
+    perlPackages.NetSNMP
+    perlPackages.NetServer
+    perlPackages.ListMoreUtils
+    perlPackages.TimeHiRes
+    perlPackages.LWP
+    perlPackages.DBDPg
+    python
+    ruby
+    jre
+    # tests
+    perlPackages.TestLongString
+    perlPackages.TestDifferences
+    perlPackages.TestDeep
+    perlPackages.TestMockModule
+    perlPackages.TestMockObject
+    perlPackages.FileSlurp
+    perlPackages.IOStringy
+  ];
+
+  # needs to find a local perl module during build
+  PERL_USE_UNSAFE_INC = "1";
+
+  # TODO: tests are failing http://munin-monitoring.org/ticket/1390#comment:1
+  # NOTE: important, test command always exits with 0, think of a way to abort the build once tests pass
+  doCheck = false;
+
+  checkPhase = ''
+   export PERL5LIB="$PERL5LIB:${rrdtool}/lib/perl5/site_perl"
+   LC_ALL=C make -j1 test 
+  '';
+
+  patches = [
+    # https://rt.cpan.org/Public/Bug/Display.html?id=75112
+    ./dont_preserve_source_dir_permissions.patch
+
+    # https://github.com/munin-monitoring/munin/pull/134
+    ./adding_servicedir_munin-node.patch
+
+    ./adding_sconfdir_munin-node.patch
+    ./preserve_environment.patch
+  ];
+
+  preBuild = ''
+    substituteInPlace "Makefile" \
+      --replace "/bin/pwd" "pwd" \
+      --replace "HTMLOld.3pm" "HTMLOld.3"
+
+    # munin checks at build time if user/group exists, unpure
+    sed -i '/CHECKUSER/d' Makefile
+    sed -i '/CHOWN/d' Makefile
+    sed -i '/CHECKGROUP/d' Makefile
+
+    # munin hardcodes PATH, we need it to obey $PATH
+    sed -i '/ENV{PATH}/d' node/lib/Munin/Node/Service.pm
+  '';
+
+  # DESTDIR shouldn't be needed (and shouldn't have worked), but munin
+  # developers have forgotten to use PREFIX everywhere, so we use DESTDIR to
+  # ensure that everything is installed in $out.
+  makeFlags = ''
+    PREFIX=$(out)
+    DESTDIR=$(out)
+    PERLLIB=$(out)/lib/perl5/site_perl
+    PERL=${perl}/bin/perl
+    PYTHON=${python}/bin/python
+    RUBY=${ruby}/bin/ruby
+    JAVARUN=${jre}/bin/java
+    PLUGINUSER=munin
+  '';
+
+  postFixup = ''
+    echo "Removing references to /usr/{bin,sbin}/ from munin plugins..."
+    find "$out/lib/plugins" -type f -print0 | xargs -0 -L1 \
+        sed -i -e "s|/usr/bin/||g" -e "s|/usr/sbin/||g" -e "s|\<bc\>|${bc}/bin/bc|g"
+
+    if test -e $out/nix-support/propagated-build-inputs; then
+        ln -s $out/nix-support/propagated-build-inputs $out/nix-support/propagated-user-env-packages
+    fi
+
+    for file in "$out"/bin/munindoc "$out"/sbin/munin-* "$out"/lib/munin-* "$out"/www/cgi/*; do
+        # don't wrap .jar files
+        case "$file" in
+            *.jar) continue;;
+        esac
+        wrapProgram "$file" \
+          --set PERL5LIB "$out/lib/perl5/site_perl:${with perlPackages; stdenv.lib.makePerlPath [
+                LogLog4perl IOSocketInet6 Socket6 URI DBFile DateManip
+                HTMLTemplate FileCopyRecursive FCGI NetCIDR NetSNMP NetServer
+                ListMoreUtils TimeHiRes DBDPg LWP rrdtool
+                ]}"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Networked resource monitoring tool";
+    longDescription = ''
+      Munin is a monitoring tool that surveys all your computers and remembers
+      what it saw. It presents all the information in graphs through a web
+      interface. Munin can help analyze resource trends and 'what just happened
+      to kill our performance?' problems.
+    '';
+    homepage = http://munin-monitoring.org/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.domenkozar maintainers.bjornfor ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/munin/dont_preserve_source_dir_permissions.patch b/nixpkgs/pkgs/servers/monitoring/munin/dont_preserve_source_dir_permissions.patch
new file mode 100644
index 000000000000..78eac7283051
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/munin/dont_preserve_source_dir_permissions.patch
@@ -0,0 +1,18 @@
+# https://rt.cpan.org/Public/Bug/Display.html?id=75112
+diff --git a/master/lib/Munin/Master/HTMLOld.pm b/master/lib/Munin/Master/HTMLOld.pm
+index 2b6e71f..c0aa2c0 100644
+--- a/master/lib/Munin/Master/HTMLOld.pm
++++ b/master/lib/Munin/Master/HTMLOld.pm
+@@ -711,10 +711,12 @@ sub emit_main_index {
+ 
+ sub copy_web_resources {
+     my ($staticdir, $htmldir) = @_;
++       local $File::Copy::Recursive::KeepMode = 0;
+ 	unless(dircopy($staticdir, "$htmldir/static")){
+ 		ERROR "[ERROR] Could not copy contents from $staticdir to $htmldir";
+ 		die "[ERROR] Could not copy contents from $staticdir to $htmldir";
+ 	}
++       local $File::Copy::Recursive::KeepMode = 1;
+ }
+ 
+ sub instanciate_comparison_templates {
diff --git a/nixpkgs/pkgs/servers/monitoring/munin/preserve_environment.patch b/nixpkgs/pkgs/servers/monitoring/munin/preserve_environment.patch
new file mode 100644
index 000000000000..ef66f48ecb42
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/munin/preserve_environment.patch
@@ -0,0 +1,41 @@
+commit d94c29b7397362857b81d8c877a989fdb28490d8
+Author: Kjetil Orbekk <kjetil.orbekk@gmail.com>
+Date:   Tue Nov 21 15:37:42 2017 -0500
+
+    Keep environment variables instead of overwriting them.
+
+diff --git a/common/lib/Munin/Common/Defaults.pm b/common/lib/Munin/Common/Defaults.pm
+index 131f52c0..bbf42697 100644
+--- a/common/lib/Munin/Common/Defaults.pm
++++ b/common/lib/Munin/Common/Defaults.pm
+@@ -71,7 +71,7 @@ sub export_to_environment {
+ 
+     my %defaults = %{$class->get_defaults()};
+     while (my ($k, $v) = each %defaults) {
+-        $ENV{$k} = $v;
++        $ENV{$k} = $ENV{$k} || $v;
+     }
+ 
+     return
+diff --git a/node/lib/Munin/Node/Service.pm b/node/lib/Munin/Node/Service.pm
+index 1b4f6114..be58bd77 100644
+--- a/node/lib/Munin/Node/Service.pm
++++ b/node/lib/Munin/Node/Service.pm
+@@ -122,7 +122,7 @@ sub export_service_environment {
+     # We append the USER to the MUNIN_PLUGSTATE, to avoid CVE-2012-3512
+     my $uid = $self->_resolve_uid($service);
+     my $user = getpwuid($uid);
+-    $ENV{MUNIN_PLUGSTATE} = "$Munin::Common::Defaults::MUNIN_PLUGSTATE/$user";
++    $ENV{MUNIN_PLUGSTATE} = "$ENV{MUNIN_PLUGSTATE}/$user";
+ 
+     # Provide a consistent default state-file.
+     $ENV{MUNIN_STATEFILE} = "$ENV{MUNIN_PLUGSTATE}/$service-$ENV{MUNIN_MASTER_IP}";
+@@ -243,7 +243,7 @@ sub exec_service
+ 
+     # XXX - Create the statedir for the user
+     my $uid = $self->_resolve_uid($service);
+-    Munin::Node::OS->mkdir_subdir("$Munin::Common::Defaults::MUNIN_PLUGSTATE", $uid);
++    Munin::Node::OS->mkdir_subdir("$ENV{MUNIN_PLUGSTATE}", $uid);
+ 
+     $self->change_real_and_effective_user_and_group($service);
+ 
diff --git a/nixpkgs/pkgs/servers/monitoring/nagios/default.nix b/nixpkgs/pkgs/servers/monitoring/nagios/default.nix
new file mode 100644
index 000000000000..9d79e8422ee8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/nagios/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, perl, php, gd, libpng, zlib, unzip }:
+
+stdenv.mkDerivation rec {
+  name = "nagios-${version}";
+  version = "4.4.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/nagios/nagios-4.x/${name}/${name}.tar.gz";
+    sha256 = "0lv8fgqbxza0rwd0gy3jsy85ljgsi3vhvzacr346va3a68zr461l";
+  };
+
+  patches = [ ./nagios.patch ];
+  buildInputs = [ php perl gd libpng zlib unzip ];
+
+  configureFlags = [ "--localstatedir=/var/lib/nagios" ];
+  buildFlags = "all";
+
+  # Do not create /var directories
+  preInstall = ''
+    substituteInPlace Makefile --replace '$(MAKE) install-basic' ""
+  '';
+  installTargets = "install install-config";
+
+  meta = {
+    description = "A host, service and network monitoring program";
+    homepage    = https://www.nagios.org/;
+    license     = stdenv.lib.licenses.gpl2;
+    platforms   = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ thoughtpolice relrod ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/nagios/nagios.patch b/nixpkgs/pkgs/servers/monitoring/nagios/nagios.patch
new file mode 100644
index 000000000000..cec4c4942b53
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/nagios/nagios.patch
@@ -0,0 +1,23 @@
+diff -ruN nagios-4.0.7.orig/configure nagios-4.0.7/configure
+--- nagios-4.0.7.orig/configure	2014-06-03 10:41:42.000000000 -0400
++++ nagios-4.0.7/configure	2014-06-12 00:30:17.516468583 -0400
+@@ -6014,7 +6014,8 @@
+ #define DEFAULT_NAGIOS_GROUP "$nagios_grp"
+ _ACEOF
+ 
+-INSTALL_OPTS="-o $nagios_user -g $nagios_grp"
++#INSTALL_OPTS="-o $nagios_user -g $nagios_grp"
++INSTALL_OPTS=""
+ 
+ 
+ 
+@@ -6035,7 +6036,8 @@
+ 
+ 
+ 
+-COMMAND_OPTS="-o $command_user -g $command_grp"
++#COMMAND_OPTS="-o $command_user -g $command_grp"
++COMMAND_OPTS=""
+ 
+ 
+ MAIL_PROG=no
diff --git a/nixpkgs/pkgs/servers/monitoring/nagios/plugins/check_ssl_cert.nix b/nixpkgs/pkgs/servers/monitoring/nagios/plugins/check_ssl_cert.nix
new file mode 100644
index 000000000000..5c5750fccc8e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/nagios/plugins/check_ssl_cert.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, file, openssl, makeWrapper, which, curl }:
+
+stdenv.mkDerivation rec {
+  name = "check_ssl_cert-${version}";
+  version = "1.79.0";
+
+  src = fetchFromGitHub {
+    owner = "matteocorti";
+    repo = "check_ssl_cert";
+    rev = "v${version}";
+    sha256 = "0pqk09xypa9vdxw5lbaa1j8w3mbmdwh2y1sq768rqq0izyfynf4d";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [ "DESTDIR=$(out)/bin" "MANDIR=$(out)/share/man" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/check_ssl_cert \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ openssl file which curl ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A Nagios plugin to check the CA and validity of an X.509 certificate";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/net-snmp/CVE-2018-18065.patch b/nixpkgs/pkgs/servers/monitoring/net-snmp/CVE-2018-18065.patch
new file mode 100644
index 000000000000..c33f7bb03fa8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/net-snmp/CVE-2018-18065.patch
@@ -0,0 +1,30 @@
+commit 7ffb8e25a0db851953155de91f0170e9bf8c457d
+Author: Robert Story <rstory@freesnmp.com>
+Date:   Thu Oct 6 10:43:10 2016 -0400
+
+    CHANGES: BUG: 2743: snmpd crashes when receiving a GetNext PDU with multiple Varbinds
+    
+    skip out-of-range varbinds when calling next handler
+
+diff --git a/agent/helpers/table.c b/agent/helpers/table.c
+index 32a08033a..2666638b5 100644
+--- a/agent/helpers/table.c
++++ b/agent/helpers/table.c
+@@ -340,6 +340,8 @@ table_helper_handler(netsnmp_mib_handler *handler,
+             else if (reqinfo->mode == MODE_GET)
+                 table_helper_cleanup(reqinfo, request,
+                                      SNMP_NOSUCHOBJECT);
++            else
++                request->processed = 1; /* skip if next handler called */
+             continue;
+         }
+ 
+@@ -409,6 +411,8 @@ table_helper_handler(netsnmp_mib_handler *handler,
+                 else if (reqinfo->mode == MODE_GET)
+                     table_helper_cleanup(reqinfo, request,
+                                          SNMP_NOSUCHOBJECT);
++                else
++                    request->processed = 1; /* skip if next handler called */
+                 continue;
+             }
+             /*
diff --git a/nixpkgs/pkgs/servers/monitoring/net-snmp/default.nix b/nixpkgs/pkgs/servers/monitoring/net-snmp/default.nix
new file mode 100644
index 000000000000..d86eac719a60
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/net-snmp/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, fetchurl, fetchpatch, autoreconfHook, file, openssl, perl, unzip }:
+
+stdenv.mkDerivation rec {
+  name = "net-snmp-5.7.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/net-snmp/${name}.zip";
+    sha256 = "0gkss3zclm23zwpqfhddca8278id7pk6qx1mydpimdrrcndwgpz8";
+  };
+
+  patches =
+    let fetchAlpinePatch = name: sha256: fetchpatch {
+      url = "https://git.alpinelinux.org/cgit/aports/plain/main/net-snmp/${name}?id=f25d3fb08341b60b6ccef424399f060dfcf3f1a5";
+      inherit name sha256;
+    };
+  in [
+    (fetchAlpinePatch "CVE-2015-5621.patch" "05098jyvd9ddr5q26z7scbbvk1bk6x4agpjm6pyprvpc1zpi0y09")
+    (fetchAlpinePatch "fix-Makefile-PL.patch" "14ilnkj3cr6mpi242hrmmmv8nv4dj0fdgn42qfk9aa7scwsc0lc7")
+    (fetchAlpinePatch "fix-includes.patch" "0zpkbb6k366qpq4dax5wknwprhwnhighcp402mlm7950d39zfa3m")
+    (fetchAlpinePatch "netsnmp-swinst-crash.patch" "0gh164wy6zfiwiszh58fsvr25k0ns14r3099664qykgpmickkqid")
+    (fetchAlpinePatch "remove-U64-typedef.patch" "1msxyhcqkvhqa03dwb50288g7f6nbrcd9cs036m9xc8jdgjb8k8j")
+    ./CVE-2018-18065.patch
+  ];
+
+  preConfigure =
+    ''
+      perlversion=$(perl -e 'use Config; print $Config{version};')
+      perlarchname=$(perl -e 'use Config; print $Config{archname};')
+      installFlags="INSTALLSITEARCH=$out/lib/perl5/site_perl/$perlversion/$perlarchname INSTALLSITEMAN3DIR=$out/share/man/man3"
+
+      # http://article.gmane.org/gmane.network.net-snmp.user/32434
+      substituteInPlace "man/Makefile.in" --replace 'grep -vE' '@EGREP@ -v'
+    '';
+
+  configureFlags =
+    [ "--with-default-snmp-version=3"
+      "--with-sys-location=Unknown"
+      "--with-sys-contact=root@unknown"
+      "--with-logfile=/var/log/net-snmpd.log"
+      "--with-persistent-directory=/var/lib/net-snmp"
+      "--with-openssl=${openssl.dev}"
+    ] ++ stdenv.lib.optional stdenv.isLinux "--with-mnttab=/proc/mounts";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ file perl unzip openssl ];
+
+  enableParallelBuilding = true;
+  doCheck = false; # fails
+
+  postInstall = ''
+    for f in "$out/lib/"*.la $out/bin/net-snmp-config $out/bin/net-snmp-create-v3-user; do
+      sed 's|-L${openssl.dev}|-L${openssl.out}|g' -i $f
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Clients and server for the SNMP network monitoring protocol";
+    homepage = http://net-snmp.sourceforge.net/;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ wkennington ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/newrelic-sysmond/default.nix b/nixpkgs/pkgs/servers/monitoring/newrelic-sysmond/default.nix
new file mode 100644
index 000000000000..dc6faf151b77
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/newrelic-sysmond/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "newrelic-sysmond-${version}";
+  version = "2.3.0.132";
+
+  src = fetchurl {
+    url = "https://download.newrelic.com/server_monitor/archive/${version}/newrelic-sysmond-${version}-linux.tar.gz";
+    sha256 = "0cdvffdsadfahfn1779zjfawz6l77awab3g9mw43vsba1568jh4f";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -v -m755 daemon/nrsysmond.x64 $out/bin/nrsysmond
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      $out/bin/nrsysmond
+  '';
+
+  meta = with stdenv.lib; {
+    description = "System-wide monitoring for newrelic";
+    homepage = http://newrelic.com/;
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lnl7 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/plugins/default.nix b/nixpkgs/pkgs/servers/monitoring/plugins/default.nix
new file mode 100644
index 000000000000..a0f7341571ce
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/plugins/default.nix
@@ -0,0 +1,71 @@
+{ stdenv, fetchFromGitHub, autoreconfHook
+, coreutils, gnugrep, gnused, lm_sensors, net_snmp, openssh, openssl, perl }:
+
+with stdenv.lib;
+
+let
+  majorVersion = "2.2";
+  minorVersion = ".0";
+
+  binPath = makeBinPath [ coreutils gnugrep gnused lm_sensors net_snmp ];
+
+in stdenv.mkDerivation rec {
+  name = "monitoring-plugins-${majorVersion}${minorVersion}";
+
+  src = fetchFromGitHub {
+    owner  = "monitoring-plugins";
+    repo   = "monitoring-plugins";
+    rev    = "v${majorVersion}";
+    sha256 = "1pw7i6d2cnb5nxi2lbkwps2qzz04j9zd86fzpv9ka896b4aqrwv1";
+  };
+
+  # !!! Awful hack. Grrr... this of course only works on NixOS.
+  # Anyway the check that configure performs to figure out the ping
+  # syntax is totally impure, because it runs an actual ping to
+  # localhost (which won't work for ping6 if IPv6 support isn't
+  # configured on the build machine).
+  preConfigure= ''
+    substituteInPlace po/Makefile.in.in \
+      --replace /bin/sh ${stdenv.shell}
+
+    sed -i configure.ac \
+      -e 's|^DEFAULT_PATH=.*|DEFAULT_PATH=\"\$out/bin:/run/wrappers/bin:${binPath}\"|'
+
+    configureFlagsArray=(
+      --with-ping-command='/run/wrappers/bin/ping -4 -n -U -w %d -c %d %s'
+      --with-ping6-command='/run/wrappers/bin/ping -6 -n -U -w %d -c %d %s'
+    )
+  '';
+
+  # !!! make openssh a runtime dependency only
+  buildInputs = [ net_snmp openssh openssl perl ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  enableParallelBuilding = true;
+
+  # For unknown reasons the installer tries executing $out/share and fails if
+  # it doesn't succeed.
+  # So we create it and remove it again later.
+  preBuild = ''
+    mkdir -p $out
+    cat <<_EOF > $out/share
+#!${stdenv.shell}
+exit 0
+_EOF
+    chmod 755 $out/share
+  '';
+
+  postInstall = ''
+    rm $out/share
+    ln -s libexec $out/bin
+  '';
+
+  meta = {
+    description = "Official monitoring plugins for Nagios/Icinga/Sensu and others.";
+    homepage    = https://www.monitoring-plugins.org;
+    license     = licenses.gpl2;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ thoughtpolice relrod ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/plugins/esxi.nix b/nixpkgs/pkgs/servers/monitoring/plugins/esxi.nix
new file mode 100644
index 000000000000..888cef61fcb6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/plugins/esxi.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, python2Packages }:
+
+let
+  bName = "check_esxi_hardware";
+  pName = stdenv.lib.replaceStrings [ "_" ] [ "-" ] "${bName}";
+
+in python2Packages.buildPythonApplication rec {
+  name = "${pName}-${version}";
+  version = "20181001";
+
+  src = fetchFromGitHub {
+    owner  = "Napsty";
+    repo   = bName;
+    rev    = version;
+    sha256 = "0azfacxcnnxxfqzrhh29k8cnjyr88gz35bi6h8fq931fl3plv10l";
+  };
+
+  dontBuild = true;
+  doCheck = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin                ${bName}.py
+    install -Dm644 -t $out/share/doc/${pName} README.md
+
+    runHook postInstall
+  '';
+
+  propagatedBuildInputs = with python2Packages; [ pywbem ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.claudiokuenzler.com/nagios-plugins/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/plugins/labs_consol_de.nix b/nixpkgs/pkgs/servers/monitoring/plugins/labs_consol_de.nix
new file mode 100644
index 000000000000..5d93f4c53496
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/plugins/labs_consol_de.nix
@@ -0,0 +1,79 @@
+{ stdenv, fetchFromGitHub, fetchurl, autoreconfHook, makeWrapper
+, perl, DBDsybase, NetSNMP, coreutils, gnused, gnugrep }:
+
+let
+  glplugin = fetchFromGitHub {
+    owner = "lausser";
+    repo   = "GLPlugin";
+    rev    = "e8e1a2907a54435c932b3e6c584ba1d679754849";
+    sha256 = "0wb55a9pmgbilfffx0wkiikg9830qd66j635ypczqp4basslpq5b";
+  };
+
+  generic = { pname, version, sha256, description, buildInputs, ... }:
+  let
+    name' = "${stdenv.lib.replaceStrings [ "-" ] [ "_" ] "${pname}"}-${version}";
+  in perl.stdenv.mkDerivation {
+    name = "${pname}-${version}";
+
+    src = fetchurl {
+      url = "https://labs.consol.de/assets/downloads/nagios/${name'}.tar.gz";
+      inherit sha256;
+    };
+
+    buildInputs = [ perl ] ++ buildInputs;
+
+    nativeBuildInputs = [ autoreconfHook makeWrapper ];
+
+    prePatch = with stdenv.lib; ''
+      rm -rf GLPlugin
+      ln -s ${glplugin} GLPlugin
+      substituteInPlace plugins-scripts/Makefile.am \
+        --replace /bin/cat  ${getBin coreutils}/bin/cat \
+        --replace /bin/echo ${getBin coreutils}/bin/echo \
+        --replace /bin/grep ${getBin gnugrep}/bin/grep \
+        --replace /bin/sed  ${getBin gnused}/bin/sed
+    '';
+
+    postInstall = ''
+      test -d $out/libexec && ln -sr $out/libexec $out/bin
+    '';
+
+    postFixup = ''
+      for f in $out/bin/* ; do
+        wrapProgram $f --prefix PERL5LIB : $PERL5LIB
+      done
+    '';
+
+    meta = with stdenv.lib; {
+      homepage    = https://labs.consol.de/;
+      license     = licenses.gpl2;
+      maintainers = with maintainers; [ peterhoeg ];
+      inherit description;
+    };
+  };
+
+in {
+  check-mssql-health = generic {
+    pname       = "check_mssql_health";
+    version     = "2.6.4.14";
+    sha256      = "0w6gybrs7imx169l8740s0ax3adya867fw0abrampx59mnsj5pm1";
+    description = "Check plugin for Microsoft SQL Server.";
+    buildInputs = [ DBDsybase ];
+  };
+
+  check-nwc-health = generic {
+    pname       = "check_nwc_health";
+    version     = "7.0.1.3";
+    sha256      = "0rgd6zgd7kplx3z72n8zbzwkh8vnd83361sk9ibh6ng78sds1sl5";
+    description = "Check plugin for network equipment.";
+    buildInputs = [ NetSNMP ];
+  };
+
+  check-ups-health = generic {
+    pname       = "check_ups_health";
+    version     = "2.8.2.2";
+    sha256      = "1gc2wjsymay2vk5ywc1jj9cvrbhs0fs851x8l4nc75df2g75v521";
+    description = "Check plugin for UPSs.";
+    buildInputs = [ NetSNMP ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/plugins/uptime.nix b/nixpkgs/pkgs/servers/monitoring/plugins/uptime.nix
new file mode 100644
index 000000000000..9f03c9ea96f6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/plugins/uptime.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  name = "check-uptime-${version}";
+  version = "20161112";
+
+  src = fetchFromGitHub {
+    owner  = "madrisan";
+    repo   = "nagios-plugins-uptime";
+    rev    = "51822dacd1d404b3eabf3b4984c64b2475ed6f3b";
+    sha256 = "18q9ibzqn97dsyr9xs3w9mqk80nmmfw3kcjidrdsj542amlsycyk";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  enableParallelBuilding = true;
+
+  postInstall = "ln -sr $out/libexec $out/bin";
+
+  meta = with stdenv.lib; {
+    description = "Uptime check plugin for Sensu/Nagios/others";
+    homepage    = https://github.com/madrisan/nagios-plugins-uptime;
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/alertmanager.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/alertmanager.nix
new file mode 100644
index 000000000000..530c4305088b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/alertmanager.nix
@@ -0,0 +1,42 @@
+{ stdenv, go, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "alertmanager-${version}";
+  version = "0.15.3";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/prometheus/alertmanager";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "prometheus";
+    repo = "alertmanager";
+    sha256 = "037wwfadb9rp1592v8bkqcsy9ym4gbhkg3pz6a6fzirg65d29aia";
+  };
+
+  # Tests exist, but seem to clash with the firewall.
+  doCheck = false;
+
+  buildFlagsArray = let t = "${goPackagePath}/vendor/github.com/prometheus/common/version"; in ''
+    -ldflags=
+       -X ${t}.Version=${version}
+       -X ${t}.Revision=${src.rev}
+       -X ${t}.Branch=unknown
+       -X ${t}.BuildUser=nix@nixpkgs
+       -X ${t}.BuildDate=unknown
+       -X ${t}.GoVersion=${stdenv.lib.getVersion go}
+  '';
+
+  postInstall = ''
+    mkdir -p $bin/etc/bash_completion.d
+    $NIX_BUILD_TOP/go/bin/amtool --completion-script-bash > $bin/etc/bash_completion.d/amtool_completion.sh
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Alert dispatcher for the Prometheus monitoring system";
+    homepage = https://github.com/prometheus/alertmanager;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ benley fpletz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/bind-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/bind-exporter.nix
new file mode 100644
index 000000000000..db58c7e14e5f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/bind-exporter.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "bind_exporter-${version}";
+  version = "20161221-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "4e1717c7cd5f31c47d0c37274464cbaabdd462ba";
+
+  goPackagePath = "github.com/digitalocean/bind_exporter";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "digitalocean";
+    repo = "bind_exporter";
+    sha256 = "1nd6pc1z627w4x55vd42zfhlqxxjmfsa9lyn0g6qq19k4l85v1qm";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Prometheus exporter for bind9 server";
+    homepage = https://github.com/digitalocean/bind_exporter;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ rtreffer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/blackbox-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/blackbox-exporter.nix
new file mode 100644
index 000000000000..1f342adebaa0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/blackbox-exporter.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "blackbox_exporter-${version}";
+  version = "0.12.0";
+  rev = version;
+
+  goPackagePath = "github.com/prometheus/blackbox_exporter";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "prometheus";
+    repo = "blackbox_exporter";
+    sha256 = "0gd3vymk3qdfjnf0rx9kwc6v0jv7f8l30igvj2v7bljar2d6hzxf";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Blackbox probing of endpoints over HTTP, HTTPS, DNS, TCP and ICMP";
+    homepage = https://github.com/prometheus/blackbox_exporter;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ globin fpletz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/collectd-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/collectd-exporter.nix
new file mode 100644
index 000000000000..0d6fbac60e5d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/collectd-exporter.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "collectd-exporter-${version}";
+  version = "0.3.1";
+  rev = version;
+
+  goPackagePath = "github.com/prometheus/collectd_exporter";
+
+  src= fetchFromGitHub {
+    inherit rev;
+    owner = "prometheus";
+    repo = "collectd_exporter";
+    sha256 = "1p0kb7c8g0r0sp5a6xrx8vnwbw14hhwlqzk4n2xx2y8pvnbivajz";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Relay server for exporting metrics from collectd to Prometheus";
+    homepage = https://github.com/prometheus/collectd_exporter;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ benley fpletz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/consul-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/consul-exporter.nix
new file mode 100644
index 000000000000..47abcb33ee79
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/consul-exporter.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "consul_exporter-${version}";
+  version = "0.3.0";
+
+  goPackagePath = "github.com/prometheus/consul_exporter";
+
+  src = fetchFromGitHub {
+    owner = "prometheus";
+    repo = "consul_exporter";
+    rev = "v${version}";
+    sha256 = "1zffbxyfmqpbdqkx5rb5vjgd9j4p4zcrh6jvn1zhbdzrcs7khnd9";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Prometheus exporter for Consul metrics";
+    homepage = https://github.com/prometheus/consul_exporter;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ hectorj ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/default.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/default.nix
new file mode 100644
index 000000000000..03080376ec2a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, go, buildGoPackage, fetchFromGitHub }:
+
+let
+  goPackagePath = "github.com/prometheus/prometheus";
+
+  generic = { version, sha256, ... }@attrs:
+    let attrs' = builtins.removeAttrs attrs ["version" "sha256"]; in
+      buildGoPackage ({
+        name = "prometheus-${version}";
+
+        inherit goPackagePath;
+
+        src = fetchFromGitHub {
+          rev = "v${version}";
+          owner = "prometheus";
+          repo = "prometheus";
+          inherit sha256;
+        };
+
+        doCheck = true;
+
+        buildFlagsArray = let t = "${goPackagePath}/vendor/github.com/prometheus/common/version"; in ''
+          -ldflags=
+             -X ${t}.Version=${version}
+             -X ${t}.Revision=unknown
+             -X ${t}.Branch=unknown
+             -X ${t}.BuildUser=nix@nixpkgs
+             -X ${t}.BuildDate=unknown
+             -X ${t}.GoVersion=${stdenv.lib.getVersion go}
+        '';
+
+        preInstall = ''
+          mkdir -p "$bin/share/doc/prometheus" "$bin/etc/prometheus"
+          cp -a $src/documentation/* $bin/share/doc/prometheus
+          cp -a $src/console_libraries $src/consoles $bin/etc/prometheus
+        '';
+
+        meta = with stdenv.lib; {
+          description = "Service monitoring system and time series database";
+          homepage = https://prometheus.io;
+          license = licenses.asl20;
+          maintainers = with maintainers; [ benley fpletz ];
+          platforms = platforms.unix;
+        };
+    } // attrs');
+in rec {
+  prometheus_1 = generic {
+    version = "1.8.2";
+    sha256 = "088flpg3qgnj9afl9vbaa19v2s1d21yxy38nrlv5m7cxwy2pi5pv";
+  };
+
+  prometheus_2 = generic {
+    version = "2.6.0";
+    sha256 = "1d9zwzs280pw9zspqwp7xx3ji04lfg2v9l5qhrfy3y633ghcmpxz";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/dnsmasq-exporter-deps.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/dnsmasq-exporter-deps.nix
new file mode 100644
index 000000000000..1acf859e81a6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/dnsmasq-exporter-deps.nix
@@ -0,0 +1,93 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "3a771d992973f24aa725d07868b467d1ddfceafb";
+      sha256 = "1l2lns4f5jabp61201sh88zf3b0q793w4zdgp9nll7mmfcxxjif3";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "b4deda0973fb4c70b50d226b1af49f3da59f5265";
+      sha256 = "0ya4ha7m20bw048m1159ppqzlvda4x0vdprlbk5sdgmy74h3xcdq";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "c12348ce28de40eed0136aa2b644d0ee0650e56c";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
+    };
+  }
+  {
+    goPackagePath = "github.com/miekg/dns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/miekg/dns";
+      rev = "9c76f9827e170bfcd354c2cb02a6fd428faf81a6";
+      sha256 = "0yym4jr15cqwlppnqfsp92i7p1ir12ys695wffb3in7gnnm0d38n";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "82f5ff156b29e276022b1a958f7d385870fb9814";
+      sha256 = "111j329yrlgvh73dm80gawwxsh9dgjkw74254kyj5c2rfmra7znz";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c";
+      sha256 = "19y4ywsivhpxj7ikf2j0gm9k3cmyw37qcbfi78n526jxcc7kw998";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "d811d2e9bf898806ecfb6ef6296774b13ffc314c";
+      sha256 = "0r4067r4ysmljksqw3awcxx5qplqhykahc5igdzgkky7i4bvaik1";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "8b1c2da0d56deffdbb9e48d4414b4e674bd8083e";
+      sha256 = "0x128p15h35mgwqxkigfkk1lfrcz9g697ahl8v6xp9kwvcqvjrrf";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "640f4622ab692b87c2f3a94265e6f579fe38263d";
+      sha256 = "097m4qhcljhp180171j5fjhq4740iirfkkajfd7yrxqhp4s9hljx";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev = "1d60e4601c6fd243af51cc01ddf169918a5407ca";
+      sha256 = "046jlanz2lkxq1r57x9bl6s4cvfqaic6p2xybsj8mq1120jv4rs6";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/dnsmasq-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/dnsmasq-exporter.nix
new file mode 100644
index 000000000000..bcfc82adf478
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/dnsmasq-exporter.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "dnsmasq_exporter-unstable-2018-05-05";
+
+  goPackagePath = "github.com/google/dnsmasq_exporter";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "dnsmasq_exporter";
+    sha256 = "1kzq4h7z28xadx425nbgxadk62yiz6279d300fyiyi83hwq0ay8c";
+    rev = "e1f281b435bbefbb2d17fc57c051ede0ab973c59";
+  };
+
+  goDeps = ./dnsmasq-exporter-deps.nix;
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "A dnsmasq exporter for Prometheus";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ willibutz ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/dovecot-exporter-deps.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/dovecot-exporter-deps.nix
new file mode 100644
index 000000000000..d94aad821485
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/dovecot-exporter-deps.nix
@@ -0,0 +1,102 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/alecthomas/template";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/template";
+      rev = "a0175ee3bccc567396460bf5acd36800cb10c49c";
+      sha256 = "0qjgvvh26vk1cyfq9fadyhfgdj36f1iapbmr5xp6zqipldz8ffxj";
+    };
+  }
+  {
+    goPackagePath = "github.com/alecthomas/units";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/units";
+      rev = "2efee857e7cfd4f3d0138cc3cbb1b4966962b93a";
+      sha256 = "1j65b91qb9sbrml9cpabfrcf07wmgzzghrl7809hjjhrmbzri5bl";
+    };
+  }
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "3a771d992973f24aa725d07868b467d1ddfceafb";
+      sha256 = "1l2lns4f5jabp61201sh88zf3b0q793w4zdgp9nll7mmfcxxjif3";
+    };
+  }
+  {
+    goPackagePath = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev = "4aa4cc277ae58d2fab6cfe51dd17df5dceaf457d";
+      sha256 = "009z6rpivyakgsxs0zkm94c9i7l65hcw2ljvah94wq3y6v6j47gs";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "0f2620f554cf5c8e281a2eb655a035f5a0f6dc90";
+      sha256 = "0lxngq1a8cnsy6dlr6gi8pjv3fir2wiw76qh075pa9g02h7ywhv3";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "c12348ce28de40eed0136aa2b644d0ee0650e56c";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "b5bfa0eb2c8d46bd91dc58271e973c5f0bbebcfa";
+      sha256 = "1msxzkdgi0ing4ddmp0s4qrf267n6ylafw9mbz5yrr7spb1dgxgk";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "5c3871d89910bfb32f5fcab2aa4b9ec68e65a99f";
+      sha256 = "04psf81l9fjcwascsys428v03fx4fi894h7fhrj2vvcz723q57k0";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "c7de2306084e37d54b8be01f3541a8464345e9a5";
+      sha256 = "11dqfm2d0m4sjjgyrnayman96g59x2apmvvqby9qmww2qj2k83ig";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "05ee40e3a273f7245e8777337fc7b46e533a9a92";
+      sha256 = "0f6fnczxa42b9rys2h3l0m8fy3x5hrhaq707vq0lbx5fcylw8lis";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/alecthomas/kingpin.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/alecthomas/kingpin.v2";
+      rev = "947dcec5ba9c011838740e680966fd7087a71d0d";
+      sha256 = "0mndnv3hdngr3bxp7yxfd47cas4prv98sqw534mx7vp38gd88n5r";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/dovecot-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/dovecot-exporter.nix
new file mode 100644
index 000000000000..5a3fd23ec22e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/dovecot-exporter.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "dovecot_exporter-${version}";
+  version = "0.1.3";
+
+  goPackagePath = "github.com/kumina/dovecot_exporter";
+
+  src = fetchFromGitHub {
+    owner = "kumina";
+    repo = "dovecot_exporter";
+    rev = version;
+    sha256 = "1lnxnnm45fhcyv40arcvpiiibwdnxdwhkf8sbjpifx1wspvphcj9";
+  };
+
+  goDeps = ./dovecot-exporter-deps.nix;
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Prometheus metrics exporter for Dovecot";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ willibutz ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/fritzbox-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/fritzbox-exporter.nix
new file mode 100644
index 000000000000..1271b3d40e14
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/fritzbox-exporter.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "fritzbox-exporter-${version}";
+  version = "1.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/ndecker/fritzbox_exporter";
+
+  src= fetchFromGitHub {
+    inherit rev;
+    owner = "ndecker";
+    repo = "fritzbox_exporter";
+    sha256 = "1qk3dgxxz3cnz52jzz0yvfkrkk4s5kdhc26nbfgdpn0ifzqj0awr";
+  };
+
+  meta = with stdenv.lib; {
+    description = "FRITZ!Box UPnP statistics exporter for prometheus";
+    homepage = https://github.com/ndecker/fritzbox_exporter;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bachp ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/haproxy-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/haproxy-exporter.nix
new file mode 100644
index 000000000000..b2a0e3875891
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/haproxy-exporter.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "haproxy_exporter-${version}";
+  version = "0.8.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/prometheus/haproxy_exporter";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "prometheus";
+    repo = "haproxy_exporter";
+    sha256 = "0gx8pq67w71ch3g3c77xaz39msrd9graizc6d3shwabdjx35yc6q";
+  };
+
+  meta = with stdenv.lib; {
+    description = "HAProxy Exporter for the Prometheus monitoring system";
+    homepage = https://github.com/prometheus/haproxy_exporter;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ benley fpletz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/jmx-httpserver.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/jmx-httpserver.nix
new file mode 100644
index 000000000000..ca1dc83e96ad
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/jmx-httpserver.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, jre, makeWrapper }:
+
+let
+  version = "0.10";
+  jarName = "jmx_prometheus_httpserver-${version}-jar-with-dependencies.jar";
+  mavenUrl = "http://central.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_httpserver/${version}/${jarName}";
+in stdenv.mkDerivation {
+  inherit version jarName;
+
+  name = "jmx-prometheus-httpserver-${version}";
+
+  src = fetchurl {
+    url = mavenUrl;
+    sha256 = "1pvqphrirq48xhmx0aa6vkxz6qy1cx2q6jxsh7rin432iap7j62f";
+  };
+
+  buildInputs = [ jre makeWrapper ];
+
+  phases = "installPhase";
+
+  installPhase = ''
+    mkdir -p $out/libexec
+    mkdir -p $out/bin
+    cp $src $out/libexec/$jarName
+    makeWrapper "${jre}/bin/java" $out/bin/jmx_prometheus_httpserver --add-flags "-jar $out/libexec/$jarName"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/prometheus/jmx_exporter;
+    description = "A process for exposing JMX Beans via HTTP for Prometheus consumption";
+    license = licenses.asl20;
+    maintainers = [ maintainers.offline ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/json-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/json-exporter.nix
new file mode 100644
index 000000000000..aeb7b7445a5d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/json-exporter.nix
@@ -0,0 +1,30 @@
+# This file was generated by go2nix.
+{ buildGoPackage, fetchFromGitHub, fetchpatch, lib }:
+
+buildGoPackage rec {
+  name = "prometheus-json-exporter-${version}";
+  version = "unstable-2017-10-06";
+
+  goPackagePath = "github.com/kawamuray/prometheus-json-exporter";
+
+  src = fetchFromGitHub {
+    owner = "kawamuray";
+    repo = "prometheus-json-exporter";
+    rev = "51e3dc02a30ab818bb73e5c98c3853231c2dbb5f";
+    sha256 = "1v1p4zcqnb3d3rm55r695ydn61h6gz95f55cpa22hzw18dasahdh";
+  };
+
+  goDeps = ./json-exporter_deps.nix;
+
+  patches = [(fetchpatch { # adds bool support
+    url = "https://patch-diff.githubusercontent.com/raw/kawamuray/prometheus-json-exporter/pull/17.patch";
+    sha256 = "0mc5axhd2bykci41dgswl4r1552d70jsmb17lbih7czhsy6rgmrm";
+  })];
+
+  meta = with lib; {
+    description = "A prometheus exporter which scrapes remote JSON by JSONPath";
+    homepage = https://github.com/kawamuray/prometheus-json-exporter;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ willibutz ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/json-exporter_deps.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/json-exporter_deps.nix
new file mode 100644
index 000000000000..9416125bc0c2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/json-exporter_deps.nix
@@ -0,0 +1,111 @@
+# This file was generated by go2nix.
+[
+  {
+    goPackagePath = "github.com/Sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Sirupsen/logrus";
+      rev = "a437dfd2463eaedbec3dfe443e477d3b0a810b3f";
+      sha256 = "1904s2bbc7p88anzjp6fyj3jrbm5p6wbb8j4490674dq10kkcfbj";
+    };
+  }
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9";
+      sha256 = "1hrybsql68xw57brzj805xx2mghydpdiysv3gbhr7f5wlxj2514y";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "8ee79997227bf9b34611aee7946ae64735e6fd93";
+      sha256 = "0qm1lpdhf97k2hxgivq2cpjgawhlmmz39y230kgxijhm96xijxb8";
+    };
+  }
+  {
+    goPackagePath = "github.com/kawamuray/jsonpath";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kawamuray/jsonpath";
+      rev = "5c448ebf973557834ef870e788b0b2d95ac68d12";
+      sha256 = "1i1id1i85rf09rldp03h0ibyi6zg0fz9p9l5qj7i8dfs6h6y8f0a";
+    };
+  }
+  {
+    goPackagePath = "github.com/kawamuray/prometheus-exporter-harness";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kawamuray/prometheus-exporter-harness";
+      rev = "97eeea7b8b0619ea2a065d75c0f0f5909327afa6";
+      sha256 = "12al8irf8jb6p2xmm4wbh0wjqsyrdywynr4w122wxxnsx2n56xyv";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "c12348ce28de40eed0136aa2b644d0ee0650e56c";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "575f371f7862609249a1be4c9145f429fe065e32";
+      sha256 = "0hyvszjv5m6i40k2fn21c3bjr8jhlfdqavk1r6g2v5dybyj47vps";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "fa8ad6fec33561be4280a8f0514318c79d7f6cb6";
+      sha256 = "11a7v1fjzhhwsl128znjcf5v7v6129xjgkdpym2lial4lac1dhm9";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "0d5de9d6d8629cb8bee6d4674da4127cd8b615a3";
+      sha256 = "1zlvvgw67p66fz9nswkydq15j4a5z5kkiskl0jxps8i27ya1baq0";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "abf152e5f3e97f2fafac028d2cc06c1feb87ffa5";
+      sha256 = "0cp8lznv1b4zhi3wnbjkfxwzhkqd3wbmiy6mwgjanip8l9l3ykws";
+    };
+  }
+  {
+    goPackagePath = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev = "0bdeddeeb0f650497d603c4ad7b20cfe685682f6";
+      sha256 = "1ny63c7bfwfrsp7vfkvb4i0xhq4v7yxqnwxa52y4xlfxs4r6v6fg";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "a5b47d31c556af34a302ce5d659e6fea44d90de0";
+      sha256 = "0v6l48fshdjrqzyq1kwn22gy7vy434xdr1i0lm3prsf6jbln9fam";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/mesos-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/mesos-exporter.nix
new file mode 100644
index 000000000000..ade9bb87d993
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/mesos-exporter.nix
@@ -0,0 +1,26 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "mesos_exporter-${version}";
+  version = "0.1.0";
+  rev = version;
+
+  goPackagePath = "github.com/prometheus/mesos_exporter";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "prometheus";
+    repo = "mesos_exporter";
+    sha256 = "059az73j717gd960g4jigrxnvqrjh9jw1c324xpwaafa0bf10llm";
+  };
+
+  goDeps = ./mesos-exporter_deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Export Mesos metrics to Prometheus";
+    homepage = https://github.com/prometheus/mesos_exporter;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ benley ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/mesos-exporter_deps.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/mesos-exporter_deps.nix
new file mode 100644
index 000000000000..e8fdcc95da2f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/mesos-exporter_deps.nix
@@ -0,0 +1,83 @@
+[
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "59b73b37c1e45995477aae817e4a653c89a858db";
+      sha256 = "1dx22jvhvj34ivpr7gw01fncg9yyx35mbpal4mpgnqka7ajmgjsa";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "fa8ad6fec33561be4280a8f0514318c79d7f6cb6";
+      sha256 = "11a7v1fjzhhwsl128znjcf5v7v6129xjgkdpym2lial4lac1dhm9";
+    };
+  }
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "b965b613227fddccbfffe13eae360ed3fa822f8d";
+      sha256 = "1p8zsj4r0g61q922khfxpwxhdma2dx4xad1m5qx43mfn28kxngqk";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "fc2b8d3a73c4867e51861bbdd5ae3c1f0869dd6a";
+      sha256 = "0ajg41h6402big484drvm72wvid1af2sffw0qkzbmpy04lq68ahj";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "6dbab8106ed3ed77359ac85d9cf08e30290df864";
+      sha256 = "1i3g5h2ncdb8b67742kfpid7d0a1jas1pyicglbglwngfmzhpkna";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "c91d8eefde16bd047416409eb56353ea84a186e4";
+      sha256 = "0pj3gzw9b58l72w0rkpn03ayssglmqfmyxghhfad6mh0b49dvj3r";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/glog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/glog";
+      rev = "fca8c8854093a154ff1eb580aae10276ad6b1b5f";
+      sha256 = "1nr2q0vas0a2f395f4shjxqpas18mjsf8yhgndsav7svngpbbpg8";
+    };
+  }
+  {
+    goPackagePath = "bitbucket.org/ww/goautoneg";
+    fetch = {
+      type = "hg";
+      url = "bitbucket.org/ww/goautoneg";
+      rev = "75cd24fc2f2c2a2088577d12123ddee5f54e0675";
+      sha256 = "19khhn5xhqv1yp7d6k987gh5w5rhrjnp4p0c6fyrd8z6lzz5h9qi";
+    };
+  }
+  {
+    goPackagePath = "github.com/antonlindstrom/mesos_stats";
+    fetch = {
+      type = "git";
+      url = "https://github.com/antonlindstrom/mesos_stats";
+      rev = "0c6ea494c19bedc67ebb85ce3d187ec21050e920";
+      sha256 = "18ggyjf4nyn77gkn16wg9krp4dsphgzdgcr3mdflv6mvbr482ar4";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/minio-exporter/default.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/minio-exporter/default.nix
new file mode 100644
index 000000000000..8b6c54d41f91
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/minio-exporter/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, fetchpatch }:
+
+buildGoPackage rec {
+  name = "minio-exporter-${version}";
+  version = "0.2.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/joe-pll/minio-exporter";
+
+  src= fetchFromGitHub {
+    inherit rev;
+    owner = "joe-pll";
+    repo = "minio-exporter";
+    sha256 = "1my3ii5s479appiapw8gjzkq1pk62fl7d7if8ljvdj6qw4man6aa";
+  };
+
+  # Required to make 0.2.0 build against latest dependencies
+  # TODO: Remove on update to 0.3.0
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/joe-pll/minio-exporter/commit/50ab89d42322dc3e2696326a9ae4d3f951f646de.patch";
+      sha256 = "0aiixhvb4x8c8abrlf1i4hmca9i6xd6b638a5vfkvawx0q7gxl97";
+    })
+  ];
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "A Prometheus exporter for Minio cloud storage server";
+    homepage = https://github.com/joe-pll/minio-exporter;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bachp ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/minio-exporter/deps.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/minio-exporter/deps.nix
new file mode 100644
index 000000000000..1993975e2bfa
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/minio-exporter/deps.nix
@@ -0,0 +1,174 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/alecthomas/template";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/template";
+      rev = "a0175ee3bccc567396460bf5acd36800cb10c49c";
+      sha256 = "0qjgvvh26vk1cyfq9fadyhfgdj36f1iapbmr5xp6zqipldz8ffxj";
+    };
+  }
+  {
+    goPackagePath = "github.com/alecthomas/units";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/units";
+      rev = "2efee857e7cfd4f3d0138cc3cbb1b4966962b93a";
+      sha256 = "1j65b91qb9sbrml9cpabfrcf07wmgzzghrl7809hjjhrmbzri5bl";
+    };
+  }
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9";
+      sha256 = "1hrybsql68xw57brzj805xx2mghydpdiysv3gbhr7f5wlxj2514y";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-ini/ini";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-ini/ini";
+      rev = "32e4c1e6bc4e7d0d8451aa6b75200d19e37a536a";
+      sha256 = "0mhgxw5q6b0pryhikx3k4wby7g32rwjjljzihi47lwn34kw5y1qn";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "1e59b77b52bf8e4b449a57e6f79f21226d571845";
+      sha256 = "19bkh81wnp6njg3931wky6hsnnl2d1ig20vfjxpv450sd3k6yys8";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "c12348ce28de40eed0136aa2b644d0ee0650e56c";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
+    };
+  }
+  {
+    goPackagePath = "github.com/minio/minio-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/minio/minio-go";
+      rev = "d218e4cb1bfc13dcef0eb5c3e74507a35be0dd3a";
+      sha256 = "0d3am33xaavdffz791qi2s0vnkpjw9vlr5p5g4lw7h5vhmy1sjb4";
+    };
+  }
+  {
+    goPackagePath = "github.com/minio/minio";
+    fetch = {
+      type = "git";
+      url = "https://github.com/minio/minio";
+      rev = "bb73c84b104bc447eb603d63481cdc54b8ab3c83";
+      sha256 = "1gjkgdf59yxfr2a7pl3f7z3iid86zsd85xqxcv1s0d46v7j07iga";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/go-homedir";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/go-homedir";
+      rev = "b8bc1bf767474819792c23f32d8286a45736f1c6";
+      sha256 = "13ry4lylalkh4g2vny9cxwvryslzyzwp9r92z0b10idhdq3wad1q";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "06bc6e01f4baf4ee783ffcd23abfcb0b0f9dfada";
+      sha256 = "0dvv21214sn702kc25y5l0gd9d11358976d3w31fgwx7456mjx26";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c";
+      sha256 = "19y4ywsivhpxj7ikf2j0gm9k3cmyw37qcbfi78n526jxcc7kw998";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "89604d197083d4781071d3c65855d24ecfb0a563";
+      sha256 = "169rdlaf2mk9z4fydz7ajmngyhmf3q1lk96yhvx46bn986x5xkyn";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "b15cd069a83443be3154b719d0cc9fe8117f09fb";
+      sha256 = "1cr45wg2m40bj2za8f32mq09rjlcnk5kfam0h0hr8wcb015k4wxj";
+    };
+  }
+  {
+    goPackagePath = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev = "d682213848ed68c0a260ca37d6dd5ace8423f5ba";
+      sha256 = "0nzyqwzx3k7nqfq8q7yv32gaf3ymq3bpwhkmw1hj2zakq5a93d8x";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "a6600008915114d9c087fad9f03d75087b1a74df";
+      sha256 = "099vyf8133bjwaqcv377d9akam3j5xwamwqrihmjhvzbvqs649yc";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "5ccada7d0a7ba9aeb5d3aca8d3501b4c2a509fec";
+      sha256 = "0bdwdxy2gz48icnh023r5fga3z4x6c8gry8jlfjqr5w12y3s281g";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "2c42eef0765b9837fbdab12011af7830f55f88f0";
+      sha256 = "0gj9nwryyzf9rn33gl3zm6rxvg1zhrhwi36akipqj37x4g86h3gz";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "e19ae1496984b1c655b8044a65c0300a3c878dd3";
+      sha256 = "1cvnnx8nwx5c7gr6ajs7sldhbqh52n7h6fsa3i21l2lhx6xrsh4w";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/alecthomas/kingpin.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/alecthomas/kingpin.v2";
+      rev = "947dcec5ba9c011838740e680966fd7087a71d0d";
+      sha256 = "0mndnv3hdngr3bxp7yxfd47cas4prv98sqw534mx7vp38gd88n5r";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/mysqld-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/mysqld-exporter.nix
new file mode 100644
index 000000000000..9180a5113492
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/mysqld-exporter.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "mysqld_exporter-${version}";
+  version = "0.10.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/prometheus/mysqld_exporter";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "prometheus";
+    repo = "mysqld_exporter";
+    sha256 = "1133bgyp5vljz2qvfh0qzq8h8bkc8vci3jnmbr633bh3jpaqm2py";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Prometheus exporter for MySQL server metrics";
+    homepage = https://github.com/prometheus/mysqld_exporter;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ benley ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/nginx-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/nginx-exporter.nix
new file mode 100644
index 000000000000..5c5042b6c7cd
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/nginx-exporter.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "nginx_exporter-${version}";
+  version = "0.1.0";
+
+  goPackagePath = "github.com/discordianfish/nginx_exporter";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "discordianfish";
+    repo = "nginx_exporter";
+    sha256 = "1xwxnvkzslaj44r44ag24a9qfzjdxwz67hhpkdq42193zqpnlim7";
+  };
+
+  goDeps = ./nginx-exporter_deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Metrics relay from nginx stats to Prometheus";
+    homepage = https://github.com/discordianfish/nginx_exporter;
+    license = licenses.mit;
+    maintainers = with maintainers; [ benley fpletz willibutz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/nginx-exporter_deps.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/nginx-exporter_deps.nix
new file mode 100644
index 000000000000..2fa60de5b493
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/nginx-exporter_deps.nix
@@ -0,0 +1,119 @@
+[
+  {
+    goPackagePath = "github.com/alecthomas/template";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/template";
+      rev = "a0175ee3bccc567396460bf5acd36800cb10c49c";
+      sha256 = "0qjgvvh26vk1cyfq9fadyhfgdj36f1iapbmr5xp6zqipldz8ffxj";
+    };
+  }
+  {
+    goPackagePath = "github.com/alecthomas/units";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/units";
+      rev = "2efee857e7cfd4f3d0138cc3cbb1b4966962b93a";
+      sha256 = "1j65b91qb9sbrml9cpabfrcf07wmgzzghrl7809hjjhrmbzri5bl";
+    };
+  }
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "3a771d992973f24aa725d07868b467d1ddfceafb";
+      sha256 = "1l2lns4f5jabp61201sh88zf3b0q793w4zdgp9nll7mmfcxxjif3";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "b4deda0973fb4c70b50d226b1af49f3da59f5265";
+      sha256 = "0ya4ha7m20bw048m1159ppqzlvda4x0vdprlbk5sdgmy74h3xcdq";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "c12348ce28de40eed0136aa2b644d0ee0650e56c";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "82f5ff156b29e276022b1a958f7d385870fb9814";
+      sha256 = "111j329yrlgvh73dm80gawwxsh9dgjkw74254kyj5c2rfmra7znz";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c";
+      sha256 = "19y4ywsivhpxj7ikf2j0gm9k3cmyw37qcbfi78n526jxcc7kw998";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "d811d2e9bf898806ecfb6ef6296774b13ffc314c";
+      sha256 = "0r4067r4ysmljksqw3awcxx5qplqhykahc5igdzgkky7i4bvaik1";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "8b1c2da0d56deffdbb9e48d4414b4e674bd8083e";
+      sha256 = "0x128p15h35mgwqxkigfkk1lfrcz9g697ahl8v6xp9kwvcqvjrrf";
+    };
+  }
+  {
+    goPackagePath = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev = "778f2e774c725116edbc3d039dc0dfc1cc62aae8";
+      sha256 = "0drlrl192k4qkpcf1b6nw2qlixply31x2jhcckjzl3hn4mzwi6nf";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "ae8bce0030810cf999bb2b9868ae5c7c58e6343b";
+      sha256 = "0aihwcf0g8mq1sb96pwhpgvwxlf862pdhsfr7mdppz7bii4i9shw";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "78d5f264b493f125018180c204871ecf58a2dce1";
+      sha256 = "0x23n60wskys39dwybz5za77ldky9i518kp58ragpd5528kcc68s";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/alecthomas/kingpin.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/alecthomas/kingpin.v2";
+      rev = "947dcec5ba9c011838740e680966fd7087a71d0d";
+      sha256 = "0mndnv3hdngr3bxp7yxfd47cas4prv98sqw534mx7vp38gd88n5r";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/node-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/node-exporter.nix
new file mode 100644
index 000000000000..9714a6048e88
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/node-exporter.nix
@@ -0,0 +1,29 @@
+{ stdenv, buildGo19Package, fetchFromGitHub }:
+
+# Go 1.10 causes segfaults:
+# https://github.com/prometheus/node_exporter/issues/870
+buildGo19Package rec {
+  name = "node_exporter-${version}";
+  version = "0.17.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/prometheus/node_exporter";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "prometheus";
+    repo = "node_exporter";
+    sha256 = "08g4dg6zcr95j88apsxp828jfyx4vq271w1mgkf77c46c16d2nh0";
+  };
+
+  # FIXME: tests fail due to read-only nix store
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Prometheus exporter for machine metrics";
+    homepage = https://github.com/prometheus/node_exporter;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ benley fpletz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/openvpn-exporter-deps.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/openvpn-exporter-deps.nix
new file mode 100644
index 000000000000..93aae1b867e9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/openvpn-exporter-deps.nix
@@ -0,0 +1,66 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9";
+      sha256 = "1hrybsql68xw57brzj805xx2mghydpdiysv3gbhr7f5wlxj2514y";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "748d386b5c1ea99658fd69fe9f03991ce86a90c1";
+      sha256 = "0xm0is6sj6r634vrfx85ir0gd9h1xxk25fgc5z07zrjp19f5wqp5";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "c12348ce28de40eed0136aa2b644d0ee0650e56c";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "94ff84a9a6ebb5e6eb9172897c221a64df3443bc";
+      sha256 = "188xwc13ml51i29fhp8bz4a7ncmk0lvdw3nnwr56k2l36pp1swil";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "6f3806018612930941127f2a7c6c453ba2c527d2";
+      sha256 = "1413ibprinxhni51p0755dp57r9wvbw7xgj9nmdaxmhzlqhc86j4";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "3e6a7635bac6573d43f49f97b47eb9bda195dba8";
+      sha256 = "1q4nwm9lf4jd90z08s6gz8j1zzrk2jn9vpw49xdb8mwxmhv13xgm";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "e645f4e5aaa8506fc71d6edbc5c4ff02c04c46f2";
+      sha256 = "18hwygbawbqilz7h8fl25xpbciwalkslb4igqn4cr9d8sqp7d3np";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/openvpn-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/openvpn-exporter.nix
new file mode 100644
index 000000000000..eac962f75606
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/openvpn-exporter.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "openvpn_exporter-unstable-${version}";
+  version = "2017-05-15";
+  rev = "a2a179a222144fa9a10030367045f075375a2803";
+
+  goPackagePath = "github.com/kumina/openvpn_exporter";
+
+  src = fetchFromGitHub {
+    owner = "kumina";
+    repo = "openvpn_exporter";
+    inherit rev;
+    sha256 = "1cjx7ascf532a20wwzrsx3qqs6dr04jyf700s3jvlvhhhx43l8m4";
+  };
+
+  goDeps = ./openvpn-exporter-deps.nix;
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Prometheus exporter for OpenVPN";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/postfix-exporter-deps.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/postfix-exporter-deps.nix
new file mode 100644
index 000000000000..07bedaba9f36
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/postfix-exporter-deps.nix
@@ -0,0 +1,66 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "3a771d992973f24aa725d07868b467d1ddfceafb";
+      sha256 = "1l2lns4f5jabp61201sh88zf3b0q793w4zdgp9nll7mmfcxxjif3";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "b4deda0973fb4c70b50d226b1af49f3da59f5265";
+      sha256 = "0ya4ha7m20bw048m1159ppqzlvda4x0vdprlbk5sdgmy74h3xcdq";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "c12348ce28de40eed0136aa2b644d0ee0650e56c";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "82f5ff156b29e276022b1a958f7d385870fb9814";
+      sha256 = "111j329yrlgvh73dm80gawwxsh9dgjkw74254kyj5c2rfmra7znz";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c";
+      sha256 = "19y4ywsivhpxj7ikf2j0gm9k3cmyw37qcbfi78n526jxcc7kw998";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "d811d2e9bf898806ecfb6ef6296774b13ffc314c";
+      sha256 = "0r4067r4ysmljksqw3awcxx5qplqhykahc5igdzgkky7i4bvaik1";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "8b1c2da0d56deffdbb9e48d4414b4e674bd8083e";
+      sha256 = "0x128p15h35mgwqxkigfkk1lfrcz9g697ahl8v6xp9kwvcqvjrrf";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/postfix-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/postfix-exporter.nix
new file mode 100644
index 000000000000..97df26aea4e5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/postfix-exporter.nix
@@ -0,0 +1,56 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, systemd, makeWrapper
+, withSystemdSupport ? true }:
+
+with stdenv.lib;
+
+buildGoPackage rec {
+  name = "postfix_exporter-${version}";
+  version = "0.1.2";
+
+  goPackagePath = "github.com/kumina/postfix_exporter";
+
+  src = fetchFromGitHub {
+    owner = "kumina";
+    repo = "postfix_exporter";
+    rev = version;
+    sha256 = "1b9ib3scxni6hlw55wv6f0z1xfn27l0p29as24f71rs70pyzy4hm";
+  };
+
+  nativeBuildInputs = optional withSystemdSupport makeWrapper;
+  buildInputs = optional withSystemdSupport systemd;
+  buildFlags = optional (!withSystemdSupport) "-tags nosystemd";
+
+  goDeps = ./postfix-exporter-deps.nix;
+  extraSrcs = optionals withSystemdSupport [
+    {
+      goPackagePath = "github.com/coreos/go-systemd";
+      src = fetchFromGitHub {
+        owner = "coreos";
+        repo = "go-systemd";
+        rev = "d1b7d058aa2adfc795ad17ff4aaa2bc64ec11c78";
+        sha256 = "1nz3v1b90hnmj2vjjwq96pr6psxlndqjyd30v9sgiwygzb7db9mv";
+      };
+    }
+    {
+      goPackagePath = "github.com/coreos/pkg";
+      src = fetchFromGitHub {
+        owner = "coreos";
+        repo = "pkg";
+        rev = "97fdf19511ea361ae1c100dd393cc47f8dcfa1e1";
+        sha256 = "1srn87wih25l09f75483hnxsr8fc6rq3bk7w1x8125ym39p6mg21";
+      };
+    }
+  ];
+
+  postInstall = optionalString withSystemdSupport ''
+    wrapProgram $bin/bin/postfix_exporter \
+      --prefix LD_LIBRARY_PATH : "${systemd.lib}/lib"
+  '';
+
+  meta = {
+    inherit (src.meta) homepage;
+    description = "A Prometheus exporter for Postfix";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ willibutz ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/prom2json.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/prom2json.nix
new file mode 100644
index 000000000000..5e4ebb581400
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/prom2json.nix
@@ -0,0 +1,26 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "prom2json-${version}";
+  version = "0.1.0";
+  rev = "${version}";
+
+  goPackagePath = "github.com/prometheus/prom2json";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "prometheus";
+    repo = "prom2json";
+    sha256 = "0wwh3mz7z81fwh8n78sshvj46akcgjhxapjgfic5afc4nv926zdl";
+  };
+
+  goDeps = ./prom2json_deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Tool to scrape a Prometheus client and dump the result as JSON";
+    homepage = https://github.com/prometheus/prom2json;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ benley ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/prom2json_deps.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/prom2json_deps.nix
new file mode 100644
index 000000000000..20cabe3d3857
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/prom2json_deps.nix
@@ -0,0 +1,38 @@
+[
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "59b73b37c1e45995477aae817e4a653c89a858db";
+      sha256 = "1dx22jvhvj34ivpr7gw01fncg9yyx35mbpal4mpgnqka7ajmgjsa";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "fa8ad6fec33561be4280a8f0514318c79d7f6cb6";
+      sha256 = "11a7v1fjzhhwsl128znjcf5v7v6129xjgkdpym2lial4lac1dhm9";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "fc2b8d3a73c4867e51861bbdd5ae3c1f0869dd6a";
+      sha256 = "0ajg41h6402big484drvm72wvid1af2sffw0qkzbmpy04lq68ahj";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "6dbab8106ed3ed77359ac85d9cf08e30290df864";
+      sha256 = "1i3g5h2ncdb8b67742kfpid7d0a1jas1pyicglbglwngfmzhpkna";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/pushgateway.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/pushgateway.nix
new file mode 100644
index 000000000000..6509f55d46ed
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/pushgateway.nix
@@ -0,0 +1,43 @@
+{ stdenv, go, buildGoPackage, go-bindata, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "pushgateway-${version}";
+  version = "0.4.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/prometheus/pushgateway";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "prometheus";
+    repo = "pushgateway";
+    sha256 = "19hsv42addcx4dsjdbh64y7ggjvaaay9gag0342gz7gyl9sr719f";
+  };
+
+  buildInputs = [ go-bindata ];
+
+  preBuild = ''
+  (
+    cd "go/src/$goPackagePath"
+    go-bindata ./resources/
+  )
+  '';
+
+  buildFlagsArray = ''
+    -ldflags=
+        -X main.buildVersion=${version}
+        -X main.buildRev=${rev}
+        -X main.buildBranch=${rev}
+        -X main.buildUser=nix@nixpkgs
+        -X main.buildDate=19700101-00:00:00
+        -X main.goVersion=${stdenv.lib.getVersion go}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Allows ephemeral and batch jobs to expose metrics to Prometheus";
+    homepage = https://github.com/prometheus/pushgateway;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ benley fpletz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/rabbitmq-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/rabbitmq-exporter.nix
new file mode 100644
index 000000000000..34120ad3fdae
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/rabbitmq-exporter.nix
@@ -0,0 +1,26 @@
+# This file was generated by https://github.com/kamilchm/go2nix v2.0-dev
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "rabbitmq_exporter-${version}";
+  version = "0.25.2";
+
+  goPackagePath = "github.com/kbudde/rabbitmq_exporter";
+
+  src = fetchFromGitHub {
+    owner = "kbudde";
+    repo = "rabbitmq_exporter";
+    rev = "8238c5d9ad509dab94e631cdecf3d75155fbdee4";
+    sha256 = "1zb21jms2wlmiw5vhk1wyhv0xrv5a9y08y9q6x92hv727kjqjr6w";
+  };
+
+  goDeps = ./rabbitmq-exporter_deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Prometheus exporter for RabbitMQ";
+    homepage = https://github.com/kbudde/rabbitmq_exporter;
+    license = licenses.mit;
+    maintainers = with maintainers; [ ocharles ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/rabbitmq-exporter_deps.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/rabbitmq-exporter_deps.nix
new file mode 100644
index 000000000000..7a15a6a7b68c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/rabbitmq-exporter_deps.nix
@@ -0,0 +1,165 @@
+# This file was generated by https://github.com/kamilchm/go2nix v2.0-dev
+[
+  {
+    goPackagePath = "github.com/Sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Sirupsen/logrus";
+      rev = "95cd2b9c79aa5e72ab0bc69b7ccc2be15bf850f6";
+      sha256 = "1rkkhl68iw523bwxmp2prdrp8pk62xfp52wifzvbmqf8v1svwsqv";
+    };
+  }
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9";
+      sha256 = "1hrybsql68xw57brzj805xx2mghydpdiysv3gbhr7f5wlxj2514y";
+    };
+  }
+  {
+    goPackagePath = "github.com/cenk/backoff";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cenk/backoff";
+      rev = "61153c768f31ee5f130071d08fc82b85208528de";
+      sha256 = "08x77mgb9zsj047n74rx6c16jjx985lmy4s6fl58mdgxgxjv54y5";
+    };
+  }
+  {
+    goPackagePath = "github.com/fsouza/go-dockerclient";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsouza/go-dockerclient";
+      rev = "1d4f4ae73768d3ca16a6fb964694f58dc5eba601";
+      sha256 = "1s3m8jq8z1cm5rkn7dmjacf38n6ihkkzbdfang2aa2cgs5wl28y0";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "1e59b77b52bf8e4b449a57e6f79f21226d571845";
+      sha256 = "19bkh81wnp6njg3931wky6hsnnl2d1ig20vfjxpv450sd3k6yys8";
+    };
+  }
+  {
+    goPackagePath = "github.com/kbudde/gobert";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kbudde/gobert";
+      rev = "a6daecb9ddeb548b7cfb3f5ac9deef9ded522730";
+      sha256 = "06g036w4dny8wdjwvprjjcdh0vx851qphgrvilrn5lghv3jdr29z";
+    };
+  }
+  {
+    goPackagePath = "github.com/kylelemons/godebug";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kylelemons/godebug";
+      rev = "d65d576e9348f5982d7f6d83682b694e731a45c6";
+      sha256 = "0bc8j9kwkp0hrsz0sm7hav7cm5jp9d6ql8r2b3mz78xb1g65xhbc";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "3247c84500bff8d9fb6d579d800f20b3e091582c";
+      sha256 = "12hcych25wf725zxdkpnyx4wa0gyxl8v4m8xmhdmmaki9bbmqd0d";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev = "645ef00459ed84a119197bfb8d8205042c6df63d";
+      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "c5b7fccd204277076155f10851dad72b76a49317";
+      sha256 = "1xqny3147g12n4j03kxm8s9mvdbs3ln6i56c655mybrn9jjy48kd";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c";
+      sha256 = "19y4ywsivhpxj7ikf2j0gm9k3cmyw37qcbfi78n526jxcc7kw998";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "2e54d0b93cba2fd133edc32211dcc32c06ef72ca";
+      sha256 = "14kn5w7imcxxlfdqxl21fsnlf1ms7200g3ldy29hwamldv8qlm7j";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "a6e9df898b1336106c743392c48ee0b71f5c4efa";
+      sha256 = "0zyprdp9bnpywcb6b9dzwyiji60mgf0s9wnw98zndfg3xrgnkasz";
+    };
+  }
+  {
+    goPackagePath = "github.com/streadway/amqp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/streadway/amqp";
+      rev = "ff791c2d22d3f1588b4e2cc71a9fba5e1da90654";
+      sha256 = "1drridn4k1n7qy82msvw9r18w4pmrah1nip36wixz098nzalz55x";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "94eea52f7b742c7cbe0b03b22f0c4c8631ece122";
+      sha256 = "095zyvjb0m2pz382500miqadhk7w3nis8z3j941z8cq4rdafijvi";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "a8b9294777976932365dabb6640cf1468d95c70f";
+      sha256 = "112v83jfwd1brwaanjijvb7da4dx1iqk8b4bf9ahx0hvir56c2g8";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "8b4580aae2a0dd0c231a45d3ccb8434ff533b840";
+      sha256 = "1w66xqnpkskvj22a3f841qg4rgf0lzcrxp8678s6n07yw8qdh92p";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/ory-am/dockertest.v3";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/ory-am/dockertest.v3";
+      rev = "a7951f7a8442f0e70d36e499ed4d744f00af2963";
+      sha256 = "13qv0vl79m2wirhbjs0k2a3cjl6ib7sw6rg98v95xxpn8r39ijzw";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/snmp-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/snmp-exporter.nix
new file mode 100644
index 000000000000..be8fbd3d85cb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/snmp-exporter.nix
@@ -0,0 +1,27 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, net_snmp }:
+
+buildGoPackage rec {
+  name = "snmp_exporter-${version}";
+  version = "0.13.0";
+
+  goPackagePath = "github.com/prometheus/snmp_exporter";
+
+  src = fetchFromGitHub {
+    owner = "prometheus";
+    repo = "snmp_exporter";
+    rev = "v${version}";
+    sha256 = "071v9qqhp2hcbgml94dm1l212qi18by88r9755npq9ycrsmawkll";
+  };
+
+  buildInputs = [ net_snmp ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "SNMP Exporter for Prometheus";
+    homepage = https://github.com/prometheus/snmp_exporter;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ oida willibutz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/statsd-bridge.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/statsd-bridge.nix
new file mode 100644
index 000000000000..e5480e020372
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/statsd-bridge.nix
@@ -0,0 +1,26 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "statsd_exporter-${version}";
+  version = "0.4.0";
+  rev = version;
+
+  goPackagePath = "github.com/prometheus/statsd_bridge";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "prometheus";
+    repo = "statsd_exporter";
+    sha256 = "1w11n7g663g7d7mbf6jfzcqmcm9rhaxy52bg0rqnad9v0rs5qxr6";
+  };
+
+  goDeps = ./statsd-bridge_deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Receives StatsD-style metrics and exports them to Prometheus";
+    homepage = https://github.com/prometheus/statsd_bridge;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ benley ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/statsd-bridge_deps.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/statsd-bridge_deps.nix
new file mode 100644
index 000000000000..fd11ab5a7eab
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/statsd-bridge_deps.nix
@@ -0,0 +1,74 @@
+[
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "59b73b37c1e45995477aae817e4a653c89a858db";
+      sha256 = "1dx22jvhvj34ivpr7gw01fncg9yyx35mbpal4mpgnqka7ajmgjsa";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "fa8ad6fec33561be4280a8f0514318c79d7f6cb6";
+      sha256 = "11a7v1fjzhhwsl128znjcf5v7v6129xjgkdpym2lial4lac1dhm9";
+    };
+  }
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "b965b613227fddccbfffe13eae360ed3fa822f8d";
+      sha256 = "1p8zsj4r0g61q922khfxpwxhdma2dx4xad1m5qx43mfn28kxngqk";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "fc2b8d3a73c4867e51861bbdd5ae3c1f0869dd6a";
+      sha256 = "0ajg41h6402big484drvm72wvid1af2sffw0qkzbmpy04lq68ahj";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "6dbab8106ed3ed77359ac85d9cf08e30290df864";
+      sha256 = "1i3g5h2ncdb8b67742kfpid7d0a1jas1pyicglbglwngfmzhpkna";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "c91d8eefde16bd047416409eb56353ea84a186e4";
+      sha256 = "0pj3gzw9b58l72w0rkpn03ayssglmqfmyxghhfad6mh0b49dvj3r";
+    };
+  }
+  {
+    goPackagePath = "bitbucket.org/ww/goautoneg";
+    fetch = {
+      type = "hg";
+      url = "bitbucket.org/ww/goautoneg";
+      rev = "75cd24fc2f2c2a2088577d12123ddee5f54e0675";
+      sha256 = "19khhn5xhqv1yp7d6k987gh5w5rhrjnp4p0c6fyrd8z6lzz5h9qi";
+    };
+  }
+  {
+    goPackagePath = "github.com/howeyc/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify";
+      rev = "ea925a0a47d225b2ca7f9932b01d2ed4f3ec74f6";
+      sha256 = "15wqjpkfzsxnaxbz6y4r91hw6812g3sc4ipagxw1bya9klbnkdc9";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/surfboard-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/surfboard-exporter.nix
new file mode 100644
index 000000000000..0c5cc6267659
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/surfboard-exporter.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "surfboard_exporter-${version}";
+  version = "2.0.0";
+
+  goPackagePath = "github.com/ipstatic/surfboard_exporter";
+
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "ipstatic";
+    repo = "surfboard_exporter";
+    sha256 = "11qms26648nwlwslnaflinxcr5rnp55s908rm1qpnbz0jnxf5ipw";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Arris Surfboard signal metrics exporter";
+    homepage = https://github.com/ipstatic/surfboard_exporter;
+    license = licenses.mit;
+    maintainers = with maintainers; [ disassembler ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/tor-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/tor-exporter.nix
new file mode 100644
index 000000000000..88f469ebe179
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/tor-exporter.nix
@@ -0,0 +1,37 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  name = "tor-exporter-${version}";
+  version = "0.3";
+
+  # Just a single .py file to use as the application's main entry point.
+  format = "other";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "atx";
+    repo = "prometheus-tor_exporter";
+    sha256 = "0d7pk8s8ya2pm8b4ijbfdniqcbd3vqy15dlhnmaf4wgb51pmm5yv";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ prometheus_client stem retrying ];
+
+  installPhase = ''
+    mkdir -p $out/share/
+    cp prometheus-tor-exporter.py $out/share/
+  '';
+
+  fixupPhase = ''
+    makeWrapper "${python3Packages.python.interpreter}" "$out/bin/prometheus-tor-exporter" \
+          --set PYTHONPATH "$PYTHONPATH" \
+          --add-flags "$out/share/prometheus-tor-exporter.py"
+  '';
+
+  meta = with lib; {
+    description = "Prometheus exporter that exposes metrics from a Tor daemon";
+    homepage = https://github.com/atx/prometheus-tor_exporter;
+    license = licenses.mit;
+    maintainers = with maintainers; [ delroth ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/unifi-exporter/default.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/unifi-exporter/default.nix
new file mode 100644
index 000000000000..18fa3f98db23
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/unifi-exporter/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "unifi-exporter-${version}";
+  version = "0.4.0+git1";
+  rev = "9a4e69fdea91dd0033bda4842998d751b40a6130";
+
+  goPackagePath = "github.com/mdlayher/unifi_exporter";
+
+  src= fetchFromGitHub {
+    inherit rev;
+    owner = "mdlayher";
+    repo = "unifi_exporter";
+    sha256 = "08zqvwvdqnc301f8jfh7bdvc138szw6xszx884b2v8w2x38w3rmn";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Prometheus exporter that exposes metrics from a Ubiquiti UniFi Controller and UniFi devices";
+    homepage = https://github.com/mdlayher/unifi_exporter;
+    license = licenses.mit;
+    maintainers = with maintainers; [ bachp ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/varnish-exporter.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/varnish-exporter.nix
new file mode 100644
index 000000000000..b23270cd8c1e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/varnish-exporter.nix
@@ -0,0 +1,34 @@
+# This file was generated by go2nix.
+{ lib, buildGoPackage, fetchFromGitHub, makeWrapper, varnish }:
+
+buildGoPackage rec {
+  name = "prometheus_varnish_exporter-${version}";
+  version = "1.4";
+
+  goPackagePath = "github.com/jonnenauha/prometheus_varnish_exporter";
+
+  src = fetchFromGitHub {
+    owner = "jonnenauha";
+    repo = "prometheus_varnish_exporter";
+    rev = version;
+    sha256 = "12gd09858zlhn8gkkchfwxv0ca2r72s18wrsz0agfr8pd1gxqh6j";
+  };
+
+  goDeps = ./varnish-exporter_deps.nix;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $bin/bin/prometheus_varnish_exporter \
+      --prefix PATH : "${varnish}/bin"
+  '';
+
+  doCheck = true;
+
+  meta = {
+    homepage = https://github.com/jonnenauha/prometheus_varnish_exporter;
+    description = "Varnish exporter for Prometheus";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ MostAwesomeDude willibutz ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/prometheus/varnish-exporter_deps.nix b/nixpkgs/pkgs/servers/monitoring/prometheus/varnish-exporter_deps.nix
new file mode 100644
index 000000000000..19ff1e9aa560
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/prometheus/varnish-exporter_deps.nix
@@ -0,0 +1,65 @@
+[
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "3a771d992973f24aa725d07868b467d1ddfceafb";
+      sha256 = "1l2lns4f5jabp61201sh88zf3b0q793w4zdgp9nll7mmfcxxjif3";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "b4deda0973fb4c70b50d226b1af49f3da59f5265";
+      sha256 = "0ya4ha7m20bw048m1159ppqzlvda4x0vdprlbk5sdgmy74h3xcdq";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "c12348ce28de40eed0136aa2b644d0ee0650e56c";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "82f5ff156b29e276022b1a958f7d385870fb9814";
+      sha256 = "111j329yrlgvh73dm80gawwxsh9dgjkw74254kyj5c2rfmra7znz";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c";
+      sha256 = "19y4ywsivhpxj7ikf2j0gm9k3cmyw37qcbfi78n526jxcc7kw998";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "d811d2e9bf898806ecfb6ef6296774b13ffc314c";
+      sha256 = "0r4067r4ysmljksqw3awcxx5qplqhykahc5igdzgkky7i4bvaik1";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "8b1c2da0d56deffdbb9e48d4414b4e674bd8083e";
+      sha256 = "0x128p15h35mgwqxkigfkk1lfrcz9g697ahl8v6xp9kwvcqvjrrf";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/riemann-dash/Gemfile b/nixpkgs/pkgs/servers/monitoring/riemann-dash/Gemfile
new file mode 100644
index 000000000000..aecd1b9508c9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/riemann-dash/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem "riemann-dash", "0.2.12"
diff --git a/nixpkgs/pkgs/servers/monitoring/riemann-dash/Gemfile.lock b/nixpkgs/pkgs/servers/monitoring/riemann-dash/Gemfile.lock
new file mode 100644
index 000000000000..00375fa4e30f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/riemann-dash/Gemfile.lock
@@ -0,0 +1,30 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    erubis (2.7.0)
+    multi_json (1.3.6)
+    rack (1.6.11)
+    rack-protection (1.5.3)
+      rack
+    riemann-dash (0.2.12)
+      erubis (>= 2.7.0)
+      multi_json (= 1.3.6)
+      sass (>= 3.1.14)
+      sinatra (~> 1.4.5)
+      webrick (~> 1.3.1)
+    sass (3.4.22)
+    sinatra (1.4.7)
+      rack (~> 1.5)
+      rack-protection (~> 1.4)
+      tilt (>= 1.3, < 3)
+    tilt (2.0.5)
+    webrick (1.3.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  riemann-dash (= 0.2.12)
+
+BUNDLED WITH
+   1.16.4
diff --git a/nixpkgs/pkgs/servers/monitoring/riemann-dash/default.nix b/nixpkgs/pkgs/servers/monitoring/riemann-dash/default.nix
new file mode 100644
index 000000000000..2218edabe06b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/riemann-dash/default.nix
@@ -0,0 +1,14 @@
+{ bundlerEnv, lib, ruby }:
+
+bundlerEnv {
+  inherit ruby;
+  pname = "riemann-dash";
+  gemdir = ./.;
+
+  meta = with lib; {
+    description = "A javascript, websockets-powered dashboard for Riemann";
+    homepage = https://github.com/riemann/riemann-dash;
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/riemann-dash/gemset.nix b/nixpkgs/pkgs/servers/monitoring/riemann-dash/gemset.nix
new file mode 100644
index 000000000000..9298312f90e0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/riemann-dash/gemset.nix
@@ -0,0 +1,73 @@
+{
+  erubis = {
+    source = {
+      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  multi_json = {
+    source = {
+      sha256 = "0q2zjfvd2ibds9g9nzf2p1b47fc1wqliwfywv5pw85w15lmy91yr";
+      type = "gem";
+    };
+    version = "1.3.6";
+  };
+  rack = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g9926ln2lw12lfxm4ylq1h6nl0rafl10za3xvjzc87qvnqic87f";
+      type = "gem";
+    };
+    version = "1.6.11";
+  };
+  rack-protection = {
+    dependencies = ["rack"];
+    source = {
+      sha256 = "0cvb21zz7p9wy23wdav63z5qzfn4nialik22yqp6gihkgfqqrh5r";
+      type = "gem";
+    };
+    version = "1.5.3";
+  };
+  riemann-dash = {
+    dependencies = ["erubis" "multi_json" "sass" "sinatra" "webrick"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y2vh9vcl21b6k2wqgz1y8bbcrl07r43s6q2vkgp35z1b28xcszy";
+      type = "gem";
+    };
+    version = "0.2.12";
+  };
+  sass = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dkj6v26fkg1g0majqswwmhxva7cd6p3psrhdlx93qal72dssywy";
+      type = "gem";
+    };
+    version = "3.4.22";
+  };
+  sinatra = {
+    dependencies = ["rack" "rack-protection" "tilt"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b81kbr65mmcl9cdq2r6yc16wklyp798rxkgmm5pr9fvsj7jwmxp";
+      type = "gem";
+    };
+    version = "1.4.7";
+  };
+  tilt = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lgk8bfx24959yq1cn55php3321wddw947mgj07bxfnwyipy9hqf";
+      type = "gem";
+    };
+    version = "2.0.5";
+  };
+  webrick = {
+    source = {
+      sha256 = "0s42mxihcl2bx0h9q0v2syl70qndydfkl39a06h9il17p895ya8g";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/servers/monitoring/riemann/default.nix b/nixpkgs/pkgs/servers/monitoring/riemann/default.nix
new file mode 100644
index 000000000000..6eb4a3dfe9af
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/riemann/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  name = "riemann-${version}";
+  version = "0.3.1";
+
+  src = fetchurl {
+    url = "https://github.com/riemann/riemann/releases/download/${version}/${name}.tar.bz2";
+    sha256 = "0lc3qmwb33jjw2g64j8inqpr7krjmpjwfdmypdssvjy84acpkyal";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  installPhase = ''
+    substituteInPlace bin/riemann --replace '$top/lib/riemann.jar' "$out/share/java/riemann.jar"
+
+    mkdir -p $out/share/java $out/bin $out/etc
+    mv lib/riemann.jar $out/share/java/
+    mv bin/riemann $out/bin/
+    mv etc/riemann.config $out/etc/
+
+    wrapProgram "$out/bin/riemann" --prefix PATH : "${jre}/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://riemann.io/;
+    description = "A network monitoring system";
+    license = licenses.epl10;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rickynils ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/sensu/Gemfile b/nixpkgs/pkgs/servers/monitoring/sensu/Gemfile
new file mode 100644
index 000000000000..3f570024febb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/sensu/Gemfile
@@ -0,0 +1,13 @@
+source 'https://rubygems.org'
+
+gem 'sensu'
+
+# integration
+gem 'sensu-plugins-influxdb'
+
+# checks
+gem 'sensu-plugins-http'
+gem 'sensu-plugins-disk-checks'
+gem 'sensu-plugins-logs'
+gem 'sensu-plugins-systemd'
+# gem 'sensu-plugins-process-checks'
diff --git a/nixpkgs/pkgs/servers/monitoring/sensu/Gemfile.lock b/nixpkgs/pkgs/servers/monitoring/sensu/Gemfile.lock
new file mode 100644
index 000000000000..d12e17130b08
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/sensu/Gemfile.lock
@@ -0,0 +1,142 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    amq-protocol (2.0.1)
+    amqp (1.6.0)
+      amq-protocol (>= 2.0.1)
+      eventmachine
+    aws-sdk (2.10.34)
+      aws-sdk-resources (= 2.10.34)
+    aws-sdk-core (2.10.34)
+      aws-sigv4 (~> 1.0)
+      jmespath (~> 1.0)
+    aws-sdk-resources (2.10.34)
+      aws-sdk-core (= 2.10.34)
+    aws-sigv4 (1.0.1)
+    cause (0.1)
+    childprocess (0.5.8)
+      ffi (~> 1.0, >= 1.0.11)
+    dentaku (2.0.9)
+    domain_name (0.5.20170404)
+      unf (>= 0.0.5, < 1.0.0)
+    em-http-server (0.1.8)
+      eventmachine
+    em-worker (0.0.2)
+      eventmachine
+    eventmachine (1.2.5)
+    ffi (1.9.18)
+    http-cookie (1.0.3)
+      domain_name (~> 0.5)
+    influxdb (0.3.13)
+      cause
+      json
+    jmespath (1.3.1)
+    json (1.8.6)
+    jsonpath (0.5.8)
+      multi_json
+    mime-types (3.1)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2016.0521)
+    mixlib-cli (1.7.0)
+    multi_json (1.12.1)
+    netrc (0.11.0)
+    oj (2.18.1)
+    parse-cron (0.1.4)
+    rest-client (2.0.2)
+      http-cookie (>= 1.0.2, < 2.0)
+      mime-types (>= 1.16, < 4.0)
+      netrc (~> 0.8)
+    sensu (1.0.3)
+      em-http-server (= 0.1.8)
+      eventmachine (= 1.2.5)
+      parse-cron (= 0.1.4)
+      sensu-extension (= 1.5.1)
+      sensu-extensions (= 1.9.0)
+      sensu-json (= 2.1.0)
+      sensu-logger (= 1.2.1)
+      sensu-redis (= 2.2.0)
+      sensu-settings (= 10.3.0)
+      sensu-spawn (= 2.2.1)
+      sensu-transport (= 7.0.2)
+    sensu-extension (1.5.1)
+      eventmachine
+    sensu-extensions (1.9.0)
+      sensu-extension
+      sensu-extensions-check-dependencies (= 1.0.1)
+      sensu-extensions-debug (= 1.0.0)
+      sensu-extensions-json (= 1.0.0)
+      sensu-extensions-occurrences (= 1.2.0)
+      sensu-extensions-only-check-output (= 1.0.0)
+      sensu-extensions-ruby-hash (= 1.0.0)
+      sensu-json (>= 1.1.0)
+      sensu-logger
+      sensu-settings
+    sensu-extensions-check-dependencies (1.0.1)
+      sensu-extension
+    sensu-extensions-debug (1.0.0)
+      sensu-extension
+    sensu-extensions-json (1.0.0)
+      sensu-extension
+    sensu-extensions-occurrences (1.2.0)
+      sensu-extension
+    sensu-extensions-only-check-output (1.0.0)
+      sensu-extension
+    sensu-extensions-ruby-hash (1.0.0)
+      sensu-extension
+    sensu-json (2.1.0)
+      oj (= 2.18.1)
+    sensu-logger (1.2.1)
+      eventmachine
+      sensu-json
+    sensu-plugin (1.4.5)
+      json (< 2.0.0)
+      mixlib-cli (>= 1.5.0)
+    sensu-plugins-disk-checks (2.4.2)
+      sensu-plugin (~> 1.2)
+      sys-filesystem (= 1.1.7)
+    sensu-plugins-http (2.6.0)
+      aws-sdk (~> 2.3)
+      rest-client (~> 2.0.2)
+      sensu-plugin (~> 1.2)
+    sensu-plugins-influxdb (1.2.0)
+      dentaku (= 2.0.9)
+      influxdb (= 0.3.13)
+      jsonpath (= 0.5.8)
+      sensu-plugin (~> 1.3)
+    sensu-plugins-logs (1.2.0)
+      sensu-plugin (~> 1.2)
+    sensu-plugins-systemd (0.0.5)
+      sensu-plugin (~> 1.2)
+    sensu-redis (2.2.0)
+      eventmachine
+    sensu-settings (10.3.0)
+      parse-cron
+      sensu-json (>= 1.1.0)
+    sensu-spawn (2.2.1)
+      childprocess (= 0.5.8)
+      em-worker (= 0.0.2)
+      eventmachine
+    sensu-transport (7.0.2)
+      amq-protocol (= 2.0.1)
+      amqp (= 1.6.0)
+      eventmachine
+      sensu-redis (>= 1.0.0)
+    sys-filesystem (1.1.7)
+      ffi
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.7.4)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  sensu
+  sensu-plugins-disk-checks
+  sensu-plugins-http
+  sensu-plugins-influxdb
+  sensu-plugins-logs
+  sensu-plugins-systemd
+
+BUNDLED WITH
+   1.15.3
diff --git a/nixpkgs/pkgs/servers/monitoring/sensu/default.nix b/nixpkgs/pkgs/servers/monitoring/sensu/default.nix
new file mode 100644
index 000000000000..dba0c32b353b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/sensu/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerEnv, ruby }:
+
+bundlerEnv rec {
+  name = "sensu-${version}";
+  version = (import ./gemset.nix).sensu.version;
+
+  inherit ruby;
+  gemdir = ./.;
+
+  meta = with lib; {
+    description = "A monitoring framework that aims to be simple, malleable, and scalable";
+    homepage    = https://sensuapp.org/;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ theuni peterhoeg ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/sensu/gemset.nix b/nixpkgs/pkgs/servers/monitoring/sensu/gemset.nix
new file mode 100644
index 000000000000..cce9a45e9ed8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/sensu/gemset.nix
@@ -0,0 +1,446 @@
+{
+  amq-protocol = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rpn9vgh7y037aqhhp04smihzr73vp5i5g6xlqlha10wy3q0wp7x";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
+  amqp = {
+    dependencies = ["amq-protocol" "eventmachine"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kbrqnpjgj9v0722p3n5rw589l4g26ry8mcghwc5yr20ggkpdaz9";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  aws-sdk = {
+    dependencies = ["aws-sdk-resources"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09k367vs9gb640cr1afphxjfmlykw7knnb9xz0kl2x5f9yr3zz23";
+      type = "gem";
+    };
+    version = "2.10.34";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-sigv4" "jmespath"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gfsph8kr59jdpvycq8qh0c0ah64k0n96ag5qbvy7mzq9292085w";
+      type = "gem";
+    };
+    version = "2.10.34";
+  };
+  aws-sdk-resources = {
+    dependencies = ["aws-sdk-core"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0knip45mhx0dm8llp1akhhar2z007r7kjg3i3xbws7lhvms8fbjc";
+      type = "gem";
+    };
+    version = "2.10.34";
+  };
+  aws-sigv4 = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cxl0yvmyl8d0yj4cx3p75iki4fqk8ckb6ajfj7mr3g4ihp5mryp";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  cause = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0digirxqlwdg79mkbn70yc7i9i1qnclm2wjbrc47kqv6236bpj00";
+      type = "gem";
+    };
+    version = "0.1";
+  };
+  childprocess = {
+    dependencies = ["ffi"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lv7axi1fhascm9njxh3lx1rbrnsm8wgvib0g7j26v4h1fcphqg0";
+      type = "gem";
+    };
+    version = "0.5.8";
+  };
+  dentaku = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11z4cw4lspx3rgmmd2hd4l1iikk6p17icxwn7xym92v1j825zpnr";
+      type = "gem";
+    };
+    version = "2.0.9";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12hs8yijhak7p2hf1xkh98g0mnp5phq3mrrhywzaxpwz1gw5r3kf";
+      type = "gem";
+    };
+    version = "0.5.20170404";
+  };
+  em-http-server = {
+    dependencies = ["eventmachine"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y8l4gymy9dzjjchjav90ck6has2i2zdjihlhcyrg3jgq6kjzyq5";
+      type = "gem";
+    };
+    version = "0.1.8";
+  };
+  em-worker = {
+    dependencies = ["eventmachine"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z4jx9z2q5hxvdvik4yp0ahwfk69qsmdnyp72ln22p3qlkq2z5wk";
+      type = "gem";
+    };
+    version = "0.0.2";
+  };
+  eventmachine = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "075hdw0fgzldgss3xaqm2dk545736khcvv1fmzbf1sgdlkyh1v8z";
+      type = "gem";
+    };
+    version = "1.2.5";
+  };
+  ffi = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "034f52xf7zcqgbvwbl20jwdyjwznvqnwpbaps9nk18v9lgb1dpx0";
+      type = "gem";
+    };
+    version = "1.9.18";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  influxdb = {
+    dependencies = ["cause" "json"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jikl3iylbffsdmb4vr09ysqvpwxk133y6m9ylwcd0931ngsf0ks";
+      type = "gem";
+    };
+    version = "0.3.13";
+  };
+  jmespath = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07w8ipjg59qavijq59hl82zs74jf3jsp7vxl9q3a2d0wpv5akz3y";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5";
+      type = "gem";
+    };
+    version = "1.8.6";
+  };
+  jsonpath = {
+    dependencies = ["multi_json"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gwhrd7xlysq537yy8ma69jc83lblwiccajl5zvyqpnwyjjc93df";
+      type = "gem";
+    };
+    version = "0.5.8";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0087z9kbnlqhci7fxh9f6il63hj1k02icq2rs0c6cppmqchr753m";
+      type = "gem";
+    };
+    version = "3.1";
+  };
+  mime-types-data = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04my3746hwa4yvbx1ranhfaqkgf6vavi1kyijjnw8w3dy37vqhkm";
+      type = "gem";
+    };
+    version = "3.2016.0521";
+  };
+  mixlib-cli = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0647msh7kp7lzyf6m72g6snpirvhimjm22qb8xgv9pdhbcrmcccp";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  multi_json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wpc23ls6v2xbk3l1qncsbz16npvmw8p0b38l8czdzri18mp51xk";
+      type = "gem";
+    };
+    version = "1.12.1";
+  };
+  netrc = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gzfmcywp1da8nzfqsql2zqi648mfnx6qwkig3cv36n9m0yy676y";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  oj = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "147whmq8h2n04chskl3v4a132xhz5i6kk6vhnz83jwng4vihin5f";
+      type = "gem";
+    };
+    version = "2.18.1";
+  };
+  parse-cron = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02fj9i21brm88nb91ikxwxbwv9y7mb7jsz6yydh82rifwq7357hg";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  rest-client = {
+    dependencies = ["http-cookie" "mime-types" "netrc"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hzcs2r7b5bjkf2x2z3n8z6082maz0j8vqjiciwgg3hzb63f958j";
+      type = "gem";
+    };
+    version = "2.0.2";
+  };
+  sensu = {
+    dependencies = ["em-http-server" "eventmachine" "parse-cron" "sensu-extension" "sensu-extensions" "sensu-json" "sensu-logger" "sensu-redis" "sensu-settings" "sensu-spawn" "sensu-transport"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07fa9rv7hdj2n58a0cm1i5nis309w7xbs9lmgckmrpj190q1gvdm";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  sensu-extension = {
+    dependencies = ["eventmachine"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lgmjxfbq11v4yi3qanf1qxv0sgm1a8a7wj7qyn1nkva6zmimss3";
+      type = "gem";
+    };
+    version = "1.5.1";
+  };
+  sensu-extensions = {
+    dependencies = ["sensu-extension" "sensu-extensions-check-dependencies" "sensu-extensions-debug" "sensu-extensions-json" "sensu-extensions-occurrences" "sensu-extensions-only-check-output" "sensu-extensions-ruby-hash" "sensu-json" "sensu-logger" "sensu-settings"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r09mdbbnh5cg9yvqw78sxbhlb8xqld1vwbr4hsjw6k3x1xpnnr9";
+      type = "gem";
+    };
+    version = "1.9.0";
+  };
+  sensu-extensions-check-dependencies = {
+    dependencies = ["sensu-extension"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0clgvf2abvwz549f28ny3zd6q7z6y7m49i8pp91ll10jp1vsy4b2";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  sensu-extensions-debug = {
+    dependencies = ["sensu-extension"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11abdgn2kkkbvxq4692yg6a27qnxz4349gfiq7d35biy7vrw34lp";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  sensu-extensions-json = {
+    dependencies = ["sensu-extension"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wnbn9sycdqdh9m0fhszaqkv0jijs3fkdbvcv8kdspx6irbv3m6g";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  sensu-extensions-occurrences = {
+    dependencies = ["sensu-extension"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lx5wsbblfs0rvkxfg09bsz0g2mwmckrhga7idnarsnm8m565v1v";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  sensu-extensions-only-check-output = {
+    dependencies = ["sensu-extension"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ds2i8wd4ji9ifig2zzr4jpxinvk5dm7j10pvaqy4snykxa3rqh3";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  sensu-extensions-ruby-hash = {
+    dependencies = ["sensu-extension"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xyrj3gbmslbivcd5qcmyclgapn7qf7f5jwfvfpw53bxzib0h7s3";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  sensu-json = {
+    dependencies = ["oj"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02qkh86jddv7gha39vjx6g9hi7vkq7r433dr86bwmm9c7lqkgyl9";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  sensu-logger = {
+    dependencies = ["eventmachine" "sensu-json"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03kicjqz8a594bxnwyg6bcd4fipy2vxjl1gbaip4gpixxki32dx0";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  sensu-plugin = {
+    dependencies = ["json" "mixlib-cli"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z18zk04l9klbjmqvjg6cpv3k4w5hi1by8wnpkiwdwa2jdv61jyb";
+      type = "gem";
+    };
+    version = "1.4.5";
+  };
+  sensu-plugins-disk-checks = {
+    dependencies = ["sensu-plugin" "sys-filesystem"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m5pygdaf8xqrby61vcsq6ynhzcvjr2xgahwmkkcai8a4xqrpq9x";
+      type = "gem";
+    };
+    version = "2.4.2";
+  };
+  sensu-plugins-http = {
+    dependencies = ["aws-sdk" "rest-client" "sensu-plugin"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yg05x9dl4xwqi7lvglyv374a3hbp7ag0z9325jmc9bazm6i2q2d";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  sensu-plugins-influxdb = {
+    dependencies = ["dentaku" "influxdb" "jsonpath" "sensu-plugin"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18nk7c451df46xcjk97r3h8yhaj8bz138ih5y0z26sdiha58brv7";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  sensu-plugins-logs = {
+    dependencies = ["sensu-plugin"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ycrf3967v5kavm58fj9db16l9wgyzac4h3r0f9hm32jy9qsxwq6";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  sensu-plugins-systemd = {
+    dependencies = ["sensu-plugin"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r7prvkf33j6qvvqq78186rn5g6wf0g3dqni34vnj8v1z287wkfh";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  sensu-redis = {
+    dependencies = ["eventmachine"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1drmychc04fg2gs7zsxx6aidfyxf7cn7k8k1jy7dnfbnlr5aln3n";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  sensu-settings = {
+    dependencies = ["parse-cron" "sensu-json"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y55bqvps06gk94zllamqr0fa5bc27q0k1b5sp5gxh1bkf4w8gb3";
+      type = "gem";
+    };
+    version = "10.3.0";
+  };
+  sensu-spawn = {
+    dependencies = ["childprocess" "em-worker" "eventmachine"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz5kbqk3ld0s16zjl8m38l1m1xwcvjlfc1g4nfm45qxdyfn7la7";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  sensu-transport = {
+    dependencies = ["amq-protocol" "amqp" "eventmachine" "sensu-redis"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15yib92hwyd8v04wcc0kaw0p8w2c2mwvi4ldya2jh3dqgs31mvhr";
+      type = "gem";
+    };
+    version = "7.0.2";
+  };
+  sys-filesystem = {
+    dependencies = ["ffi"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10didky52nfapmybj6ipda18i8fcwf8bs9bbfbk5i7v1shzd36rf";
+      type = "gem";
+    };
+    version = "1.1.7";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14hr2dzqh33kqc0xchs8l05pf3kjcayvad4z1ip5rdjxrkfk8glb";
+      type = "gem";
+    };
+    version = "0.0.7.4";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/servers/monitoring/seyren/default.nix b/nixpkgs/pkgs/servers/monitoring/seyren/default.nix
new file mode 100644
index 000000000000..ab8365c23f81
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/seyren/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  name = "seyren-${version}";
+  version = "1.1.0";
+
+  src = fetchurl {
+    url = "https://github.com/scobal/seyren/releases/download/${version}/seyren-${version}.jar";
+    sha256 = "10m64zdci4swlvivii1jnmrwfi461af3xvn0xvwvy7i8kyb56vrr";
+  };
+
+  phases = ["installPhase"];
+
+  buildInputs = [ makeWrapper jre ];
+
+  installPhase = ''
+    mkdir -p "$out"/bin
+    makeWrapper "${jre}/bin/java" "$out"/bin/seyren --add-flags "-jar $src"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An alerting dashboard for Graphite";
+    homepage = https://github.com/scobal/seyren;
+    license = licenses.asl20;
+    maintainers = [ maintainers.offline ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/telegraf/default.nix b/nixpkgs/pkgs/servers/monitoring/telegraf/default.nix
new file mode 100644
index 000000000000..99380fbae9cb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/telegraf/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "telegraf-${version}";
+  version = "1.7.0";
+
+  goPackagePath = "github.com/influxdata/telegraf";
+
+  excludedPackages = "test";
+
+  src = fetchFromGitHub {
+    owner = "influxdata";
+    repo = "telegraf";
+    rev = "${version}";
+    sha256 = "1jinvncbn1srfmclhys6khvaczawy243vgmj2gsgm9szrnrf7klv";
+  };
+
+  buildFlagsArray = [ ''-ldflags=
+    -X main.version=${version}
+  '' ];
+
+  goDeps = ./. + "/deps-${version}.nix";
+
+  meta = with lib; {
+    description = "The plugin-driven server agent for collecting & reporting metrics.";
+    license = licenses.mit;
+    homepage = https://www.influxdata.com/time-series-platform/telegraf/;
+    maintainers = with maintainers; [ mic92 roblabla ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/telegraf/deps-1.7.0.nix b/nixpkgs/pkgs/servers/monitoring/telegraf/deps-1.7.0.nix
new file mode 100644
index 000000000000..57a5ffd21b00
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/telegraf/deps-1.7.0.nix
@@ -0,0 +1,894 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "code.cloudfoundry.org/clock";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cloudfoundry/clock";
+      rev = "e9dc86bbf0e5bbe6bf7ff5a6f71e048959b61f71";
+      sha256 = "1mwckqpg9qi5macfbx7lpc5frbd0dz8bzq78dl570j9j2aqp9hkf";
+    };
+  }
+  {
+    goPackagePath = "collectd.org";
+    fetch = {
+      type = "git";
+      url = "https://github.com/collectd/go-collectd";
+      rev = "2ce144541b8903101fb8f1483cc0497a68798122";
+      sha256 = "0rr9rnc777jk27a7yxhdb7vgkj493158a8k6q44x51s30dkp78x3";
+    };
+  }
+  {
+    goPackagePath = "github.com/Microsoft/ApplicationInsights-Go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Microsoft/ApplicationInsights-Go";
+      rev = "3612f58550c1de70f1a110c78c830e55f29aa65d";
+      sha256 = "11znwr0787171yv80r5jmdks6i0i3rwa03ir1kapm0ycwr8h4nvy";
+    };
+  }
+  {
+    goPackagePath = "github.com/Shopify/sarama";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Shopify/sarama";
+      rev = "3b1b38866a79f06deddf0487d5c27ba0697ccd65";
+      sha256 = "02qwlqd1kdgwlv39fimpbzjhgw8shzkkad82kfwdy8lppscb20br";
+    };
+  }
+  {
+    goPackagePath = "github.com/Sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Sirupsen/logrus";
+      rev = "61e43dc76f7ee59a82bdf3d71033dc12bea4c77d";
+      sha256 = "08kr7zvdgwv8vsakjzq1bla6cc6dlxlg1brlga69y69xw7cz5l9p";
+    };
+  }
+  {
+    goPackagePath = "github.com/aerospike/aerospike-client-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aerospike/aerospike-client-go";
+      rev = "95e1ad7791bdbca44707fedbb29be42024900d9c";
+      sha256 = "034pirm1dzdblwadcd829qk2jqkr8hg9gpfph8ax7z0b3h2ah8xf";
+    };
+  }
+  {
+    goPackagePath = "github.com/amir/raidman";
+    fetch = {
+      type = "git";
+      url = "https://github.com/amir/raidman";
+      rev = "c74861fe6a7bb8ede0a010ce4485bdbb4fc4c985";
+      sha256 = "10lmpz5vf2ysw8gnl0z8ravl4vvy48nbh8xpk2zzgifb6yn3x192";
+    };
+  }
+  {
+    goPackagePath = "github.com/apache/thrift";
+    fetch = {
+      type = "git";
+      url = "https://github.com/apache/thrift";
+      rev = "4aaa92ece8503a6da9bc6701604f69acf2b99d07";
+      sha256 = "1my582c0ln1byxid5acdd6dk7lvi7lwd6gka10s4bp4w3xrd55x8";
+    };
+  }
+  {
+    goPackagePath = "github.com/armon/go-metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/armon/go-metrics";
+      rev = "783273d703149aaeb9897cf58613d5af48861c25";
+      sha256 = "1ci4kh35zdh5gyjhci5gi324iqcq04nb3qh89h9w6spwqb91w0ln";
+    };
+  }
+  {
+    goPackagePath = "github.com/aws/aws-sdk-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aws/aws-sdk-go";
+      rev = "c861d27d0304a79f727e9a8a4e2ac1e74602fdc0";
+      sha256 = "023cyg551dvm2l50dx1qsikkj77lk2dhiya7by8in7h65av6hjgl";
+    };
+  }
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9";
+      sha256 = "1hrybsql68xw57brzj805xx2mghydpdiysv3gbhr7f5wlxj2514y";
+    };
+  }
+  {
+    goPackagePath = "github.com/bsm/sarama-cluster";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bsm/sarama-cluster";
+      rev = "abf039439f66c1ce78017f560b490612552f6472";
+      sha256 = "16013ac7jv72mdiv84vhk4av1vb5q8xq3fhv253fz2a17h9ld78q";
+    };
+  }
+  {
+    goPackagePath = "github.com/cenkalti/backoff";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cenkalti/backoff";
+      rev = "b02f2bbce11d7ea6b97f282ef1771b0fe2f65ef3";
+      sha256 = "0lhcll9pzcxbbm9sdsijvcvdqc4lrsgbyw0q1xly0pnz556v6pyc";
+    };
+  }
+  {
+    goPackagePath = "github.com/couchbase/go-couchbase";
+    fetch = {
+      type = "git";
+      url = "https://github.com/couchbase/go-couchbase";
+      rev = "bfe555a140d53dc1adf390f1a1d4b0fd4ceadb28";
+      sha256 = "0h59zzxcz3i8nd4ln89fi946ii8kscnqam67h3mxvjwvpnmcax9k";
+    };
+  }
+  {
+    goPackagePath = "github.com/couchbase/gomemcached";
+    fetch = {
+      type = "git";
+      url = "https://github.com/couchbase/gomemcached";
+      rev = "4a25d2f4e1dea9ea7dd76dfd943407abf9b07d29";
+      sha256 = "12h0wsimwmr0f398538g9ngasik4gisnac9vpn0ldy8hqdpa334d";
+    };
+  }
+  {
+    goPackagePath = "github.com/couchbase/goutils";
+    fetch = {
+      type = "git";
+      url = "https://github.com/couchbase/goutils";
+      rev = "5823a0cbaaa9008406021dc5daf80125ea30bba6";
+      sha256 = "15v5ps2i2y2hczwxs2ci4c2w4p3pn3bl7vc5wlaqnc7i14f9285c";
+    };
+  }
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "346938d642f2ec3594ed81d874461961cd0faa76";
+      sha256 = "0d4jfmak5p6lb7n2r6yvf5p1zcw0l8j74kn55ghvr7zr7b7axm6c";
+    };
+  }
+  {
+    goPackagePath = "github.com/dgrijalva/jwt-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgrijalva/jwt-go";
+      rev = "dbeaa9332f19a944acb5736b4456cfcc02140e29";
+      sha256 = "0zk6l6kzsjdijfn7c4h0aywdjx5j2hjwi67vy1k6wr46hc8ks2hs";
+    };
+  }
+  {
+    goPackagePath = "github.com/docker/distribution";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/distribution";
+      rev = "749f6afb4572201e3c37325d0ffedb6f32be8950";
+      sha256 = "05jn2wvikyw0pbmi74w5axr0zgxn5y3ynn9rhsq87rmwqj7raxhd";
+    };
+  }
+  {
+    goPackagePath = "github.com/docker/docker";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/docker";
+      rev = "f5ec1e2936dcbe7b5001c2b817188b095c700c27";
+      sha256 = "1y3rkzgg8vpjq61y473lnh0qyc6msl4ixw7ci2p56fyqrhkmhf96";
+    };
+  }
+  {
+    goPackagePath = "github.com/docker/go-connections";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/go-connections";
+      rev = "990a1a1a70b0da4c4cb70e117971a4f0babfbf1a";
+      sha256 = "16lcf485a7gl0kzkc5n0qq9frjkfinxhcr3j4874qqkr8ghghwbb";
+    };
+  }
+  {
+    goPackagePath = "github.com/docker/go-units";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/go-units";
+      rev = "47565b4f722fb6ceae66b95f853feed578a4a51c";
+      sha256 = "0npxsb3pp89slwf4a73fxm20hykad8xggij6i6hcd5jy19bjrd93";
+    };
+  }
+  {
+    goPackagePath = "github.com/eapache/go-resiliency";
+    fetch = {
+      type = "git";
+      url = "https://github.com/eapache/go-resiliency";
+      rev = "b86b1ec0dd4209a588dc1285cdd471e73525c0b3";
+      sha256 = "1kzv95bh3nidm2cr7iv9lk3s2qiw1i17n8gyl2x6xk6qv8b0bc21";
+    };
+  }
+  {
+    goPackagePath = "github.com/eapache/go-xerial-snappy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/eapache/go-xerial-snappy";
+      rev = "bb955e01b9346ac19dc29eb16586c90ded99a98c";
+      sha256 = "1zhxcil8hn88hvxr2d6rmj4cls5zgss1scj0ikwiqq89f8vcgwn4";
+    };
+  }
+  {
+    goPackagePath = "github.com/eapache/queue";
+    fetch = {
+      type = "git";
+      url = "https://github.com/eapache/queue";
+      rev = "44cc805cf13205b55f69e14bcb69867d1ae92f98";
+      sha256 = "07dp54n94gn3gsvdcki56yqh7py7wqqigxbamhxwgbr05n61fqyg";
+    };
+  }
+  {
+    goPackagePath = "github.com/eclipse/paho.mqtt.golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/eclipse/paho.mqtt.golang";
+      rev = "aff15770515e3c57fc6109da73d42b0d46f7f483";
+      sha256 = "1blfvrp1d5jqxxqdw7xd0ns1qiml45k0nch9jwpi0ddg7hckii2d";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-ini/ini";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-ini/ini";
+      rev = "9144852efba7c4daf409943ee90767da62d55438";
+      sha256 = "08jvki9id1wdca0j6kqb4fmipwvgmakg9yfavnbpyn3vsbx9vpbp";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-redis/redis";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-redis/redis";
+      rev = "73b70592cdaa9e6abdfcfbf97b4a90d80728c836";
+      sha256 = "0b6xwajnk65bdq98czv137gvypwnznkjnm2ksnxm87nyj2vyddm9";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-sql-driver/mysql";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-sql-driver/mysql";
+      rev = "2e00b5cd70399450106cec6431c2e2ce3cae5034";
+      sha256 = "085g48jq9hzmlcxg122n0c4pi41sc1nn2qpx1vrl2jfa8crsppa5";
+    };
+  }
+  {
+    goPackagePath = "github.com/gobwas/glob";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gobwas/glob";
+      rev = "bea32b9cd2d6f55753d94a28e959b13f0244797a";
+      sha256 = "0dx0f293v1a0d8qi7ik5hdl26dapd8xm0hj9a9gc620vhj7khi9q";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "8ee79997227bf9b34611aee7946ae64735e6fd93";
+      sha256 = "0qm1lpdhf97k2hxgivq2cpjgawhlmmz39y230kgxijhm96xijxb8";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/snappy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/snappy";
+      rev = "7db9049039a047d955fe8c19b83c8ff5abd765c7";
+      sha256 = "09l3sc9z2fqnj5b040q320gwb4gqig6lnysxcayhwckrdp5bm8hs";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/mux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/mux";
+      rev = "53c1911da2b537f792e7cafcb446b05ffe33b996";
+      sha256 = "10cvljpjgvkq1zqj82hr46dnddfcpmm18wabbv4pkxjrmvb9xkf7";
+    };
+  }
+  {
+    goPackagePath = "github.com/hailocab/go-hostpool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hailocab/go-hostpool";
+      rev = "e80d13ce29ede4452c43dea11e79b9bc8a15b478";
+      sha256 = "05ld4wp3illkbgl043yf8jq9y1ld0zzvrcg8jdij129j50xgfxny";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/consul";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/consul";
+      rev = "5174058f0d2bda63fa5198ab96c33d9a909c58ed";
+      sha256 = "0xm3gl8i7pgsbsc2397bwh9hp2dwnk4cmw5y05acqn3zpyp84sbv";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/go-cleanhttp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/go-cleanhttp";
+      rev = "d5fe4b57a186c716b0e00b8c301cbd9b4182694d";
+      sha256 = "1m20y90syky4xr81sm3980jpil81nnpzmi6kv0vjr6p584gl1hn8";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/go-immutable-radix";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/go-immutable-radix";
+      rev = "7f3cd4390caab3250a57f30efdb2a65dd7649ecf";
+      sha256 = "13nv1dac6i2mjdy8vsd4vwawwja78vggdjcnj1xfykg2k8jbkphv";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/go-rootcerts";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/go-rootcerts";
+      rev = "6bb64b370b90e7ef1fa532be9e591a81c3493e00";
+      sha256 = "1a81fcm1i0ji2iva0dcimiichgwpbcb7lx0vyaks87zj5wf04qy9";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/golang-lru";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/golang-lru";
+      rev = "0fb14efe8c47ae851c0034ed7a448854d3d34cf3";
+      sha256 = "0vg4yn3088ym4sj1d34kr13lp4v5gya7r2nxshp2bz70n46fsqn2";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/serf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/serf";
+      rev = "984a73625de3138f44deb38d00878fab39eb6447";
+      sha256 = "1sk9sw7q9knp7yi4r5kcr8cgyi9jzvgb0kzbwa38p8h3w394izkk";
+    };
+  }
+  {
+    goPackagePath = "github.com/influxdata/go-syslog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/influxdata/go-syslog";
+      rev = "eecd51df3ad85464a2bab9b7d3a45bc1e299059e";
+      sha256 = "0zw8wswr3afb48mi510mql58gz818dp0mzq3vllqqhrz3x8w580r";
+    };
+  }
+  {
+    goPackagePath = "github.com/influxdata/tail";
+    fetch = {
+      type = "git";
+      url = "https://github.com/influxdata/tail";
+      rev = "c43482518d410361b6c383d7aebce33d0471d7bc";
+      sha256 = "0kf155nz9wvwawsbgaa76q4r975l7945nlvnh4ig60xm0jv8580b";
+    };
+  }
+  {
+    goPackagePath = "github.com/influxdata/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/influxdata/toml";
+      rev = "2a2e3012f7cfbef64091cc79776311e65dfa211b";
+      sha256 = "1dyzsg79rgl5bcvq7i7cnwhxr7racyhfhmqdq2701zgv77v3rab3";
+    };
+  }
+  {
+    goPackagePath = "github.com/influxdata/wlog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/influxdata/wlog";
+      rev = "7c63b0a71ef8300adc255344d275e10e5c3a71ec";
+      sha256 = "04kw4kivxvr3kkmghj3427b1xyhzbhnfr971qfn3lv2vvhs8kpfl";
+    };
+  }
+  {
+    goPackagePath = "github.com/jackc/pgx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jackc/pgx";
+      rev = "63f58fd32edb5684b9e9f4cfaac847c6b42b3917";
+      sha256 = "1n9cbdwzpagnrisxwq0frqdnkmyfg2qlxsr890527d32633hp0h2";
+    };
+  }
+  {
+    goPackagePath = "github.com/jmespath/go-jmespath";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jmespath/go-jmespath";
+      rev = "bd40a432e4c76585ef6b72d3fd96fb9b6dc7b68d";
+      sha256 = "1kgzwiyqn24ba9kgpjxlq1h746gnyby0psbjj9mp2yx0h1i0kc4z";
+    };
+  }
+  {
+    goPackagePath = "github.com/kardianos/osext";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kardianos/osext";
+      rev = "c2c54e542fb797ad986b31721e1baedf214ca413";
+      sha256 = "02vmjhkx90601l5fym7c3r4d44b88h3cign86nz4yy6j8qqxvz3h";
+    };
+  }
+  {
+    goPackagePath = "github.com/kardianos/service";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kardianos/service";
+      rev = "6d3a0ee7d3425d9d835debc51a0ca1ffa28f4893";
+      sha256 = "1cgqg6zbwwsn6lz2ms094q4w37x84vd9ixs50wsh3037q4sfhyll";
+    };
+  }
+  {
+    goPackagePath = "github.com/kballard/go-shellquote";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kballard/go-shellquote";
+      rev = "d8ec1a69a250a17bb0e419c386eac1f3711dc142";
+      sha256 = "1a57hm0zwyi70am670s0pkglnkk1ilddnmfxz1ba7innpkf5z6s7";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "c12348ce28de40eed0136aa2b644d0ee0650e56c";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
+    };
+  }
+  {
+    goPackagePath = "github.com/miekg/dns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/miekg/dns";
+      rev = "99f84ae56e75126dd77e5de4fae2ea034a468ca1";
+      sha256 = "1v7rccng7mbzqh5qf8d8gqfppm127v32s8i1n3k50q3flv227byf";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/mapstructure";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/mapstructure";
+      rev = "d0303fe809921458f417bcf828397a65db30a7e4";
+      sha256 = "1fjwi5ghc1ibyx93apz31n4hj6gcq1hzismpdfbg2qxwshyg0ya8";
+    };
+  }
+  {
+    goPackagePath = "github.com/multiplay/go-ts3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/multiplay/go-ts3";
+      rev = "07477f49b8dfa3ada231afc7b7b17617d42afe8e";
+      sha256 = "1z2cfqhm6g48vzscargw6vl9idfppdcm3wq1xfwy73l1s77q4n9n";
+    };
+  }
+  {
+    goPackagePath = "github.com/naoina/go-stringutil";
+    fetch = {
+      type = "git";
+      url = "https://github.com/naoina/go-stringutil";
+      rev = "6b638e95a32d0c1131db0e7fe83775cbea4a0d0b";
+      sha256 = "00831p1wn3rimybk1z8l30787kn1akv5jax5wx743nn76qcmkmc6";
+    };
+  }
+  {
+    goPackagePath = "github.com/nats-io/gnatsd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nats-io/gnatsd";
+      rev = "393bbb7c031433e68707c8810fda0bfcfbe6ab9b";
+      sha256 = "1hnn4p24gm90siixdvj97csrxnr78svxmypglcjska474adhhnzz";
+    };
+  }
+  {
+    goPackagePath = "github.com/nats-io/go-nats";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nats-io/go-nats";
+      rev = "ea9585611a4ab58a205b9b125ebd74c389a6b898";
+      sha256 = "0i2whh6c8grzi9slrk2clh3dhykxzid4zn395wgysg6gfjrbd5i5";
+    };
+  }
+  {
+    goPackagePath = "github.com/nats-io/nuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nats-io/nuid";
+      rev = "289cccf02c178dc782430d534e3c1f5b72af807f";
+      sha256 = "1dpk8qzl43gfdaj2nbw52a0xyrmpmq26a9v9dfl27vkijssb20p4";
+    };
+  }
+  {
+    goPackagePath = "github.com/nsqio/go-nsq";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nsqio/go-nsq";
+      rev = "eee57a3ac4174c55924125bb15eeeda8cffb6e6f";
+      sha256 = "194wdmgsc0qhdjx95ka7blly58r9bj2vc0bgls7jawzszfpsbx8x";
+    };
+  }
+  {
+    goPackagePath = "github.com/opencontainers/go-digest";
+    fetch = {
+      type = "git";
+      url = "https://github.com/opencontainers/go-digest";
+      rev = "c9281466c8b2f606084ac71339773efd177436e7";
+      sha256 = "1djdazssy27xn91pjhx3dgb0f11bnlzzbwkh7f8zwnpz011anasi";
+    };
+  }
+  {
+    goPackagePath = "github.com/opencontainers/runc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/opencontainers/runc";
+      rev = "89ab7f2ccc1e45ddf6485eaa802c35dcf321dfc8";
+      sha256 = "1rnaqcsww7plr430r4ksv9si4l91l25li0bwa1b03g3sn2shirk1";
+    };
+  }
+  {
+    goPackagePath = "github.com/openzipkin/zipkin-go-opentracing";
+    fetch = {
+      type = "git";
+      url = "https://github.com/openzipkin/zipkin-go-opentracing";
+      rev = "1cafbdfde94fbf2b373534764e0863aa3bd0bf7b";
+      sha256 = "1vpl3mpvhljzpnll67ip3m9aazy3dvgi57n7w3pn8kg3b7kr4rwj";
+    };
+  }
+  {
+    goPackagePath = "github.com/pierrec/lz4";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pierrec/lz4";
+      rev = "5c9560bfa9ace2bf86080bf40d46b34ae44604df";
+      sha256 = "0j74a3xc48ispj8sb9c2sd1h53q99ws0f2x827b5p86xlpam8xyj";
+    };
+  }
+  {
+    goPackagePath = "github.com/pierrec/xxHash";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pierrec/xxHash";
+      rev = "5a004441f897722c627870a981d02b29924215fa";
+      sha256 = "146ibrgvgh61jhbbv9wks0mabkci3s0m68sg6shmlv1yixkw6gja";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev = "645ef00459ed84a119197bfb8d8205042c6df63d";
+      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+    };
+  }
+  {
+    goPackagePath = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev = "792786c7400a136282c1664665ae0a8db921c6c2";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "c317fb74746eac4fc65fe3909195f4cf67c5562a";
+      sha256 = "1c3rqwkajkmhk5wh6agc5jnjbbfvpfxbiy8cprpw89khch428khp";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "fa8ad6fec33561be4280a8f0514318c79d7f6cb6";
+      sha256 = "11a7v1fjzhhwsl128znjcf5v7v6129xjgkdpym2lial4lac1dhm9";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "dd2f054febf4a6c00f2343686efb775948a8bff4";
+      sha256 = "0rhbgj51r105ax544mfg6wp4rsqpzn3776z1k82b21xwb3b51zr1";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "1878d9fbb537119d24b21ca07effd591627cd160";
+      sha256 = "0jqn5l31szmc0dv5invp5mdhndx3fcsda7zpy49zd7k95c1y20m7";
+    };
+  }
+  {
+    goPackagePath = "github.com/rcrowley/go-metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rcrowley/go-metrics";
+      rev = "1f30fe9094a513ce4c700b9a54458bbb0c96996c";
+      sha256 = "1hvbiaq4b6dqgjz6jkkxglfh9gf71zin6qsg508sh0r0ixfavrzj";
+    };
+  }
+  {
+    goPackagePath = "github.com/samuel/go-zookeeper";
+    fetch = {
+      type = "git";
+      url = "https://github.com/samuel/go-zookeeper";
+      rev = "1d7be4effb13d2d908342d349d71a284a7542693";
+      sha256 = "002s19109spms9ndfwykf3ryy3fnk7b56frxlqmmv37mlqgrd5v9";
+    };
+  }
+  {
+    goPackagePath = "github.com/satori/go.uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/satori/go.uuid";
+      rev = "5bf94b69c6b68ee1b541973bb8e1144db23a194b";
+      sha256 = "0l782l4srv36pj8pfgn61996d0vjifld4a569rbjwq5h14pd0c07";
+    };
+  }
+  {
+    goPackagePath = "github.com/shirou/gopsutil";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shirou/gopsutil";
+      rev = "c95755e4bcd7a62bb8bd33f3a597a7c7f35e2cf3";
+      sha256 = "0rzfwhvwh58w1isr6jxq222xih578dsscdsfbh6bg1bxgbkz0x1m";
+    };
+  }
+  {
+    goPackagePath = "github.com/soniah/gosnmp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/soniah/gosnmp";
+      rev = "f15472a4cd6f6ea7929e4c7d9f163c49f059924f";
+      sha256 = "1blhxq9sayfg7zih5rj0dg2qj9h10m6sbri57hxya9iz3jfgcx11";
+    };
+  }
+  {
+    goPackagePath = "github.com/streadway/amqp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/streadway/amqp";
+      rev = "63795daa9a446c920826655f26ba31c81c860fd6";
+      sha256 = "1v6xwskb4dqyy2q1r7k12f9wky7v6cfb4f1mx94sr3qvx37zg2yj";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/objx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/objx";
+      rev = "facf9a85c22f48d2f52f2380e4efce1768749a89";
+      sha256 = "19ynspzjdynbi85xw06mh8ad5j0qa1vryvxjgvbnyrr8rbm4vd8w";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "12b6f73e6084dad08a7c6e575284b177ecafbc71";
+      sha256 = "01f80s0q64pw5drfgqwwk1wfwwkvd2lhbs56lhhkff4ni83k73fd";
+    };
+  }
+  {
+    goPackagePath = "github.com/tidwall/gjson";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tidwall/gjson";
+      rev = "0623bd8fbdbf97cc62b98d15108832851a658e59";
+      sha256 = "0g6rhilcmqpdvjdds7ykzhrlsjx234chf73l8sjah0rsd03207k0";
+    };
+  }
+  {
+    goPackagePath = "github.com/tidwall/match";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tidwall/match";
+      rev = "173748da739a410c5b0b813b956f89ff94730b4c";
+      sha256 = "0a4hp323gnjam3nfxfljq7d24m7rgk5vxbscjmi3ik3ph78r5avg";
+    };
+  }
+  {
+    goPackagePath = "github.com/vjeantet/grok";
+    fetch = {
+      type = "git";
+      url = "https://github.com/vjeantet/grok";
+      rev = "d73e972b60935c7fec0b4ffbc904ed39ecaf7efe";
+      sha256 = "09p70h5inycwrw3dmn6c7lhx4m11fvw7449wzq1k5w2jcws7amd5";
+    };
+  }
+  {
+    goPackagePath = "github.com/wvanbergen/kafka";
+    fetch = {
+      type = "git";
+      url = "https://github.com/wvanbergen/kafka";
+      rev = "bc265fedb9ff5b5c5d3c0fdcef4a819b3523d3ee";
+      sha256 = "0x86gnkpsr6gsc6mk2312ay8yqrzscvvdra2knhvwgaws6rzvj2l";
+    };
+  }
+  {
+    goPackagePath = "github.com/wvanbergen/kazoo-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/wvanbergen/kazoo-go";
+      rev = "968957352185472eacb69215fa3dbfcfdbac1096";
+      sha256 = "07q37lmlc3vx620bklp93r368r73kgm2s9x7qcgcxk9701lqq7dc";
+    };
+  }
+  {
+    goPackagePath = "github.com/yuin/gopher-lua";
+    fetch = {
+      type = "git";
+      url = "https://github.com/yuin/gopher-lua";
+      rev = "66c871e454fcf10251c61bf8eff02d0978cae75a";
+      sha256 = "1srcibhsl29cy8qih132iqigl4ss303nfmglrgc583nj9kz9sf8j";
+    };
+  }
+  {
+    goPackagePath = "github.com/zensqlmonitor/go-mssqldb";
+    fetch = {
+      type = "git";
+      url = "https://github.com/zensqlmonitor/go-mssqldb";
+      rev = "ffe5510c6fa5e15e6d983210ab501c815b56b363";
+      sha256 = "079x8ms8lv5p6253ppaxva37k6w04xnd38y8763rr2giswxqzlkl";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "dc137beb6cce2043eb6b5f223ab8bf51c32459f4";
+      sha256 = "0kia3rd0g0vkb9pf102kbg1agr1xq27bi2shkpxy9l718yvy9jwd";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "a337091b0525af65de94df2eb7e98bd9962dcbe2";
+      sha256 = "11a6a3ah1f3jj6530q4hjqf79bv9fy62s5wgxpp28g8b3vlxxsyp";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "739734461d1c916b6c72a63d7efda2b27edb369f";
+      sha256 = "0b0yh28ap1q0b8myg0gw4p9d6m71ry0d3n4hiycvd8sgk327379a";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "506f9d5c962f284575e88337e7d9296d27e729d3";
+      sha256 = "1ghx5vv4zlkjzlx2gslvcwpvxjggpl6wz5n49nqxiz777psx218s";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/genproto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-genproto";
+      rev = "11c7f9e547da6db876260ce49ea7536985904c9b";
+      sha256 = "1qdda2b31qhli71xc2rscm7hf219gr2mals3n24kgv9svmw1cxkq";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/grpc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/grpc/grpc-go";
+      rev = "de2209a968d48e8970546c8a710189f7461370f7";
+      sha256 = "0jby05p1qhm4gik0ya9n14vhf9x83mxysd917k53x59jrwrkh9gr";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/asn1-ber.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/asn1-ber.v1";
+      rev = "4e86f4367175e39f69d9358a5f17b4dda270378d";
+      sha256 = "13p8s74kzklb5lklfpxwxb78rknihawv1civ4s9bfqx565010fwk";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/fatih/pool.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/fatih/pool.v2";
+      rev = "6e328e67893eb46323ad06f0e92cb9536babbabc";
+      sha256 = "1p1sljfpbg2bp4qv7ghvz1wcmmsbcfclsninxa97kr0v7na7jw5p";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/fsnotify.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/fsnotify.v1";
+      rev = "a8a77c9133d2d6fd8334f3260d06f60e8d80a5fb";
+      sha256 = "0912q06l6mrrrc7jj7hlrsbglklxyp67z1vnmvmcm04ck6hx8dlm";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/gorethink/gorethink.v3";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/gorethink/gorethink.v3";
+      rev = "7ab832f7b65573104a555d84a27992ae9ea1f659";
+      sha256 = "1pri52ac45aqf5a2kmsd4mfhyfbkd1snkjbvanrdgipikysxi696";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/ldap.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/ldap.v2";
+      rev = "8168ee085ee43257585e50c6441aadf54ecb2c9f";
+      sha256 = "1w0993i8bl8sap01gwm1v6hjp0rsanj2mbpyabwcwnns2g79n895";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/mgo.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/mgo.v2";
+      rev = "3f83fa5005286a7fe593b055f0d7771a7dce4655";
+      sha256 = "19vwb6qlcyh3nh6pkk0bynwmr5cmi6mm4hdz01lwb4ybnkzxryc7";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/olivere/elastic.v5";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/olivere/elastic.v5";
+      rev = "3113f9b9ad37509fe5f8a0e5e91c96fdc4435e26";
+      sha256 = "1zkwprs68q1r7pigb59n8zbw8610z9r1pi6r0s28kzdgiv30sfdm";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/tomb.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/tomb.v1";
+      rev = "dd632973f1e7218eb1089048e0798ec9ae7dceb8";
+      sha256 = "1lqmq1ag7s4b3gc3ddvr792c5xb5k6sfn0cchr3i2s7f1c231zjv";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "4c78c975fe7c825c6d1466c42be594d1d6f3aba6";
+      sha256 = "1ddwvmsfijgl09pbqrcx73fy5kh8y3888dd29lh7i50ds5a088cx";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/monitoring/uchiwa/bower-packages.nix b/nixpkgs/pkgs/servers/monitoring/uchiwa/bower-packages.nix
new file mode 100644
index 000000000000..40789fa34f8d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/uchiwa/bower-packages.nix
@@ -0,0 +1,25 @@
+# Generated by bower2nix v3.2.0 (https://github.com/rvl/bower2nix)
+{ fetchbower, buildEnv }:
+buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [
+  (fetchbower "uchiwa-web" "1.5.0" "1.5.0" "0z7g4nb7cm5w5l8w1856sbib15sx022mqpap9d49s6ppnn53vcs1")
+  (fetchbower "angular" "1.6.10" "~1.6.3" "0ag8xddsgxx5yka4wjq4ala4y6z3x2g1vc3x7a1n291fzz26p7ws")
+  (fetchbower "angular-bootstrap" "2.2.0" "~2.2.0" "11r2nlwp6xrim2y6lnrr8v064mx3bmlxchqpg1i803v9zxz3q53d")
+  (fetchbower "angular-cookies" "1.6.10" "~1.6.3" "0bjgmz5jnw06dfxhq9sajj62fk0b3v4j9p7nb45x8bl8rzkf25pn")
+  (fetchbower "angular-gravatar" "0.4.2" "~0.4.2" "14jrzvjwx64awh9z95054manp8qd57fvinqhmakipz5x12i7qrwi")
+  (fetchbower "angular-moment" "1.0.1" "~1.0.1" "0zkn52s9l15d6b5zfx52g5jpib23rpb637m0p1hzc429w5bbl0rj")
+  (fetchbower "angular-resource" "1.6.10" "~1.6.3" "1gplq8kd49qakk7ardg5xr5amwvspaz9n71kf8x49xfllda61rm0")
+  (fetchbower "angular-route" "1.6.10" "~1.6.3" "0vwbn7i45yvsn8c469nj141ahrn7iw85j7hy3vvhh2r373j94mai")
+  (fetchbower "angular-sanitize" "1.6.10" "~1.6.3" "066gsdl19s27w00wafg2skf5abdsdrlzhkcagkk1ma39dyqyl4i3")
+  (fetchbower "angular-toastr" "1.6.0" "1.6.0" "1szigf1m28bgpfyg8hbm5rffr5zi7wr9n73nc1fqhk0yqh7gzysh")
+  (fetchbower "angular-tools/ng-jsoneditor" "ea138469f157d8f2b54ec5b8dcf4b08a55b61459" "ea138469f157d8f2b54ec5b8dcf4b08a55b61459" "1j3vysr01niabc9fxcpixhcq1lyx2fr4q4wpmxhmiqki431h9hq8")
+  (fetchbower "angular-ua-parser" "0.0.2" "0.0.2" "0gb0vmwksnydlm6hklfq1n4ak2967wcmnx3cx9cgiv7v7vk3w2m9")
+  (fetchbower "bootstrap" "3.1.1" "3.1.1" "1a06mx1rw5h4wq89kqpa8g2pbiddm3p21dxq50jyi29sywd01ny4")
+  (fetchbower "bootstrap-sass-official" "3.1.1" "3.1.1" "1k6hhvsd75hdfrz8qcjzmb12c17fdn0h3l3l5k9wgd0rfhhfkyvd")
+  (fetchbower "fontawesome" "4.4.0" "~4.4.0" "09mrbik8i3skjwchn7ns2020bqmb51kbd3mqi59vh444s4az2sc7")
+  (fetchbower "highlightjs" "9.1.0" "~9.1.0" "0ld1da3h416a5j8v3v50rrpm4xwvvq8k8y2vwncvaqm9cqddz4s3")
+  (fetchbower "moment" "2.16.0" "~2.16.0" "1mji892i60f2aw3vhl6878acrcgh0ycn3r4af0ivnjf8az2b9n71")
+  (fetchbower "moment-picker" "0.9.11" "~0.9.7" "0p2g6rp2kcixydrga9lfihg4bxb598rvpi8n8l59mp549diy7vsb")
+  (fetchbower "ua-parser-js" "0.7.19" "~0.7.12" "0s1yaspccz234hm772hlybjsi0kndzwpjx5lzy3y1s4wfk248ks4")
+  (fetchbower "jsoneditor" "5.5.11" "~5.5.10" "1gfsf8jqnd3hb3r9s9246mg40iqxk2ix8k4bjnrsbfmg6cd3xw6x")
+  (fetchbower "jquery" "3.3.1" ">= 1.9.0" "1l891s3vgnpi1g8ksplid9jvrvnnv6lci8vraix4ssy50i264rkx")
+]; }
diff --git a/nixpkgs/pkgs/servers/monitoring/uchiwa/default.nix b/nixpkgs/pkgs/servers/monitoring/uchiwa/default.nix
new file mode 100644
index 000000000000..1de1edfa8e11
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/uchiwa/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchFromGitHub, buildBowerComponents, buildGoPackage, makeWrapper }:
+
+let
+  inherit (import ./src.nix) version sha256;
+  owner = "sensu";
+  repo = "uchiwa";
+
+  src = fetchFromGitHub {
+    inherit owner repo sha256;
+    rev    = "${version}";
+  };
+
+  backend = buildGoPackage {
+    name = "uchiwa-backend-${version}";
+    goPackagePath = "github.com/${owner}/${repo}";
+    inherit src;
+    postInstall = ''
+      mkdir $out
+      cp go/src/github.com/sensu/uchiwa/public/index.html $out/
+    '';
+  };
+
+  frontend = buildBowerComponents {
+    name = "uchiwa-frontend-${version}";
+    generated = ./bower-packages.nix;
+    inherit src;
+  };
+
+in stdenv.mkDerivation rec {
+  name = "uchiwa-${version}";
+
+  inherit src;
+
+  buildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    mkdir -p $out/bin $out/public
+    makeWrapper ${backend.bin}/bin/uchiwa $out/bin/uchiwa \
+      --add-flags "-p $out/public"
+    ln -s ${backend.out}/index.html $out/public/index.html
+    ln -s ${frontend.out}/bower_components $out/public/bower_components
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A Dashboard for the sensu monitoring framework";
+    homepage    = http://sensuapp.org/;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/uchiwa/src.nix b/nixpkgs/pkgs/servers/monitoring/uchiwa/src.nix
new file mode 100644
index 000000000000..cf5376318b45
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/uchiwa/src.nix
@@ -0,0 +1,4 @@
+{
+    version = "1.5.0-1";
+    sha256  = "05idwiv47zav46wi1hfly6rylpw8qryr12xlz47ic04ggdlga13b";
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/uchiwa/update.sh b/nixpkgs/pkgs/servers/monitoring/uchiwa/update.sh
new file mode 100755
index 000000000000..10da7f8adbf9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/uchiwa/update.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl.bin git.out nix jq.out nodePackages.bower2nix
+
+set -euo pipefail
+IFS=$'\n\t'
+
+# set -x
+
+REPO=sensu/uchiwa
+VERSION=0.0.1
+SHA="1111111111111111111111111111111111111111111111111111"
+DIR=$(pwd)
+
+write_src() {
+  cat <<_EOF > $DIR/src.nix
+{
+    version = "${VERSION}";
+    sha256  = "${SHA}";
+}
+_EOF
+}
+
+LATEST_VERSION=$(curl https://api.github.com/repos/${REPO}/tags -s | jq '.[0]' -r | jq .name -r)
+echo "Latest version: ${LATEST_VERSION}"
+
+VERSION=${1:-${LATEST_VERSION}}
+echo "Updating to: ${VERSION}"
+
+TOP=$(git rev-parse --show-toplevel)
+
+cd $(dirname $0)
+
+write_src
+pushd $TOP >/dev/null
+SHA=$(nix-prefetch-url -A uchiwa.src)
+popd >/dev/null
+write_src
+
+curl https://raw.githubusercontent.com/${REPO}/${VERSION}/bower.json -s > bower.json
+rm -f bower-packages.nix
+bower2nix bower.json $DIR/bower-packages.nix
+rm -f bower.json
diff --git a/nixpkgs/pkgs/servers/monitoring/zabbix/2.0.nix b/nixpkgs/pkgs/servers/monitoring/zabbix/2.0.nix
new file mode 100644
index 000000000000..ce660fa6e88b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/zabbix/2.0.nix
@@ -0,0 +1,92 @@
+{ stdenv, fetchurl, pkgconfig, postgresql, curl, openssl, zlib
+, enableJabber ? false, minmay ? null }:
+
+assert enableJabber -> minmay != null;
+
+let
+
+  version = "2.0.21";
+  branch = "2.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/zabbix/zabbix-${version}.tar.gz";
+    sha256 = "14g22x2zy5xqnh2xg23xy5gjd49d1i8pks7pkidwdwa9acwgfx71";
+  };
+
+  preConfigure =
+    ''
+      substituteInPlace ./configure \
+        --replace " -static" "" \
+        ${stdenv.lib.optionalString (stdenv.cc.libc != null) ''
+          --replace /usr/include/iconv.h ${stdenv.lib.getDev stdenv.cc.libc}/include/iconv.h
+        ''}
+    '';
+
+in
+
+{
+  recurseForDerivations = true;
+
+  server = stdenv.mkDerivation {
+    name = "zabbix-${version}";
+
+    inherit src preConfigure;
+
+    configureFlags = [
+      "--enable-agent"
+      "--enable-server"
+      "--with-postgresql"
+      "--with-libcurl"
+      "--with-gettext"
+    ] ++ stdenv.lib.optional enableJabber "--with-jabber=${minmay}";
+
+    postPatch = ''
+      sed -i -e 's/iksemel/minmay/g' configure src/libs/zbxmedia/jabber.c
+      sed -i \
+        -e '/^static ikstransport/,/}/d' \
+        -e 's/iks_connect_with\(.*\), &zbx_iks_transport/mmay_connect_via\1/' \
+        -e 's/iks/mmay/g' -e 's/IKS/MMAY/g' src/libs/zbxmedia/jabber.c
+    '';
+
+  nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ postgresql curl openssl zlib ];
+
+    postInstall =
+      ''
+        mkdir -p $out/share/zabbix
+        cp -prvd frontends/php $out/share/zabbix/php
+        mkdir -p $out/share/zabbix/db/data
+        cp -prvd database/postgresql/data.sql $out/share/zabbix/db/data/data.sql
+        cp -prvd database/postgresql/images.sql $out/share/zabbix/db/data/images_pgsql.sql
+        mkdir -p $out/share/zabbix/db/schema
+        cp -prvd database/postgresql/schema.sql $out/share/zabbix/db/schema/postgresql.sql
+      '';
+
+    meta = {
+      inherit branch;
+      description = "An enterprise-class open source distributed monitoring solution";
+      homepage = https://www.zabbix.com/;
+      license = "GPL";
+      maintainers = [ stdenv.lib.maintainers.eelco ];
+      platforms = stdenv.lib.platforms.linux;
+    };
+  };
+
+  agent = stdenv.mkDerivation {
+    name = "zabbix-agent-${version}";
+
+    inherit src preConfigure;
+
+    configureFlags = [ "--enable-agent" ];
+
+    meta = with stdenv.lib; {
+      inherit branch;
+      description = "An enterprise-class open source distributed monitoring solution (client-side agent)";
+      homepage = https://www.zabbix.com/;
+      license = licenses.gpl2;
+      maintainers = [ maintainers.eelco ];
+      platforms = platforms.linux;
+    };
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/zabbix/2.2.nix b/nixpkgs/pkgs/servers/monitoring/zabbix/2.2.nix
new file mode 100644
index 000000000000..ac0e6bb81f8b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/zabbix/2.2.nix
@@ -0,0 +1,104 @@
+{ stdenv, fetchurl, pkgconfig, postgresql, curl, openssl, zlib
+, net_snmp , libssh2, openldap
+, enableJabber ? false, minmay ? null
+, enableSnmp ? false
+, enableSsh ? false
+, enableLdap ? false
+}:
+
+assert enableJabber -> minmay != null;
+
+let
+
+  version = "2.2.20";
+  branch = "2.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/zabbix/zabbix-${version}.tar.gz";
+    sha256 = "00pfpyj3vydwx9dn0bklh1p5j0bp2awi4hvv4kgliyav8l0416hk";
+  };
+
+  preConfigure =
+    ''
+      substituteInPlace ./configure \
+        --replace " -static" "" \
+        ${stdenv.lib.optionalString (stdenv.cc.libc != null) ''
+          --replace /usr/include/iconv.h ${stdenv.lib.getDev stdenv.cc.libc}/include/iconv.h
+        ''}
+    '';
+
+in
+
+{
+  recurseForDerivations = true;
+
+  server = stdenv.mkDerivation {
+    name = "zabbix-${version}";
+
+    inherit src preConfigure;
+
+    configureFlags = [
+      "--enable-agent"
+      "--enable-server"
+      "--with-postgresql"
+      "--with-libcurl"
+      "--with-gettext"
+    ]
+    ++ stdenv.lib.optional enableJabber "--with-jabber=${minmay}"
+    ++ stdenv.lib.optional enableSnmp "--with-net-snmp"
+    ++ stdenv.lib.optional enableSsh "--with-ssh2=${libssh2.dev}"
+    ++ stdenv.lib.optional enableLdap "--with-ldap=${openldap.dev}";
+
+    postPatch = ''
+      sed -i -e 's/iksemel/minmay/g' configure src/libs/zbxmedia/jabber.c
+      sed -i \
+        -e '/^static ikstransport/,/}/d' \
+        -e 's/iks_connect_with\(.*\), &zbx_iks_transport/mmay_connect_via\1/' \
+        -e 's/iks/mmay/g' -e 's/IKS/MMAY/g' src/libs/zbxmedia/jabber.c
+    '';
+
+  nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ postgresql curl openssl zlib ]
+      ++ stdenv.lib.optional enableSnmp net_snmp
+      ++ stdenv.lib.optional enableSsh libssh2
+      ++ stdenv.lib.optional enableLdap openldap;
+
+    postInstall =
+      ''
+        mkdir -p $out/share/zabbix
+        cp -prvd frontends/php $out/share/zabbix/php
+        mkdir -p $out/share/zabbix/db/data
+        cp -prvd database/postgresql/data.sql $out/share/zabbix/db/data/data.sql
+        cp -prvd database/postgresql/images.sql $out/share/zabbix/db/data/images_pgsql.sql
+        mkdir -p $out/share/zabbix/db/schema
+        cp -prvd database/postgresql/schema.sql $out/share/zabbix/db/schema/postgresql.sql
+      '';
+
+    meta = {
+      inherit branch;
+      description = "An enterprise-class open source distributed monitoring solution";
+      homepage = https://www.zabbix.com/;
+      license = "GPL";
+      maintainers = [ stdenv.lib.maintainers.eelco ];
+      platforms = stdenv.lib.platforms.linux;
+    };
+  };
+
+  agent = stdenv.mkDerivation {
+    name = "zabbix-agent-${version}";
+
+    inherit src preConfigure;
+
+    configureFlags = [ "--enable-agent" ];
+
+    meta = with stdenv.lib; {
+      inherit branch;
+      description = "An enterprise-class open source distributed monitoring solution (client-side agent)";
+      homepage = https://www.zabbix.com/;
+      license = licenses.gpl2;
+      maintainers = [ maintainers.eelco ];
+      platforms = platforms.linux;
+    };
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/zabbix/3.4.nix b/nixpkgs/pkgs/servers/monitoring/zabbix/3.4.nix
new file mode 100644
index 000000000000..72e6fa55b003
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/zabbix/3.4.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, pcre, libiconv, openssl }:
+
+
+let
+
+  version = "3.4.8";
+  branch = "3.4";
+
+  src = fetchurl {
+    url = "https://netix.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/${version}/zabbix-${version}.tar.gz";
+    sha256 = "cec14993d1ec2c9d8c51f6608c9408620f27174db92edc2347bafa7b841ccc07";
+  };
+
+in
+
+{
+  agent = stdenv.mkDerivation {
+    name = "zabbix-agent-${version}";
+
+    inherit src;
+
+     configureFlags = [
+      "--enable-agent"
+      "--with-libpcre=${pcre.dev}"
+      "--with-iconv=${libiconv}"
+      "--with-openssl=${openssl.dev}"
+    ];
+    buildInputs = [ pcre libiconv openssl ];
+
+    meta = with stdenv.lib; {
+      inherit branch;
+      description = "An enterprise-class open source distributed monitoring solution (client-side agent)";
+      homepage = https://www.zabbix.com/;
+      license = licenses.gpl2;
+      maintainers = [ maintainers.eelco ];
+      platforms = platforms.linux;
+    };
+  };
+
+}
+
diff --git a/nixpkgs/pkgs/servers/monitoring/zabbix/default.nix b/nixpkgs/pkgs/servers/monitoring/zabbix/default.nix
new file mode 100644
index 000000000000..4b6bd5e0b250
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/zabbix/default.nix
@@ -0,0 +1,75 @@
+{ stdenv, fetchurl, pkgconfig, postgresql, curl, openssl, zlib }:
+
+let
+
+  version = "1.8.22";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/zabbix/zabbix-${version}.tar.gz";
+    sha256 = "0cjj3c4j4b9sl3hgh1fck330z9q0gz2k68g227y0paal6k6f54g7";
+  };
+
+  preConfigure =
+    ''
+      substituteInPlace ./configure \
+        --replace " -static" "" \
+        ${stdenv.lib.optionalString (stdenv.cc.libc != null) ''
+          --replace /usr/include/iconv.h ${stdenv.lib.getDev stdenv.cc.libc}/include/iconv.h
+        ''}
+    '';
+
+in
+
+{
+
+  server = stdenv.mkDerivation {
+    name = "zabbix-${version}";
+
+    inherit src preConfigure;
+
+    configureFlags = [
+      "--enable-agent"
+      "--enable-server"
+      "--with-pgsql"
+      "--with-libcurl"
+    ];
+
+  nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ postgresql curl openssl zlib ];
+
+    postInstall =
+      ''
+        mkdir -p $out/share/zabbix
+        cp -prvd frontends/php $out/share/zabbix/php
+        mkdir -p $out/share/zabbix/db/data
+        cp -prvd create/data/*.sql $out/share/zabbix/db/data
+        mkdir -p $out/share/zabbix/db/schema
+        cp -prvd create/schema/*.sql $out/share/zabbix/db/schema
+      '';
+
+    meta = {
+      description = "An enterprise-class open source distributed monitoring solution";
+      homepage = https://www.zabbix.com/;
+      license = "GPL";
+      maintainers = [ stdenv.lib.maintainers.eelco ];
+      platforms = stdenv.lib.platforms.linux;
+    };
+  };
+
+  agent = stdenv.mkDerivation {
+    name = "zabbix-agent-${version}";
+
+    inherit src preConfigure;
+
+    configureFlags = [ "--enable-agent" ];
+
+    meta = with stdenv.lib; {
+      description = "An enterprise-class open source distributed monitoring solution (client-side agent)";
+      homepage = https://www.zabbix.com/;
+      license = licenses.gpl2;
+      maintainers = [ maintainers.eelco ];
+      platforms = platforms.linux;
+    };
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/monitoring/zipkin/default.nix b/nixpkgs/pkgs/servers/monitoring/zipkin/default.nix
new file mode 100644
index 000000000000..4c3479d8662e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/monitoring/zipkin/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchurl, makeWrapper, jre}:
+stdenv.mkDerivation rec {
+  version = "1.28.1";
+  name = "zipkin-server-${version}";
+  src = fetchurl {
+    url = "https://search.maven.org/remotecontent?filepath=io/zipkin/java/zipkin-server/${version}/zipkin-server-${version}-exec.jar";
+    sha256 = "02369fkv0kbl1isq6y26fh2zj5wxv3zck522m5wypsjlcfcw2apa";
+  };
+  buildInputs = [ makeWrapper ];
+
+  buildCommand =
+  ''
+    mkdir -p $out/share/java
+    cp ${src} $out/share/java/zipkin-server-${version}-exec.jar
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/zipkin-server \
+      --add-flags "-cp $out/share/java/zipkin-server-${version}-exec.jar org.springframework.boot.loader.JarLauncher"
+  '';
+  meta = with stdenv.lib; {
+    description = "Zipkin distributed tracing system";
+    homepage = https://zipkin.io/;
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.hectorj ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mpd/clientlib.nix b/nixpkgs/pkgs/servers/mpd/clientlib.nix
new file mode 100644
index 000000000000..d8aed78e28ae
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mpd/clientlib.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, meson, ninja, fixDarwinDylibNames }:
+
+stdenv.mkDerivation rec {
+  version = "2.16";
+  name = "libmpdclient-${version}";
+
+  src = fetchFromGitHub {
+    owner  = "MusicPlayerDaemon";
+    repo   = "libmpdclient";
+    rev    = "v${version}";
+    sha256 = "0kd76pcf8pvmzl4k3cbq68c16imwaak2zljsa1wwwgk6idyw6gb1";
+  };
+
+  nativeBuildInputs = [ meson ninja ]
+  ++ stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames;
+
+  meta = with stdenv.lib; {
+    description = "Client library for MPD (music player daemon)";
+    homepage = https://www.musicpd.org/libs/libmpdclient/;
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mpd/default.nix b/nixpkgs/pkgs/servers/mpd/default.nix
new file mode 100644
index 000000000000..740fd4739ab7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mpd/default.nix
@@ -0,0 +1,148 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, glib, systemd, boost, darwin
+, alsaSupport ? true, alsaLib
+, avahiSupport ? true, avahi, dbus
+, flacSupport ? true, flac
+, vorbisSupport ? true, libvorbis
+, madSupport ? true, libmad
+, id3tagSupport ? true, libid3tag
+, mikmodSupport ? true, libmikmod
+, shoutSupport ? true, libshout
+, sqliteSupport ? true, sqlite
+, curlSupport ? true, curl
+, audiofileSupport ? true, audiofile
+, bzip2Support ? true, bzip2
+, ffmpegSupport ? true, ffmpeg
+, fluidsynthSupport ? true, fluidsynth
+, zipSupport ? true, zziplib
+, samplerateSupport ? true, libsamplerate
+, mmsSupport ? true, libmms
+, mpg123Support ? true, mpg123
+, aacSupport ? true, faad2
+, lameSupport ? true, lame
+, pulseaudioSupport ? true, libpulseaudio
+, jackSupport ? true, libjack2
+, gmeSupport ? true, game-music-emu
+, icuSupport ? true, icu
+, clientSupport ? true, mpd_clientlib
+, opusSupport ? true, libopus
+, soundcloudSupport ? true, yajl
+, nfsSupport ? true, libnfs
+, smbSupport ? true, samba
+}:
+
+assert avahiSupport -> avahi != null && dbus != null;
+
+let
+  opt = stdenv.lib.optional;
+  mkFlag = c: f: if c then "--enable-${f}" else "--disable-${f}";
+  major = "0.20";
+  minor = "23";
+
+in stdenv.mkDerivation rec {
+  name = "mpd-${version}";
+  version = "${major}${if minor == "" then "" else "." + minor}";
+
+  src = fetchFromGitHub {
+    owner  = "MusicPlayerDaemon";
+    repo   = "MPD";
+    rev    = "v${version}";
+    sha256 = "1z1pdgiddimnmck0ardrpxkvgk1wn9zxri5wfv5ppasbb7kfm350";
+  };
+
+  patches = [ ./x86.patch ];
+
+  buildInputs = [ glib boost ]
+    ++ opt stdenv.isDarwin darwin.apple_sdk.frameworks.CoreAudioKit
+    ++ opt stdenv.isLinux systemd
+    ++ opt (stdenv.isLinux && alsaSupport) alsaLib
+    ++ opt avahiSupport avahi
+    ++ opt avahiSupport dbus
+    ++ opt flacSupport flac
+    ++ opt vorbisSupport libvorbis
+    # using libmad to decode mp3 files on darwin is causing a segfault -- there
+    # is probably a solution, but I'm disabling it for now
+    ++ opt (!stdenv.isDarwin && madSupport) libmad
+    ++ opt id3tagSupport libid3tag
+    ++ opt mikmodSupport libmikmod
+    ++ opt shoutSupport libshout
+    ++ opt sqliteSupport sqlite
+    ++ opt curlSupport curl
+    ++ opt bzip2Support bzip2
+    ++ opt audiofileSupport audiofile
+    ++ opt ffmpegSupport ffmpeg
+    ++ opt fluidsynthSupport fluidsynth
+    ++ opt samplerateSupport libsamplerate
+    ++ opt mmsSupport libmms
+    ++ opt mpg123Support mpg123
+    ++ opt aacSupport faad2
+    ++ opt lameSupport lame
+    ++ opt zipSupport zziplib
+    ++ opt (!stdenv.isDarwin && pulseaudioSupport) libpulseaudio
+    ++ opt (!stdenv.isDarwin && jackSupport) libjack2
+    ++ opt gmeSupport game-music-emu
+    ++ opt icuSupport icu
+    ++ opt clientSupport mpd_clientlib
+    ++ opt opusSupport libopus
+    ++ opt soundcloudSupport yajl
+    ++ opt (!stdenv.isDarwin && nfsSupport) libnfs
+    ++ opt (!stdenv.isDarwin && smbSupport) samba;
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  enableParallelBuilding = true;
+
+  configureFlags =
+    [ (mkFlag (!stdenv.isDarwin && alsaSupport) "alsa")
+      (mkFlag flacSupport "flac")
+      (mkFlag vorbisSupport "vorbis")
+      (mkFlag vorbisSupport "vorbis-encoder")
+      (mkFlag (!stdenv.isDarwin && madSupport) "mad")
+      (mkFlag mikmodSupport "mikmod")
+      (mkFlag id3tagSupport "id3")
+      (mkFlag shoutSupport "shout")
+      (mkFlag sqliteSupport "sqlite")
+      (mkFlag curlSupport "curl")
+      (mkFlag audiofileSupport "audiofile")
+      (mkFlag bzip2Support "bzip2")
+      (mkFlag ffmpegSupport "ffmpeg")
+      (mkFlag fluidsynthSupport "fluidsynth")
+      (mkFlag zipSupport "zzip")
+      (mkFlag samplerateSupport "lsr")
+      (mkFlag mmsSupport "mms")
+      (mkFlag mpg123Support "mpg123")
+      (mkFlag aacSupport "aac")
+      (mkFlag lameSupport "lame-encoder")
+      (mkFlag (!stdenv.isDarwin && pulseaudioSupport) "pulse")
+      (mkFlag (!stdenv.isDarwin && jackSupport) "jack")
+      (mkFlag stdenv.isDarwin "osx")
+      (mkFlag icuSupport "icu")
+      (mkFlag gmeSupport "gme")
+      (mkFlag clientSupport "libmpdclient")
+      (mkFlag opusSupport "opus")
+      (mkFlag soundcloudSupport "soundcloud")
+      (mkFlag (!stdenv.isDarwin && nfsSupport) "libnfs")
+      (mkFlag (!stdenv.isDarwin && smbSupport) "smbclient")
+      "--enable-debug"
+      "--with-zeroconf=avahi"
+    ]
+    ++ opt stdenv.isLinux
+      "--with-systemdsystemunitdir=$(out)/etc/systemd/system";
+
+  NIX_LDFLAGS = ''
+    ${if shoutSupport then "-lshout" else ""}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A flexible, powerful daemon for playing music";
+    homepage    = http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ astsmtl fuuzetsu ehmry fpletz ];
+    platforms   = platforms.unix;
+
+    longDescription = ''
+      Music Player Daemon (MPD) is a flexible, powerful daemon for playing
+      music. Through plugins and libraries it can play a variety of sound
+      files while being controlled by its network protocol.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mpd/x86.patch b/nixpkgs/pkgs/servers/mpd/x86.patch
new file mode 100644
index 000000000000..3e4c036418d2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mpd/x86.patch
@@ -0,0 +1,12 @@
+--- a/src/decoder/plugins/FfmpegDecoderPlugin.cxx
++++ b/src/decoder/plugins/FfmpegDecoderPlugin.cxx
+@@ -20,8 +20,8 @@
+ /* necessary because libavutil/common.h uses UINT64_C */
+ #define __STDC_CONSTANT_MACROS
+ 
+-#include "lib/ffmpeg/Time.hxx"
+ #include "config.h"
++#include "lib/ffmpeg/Time.hxx"
+ #include "FfmpegDecoderPlugin.hxx"
+ #include "lib/ffmpeg/Domain.hxx"
+ #include "lib/ffmpeg/Error.hxx"
diff --git a/nixpkgs/pkgs/servers/mqtt/mosquitto/default.nix b/nixpkgs/pkgs/servers/mqtt/mosquitto/default.nix
new file mode 100644
index 000000000000..c5ece477ced6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mqtt/mosquitto/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchFromGitHub, fetchpatch, cmake, docbook_xsl, libxslt
+, openssl, libuuid, libwebsockets, c-ares, libuv }:
+
+stdenv.mkDerivation rec {
+  name = "mosquitto-${version}";
+  version = "1.5.4";
+
+  src = fetchFromGitHub {
+    owner  = "eclipse";
+    repo   = "mosquitto";
+    rev    = "v${version}";
+    sha256 = "0pb38y6m682xqrkzhp41mj54x5ic43761xzschgnw055mzksbgk2";
+  };
+
+  postPatch = ''
+    substituteInPlace man/manpage.xsl \
+      --replace /usr/share/xml/docbook/stylesheet/ ${docbook_xsl}/share/xml/
+
+    for f in {lib,lib/cpp,src}/CMakeLists.txt ; do
+      substituteInPlace $f --replace /sbin/ldconfig ldconfig
+    done
+
+    # the manpages are not generated when using cmake
+    pushd man
+    make
+    popd
+  '';
+
+  buildInputs = [ openssl libuuid libwebsockets c-ares libuv ];
+
+  nativeBuildInputs = [ cmake docbook_xsl libxslt ];
+
+  enableParallelBuilding = true;
+
+  cmakeFlags = [
+    "-DWITH_THREADING=ON"
+    "-DWITH_WEBSOCKETS=ON"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "An open source MQTT v3.1/3.1.1 broker";
+    homepage = http://mosquitto.org/;
+    license = licenses.epl10;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mxisd/0001-gradle.patch b/nixpkgs/pkgs/servers/mxisd/0001-gradle.patch
new file mode 100644
index 000000000000..55ff6ead22d4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mxisd/0001-gradle.patch
@@ -0,0 +1,22 @@
+--- a/build.gradle	2018-11-16 15:15:29.021469758 +0100
++++ b/build.gradle	2018-11-16 15:16:50.982289782 +0100
+@@ -64,7 +64,7 @@
+ 
+ buildscript {
+     repositories {
+-        mavenCentral()
++    REPLACE
+     }
+ 
+     dependencies {
+@@ -73,9 +73,7 @@
+ }
+ 
+ repositories {
+-    mavenCentral()
+-    maven { url "https://kamax.io/maven/releases/" }
+-    maven { url "https://kamax.io/maven/snapshots/" }
++REPLACE
+ }
+ 
+ dependencies {
diff --git a/nixpkgs/pkgs/servers/mxisd/default.nix b/nixpkgs/pkgs/servers/mxisd/default.nix
new file mode 100644
index 000000000000..0d3bc4f3e08b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mxisd/default.nix
@@ -0,0 +1,70 @@
+{ stdenv, fetchFromGitHub, jdk, jre, git, gradle_2_5, perl, makeWrapper, writeText }:
+
+let
+  name = "mxisd-${version}";
+  version = "1.2.0";
+  rev = "8c4ddd2e6526c1d2b284ba88cce3c2b926d99c62";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "kamax-matrix";
+    repo = "mxisd";
+    sha256 = "083plqg0rxsqwzyskin78wkmylhb7cqz37lpsa1zy56sxpdw1a3l";
+  };
+
+
+  deps = stdenv.mkDerivation {
+    name = "${name}-deps";
+    inherit src;
+    nativeBuildInputs = [ gradle_2_5 perl git ];
+
+    buildPhase = ''
+      export MXISD_BUILD_VERSION=${rev}
+      export GRADLE_USER_HOME=$(mktemp -d);
+      gradle --no-daemon build -x test
+    '';
+
+     # perl code mavenizes pathes (com.squareup.okio/okio/1.13.0/a9283170b7305c8d92d25aff02a6ab7e45d06cbe/okio-1.13.0.jar -> com/squareup/okio/okio/1.13.0/okio-1.13.0.jar)
+    installPhase = ''
+      find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
+        | sh
+    '';
+
+    dontStrip = true;
+
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "0shshn05nzv23shry1xpcgvqg59gx929n0qngpfjhbq0kp7px68m";
+  };
+
+in
+stdenv.mkDerivation {
+  inherit name src version;
+  nativeBuildInputs = [ gradle_2_5 perl makeWrapper ];
+  buildInputs = [ jre ];
+
+  patches = [ ./0001-gradle.patch ];
+
+  buildPhase = ''
+    export MXISD_BUILD_VERSION=${rev}
+    export GRADLE_USER_HOME=$(mktemp -d)
+
+    sed -ie "s#REPLACE#mavenLocal(); maven { url '${deps}' }#g" build.gradle
+    gradle --offline --no-daemon build -x test
+  '';
+
+  installPhase = ''
+    install -D build/libs/source.jar $out/lib/mxisd.jar
+    makeWrapper ${jre}/bin/java $out/bin/mxisd --add-flags "-jar $out/lib/mxisd.jar"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "a federated matrix identity server";
+    homepage = https://github.com/kamax-matrix/mxisd;
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ mguentner ];
+    platforms = platforms.all;
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/nas/default.nix b/nixpkgs/pkgs/servers/nas/default.nix
new file mode 100644
index 000000000000..86f75a21359d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nas/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, imake, bison, flex, gccmakedep
+, xproto, libXau, libXt, libXext, libXaw, libXpm, xorgcffiles }:
+
+let
+  pname = "nas";
+  version = "1.9.4";
+in stdenv.mkDerivation {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.src.tar.gz";
+    sha256 = "17dk0ckm6mp1ajc0cd6bwyi638ynw2f6bhbn7gynrs0wfmiyldng";
+  };
+
+  nativeBuildInputs = [ imake bison flex gccmakedep ];
+
+  buildInputs = [ xproto libXau libXt libXext libXaw libXpm ];
+
+  buildFlags = [ "WORLDOPTS=" "World" ];
+
+  installFlags = [ "LDLIBS=-lfl" "DESTDIR=${placeholder "out"}" ];
+
+  postInstall = ''
+    mv $out/${xorgcffiles}/* $out
+    rm -r $out/nix
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A network transparent, client/server audio transport system";
+    homepage = http://radscan.com/nas.html;
+    license = licenses.mit;
+    maintainers = [ maintainers.gnidorah ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nats-streaming-server/default.nix b/nixpkgs/pkgs/servers/nats-streaming-server/default.nix
new file mode 100644
index 000000000000..8270fa398214
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nats-streaming-server/default.nix
@@ -0,0 +1,26 @@
+{  buildGoPackage, fetchFromGitHub, lib  }:
+
+with lib;
+
+buildGoPackage rec {
+  name = "nats-streaming-server-${version}";
+  version = "0.11.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/nats-io/nats-streaming-server";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "nats-io";
+    repo = "nats-streaming-server";
+	sha256 = "0skkx3f7dpbf6nqpsbsk8ssn8hl55s9k76a5y5ksyqar5bdxvds5";
+  };
+
+  meta = {
+    description = "NATS Streaming System Server";
+    license = licenses.asl20;
+    maintainers = [ maintainers.swdunlop ];
+    homepage = https://nats.io/;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/neard/default.nix b/nixpkgs/pkgs/servers/neard/default.nix
new file mode 100644
index 000000000000..de317ada6e45
--- /dev/null
+++ b/nixpkgs/pkgs/servers/neard/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, autoreconfHook, pkgconfig, systemd, glib, dbus, libnl, pythonPackages }:
+
+stdenv.mkDerivation rec {
+  name = "neard-0.16";
+
+  src = fetchurl {
+    url = "https://git.kernel.org/pub/scm/network/nfc/neard.git/snapshot/${name}.tar.gz";
+    sha256 = "0bpdmyxvd3z54p95apz4bjb5jp8hbc04sicjapcryjwa8mh6pbil";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ systemd glib dbus libnl pythonPackages.python pythonPackages.wrapPython ];
+  pythonPath = [ pythonPackages.pygobject2 pythonPackages.dbus-python pythonPackages.pygtk ];
+
+  configureFlags = [ "--disable-debug" "--enable-tools" "--enable-ese" "--with-systemdsystemunitdir=$out/lib/systemd/system" ];
+
+  postInstall = ''
+    install -m 0755 tools/snep-send $out/bin/
+
+    install -D -m644 src/neard.service $out/lib/systemd/system/neard.service
+    install -D -m644 src/main.conf $out/etc/neard/main.conf
+
+    # INFO: the config option "--enable-test" would copy the apps to $out/lib/neard/test/ instead
+    install -d $out/lib/neard
+    install -m 0755 test/* $out/lib/neard/
+    wrapPythonProgramsIn $out/lib/neard "$out $pythonPath"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Near Field Communication manager";
+    homepage    = https://01.org/linux-nfc;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ tstrobel ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/news/leafnode/default.nix b/nixpkgs/pkgs/servers/news/leafnode/default.nix
new file mode 100644
index 000000000000..955547289bc6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/news/leafnode/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, pcre }:
+
+stdenv.mkDerivation rec {
+  name = "leafnode-2.0.0.alpha20121101a.12";
+
+  src = fetchurl {
+    url = "http://home.pages.de/~mandree/leafnode/beta/leafnode-2.0.0.alpha20121101a.tar.bz2";
+    sha256 = "096w4gxj08m3vwmyv4sxpmbl8dn6mzqfmrhc32jgyca6qzlrdin8";
+  };
+
+  configureFlags = [ "--enable-runas-user=nobody" ];
+
+  prePatch = ''
+    substituteInPlace Makefile.in --replace 02770 0770
+  '';
+
+  preConfigure = ''
+    # configure uses id to check environment; we don't want this check
+    sed -re 's/^ID[=].*/ID="echo whatever"/' -i configure
+  '';
+
+  postConfigure = ''
+      # The is_validfqdn is far too restrictive, and only allows
+      # Internet-facing servers to run.  In order to run leafnode via
+      # localhost only, we need to disable this check.
+      sed -i validatefqdn.c -e 's/int is_validfqdn(const char \*f) {/int is_validfqdn(const char *f) { return 1;/;'
+  '';
+
+  buildInputs = [ pcre];
+
+  meta = {
+    homepage = http://leafnode.sourceforge.net/;
+    description = "Leafnode implements a store & forward NNTP proxy";
+    license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nextcloud/default.nix b/nixpkgs/pkgs/servers/nextcloud/default.nix
new file mode 100644
index 000000000000..0d9533b30f25
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nextcloud/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  name = "nextcloud-${version}";
+  version = "15.0.0";
+
+  src = fetchurl {
+    url = "https://download.nextcloud.com/server/releases/${name}.tar.bz2";
+    sha256 = "0y7bk1588n5rmmranmmrkajh50074460hr4v052ahg9mf60wbc2v";
+  };
+
+  installPhase = ''
+    mkdir -p $out/
+    cp -R . $out/
+  '';
+
+  meta = {
+    description = "Sharing solution for files, calendars, contacts and more";
+    homepage = https://nextcloud.com;
+    maintainers = with stdenv.lib.maintainers; [ schneefux bachp globin fpletz ];
+    license = stdenv.lib.licenses.agpl3Plus;
+    platforms = with stdenv.lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nextcloud/news-updater.nix b/nixpkgs/pkgs/servers/nextcloud/news-updater.nix
new file mode 100644
index 000000000000..0fcb5047549d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nextcloud/news-updater.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, python3Packages, php }:
+
+python3Packages.buildPythonApplication rec {
+  name = "nextcloud-news-updater-${version}";
+  version = "10.0.1";
+
+  src = fetchurl {
+    url = "mirror://pypi/n/nextcloud_news_updater/nextcloud_news_updater-${version}.tar.gz";
+    sha256 = "14jj3w417wfsm1ki34d980b0s6vfn8i29g4c66qb2fizdq1d0z6q";
+  };
+
+  doCheck = false;
+
+  propagatedBuildInputs = [ php ];
+
+  meta = {
+    description = "Fast parallel feed updater for the Nextcloud news app";
+    homepage = https://github.com/nextcloud/news-updater;
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = with stdenv.lib.maintainers; [ schneefux ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/aerospike/default.nix b/nixpkgs/pkgs/servers/nosql/aerospike/default.nix
new file mode 100644
index 000000000000..c5290709b625
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/aerospike/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, libtool, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  name = "aerospike-server-${version}";
+  version = "4.2.0.4";
+
+  src = fetchFromGitHub {
+    owner = "aerospike";
+    repo = "aerospike-server";
+    rev = version;
+    sha256 = "1vqi3xir4l57v62q1ns3713vajxffs6crss8fpvbcs57p7ygx3s7";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ autoconf automake libtool ];
+  buildInputs = [ openssl zlib ];
+
+  preBuild = ''
+    patchShebangs build/gen_version
+    substituteInPlace build/gen_version --replace 'git describe' 'echo ${version}'
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/udf
+    cp      target/Linux-x86_64/bin/asd $out/bin/asd
+    cp -dpR modules/lua-core/src        $out/share/udf/lua
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Flash-optimized, in-memory, NoSQL database";
+    homepage = http://aerospike.com/;
+    license = licenses.agpl3;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/apache-jena/binary.nix b/nixpkgs/pkgs/servers/nosql/apache-jena/binary.nix
new file mode 100644
index 000000000000..f3d5d121c387
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/apache-jena/binary.nix
@@ -0,0 +1,38 @@
+{stdenv, fetchurl, java, makeWrapper}:
+let
+  s = # Generated upstream information
+  rec {
+    baseName="apache-jena";
+    version = "3.7.0";
+    name="${baseName}-${version}";
+    url="http://archive.apache.org/dist/jena/binaries/apache-jena-${version}.tar.gz";
+    sha256 = "12w125hlhcib23cckk77cx7p9rzs57dbmmn90f7v8107d437j4mq";
+  };
+  buildInputs = [
+    makeWrapper
+  ];
+in
+stdenv.mkDerivation {
+  inherit (s) name version;
+  inherit buildInputs;
+  src = fetchurl {
+    inherit (s) url sha256;
+  };
+  installPhase = ''
+    cp -r . "$out"
+    for i in "$out"/bin/*; do
+      wrapProgram "$i" --prefix "PATH" : "${java}/bin/"
+    done
+  '';
+  meta = {
+    inherit (s) version;
+    description = ''RDF database'';
+    license = stdenv.lib.licenses.asl20;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+    homepage = http://jena.apache.org;
+    downloadPage = "http://archive.apache.org/dist/jena/binaries/";
+    updateWalker = true;
+    downloadURLRegexp = "apache-jena-.*[.]tar[.]gz\$";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-binary.nix b/nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-binary.nix
new file mode 100644
index 000000000000..63b222529a86
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-binary.nix
@@ -0,0 +1,41 @@
+{stdenv, fetchurl, java, makeWrapper}:
+let
+  s = # Generated upstream information
+  rec {
+    baseName="apache-jena-fuseki";
+    version = "3.9.0";
+    name="${baseName}-${version}";
+    url="http://archive.apache.org/dist/jena/binaries/apache-jena-fuseki-${version}.tar.gz";
+    sha256 = "1kf524j7wmvbjrr3grrhfddv3c3niddhj2f6m7hz9pqvf7nykvi4";
+  };
+  buildInputs = [
+    makeWrapper
+  ];
+in
+stdenv.mkDerivation {
+  inherit (s) name version;
+  inherit buildInputs;
+  src = fetchurl {
+    inherit (s) url sha256;
+  };
+  installPhase = ''
+    cp -r . "$out"
+    ln -s "$out"/{fuseki-server,fuseki} "$out/bin"
+    for i in "$out"/bin/*; do
+      wrapProgram "$i" \
+        --prefix "PATH" : "${java}/bin/" \
+        --set-default "FUSEKI_HOME" "$out" \
+        ;
+    done
+  '';
+  meta = {
+    inherit (s) version;
+    description = ''SPARQL server'';
+    license = stdenv.lib.licenses.asl20;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+    homepage = http://jena.apache.org;
+    downloadPage = "http://archive.apache.org/dist/jena/binaries/";
+    downloadURLRegexp = "apache-jena-fuseki-.*[.]tar[.]gz\$";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-binary.upstream b/nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-binary.upstream
new file mode 100644
index 000000000000..a18675347d58
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-binary.upstream
@@ -0,0 +1,4 @@
+name apache-jena-fuseki
+attribute apache-jena-fuseki
+target fuseki-binary.nix
+minimize_overwrite
diff --git a/nixpkgs/pkgs/servers/nosql/arangodb/default.nix b/nixpkgs/pkgs/servers/nosql/arangodb/default.nix
new file mode 100644
index 000000000000..12684eab551a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/arangodb/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub
+, openssl, zlib, readline, cmake, python }:
+
+let
+in stdenv.mkDerivation rec {
+  version = "3.3.19";
+  name    = "arangodb-${version}";
+
+  src = fetchFromGitHub {
+    repo = "arangodb";
+    owner = "arangodb";
+    rev = "v${version}";
+    sha256 = "1qg4lqnn5x0xsmkq41mjj301mfh76r8ys1rkzhinxlq30jld3155";
+  };
+
+  buildInputs = [
+    openssl zlib readline python
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  postPatch = ''
+    sed -ie 's!/bin/echo!echo!' 3rdParty/V8/v*/gypfiles/*.gypi
+  '';
+
+  configureFlagsArray = [ "--with-openssl-lib=${openssl.out}/lib" ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=strict-overflow";
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/arangodb/arangodb;
+    description = "A native multi-model database with flexible data models for documents, graphs, and key-values";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.flosse ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/cassandra/2.1.nix b/nixpkgs/pkgs/servers/nosql/cassandra/2.1.nix
new file mode 100644
index 000000000000..d73e242a9422
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/cassandra/2.1.nix
@@ -0,0 +1,6 @@
+{ callPackage, ... } @ args:
+
+callPackage ./generic.nix (args // {
+  version = "2.1.20";
+  sha256 = "0ik7a4jg3s3xnyrj1sa0rvbh066fv1y2202l7cv6nbca72pgyl6a";
+})
diff --git a/nixpkgs/pkgs/servers/nosql/cassandra/2.2.nix b/nixpkgs/pkgs/servers/nosql/cassandra/2.2.nix
new file mode 100644
index 000000000000..88c361e6a91f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/cassandra/2.2.nix
@@ -0,0 +1,6 @@
+{ callPackage, ... } @ args:
+
+callPackage ./generic.nix (args // {
+  version = "2.2.13";
+  sha256 = "19jryhjkh5jsgp6jlz2v28vwm5dks8i7mshsv3s2fpnl6147paaq";
+})
diff --git a/nixpkgs/pkgs/servers/nosql/cassandra/3.0.nix b/nixpkgs/pkgs/servers/nosql/cassandra/3.0.nix
new file mode 100644
index 000000000000..a1aad75ce3f6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/cassandra/3.0.nix
@@ -0,0 +1,6 @@
+{ callPackage, ... } @ args:
+
+callPackage ./generic.nix (args // {
+  version = "3.0.17";
+  sha256 = "0568r5xdy78pl29zby5g4m9qngf29cb9222sc1q1wisapb7zkl2p";
+})
diff --git a/nixpkgs/pkgs/servers/nosql/cassandra/3.11.nix b/nixpkgs/pkgs/servers/nosql/cassandra/3.11.nix
new file mode 100644
index 000000000000..5ca268166e03
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/cassandra/3.11.nix
@@ -0,0 +1,6 @@
+{ callPackage, ... } @ args:
+
+callPackage ./generic.nix (args // {
+  version = "3.11.3";
+  sha256 = "1fp2sm8v7dpp7iym39c7dh1fmi25x462amgzizl93c21rdq0cbnq";
+})
diff --git a/nixpkgs/pkgs/servers/nosql/cassandra/generic.nix b/nixpkgs/pkgs/servers/nosql/cassandra/generic.nix
new file mode 100644
index 000000000000..6ac087241ce0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/cassandra/generic.nix
@@ -0,0 +1,72 @@
+{ stdenv, fetchurl, python, makeWrapper, gawk, bash, getopt, procps
+, which, jre, version, sha256, ...
+}:
+
+let
+  libPath = stdenv.lib.makeLibraryPath [ stdenv.cc.cc ];
+  binPath = with stdenv.lib; makeBinPath ([
+    bash
+    getopt
+    gawk
+    which
+    jre
+    procps
+  ]);
+in
+
+stdenv.mkDerivation rec {
+  name = "cassandra-${version}";
+  inherit version;
+
+  src = fetchurl {
+    inherit sha256;
+    url = "mirror://apache/cassandra/${version}/apache-${name}-bin.tar.gz";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir $out
+    mv * $out
+
+    # Clean up documentation.
+    mkdir -p $out/share/doc/${name}
+    mv $out/CHANGES.txt \
+       $out/LICENSE.txt \
+       $out/NEWS.txt \
+       $out/NOTICE.txt \
+       $out/javadoc \
+       $out/share/doc/${name}
+
+    if [[ -d $out/doc ]]; then
+      mv "$out/doc/"* $out/share/doc/${name}
+      rmdir $out/doc
+    fi
+
+    for cmd in bin/cassandra bin/nodetool bin/sstablekeys \
+      bin/sstableloader bin/sstableupgrade \
+      tools/bin/cassandra-stress tools/bin/cassandra-stressd \
+      tools/bin/sstablemetadata tools/bin/sstableofflinerelevel \
+      tools/bin/token-generator tools/bin/sstablelevelreset; do
+
+      # check if file exists because some bin tools don't exist across all
+      # cassandra versions
+      if [ -f $out/$cmd ]; then
+        wrapProgram $out/$cmd \
+          --suffix-each LD_LIBRARY_PATH : ${libPath} \
+          --prefix PATH : ${binPath} \
+          --set JAVA_HOME ${jre}
+      fi
+    done
+
+    wrapProgram $out/bin/cqlsh --prefix PATH : ${python}/bin
+    '';
+
+  meta = with stdenv.lib; {
+    homepage = http://cassandra.apache.org/;
+    description = "A massively scalable open source NoSQL database";
+    platforms = platforms.unix;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ cransom ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/eventstore/default.nix b/nixpkgs/pkgs/servers/nosql/eventstore/default.nix
new file mode 100644
index 000000000000..1d3240fae716
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/eventstore/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchFromGitHub, git, mono, v8 }:
+
+# There are some similarities with the pinta derivation. We should
+# have a helper to make it easy to package these Mono apps.
+
+stdenv.mkDerivation rec {
+  name = "EventStore-${version}";
+  version = "4.1.1";
+  src = fetchFromGitHub {
+    owner  = "EventStore";
+    repo   = "EventStore";
+    rev    = "oss-v${version}";
+    sha256 = "1069ncb9ps1wi71yw1fzkfd9rfsavccw8xj3a3miwd9x72w8636f";
+  };
+
+  buildPhase = ''
+    mkdir -p src/libs/x64/nixos
+    pushd src/EventStore.Projections.v8Integration
+    cc -o ../libs/x64/nixos/libjs1.so -fPIC -lv8 -shared -std=c++0x *.cpp
+    popd
+
+    patchShebangs build.sh
+    ./build.sh ${version} release nixos
+  '';
+
+  installPhase = ''
+    mkdir -p $out/{bin,lib/eventstore/clusternode}
+    cp -r bin/clusternode/* $out/lib/eventstore/clusternode/
+    cat > $out/bin/clusternode << EOF
+    #!${stdenv.shell}
+    exec ${mono}/bin/mono $out/lib/eventstore/clusternode/EventStore.ClusterNode.exe "\$@"
+    EOF
+    chmod +x $out/bin/clusternode
+  '';
+
+  nativeBuildInputs = [ git ];
+  buildInputs = [ v8 mono ];
+
+  phases = [ "unpackPhase" "buildPhase" "installPhase" ];
+  dontStrip = true;
+
+  meta = {
+    homepage = https://geteventstore.com/;
+    description = "Event sourcing database with processing logic in JavaScript";
+    license = stdenv.lib.licenses.bsd3;
+    maintainers = with stdenv.lib.maintainers; [ puffnfresh ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/influxdb/default.nix b/nixpkgs/pkgs/servers/nosql/influxdb/default.nix
new file mode 100644
index 000000000000..a47553b975e3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/influxdb/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoPackage, fetchFromGitHub, }:
+
+buildGoPackage rec {
+  name = "influxdb-${version}";
+  version = "1.6.3";
+
+  src = fetchFromGitHub {
+    owner = "influxdata";
+    repo = "influxdb";
+    rev = "v${version}";
+    sha256 = "0xf16liapllk8qnw0vsy1ja4if1xlazwwaa4p0r5j7bny5lxm7zy";
+  };
+
+  buildFlagsArray = [ ''-ldflags=
+    -X main.version=${version}
+  '' ];
+
+  goPackagePath = "github.com/influxdata/influxdb";
+
+  excludedPackages = "test";
+
+  # Generated with dep2nix (for 1.6.3) / nix2go (for 1.4.1).
+  goDeps = ./. + "/deps-${version}.nix";
+
+  meta = with lib; {
+    description = "An open-source distributed time series database";
+    license = licenses.mit;
+    homepage = https://influxdb.com/;
+    maintainers = with maintainers; [ offline zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/influxdb/deps-1.4.1.nix b/nixpkgs/pkgs/servers/nosql/influxdb/deps-1.4.1.nix
new file mode 100644
index 000000000000..edda6ff7c7dc
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/influxdb/deps-1.4.1.nix
@@ -0,0 +1,227 @@
+[
+    {
+        goPackagePath = "collectd.org";
+        fetch = {
+            type = "git";
+            url = "https://github.com/collectd/go-collectd";
+            rev = "e84e8af5356e7f47485bbc95c96da6dd7984a67e";
+            sha256 = "0cfxg8iz7bdy3d74cqjns7x7lyrma5lkrqqpqk79a2gk0g2bhmnd";
+        };
+    }
+    {
+        goPackagePath = "github.com/bmizerany/pat";
+        fetch = {
+            type = "git";
+            url = "https://github.com/bmizerany/pat";
+            rev = "c068ca2f0aacee5ac3681d68e4d0a003b7d1fd2c";
+            sha256 = "02ayddkp2b22rixw5jldw3kb6762zzkg5zhxwcv9v9yp0x39qw6r";
+        };
+    }
+    {
+        goPackagePath = "github.com/boltdb/bolt";
+        fetch = {
+            type = "git";
+            url = "https://github.com/boltdb/bolt";
+            rev = "4b1ebc1869ad66568b313d0dc410e2be72670dda";
+            sha256 = "1narpch9fc2f4yj8asb981gyq7b3z6p41xb635xh2k75yv5g024w";
+        };
+    }
+    {
+        goPackagePath = "github.com/BurntSushi/toml";
+        fetch = {
+            type = "git";
+            url = "https://github.com/BurntSushi/toml";
+            rev = "a368813c5e648fee92e5f6c30e3944ff9d5e8895";
+            sha256 = "1sjxs2lwc8jpln80s4rlzp7nprbcljhy5mz4rf9995gq93wqnym5";
+        };
+    }
+    {
+        goPackagePath = "github.com/cespare/xxhash";
+        fetch = {
+            type = "git";
+            url = "https://github.com/cespare/xxhash";
+            rev = "1b6d2e40c16ba0dfce5c8eac2480ad6e7394819b";
+            sha256 = "1h7dym9fmk7rwrrc26lcwi7wmf4y4rxgg7byivg55yia9wlhy00m";
+        };
+    }
+    {
+        goPackagePath = "github.com/dgrijalva/jwt-go";
+        fetch = {
+            type = "git";
+            url = "https://github.com/dgrijalva/jwt-go";
+            rev = "24c63f56522a87ec5339cc3567883f1039378fdb";
+            sha256 = "1xjb3cj9qa66dk6sfrlggfm4a66qirqrp4qds90xzjj5sx51j4zk";
+        };
+    }
+  {
+        goPackagePath = "github.com/dgryski/go-bits";
+        fetch = {
+            type = "git";
+            url = "https://github.com/dgryski/go-bits";
+            rev = "2ad8d707cc05b1815ce6ff2543bb5e8d8f9298ef";
+            sha256 = "08mxwa4c77dgpvz2ygwd0pc929qxwff95y680mjjgbvj8yifiag2";
+        };
+    }
+    {
+        goPackagePath = "github.com/dgryski/go-bitstream";
+        fetch = {
+            type = "git";
+            url = "https://github.com/dgryski/go-bitstream";
+            rev = "7d46cd22db7004f0cceb6f7975824b560cf0e486";
+            sha256 = "1k9l16y7l2mkfvnp2ydv9cqly8179wqd20am4zy0q77qcsawkksx";
+        };
+    }
+    {
+        goPackagePath = "github.com/gogo/protobuf";
+        fetch = {
+            type = "git";
+            url = "https://github.com/gogo/protobuf";
+            rev = "1c2b16bc280d6635de6c52fc1471ab962dc36ec9";
+            sha256 = "0h9vkfy3ydz0d6x72853yg49r9k54cgjnlv6a7v12gzqw47p941i";
+        };
+    }
+    {
+        goPackagePath = "github.com/golang/snappy";
+        fetch = {
+            type = "git";
+            url = "https://github.com/golang/snappy";
+            rev = "d9eb7a3d35ec988b8585d4a0068e462c27d28380";
+            sha256 = "0wynarlr1y8sm9y9l29pm9dgflxriiialpwn01066snzjxnpmbyn";
+        };
+    }
+    {
+        goPackagePath = "github.com/influxdata/influxql";
+        fetch = {
+            type = "git";
+            url = "https://github.com/influxdata/influxql";
+            rev = "3921ab7858b6af8443fe0bef06b52608be72852c";
+            sha256 = "182ja5a9njlklavh5hzf7p06913pznp7j3chkrp0qwxj3jxysi2d";
+        };
+    }
+    {
+        goPackagePath = "github.com/influxdata/usage-client";
+        fetch = {
+            type = "git";
+            url = "https://github.com/influxdata/usage-client";
+            rev = "6d3895376368aa52a3a81d2a16e90f0f52371967";
+            sha256 = "0a5adnid42f9vpckgcpkj7v60fh147j7zlg1rhxcpq5vkw698ifl";
+        };
+    }
+    {
+        goPackagePath = "github.com/influxdata/yamux";
+        fetch = {
+            type = "git";
+            url = "https://github.com/influxdata/yamux";
+            rev = "1f58ded512de5feabbe30b60c7d33a7a896c5f16";
+            sha256 = "08y1lgcyyaa8zrg24ck64b5dfassgb2pp1fb9x5lw9q16fb170bx";
+        };
+    }
+    {
+        goPackagePath = "github.com/influxdata/yarpc";
+        fetch = {
+            type = "git";
+            url = "https://github.com/influxdata/yarpc";
+            rev = "036268cdec22b7074cd6d50cc6d7315c667063c7";
+            sha256 = "12xxwr451ya5h7kv7lg6lnwk04xazyxzv2g7bcgx9zifafxlhpxf";
+        };
+    }
+    {
+        goPackagePath = "github.com/jwilder/encoding";
+        fetch = {
+            type = "git";
+            url = "https://github.com/jwilder/encoding";
+            rev = "27894731927e49b0a9023f00312be26733744815";
+            sha256 = "0g4sdc5wj50js2hhrdcb7iik3wpd87gc0ivy4gwn49m8nxlpl7w3";
+        };
+    }
+    {
+        goPackagePath = "github.com/peterh/liner";
+        fetch = {
+            type = "git";
+            url = "https://github.com/peterh/liner";
+            rev = "88609521dc4b6c858fd4c98b628147da928ce4ac";
+            sha256 = "0jacb2fqgiccb98v1875j5xvj01l1z2laga1kgr8lhd0nl22r96k";
+        };
+    }
+    {
+        goPackagePath = "github.com/philhofer/fwd";
+        fetch = {
+            type = "git";
+            url = "https://github.com/philhofer/fwd";
+            rev = "1612a298117663d7bc9a760ae20d383413859798";
+            sha256 = "155l0nvvblpx0fy683q6bzins7csh8fw7yf64hbia8hc7wh0gjdl";
+        };
+    }
+    {
+        goPackagePath = "github.com/retailnext/hllpp";
+        fetch = {
+            type = "git";
+            url = "https://github.com/retailnext/hllpp";
+            rev = "38a7bb71b483e855d35010808143beaf05b67f9d";
+            sha256 = "0zpq5yjqprzdw9ll6g9sqp8nzwkhjh4ngzhx5mxahmpajgnzz7a8";
+        };
+    }
+    {
+        goPackagePath = "github.com/tinylib/msgp";
+        fetch = {
+            type = "git";
+            url = "https://github.com/tinylib/msgp";
+            rev = "ad0ff2e232ad2e37faf67087fb24bf8d04a8ce20";
+            sha256 = "1j3sqsmq8v40dp1qcv2dsy3aq3yl088hpd4fnrrnnl53g3a18p4d";
+        };
+    }
+    {
+        goPackagePath = "github.com/uber-go/atomic";
+        fetch = {
+            type = "git";
+            url = "https://github.com/uber-go/atomic";
+            rev = "74ca5ec650841aee9f289dce76e928313a37cbc6";
+            sha256 = "14a4k5z4p2iig6sf7as5ps1frdyzcr67b9bff0by4z1vg4nrxi7h";
+        };
+    }
+    {
+        goPackagePath = "github.com/uber-go/zap";
+        fetch = {
+            type = "git";
+            url = "https://github.com/uber-go/zap";
+            rev = "fbae0281ffd546fa6d1959fec6075ac5da7fb577";
+            sha256 = "0ys6cb2h3r0vbly36v8zqkqsfc5y7fjsw2qmvx5fvjh35ih4w738";
+        };
+    }
+    {
+        goPackagePath = "github.com/xlab/treeprint";
+        fetch = {
+            type = "git";
+            url = "https://github.com/xlab/treeprint";
+            rev = "06dfc6fa17cdde904617990a0c2d89e3e332dbb3";
+            sha256 = "04v2glr8wsgs8gr5qbcxyqn9s6569lmgqb7rcs6bkmdnr79xpwl5";
+        };
+    }
+    {
+        goPackagePath = "golang.org/x/crypto";
+        fetch = {
+            type = "git";
+            url = "https://go.googlesource.com/crypto";
+            rev = "9477e0b78b9ac3d0b03822fd95422e2fe07627cd";
+            sha256 = "1qcqai6nf1q50z9ga7r4ljnrh1qz49kwlcqpri4bknx732lqq0v5";
+        };
+    }
+    {
+        goPackagePath = "golang.org/x/sys";
+        fetch = {
+            type = "git";
+            url = "https://go.googlesource.com/sys";
+            rev = "1e2299c37cc91a509f1b12369872d27be0ce98a6";
+            sha256 = "1nh8v330pcwgk3h6nvfi12rlydl16v9ajv4s1giyx8wnfq8h6fm1";
+        };
+    }
+    {
+        goPackagePath = "golang.org/x/text";
+        fetch = {
+            type = "git";
+            url = "https://go.googlesource.com/text";
+            rev = "a71fd10341b064c10f4a81ceac72bcf70f26ea34";
+            sha256 = "1igxqrgnnb6983fl0yck0xal2hwnkcgbslr7cxyrg7a65vawd0q1";
+        };
+    }
+]
diff --git a/nixpkgs/pkgs/servers/nosql/influxdb/deps-1.6.3.nix b/nixpkgs/pkgs/servers/nosql/influxdb/deps-1.6.3.nix
new file mode 100644
index 000000000000..a2f4dfaeb8d6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/influxdb/deps-1.6.3.nix
@@ -0,0 +1,444 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "collectd.org";
+    fetch = {
+      type = "git";
+      url = "https://github.com/collectd/go-collectd";
+      rev =  "2ce144541b8903101fb8f1483cc0497a68798122";
+      sha256 = "0rr9rnc777jk27a7yxhdb7vgkj493158a8k6q44x51s30dkp78x3";
+    };
+  }
+  {
+    goPackagePath  = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev =  "a368813c5e648fee92e5f6c30e3944ff9d5e8895";
+      sha256 = "1sjxs2lwc8jpln80s4rlzp7nprbcljhy5mz4rf9995gq93wqnym5";
+    };
+  }
+  {
+    goPackagePath  = "github.com/RoaringBitmap/roaring";
+    fetch = {
+      type = "git";
+      url = "https://github.com/RoaringBitmap/roaring";
+      rev =  "d6540aab65a17321470b1661bfc52da1823871e9";
+      sha256 = "1lsrz7j55blalpp95vgz214b35sjf8nfmrw3fxybdl4xipk2ssdj";
+    };
+  }
+  {
+    goPackagePath  = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev =  "4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9";
+      sha256 = "1hrybsql68xw57brzj805xx2mghydpdiysv3gbhr7f5wlxj2514y";
+    };
+  }
+  {
+    goPackagePath  = "github.com/bmizerany/pat";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bmizerany/pat";
+      rev =  "6226ea591a40176dd3ff9cd8eff81ed6ca721a00";
+      sha256 = "0qjkm7169y6pybwh0s02fjjk251isa2b367xqfzrwvl6cy4yzfxp";
+    };
+  }
+  {
+    goPackagePath  = "github.com/boltdb/bolt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/boltdb/bolt";
+      rev =  "2f1ce7a837dcb8da3ec595b1dac9d0632f0f99e8";
+      sha256 = "0z7j06lijfi4y30ggf2znak2zf2srv2m6c68ar712wd2ys44qb3r";
+    };
+  }
+  {
+    goPackagePath  = "github.com/cespare/xxhash";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cespare/xxhash";
+      rev =  "5c37fe3735342a2e0d01c87a907579987c8936cc";
+      sha256 = "02aii7z46sasagw816zz3v0gzax1z5d1hkjslz7ng25386p0gzk1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev =  "346938d642f2ec3594ed81d874461961cd0faa76";
+      sha256 = "0d4jfmak5p6lb7n2r6yvf5p1zcw0l8j74kn55ghvr7zr7b7axm6c";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dgrijalva/jwt-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgrijalva/jwt-go";
+      rev =  "06ea1031745cb8b3dab3f6a236daf2b0aa468b7e";
+      sha256 = "08m27vlms74pfy5z79w67f9lk9zkx6a9jd68k3c4msxy75ry36mp";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dgryski/go-bitstream";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgryski/go-bitstream";
+      rev =  "9f22ccc24718d9643ac427c8c897ae1a01575783";
+      sha256 = "0x3hbsrn7qafhhjz6lgyc1pd1p5kgkrkbccvsr6yygkl785h5lhn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/glycerine/go-unsnap-stream";
+    fetch = {
+      type = "git";
+      url = "https://github.com/glycerine/go-unsnap-stream";
+      rev =  "62a9a9eb44fd8932157b1a8ace2149eff5971af6";
+      sha256 = "1ray7p4q3vv5zn9w5xs7m9kjh68b2ck98nh25mxhfiwl9jxkabrc";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev =  "1adfc126b41513cc696b209667c8656ea7aac67c";
+      sha256 = "1j7azzlnihcvnd1apw5zr0bz30h7n0gyimqqkgc76vzb1n5dpi7m";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev =  "925541529c1fa6821df4e44ce2723319eb2be768";
+      sha256 = "1d3zjvhl115l23xakj0014qpjchivlg098h10v5nfirkk1i9f9sa";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/snappy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/snappy";
+      rev =  "d9eb7a3d35ec988b8585d4a0068e462c27d28380";
+      sha256 = "0wynarlr1y8sm9y9l29pm9dgflxriiialpwn01066snzjxnpmbyn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/google/go-cmp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-cmp";
+      rev =  "3af367b6b30c263d47e8895973edcca9a49cf029";
+      sha256 = "1fbv0x27k9sn8svafc0hjwsnckk864lv4yi7bvzrxvmd3d5hskds";
+    };
+  }
+  {
+    goPackagePath  = "github.com/influxdata/influxql";
+    fetch = {
+      type = "git";
+      url = "https://github.com/influxdata/influxql";
+      rev =  "a7267bff5327e316e54c54342b0bc9598753e3d5";
+      sha256 = "0mqc9xki5l9yfbb0dqjb417cmv3pca1bj71m90dkshladr2wlcg3";
+    };
+  }
+  {
+    goPackagePath  = "github.com/influxdata/usage-client";
+    fetch = {
+      type = "git";
+      url = "https://github.com/influxdata/usage-client";
+      rev =  "6d3895376368aa52a3a81d2a16e90f0f52371967";
+      sha256 = "0a5adnid42f9vpckgcpkj7v60fh147j7zlg1rhxcpq5vkw698ifl";
+    };
+  }
+  {
+    goPackagePath  = "github.com/influxdata/yamux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/influxdata/yamux";
+      rev =  "1f58ded512de5feabbe30b60c7d33a7a896c5f16";
+      sha256 = "08y1lgcyyaa8zrg24ck64b5dfassgb2pp1fb9x5lw9q16fb170bx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/influxdata/yarpc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/influxdata/yarpc";
+      rev =  "f0da2db138cad2fb425541938fc28dd5a5bc6918";
+      sha256 = "1g71flc8s8xas7vmaiwv0425paii1akc7jsdqsgxkhyfxx2gvib0";
+    };
+  }
+  {
+    goPackagePath  = "github.com/jsternberg/zap-logfmt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jsternberg/zap-logfmt";
+      rev =  "ac4bd917e18a4548ce6e0e765b29a4e7f397b0b6";
+      sha256 = "0pqp2nsqvsq8kqc7l14340lrvl03715s12bag63kdbi25s8fcdkx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/jwilder/encoding";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jwilder/encoding";
+      rev =  "b4e1701a28efcc637d9afcca7d38e495fe909a09";
+      sha256 = "195js5njz86k096p3ggglgpc7rw3801mpqzdfwfr3miflhnp7nwg";
+    };
+  }
+  {
+    goPackagePath  = "github.com/klauspost/compress";
+    fetch = {
+      type = "git";
+      url = "https://github.com/klauspost/compress";
+      rev =  "6c8db69c4b49dd4df1fff66996cf556176d0b9bf";
+      sha256 = "00h2lpqcyc3pg2xk3q4a9cgyv0vkn15bx0hb725j5zbkr9vah23x";
+    };
+  }
+  {
+    goPackagePath  = "github.com/klauspost/cpuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/klauspost/cpuid";
+      rev =  "ae7887de9fa5d2db4eaa8174a7eff2c1ac00f2da";
+      sha256 = "178apw89g8nsd7w6mbdylxn956h3iig6rbw3bkivp6lplhb5dvq4";
+    };
+  }
+  {
+    goPackagePath  = "github.com/klauspost/crc32";
+    fetch = {
+      type = "git";
+      url = "https://github.com/klauspost/crc32";
+      rev =  "cb6bfca970f6908083f26f39a79009d608efd5cd";
+      sha256 = "0q4yr4isgmph1yf1vq527lpmid7vqv56q7vxh3gkp5679fb90q6n";
+    };
+  }
+  {
+    goPackagePath  = "github.com/klauspost/pgzip";
+    fetch = {
+      type = "git";
+      url = "https://github.com/klauspost/pgzip";
+      rev =  "0bf5dcad4ada2814c3c00f996a982270bb81a506";
+      sha256 = "0dgp2iljvhibzxia1g3lsfg4bjmfh4kf0bfrmfi7sd49hwhrvk7s";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev =  "6ca4dbf54d38eea1a992b3c722a76a5d1c4cb25c";
+      sha256 = "0zs92j2cqaw9j8qx1sdxpv3ap0rgbs0vrvi72m40mg8aa36gd39w";
+    };
+  }
+  {
+    goPackagePath  = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev =  "3247c84500bff8d9fb6d579d800f20b3e091582c";
+      sha256 = "12hcych25wf725zxdkpnyx4wa0gyxl8v4m8xmhdmmaki9bbmqd0d";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mschoch/smat";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mschoch/smat";
+      rev =  "90eadee771aeab36e8bf796039b8c261bebebe4f";
+      sha256 = "141saq6d4z3c7v3jw45zy4gn6wwjlyralqygjff1fzvz1gkvimk3";
+    };
+  }
+  {
+    goPackagePath  = "github.com/opentracing/opentracing-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/opentracing/opentracing-go";
+      rev =  "328fceb7548c744337cd010914152b74eaf4c4ab";
+      sha256 = "1w6s42n9glqwif6awyiapr7sh1wjvkxan41qhc1yi555byyw200k";
+    };
+  }
+  {
+    goPackagePath  = "github.com/paulbellamy/ratecounter";
+    fetch = {
+      type = "git";
+      url = "https://github.com/paulbellamy/ratecounter";
+      rev =  "524851a93235ac051e3540563ed7909357fe24ab";
+      sha256 = "0z4c61ac6v8mpnr9z37d91h1cf8v9psja5jfdxmsf69r1b7qr4f9";
+    };
+  }
+  {
+    goPackagePath  = "github.com/peterh/liner";
+    fetch = {
+      type = "git";
+      url = "https://github.com/peterh/liner";
+      rev =  "6106ee4fe3e8435f18cd10e34557e5e50f0e792a";
+      sha256 = "178s1amw5r60lywgmh24pd2ljim0b05fdfsm4c8px22fkycmn1qr";
+    };
+  }
+  {
+    goPackagePath  = "github.com/philhofer/fwd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/philhofer/fwd";
+      rev =  "bb6d471dc95d4fe11e432687f8b70ff496cf3136";
+      sha256 = "1pg84khadh79v42y8sjsdgfb54vw2kzv7hpapxkifgj0yvcp30g2";
+    };
+  }
+  {
+    goPackagePath  = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev =  "661e31bf844dfca9aeba15f27ea8aa0d485ad212";
+      sha256 = "0r9sr3m57ks7rc5bbghl0gy9wxlznzmz331xdp42zlgk6g774xcn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev =  "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c";
+      sha256 = "19y4ywsivhpxj7ikf2j0gm9k3cmyw37qcbfi78n526jxcc7kw998";
+    };
+  }
+  {
+    goPackagePath  = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev =  "e4aa40a9169a88835b849a6efb71e05dc04b88f0";
+      sha256 = "0m1n616d694jca0qjwjn5ci7scfgm2jpi94dhi356arm9lhda4jc";
+    };
+  }
+  {
+    goPackagePath  = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev =  "54d17b57dd7d4a3aa092476596b3f8a933bde349";
+      sha256 = "1b5218hi6k9i637k6xc7ynpll577zbnrhjm9jr2iczy3j0rr4rvr";
+    };
+  }
+  {
+    goPackagePath  = "github.com/retailnext/hllpp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/retailnext/hllpp";
+      rev =  "101a6d2f8b52abfc409ac188958e7e7be0116331";
+      sha256 = "1dyyjyrscd3d22jhh2pbn67c6nzva0v069215sjjmj313k1xzmj3";
+    };
+  }
+  {
+    goPackagePath  = "github.com/tinylib/msgp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tinylib/msgp";
+      rev =  "b2b6a672cf1e5b90748f79b8b81fc8c5cf0571a1";
+      sha256 = "0pypfknghg1hcjjrqz3f1riaylk6hcxn9h0qyzynb74rp0qmlxjc";
+    };
+  }
+  {
+    goPackagePath  = "github.com/willf/bitset";
+    fetch = {
+      type = "git";
+      url = "https://github.com/willf/bitset";
+      rev =  "d860f346b89450988a379d7d705e83c58d1ea227";
+      sha256 = "18419ip5mnblnyx2rjixad90dhjb1x2kaiidr7zk9b3qci799rh0";
+    };
+  }
+  {
+    goPackagePath  = "github.com/xlab/treeprint";
+    fetch = {
+      type = "git";
+      url = "https://github.com/xlab/treeprint";
+      rev =  "f3a15cfd24bf976c724324cb6846a8b54b88b639";
+      sha256 = "0fgbdyk2mfj5vh8902sga33w5gw7q0f1if4nqx631ca33fd6pfbn";
+    };
+  }
+  {
+    goPackagePath  = "go.uber.org/atomic";
+    fetch = {
+      type = "git";
+      url = "https://github.com/uber-go/atomic";
+      rev =  "8474b86a5a6f79c443ce4b2992817ff32cf208b8";
+      sha256 = "166shnjw8rvjvksymi2gqw1ygsbxlq15xb10j2dx5rwy4y4asq8x";
+    };
+  }
+  {
+    goPackagePath  = "go.uber.org/multierr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/uber-go/multierr";
+      rev =  "3c4937480c32f4c13a875a1829af76c98ca3d40a";
+      sha256 = "1slfc6syvw8cvr6rbrjsy6ja5w8gsx0f8aq8qm16rp2x5c2pj07w";
+    };
+  }
+  {
+    goPackagePath  = "go.uber.org/zap";
+    fetch = {
+      type = "git";
+      url = "https://github.com/uber-go/zap";
+      rev =  "35aad584952c3e7020db7b839f6b102de6271f89";
+      sha256 = "0n79ir7jcr7s51j85swji7an0jgy1w5dxg1g68j722rmpbvsagwv";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev =  "c3a3ad6d03f7a915c0f7e194b7152974bb73d287";
+      sha256 = "0x18275g5xlaw55bpx8hdna66d2hpbcw6hs0pxf1kmvfds6gzn6n";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev =  "92b859f39abd2d91a854c9f9c4621b2f5054a92d";
+      sha256 = "1nzbay48k53pxa1sh102v571k6pa57540p0bzcil4qgan47yxba6";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev =  "1d60e4601c6fd243af51cc01ddf169918a5407ca";
+      sha256 = "046jlanz2lkxq1r57x9bl6s4cvfqaic6p2xybsj8mq1120jv4rs6";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "d8e400bc7db4870d786864138af681469693d18c";
+      sha256 = "08d23f9gjarp63dw0wj54nlqh3x2lqnchzkw8n5d7ik3wy7qy4yf";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev =  "f21a4dfb5e38f5895301dc265a8def02365cc3d0";
+      sha256 = "0r6x6zjzhr8ksqlpiwm5gdd7s209kwk5p4lw54xjvz10cs3qlq19";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/time";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/time";
+      rev =  "26559e0f760e39c24d730d3224364aef164ee23f";
+      sha256 = "00fx6m59cjbi7y0ri4a57q1zs6r310xbg5yqns5kfm2cax0dkmnf";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/servers/nosql/mongodb/default.nix b/nixpkgs/pkgs/servers/nosql/mongodb/default.nix
new file mode 100644
index 000000000000..55b4b641d153
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/mongodb/default.nix
@@ -0,0 +1,103 @@
+{ stdenv, fetchurl, fetchpatch, scons, boost, gperftools, pcre-cpp, snappy
+, zlib, libyamlcpp, sasl, openssl, libpcap, Security
+}:
+
+# Note:
+# The command line tools are written in Go as part of a different package (mongodb-tools)
+
+with stdenv.lib;
+
+let version = "3.4.10";
+    system-libraries = [
+      "pcre"
+      #"asio" -- XXX use package?
+      #"wiredtiger"
+      "boost"
+      "snappy"
+      "zlib"
+      #"valgrind" -- mongodb only requires valgrind.h, which is vendored in the source.
+      #"stemmer"  -- not nice to package yet (no versioning, no makefile, no shared libs).
+      "yaml"
+    ] ++ optionals stdenv.isLinux [ "tcmalloc" ];
+
+in stdenv.mkDerivation rec {
+  name = "mongodb-${version}";
+
+  src = fetchurl {
+    url = "https://fastdl.mongodb.org/src/mongodb-src-r${version}.tar.gz";
+    sha256 = "1wz2mhl9z0b1bdkg6m8v8mvw9k60mdv5ybq554xn3yjj9z500f24";
+  };
+
+  nativeBuildInputs = [ scons ];
+  buildInputs = [
+    sasl boost gperftools pcre-cpp snappy
+    zlib libyamlcpp sasl openssl.dev openssl.out libpcap
+  ] ++ stdenv.lib.optionals stdenv.isDarwin [ Security ];
+
+  patches =
+    [
+      # MongoDB keeps track of its build parameters, which tricks nix into
+      # keeping dependencies to build inputs in the final output.
+      # We remove the build flags from buildInfo data.
+      ./forget-build-dependencies.patch
+      (fetchpatch {
+        url = https://projects.archlinux.org/svntogit/community.git/plain/trunk/boost160.patch?h=packages/mongodb;
+        name = "boost160.patch";
+        sha256 = "0bvsf3499zj55pzamwjmsssr6x63w434944w76273fr5rxwzcmh8";
+      })
+    ];
+
+  postPatch = ''
+    # fix environment variable reading
+    substituteInPlace SConstruct \
+        --replace "env = Environment(" "env = Environment(ENV = os.environ,"
+  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+
+    substituteInPlace src/third_party/s2/s1angle.cc --replace drem remainder
+    substituteInPlace src/third_party/s2/s1interval.cc --replace drem remainder
+    substituteInPlace src/third_party/s2/s2cap.cc --replace drem remainder
+    substituteInPlace src/third_party/s2/s2latlng.cc --replace drem remainder
+    substituteInPlace src/third_party/s2/s2latlngrect.cc --replace drem remainder
+  '' + stdenv.lib.optionalString stdenv.isi686 ''
+
+    # don't fail by default on i686
+    substituteInPlace src/mongo/db/storage/storage_options.h \
+      --replace 'engine("wiredTiger")' 'engine("mmapv1")'
+  '';
+
+  NIX_CFLAGS_COMPILE = stdenv.lib.optional stdenv.cc.isClang "-Wno-unused-command-line-argument";
+
+  sconsFlags = [
+    "--release"
+    "--ssl"
+    #"--rocksdb" # Don't have this packaged yet
+    "--wiredtiger=${if stdenv.is64bit then "on" else "off"}"
+    "--js-engine=mozjs"
+    "--use-sasl-client"
+    "--disable-warnings-as-errors"
+    "VARIANT_DIR=nixos" # Needed so we don't produce argument lists that are too long for gcc / ld
+  ] ++ map (lib: "--use-system-${lib}") system-libraries;
+
+  preBuild = ''
+    sconsFlags+=" CC=$CC"
+    sconsFlags+=" CXX=$CXX"
+  '';
+
+  preInstall = ''
+    mkdir -p $out/lib
+  '';
+  prefixKey = "--prefix=";
+
+  enableParallelBuilding = true;
+
+  hardeningEnable = [ "pie" ];
+
+  meta = {
+    description = "A scalable, high-performance, open source NoSQL database";
+    homepage = http://www.mongodb.org;
+    license = licenses.agpl3;
+
+    maintainers = with maintainers; [ bluescreen303 offline wkennington cstrahan ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/mongodb/forget-build-dependencies.patch b/nixpkgs/pkgs/servers/nosql/mongodb/forget-build-dependencies.patch
new file mode 100644
index 000000000000..ca2c043deb2d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/mongodb/forget-build-dependencies.patch
@@ -0,0 +1,17 @@
+--- a/site_scons/mongo_scons_utils.py
++++ b/site_scons/mongo_scons_utils.py
+@@ -84,14 +84,11 @@
+ def default_buildinfo_environment_data():
+     return (
+         ('distmod', '$MONGO_DISTMOD', True, True,),
+         ('distarch', '$MONGO_DISTARCH', True, True,),
+         ('cc', '$CC_VERSION', True, False,),
+-        ('ccflags', '$CCFLAGS', True, False,),
+         ('cxx', '$CXX_VERSION', True, False,),
+-        ('cxxflags', '$CXXFLAGS', True, False,),
+-        ('linkflags', '$LINKFLAGS', True, False,),
+         ('target_arch', '$TARGET_ARCH', True, True,),
+         ('target_os', '$TARGET_OS', True, False,),
+     )
+ 
+ # If you want buildInfo and --version to be relatively empty, set
diff --git a/nixpkgs/pkgs/servers/nosql/neo4j/default.nix b/nixpkgs/pkgs/servers/nosql/neo4j/default.nix
new file mode 100644
index 000000000000..dd84ae5732d0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/neo4j/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, makeWrapper, jre8, which, gawk }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  name = "neo4j-${version}";
+  version = "3.4.10";
+
+  src = fetchurl {
+    url = "https://neo4j.com/artifact.php?name=neo4j-community-${version}-unix.tar.gz";
+    sha256 = "0wxcwsnnwk08w3zaz67aa93ysrl61lsy41xynq1sy6z31a7gx9jr";
+  };
+
+  buildInputs = [ makeWrapper jre8 which gawk ];
+
+  installPhase = ''
+    mkdir -p "$out/share/neo4j"
+    cp -R * "$out/share/neo4j"
+
+    mkdir -p "$out/bin"
+    for NEO4J_SCRIPT in neo4j neo4j-admin neo4j-import neo4j-shell cypher-shell
+    do
+        makeWrapper "$out/share/neo4j/bin/$NEO4J_SCRIPT" \
+            "$out/bin/$NEO4J_SCRIPT" \
+            --prefix PATH : "${stdenv.lib.makeBinPath [ jre8 which gawk ]}" \
+            --set JAVA_HOME "$jre8"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A highly scalable, robust (fully ACID) native graph database";
+    homepage = http://www.neo4j.org/;
+    license = licenses.gpl3;
+
+    maintainers = [ maintainers.offline ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/redis/default.nix b/nixpkgs/pkgs/servers/nosql/redis/default.nix
new file mode 100644
index 000000000000..d6cade72a87e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/redis/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, lua }:
+
+stdenv.mkDerivation rec {
+  version = "5.0.3";
+  name = "redis-${version}";
+
+  src = fetchurl {
+    url = "http://download.redis.io/releases/${name}.tar.gz";
+    sha256 = "00iyv4ybcgm5xxcm85lg1p99q7xijm05cpadlxa65chpz3fv9472";
+  };
+
+  buildInputs = [ lua ];
+  makeFlags = "PREFIX=$(out)";
+
+  enableParallelBuilding = true;
+
+  doCheck = false; # needs tcl
+
+  meta = with stdenv.lib; {
+    homepage = https://redis.io;
+    description = "An open source, advanced key-value store";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.berdario ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/rethinkdb/default.nix b/nixpkgs/pkgs/servers/nosql/rethinkdb/default.nix
new file mode 100644
index 000000000000..d6ee407e3418
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/rethinkdb/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, fetchurl, which, m4
+, protobuf, boost, zlib, curl, openssl, icu, jemalloc, libtool
+, python2Packages, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  name = "rethinkdb-${version}";
+  version = "2.3.6";
+
+  src = fetchurl {
+    url = "https://download.rethinkdb.com/dist/${name}.tgz";
+    sha256 = "0a6wlgqa2flf87jrp4fq4y9aihwyhgwclmss56z03b8hd5k5j8f4";
+  };
+
+  patches = [
+    (fetchurl {
+        url = "https://github.com/rethinkdb/rethinkdb/commit/871bd3705a1f29c4ab07a096d562a4b06231a97c.patch";
+        sha256 = "05nagixlwnq3x7441fhll5vs70pxppbsciw8qjqp660bdb5m4jm1";
+    })
+  ];
+
+  postPatch = stdenv.lib.optionalString stdenv.isDarwin ''
+    sed -i 's/raise.*No Xcode or CLT version detected.*/version = "7.0.0"/' external/v8_3.30.33.16/build/gyp/pylib/gyp/xcode_emulation.py
+
+    # very meta
+    substituteInPlace mk/support/pkg/re2.sh --replace "-i '''" "-i"
+  '';
+
+  preConfigure = ''
+    export ALLOW_WARNINGS=1
+    patchShebangs .
+  '';
+
+  configureFlags = stdenv.lib.optionals (!stdenv.isDarwin) [
+    "--with-jemalloc"
+    "--lib-path=${jemalloc}/lib"
+  ];
+
+  buildInputs = [ protobuf boost zlib curl openssl icu makeWrapper ]
+    ++ stdenv.lib.optional (!stdenv.isDarwin) jemalloc
+    ++ stdenv.lib.optional stdenv.isDarwin libtool;
+
+  nativeBuildInputs = [ which m4 python2Packages.python ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    wrapProgram $out/bin/rethinkdb \
+      --prefix PATH ":" "${python2Packages.rethinkdb}/bin"
+  '';
+
+  meta = {
+    description = "An open-source distributed database built with love";
+    longDescription = ''
+      RethinkDB is built to store JSON documents, and scale to
+      multiple machines with very little effort. It has a pleasant
+      query language that supports really useful queries like table
+      joins and group by, and is easy to setup and learn.
+    '';
+    homepage    = http://www.rethinkdb.com;
+    license     = stdenv.lib.licenses.agpl3;
+    platforms   = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ thoughtpolice bluescreen303 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/riak-cs/2.1.1.nix b/nixpkgs/pkgs/servers/nosql/riak-cs/2.1.1.nix
new file mode 100644
index 000000000000..cf807e70596d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/riak-cs/2.1.1.nix
@@ -0,0 +1,69 @@
+{ stdenv, lib, fetchurl, unzip, erlang, git, wget, which, pam
+, Carbon ? null, Cocoa ? null }:
+
+stdenv.mkDerivation rec {
+  name = "riak_cs-2.1.1";
+
+  buildInputs = [
+    which unzip erlang git wget
+  ] ++ lib.optionals stdenv.isDarwin [ Carbon Cocoa ]
+    ++ lib.optional stdenv.isLinux [ pam ];
+
+  src = fetchurl {
+    url = "https://s3.amazonaws.com/downloads.basho.com/riak-cs/2.1/2.1.1/riak-cs-2.1.1.tar.gz";
+    sha256 = "115cac127aac6d759c1b429a52e0d18e491c0719a6530b1b88aa52c4efdbedd5";
+  };
+
+
+  postPatch = ''
+    sed -i deps/node_package/priv/base/env.sh \
+      -e 's@{{platform_data_dir}}@''${RIAK_DATA_DIR:-/var/db/riak-cs}@' \
+      -e 's@^RUNNER_SCRIPT_DIR=.*@RUNNER_SCRIPT_DIR='$out'/bin@' \
+      -e 's@^RUNNER_BASE_DIR=.*@RUNNER_BASE_DIR='$out'@' \
+      -e 's@^RUNNER_ETC_DIR=.*@RUNNER_ETC_DIR=''${RIAK_ETC_DIR:-/etc/riak-cs}@' \
+      -e 's@^RUNNER_LOG_DIR=.*@RUNNER_LOG_DIR=''${RIAK_LOG_DIR:-/var/log}@'
+
+    sed -i ./Makefile \
+      -e 's@rel: deps compile@rel: deps compile-src@'
+  '';
+
+  preBuild = ''
+    patchShebangs .
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    make locked-deps
+    make rel
+
+    runHook postBuild
+  '';
+
+  doCheck = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    mv rel/riak-cs/etc rel/riak-cs/riak-etc
+    mkdir -p rel/riak-cs/etc
+    mv rel/riak-cs/riak-etc rel/riak-cs/etc/riak-cs
+    mv rel/riak-cs/* $out
+
+    for prog in $out/bin/*; do
+      substituteInPlace $prog \
+        --replace '. "`cd \`dirname $0\` && /bin/pwd`/../lib/env.sh"' \
+                  ". $out/lib/env.sh"
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Dynamo inspired NoSQL DB by Basho with S3 compatibility";
+    platforms   = [ "x86_64-linux" "x86_64-darwin" ];
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ mdaiter ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/riak-cs/stanchion.nix b/nixpkgs/pkgs/servers/nosql/riak-cs/stanchion.nix
new file mode 100644
index 000000000000..1524ca207009
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/riak-cs/stanchion.nix
@@ -0,0 +1,65 @@
+{ stdenv, lib, fetchurl, unzip, erlang, git, wget, which, pam 
+, Carbon ? null, Cocoa ? null }:
+
+stdenv.mkDerivation rec {
+  name = "stanchion-2.1.1";
+
+  buildInputs = [
+    which unzip erlang git wget
+  ] ++ lib.optionals stdenv.isDarwin [ Carbon Cocoa ]
+    ++ lib.optional stdenv.isLinux [ pam ];
+
+  src = fetchurl {
+    url = "https://s3.amazonaws.com/downloads.basho.com/stanchion/2.1/2.1.1/stanchion-2.1.1.tar.gz";
+    sha256 = "1443arwgg7qvlx3msyg99qvvhck7qxphdjslcp494i60fhr2g8ja";
+  };
+
+
+  postPatch = ''
+    sed -i deps/node_package/priv/base/env.sh \
+      -e 's@{{platform_data_dir}}@''${RIAK_DATA_DIR:-/var/db/stanchion}@' \
+      -e 's@^RUNNER_SCRIPT_DIR=.*@RUNNER_SCRIPT_DIR='$out'/bin@' \
+      -e 's@^RUNNER_BASE_DIR=.*@RUNNER_BASE_DIR='$out'@' \
+      -e 's@^RUNNER_ETC_DIR=.*@RUNNER_ETC_DIR=''${RIAK_ETC_DIR:-/etc/stanchion}@' \
+      -e 's@^RUNNER_LOG_DIR=.*@RUNNER_LOG_DIR=''${RIAK_LOG_DIR:-/var/log}@'
+  '';
+
+  preBuild = ''
+    patchShebangs .
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    make rel
+
+    runHook postBuild
+  '';
+
+  doCheck = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    mv rel/stanchion/etc rel/stanchion/riak-etc
+    mkdir -p rel/stanchion/etc
+    mv rel/stanchion/riak-etc rel/stanchion/etc/stanchion
+    mv rel/stanchion/* $out
+
+    for prog in $out/bin/*; do
+      substituteInPlace $prog \
+        --replace '. "`cd \`dirname $0\` && /bin/pwd`/../lib/env.sh"' \
+                  ". $out/lib/env.sh"
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    maintainers = with maintainers; [ mdaiter ];
+    description = "Manager for Riak CS";
+    platforms   = [ "x86_64-linux" "x86_64-darwin" ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/riak/2.2.0.nix b/nixpkgs/pkgs/servers/nosql/riak/2.2.0.nix
new file mode 100644
index 000000000000..a09b4543cbbe
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/riak/2.2.0.nix
@@ -0,0 +1,97 @@
+{ stdenv, lib, fetchurl, unzip, erlang, which, pam }:
+
+let
+  solrName = "solr-4.10.4-yz-2.tgz";
+  yokozunaJarName = "yokozuna-3.jar";
+  yzMonitorJarName = "yz_monitor-1.jar";
+
+  srcs = {
+    riak = fetchurl {
+      url = "https://s3.amazonaws.com/downloads.basho.com/riak/2.2/2.2.0/riak-2.2.0.tar.gz";
+      sha256 = "0kl28bpyzajcllybili46jfr1schl45w5ysii187jr0ssgls2c9p";
+    };
+    solr = fetchurl {
+      url = "http://s3.amazonaws.com/files.basho.com/solr/${solrName}";
+      sha256 = "0fy5slnldn628gmr2kilyx606ph0iykf7pz6j0xjcc3wqvrixa2a";
+    };
+    yokozunaJar = fetchurl {
+      url = "http://s3.amazonaws.com/files.basho.com/yokozuna/${yokozunaJarName}";
+      sha256 = "17n6m100fz8affdcxsn4niw2lrpnswgfnd6aszgzipffwbg7v8v5";
+    };
+    yzMonitorJar = fetchurl {
+      url = "http://s3.amazonaws.com/files.basho.com/yokozuna/${yzMonitorJarName}";
+      sha256 = "0kb97d1a43vw759j1h5qwbhx455pidn2pi7sfxijqic37h81ri1m";
+    };
+  };
+in
+
+stdenv.mkDerivation rec {
+  name = "riak-2.2.0";
+
+  buildInputs = [
+    which unzip erlang pam
+  ];
+
+  src = srcs.riak;
+
+  hardeningDisable = [ "format" ];
+
+  postPatch = ''
+    sed -i deps/node_package/priv/base/env.sh \
+      -e 's@{{platform_data_dir}}@''${RIAK_DATA_DIR:-/var/db/riak}@' \
+      -e 's@^RUNNER_SCRIPT_DIR=.*@RUNNER_SCRIPT_DIR='$out'/bin@' \
+      -e 's@^RUNNER_BASE_DIR=.*@RUNNER_BASE_DIR='$out'@' \
+      -e 's@^RUNNER_ETC_DIR=.*@RUNNER_ETC_DIR=''${RIAK_ETC_DIR:-/etc/riak}@' \
+      -e 's@^RUNNER_LOG_DIR=.*@RUNNER_LOG_DIR=''${RIAK_LOG_DIR:-/var/log}@'
+  '';
+
+  preBuild = ''
+    mkdir solr-pkg
+    cp ${srcs.solr} solr-pkg/${solrName}
+    export SOLR_PKG_DIR=$(readlink -f solr-pkg)
+
+    mkdir -p deps/yokozuna/priv/java_lib
+    cp ${srcs.yokozunaJar} deps/yokozuna/priv/java_lib/${yokozunaJarName}
+
+    mkdir -p deps/yokozuna/priv/solr/lib/ext
+    cp ${srcs.yzMonitorJar} deps/yokozuna/priv/solr/lib/ext/${yzMonitorJarName}
+
+    patchShebangs .
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    make locked-deps
+    make rel
+
+    runHook postBuild
+  '';
+
+  doCheck = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    mv rel/riak/etc rel/riak/riak-etc
+    mkdir -p rel/riak/etc
+    mv rel/riak/riak-etc rel/riak/etc/riak
+    mv rel/riak/* $out
+
+    for prog in $out/bin/*; do
+      substituteInPlace $prog \
+        --replace '. "`cd \`dirname $0\` && /bin/pwd`/../lib/env.sh"' \
+                  ". $out/lib/env.sh"
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    maintainers = with maintainers; [ cstrahan mdaiter ];
+    description = "Dynamo inspired NoSQL DB by Basho";
+    platforms   = [ "x86_64-linux" ];
+    license     = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nsq/default.nix b/nixpkgs/pkgs/servers/nsq/default.nix
new file mode 100644
index 000000000000..d48587c924e7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nsq/default.nix
@@ -0,0 +1,18 @@
+{ buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "nsq-${version}";
+  version = "0.3.5";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/bitly/nsq";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "bitly";
+    repo = "nsq";
+    sha256 = "1r7jgplzn6bgwhd4vn8045n6cmm4iqbzssbjgj7j1c28zbficy2f";
+  };
+
+  goDeps = ./deps.nix;
+}
diff --git a/nixpkgs/pkgs/servers/nsq/deps.nix b/nixpkgs/pkgs/servers/nsq/deps.nix
new file mode 100644
index 000000000000..751a18ca92d7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nsq/deps.nix
@@ -0,0 +1,83 @@
+[
+  {
+    goPackagePath = "github.com/mreiferson/go-snappystream";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mreiferson/go-snappystream";
+      rev = "028eae7ab5c4c9e2d1cb4c4ca1e53259bbe7e504";
+      sha256 = "0jdd5whp74nvg35d9hzydsi3shnb1vrnd7shi9qz4wxap7gcrid6";
+    };
+  }
+  {
+    goPackagePath = "github.com/bitly/go-nsq";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bitly/go-nsq";
+      rev = "22a8bd48c443ec23bb559675b6df8284bbbdab29";
+      sha256 = "06hrkwk84w8rshkanvfgmgbiml7n06ybv192dvibhwgk2wz2dl46";
+    };
+  }
+  {
+    goPackagePath = "github.com/bitly/go-simplejson";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bitly/go-simplejson";
+      rev = "18db6e68d8fd9cbf2e8ebe4c81a78b96fd9bf05a";
+      sha256 = "0lj9cxyncchlw6p35j0yym5q5waiz0giw6ri41qdwm8y3dghwwiy";
+    };
+  }
+  {
+    goPackagePath = "github.com/blang/semver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/blang/semver";
+      rev = "9bf7bff48b0388cb75991e58c6df7d13e982f1f2";
+      sha256 = "11sinbf942dpyc9wdpidkhmqn438cfp5n8x3xqnmq9aszkld9hy7";
+    };
+  }
+  {
+    goPackagePath = "github.com/bmizerany/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bmizerany/perks";
+      rev = "6cb9d9d729303ee2628580d9aec5db968da3a607";
+      sha256 = "0cdh84hmn21is6hvv6dy9qjdcg9w3l2k8avlk0881a8cqm09s90j";
+    };
+  }
+  {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "056c9bc7be7190eaa7715723883caffa5f8fa3e4";
+      sha256 = "0gkgkw04ndr5y7hrdy0r4v2drs5srwfcw2bs1gyas066hwl84xyw";
+    };
+  }
+  {
+    goPackagePath = "github.com/bitly/go-hostpool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bitly/go-hostpool";
+      rev = "d0e59c22a56e8dadfed24f74f452cea5a52722d2";
+      sha256 = "14ph12krn5zlg00vh9g6g08lkfjxnpw46nzadrfb718yl1hgyk3g";
+    };
+  }
+  {
+    goPackagePath = "github.com/bitly/timer_metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bitly/timer_metrics";
+      rev = "afad1794bb13e2a094720aeb27c088aa64564895";
+      sha256 = "1b717vkwj63qb5kan4b92kx4rg6253l5mdb3lxpxrspy56a6rl0c";
+    };
+  }
+  {
+    goPackagePath = "github.com/mreiferson/go-options";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mreiferson/go-options";
+      rev = "7c174072188d0cfbe6f01bb457626abb22bdff52";
+      sha256 = "0ksyi2cb4k6r2fxamljg42qbz5hdcb9kv5i7y6cx4ajjy0xznwgm";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/oauth2_proxy/default.nix b/nixpkgs/pkgs/servers/oauth2_proxy/default.nix
new file mode 100644
index 000000000000..d9919005e39d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/oauth2_proxy/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "oauth2_proxy-${version}";
+  version = "20180325-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "a94b0a8b25e553f7333f7b84aeb89d9d18ec259b";
+  
+  goPackagePath = "github.com/bitly/oauth2_proxy";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    repo = "oauth2_proxy";
+    owner = "bitly";
+    sha256 = "07m258s9fxjsgixggw0d1zicd7l6l2rkm5mh3zdjdaj20sqcj217";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "A reverse proxy that provides authentication with Google, Github or other provider";
+    homepage = https://github.com/bitly/oauth2_proxy/;
+    license = licenses.mit;
+    maintainers = [ maintainers.yorickvp ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/oauth2_proxy/deps.nix b/nixpkgs/pkgs/servers/oauth2_proxy/deps.nix
new file mode 100644
index 000000000000..435c7d127821
--- /dev/null
+++ b/nixpkgs/pkgs/servers/oauth2_proxy/deps.nix
@@ -0,0 +1,129 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "cloud.google.com/go";
+    fetch = {
+      type = "git";
+      url = "https://code.googlesource.com/gocloud";
+      rev = "d27f27d9b3cf75c9901d9981f9af50bbfd9002da";
+      sha256 = "18vdhkymm4cqh5fjyz0ia0bc2mpmarjk6w6zh9ydm2d4nkj36cm5";
+    };
+  }
+  {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "a368813c5e648fee92e5f6c30e3944ff9d5e8895";
+      sha256 = "1sjxs2lwc8jpln80s4rlzp7nprbcljhy5mz4rf9995gq93wqnym5";
+    };
+  }
+  {
+    goPackagePath = "github.com/bitly/go-simplejson";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bitly/go-simplejson";
+      rev = "0c965951289cce37dec52ad1f34200fefc816777";
+      sha256 = "0ys37wshd430dizzbg39x5mw55daih2q4qj5l9gr3qbmq9qdn0f3";
+    };
+  }
+  {
+    goPackagePath = "github.com/coreos/go-oidc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/go-oidc";
+      rev = "065b426bd41667456c1a924468f507673629c46b";
+      sha256 = "10xhrh70rccgydi708dc9xl4ivmjnzhh1skd1ij6xl1i3x8lk3g6";
+    };
+  }
+  {
+    goPackagePath = "github.com/mbland/hmacauth";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mbland/hmacauth";
+      rev = "44256dfd4bfa7594cfa73587a464ca890e85971a";
+      sha256 = "1d5pbjgc5j8pi3frsjp5gqg7j12bxdbl55nhy01cv4c96hay2ij1";
+    };
+  }
+  {
+    goPackagePath = "github.com/mreiferson/go-options";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mreiferson/go-options";
+      rev = "77551d20752b54535462404ad9d877ebdb26e53d";
+      sha256 = "02c18zrx038gbas58l90xzsz9m5q3gpjprdcwmnvxsn0zvld0vpj";
+    };
+  }
+  {
+    goPackagePath = "github.com/pquerna/cachecontrol";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pquerna/cachecontrol";
+      rev = "525d0eb5f91d30e3b1548de401b7ef9ea6898520";
+      sha256 = "13r6qz9pghy9fapps5h9mhblggnjq2nfxysvf2jp4scanc5vw2y3";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "88942b9c40a4c9d203b82b3731787b672d6e809b";
+      sha256 = "0jw1faq8krcxwf1fv3w75apk1ncnykwg8y5ahs5rasjmspvkv8cw";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "6078986fec03a1dcc236c34816c71b0e05018fda";
+      sha256 = "0qbl17mzpq7anwyzy6hdvxqk7f6q2xlm6f9dknkwlszfd4id2fwb";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/oauth2";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/oauth2";
+      rev = "fdc9e635145ae97e6c2cb777c48305600cf515cb";
+      sha256 = "0pznj7pb2rjar005dvppimdynarm8smj6vnqz9wvd9fxyn0q0yww";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "13d03a9a82fba647c21a0ef8fba44a795d0f0835";
+      sha256 = "1lmyd4mk7lbgnxyvr6ndfdfafazp9a4cc6c0a2q2j4n53g2vwbgk";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/api";
+    fetch = {
+      type = "git";
+      url = "https://code.googlesource.com/google-api-go-client";
+      rev = "e4126357c891acdef6dcd7805daa4c6533be6544";
+      sha256 = "19c874pr7vhhiyw7zn6v625g8i70gqzi3rr645kai6pnd1w7s27n";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/fsnotify.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/fsnotify/fsnotify.v1";
+      rev = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9";
+      sha256 = "07va9crci0ijlivbb7q57d2rz9h27zgn2fsm60spjsqpdbvyrx4g";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/square/go-jose.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/square/go-jose.v2";
+      rev = "552e98edab5d620205ff1a8960bf52a5a10aad03";
+      sha256 = "03w6rgxkvdv3vcfr23s6wbck431w7dwnw0jy7qnyl0qihxzn40rv";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/openafs/1.6/default.nix b/nixpkgs/pkgs/servers/openafs/1.6/default.nix
new file mode 100644
index 000000000000..22f09994ebf0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/openafs/1.6/default.nix
@@ -0,0 +1,89 @@
+{ stdenv, fetchurl, which, autoconf, automake, flex, yacc
+, glibc, perl, kerberos, libxslt, docbook_xsl, docbook_xml_dtd_43
+, ncurses # Extra ncurses utilities. Only needed for debugging.
+, tsmbac ? null # Tivoli Storage Manager Backup Client from IBM
+}:
+
+with (import ./srcs.nix { inherit fetchurl; });
+
+stdenv.mkDerivation rec {
+  name = "openafs-${version}";
+  inherit version srcs;
+
+  nativeBuildInputs = [ autoconf automake flex yacc perl which libxslt ];
+
+  buildInputs = [ ncurses ];
+
+  patches = stdenv.lib.optional (tsmbac != null) ./tsmbac.patch;
+
+  outputs = [ "out" "dev" "man" "doc" ];
+
+  preConfigure = ''
+
+    patchShebangs .
+    for i in `grep -l -R '/usr/\(include\|src\)' .`; do
+      echo "Patch /usr/include and /usr/src in $i"
+      substituteInPlace $i \
+        --replace "/usr/include" "${glibc.dev}/include" \
+        --replace "/usr/src" "$TMP"
+    done
+
+    for i in ./doc/xml/{AdminGuide,QuickStartUnix,UserGuide}/*.xml; do
+      substituteInPlace "''${i}" --replace "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" \
+        "${docbook_xml_dtd_43}/xml/dtd/docbook/docbookx.dtd"
+    done
+
+    ./regen.sh
+
+    ${stdenv.lib.optionalString (kerberos != null)
+      "export KRB5_CONFIG=${kerberos.dev}/bin/krb5-config"}
+
+    export AFS_SYSKVERS=26
+
+    configureFlagsArray=(
+      ${stdenv.lib.optionalString (kerberos != null) "--with-krb5"}
+      "--sysconfdir=/etc"
+      "--localstatedir=/var"
+      "--disable-kernel-module"
+      "--disable-fuse-client"
+      "--with-html-xsl=${docbook_xsl}/share/xml/docbook-xsl/html/chunk.xsl"
+      ${stdenv.lib.optionalString (tsmbac != null) "--enable-tivoli-tsm"}
+      ${stdenv.lib.optionalString (ncurses == null) "--disable-gtx"}
+      "--disable-linux-d_splice-alias-extra-iput"
+    )
+  '' + stdenv.lib.optionalString (tsmbac != null) ''
+    export XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I${tsmbac}/lib64/sample -DXBSA_TSMLIB=\\\"${tsmbac}/lib64/libApiTSM64.so\\\""
+    export XBSA_XLIBS="-ldl"
+  '';
+
+  buildFlags = [ "all_nolibafs" ];
+
+  postBuild = ''
+    for d in doc/xml/{AdminGuide,QuickStartUnix,UserGuide}; do
+      make -C "''${d}" html
+    done
+  '';
+
+  postInstall = ''
+    mkdir -p $doc/share/doc/openafs/{AdminGuide,QuickStartUnix,UserGuide}
+    cp -r doc/{arch,examples,pdf,protocol,txt} README NEWS $doc/share/doc/openafs
+    for d in AdminGuide QuickStartUnix UserGuide ; do
+      cp "doc/xml/''${d}"/*.html "$doc/share/doc/openafs/''${d}"
+    done
+
+    rm -r $out/lib/{openafs,afs,*.a}
+    rm $out/bin/kpasswd
+    rm $out/sbin/{kas,kdb,ka-forwarder,kadb_check}
+    rm $out/libexec/openafs/kaserver
+    rm $man/share/man/man{1/kpasswd*,5/kaserver*,8/{ka*,kdb*}}
+  '';
+
+  meta = with stdenv.lib; {
+    outputsToInstall = [ "out" "doc" "man" ];
+    description = "Open AFS client";
+    homepage = https://www.openafs.org;
+    license = licenses.ipl10;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.z77z maintainers.spacefrogg ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/openafs/1.6/module.nix b/nixpkgs/pkgs/servers/openafs/1.6/module.nix
new file mode 100644
index 000000000000..c133161cf576
--- /dev/null
+++ b/nixpkgs/pkgs/servers/openafs/1.6/module.nix
@@ -0,0 +1,58 @@
+{ stdenv, fetchurl, which, autoconf, automake, flex, bison
+, kernel, glibc, perl }:
+
+with (import ./srcs.nix { inherit fetchurl; });
+
+let
+  modDestDir = "$out/lib/modules/${kernel.modDirVersion}/extra/openafs";
+  kernelBuildDir = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build";
+
+in stdenv.mkDerivation rec {
+  name = "openafs-${version}-${kernel.modDirVersion}";
+  inherit version src;
+
+  nativeBuildInputs = [ autoconf automake flex perl bison which ] ++ kernel.moduleBuildDependencies;
+
+  hardeningDisable = [ "pic" ];
+
+  configureFlags = [
+    "--with-linux-kernel-build=${kernelBuildDir}"
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--disable-linux-d_splice-alias-extra-iput"
+  ];
+
+  preConfigure = ''
+    patchShebangs .
+    for i in `grep -l -R '/usr/\(include\|src\)' .`; do
+      echo "Patch /usr/include and /usr/src in $i"
+      substituteInPlace $i \
+        --replace "/usr/include" "${glibc.dev}/include" \
+        --replace "/usr/src" "${kernelBuildDir}"
+    done
+
+    ./regen.sh -q
+
+  '';
+
+  buildPhase = ''
+    make V=1 only_libafs
+  '';
+
+  installPhase = ''
+    mkdir -p ${modDestDir}
+    cp src/libafs/MODLOAD-*/libafs-${kernel.modDirVersion}.* ${modDestDir}/libafs.ko
+    xz -f ${modDestDir}/libafs.ko
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Open AFS client kernel module";
+    homepage = https://www.openafs.org;
+    license = licenses.ipl10;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.z77z maintainers.spacefrogg ];
+    broken = versionOlder kernel.version "3.18"
+             || stdenv.targetPlatform.isAarch64;
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/openafs/1.6/srcs.nix b/nixpkgs/pkgs/servers/openafs/1.6/srcs.nix
new file mode 100644
index 000000000000..17048b68024e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/openafs/1.6/srcs.nix
@@ -0,0 +1,14 @@
+{ fetchurl }:
+rec {
+  version = "1.6.23";
+  src = fetchurl {
+    url = "http://www.openafs.org/dl/openafs/${version}/openafs-${version}-src.tar.bz2";
+    sha256 = "1gy7a0jhagxif8av540xb1aa6cl7id08nsgjbgady54bnmb0viga";
+  };
+
+  srcs = [ src
+    (fetchurl {
+      url = "http://www.openafs.org/dl/openafs/${version}/openafs-${version}-doc.tar.bz2";
+      sha256 = "18my71s9mddy0k835852ksjzkza7xs73kyxavmdqflh5vkywb6y0";
+    })];
+}
diff --git a/nixpkgs/pkgs/servers/openafs/1.6/tsmbac.patch b/nixpkgs/pkgs/servers/openafs/1.6/tsmbac.patch
new file mode 100644
index 000000000000..412765fe8a5b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/openafs/1.6/tsmbac.patch
@@ -0,0 +1,62 @@
+diff -ru3 openafs-1.6.18.1/acinclude.m4 openafs-1.6.18.1.new/acinclude.m4
+--- openafs-1.6.18.1/acinclude.m4	2016-06-21 17:13:39.000000000 +0200
++++ openafs-1.6.18.1.new/acinclude.m4	2016-11-02 18:44:30.423039662 +0100
+@@ -1373,45 +1373,7 @@
+ 
+ dnl check for tivoli
+ AC_MSG_CHECKING(for tivoli tsm butc support)
+-XBSA_CFLAGS=""
+-if test "$enable_tivoli_tsm" = "yes"; then
+-	XBSADIR1=/usr/tivoli/tsm/client/api/bin/xopen
+-	XBSADIR2=/opt/tivoli/tsm/client/api/bin/xopen
+-	XBSADIR3=/usr/tivoli/tsm/client/api/bin/sample
+-	XBSADIR4=/opt/tivoli/tsm/client/api/bin/sample
+-	XBSADIR5=/usr/tivoli/tsm/client/api/bin64/sample
+-	XBSADIR6=/opt/tivoli/tsm/client/api/bin64/sample
+-
+-	if test -r "$XBSADIR3/dsmapifp.h"; then
+-		XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I$XBSADIR3"
+-		XBSA_XLIBS="-ldl"
+-		AC_MSG_RESULT([yes, $XBSA_CFLAGS])
+-	elif test -r "$XBSADIR4/dsmapifp.h"; then
+-		XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I$XBSADIR4"
+-		XBSA_XLIBS="-ldl"
+-		AC_MSG_RESULT([yes, $XBSA_CFLAGS])
+-	elif test -r "$XBSADIR5/dsmapifp.h"; then
+-		XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I$XBSADIR5"
+-		XBSA_XLIBS="-ldl"
+-		AC_MSG_RESULT([yes, $XBSA_CFLAGS])
+-	elif test -r "$XBSADIR6/dsmapifp.h"; then
+-		XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I$XBSADIR6"
+-		XBSA_XLIBS="-ldl"
+-		AC_MSG_RESULT([yes, $XBSA_CFLAGS])
+-	elif test -r "$XBSADIR1/xbsa.h"; then
+-		XBSA_CFLAGS="-Dxbsa -I$XBSADIR1"
+-		XBSA_XLIBS=""
+-		AC_MSG_RESULT([yes, $XBSA_CFLAGS])
+-	elif test -r "$XBSADIR2/xbsa.h"; then
+-		XBSA_CFLAGS="-Dxbsa -I$XBSADIR2"
+-		XBSA_XLIBS=""
+-		AC_MSG_RESULT([yes, $XBSA_CFLAGS])
+-	else
+-		AC_MSG_RESULT([no, missing xbsa.h and dsmapifp.h header files])
+-	fi
+-else
+-	AC_MSG_RESULT([no])
+-fi
++AC_MSG_RESULT([yes])
+ AC_SUBST(XBSA_CFLAGS)
+ AC_SUBST(XBSA_XLIBS) 
+ 
+diff -ru3 openafs-1.6.18.1/src/butc/afsxbsa.c openafs-1.6.18.1.new/src/butc/afsxbsa.c
+--- openafs-1.6.18.1/src/butc/afsxbsa.c	2016-06-21 17:13:39.000000000 +0200
++++ openafs-1.6.18.1.new/src/butc/afsxbsa.c	2016-11-02 18:45:10.734662987 +0100
+@@ -651,7 +651,7 @@
+ #if defined(AFS_AIX_ENV)
+         dynlib = dlopen("/usr/lib/libApiDS.a(dsmapish.o)", RTLD_NOW | RTLD_LOCAL | RTLD_MEMBER);
+ #elif defined (AFS_AMD64_LINUX26_ENV)
+-	dynlib = dlopen("/usr/lib64/libApiTSM64.so", RTLD_NOW | RTLD_LOCAL);
++	dynlib = dlopen(XBSA_TSMLIB, RTLD_NOW | RTLD_LOCAL);
+ #elif defined(AFS_SUN5_ENV) || defined(AFS_LINUX26_ENV)
+         dynlib = dlopen("/usr/lib/libApiDS.so", RTLD_NOW | RTLD_LOCAL);
+ #else
diff --git a/nixpkgs/pkgs/servers/openafs/1.8/bosserver.patch b/nixpkgs/pkgs/servers/openafs/1.8/bosserver.patch
new file mode 100644
index 000000000000..094d9871f64f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/openafs/1.8/bosserver.patch
@@ -0,0 +1,30 @@
+diff -u openafs-1.8.0/src/bozo/bosserver.c /tmp/buffer-content-13110-gd
+--- openafs-1.8.0/src/bozo/bosserver.c
++++ #<buffer bosserver.c>
+@@ -244,24 +244,6 @@
+ static int
+ CreateDirs(const char *coredir)
+ {
+-    if ((!strncmp
+-	 (AFSDIR_USR_DIRPATH, AFSDIR_CLIENT_ETC_DIRPATH,
+-	  strlen(AFSDIR_USR_DIRPATH)))
+-	||
+-	(!strncmp
+-	 (AFSDIR_USR_DIRPATH, AFSDIR_SERVER_BIN_DIRPATH,
+-	  strlen(AFSDIR_USR_DIRPATH)))) {
+-	if (MakeDir(AFSDIR_USR_DIRPATH))
+-	    return errno;
+-    }
+-    if (!strncmp
+-	(AFSDIR_SERVER_AFS_DIRPATH, AFSDIR_SERVER_BIN_DIRPATH,
+-	 strlen(AFSDIR_SERVER_AFS_DIRPATH))) {
+-	if (MakeDir(AFSDIR_SERVER_AFS_DIRPATH))
+-	    return errno;
+-    }
+-    if (MakeDir(AFSDIR_SERVER_BIN_DIRPATH))
+-	return errno;
+     if (MakeDir(AFSDIR_SERVER_ETC_DIRPATH))
+ 	return errno;
+     if (MakeDir(AFSDIR_SERVER_LOCAL_DIRPATH))
+
+Diff finished.  Fri Jun 29 15:45:46 2018
diff --git a/nixpkgs/pkgs/servers/openafs/1.8/cross-build.patch b/nixpkgs/pkgs/servers/openafs/1.8/cross-build.patch
new file mode 100644
index 000000000000..2b4fd58b23a4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/openafs/1.8/cross-build.patch
@@ -0,0 +1,223 @@
+diff -Nur --unidirectional-new-file openafs-1.8.2/configure.ac openafs-1.8.2.new/configure.ac
+--- openafs-1.8.2/configure.ac	2018-09-11 17:52:48.000000000 +0200
++++ openafs-1.8.2.new/configure.ac	2018-10-16 15:56:36.512277860 +0200
+@@ -23,6 +23,7 @@
+ 
+ AC_PROG_CC
+ AC_PROG_LIBTOOL
++AX_PROG_CC_FOR_BUILD
+ 
+ AC_PATH_PROGS([PATH_CPP], [cpp], [${CC-cc} -E], [$PATH:/lib:/usr/ccs/lib])
+ AC_SUBST([PATH_CPP])
+diff -Nur --unidirectional-new-file openafs-1.8.2/src/cf/ax_prog_cc_for_build.m4 openafs-1.8.2.new/src/cf/ax_prog_cc_for_build.m4
+--- openafs-1.8.2/src/cf/ax_prog_cc_for_build.m4	1970-01-01 01:00:00.000000000 +0100
++++ openafs-1.8.2.new/src/cf/ax_prog_cc_for_build.m4	2018-10-16 16:20:40.278641658 +0200
+@@ -0,0 +1,125 @@
++# ===========================================================================
++#   https://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++#   AX_PROG_CC_FOR_BUILD
++#
++# DESCRIPTION
++#
++#   This macro searches for a C compiler that generates native executables,
++#   that is a C compiler that surely is not a cross-compiler. This can be
++#   useful if you have to generate source code at compile-time like for
++#   example GCC does.
++#
++#   The macro sets the CC_FOR_BUILD and CPP_FOR_BUILD macros to anything
++#   needed to compile or link (CC_FOR_BUILD) and preprocess (CPP_FOR_BUILD).
++#   The value of these variables can be overridden by the user by specifying
++#   a compiler with an environment variable (like you do for standard CC).
++#
++#   It also sets BUILD_EXEEXT and BUILD_OBJEXT to the executable and object
++#   file extensions for the build platform, and GCC_FOR_BUILD to `yes' if
++#   the compiler we found is GCC. All these variables but GCC_FOR_BUILD are
++#   substituted in the Makefile.
++#
++# LICENSE
++#
++#   Copyright (c) 2008 Paolo Bonzini <bonzini@gnu.org>
++#
++#   Copying and distribution of this file, with or without modification, are
++#   permitted in any medium without royalty provided the copyright notice
++#   and this notice are preserved. This file is offered as-is, without any
++#   warranty.
++
++#serial 9
++
++AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD])
++AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl
++AC_REQUIRE([AC_PROG_CC])dnl
++AC_REQUIRE([AC_PROG_CPP])dnl
++AC_REQUIRE([AC_EXEEXT])dnl
++AC_REQUIRE([AC_CANONICAL_HOST])dnl
++
++dnl Use the standard macros, but make them use other variable names
++dnl
++pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl
++pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl
++pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl
++pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl
++pushdef([ac_cv_prog_cc_g], ac_cv_build_prog_cc_g)dnl
++pushdef([ac_cv_exeext], ac_cv_build_exeext)dnl
++pushdef([ac_cv_objext], ac_cv_build_objext)dnl
++pushdef([ac_exeext], ac_build_exeext)dnl
++pushdef([ac_objext], ac_build_objext)dnl
++pushdef([CC], CC_FOR_BUILD)dnl
++pushdef([CPP], CPP_FOR_BUILD)dnl
++pushdef([CFLAGS], CFLAGS_FOR_BUILD)dnl
++pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl
++pushdef([LDFLAGS], LDFLAGS_FOR_BUILD)dnl
++pushdef([host], build)dnl
++pushdef([host_alias], build_alias)dnl
++pushdef([host_cpu], build_cpu)dnl
++pushdef([host_vendor], build_vendor)dnl
++pushdef([host_os], build_os)dnl
++pushdef([ac_cv_host], ac_cv_build)dnl
++pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl
++pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl
++pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl
++pushdef([ac_cv_host_os], ac_cv_build_os)dnl
++pushdef([ac_cpp], ac_build_cpp)dnl
++pushdef([ac_compile], ac_build_compile)dnl
++pushdef([ac_link], ac_build_link)dnl
++
++save_cross_compiling=$cross_compiling
++save_ac_tool_prefix=$ac_tool_prefix
++cross_compiling=no
++ac_tool_prefix=
++
++AC_PROG_CC
++AC_PROG_CPP
++AC_EXEEXT
++
++ac_tool_prefix=$save_ac_tool_prefix
++cross_compiling=$save_cross_compiling
++
++dnl Restore the old definitions
++dnl
++popdef([ac_link])dnl
++popdef([ac_compile])dnl
++popdef([ac_cpp])dnl
++popdef([ac_cv_host_os])dnl
++popdef([ac_cv_host_vendor])dnl
++popdef([ac_cv_host_cpu])dnl
++popdef([ac_cv_host_alias])dnl
++popdef([ac_cv_host])dnl
++popdef([host_os])dnl
++popdef([host_vendor])dnl
++popdef([host_cpu])dnl
++popdef([host_alias])dnl
++popdef([host])dnl
++popdef([LDFLAGS])dnl
++popdef([CPPFLAGS])dnl
++popdef([CFLAGS])dnl
++popdef([CPP])dnl
++popdef([CC])dnl
++popdef([ac_objext])dnl
++popdef([ac_exeext])dnl
++popdef([ac_cv_objext])dnl
++popdef([ac_cv_exeext])dnl
++popdef([ac_cv_prog_cc_g])dnl
++popdef([ac_cv_prog_cc_cross])dnl
++popdef([ac_cv_prog_cc_works])dnl
++popdef([ac_cv_prog_gcc])dnl
++popdef([ac_cv_prog_CPP])dnl
++
++dnl Finally, set Makefile variables
++dnl
++BUILD_EXEEXT=$ac_build_exeext
++BUILD_OBJEXT=$ac_build_objext
++AC_SUBST(BUILD_EXEEXT)dnl
++AC_SUBST(BUILD_OBJEXT)dnl
++AC_SUBST([CFLAGS_FOR_BUILD])dnl
++AC_SUBST([CPPFLAGS_FOR_BUILD])dnl
++AC_SUBST([LDFLAGS_FOR_BUILD])dnl
++])
+diff -Nur --unidirectional-new-file openafs-1.8.2/src/comerr/Makefile.in openafs-1.8.2.new/src/comerr/Makefile.in
+--- openafs-1.8.2/src/comerr/Makefile.in	2018-09-11 17:52:48.000000000 +0200
++++ openafs-1.8.2.new/src/comerr/Makefile.in	2018-10-16 15:48:19.678898925 +0200
+@@ -38,11 +38,14 @@
+ compile_et:	compile_et.o error_table.o
+ 	$(Q)case $(SYS_NAME) in \
+ 	*_linux* | *_umlinux* | *_darwin* ) \
+-	$(LT_LDRULE_static_NOQ) compile_et.o error_table.o -L${TOP_LIBDIR} -lopr $(buildtool_roken) $(MT_LIBS);; \
++	$(LT_LDRULE_static_NOQ) compile_et.o error_table.o -L${TOP_LIBDIR} -lopr_build $(buildtool_roken) $(MT_LIBS);; \
+ 	* ) \
+-	$(LT_LDRULE_static_NOQ) compile_et.o error_table.o -L${TOP_LIBDIR} -lopr -ll $(buildtool_roken) $(MT_LIBS);; \
++	$(LT_LDRULE_static_NOQ) compile_et.o error_table.o -L${TOP_LIBDIR} -lopr_build -ll $(buildtool_roken) $(MT_LIBS);; \
+ 	esac
+ 
++compile_et compile_et.o error_table.o: CC=$(CC_FOR_BUILD)
++compile_et compile_et.o error_table.o: LD=$(CC_FOR_BUILD)
++
+ libafscom_err.a: $(LT_objs)
+ 	$(LT_LDLIB_lwp) $(LT_objs)
+ 
+diff -Nur --unidirectional-new-file openafs-1.8.2/src/config/Makefile.in openafs-1.8.2.new/src/config/Makefile.in
+--- openafs-1.8.2/src/config/Makefile.in	2018-09-11 17:52:48.000000000 +0200
++++ openafs-1.8.2.new/src/config/Makefile.in	2018-10-16 15:48:19.677898926 +0200
+@@ -54,6 +54,8 @@
+ 
+ config.o: config.c AFS_component_version_number.c
+ 
++config mkvers config.o mc.o: CC=$(CC_FOR_BUILD)
++
+ #
+ # Include installation targets
+ #
+diff -Nur --unidirectional-new-file openafs-1.8.2/src/opr/Makefile.in openafs-1.8.2.new/src/opr/Makefile.in
+--- openafs-1.8.2/src/opr/Makefile.in	2018-09-11 17:52:48.000000000 +0200
++++ openafs-1.8.2.new/src/opr/Makefile.in	2018-10-16 15:48:19.678898925 +0200
+@@ -21,7 +21,7 @@
+ 	  $(TOP_INCDIR)/opr/time.h \
+ 	  $(TOP_INCDIR)/opr/uuid.h
+ 
+-all: $(HEADERS) liboafs_opr.la $(TOP_LIBDIR)/libopr_pic.a $(TOP_LIBDIR)/libopr.a
++all: $(HEADERS) liboafs_opr.la $(TOP_LIBDIR)/libopr_pic.a $(TOP_LIBDIR)/libopr.a $(TOP_LIBDIR)/libopr_build.a
+ 
+ liboafs_opr.la: liboafs_opr.la.sym $(LT_objs) $(LT_deps)
+ 	$(LT_LDLIB_shlib) $(LT_objs) $(LT_deps) $(LT_libs)
+@@ -29,12 +29,26 @@
+ libopr.a: $(LT_objs)
+ 	$(LT_LDLIB_static) $(LT_objs)
+ 
++LT_objs_build = $(patsubst %.lo, %_build.lo, $(LT_objs))
++
++%_build.lo: %.c
++	$(LT_CCRULE) $<
++
++libopr_build.a: $(LT_objs_build)
++	$(LT_LDLIB_static) $(LT_objs_build)
++
++libopr_build.a $(LT_objs_build): CC=$(CC_FOR_BUILD)
++libopr_build.a $(LT_objs_build): LD=$(CC_FOR_BUILD)
++
+ libopr_pic.la: $(LT_objs)
+ 	$(LT_LDLIB_pic) $(LT_objs)
+ 
+ $(TOP_LIBDIR)/libopr.a: libopr.a
+ 	$(INSTALL_DATA) libopr.a $@
+ 
++$(TOP_LIBDIR)/libopr_build.a: libopr_build.a
++	$(INSTALL_DATA) libopr_build.a $@
++
+ $(TOP_LIBDIR)/libopr_pic.a: libopr_pic.la
+ 	$(INSTALL_DATA) .libs/libopr_pic.a $@
+ 
+diff -Nur --unidirectional-new-file openafs-1.8.2/src/rxgen/Makefile.in openafs-1.8.2.new/src/rxgen/Makefile.in
+--- openafs-1.8.2/src/rxgen/Makefile.in	2018-09-11 17:52:48.000000000 +0200
++++ openafs-1.8.2.new/src/rxgen/Makefile.in	2018-10-16 15:48:19.677898926 +0200
+@@ -25,6 +25,8 @@
+ 
+ CFLAGS_rpc_main.o= -DPATH_CPP="\"$(PATH_CPP)\""
+ 
++rxgen $(OBJS): CC=$(CC_FOR_BUILD)
++
+ #
+ # Install targets
+ #
diff --git a/nixpkgs/pkgs/servers/openafs/1.8/default.nix b/nixpkgs/pkgs/servers/openafs/1.8/default.nix
new file mode 100644
index 000000000000..c77bef6ad24e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/openafs/1.8/default.nix
@@ -0,0 +1,101 @@
+{ stdenv, buildPackages, fetchurl, which, autoconf, automake, flex
+, yacc , glibc, perl, kerberos, libxslt, docbook_xsl
+, docbook_xml_dtd_43 , libtool_2, removeReferencesTo
+, ncurses # Extra ncurses utilities. Only needed for debugging.
+, tsmbac ? null # Tivoli Storage Manager Backup Client from IBM
+}:
+
+with (import ./srcs.nix { inherit fetchurl; });
+
+stdenv.mkDerivation rec {
+  name = "openafs-${version}";
+  inherit version srcs;
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ autoconf automake flex libxslt libtool_2 perl
+    removeReferencesTo which yacc ];
+
+  buildInputs = [ kerberos ncurses ];
+
+  patches = [ ./bosserver.patch ./cross-build.patch ] ++ stdenv.lib.optional (tsmbac != null) ./tsmbac.patch;
+
+  outputs = [ "out" "dev" "man" "doc" "server" ];
+
+  enableParallelBuilding = true;
+
+  setOutputFlags = false;
+
+  # Makefiles don't include install targets for all new shared libs, yet.
+  dontDisableStatic = true;
+
+  # Fixes broken format string in 1.8.2
+  hardeningDisable=[ "format" ];
+
+  preConfigure = ''
+    patchShebangs .
+    for i in `grep -l -R '/usr/\(include\|src\)' .`; do
+      echo "Patch /usr/include and /usr/src in $i"
+      substituteInPlace $i \
+        --replace "/usr/include" "${glibc.dev}/include" \
+        --replace "/usr/src" "$TMP"
+    done
+
+    for i in ./doc/xml/{AdminGuide,QuickStartUnix,UserGuide}/*.xml; do
+      substituteInPlace "''${i}" --replace "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" \
+        "${docbook_xml_dtd_43}/xml/dtd/docbook/docbookx.dtd"
+    done
+
+    ./regen.sh
+
+    configureFlagsArray=(
+      "--with-gssapi"
+      "--sysconfdir=/etc"
+      "--localstatedir=/var"
+      "--disable-kernel-module"
+      "--disable-fuse-client"
+      "--with-html-xsl=${docbook_xsl}/share/xml/docbook-xsl/html/chunk.xsl"
+      ${stdenv.lib.optionalString (tsmbac != null) "--enable-tivoli-tsm"}
+      ${stdenv.lib.optionalString (ncurses == null) "--disable-gtx"}
+      "--disable-linux-d_splice-alias-extra-iput"
+      "--libexecdir=$server/libexec"
+    )
+  '' + stdenv.lib.optionalString (tsmbac != null) ''
+    export XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I${tsmbac}/lib64/sample -DXBSA_TSMLIB=\\\"${tsmbac}/lib64/libApiTSM64.so\\\""
+    export XBSA_XLIBS="-ldl"
+  '';
+
+  buildFlags = [ "all_nolibafs" ];
+
+  postBuild = ''
+    for d in doc/xml/{AdminGuide,QuickStartUnix,UserGuide}; do
+      make -C "''${d}" index.html
+    done
+  '';
+
+  postInstall = ''
+    mkdir -p $doc/share/doc/openafs/{AdminGuide,QuickStartUnix,UserGuide}
+    cp -r doc/{pdf,protocol,txt} README LICENSE $doc/share/doc/openafs
+    for d in AdminGuide QuickStartUnix UserGuide ; do
+      cp "doc/xml/''${d}"/*.html "$doc/share/doc/openafs/''${d}"
+    done
+
+    rm -r $out/lib/openafs
+  '';
+
+  # Avoid references to $TMPDIR by removing it and let patchelf cleanup the
+  # binaries.
+  preFixup = ''
+    rm -rf "$(pwd)" && mkdir "$(pwd)"
+
+    find $out -type f -exec remove-references-to -t $server '{}' '+'
+  '';
+
+  meta = with stdenv.lib; {
+    outputsToInstall = [ "out" "doc" "man" ];
+    description = "Open AFS client";
+    homepage = https://www.openafs.org;
+    license = licenses.ipl10;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.z77z maintainers.spacefrogg ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/openafs/1.8/module.nix b/nixpkgs/pkgs/servers/openafs/1.8/module.nix
new file mode 100644
index 000000000000..958fcd578c2b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/openafs/1.8/module.nix
@@ -0,0 +1,60 @@
+{ stdenv, fetchurl, which, autoconf, automake, flex, yacc
+, kernel, glibc, perl, libtool_2, kerberos }:
+
+with (import ./srcs.nix { inherit fetchurl; });
+
+let
+  modDestDir = "$out/lib/modules/${kernel.modDirVersion}/extra/openafs";
+  kernelBuildDir = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build";
+
+in stdenv.mkDerivation rec {
+  name = "openafs-${version}-${kernel.modDirVersion}";
+  inherit version src;
+
+  nativeBuildInputs = [ autoconf automake flex libtool_2 perl which yacc ]
+    ++ kernel.moduleBuildDependencies;
+
+  buildInputs = [ kerberos ];
+
+  hardeningDisable = [ "pic" ];
+
+  configureFlags = [
+    "--with-linux-kernel-build=${kernelBuildDir}"
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-gssapi"
+    "--disable-linux-d_splice-alias-extra-iput"
+  ];
+
+  preConfigure = ''
+    patchShebangs .
+    for i in `grep -l -R '/usr/\(include\|src\)' .`; do
+      echo "Patch /usr/include and /usr/src in $i"
+      substituteInPlace $i \
+        --replace "/usr/include" "${glibc.dev}/include" \
+        --replace "/usr/src" "${kernelBuildDir}"
+    done
+
+    ./regen.sh -q
+  '';
+
+  buildPhase = ''
+    make V=1 only_libafs
+  '';
+
+  installPhase = ''
+    mkdir -p ${modDestDir}
+    cp src/libafs/MODLOAD-*/libafs-${kernel.modDirVersion}.* ${modDestDir}/libafs.ko
+    xz -f ${modDestDir}/libafs.ko
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Open AFS client kernel module";
+    homepage = https://www.openafs.org;
+    license = licenses.ipl10;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.z77z maintainers.spacefrogg ];
+    broken = versionOlder kernel.version "3.18";
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/openafs/1.8/srcs.nix b/nixpkgs/pkgs/servers/openafs/1.8/srcs.nix
new file mode 100644
index 000000000000..ffdbe47220d7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/openafs/1.8/srcs.nix
@@ -0,0 +1,14 @@
+{ fetchurl }:
+rec {
+  version = "1.8.2";
+  src = fetchurl {
+    url = "http://www.openafs.org/dl/openafs/${version}/openafs-${version}-src.tar.bz2";
+    sha256 = "13hksffp7k5f89c9lc5g5b1q0pc9h7wyarq3sjyjqam7c513xz95";
+  };
+
+  srcs = [ src
+    (fetchurl {
+      url = "http://www.openafs.org/dl/openafs/${version}/openafs-${version}-doc.tar.bz2";
+      sha256 = "09n8nymrhpyb0fhahpln2spzhy9pn48hvry35ccqif2jd4wsxdmr";
+    })];
+}
diff --git a/nixpkgs/pkgs/servers/openafs/1.8/tsmbac.patch b/nixpkgs/pkgs/servers/openafs/1.8/tsmbac.patch
new file mode 100644
index 000000000000..f68c777b6f09
--- /dev/null
+++ b/nixpkgs/pkgs/servers/openafs/1.8/tsmbac.patch
@@ -0,0 +1,62 @@
+diff -ru openafs-1.8.0/src/butc/afsxbsa.c openafs-1.8.0.new/src/butc/afsxbsa.c
+--- openafs-1.8.0/src/butc/afsxbsa.c	2018-04-06 03:21:12.000000000 +0200
++++ openafs-1.8.0.new/src/butc/afsxbsa.c	2018-06-12 16:26:26.272522305 +0200
+@@ -651,7 +651,7 @@
+ #if defined(AFS_AIX_ENV)
+         dynlib = dlopen("/usr/lib/libApiDS.a(dsmapish.o)", RTLD_NOW | RTLD_LOCAL | RTLD_MEMBER);
+ #elif defined (AFS_AMD64_LINUX26_ENV)
+-	dynlib = dlopen("/usr/lib64/libApiTSM64.so", RTLD_NOW | RTLD_LOCAL);
++	dynlib = dlopen(XBSA_TSMLIB, RTLD_NOW | RTLD_LOCAL);
+ #elif defined(AFS_SUN5_ENV) || defined(AFS_LINUX26_ENV)
+         dynlib = dlopen("/usr/lib/libApiDS.so", RTLD_NOW | RTLD_LOCAL);
+ #else
+diff -ru openafs-1.8.0/src/cf/tivoli.m4 openafs-1.8.0.new/src/cf/tivoli.m4
+--- openafs-1.8.0/src/cf/tivoli.m4	2018-04-06 03:21:12.000000000 +0200
++++ openafs-1.8.0.new/src/cf/tivoli.m4	2018-06-12 16:26:26.072522485 +0200
+@@ -1,45 +1,7 @@
+ AC_DEFUN([OPENAFS_TIVOLI_TESTS],[
+ dnl check for tivoli
+ AC_MSG_CHECKING(for tivoli tsm butc support)
+-XBSA_CFLAGS=""
+-if test "$enable_tivoli_tsm" = "yes"; then
+-        XBSADIR1=/usr/tivoli/tsm/client/api/bin/xopen
+-        XBSADIR2=/opt/tivoli/tsm/client/api/bin/xopen
+-        XBSADIR3=/usr/tivoli/tsm/client/api/bin/sample
+-        XBSADIR4=/opt/tivoli/tsm/client/api/bin/sample
+-        XBSADIR5=/usr/tivoli/tsm/client/api/bin64/sample
+-        XBSADIR6=/opt/tivoli/tsm/client/api/bin64/sample
+-
+-        if test -r "$XBSADIR3/dsmapifp.h"; then
+-                XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I$XBSADIR3"
+-                XBSA_XLIBS="-ldl"
+-                AC_MSG_RESULT([yes, $XBSA_CFLAGS])
+-        elif test -r "$XBSADIR4/dsmapifp.h"; then
+-                XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I$XBSADIR4"
+-                XBSA_XLIBS="-ldl"
+-                AC_MSG_RESULT([yes, $XBSA_CFLAGS])
+-        elif test -r "$XBSADIR5/dsmapifp.h"; then
+-                XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I$XBSADIR5"
+-                XBSA_XLIBS="-ldl"
+-                AC_MSG_RESULT([yes, $XBSA_CFLAGS])
+-        elif test -r "$XBSADIR6/dsmapifp.h"; then
+-                XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I$XBSADIR6"
+-                XBSA_XLIBS="-ldl"
+-                AC_MSG_RESULT([yes, $XBSA_CFLAGS])
+-        elif test -r "$XBSADIR1/xbsa.h"; then
+-                XBSA_CFLAGS="-Dxbsa -I$XBSADIR1"
+-                XBSA_XLIBS=""
+-                AC_MSG_RESULT([yes, $XBSA_CFLAGS])
+-        elif test -r "$XBSADIR2/xbsa.h"; then
+-                XBSA_CFLAGS="-Dxbsa -I$XBSADIR2"
+-                XBSA_XLIBS=""
+-                AC_MSG_RESULT([yes, $XBSA_CFLAGS])
+-        else
+-                AC_MSG_RESULT([no, missing xbsa.h and dsmapifp.h header files])
+-        fi
+-else
+-        AC_MSG_RESULT([no])
+-fi
++AC_MSG_RESULT([yes])
+ AC_SUBST(XBSA_CFLAGS)
+ AC_SUBST(XBSA_XLIBS)
+ XLIBS="$XBSA_XLIBS $XLIBS"
diff --git a/nixpkgs/pkgs/servers/openxpki/default.nix b/nixpkgs/pkgs/servers/openxpki/default.nix
new file mode 100644
index 000000000000..2b1000d0d851
--- /dev/null
+++ b/nixpkgs/pkgs/servers/openxpki/default.nix
@@ -0,0 +1,81 @@
+{ stdenv, fetchgit, perl, openssl, perlPackages, gettext, python3Packages
+# TODO: Remove extra dependencies once it is clear that they are NOT needed somewhere.
+, extraDependencies1 ? false, extraDependencies2 ? false, extraDependencies3 ? false }:
+
+perlPackages.buildPerlPackage {
+  name = "openxpki-git20150807";
+
+  src = fetchgit {
+    url = "https://github.com/openxpki/openxpki";
+    rev = "5cb76c553b6b1a81ede380857700628a7521f6e3";
+    sha256 = "05bmhani2c7ays488xv3hx5xbxb612bnwq5rdjwmsj51xpaz454p";
+  };
+
+  buildInputs = [ perl openssl gettext python3Packages.sphinx ];
+  propagatedBuildInputs = with perlPackages;
+    [ # dependencies from Makefile.PL
+      libintl_perl ConfigVersioned LWP ClassAccessorChained IOSocketSSL ClassStd
+      CGISession ConfigStd ConfigMerge Connector CryptCBC CryptOpenSSLAES CryptPKCS10
+      DBDMock DataPassword DataSerializer DateTimeFormatDateParse IOPrompt
+      IPCShareLite JSON LogLog4perl LWPProtocolConnect LWPProtocolHttps MailRFC822Address
+      Moose NetAddrIP NetDNS NetIP perlldap NetHTTP NetServer NetSSLeay ParamsValidate PathClass
+      ProcProcessTable ProcSafeExec RegexpCommon SOAPLite Switch SysSigAction TemplateToolkit
+      TestPod TestPodCoverage TextCSV_XS TimeHiRes Workflow XMLFilterXInclude XMLParser
+      XMLSAX XMLSAXWriter XMLSimple XMLValidatorSchema ]
+    ++ stdenv.lib.optionals extraDependencies1
+    [ # dependencies from parsing through core/server
+      ClassAccessor Carp PathTools DataDumper DateTime DateTimeFormatStrptime DBI DigestMD5
+      Encode ExceptionClass Exporter FilePath FileTemp Filter GetoptLong HTMLParser
+      ScalarListUtils MathBigInt Memoize libnet PodUsage RTClientREST Socket
+      Storable XSLoader ]
+    ++ stdenv.lib.optionals extraDependencies2
+    [ # dependencies taken from Debian
+      MooseXTypesPathClass DataStreamBulk MooseXStrictConstructor NamespaceAutoclean GitPurePerl
+      ConfigGitLike DevelStackTrace TreeDAGNode ClassObservable ClassFactory TimeDate ConfigAny
+      CGIFast ClassISA YAML YAMLLibYAML AuthenSASL TextCSV FileFindRulePerl IODigest ]
+    ++ stdenv.lib.optionals extraDependencies3
+    [ # dependencies taken from https://metacpan.org/pod/release/ALECH/Bundle-OpenXPKI-0.06/lib/Bundle/OpenXPKI.pm
+      AttributeHandlers AttributeParamsValidate AutoLoader BC CGI CPAN CacheCache ClassClassgenclassgen
+      ClassContainer ClassDataInheritable ClassSingleton ConvertASN1 DBDSQLite DBIxHTMLViewLATEST
+      DBFile DataPage DataSpreadPagination DateTimeLocale DateTimeTimeZone DevelPPPort DevelSelfStubber
+      DevelSymdump DigestSHA1 Env Error ExtUtilsCommand ExtUtilsConstant ExtUtilsInstall
+      ExtUtilsMakeMaker FileCheckTree FilterSimple GoferTransporthttp HTMLMason HTMLTagset
+      HTTPServerSimpleMason I18NCollate IO IPCSysV LocaleCodes LocaleMaketext LogDispatch MathBigRat
+      MathComplex MathRound ModuleBuild ModuleBuildDeprecated NetPing PerlIOviaQuotedPrint PodChecker
+      PodCoverage PodEscapes PodLaTeX PodParser PodPerldoc PodPlainer PodSimple Safe SearchDict SelfLoader
+      SubUplevel SysSyslog TemplatePluginAutoformat TermANSIColor TermCap TermReadKey Test TestException
+      TestHTTPServerSimple TestHarness TestHarnessStraps TextAbbrev TextBalanced TextIconv TextSoundex
+      TextTabsWrap ThreadQueue ThreadSemaphore TieFile TieRefHash TimeLocal URI UnicodeCollate
+      UnicodeNormalize WWWMechanize Want XMLFilterBufferText XMLNamespaceSupport autodie base bignum if_
+      lib libapreq2 libnet podlators threads threadsshared version ];
+
+  preConfigure = ''
+    substituteInPlace core/server/Makefile.PL \
+      --replace "my \$openssl_inc_dir = ''';" "my \$openssl_inc_dir = '${openssl.dev}/include';" \
+      --replace "my \$openssl_lib_dir = ''';" "my \$openssl_lib_dir = '${openssl.out}/lib';" \
+      --replace "my \$openssl_binary  = ''';" "my \$openssl_binary  = '${openssl.bin}/bin/openssl';"
+    substituteInPlace tools/vergen --replace "#!/usr/bin/perl" "#!${perl}/bin/perl"
+    cp ${./vergen_revision_state} .vergen_revision_state
+    cd core/server
+    '';
+
+  postInstall = ''
+    mkdir -p $out/share/openxpki
+    cp -r ../htdocs_source $out/share/openxpki/.
+    cp -r ../../config $out/share/openxpki/.
+    cp -r ../../qatest $out/share/openxpki/.
+    (cd ../i18n; make scan; make; make install PREFIX=$out)
+    (cd ../../clients/perl/OpenXPKI-Client-Enrollment; perl Makefile.PL PREFIX=$out; make; make install PREFIX=$out)
+    (cd ../../doc; make html man; cp _build/man/* $out/share/man/man1/.; mkdir -p $out/share/openxpki/doc; cp -r _build/{html,doctrees} $out/share/openxpki/doc/.)
+    '';
+
+  doCheck = false;
+
+  meta = {
+    homepage = http://www.openxpki.org;
+    description = "Enterprise-grade PKI/Trustcenter software";
+    license = stdenv.lib.licenses.asl20;
+    maintainers = with stdenv.lib.maintainers; [ tstrobel ];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/openxpki/vergen_revision_state b/nixpkgs/pkgs/servers/openxpki/vergen_revision_state
new file mode 100644
index 000000000000..9a5d7b531de4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/openxpki/vergen_revision_state
@@ -0,0 +1,12 @@
+$revision_info = {
+                   'git-tag' => 'v0.33.0',
+                   'git-tags' => 'v0.33.0',
+                   'git-branch' => 'master',
+                   'git-description-root' => undef,
+                   'git-description' => 'v0.33.0',
+                   'revision' => '1591',
+                   'last-changed-revision' => '1591',
+                   'git-abbreviated-commit-hash' => '5cb76c5',
+                   'git-commit-hash' => '5cb76c553b6b1a81ede380857700628a7521f6e3',
+                   'git-commit-date' => 'Tue, 4 Aug 2015 12:47:29 +0200'
+                 };
diff --git a/nixpkgs/pkgs/servers/osrm-backend/default.nix b/nixpkgs/pkgs/servers/osrm-backend/default.nix
new file mode 100644
index 000000000000..4e43fffb1966
--- /dev/null
+++ b/nixpkgs/pkgs/servers/osrm-backend/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchFromGitHub, cmake, pkgconfig, bzip2, libxml2, libzip, boost, lua, luabind, tbb, expat}:
+
+stdenv.mkDerivation rec {
+  name = "osrm-backend-${version}";
+  version = "5.20.0";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner  = "Project-OSRM";
+    repo   = "osrm-backend";
+    sha256 = "0frq16p4wms8zfb6mhn7xbxrvf81f1wn37lqlf5p1yjly5fbljhc";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs = [ bzip2 libxml2 libzip boost lua luabind tbb expat ];
+
+  postInstall = "mkdir -p $out/share/osrm-backend && cp -r ../profiles $out/share/osrm-backend/profiles";
+
+  meta = {
+    homepage = https://github.com/Project-OSRM/osrm-backend/wiki;
+    description = "Open Source Routing Machine computes shortest paths in a graph. It was designed to run well with map data from the Openstreetmap Project";
+    license = stdenv.lib.licenses.bsd2;
+    maintainers = with stdenv.lib.maintainers;[ erictapen ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/p910nd/default.nix b/nixpkgs/pkgs/servers/p910nd/default.nix
new file mode 100644
index 000000000000..1f58c309aa5e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/p910nd/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "p910nd-${version}";
+  version = "0.97";
+
+  src = fetchurl {
+    sha256 = "0vy2qf386dif1nqznmy3j953mq7c4lk6j2hgyzkbmfi4msiq1jaa";
+    url = "mirror://sourceforge/p910nd/${name}.tar.bz2";
+  };
+
+  postPatch = ''
+    sed -e "s|/usr||g" -i Makefile
+  '';
+
+  makeFlags = [ "DESTDIR=$(out)" "BINDIR=/bin" ];
+
+  postInstall = ''
+    # Match the man page:
+    mv $out/etc/init.d/p910nd{,.sh}
+
+    # The legacy init script is useful only (and even then...) as an example:
+    mkdir -p $out/share/doc/examples
+    mv $out/etc $out/share/doc/examples
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Small printer daemon passing jobs directly to the printer";
+    longDescription = ''
+      p910nd is a small printer daemon intended for diskless platforms that
+      does not spool to disk but passes the job directly to the printer.
+      Normally a lpr daemon on a spooling host connects to it with a TCP
+      connection on port 910n (where n=0, 1, or 2 for lp0, 1 and 2
+      respectively). p910nd is particularly useful for diskless platforms.
+      Common Unix Printing System (CUPS) supports this protocol, it's called
+      the AppSocket protocol and has the scheme socket://. LPRng also supports
+      this protocol and the syntax is lp=remotehost%9100 in /etc/printcap.
+    '';
+    homepage = http://p910nd.sourceforge.net/;
+    downloadPage = https://sourceforge.net/projects/p910nd/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/pies/default.nix b/nixpkgs/pkgs/servers/pies/default.nix
new file mode 100644
index 000000000000..a113d583cb1a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/pies/default.nix
@@ -0,0 +1,48 @@
+{ fetchurl, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "pies-1.3";
+
+  src = fetchurl {
+    url = "mirror://gnu/pies/${name}.tar.bz2";
+    sha256 = "12r7rjjyibjdj08dvwbp0iflfpzl4s0zhn6cr6zj3hwf9gbzgl1g";
+  };
+
+  configureFlags = ["--sysconfdir=/etc"];
+
+  hardeningDisable = [ "format" ];
+
+  doCheck = true;
+
+  meta = {
+    description = "A program invocation and execution supervisor";
+
+    longDescription =
+      '' The name Pies (pronounced "p-yes") stands for Program Invocation and
+         Execution Supervisor.  This utility starts and controls execution of
+         external programs, called components.  Each component is a
+         stand-alone program, which is executed in the foreground.  Upon
+         startup, pies reads the list of components from its configuration
+         file, starts them, and remains in the background, controlling their
+         execution.  If any of the components terminates, the default action
+         of Pies is to restart it.  However, it can also be programmed to
+         perform a variety of another actions such as, e.g., sending mail
+         notifications to the system administrator, invoking another external
+         program, etc.
+
+         Pies can be used for a wide variety of tasks.  Its most obious use
+         is to put in backgound a program which normally cannot detach itself
+         from the controlling terminal, such as, e.g., minicom.  It can
+         launch and control components of some complex system, such as
+         Jabberd or MeTA1 (and it offers much more control over them than the
+         native utilities).  Finally, it can replace the inetd utility!
+      '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    homepage = https://www.gnu.org/software/pies/;
+
+    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/plex/default.nix b/nixpkgs/pkgs/servers/plex/default.nix
new file mode 100644
index 000000000000..cce1f5c6ab09
--- /dev/null
+++ b/nixpkgs/pkgs/servers/plex/default.nix
@@ -0,0 +1,84 @@
+{ stdenv, fetchurl, rpmextract, glibc
+, dataDir ? "/var/lib/plex" # Plex's data directory must be baked into the package due to symlinks.
+, enablePlexPass ? false
+}:
+
+let
+  plexPass = throw "Plex pass has been removed at upstream's request; please unset nixpkgs.config.plex.pass";
+  plexpkg = if enablePlexPass then plexPass else {
+    version = "1.14.1.5488";
+    vsnHash = "cc260c476";
+    sha256 = "8ee806f35ccedcecd0cab028bbe1f7e2ac7de24292b715978d3165c4712f5c40";
+  };
+
+in stdenv.mkDerivation rec {
+  name = "plex-${version}";
+  version = plexpkg.version;
+  vsnHash = plexpkg.vsnHash;
+  sha256 = plexpkg.sha256;
+
+  src = fetchurl {
+    url = "https://downloads.plex.tv/plex-media-server/${version}-${vsnHash}/plexmediaserver-${version}-${vsnHash}.x86_64.rpm";
+    inherit sha256;
+  };
+
+  buildInputs = [ rpmextract glibc ];
+
+  phases = [ "unpackPhase" "installPhase" "fixupPhase" "distPhase" ];
+
+  unpackPhase = ''
+    rpmextract $src
+  '';
+
+  installPhase = ''
+    install -d $out/usr/lib
+    cp -dr --no-preserve='ownership' usr/lib/plexmediaserver $out/usr/lib/
+
+    # Now we need to patch up the executables and libraries to work on Nix.
+    # Side note: PLEASE don't put spaces in your binary names. This is stupid.
+    for bin in "Plex Media Server"              \
+               "Plex Commercial Skipper"        \
+               "Plex DLNA Server"               \
+               "Plex Media Scanner"             \
+               "Plex Relay"                     \
+               "Plex Script Host"               \
+               "Plex Transcoder"                \
+               "Plex Tuner Service"             ; do
+      patchelf --set-interpreter "${glibc.out}/lib/ld-linux-x86-64.so.2" "$out/usr/lib/plexmediaserver/$bin"
+      patchelf --set-rpath "$out/usr/lib/plexmediaserver" "$out/usr/lib/plexmediaserver/$bin"
+    done
+
+    find $out/usr/lib/plexmediaserver/Resources -type f -a -perm -0100 \
+        -print -exec patchelf --set-interpreter "${glibc.out}/lib/ld-linux-x86-64.so.2" '{}' \;
+
+    # executables need libstdc++.so.6
+    ln -s "${stdenv.lib.makeLibraryPath [ stdenv.cc.cc ]}/libstdc++.so.6" "$out/usr/lib/plexmediaserver/libstdc++.so.6"
+
+    # Our next problem is the "Resources" directory in /usr/lib/plexmediaserver.
+    # This is ostensibly a skeleton directory, which contains files that Plex
+    # copies into its folder in /var. Unfortunately, there are some SQLite
+    # databases in the directory that are opened at startup. Since these
+    # database files are read-only, SQLite chokes and Plex fails to start. To
+    # solve this, we keep the resources directory in the Nix store, but we
+    # rename the database files and replace the originals with symlinks to
+    # /var/lib/plex. Then, in the systemd unit, the base database files are
+    # copied to /var/lib/plex before starting Plex.
+    RSC=$out/usr/lib/plexmediaserver/Resources
+    for db in "com.plexapp.plugins.library.db"; do
+        mv $RSC/$db $RSC/base_$db
+        ln -s "${dataDir}/.skeleton/$db" $RSC/$db
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://plex.tv/;
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ colemickens forkk thoughtpolice pjones lnl7 ];
+    description = "Media / DLNA server";
+    longDescription = ''
+      Plex is a media server which allows you to store your media and play it
+      back across many different devices.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/servers/plexpy/default.nix b/nixpkgs/pkgs/servers/plexpy/default.nix
new file mode 100644
index 000000000000..2875ecc52404
--- /dev/null
+++ b/nixpkgs/pkgs/servers/plexpy/default.nix
@@ -0,0 +1,41 @@
+{stdenv, fetchFromGitHub, python}:
+
+stdenv.mkDerivation rec {
+  version = "1.4.25";
+  pname = "plexpy";
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "JonnyWong16";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0a4ynrfamlwkgqil4n61v47p21czxpjdzg0mias4kdjam2nnwnjx";
+  };
+
+  buildPhase = ":";
+
+  installPhase = ''
+    mkdir -p $out
+    cp -R * $out/
+
+    # Remove superfluous Python checks from main script;
+    # prepend shebang
+    echo "#!${python.interpreter}" > $out/PlexPy.py
+    tail -n +7 PlexPy.py >> $out/PlexPy.py
+
+    mkdir $out/bin
+    # Can't just symlink to the main script, since it uses __file__ to
+    # import bundled packages and manage the service
+    echo "#!/bin/bash" > $out/bin/plexpy
+    echo "$out/PlexPy.py \$*" >> $out/bin/plexpy
+    chmod +x $out/bin/plexpy
+  '';
+
+  meta  = with stdenv.lib; {
+    description = "A Python based monitoring and tracking tool for Plex Media Server.";
+    homepage = http://jonnywong16.github.io/plexpy/;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ csingley ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/polipo/default.nix b/nixpkgs/pkgs/servers/polipo/default.nix
new file mode 100644
index 000000000000..a7a0791b8520
--- /dev/null
+++ b/nixpkgs/pkgs/servers/polipo/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, texinfo }:
+
+stdenv.mkDerivation rec {
+  name = "polipo-${version}";
+  version = "1.1.1";
+
+  src = fetchurl {
+    url = "http://www.pps.univ-paris-diderot.fr/~jch/software/files/polipo/${name}.tar.gz";
+    sha256 = "05g09sg9qkkhnc2mxldm1w1xkxzs2ylybkjzs28w8ydbjc3pand2";
+  };
+
+  buildInputs = [ texinfo ];
+  makeFlags = [ "PREFIX=$(out)" "LOCAL_ROOT=$(out)/share/polipo/www" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.pps.jussieu.fr/~jch/software/polipo/;
+    description = "A small and fast caching web proxy";
+    license = licenses.mit;
+    maintainers = with maintainers; [ phreedom ehmry ];
+    platforms = platforms.all;
+    knownVulnerabilities = [
+      "Unmaintained upstream: https://github.com/jech/polipo/commit/4d42ca1b5849"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/prayer/default.nix b/nixpkgs/pkgs/servers/prayer/default.nix
new file mode 100644
index 000000000000..7997d0ebcd8b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/prayer/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, perl, openssl, db, zlib, uwimap, html-tidy, pam}:
+
+let
+  ssl = stdenv.lib.optionals uwimap.withSSL
+    "-e 's/CCLIENT_SSL_ENABLE.*= false/CCLIENT_SSL_ENABLE=true/'";
+in
+stdenv.mkDerivation rec {
+  name = "prayer-1.3.5";
+
+  src = fetchurl {
+    url = "ftp://ftp.csx.cam.ac.uk/pub/software/email/prayer/${name}.tar.gz";
+    sha256 = "135fjbxjn385b6cjys6qhbwfw61mdcl2akkll4jfpdzfvhbxlyda";
+  };
+
+  patches = [ ./install.patch ];
+  postPatch = ''
+    sed -i -e s/gmake/make/ -e 's/LDAP_ENABLE.*= true/LDAP_ENABLE=false/' \
+      ${ssl} \
+      -e 's/CCLIENT_LIBS=.*/CCLIENT_LIBS=-lc-client/' \
+      -e 's,^PREFIX .*,PREFIX='$out, \
+      -e 's,^CCLIENT_DIR=.*,CCLIENT_DIR=${uwimap}/include/c-client,' \
+      Config
+    sed -i -e s,/usr/bin/perl,${perl}/bin/perl, \
+      templates/src/*.pl
+  '' + /* html-tidy updates */ ''
+    substituteInPlace ./session/html_secure_tidy.c \
+      --replace buffio.h tidybuffio.h
+  '';
+
+  buildInputs = [ openssl db zlib uwimap html-tidy pam ];
+  nativeBuildInputs = [ perl ];
+
+  NIX_LDFLAGS = "-lpam";
+
+  meta = {
+    homepage = http://www-uxsup.csx.cam.ac.uk/~dpc22/prayer/;
+    description = "Yet another Webmail interface for IMAP servers on Unix systems written in C";
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/prayer/install.patch b/nixpkgs/pkgs/servers/prayer/install.patch
new file mode 100644
index 000000000000..439202dd9555
--- /dev/null
+++ b/nixpkgs/pkgs/servers/prayer/install.patch
@@ -0,0 +1,170 @@
+diff --git a/accountd/Makefile b/accountd/Makefile
+index c3e8107..7946776 100644
+--- a/accountd/Makefile
++++ b/accountd/Makefile
+@@ -75,6 +75,6 @@ clean:
+ 	-rm -f prayer-accountd test core *.o *~ \#*\# 
+ 
+ install:
+-	$(INSTALL) -m 755 -o ${RO_USER} -g ${RW_GROUP} \
++	$(INSTALL) -m 755 \
+ 	prayer-accountd ${BROOT}${BIN_DIR}
+ 
+diff --git a/files/Makefile b/files/Makefile
+index 743d0ed..7eff064 100644
+--- a/files/Makefile
++++ b/files/Makefile
+@@ -52,20 +52,20 @@ distclean:
+ 
+ install-cert:
+ 	if [ -f certs/prayer.pem ]; then \
+-	$(INSTALL) -o $(RO_USER) -g $(RO_GROUP) \
++	$(INSTALL) \
+ 	-m $(PRIVATE_FILE) certs/prayer.pem ${BROOT}${PREFIX}/certs; \
+ 	fi
+ 
+ install-config: etc/prayer.cf
+-	$(INSTALL) -D -o $(RO_USER) -g $(RO_GROUP) -m $(PUBLIC_FILE) \
++	$(INSTALL) -D -m $(PUBLIC_FILE) \
+ 	etc/prayer.cf ${BROOT}${PRAYER_CONFIG_FILE}
+ 
+ install-aconfig:
+-	$(INSTALL) -D -o $(RO_USER) -g $(RO_GROUP) -m $(PUBLIC_FILE) \
++	$(INSTALL) -D -m $(PUBLIC_FILE) \
+ 	etc/prayer-accountd.cf ${BROOT}${ACCOUNTD_CONFIG_FILE}
+ 
+ install-motd:
+-	$(INSTALL) -o $(RO_USER) -g $(RO_GROUP) -m $(PUBLIC_FILE) \
++	$(INSTALL) -m $(PUBLIC_FILE) \
+ 	etc/motd.html ${BROOT}${PREFIX}/etc
+ 
+ install:
+@@ -83,6 +83,6 @@ install:
+ 	if [ ! -f $(BROOT)$(PREFIX)/etc/motd.html ]; then $(MAKE) install-motd; fi
+ 
+ redhat-install-init.d:
+-	install -D -o root -g root -m 755 \
++	install -D -m 755 \
+ 		./init.d/prayer $(BROOT)/etc/rc.d/init.d/prayer
+ 	#chkconfig prayer --level 2345 on
+diff --git a/files/install.sh b/files/install.sh
+index 8d1d1f4..0804a08 100755
+--- a/files/install.sh
++++ b/files/install.sh
+@@ -2,8 +2,6 @@
+ #
+ # $Cambridge: hermes/src/prayer/files/install.sh,v 1.7 2008/09/16 09:59:56 dpc22 Exp $
+ 
+-PATH=/bin:/sbin/:/usr/bin:/usr/sbin
+-
+ error=0
+ 
+ if [ "x$PREFIX" = "x" ]; then
+@@ -55,24 +53,20 @@ if [ $error != 0 ]; then
+     exit 1
+ fi
+ 
+-if [ ! -d ${VAR_PREFIX} -a `whoami` = "root" ]; then
+-    ${INSTALL} -d -o ${RW_USER} -g ${RW_GROUP} -m ${PRIVATE_DIR} ${VAR_PREFIX}
+-fi
+-
+ if [ ! -d ${PREFIX} ]; then
+-    ${INSTALL} -d -o ${RO_USER} -g ${RO_GROUP} -m ${PUBLIC_DIR} ${PREFIX}
++    ${INSTALL} -d -m ${PUBLIC_DIR} ${PREFIX}
+ fi
+ 
+ if [ ! -d ${PREFIX}/etc ]; then
+-    ${INSTALL} -d -o ${RO_USER} -g ${RO_GROUP} -m ${PUBLIC_DIR} ${PREFIX}/etc
++    ${INSTALL} -d -m ${PUBLIC_DIR} ${PREFIX}/etc
+ fi
+ 
+ if [ ! -d ${PREFIX}/certs ]; then
+-    ${INSTALL} -d -o ${RO_USER} -g ${RO_GROUP} -m ${PRIVATE_DIR} ${PREFIX}/certs
++    ${INSTALL} -d -m ${PRIVATE_DIR} ${PREFIX}/certs
+ fi
+ 
+ if [ ! -d ${BIN_DIR} ]; then
+-    ${INSTALL} -d -o ${RO_USER} -g ${RO_GROUP} -m ${PUBLIC_DIR} ${BIN_DIR}
++    ${INSTALL} -d -m ${PUBLIC_DIR} ${BIN_DIR}
+ fi
+ 
+ for i in icons static
+@@ -83,5 +77,4 @@ do
+     fi
+     echo Copying ${i}
+     (tar cf - ${i}) | (cd ${PREFIX} ; tar xf -)
+-    (cd ${PREFIX}; chown -R ${RO_USER}:${RO_GROUP} ${i})
+ done
+diff --git a/servers/Makefile b/servers/Makefile
+index 021aed5..5ccbd08 100644
+--- a/servers/Makefile
++++ b/servers/Makefile
+@@ -107,13 +107,13 @@ clean:
+ 	-rm -f $(BIN) core *.o *.flc *~ \#*\#
+ 
+ install: all
+-	$(INSTALL) -o $(RO_USER) -g $(RO_GROUP) -m $(PUBLIC_DIR) -d \
++	$(INSTALL) -m $(PUBLIC_DIR) -d \
+ 	  $(BROOT)$(BIN_DIR)
+-	$(INSTALL) -o $(RO_USER) -g $(RO_GROUP) -m $(PUBLIC_EXEC) \
++	$(INSTALL) -m $(PUBLIC_EXEC) \
+ 	  prayer           $(BROOT)$(BIN_DIR)
+-	$(INSTALL) -o $(RO_USER) -g $(RO_GROUP) -m $(PUBLIC_EXEC) \
++	$(INSTALL) -m $(PUBLIC_EXEC) \
+ 	  prayer-chroot           $(BROOT)$(BIN_DIR)
+-	$(INSTALL) -o $(RO_USER) -g $(RO_GROUP) -m $(PUBLIC_EXEC) \
++	$(INSTALL) -m $(PUBLIC_EXEC) \
+ 	  prayer-session   $(BROOT)$(BIN_DIR)
+ 
+ prayer: $(PRAYER_OBJS) prayer_main.o
+diff --git a/templates/cam/Makefile b/templates/cam/Makefile
+index 9f4122a..396b628 100644
+--- a/templates/cam/Makefile
++++ b/templates/cam/Makefile
+@@ -124,7 +124,7 @@ _template_index.c:
+ 	$(COMPILE) $(TYPE) $@ $*
+ 
+ install:
+-	$(INSTALL) -o $(RO_USER) -g $(RO_GROUP) -m $(PUBLIC_DIR) -d \
++	$(INSTALL) -m $(PUBLIC_DIR) -d \
+ 	  $(BROOT)$(PREFIX)/templates/$(TYPE)
+ 	cp *.t $(BROOT)$(PREFIX)/templates/$(TYPE)
+ 	cp *.vars $(BROOT)$(PREFIX)/templates/$(TYPE)
+diff --git a/templates/old/Makefile b/templates/old/Makefile
+index 31016cf..288a64c 100644
+--- a/templates/old/Makefile
++++ b/templates/old/Makefile
+@@ -123,7 +123,7 @@ _template_index.c:
+ 	$(COMPILE) $(TYPE) $@ $*
+ 
+ install:
+-	$(INSTALL) -o $(RO_USER) -g $(RO_GROUP) -m $(PUBLIC_DIR) -d \
++	$(INSTALL) -m $(PUBLIC_DIR) -d \
+ 	  $(BROOT)$(PREFIX)/templates/$(TYPE)
+ 	cp *.t $(BROOT)$(PREFIX)/templates/$(TYPE)
+ 	cp *.vars $(BROOT)$(PREFIX)/templates/$(TYPE)
+diff --git a/utils/Makefile b/utils/Makefile
+index 9c79916..ef82481 100644
+--- a/utils/Makefile
++++ b/utils/Makefile
+@@ -72,15 +72,15 @@ clean:
+ 	-rm -f $(BIN) core *.o *.flc *~ \#*\#
+ 
+ install: all
+-	$(INSTALL) -o $(RO_USER) -g $(RO_GROUP) -m $(PUBLIC_DIR) -d \
++	$(INSTALL) -m $(PUBLIC_DIR) -d \
+ 	  $(BROOT)$(BIN_DIR)
+-	$(INSTALL) -o $(RO_USER) -g $(RO_GROUP) -m $(PUBLIC_EXEC) \
++	$(INSTALL) -m $(PUBLIC_EXEC) \
+ 	  prayer-ssl-prune $(BROOT)$(BIN_DIR)
+-	$(INSTALL) -o $(RO_USER) -g $(RO_GROUP) -m $(PUBLIC_EXEC) \
++	$(INSTALL) -m $(PUBLIC_EXEC) \
+ 	  prayer-sem-prune $(BROOT)$(BIN_DIR)
+-	$(INSTALL) -o $(RO_USER) -g $(RO_GROUP) -m $(PUBLIC_EXEC) \
++	$(INSTALL) -m $(PUBLIC_EXEC) \
+ 	  prayer-db-prune $(BROOT)$(BIN_DIR)
+-	$(INSTALL) -o $(RO_USER) -g $(RO_GROUP) -m $(PUBLIC_EXEC) \
++	$(INSTALL) -m $(PUBLIC_EXEC) \
+ 	  prayer-cyclog    $(BROOT)$(BIN_DIR)
+ 
+ prayer-ssl-prune: $(PRUNE_OBJS)
diff --git a/nixpkgs/pkgs/servers/ps3netsrv/default.nix b/nixpkgs/pkgs/servers/ps3netsrv/default.nix
new file mode 100644
index 000000000000..6aaaf95fae16
--- /dev/null
+++ b/nixpkgs/pkgs/servers/ps3netsrv/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchgit }:
+
+stdenv.mkDerivation rec {
+  name = "ps3netsrv-${version}";
+  version = "1.1.0";
+
+  enableParallelBuilding = true;
+
+  src = fetchgit {
+    url = "https://github.com/dirkvdb/ps3netsrv--";
+    fetchSubmodules = true;
+    rev = "e54a66cbf142b86e2cffc1701984b95adb921e81";
+    sha256 = "09hvmfzqy2jckpsml0z1gkcnar8sigmgs1q66k718fph2d3g54sa";
+  };
+
+  buildPhase = "make CXX=$CXX";
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ps3netsrv++ $out/bin
+  '';
+
+  meta = {
+    description = "C++ implementation of the ps3netsrv server";
+    homepage = https://github.com/dirkvdb/ps3netsrv--;
+    license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = with stdenv.lib.maintainers; [ makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/pulseaudio/default.nix b/nixpkgs/pkgs/servers/pulseaudio/default.nix
new file mode 100644
index 000000000000..ab0839de961c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/pulseaudio/default.nix
@@ -0,0 +1,137 @@
+{ lib, stdenv, fetchurl, pkgconfig, intltool, autoreconfHook
+, libsndfile, libtool, makeWrapper
+, xorg, libcap, alsaLib, glib, gnome3
+, avahi, libjack2, libasyncns, lirc, dbus
+, sbc, bluez5, udev, openssl, fftwFloat
+, speexdsp, systemd, webrtc-audio-processing
+
+, x11Support ? false
+
+, useSystemd ? true
+
+, # Whether to support the JACK sound system as a backend.
+  jackaudioSupport ? false
+
+, # Whether to build the OSS wrapper ("padsp").
+  ossWrapper ? true
+
+, airtunesSupport ? false
+
+, bluetoothSupport ? false
+
+, remoteControlSupport ? false
+
+, zeroconfSupport ? false
+
+, # Whether to build only the library.
+  libOnly ? false
+
+, CoreServices, AudioUnit, Cocoa
+}:
+
+stdenv.mkDerivation rec {
+  name = "${if libOnly then "lib" else ""}pulseaudio-${version}";
+  version = "12.2";
+
+  src = fetchurl {
+    url = "http://freedesktop.org/software/pulseaudio/releases/pulseaudio-${version}.tar.xz";
+    sha256 = "0ma0p8iry7fil7qb4pm2nx2pm65kq9hk9xc4r5wkf14nqbzni5l0";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [ pkgconfig intltool autoreconfHook makeWrapper ];
+
+  propagatedBuildInputs =
+    lib.optionals stdenv.isLinux [ libcap ];
+
+  buildInputs =
+    [ libtool libsndfile speexdsp fftwFloat ]
+    ++ lib.optionals stdenv.isLinux [ glib dbus ]
+    ++ lib.optionals stdenv.isDarwin [ CoreServices AudioUnit Cocoa ]
+    ++ lib.optionals (!libOnly) (
+      [ libasyncns webrtc-audio-processing ]
+      ++ lib.optional jackaudioSupport libjack2
+      ++ lib.optionals x11Support [ xorg.xlibsWrapper xorg.libXtst xorg.libXi ]
+      ++ lib.optional useSystemd systemd
+      ++ lib.optionals stdenv.isLinux [ alsaLib udev ]
+      ++ lib.optional airtunesSupport openssl
+      ++ lib.optionals bluetoothSupport [ bluez5 sbc ]
+      ++ lib.optional remoteControlSupport lirc
+      ++ lib.optional zeroconfSupport  avahi
+    );
+
+  preConfigure = ''
+    # Performs and autoreconf
+    export NOCONFIGURE="yes"
+    patchShebangs bootstrap.sh
+    ./bootstrap.sh
+
+    # Move the udev rules under $(prefix).
+    sed -i "src/Makefile.in" \
+        -e "s|udevrulesdir[[:blank:]]*=.*$|udevrulesdir = $out/lib/udev/rules.d|g"
+
+    # don't install proximity-helper as root and setuid
+    sed -i "src/Makefile.in" \
+        -e "s|chown root|true |" \
+        -e "s|chmod r+s |true |"
+  '';
+
+  configureFlags =
+    [ "--disable-solaris"
+      "--disable-jack"
+      "--disable-oss-output"
+    ] ++ lib.optional (!ossWrapper) "--disable-oss-wrapper" ++
+    [ "--localstatedir=/var"
+      "--sysconfdir=/etc"
+      "--with-access-group=audio"
+      "--with-bash-completion-dir=\${out}/share/bash-completions/completions"
+    ]
+    ++ lib.optional (jackaudioSupport && !libOnly) "--enable-jack"
+    ++ lib.optional stdenv.isDarwin "--with-mac-sysroot=/"
+    ++ lib.optional (stdenv.isLinux && useSystemd) "--with-systemduserunitdir=\${out}/lib/systemd/user";
+
+  enableParallelBuilding = true;
+
+  # not sure what the best practices are here -- can't seem to find a way
+  # for the compiler to bring in stdlib and stdio (etc.) properly
+  # the alternative is to copy the files from /usr/include to src, but there are
+  # probably a large number of files that would need to be copied (I stopped
+  # after the seventh)
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-I/usr/include";
+
+  installFlags =
+    [ "sysconfdir=$(out)/etc"
+      "pulseconfdir=$(out)/etc/pulse"
+    ];
+
+  postInstall = lib.optionalString libOnly ''
+    rm -rf $out/{bin,share,etc,lib/{pulse-*,systemd}}
+    sed 's|-lltdl|-L${libtool.lib}/lib -lltdl|' -i $out/lib/pulseaudio/libpulsecore-${version}.la
+  ''
+    + ''moveToOutput lib/cmake "$dev" '';
+
+  preFixup = lib.optionalString stdenv.isLinux ''
+    wrapProgram $out/libexec/pulse/gsettings-helper \
+     --prefix XDG_DATA_DIRS : "$out/share/gsettings-schemas/${name}" \
+     --prefix GIO_EXTRA_MODULES : "${lib.getLib gnome3.dconf}/lib/gio/modules"
+  '';
+
+  meta = {
+    description = "Sound server for POSIX and Win32 systems";
+    homepage    = http://www.pulseaudio.org/;
+    license     = lib.licenses.lgpl2Plus;
+    maintainers = with lib.maintainers; [ lovek323 wkennington ];
+    platforms   = lib.platforms.unix;
+
+    longDescription = ''
+      PulseAudio is a sound server for POSIX and Win32 systems.  A
+      sound server is basically a proxy for your sound applications.
+      It allows you to do advanced operations on your sound data as it
+      passes between your application and your hardware.  Things like
+      transferring the audio to a different machine, changing the
+      sample format or channel count and mixing several sounds into
+      one are easily achieved using a sound server.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/servers/quagga/default.nix b/nixpkgs/pkgs/servers/quagga/default.nix
new file mode 100644
index 000000000000..1d8f0c36caec
--- /dev/null
+++ b/nixpkgs/pkgs/servers/quagga/default.nix
@@ -0,0 +1,73 @@
+{ stdenv, fetchurl, libcap, libnl, readline, net_snmp, less, perl, texinfo,
+  pkgconfig, c-ares }:
+
+stdenv.mkDerivation rec {
+  name = "quagga-${version}";
+  version = "1.2.4";
+
+  src = fetchurl {
+    url = "mirror://savannah/quagga/${name}.tar.gz";
+    sha256 = "1lsksqxij5f1llqn86pkygrf5672kvrqn1kvxghi169hqf1c0r73";
+  };
+
+  buildInputs =
+    [ readline net_snmp c-ares ]
+    ++ stdenv.lib.optionals stdenv.isLinux [ libcap libnl ];
+
+  nativeBuildInputs = [ pkgconfig perl texinfo ];
+
+  configureFlags = [
+    "--sysconfdir=/etc/quagga"
+    "--localstatedir=/run/quagga"
+    "--sbindir=$(out)/libexec/quagga"
+    "--disable-exampledir"
+    "--enable-user=quagga"
+    "--enable-group=quagga"
+    "--enable-configfile-mask=0640"
+    "--enable-logfile-mask=0640"
+    "--enable-vtysh"
+    "--enable-vty-group=quaggavty"
+    "--enable-snmp"
+    "--enable-multipath=64"
+    "--enable-rtadv"
+    "--enable-irdp"
+    "--enable-opaque-lsa"
+    "--enable-ospf-te"
+    "--enable-pimd"
+    "--enable-isis-topology"
+  ];
+
+  preConfigure = ''
+    substituteInPlace vtysh/vtysh.c --replace \"more\" \"${less}/bin/less\"
+  '';
+
+  postInstall = ''
+    rm -f $out/bin/test_igmpv3_join
+    mv -f $out/libexec/quagga/ospfclient $out/bin/
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Quagga BGP/OSPF/ISIS/RIP/RIPNG routing daemon suite";
+    longDescription = ''
+      GNU Quagga is free software which manages TCP/IP based routing protocols.
+      It supports BGP4, BGP4+, OSPFv2, OSPFv3, IS-IS, RIPv1, RIPv2, and RIPng as
+      well as the IPv6 versions of these.
+
+      As the predecessor Zebra has been considered orphaned, the Quagga project
+      has been formed by members of the zebra mailing list and the former
+      zebra-pj project to continue developing.
+
+      Quagga uses threading if the kernel supports it, but can also run on
+      kernels that do not support threading. Each protocol has its own daemon.
+
+      It is more than a routed replacement, it can be used as a Route Server and
+      a Route Reflector.
+    '';
+    homepage = https://www.nongnu.org/quagga/;
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ tavyc ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/radarr/default.nix b/nixpkgs/pkgs/servers/radarr/default.nix
new file mode 100644
index 000000000000..62cb2d7f348b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/radarr/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, mono, libmediainfo, sqlite, curl, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "radarr-${version}";
+  version = "0.2.0.1217";
+
+  src = fetchurl {
+    url = "https://github.com/Radarr/Radarr/releases/download/v${version}/Radarr.v${version}.linux.tar.gz";
+    sha256 = "09zzvfqpv58b79a906013pjq42qwbibf16rz24gnqg7wq7az83jy";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/${name}}
+    cp -r * $out/share/${name}/.
+
+    makeWrapper "${mono}/bin/mono" $out/bin/Radarr \
+      --add-flags "$out/share/${name}/Radarr.exe" \
+      --prefix LD_LIBRARY_PATH : ${stdenv.lib.makeLibraryPath [
+          curl sqlite libmediainfo ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A Usenet/BitTorrent movie downloader";
+    homepage = https://radarr.video/;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ edwtjo ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/radicale/1.x.nix b/nixpkgs/pkgs/servers/radicale/1.x.nix
new file mode 100644
index 000000000000..13db868845a0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/radicale/1.x.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  name = "radicale-${version}";
+  version = "1.1.6";
+
+  src = fetchurl {
+    url = "mirror://pypi/R/Radicale/Radicale-${version}.tar.gz";
+    sha256 = "0ay90nj6fmr2aq8imi0mbjl4m2rzq7a83ikj8qs9gxsylj71j1y0";
+  };
+
+  propagatedBuildInputs = stdenv.lib.optionals (!pythonPackages.isPy3k) [
+    pythonPackages.flup
+    pythonPackages.ldap
+    pythonPackages.sqlalchemy
+  ];
+
+  doCheck = !pythonPackages.isPy3k;
+
+  meta = with stdenv.lib; {
+    homepage = http://www.radicale.org/;
+    description = "CalDAV CardDAV server";
+    longDescription = ''
+      The Radicale Project is a complete CalDAV (calendar) and CardDAV
+      (contact) server solution. Calendars and address books are available for
+      both local and remote access, possibly limited through authentication
+      policies. They can be viewed and edited by calendar and contact clients
+      on mobile phones or computers.
+    '';
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ edwtjo pSub aneeshusa ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/radicale/default.nix b/nixpkgs/pkgs/servers/radicale/default.nix
new file mode 100644
index 000000000000..90e27b2907e5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/radicale/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "Radicale";
+  version = "2.1.11";
+
+  # No tests in PyPI tarball
+  src = fetchFromGitHub {
+    owner = "Kozea";
+    repo = "Radicale";
+    rev = version;
+    sha256 = "1k32iy55lnyyp1r75clarhwdqvw6w8mxb5v0l5aysga07fg2mix4";
+  };
+
+  # We only want functional tests
+  postPatch = ''
+    sed -i "s/pytest-cov\|pytest-flake8\|pytest-isort//g" setup.py
+    sed -i "/^addopts/d" setup.cfg
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    vobject
+    python-dateutil
+    passlib
+  ];
+
+  checkInputs = with python3.pkgs; [
+    pytestrunner
+    pytest
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.radicale.org/;
+    description = "CalDAV CardDAV server";
+    longDescription = ''
+      The Radicale Project is a complete CalDAV (calendar) and CardDAV
+      (contact) server solution. Calendars and address books are available for
+      both local and remote access, possibly limited through authentication
+      policies. They can be viewed and edited by calendar and contact clients
+      on mobile phones or computers.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ edwtjo pSub aneeshusa infinisil ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/rainloop/default.nix b/nixpkgs/pkgs/servers/rainloop/default.nix
new file mode 100644
index 000000000000..76f3ded78086
--- /dev/null
+++ b/nixpkgs/pkgs/servers/rainloop/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, unzip, dataPath ? "/etc/rainloop" }: let
+  common = { edition, sha256 }:
+    stdenv.mkDerivation (rec {
+      name = "rainloop-${edition}-${version}";
+      version = "1.12.1";
+
+      buildInputs = [ unzip ];
+
+      unpackPhase = ''
+        mkdir rainloop
+        unzip -q -d rainloop $src
+      '';
+
+      src = fetchurl {
+        url = "https://github.com/RainLoop/rainloop-webmail/releases/download/v${version}/rainloop-${edition}${stdenv.lib.optionalString (edition != "") "-"}${version}.zip";
+        sha256 = sha256;
+      };
+
+      installPhase = ''
+        mkdir $out
+        cp -r rainloop/* $out
+        rm -rf $out/data
+        ln -s ${dataPath} $out/data
+      '';
+
+      meta = with stdenv.lib; {
+        description = "Simple, modern & fast web-based email client";
+        homepage = "https://www.rainloop.net";
+        downloadPage = https://github.com/RainLoop/rainloop-webmail/releases;
+        license = licenses.agpl3;
+        platforms = platforms.all;
+        maintainers = with maintainers; [ das_j ];
+      };
+    });
+  in {
+    rainloop-community = common {
+      edition = "community";
+      sha256 = "06w1vxqpcj2j8dzzjqh6azala8l46hzy85wcvqbjdlj5w789jzsx";
+    };
+    rainloop-standard = common {
+      edition = "";
+      sha256 = "1fbnpk7l2fbmzn31vx36caqg9xm40g4hh4mv3s8d70slxwhlscw0";
+    };
+  }
diff --git a/nixpkgs/pkgs/servers/rippled/data-api.nix b/nixpkgs/pkgs/servers/rippled/data-api.nix
new file mode 100644
index 000000000000..04d520b412c1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/rippled/data-api.nix
@@ -0,0 +1,25 @@
+{ lib, fetchgit, nodePackages }:
+
+with lib;
+
+let
+  np = nodePackages.override { generated = ./package.nix; self = np; };
+in nodePackages.buildNodePackage rec {
+  name = "ripple-data-api-${version}";
+  version = lib.strings.substring 0 7 rev;
+  rev = "c56b860105f36c1c44ae011189d495272648c589";
+
+  src = fetchgit {
+    url = https://github.com/ripple/ripple-data-api.git;
+    inherit rev;
+    sha256 = "1iygp26ilradxj268g1l2y93cgrpchqwn71qdag67lv273dbq48m";
+  };
+
+  deps = (filter (v: nixType v == "derivation") (attrValues np));
+
+  meta = {
+    description = "Historical ripple data";
+    homepage = https://github.com/ripple/ripple-data-api;
+    maintainers = with maintainers; [ offline ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/rippled/default.nix b/nixpkgs/pkgs/servers/rippled/default.nix
new file mode 100644
index 000000000000..af25da7ae458
--- /dev/null
+++ b/nixpkgs/pkgs/servers/rippled/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, scons, pkgconfig, openssl, protobuf, boost, zlib}:
+
+stdenv.mkDerivation rec {
+  name = "rippled-${version}";
+  version = "0.30.0-rc1";
+
+  src = fetchFromGitHub {
+    owner = "ripple";
+    repo = "rippled";
+    rev = version;
+    sha256 = "0l1dg29mg6wsdkh0lwi2znpl2wcm6bs6d3lswk5g1m1nk2mk7lr7";
+  };
+
+  postPatch = ''
+    sed -i -e "s@ENV = dict.*@ENV = os.environ@g" SConstruct
+  '';
+
+  nativeBuildInputs = [ pkgconfig scons ];
+  buildInputs = [ openssl protobuf boost zlib ];
+
+  postInstall = ''
+    mkdir -p $out/bin
+    cp build/rippled $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Ripple P2P payment network reference server";
+    homepage = https://ripple.com;
+    maintainers = with maintainers; [ ehmry offline ];
+    license = licenses.isc;
+    platforms = [ "x86_64-linux" ];
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/rippled/package.nix b/nixpkgs/pkgs/servers/rippled/package.nix
new file mode 100644
index 000000000000..87f4326c48c3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/rippled/package.nix
@@ -0,0 +1,6029 @@
+{ self, fetchurl ? null }:
+
+{
+  by-spec."abbrev"."1" =
+    self.by-version."abbrev"."1.0.5";
+  by-version."abbrev"."1.0.5" = self.buildNodePackage {
+    name = "abbrev-1.0.5";
+    version = "1.0.5";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz";
+      name = "abbrev-1.0.5.tgz";
+      sha1 = "5d8257bd9ebe435e698b2fa431afde4fe7b10b03";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."abbrev"."1.0.x" =
+    self.by-version."abbrev"."1.0.5";
+  by-spec."accepts"."~1.2.5" =
+    self.by-version."accepts"."1.2.7";
+  by-version."accepts"."1.2.7" = self.buildNodePackage {
+    name = "accepts-1.2.7";
+    version = "1.2.7";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/accepts/-/accepts-1.2.7.tgz";
+      name = "accepts-1.2.7.tgz";
+      sha1 = "efea24e36e0b5b93d001a7598ac441c32ef56003";
+    };
+    deps = {
+      "mime-types-2.0.11" = self.by-version."mime-types"."2.0.11";
+      "negotiator-0.5.3" = self.by-version."negotiator"."0.5.3";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."accepts"."~1.2.7" =
+    self.by-version."accepts"."1.2.7";
+  by-spec."amdefine".">=0.0.4" =
+    self.by-version."amdefine"."0.1.0";
+  by-version."amdefine"."0.1.0" = self.buildNodePackage {
+    name = "amdefine-0.1.0";
+    version = "0.1.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz";
+      name = "amdefine-0.1.0.tgz";
+      sha1 = "3ca9735cf1dde0edf7a4bf6641709c8024f9b227";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."ansi"."^0.3.0" =
+    self.by-version."ansi"."0.3.0";
+  by-version."ansi"."0.3.0" = self.buildNodePackage {
+    name = "ansi-0.3.0";
+    version = "0.3.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ansi/-/ansi-0.3.0.tgz";
+      name = "ansi-0.3.0.tgz";
+      sha1 = "74b2f1f187c8553c7f95015bcb76009fb43d38e0";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."ansi"."~0.3.0" =
+    self.by-version."ansi"."0.3.0";
+  by-spec."ansi-regex"."^0.2.0" =
+    self.by-version."ansi-regex"."0.2.1";
+  by-version."ansi-regex"."0.2.1" = self.buildNodePackage {
+    name = "ansi-regex-0.2.1";
+    version = "0.2.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz";
+      name = "ansi-regex-0.2.1.tgz";
+      sha1 = "0d8e946967a3d8143f93e24e298525fc1b2235f9";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."ansi-regex"."^0.2.1" =
+    self.by-version."ansi-regex"."0.2.1";
+  by-spec."ansi-regex"."^1.0.0" =
+    self.by-version."ansi-regex"."1.1.1";
+  by-version."ansi-regex"."1.1.1" = self.buildNodePackage {
+    name = "ansi-regex-1.1.1";
+    version = "1.1.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz";
+      name = "ansi-regex-1.1.1.tgz";
+      sha1 = "41c847194646375e6a1a5d10c3ca054ef9fc980d";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."ansi-regex"."^1.1.0" =
+    self.by-version."ansi-regex"."1.1.1";
+  by-spec."ansi-styles"."^1.1.0" =
+    self.by-version."ansi-styles"."1.1.0";
+  by-version."ansi-styles"."1.1.0" = self.buildNodePackage {
+    name = "ansi-styles-1.1.0";
+    version = "1.1.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz";
+      name = "ansi-styles-1.1.0.tgz";
+      sha1 = "eaecbf66cd706882760b2f4691582b8f55d7a7de";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."ansi-styles"."^2.0.1" =
+    self.by-version."ansi-styles"."2.0.1";
+  by-version."ansi-styles"."2.0.1" = self.buildNodePackage {
+    name = "ansi-styles-2.0.1";
+    version = "2.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ansi-styles/-/ansi-styles-2.0.1.tgz";
+      name = "ansi-styles-2.0.1.tgz";
+      sha1 = "b033f57f93e2d28adeb8bc11138fa13da0fd20a3";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."are-we-there-yet"."~1.0.0" =
+    self.by-version."are-we-there-yet"."1.0.4";
+  by-version."are-we-there-yet"."1.0.4" = self.buildNodePackage {
+    name = "are-we-there-yet-1.0.4";
+    version = "1.0.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.4.tgz";
+      name = "are-we-there-yet-1.0.4.tgz";
+      sha1 = "527fe389f7bcba90806106b99244eaa07e886f85";
+    };
+    deps = {
+      "delegates-0.1.0" = self.by-version."delegates"."0.1.0";
+      "readable-stream-1.1.13" = self.by-version."readable-stream"."1.1.13";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."argparse"."~ 0.1.11" =
+    self.by-version."argparse"."0.1.16";
+  by-version."argparse"."0.1.16" = self.buildNodePackage {
+    name = "argparse-0.1.16";
+    version = "0.1.16";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz";
+      name = "argparse-0.1.16.tgz";
+      sha1 = "cfd01e0fbba3d6caed049fbd758d40f65196f57c";
+    };
+    deps = {
+      "underscore-1.7.0" = self.by-version."underscore"."1.7.0";
+      "underscore.string-2.4.0" = self.by-version."underscore.string"."2.4.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."argparse"."~1.0.2" =
+    self.by-version."argparse"."1.0.2";
+  by-version."argparse"."1.0.2" = self.buildNodePackage {
+    name = "argparse-1.0.2";
+    version = "1.0.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/argparse/-/argparse-1.0.2.tgz";
+      name = "argparse-1.0.2.tgz";
+      sha1 = "bcfae39059656d1973d0b9e6a1a74154b5a9a136";
+    };
+    deps = {
+      "lodash-3.8.0" = self.by-version."lodash"."3.8.0";
+      "sprintf-js-1.0.2" = self.by-version."sprintf-js"."1.0.2";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."asn1"."0.1.11" =
+    self.by-version."asn1"."0.1.11";
+  by-version."asn1"."0.1.11" = self.buildNodePackage {
+    name = "asn1-0.1.11";
+    version = "0.1.11";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz";
+      name = "asn1-0.1.11.tgz";
+      sha1 = "559be18376d08a4ec4dbe80877d27818639b2df7";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."assert-diff"."^0.0.4" =
+    self.by-version."assert-diff"."0.0.4";
+  by-version."assert-diff"."0.0.4" = self.buildNodePackage {
+    name = "assert-diff-0.0.4";
+    version = "0.0.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/assert-diff/-/assert-diff-0.0.4.tgz";
+      name = "assert-diff-0.0.4.tgz";
+      sha1 = "bf181c1575d5ad7c73df8076a689f4ae19951608";
+    };
+    deps = {
+      "assert-plus-0.1.4" = self.by-version."assert-plus"."0.1.4";
+      "json-diff-0.3.1" = self.by-version."json-diff"."0.3.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "assert-diff" = self.by-version."assert-diff"."0.0.4";
+  by-spec."assert-plus"."0.1.4" =
+    self.by-version."assert-plus"."0.1.4";
+  by-version."assert-plus"."0.1.4" = self.buildNodePackage {
+    name = "assert-plus-0.1.4";
+    version = "0.1.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/assert-plus/-/assert-plus-0.1.4.tgz";
+      name = "assert-plus-0.1.4.tgz";
+      sha1 = "283eff8b140ecd768529fbf3730a4c09ebec61f7";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."assert-plus"."^0.1.5" =
+    self.by-version."assert-plus"."0.1.5";
+  by-version."assert-plus"."0.1.5" = self.buildNodePackage {
+    name = "assert-plus-0.1.5";
+    version = "0.1.5";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz";
+      name = "assert-plus-0.1.5.tgz";
+      sha1 = "ee74009413002d84cec7219c6ac811812e723160";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."assertion-error"."1.0.0" =
+    self.by-version."assertion-error"."1.0.0";
+  by-version."assertion-error"."1.0.0" = self.buildNodePackage {
+    name = "assertion-error-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz";
+      name = "assertion-error-1.0.0.tgz";
+      sha1 = "c7f85438fdd466bc7ca16ab90c81513797a5d23b";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."async"."0.2.9" =
+    self.by-version."async"."0.2.9";
+  by-version."async"."0.2.9" = self.buildNodePackage {
+    name = "async-0.2.9";
+    version = "0.2.9";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/async/-/async-0.2.9.tgz";
+      name = "async-0.2.9.tgz";
+      sha1 = "df63060fbf3d33286a76aaf6d55a2986d9ff8619";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."async"."0.9.x" =
+    self.by-version."async"."0.9.0";
+  by-version."async"."0.9.0" = self.buildNodePackage {
+    name = "async-0.9.0";
+    version = "0.9.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/async/-/async-0.9.0.tgz";
+      name = "async-0.9.0.tgz";
+      sha1 = "ac3613b1da9bed1b47510bb4651b8931e47146c7";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."async"."^0.2.9" =
+    self.by-version."async"."0.2.10";
+  by-version."async"."0.2.10" = self.buildNodePackage {
+    name = "async-0.2.10";
+    version = "0.2.10";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/async/-/async-0.2.10.tgz";
+      name = "async-0.2.10.tgz";
+      sha1 = "b6bbe0b0674b9d719708ca38de8c237cb526c3d1";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "async" = self.by-version."async"."0.2.10";
+  by-spec."async"."~0.2.6" =
+    self.by-version."async"."0.2.10";
+  by-spec."async"."~0.2.9" =
+    self.by-version."async"."0.2.10";
+  by-spec."async"."~0.9.0" =
+    self.by-version."async"."0.9.0";
+  by-spec."aws-sign2"."~0.5.0" =
+    self.by-version."aws-sign2"."0.5.0";
+  by-version."aws-sign2"."0.5.0" = self.buildNodePackage {
+    name = "aws-sign2-0.5.0";
+    version = "0.5.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz";
+      name = "aws-sign2-0.5.0.tgz";
+      sha1 = "c57103f7a17fc037f02d7c2e64b602ea223f7d63";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."balanced-match"."^0.2.0" =
+    self.by-version."balanced-match"."0.2.0";
+  by-version."balanced-match"."0.2.0" = self.buildNodePackage {
+    name = "balanced-match-0.2.0";
+    version = "0.2.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz";
+      name = "balanced-match-0.2.0.tgz";
+      sha1 = "38f6730c03aab6d5edbb52bd934885e756d71674";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."basic-auth"."~1.0.1" =
+    self.by-version."basic-auth"."1.0.1";
+  by-version."basic-auth"."1.0.1" = self.buildNodePackage {
+    name = "basic-auth-1.0.1";
+    version = "1.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/basic-auth/-/basic-auth-1.0.1.tgz";
+      name = "basic-auth-1.0.1.tgz";
+      sha1 = "4bae1dbfbf0aec4dc5dc47a8d3675b50140f3bf8";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."bignumber.js"."^1.4.0" =
+    self.by-version."bignumber.js"."1.5.0";
+  by-version."bignumber.js"."1.5.0" = self.buildNodePackage {
+    name = "bignumber.js-1.5.0";
+    version = "1.5.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/bignumber.js/-/bignumber.js-1.5.0.tgz";
+      name = "bignumber.js-1.5.0.tgz";
+      sha1 = "ff41453ac7b19ee15cda7977e179ff1b0d11956d";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "bignumber.js" = self.by-version."bignumber.js"."1.5.0";
+  by-spec."bignumber.js"."^2.0.3" =
+    self.by-version."bignumber.js"."2.0.7";
+  by-version."bignumber.js"."2.0.7" = self.buildNodePackage {
+    name = "bignumber.js-2.0.7";
+    version = "2.0.7";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/bignumber.js/-/bignumber.js-2.0.7.tgz";
+      name = "bignumber.js-2.0.7.tgz";
+      sha1 = "86eb0707cf6a5110909d23e6ea7434c14f500f1c";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."bignumber.js"."~1.4.0" =
+    self.by-version."bignumber.js"."1.4.1";
+  by-version."bignumber.js"."1.4.1" = self.buildNodePackage {
+    name = "bignumber.js-1.4.1";
+    version = "1.4.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/bignumber.js/-/bignumber.js-1.4.1.tgz";
+      name = "bignumber.js-1.4.1.tgz";
+      sha1 = "3d19ac321f8db4ba07aace23ebd4ac976fae6bfa";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."bindings"."1.2.x" =
+    self.by-version."bindings"."1.2.1";
+  by-version."bindings"."1.2.1" = self.buildNodePackage {
+    name = "bindings-1.2.1";
+    version = "1.2.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz";
+      name = "bindings-1.2.1.tgz";
+      sha1 = "14ad6113812d2d37d72e67b4cacb4bb726505f11";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."bl"."~0.9.0" =
+    self.by-version."bl"."0.9.4";
+  by-version."bl"."0.9.4" = self.buildNodePackage {
+    name = "bl-0.9.4";
+    version = "0.9.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/bl/-/bl-0.9.4.tgz";
+      name = "bl-0.9.4.tgz";
+      sha1 = "4702ddf72fbe0ecd82787c00c113aea1935ad0e7";
+    };
+    deps = {
+      "readable-stream-1.0.33" = self.by-version."readable-stream"."1.0.33";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."block-stream"."*" =
+    self.by-version."block-stream"."0.0.7";
+  by-version."block-stream"."0.0.7" = self.buildNodePackage {
+    name = "block-stream-0.0.7";
+    version = "0.0.7";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz";
+      name = "block-stream-0.0.7.tgz";
+      sha1 = "9088ab5ae1e861f4d81b176b4a8046080703deed";
+    };
+    deps = {
+      "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."bluebird"."^2.0.0" =
+    self.by-version."bluebird"."2.9.25";
+  by-version."bluebird"."2.9.25" = self.buildNodePackage {
+    name = "bluebird-2.9.25";
+    version = "2.9.25";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/bluebird/-/bluebird-2.9.25.tgz";
+      name = "bluebird-2.9.25.tgz";
+      sha1 = "6e36bd04064d9534c07160b9f7f26c5a738fe16a";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."bluebird"."^2.3.4" =
+    self.by-version."bluebird"."2.9.25";
+  "bluebird" = self.by-version."bluebird"."2.9.25";
+  by-spec."bluebird"."^2.9.25" =
+    self.by-version."bluebird"."2.9.25";
+  by-spec."body-parser"."^1.7.0" =
+    self.by-version."body-parser"."1.12.4";
+  by-version."body-parser"."1.12.4" = self.buildNodePackage {
+    name = "body-parser-1.12.4";
+    version = "1.12.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/body-parser/-/body-parser-1.12.4.tgz";
+      name = "body-parser-1.12.4.tgz";
+      sha1 = "090700c4ba28862a8520ef378395fdee5f61c229";
+    };
+    deps = {
+      "bytes-1.0.0" = self.by-version."bytes"."1.0.0";
+      "content-type-1.0.1" = self.by-version."content-type"."1.0.1";
+      "debug-2.2.0" = self.by-version."debug"."2.2.0";
+      "depd-1.0.1" = self.by-version."depd"."1.0.1";
+      "iconv-lite-0.4.8" = self.by-version."iconv-lite"."0.4.8";
+      "on-finished-2.2.1" = self.by-version."on-finished"."2.2.1";
+      "qs-2.4.2" = self.by-version."qs"."2.4.2";
+      "raw-body-2.0.1" = self.by-version."raw-body"."2.0.1";
+      "type-is-1.6.2" = self.by-version."type-is"."1.6.2";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "body-parser" = self.by-version."body-parser"."1.12.4";
+  by-spec."boom"."0.4.x" =
+    self.by-version."boom"."0.4.2";
+  by-version."boom"."0.4.2" = self.buildNodePackage {
+    name = "boom-0.4.2";
+    version = "0.4.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/boom/-/boom-0.4.2.tgz";
+      name = "boom-0.4.2.tgz";
+      sha1 = "7a636e9ded4efcefb19cef4947a3c67dfaee911b";
+    };
+    deps = {
+      "hoek-0.9.1" = self.by-version."hoek"."0.9.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."boom"."2.x.x" =
+    self.by-version."boom"."2.7.1";
+  by-version."boom"."2.7.1" = self.buildNodePackage {
+    name = "boom-2.7.1";
+    version = "2.7.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/boom/-/boom-2.7.1.tgz";
+      name = "boom-2.7.1.tgz";
+      sha1 = "fb165c348d337977c61d4363c21e9e1abf526705";
+    };
+    deps = {
+      "hoek-2.13.0" = self.by-version."hoek"."2.13.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."brace-expansion"."^1.0.0" =
+    self.by-version."brace-expansion"."1.1.0";
+  by-version."brace-expansion"."1.1.0" = self.buildNodePackage {
+    name = "brace-expansion-1.1.0";
+    version = "1.1.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz";
+      name = "brace-expansion-1.1.0.tgz";
+      sha1 = "c9b7d03c03f37bc704be100e522b40db8f6cfcd9";
+    };
+    deps = {
+      "balanced-match-0.2.0" = self.by-version."balanced-match"."0.2.0";
+      "concat-map-0.0.1" = self.by-version."concat-map"."0.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."bufferutil"."1.0.x" =
+    self.by-version."bufferutil"."1.0.1";
+  by-version."bufferutil"."1.0.1" = self.buildNodePackage {
+    name = "bufferutil-1.0.1";
+    version = "1.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/bufferutil/-/bufferutil-1.0.1.tgz";
+      name = "bufferutil-1.0.1.tgz";
+      sha1 = "0c53a9ffe8d616c4e2df27d00b808f7a25501e3b";
+    };
+    deps = {
+      "bindings-1.2.1" = self.by-version."bindings"."1.2.1";
+      "nan-1.6.2" = self.by-version."nan"."1.6.2";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."bytes"."1.0.0" =
+    self.by-version."bytes"."1.0.0";
+  by-version."bytes"."1.0.0" = self.buildNodePackage {
+    name = "bytes-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz";
+      name = "bytes-1.0.0.tgz";
+      sha1 = "3569ede8ba34315fab99c3e92cb04c7220de1fa8";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."bytes"."2.0.1" =
+    self.by-version."bytes"."2.0.1";
+  by-version."bytes"."2.0.1" = self.buildNodePackage {
+    name = "bytes-2.0.1";
+    version = "2.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/bytes/-/bytes-2.0.1.tgz";
+      name = "bytes-2.0.1.tgz";
+      sha1 = "673743059be43d929f9c225dd7363ee0f8b15d97";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."caseless"."~0.9.0" =
+    self.by-version."caseless"."0.9.0";
+  by-version."caseless"."0.9.0" = self.buildNodePackage {
+    name = "caseless-0.9.0";
+    version = "0.9.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz";
+      name = "caseless-0.9.0.tgz";
+      sha1 = "b7b65ce6bf1413886539cfd533f0b30effa9cf88";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."chai".">=1.9.2 <3" =
+    self.by-version."chai"."2.3.0";
+  by-version."chai"."2.3.0" = self.buildNodePackage {
+    name = "chai-2.3.0";
+    version = "2.3.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/chai/-/chai-2.3.0.tgz";
+      name = "chai-2.3.0.tgz";
+      sha1 = "8a2f6a34748da801090fd73287b2aa739a4e909a";
+    };
+    deps = {
+      "assertion-error-1.0.0" = self.by-version."assertion-error"."1.0.0";
+      "deep-eql-0.1.3" = self.by-version."deep-eql"."0.1.3";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."chai"."^1.10.0" =
+    self.by-version."chai"."1.10.0";
+  by-version."chai"."1.10.0" = self.buildNodePackage {
+    name = "chai-1.10.0";
+    version = "1.10.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/chai/-/chai-1.10.0.tgz";
+      name = "chai-1.10.0.tgz";
+      sha1 = "e4031cc87654461a75943e5a35ab46eaf39c1eb9";
+    };
+    deps = {
+      "assertion-error-1.0.0" = self.by-version."assertion-error"."1.0.0";
+      "deep-eql-0.1.3" = self.by-version."deep-eql"."0.1.3";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "chai" = self.by-version."chai"."1.10.0";
+  by-spec."chalk"."^1.0.0" =
+    self.by-version."chalk"."1.0.0";
+  by-version."chalk"."1.0.0" = self.buildNodePackage {
+    name = "chalk-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/chalk/-/chalk-1.0.0.tgz";
+      name = "chalk-1.0.0.tgz";
+      sha1 = "b3cf4ed0ff5397c99c75b8f679db2f52831f96dc";
+    };
+    deps = {
+      "ansi-styles-2.0.1" = self.by-version."ansi-styles"."2.0.1";
+      "escape-string-regexp-1.0.3" = self.by-version."escape-string-regexp"."1.0.3";
+      "has-ansi-1.0.3" = self.by-version."has-ansi"."1.0.3";
+      "strip-ansi-2.0.1" = self.by-version."strip-ansi"."2.0.1";
+      "supports-color-1.3.1" = self.by-version."supports-color"."1.3.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."chalk"."~0.5.1" =
+    self.by-version."chalk"."0.5.1";
+  by-version."chalk"."0.5.1" = self.buildNodePackage {
+    name = "chalk-0.5.1";
+    version = "0.5.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz";
+      name = "chalk-0.5.1.tgz";
+      sha1 = "663b3a648b68b55d04690d49167aa837858f2174";
+    };
+    deps = {
+      "ansi-styles-1.1.0" = self.by-version."ansi-styles"."1.1.0";
+      "escape-string-regexp-1.0.3" = self.by-version."escape-string-regexp"."1.0.3";
+      "has-ansi-0.1.0" = self.by-version."has-ansi"."0.1.0";
+      "strip-ansi-0.3.0" = self.by-version."strip-ansi"."0.3.0";
+      "supports-color-0.2.0" = self.by-version."supports-color"."0.2.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."cli-color"."~0.1.6" =
+    self.by-version."cli-color"."0.1.7";
+  by-version."cli-color"."0.1.7" = self.buildNodePackage {
+    name = "cli-color-0.1.7";
+    version = "0.1.7";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/cli-color/-/cli-color-0.1.7.tgz";
+      name = "cli-color-0.1.7.tgz";
+      sha1 = "adc3200fa471cc211b0da7f566b71e98b9d67347";
+    };
+    deps = {
+      "es5-ext-0.8.2" = self.by-version."es5-ext"."0.8.2";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."colors"."1.0.x" =
+    self.by-version."colors"."1.0.3";
+  by-version."colors"."1.0.3" = self.buildNodePackage {
+    name = "colors-1.0.3";
+    version = "1.0.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/colors/-/colors-1.0.3.tgz";
+      name = "colors-1.0.3.tgz";
+      sha1 = "0433f44d809680fdeb60ed260f1b0c262e82a40b";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."combined-stream"."~0.0.4" =
+    self.by-version."combined-stream"."0.0.7";
+  by-version."combined-stream"."0.0.7" = self.buildNodePackage {
+    name = "combined-stream-0.0.7";
+    version = "0.0.7";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz";
+      name = "combined-stream-0.0.7.tgz";
+      sha1 = "0137e657baa5a7541c57ac37ac5fc07d73b4dc1f";
+    };
+    deps = {
+      "delayed-stream-0.0.5" = self.by-version."delayed-stream"."0.0.5";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."combined-stream"."~0.0.5" =
+    self.by-version."combined-stream"."0.0.7";
+  by-spec."commander"."0.6.1" =
+    self.by-version."commander"."0.6.1";
+  by-version."commander"."0.6.1" = self.buildNodePackage {
+    name = "commander-0.6.1";
+    version = "0.6.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/commander/-/commander-0.6.1.tgz";
+      name = "commander-0.6.1.tgz";
+      sha1 = "fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."commander"."2.3.0" =
+    self.by-version."commander"."2.3.0";
+  by-version."commander"."2.3.0" = self.buildNodePackage {
+    name = "commander-2.3.0";
+    version = "2.3.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/commander/-/commander-2.3.0.tgz";
+      name = "commander-2.3.0.tgz";
+      sha1 = "fd430e889832ec353b9acd1de217c11cb3eef873";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."commander"."^2.2.0" =
+    self.by-version."commander"."2.8.1";
+  by-version."commander"."2.8.1" = self.buildNodePackage {
+    name = "commander-2.8.1";
+    version = "2.8.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz";
+      name = "commander-2.8.1.tgz";
+      sha1 = "06be367febfda0c330aa1e2a072d3dc9762425d4";
+    };
+    deps = {
+      "graceful-readlink-1.0.1" = self.by-version."graceful-readlink"."1.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."commander"."^2.8.1" =
+    self.by-version."commander"."2.8.1";
+  by-spec."commander"."~2.1.0" =
+    self.by-version."commander"."2.1.0";
+  by-version."commander"."2.1.0" = self.buildNodePackage {
+    name = "commander-2.1.0";
+    version = "2.1.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/commander/-/commander-2.1.0.tgz";
+      name = "commander-2.1.0.tgz";
+      sha1 = "d121bbae860d9992a3d517ba96f56588e47c6781";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."component-emitter"."1.1.2" =
+    self.by-version."component-emitter"."1.1.2";
+  by-version."component-emitter"."1.1.2" = self.buildNodePackage {
+    name = "component-emitter-1.1.2";
+    version = "1.1.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz";
+      name = "component-emitter-1.1.2.tgz";
+      sha1 = "296594f2753daa63996d2af08d15a95116c9aec3";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."compressible"."~2.0.2" =
+    self.by-version."compressible"."2.0.2";
+  by-version."compressible"."2.0.2" = self.buildNodePackage {
+    name = "compressible-2.0.2";
+    version = "2.0.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/compressible/-/compressible-2.0.2.tgz";
+      name = "compressible-2.0.2.tgz";
+      sha1 = "d0474a6ba6590a43d39c2ce9a6cfbb6479be76a5";
+    };
+    deps = {
+      "mime-db-1.9.1" = self.by-version."mime-db"."1.9.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."compression"."^1.3.0" =
+    self.by-version."compression"."1.4.4";
+  by-version."compression"."1.4.4" = self.buildNodePackage {
+    name = "compression-1.4.4";
+    version = "1.4.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/compression/-/compression-1.4.4.tgz";
+      name = "compression-1.4.4.tgz";
+      sha1 = "2f9994ca476e4d9ba5fdc67ac929942837d0b6a4";
+    };
+    deps = {
+      "accepts-1.2.7" = self.by-version."accepts"."1.2.7";
+      "bytes-1.0.0" = self.by-version."bytes"."1.0.0";
+      "compressible-2.0.2" = self.by-version."compressible"."2.0.2";
+      "debug-2.2.0" = self.by-version."debug"."2.2.0";
+      "on-headers-1.0.0" = self.by-version."on-headers"."1.0.0";
+      "vary-1.0.0" = self.by-version."vary"."1.0.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "compression" = self.by-version."compression"."1.4.4";
+  by-spec."concat-map"."0.0.1" =
+    self.by-version."concat-map"."0.0.1";
+  by-version."concat-map"."0.0.1" = self.buildNodePackage {
+    name = "concat-map-0.0.1";
+    version = "0.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
+      name = "concat-map-0.0.1.tgz";
+      sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."content-disposition"."0.5.0" =
+    self.by-version."content-disposition"."0.5.0";
+  by-version."content-disposition"."0.5.0" = self.buildNodePackage {
+    name = "content-disposition-0.5.0";
+    version = "0.5.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz";
+      name = "content-disposition-0.5.0.tgz";
+      sha1 = "4284fe6ae0630874639e44e80a418c2934135e9e";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."content-type"."~1.0.1" =
+    self.by-version."content-type"."1.0.1";
+  by-version."content-type"."1.0.1" = self.buildNodePackage {
+    name = "content-type-1.0.1";
+    version = "1.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/content-type/-/content-type-1.0.1.tgz";
+      name = "content-type-1.0.1.tgz";
+      sha1 = "a19d2247327dc038050ce622b7a154ec59c5e600";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."cookie"."0.1.2" =
+    self.by-version."cookie"."0.1.2";
+  by-version."cookie"."0.1.2" = self.buildNodePackage {
+    name = "cookie-0.1.2";
+    version = "0.1.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz";
+      name = "cookie-0.1.2.tgz";
+      sha1 = "72fec3d24e48a3432073d90c12642005061004b1";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."cookie-signature"."1.0.6" =
+    self.by-version."cookie-signature"."1.0.6";
+  by-version."cookie-signature"."1.0.6" = self.buildNodePackage {
+    name = "cookie-signature-1.0.6";
+    version = "1.0.6";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz";
+      name = "cookie-signature-1.0.6.tgz";
+      sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."cookiejar"."1.3.2" =
+    self.by-version."cookiejar"."1.3.2";
+  by-version."cookiejar"."1.3.2" = self.buildNodePackage {
+    name = "cookiejar-1.3.2";
+    version = "1.3.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/cookiejar/-/cookiejar-1.3.2.tgz";
+      name = "cookiejar-1.3.2.tgz";
+      sha1 = "61d3229e2da20c859032233502958a9b7df58249";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."core-util-is"."~1.0.0" =
+    self.by-version."core-util-is"."1.0.1";
+  by-version."core-util-is"."1.0.1" = self.buildNodePackage {
+    name = "core-util-is-1.0.1";
+    version = "1.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz";
+      name = "core-util-is-1.0.1.tgz";
+      sha1 = "6b07085aef9a3ccac6ee53bf9d3df0c1521a5538";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."coveralls"."^2.10.0" =
+    self.by-version."coveralls"."2.11.2";
+  by-version."coveralls"."2.11.2" = self.buildNodePackage {
+    name = "coveralls-2.11.2";
+    version = "2.11.2";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/coveralls/-/coveralls-2.11.2.tgz";
+      name = "coveralls-2.11.2.tgz";
+      sha1 = "d4d982016cb2f9da89d77ab204d86a8537e6a12d";
+    };
+    deps = {
+      "js-yaml-3.0.1" = self.by-version."js-yaml"."3.0.1";
+      "lcov-parse-0.0.6" = self.by-version."lcov-parse"."0.0.6";
+      "log-driver-1.2.4" = self.by-version."log-driver"."1.2.4";
+      "request-2.40.0" = self.by-version."request"."2.40.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "coveralls" = self.by-version."coveralls"."2.11.2";
+  by-spec."crc"."3.2.1" =
+    self.by-version."crc"."3.2.1";
+  by-version."crc"."3.2.1" = self.buildNodePackage {
+    name = "crc-3.2.1";
+    version = "3.2.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/crc/-/crc-3.2.1.tgz";
+      name = "crc-3.2.1.tgz";
+      sha1 = "5d9c8fb77a245cd5eca291e5d2d005334bab0082";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."cryptiles"."0.2.x" =
+    self.by-version."cryptiles"."0.2.2";
+  by-version."cryptiles"."0.2.2" = self.buildNodePackage {
+    name = "cryptiles-0.2.2";
+    version = "0.2.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz";
+      name = "cryptiles-0.2.2.tgz";
+      sha1 = "ed91ff1f17ad13d3748288594f8a48a0d26f325c";
+    };
+    deps = {
+      "boom-0.4.2" = self.by-version."boom"."0.4.2";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."cryptiles"."2.x.x" =
+    self.by-version."cryptiles"."2.0.4";
+  by-version."cryptiles"."2.0.4" = self.buildNodePackage {
+    name = "cryptiles-2.0.4";
+    version = "2.0.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/cryptiles/-/cryptiles-2.0.4.tgz";
+      name = "cryptiles-2.0.4.tgz";
+      sha1 = "09ea1775b9e1c7de7e60a99d42ab6f08ce1a1285";
+    };
+    deps = {
+      "boom-2.7.1" = self.by-version."boom"."2.7.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."ctype"."0.5.3" =
+    self.by-version."ctype"."0.5.3";
+  by-version."ctype"."0.5.3" = self.buildNodePackage {
+    name = "ctype-0.5.3";
+    version = "0.5.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz";
+      name = "ctype-0.5.3.tgz";
+      sha1 = "82c18c2461f74114ef16c135224ad0b9144ca12f";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."cycle"."1.0.x" =
+    self.by-version."cycle"."1.0.3";
+  by-version."cycle"."1.0.3" = self.buildNodePackage {
+    name = "cycle-1.0.3";
+    version = "1.0.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz";
+      name = "cycle-1.0.3.tgz";
+      sha1 = "21e80b2be8580f98b468f379430662b046c34ad2";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."debug"."2.0.0" =
+    self.by-version."debug"."2.0.0";
+  by-version."debug"."2.0.0" = self.buildNodePackage {
+    name = "debug-2.0.0";
+    version = "2.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/debug/-/debug-2.0.0.tgz";
+      name = "debug-2.0.0.tgz";
+      sha1 = "89bd9df6732b51256bc6705342bba02ed12131ef";
+    };
+    deps = {
+      "ms-0.6.2" = self.by-version."ms"."0.6.2";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."debug"."~0.7.2" =
+    self.by-version."debug"."0.7.4";
+  by-version."debug"."0.7.4" = self.buildNodePackage {
+    name = "debug-0.7.4";
+    version = "0.7.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/debug/-/debug-0.7.4.tgz";
+      name = "debug-0.7.4.tgz";
+      sha1 = "06e1ea8082c2cb14e39806e22e2f6f757f92af39";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."debug"."~2.1.3" =
+    self.by-version."debug"."2.1.3";
+  by-version."debug"."2.1.3" = self.buildNodePackage {
+    name = "debug-2.1.3";
+    version = "2.1.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/debug/-/debug-2.1.3.tgz";
+      name = "debug-2.1.3.tgz";
+      sha1 = "ce8ab1b5ee8fbee2bfa3b633cab93d366b63418e";
+    };
+    deps = {
+      "ms-0.7.0" = self.by-version."ms"."0.7.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."debug"."~2.2.0" =
+    self.by-version."debug"."2.2.0";
+  by-version."debug"."2.2.0" = self.buildNodePackage {
+    name = "debug-2.2.0";
+    version = "2.2.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz";
+      name = "debug-2.2.0.tgz";
+      sha1 = "f87057e995b1a1f6ae6a4960664137bc56f039da";
+    };
+    deps = {
+      "ms-0.7.1" = self.by-version."ms"."0.7.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."deep-eql"."0.1.3" =
+    self.by-version."deep-eql"."0.1.3";
+  by-version."deep-eql"."0.1.3" = self.buildNodePackage {
+    name = "deep-eql-0.1.3";
+    version = "0.1.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz";
+      name = "deep-eql-0.1.3.tgz";
+      sha1 = "ef558acab8de25206cd713906d74e56930eb69f2";
+    };
+    deps = {
+      "type-detect-0.1.1" = self.by-version."type-detect"."0.1.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."deep-extend"."~0.2.5" =
+    self.by-version."deep-extend"."0.2.11";
+  by-version."deep-extend"."0.2.11" = self.buildNodePackage {
+    name = "deep-extend-0.2.11";
+    version = "0.2.11";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz";
+      name = "deep-extend-0.2.11.tgz";
+      sha1 = "7a16ba69729132340506170494bc83f7076fe08f";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."delayed-stream"."0.0.5" =
+    self.by-version."delayed-stream"."0.0.5";
+  by-version."delayed-stream"."0.0.5" = self.buildNodePackage {
+    name = "delayed-stream-0.0.5";
+    version = "0.0.5";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz";
+      name = "delayed-stream-0.0.5.tgz";
+      sha1 = "d4b1f43a93e8296dfe02694f4680bc37a313c73f";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."delegates"."^0.1.0" =
+    self.by-version."delegates"."0.1.0";
+  by-version."delegates"."0.1.0" = self.buildNodePackage {
+    name = "delegates-0.1.0";
+    version = "0.1.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/delegates/-/delegates-0.1.0.tgz";
+      name = "delegates-0.1.0.tgz";
+      sha1 = "b4b57be11a1653517a04b27f0949bdc327dfe390";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."depd"."~1.0.0" =
+    self.by-version."depd"."1.0.1";
+  by-version."depd"."1.0.1" = self.buildNodePackage {
+    name = "depd-1.0.1";
+    version = "1.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/depd/-/depd-1.0.1.tgz";
+      name = "depd-1.0.1.tgz";
+      sha1 = "80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."depd"."~1.0.1" =
+    self.by-version."depd"."1.0.1";
+  by-spec."destroy"."1.0.3" =
+    self.by-version."destroy"."1.0.3";
+  by-version."destroy"."1.0.3" = self.buildNodePackage {
+    name = "destroy-1.0.3";
+    version = "1.0.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz";
+      name = "destroy-1.0.3.tgz";
+      sha1 = "b433b4724e71fd8551d9885174851c5fc377e2c9";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."diff"."1.0.8" =
+    self.by-version."diff"."1.0.8";
+  by-version."diff"."1.0.8" = self.buildNodePackage {
+    name = "diff-1.0.8";
+    version = "1.0.8";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/diff/-/diff-1.0.8.tgz";
+      name = "diff-1.0.8.tgz";
+      sha1 = "343276308ec991b7bc82267ed55bc1411f971666";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."difflib"."~0.2.1" =
+    self.by-version."difflib"."0.2.4";
+  by-version."difflib"."0.2.4" = self.buildNodePackage {
+    name = "difflib-0.2.4";
+    version = "0.2.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz";
+      name = "difflib-0.2.4.tgz";
+      sha1 = "b5e30361a6db023176d562892db85940a718f47e";
+    };
+    deps = {
+      "heap-0.2.6" = self.by-version."heap"."0.2.6";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."dreamopt"."~0.6.0" =
+    self.by-version."dreamopt"."0.6.0";
+  by-version."dreamopt"."0.6.0" = self.buildNodePackage {
+    name = "dreamopt-0.6.0";
+    version = "0.6.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/dreamopt/-/dreamopt-0.6.0.tgz";
+      name = "dreamopt-0.6.0.tgz";
+      sha1 = "d813ccdac8d39d8ad526775514a13dda664d6b4b";
+    };
+    deps = {
+      "wordwrap-1.0.0" = self.by-version."wordwrap"."1.0.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."ee-first"."1.1.0" =
+    self.by-version."ee-first"."1.1.0";
+  by-version."ee-first"."1.1.0" = self.buildNodePackage {
+    name = "ee-first-1.1.0";
+    version = "1.1.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz";
+      name = "ee-first-1.1.0.tgz";
+      sha1 = "6a0d7c6221e490feefd92ec3f441c9ce8cd097f4";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."es5-ext"."0.8.x" =
+    self.by-version."es5-ext"."0.8.2";
+  by-version."es5-ext"."0.8.2" = self.buildNodePackage {
+    name = "es5-ext-0.8.2";
+    version = "0.8.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/es5-ext/-/es5-ext-0.8.2.tgz";
+      name = "es5-ext-0.8.2.tgz";
+      sha1 = "aba8d9e1943a895ac96837a62a39b3f55ecd94ab";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."escape-html"."1.0.1" =
+    self.by-version."escape-html"."1.0.1";
+  by-version."escape-html"."1.0.1" = self.buildNodePackage {
+    name = "escape-html-1.0.1";
+    version = "1.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz";
+      name = "escape-html-1.0.1.tgz";
+      sha1 = "181a286ead397a39a92857cfb1d43052e356bff0";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."escape-string-regexp"."1.0.2" =
+    self.by-version."escape-string-regexp"."1.0.2";
+  by-version."escape-string-regexp"."1.0.2" = self.buildNodePackage {
+    name = "escape-string-regexp-1.0.2";
+    version = "1.0.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz";
+      name = "escape-string-regexp-1.0.2.tgz";
+      sha1 = "4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."escape-string-regexp"."^1.0.0" =
+    self.by-version."escape-string-regexp"."1.0.3";
+  by-version."escape-string-regexp"."1.0.3" = self.buildNodePackage {
+    name = "escape-string-regexp-1.0.3";
+    version = "1.0.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz";
+      name = "escape-string-regexp-1.0.3.tgz";
+      sha1 = "9e2d8b25bc2555c3336723750e03f099c2735bb5";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."escape-string-regexp"."^1.0.2" =
+    self.by-version."escape-string-regexp"."1.0.3";
+  by-spec."escodegen"."1.3.x" =
+    self.by-version."escodegen"."1.3.3";
+  by-version."escodegen"."1.3.3" = self.buildNodePackage {
+    name = "escodegen-1.3.3";
+    version = "1.3.3";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/escodegen/-/escodegen-1.3.3.tgz";
+      name = "escodegen-1.3.3.tgz";
+      sha1 = "f024016f5a88e046fd12005055e939802e6c5f23";
+    };
+    deps = {
+      "esutils-1.0.0" = self.by-version."esutils"."1.0.0";
+      "estraverse-1.5.1" = self.by-version."estraverse"."1.5.1";
+      "esprima-1.1.1" = self.by-version."esprima"."1.1.1";
+    };
+    optionalDependencies = {
+      "source-map-0.1.43" = self.by-version."source-map"."0.1.43";
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."esprima"."1.2.x" =
+    self.by-version."esprima"."1.2.5";
+  by-version."esprima"."1.2.5" = self.buildNodePackage {
+    name = "esprima-1.2.5";
+    version = "1.2.5";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz";
+      name = "esprima-1.2.5.tgz";
+      sha1 = "0993502feaf668138325756f30f9a51feeec11e9";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."esprima"."~ 1.0.2" =
+    self.by-version."esprima"."1.0.4";
+  by-version."esprima"."1.0.4" = self.buildNodePackage {
+    name = "esprima-1.0.4";
+    version = "1.0.4";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz";
+      name = "esprima-1.0.4.tgz";
+      sha1 = "9f557e08fc3b4d26ece9dd34f8fbf476b62585ad";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."esprima"."~1.1.1" =
+    self.by-version."esprima"."1.1.1";
+  by-version."esprima"."1.1.1" = self.buildNodePackage {
+    name = "esprima-1.1.1";
+    version = "1.1.1";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/esprima/-/esprima-1.1.1.tgz";
+      name = "esprima-1.1.1.tgz";
+      sha1 = "5b6f1547f4d102e670e140c509be6771d6aeb549";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."esprima"."~2.2.0" =
+    self.by-version."esprima"."2.2.0";
+  by-version."esprima"."2.2.0" = self.buildNodePackage {
+    name = "esprima-2.2.0";
+    version = "2.2.0";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/esprima/-/esprima-2.2.0.tgz";
+      name = "esprima-2.2.0.tgz";
+      sha1 = "4292c1d68e4173d815fa2290dc7afc96d81fcd83";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."estraverse"."~1.5.0" =
+    self.by-version."estraverse"."1.5.1";
+  by-version."estraverse"."1.5.1" = self.buildNodePackage {
+    name = "estraverse-1.5.1";
+    version = "1.5.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz";
+      name = "estraverse-1.5.1.tgz";
+      sha1 = "867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."esutils"."~1.0.0" =
+    self.by-version."esutils"."1.0.0";
+  by-version."esutils"."1.0.0" = self.buildNodePackage {
+    name = "esutils-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz";
+      name = "esutils-1.0.0.tgz";
+      sha1 = "8151d358e20c8acc7fb745e7472c0025fe496570";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."etag"."~1.5.1" =
+    self.by-version."etag"."1.5.1";
+  by-version."etag"."1.5.1" = self.buildNodePackage {
+    name = "etag-1.5.1";
+    version = "1.5.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/etag/-/etag-1.5.1.tgz";
+      name = "etag-1.5.1.tgz";
+      sha1 = "54c50de04ee42695562925ac566588291be7e9ea";
+    };
+    deps = {
+      "crc-3.2.1" = self.by-version."crc"."3.2.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."express"."^4.8.7" =
+    self.by-version."express"."4.12.3";
+  by-version."express"."4.12.3" = self.buildNodePackage {
+    name = "express-4.12.3";
+    version = "4.12.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/express/-/express-4.12.3.tgz";
+      name = "express-4.12.3.tgz";
+      sha1 = "6b9d94aec5ae03270d86d390c277a8c5a5ad0ee2";
+    };
+    deps = {
+      "accepts-1.2.7" = self.by-version."accepts"."1.2.7";
+      "content-disposition-0.5.0" = self.by-version."content-disposition"."0.5.0";
+      "content-type-1.0.1" = self.by-version."content-type"."1.0.1";
+      "cookie-0.1.2" = self.by-version."cookie"."0.1.2";
+      "cookie-signature-1.0.6" = self.by-version."cookie-signature"."1.0.6";
+      "debug-2.1.3" = self.by-version."debug"."2.1.3";
+      "depd-1.0.1" = self.by-version."depd"."1.0.1";
+      "escape-html-1.0.1" = self.by-version."escape-html"."1.0.1";
+      "etag-1.5.1" = self.by-version."etag"."1.5.1";
+      "finalhandler-0.3.4" = self.by-version."finalhandler"."0.3.4";
+      "fresh-0.2.4" = self.by-version."fresh"."0.2.4";
+      "merge-descriptors-1.0.0" = self.by-version."merge-descriptors"."1.0.0";
+      "methods-1.1.1" = self.by-version."methods"."1.1.1";
+      "on-finished-2.2.1" = self.by-version."on-finished"."2.2.1";
+      "parseurl-1.3.0" = self.by-version."parseurl"."1.3.0";
+      "path-to-regexp-0.1.3" = self.by-version."path-to-regexp"."0.1.3";
+      "proxy-addr-1.0.8" = self.by-version."proxy-addr"."1.0.8";
+      "qs-2.4.1" = self.by-version."qs"."2.4.1";
+      "range-parser-1.0.2" = self.by-version."range-parser"."1.0.2";
+      "send-0.12.2" = self.by-version."send"."0.12.2";
+      "serve-static-1.9.2" = self.by-version."serve-static"."1.9.2";
+      "type-is-1.6.2" = self.by-version."type-is"."1.6.2";
+      "vary-1.0.0" = self.by-version."vary"."1.0.0";
+      "utils-merge-1.0.0" = self.by-version."utils-merge"."1.0.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "express" = self.by-version."express"."4.12.3";
+  by-spec."extend"."~1.2.1" =
+    self.by-version."extend"."1.2.1";
+  by-version."extend"."1.2.1" = self.buildNodePackage {
+    name = "extend-1.2.1";
+    version = "1.2.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/extend/-/extend-1.2.1.tgz";
+      name = "extend-1.2.1.tgz";
+      sha1 = "a0f5fd6cfc83a5fe49ef698d60ec8a624dd4576c";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."extend"."~1.3.0" =
+    self.by-version."extend"."1.3.0";
+  by-version."extend"."1.3.0" = self.buildNodePackage {
+    name = "extend-1.3.0";
+    version = "1.3.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/extend/-/extend-1.3.0.tgz";
+      name = "extend-1.3.0.tgz";
+      sha1 = "d1516fb0ff5624d2ebf9123ea1dac5a1994004f8";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."eyes"."0.1.x" =
+    self.by-version."eyes"."0.1.8";
+  by-version."eyes"."0.1.8" = self.buildNodePackage {
+    name = "eyes-0.1.8";
+    version = "0.1.8";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz";
+      name = "eyes-0.1.8.tgz";
+      sha1 = "62cf120234c683785d902348a800ef3e0cc20bc0";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."fileset"."0.1.x" =
+    self.by-version."fileset"."0.1.5";
+  by-version."fileset"."0.1.5" = self.buildNodePackage {
+    name = "fileset-0.1.5";
+    version = "0.1.5";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/fileset/-/fileset-0.1.5.tgz";
+      name = "fileset-0.1.5.tgz";
+      sha1 = "acc423bfaf92843385c66bf75822264d11b7bd94";
+    };
+    deps = {
+      "minimatch-0.4.0" = self.by-version."minimatch"."0.4.0";
+      "glob-3.2.11" = self.by-version."glob"."3.2.11";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."finalhandler"."0.3.4" =
+    self.by-version."finalhandler"."0.3.4";
+  by-version."finalhandler"."0.3.4" = self.buildNodePackage {
+    name = "finalhandler-0.3.4";
+    version = "0.3.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/finalhandler/-/finalhandler-0.3.4.tgz";
+      name = "finalhandler-0.3.4.tgz";
+      sha1 = "4787d3573d079ae8b07536f26b0b911ebaf2a2ac";
+    };
+    deps = {
+      "debug-2.1.3" = self.by-version."debug"."2.1.3";
+      "escape-html-1.0.1" = self.by-version."escape-html"."1.0.1";
+      "on-finished-2.2.1" = self.by-version."on-finished"."2.2.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."findup-sync"."~0.1.2" =
+    self.by-version."findup-sync"."0.1.3";
+  by-version."findup-sync"."0.1.3" = self.buildNodePackage {
+    name = "findup-sync-0.1.3";
+    version = "0.1.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz";
+      name = "findup-sync-0.1.3.tgz";
+      sha1 = "7f3e7a97b82392c653bf06589bd85190e93c3683";
+    };
+    deps = {
+      "glob-3.2.11" = self.by-version."glob"."3.2.11";
+      "lodash-2.4.2" = self.by-version."lodash"."2.4.2";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."flagged-respawn"."~0.3.0" =
+    self.by-version."flagged-respawn"."0.3.1";
+  by-version."flagged-respawn"."0.3.1" = self.buildNodePackage {
+    name = "flagged-respawn-0.3.1";
+    version = "0.3.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.1.tgz";
+      name = "flagged-respawn-0.3.1.tgz";
+      sha1 = "397700925df6e12452202a71e89d89545fbbbe9d";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."forever-agent"."~0.5.0" =
+    self.by-version."forever-agent"."0.5.2";
+  by-version."forever-agent"."0.5.2" = self.buildNodePackage {
+    name = "forever-agent-0.5.2";
+    version = "0.5.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz";
+      name = "forever-agent-0.5.2.tgz";
+      sha1 = "6d0e09c4921f94a27f63d3b49c5feff1ea4c5130";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."forever-agent"."~0.6.0" =
+    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 = "http://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"."0.1.2" =
+    self.by-version."form-data"."0.1.2";
+  by-version."form-data"."0.1.2" = self.buildNodePackage {
+    name = "form-data-0.1.2";
+    version = "0.1.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/form-data/-/form-data-0.1.2.tgz";
+      name = "form-data-0.1.2.tgz";
+      sha1 = "1143c21357911a78dd7913b189b4bab5d5d57445";
+    };
+    deps = {
+      "combined-stream-0.0.7" = self.by-version."combined-stream"."0.0.7";
+      "mime-1.2.11" = self.by-version."mime"."1.2.11";
+      "async-0.2.10" = self.by-version."async"."0.2.10";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."form-data"."~0.1.0" =
+    self.by-version."form-data"."0.1.4";
+  by-version."form-data"."0.1.4" = self.buildNodePackage {
+    name = "form-data-0.1.4";
+    version = "0.1.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz";
+      name = "form-data-0.1.4.tgz";
+      sha1 = "91abd788aba9702b1aabfa8bc01031a2ac9e3b12";
+    };
+    deps = {
+      "combined-stream-0.0.7" = self.by-version."combined-stream"."0.0.7";
+      "mime-1.2.11" = self.by-version."mime"."1.2.11";
+      "async-0.9.0" = self.by-version."async"."0.9.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."form-data"."~0.2.0" =
+    self.by-version."form-data"."0.2.0";
+  by-version."form-data"."0.2.0" = self.buildNodePackage {
+    name = "form-data-0.2.0";
+    version = "0.2.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz";
+      name = "form-data-0.2.0.tgz";
+      sha1 = "26f8bc26da6440e299cbdcfb69035c4f77a6e466";
+    };
+    deps = {
+      "async-0.9.0" = self.by-version."async"."0.9.0";
+      "combined-stream-0.0.7" = self.by-version."combined-stream"."0.0.7";
+      "mime-types-2.0.11" = self.by-version."mime-types"."2.0.11";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."formatio"."1.1.1" =
+    self.by-version."formatio"."1.1.1";
+  by-version."formatio"."1.1.1" = self.buildNodePackage {
+    name = "formatio-1.1.1";
+    version = "1.1.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz";
+      name = "formatio-1.1.1.tgz";
+      sha1 = "5ed3ccd636551097383465d996199100e86161e9";
+    };
+    deps = {
+      "samsam-1.1.2" = self.by-version."samsam"."1.1.2";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."formatio"."~1.0" =
+    self.by-version."formatio"."1.0.2";
+  by-version."formatio"."1.0.2" = self.buildNodePackage {
+    name = "formatio-1.0.2";
+    version = "1.0.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/formatio/-/formatio-1.0.2.tgz";
+      name = "formatio-1.0.2.tgz";
+      sha1 = "e7991ca144ff7d8cff07bb9ac86a9b79c6ba47ef";
+    };
+    deps = {
+      "samsam-1.1.2" = self.by-version."samsam"."1.1.2";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."formidable"."1.0.14" =
+    self.by-version."formidable"."1.0.14";
+  by-version."formidable"."1.0.14" = self.buildNodePackage {
+    name = "formidable-1.0.14";
+    version = "1.0.14";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz";
+      name = "formidable-1.0.14.tgz";
+      sha1 = "2b3f4c411cbb5fdd695c44843e2a23514a43231a";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."forwarded"."~0.1.0" =
+    self.by-version."forwarded"."0.1.0";
+  by-version."forwarded"."0.1.0" = self.buildNodePackage {
+    name = "forwarded-0.1.0";
+    version = "0.1.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz";
+      name = "forwarded-0.1.0.tgz";
+      sha1 = "19ef9874c4ae1c297bcf078fde63a09b66a84363";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."fresh"."0.2.4" =
+    self.by-version."fresh"."0.2.4";
+  by-version."fresh"."0.2.4" = self.buildNodePackage {
+    name = "fresh-0.2.4";
+    version = "0.2.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz";
+      name = "fresh-0.2.4.tgz";
+      sha1 = "3582499206c9723714190edd74b4604feb4a614c";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."fstream"."^1.0.2" =
+    self.by-version."fstream"."1.0.6";
+  by-version."fstream"."1.0.6" = self.buildNodePackage {
+    name = "fstream-1.0.6";
+    version = "1.0.6";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/fstream/-/fstream-1.0.6.tgz";
+      name = "fstream-1.0.6.tgz";
+      sha1 = "817e50312fb4ed90da865c8eb5ecd1d1d7aed0ec";
+    };
+    deps = {
+      "graceful-fs-3.0.6" = self.by-version."graceful-fs"."3.0.6";
+      "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
+      "mkdirp-0.5.1" = self.by-version."mkdirp"."0.5.1";
+      "rimraf-2.3.3" = self.by-version."rimraf"."2.3.3";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."fstream"."~0.1.17" =
+    self.by-version."fstream"."0.1.31";
+  by-version."fstream"."0.1.31" = self.buildNodePackage {
+    name = "fstream-0.1.31";
+    version = "0.1.31";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz";
+      name = "fstream-0.1.31.tgz";
+      sha1 = "7337f058fbbbbefa8c9f561a28cab0849202c988";
+    };
+    deps = {
+      "graceful-fs-3.0.6" = self.by-version."graceful-fs"."3.0.6";
+      "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
+      "mkdirp-0.5.1" = self.by-version."mkdirp"."0.5.1";
+      "rimraf-2.3.3" = self.by-version."rimraf"."2.3.3";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."fstream"."~0.1.22" =
+    self.by-version."fstream"."0.1.31";
+  by-spec."fstream"."~0.1.28" =
+    self.by-version."fstream"."0.1.31";
+  by-spec."fstream-ignore"."0.0.7" =
+    self.by-version."fstream-ignore"."0.0.7";
+  by-version."fstream-ignore"."0.0.7" = self.buildNodePackage {
+    name = "fstream-ignore-0.0.7";
+    version = "0.0.7";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/fstream-ignore/-/fstream-ignore-0.0.7.tgz";
+      name = "fstream-ignore-0.0.7.tgz";
+      sha1 = "eea3033f0c3728139de7b57ab1b0d6d89c353c63";
+    };
+    deps = {
+      "minimatch-0.2.14" = self.by-version."minimatch"."0.2.14";
+      "fstream-0.1.31" = self.by-version."fstream"."0.1.31";
+      "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."gauge"."~1.2.0" =
+    self.by-version."gauge"."1.2.0";
+  by-version."gauge"."1.2.0" = self.buildNodePackage {
+    name = "gauge-1.2.0";
+    version = "1.2.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/gauge/-/gauge-1.2.0.tgz";
+      name = "gauge-1.2.0.tgz";
+      sha1 = "3094ab1285633f799814388fc8f2de67b4c012c5";
+    };
+    deps = {
+      "ansi-0.3.0" = self.by-version."ansi"."0.3.0";
+      "has-unicode-1.0.0" = self.by-version."has-unicode"."1.0.0";
+      "lodash.pad-3.1.0" = self.by-version."lodash.pad"."3.1.0";
+      "lodash.padleft-3.1.1" = self.by-version."lodash.padleft"."3.1.1";
+      "lodash.padright-3.1.1" = self.by-version."lodash.padright"."3.1.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  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 = "http://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.1.1";
+  by-version."generate-object-property"."1.1.1" = self.buildNodePackage {
+    name = "generate-object-property-1.1.1";
+    version = "1.1.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/generate-object-property/-/generate-object-property-1.1.1.tgz";
+      name = "generate-object-property-1.1.1.tgz";
+      sha1 = "8fda6b4cb69b34a189a6cebee7c4c268af47cc93";
+    };
+    deps = {
+      "is-property-1.0.2" = self.by-version."is-property"."1.0.2";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."generic-pool-redux"."~0.1.0" =
+    self.by-version."generic-pool-redux"."0.1.0";
+  by-version."generic-pool-redux"."0.1.0" = self.buildNodePackage {
+    name = "generic-pool-redux-0.1.0";
+    version = "0.1.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/generic-pool-redux/-/generic-pool-redux-0.1.0.tgz";
+      name = "generic-pool-redux-0.1.0.tgz";
+      sha1 = "326c2594e17fba4d4f0622cfe09acc3c84cb3a82";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."get-stdin"."^4.0.1" =
+    self.by-version."get-stdin"."4.0.1";
+  by-version."get-stdin"."4.0.1" = self.buildNodePackage {
+    name = "get-stdin-4.0.1";
+    version = "4.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz";
+      name = "get-stdin-4.0.1.tgz";
+      sha1 = "b968c6b0a04384324902e8bf1a5df32579a450fe";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."glob"."3.2.3" =
+    self.by-version."glob"."3.2.3";
+  by-version."glob"."3.2.3" = self.buildNodePackage {
+    name = "glob-3.2.3";
+    version = "3.2.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/glob/-/glob-3.2.3.tgz";
+      name = "glob-3.2.3.tgz";
+      sha1 = "e313eeb249c7affaa5c475286b0e115b59839467";
+    };
+    deps = {
+      "minimatch-0.2.14" = self.by-version."minimatch"."0.2.14";
+      "graceful-fs-2.0.3" = self.by-version."graceful-fs"."2.0.3";
+      "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."glob"."3.x" =
+    self.by-version."glob"."3.2.11";
+  by-version."glob"."3.2.11" = self.buildNodePackage {
+    name = "glob-3.2.11";
+    version = "3.2.11";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/glob/-/glob-3.2.11.tgz";
+      name = "glob-3.2.11.tgz";
+      sha1 = "4a973f635b9190f715d10987d5c00fd2815ebe3d";
+    };
+    deps = {
+      "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
+      "minimatch-0.3.0" = self.by-version."minimatch"."0.3.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."glob"."^4.4.2" =
+    self.by-version."glob"."4.5.3";
+  by-version."glob"."4.5.3" = self.buildNodePackage {
+    name = "glob-4.5.3";
+    version = "4.5.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/glob/-/glob-4.5.3.tgz";
+      name = "glob-4.5.3.tgz";
+      sha1 = "c6cb73d3226c1efef04de3c56d012f03377ee15f";
+    };
+    deps = {
+      "inflight-1.0.4" = self.by-version."inflight"."1.0.4";
+      "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
+      "minimatch-2.0.7" = self.by-version."minimatch"."2.0.7";
+      "once-1.3.2" = self.by-version."once"."1.3.2";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."glob"."~3.2.9" =
+    self.by-version."glob"."3.2.11";
+  by-spec."graceful-fs"."1.2" =
+    self.by-version."graceful-fs"."1.2.3";
+  by-version."graceful-fs"."1.2.3" = self.buildNodePackage {
+    name = "graceful-fs-1.2.3";
+    version = "1.2.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz";
+      name = "graceful-fs-1.2.3.tgz";
+      sha1 = "15a4806a57547cb2d2dbf27f42e89a8c3451b364";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."graceful-fs"."3" =
+    self.by-version."graceful-fs"."3.0.6";
+  by-version."graceful-fs"."3.0.6" = self.buildNodePackage {
+    name = "graceful-fs-3.0.6";
+    version = "3.0.6";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.6.tgz";
+      name = "graceful-fs-3.0.6.tgz";
+      sha1 = "dce3a18351cb94cdc82e688b2e3dd2842d1b09bb";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."graceful-fs"."~2.0.0" =
+    self.by-version."graceful-fs"."2.0.3";
+  by-version."graceful-fs"."2.0.3" = self.buildNodePackage {
+    name = "graceful-fs-2.0.3";
+    version = "2.0.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz";
+      name = "graceful-fs-2.0.3.tgz";
+      sha1 = "7cd2cdb228a4a3f36e95efa6cc142de7d1a136d0";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."graceful-fs"."~3.0.2" =
+    self.by-version."graceful-fs"."3.0.6";
+  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 = "http://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."growl"."1.8.1" =
+    self.by-version."growl"."1.8.1";
+  by-version."growl"."1.8.1" = self.buildNodePackage {
+    name = "growl-1.8.1";
+    version = "1.8.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/growl/-/growl-1.8.1.tgz";
+      name = "growl-1.8.1.tgz";
+      sha1 = "4b2dec8d907e93db336624dcec0183502f8c9428";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."handlebars"."1.3.x" =
+    self.by-version."handlebars"."1.3.0";
+  by-version."handlebars"."1.3.0" = self.buildNodePackage {
+    name = "handlebars-1.3.0";
+    version = "1.3.0";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/handlebars/-/handlebars-1.3.0.tgz";
+      name = "handlebars-1.3.0.tgz";
+      sha1 = "9e9b130a93e389491322d975cf3ec1818c37ce34";
+    };
+    deps = {
+      "optimist-0.3.7" = self.by-version."optimist"."0.3.7";
+    };
+    optionalDependencies = {
+      "uglify-js-2.3.6" = self.by-version."uglify-js"."2.3.6";
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."har-validator"."^1.4.0" =
+    self.by-version."har-validator"."1.7.0";
+  by-version."har-validator"."1.7.0" = self.buildNodePackage {
+    name = "har-validator-1.7.0";
+    version = "1.7.0";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/har-validator/-/har-validator-1.7.0.tgz";
+      name = "har-validator-1.7.0.tgz";
+      sha1 = "563f8c58edca6410e2e408b0e540161da580dc46";
+    };
+    deps = {
+      "bluebird-2.9.25" = self.by-version."bluebird"."2.9.25";
+      "chalk-1.0.0" = self.by-version."chalk"."1.0.0";
+      "commander-2.8.1" = self.by-version."commander"."2.8.1";
+      "is-my-json-valid-2.11.0" = self.by-version."is-my-json-valid"."2.11.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."has-ansi"."^0.1.0" =
+    self.by-version."has-ansi"."0.1.0";
+  by-version."has-ansi"."0.1.0" = self.buildNodePackage {
+    name = "has-ansi-0.1.0";
+    version = "0.1.0";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz";
+      name = "has-ansi-0.1.0.tgz";
+      sha1 = "84f265aae8c0e6a88a12d7022894b7568894c62e";
+    };
+    deps = {
+      "ansi-regex-0.2.1" = self.by-version."ansi-regex"."0.2.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."has-ansi"."^1.0.3" =
+    self.by-version."has-ansi"."1.0.3";
+  by-version."has-ansi"."1.0.3" = self.buildNodePackage {
+    name = "has-ansi-1.0.3";
+    version = "1.0.3";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/has-ansi/-/has-ansi-1.0.3.tgz";
+      name = "has-ansi-1.0.3.tgz";
+      sha1 = "c0b5b1615d9e382b0ff67169d967b425e48ca538";
+    };
+    deps = {
+      "ansi-regex-1.1.1" = self.by-version."ansi-regex"."1.1.1";
+      "get-stdin-4.0.1" = self.by-version."get-stdin"."4.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."has-unicode"."^1.0.0" =
+    self.by-version."has-unicode"."1.0.0";
+  by-version."has-unicode"."1.0.0" = self.buildNodePackage {
+    name = "has-unicode-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/has-unicode/-/has-unicode-1.0.0.tgz";
+      name = "has-unicode-1.0.0.tgz";
+      sha1 = "bac5c44e064c2ffc3b8fcbd8c71afe08f9afc8cc";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."hawk"."1.1.1" =
+    self.by-version."hawk"."1.1.1";
+  by-version."hawk"."1.1.1" = self.buildNodePackage {
+    name = "hawk-1.1.1";
+    version = "1.1.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz";
+      name = "hawk-1.1.1.tgz";
+      sha1 = "87cd491f9b46e4e2aeaca335416766885d2d1ed9";
+    };
+    deps = {
+      "hoek-0.9.1" = self.by-version."hoek"."0.9.1";
+      "boom-0.4.2" = self.by-version."boom"."0.4.2";
+      "cryptiles-0.2.2" = self.by-version."cryptiles"."0.2.2";
+      "sntp-0.2.4" = self.by-version."sntp"."0.2.4";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."hawk"."~2.3.0" =
+    self.by-version."hawk"."2.3.1";
+  by-version."hawk"."2.3.1" = self.buildNodePackage {
+    name = "hawk-2.3.1";
+    version = "2.3.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz";
+      name = "hawk-2.3.1.tgz";
+      sha1 = "1e731ce39447fa1d0f6d707f7bceebec0fd1ec1f";
+    };
+    deps = {
+      "hoek-2.13.0" = self.by-version."hoek"."2.13.0";
+      "boom-2.7.1" = self.by-version."boom"."2.7.1";
+      "cryptiles-2.0.4" = self.by-version."cryptiles"."2.0.4";
+      "sntp-1.0.9" = self.by-version."sntp"."1.0.9";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."heap".">= 0.2.0" =
+    self.by-version."heap"."0.2.6";
+  by-version."heap"."0.2.6" = self.buildNodePackage {
+    name = "heap-0.2.6";
+    version = "0.2.6";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/heap/-/heap-0.2.6.tgz";
+      name = "heap-0.2.6.tgz";
+      sha1 = "087e1f10b046932fc8594dd9e6d378afc9d1e5ac";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."hoek"."0.9.x" =
+    self.by-version."hoek"."0.9.1";
+  by-version."hoek"."0.9.1" = self.buildNodePackage {
+    name = "hoek-0.9.1";
+    version = "0.9.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz";
+      name = "hoek-0.9.1.tgz";
+      sha1 = "3d322462badf07716ea7eb85baf88079cddce505";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."hoek"."2.x.x" =
+    self.by-version."hoek"."2.13.0";
+  by-version."hoek"."2.13.0" = self.buildNodePackage {
+    name = "hoek-2.13.0";
+    version = "2.13.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/hoek/-/hoek-2.13.0.tgz";
+      name = "hoek-2.13.0.tgz";
+      sha1 = "cc86b5c1c344b41a7271be449e232fac8d6f450c";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."http-signature"."~0.10.0" =
+    self.by-version."http-signature"."0.10.1";
+  by-version."http-signature"."0.10.1" = self.buildNodePackage {
+    name = "http-signature-0.10.1";
+    version = "0.10.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz";
+      name = "http-signature-0.10.1.tgz";
+      sha1 = "4fbdac132559aa8323121e540779c0a012b27e66";
+    };
+    deps = {
+      "assert-plus-0.1.5" = self.by-version."assert-plus"."0.1.5";
+      "asn1-0.1.11" = self.by-version."asn1"."0.1.11";
+      "ctype-0.5.3" = self.by-version."ctype"."0.5.3";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."iconv-lite"."0.4.8" =
+    self.by-version."iconv-lite"."0.4.8";
+  by-version."iconv-lite"."0.4.8" = self.buildNodePackage {
+    name = "iconv-lite-0.4.8";
+    version = "0.4.8";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.8.tgz";
+      name = "iconv-lite-0.4.8.tgz";
+      sha1 = "c6019a7595f2cefca702eab694a010bcd9298d20";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."inflight"."^1.0.4" =
+    self.by-version."inflight"."1.0.4";
+  by-version."inflight"."1.0.4" = self.buildNodePackage {
+    name = "inflight-1.0.4";
+    version = "1.0.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz";
+      name = "inflight-1.0.4.tgz";
+      sha1 = "6cbb4521ebd51ce0ec0a936bfd7657ef7e9b172a";
+    };
+    deps = {
+      "once-1.3.2" = self.by-version."once"."1.3.2";
+      "wrappy-1.0.1" = self.by-version."wrappy"."1.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."inherits"."2" =
+    self.by-version."inherits"."2.0.1";
+  by-version."inherits"."2.0.1" = self.buildNodePackage {
+    name = "inherits-2.0.1";
+    version = "2.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz";
+      name = "inherits-2.0.1.tgz";
+      sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."inherits"."2.0.1" =
+    self.by-version."inherits"."2.0.1";
+  by-spec."inherits"."~2.0.0" =
+    self.by-version."inherits"."2.0.1";
+  by-spec."inherits"."~2.0.1" =
+    self.by-version."inherits"."2.0.1";
+  by-spec."ini"."1.x.x" =
+    self.by-version."ini"."1.3.3";
+  by-version."ini"."1.3.3" = self.buildNodePackage {
+    name = "ini-1.3.3";
+    version = "1.3.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ini/-/ini-1.3.3.tgz";
+      name = "ini-1.3.3.tgz";
+      sha1 = "c07e34aef1de06aff21d413b458e52b21533a11e";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."ini"."~1.3.0" =
+    self.by-version."ini"."1.3.3";
+  by-spec."interpret"."^0.3.2" =
+    self.by-version."interpret"."0.3.10";
+  by-version."interpret"."0.3.10" = self.buildNodePackage {
+    name = "interpret-0.3.10";
+    version = "0.3.10";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/interpret/-/interpret-0.3.10.tgz";
+      name = "interpret-0.3.10.tgz";
+      sha1 = "088c25de731c6c5b112a90f0071cfaf459e5a7bb";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."ipaddr.js"."1.0.1" =
+    self.by-version."ipaddr.js"."1.0.1";
+  by-version."ipaddr.js"."1.0.1" = self.buildNodePackage {
+    name = "ipaddr.js-1.0.1";
+    version = "1.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.1.tgz";
+      name = "ipaddr.js-1.0.1.tgz";
+      sha1 = "5f38801dc73e0400fc7076386f6ed5215fbd8f95";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."is-my-json-valid"."^2.10.1" =
+    self.by-version."is-my-json-valid"."2.11.0";
+  by-version."is-my-json-valid"."2.11.0" = self.buildNodePackage {
+    name = "is-my-json-valid-2.11.0";
+    version = "2.11.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.11.0.tgz";
+      name = "is-my-json-valid-2.11.0.tgz";
+      sha1 = "11f130d52c6c0b2ee132a72feb8e3e4c61a2c54f";
+    };
+    deps = {
+      "generate-function-2.0.0" = self.by-version."generate-function"."2.0.0";
+      "generate-object-property-1.1.1" = self.by-version."generate-object-property"."1.1.1";
+      "jsonpointer-1.1.0" = self.by-version."jsonpointer"."1.1.0";
+      "xtend-4.0.0" = self.by-version."xtend"."4.0.0";
+    };
+    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 = "http://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."isarray"."0.0.1" =
+    self.by-version."isarray"."0.0.1";
+  by-version."isarray"."0.0.1" = self.buildNodePackage {
+    name = "isarray-0.0.1";
+    version = "0.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz";
+      name = "isarray-0.0.1.tgz";
+      sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."isstream"."0.1.x" =
+    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 = "http://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
+      name = "isstream-0.1.2.tgz";
+      sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."isstream"."~0.1.1" =
+    self.by-version."isstream"."0.1.2";
+  by-spec."istanbul"."^0.2.10" =
+    self.by-version."istanbul"."0.2.16";
+  by-version."istanbul"."0.2.16" = self.buildNodePackage {
+    name = "istanbul-0.2.16";
+    version = "0.2.16";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/istanbul/-/istanbul-0.2.16.tgz";
+      name = "istanbul-0.2.16.tgz";
+      sha1 = "870545a0d4f4b4ce161039e9e805a98c2c700bd9";
+    };
+    deps = {
+      "esprima-1.2.5" = self.by-version."esprima"."1.2.5";
+      "escodegen-1.3.3" = self.by-version."escodegen"."1.3.3";
+      "handlebars-1.3.0" = self.by-version."handlebars"."1.3.0";
+      "mkdirp-0.5.1" = self.by-version."mkdirp"."0.5.1";
+      "nopt-3.0.1" = self.by-version."nopt"."3.0.1";
+      "fileset-0.1.5" = self.by-version."fileset"."0.1.5";
+      "which-1.0.9" = self.by-version."which"."1.0.9";
+      "async-0.9.0" = self.by-version."async"."0.9.0";
+      "abbrev-1.0.5" = self.by-version."abbrev"."1.0.5";
+      "wordwrap-0.0.3" = self.by-version."wordwrap"."0.0.3";
+      "resolve-0.7.4" = self.by-version."resolve"."0.7.4";
+      "js-yaml-3.3.1" = self.by-version."js-yaml"."3.3.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "istanbul" = self.by-version."istanbul"."0.2.16";
+  by-spec."jade"."0.26.3" =
+    self.by-version."jade"."0.26.3";
+  by-version."jade"."0.26.3" = self.buildNodePackage {
+    name = "jade-0.26.3";
+    version = "0.26.3";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/jade/-/jade-0.26.3.tgz";
+      name = "jade-0.26.3.tgz";
+      sha1 = "8f10d7977d8d79f2f6ff862a81b0513ccb25686c";
+    };
+    deps = {
+      "commander-0.6.1" = self.by-version."commander"."0.6.1";
+      "mkdirp-0.3.0" = self.by-version."mkdirp"."0.3.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."jayschema"."^0.3.1" =
+    self.by-version."jayschema"."0.3.1";
+  by-version."jayschema"."0.3.1" = self.buildNodePackage {
+    name = "jayschema-0.3.1";
+    version = "0.3.1";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/jayschema/-/jayschema-0.3.1.tgz";
+      name = "jayschema-0.3.1.tgz";
+      sha1 = "76f4769f9b172ef7d5dcde4875b49cb736179b58";
+    };
+    deps = {
+      "when-3.4.6" = self.by-version."when"."3.4.6";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "jayschema" = self.by-version."jayschema"."0.3.1";
+  by-spec."jayschema-error-messages"."^1.0.2" =
+    self.by-version."jayschema-error-messages"."1.0.3";
+  by-version."jayschema-error-messages"."1.0.3" = self.buildNodePackage {
+    name = "jayschema-error-messages-1.0.3";
+    version = "1.0.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/jayschema-error-messages/-/jayschema-error-messages-1.0.3.tgz";
+      name = "jayschema-error-messages-1.0.3.tgz";
+      sha1 = "8bac6e52ae89d406fbe1a7db4ae44debfd289066";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "jayschema-error-messages" = self.by-version."jayschema-error-messages"."1.0.3";
+  by-spec."js-yaml"."3.0.1" =
+    self.by-version."js-yaml"."3.0.1";
+  by-version."js-yaml"."3.0.1" = self.buildNodePackage {
+    name = "js-yaml-3.0.1";
+    version = "3.0.1";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/js-yaml/-/js-yaml-3.0.1.tgz";
+      name = "js-yaml-3.0.1.tgz";
+      sha1 = "76405fea5bce30fc8f405d48c6dca7f0a32c6afe";
+    };
+    deps = {
+      "argparse-0.1.16" = self.by-version."argparse"."0.1.16";
+      "esprima-1.0.4" = self.by-version."esprima"."1.0.4";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."js-yaml"."3.x" =
+    self.by-version."js-yaml"."3.3.1";
+  by-version."js-yaml"."3.3.1" = self.buildNodePackage {
+    name = "js-yaml-3.3.1";
+    version = "3.3.1";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/js-yaml/-/js-yaml-3.3.1.tgz";
+      name = "js-yaml-3.3.1.tgz";
+      sha1 = "ca1acd3423ec275d12140a7bab51db015ba0b3c0";
+    };
+    deps = {
+      "argparse-1.0.2" = self.by-version."argparse"."1.0.2";
+      "esprima-2.2.0" = self.by-version."esprima"."2.2.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."json-diff"."0.3.1" =
+    self.by-version."json-diff"."0.3.1";
+  by-version."json-diff"."0.3.1" = self.buildNodePackage {
+    name = "json-diff-0.3.1";
+    version = "0.3.1";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/json-diff/-/json-diff-0.3.1.tgz";
+      name = "json-diff-0.3.1.tgz";
+      sha1 = "6dbc3ae2d25e075a7fd71bcd9874458666fb681b";
+    };
+    deps = {
+      "dreamopt-0.6.0" = self.by-version."dreamopt"."0.6.0";
+      "difflib-0.2.4" = self.by-version."difflib"."0.2.4";
+      "cli-color-0.1.7" = self.by-version."cli-color"."0.1.7";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."json-stringify-safe"."~5.0.0" =
+    self.by-version."json-stringify-safe"."5.0.0";
+  by-version."json-stringify-safe"."5.0.0" = self.buildNodePackage {
+    name = "json-stringify-safe-5.0.0";
+    version = "5.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz";
+      name = "json-stringify-safe-5.0.0.tgz";
+      sha1 = "4c1f228b5050837eba9d21f50c2e6e320624566e";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."jsonpointer"."^1.1.0" =
+    self.by-version."jsonpointer"."1.1.0";
+  by-version."jsonpointer"."1.1.0" = self.buildNodePackage {
+    name = "jsonpointer-1.1.0";
+    version = "1.1.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/jsonpointer/-/jsonpointer-1.1.0.tgz";
+      name = "jsonpointer-1.1.0.tgz";
+      sha1 = "c3c72efaed3b97154163dc01dd349e1cfe0f80fc";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."knex"."^0.7.6" =
+    self.by-version."knex"."0.7.6";
+  by-version."knex"."0.7.6" = self.buildNodePackage {
+    name = "knex-0.7.6";
+    version = "0.7.6";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/knex/-/knex-0.7.6.tgz";
+      name = "knex-0.7.6.tgz";
+      sha1 = "325d18174b0625658ff0d35aaf1cd9e631696992";
+    };
+    deps = {
+      "bluebird-2.9.25" = self.by-version."bluebird"."2.9.25";
+      "chalk-0.5.1" = self.by-version."chalk"."0.5.1";
+      "commander-2.8.1" = self.by-version."commander"."2.8.1";
+      "generic-pool-redux-0.1.0" = self.by-version."generic-pool-redux"."0.1.0";
+      "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
+      "interpret-0.3.10" = self.by-version."interpret"."0.3.10";
+      "liftoff-0.13.6" = self.by-version."liftoff"."0.13.6";
+      "lodash-2.4.2" = self.by-version."lodash"."2.4.2";
+      "minimist-1.1.1" = self.by-version."minimist"."1.1.1";
+      "mkdirp-0.5.1" = self.by-version."mkdirp"."0.5.1";
+      "readable-stream-1.1.13" = self.by-version."readable-stream"."1.1.13";
+      "tildify-1.0.0" = self.by-version."tildify"."1.0.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "knex" = self.by-version."knex"."0.7.6";
+  by-spec."lcov-parse"."0.0.6" =
+    self.by-version."lcov-parse"."0.0.6";
+  by-version."lcov-parse"."0.0.6" = self.buildNodePackage {
+    name = "lcov-parse-0.0.6";
+    version = "0.0.6";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.6.tgz";
+      name = "lcov-parse-0.0.6.tgz";
+      sha1 = "819e5da8bf0791f9d3f39eea5ed1868187f11175";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."liftoff"."~0.13.2" =
+    self.by-version."liftoff"."0.13.6";
+  by-version."liftoff"."0.13.6" = self.buildNodePackage {
+    name = "liftoff-0.13.6";
+    version = "0.13.6";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/liftoff/-/liftoff-0.13.6.tgz";
+      name = "liftoff-0.13.6.tgz";
+      sha1 = "600e8966b92d1e0150eab5b577652569f4c7d1d8";
+    };
+    deps = {
+      "findup-sync-0.1.3" = self.by-version."findup-sync"."0.1.3";
+      "resolve-1.0.0" = self.by-version."resolve"."1.0.0";
+      "minimist-1.1.1" = self.by-version."minimist"."1.1.1";
+      "extend-1.3.0" = self.by-version."extend"."1.3.0";
+      "flagged-respawn-0.3.1" = self.by-version."flagged-respawn"."0.3.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."lodash".">= 3.2.0 < 4.0.0" =
+    self.by-version."lodash"."3.8.0";
+  by-version."lodash"."3.8.0" = self.buildNodePackage {
+    name = "lodash-3.8.0";
+    version = "3.8.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/lodash/-/lodash-3.8.0.tgz";
+      name = "lodash-3.8.0.tgz";
+      sha1 = "376eb98bdcd9382a9365c33c4cb8250de1325b91";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."lodash"."^3.1.0" =
+    self.by-version."lodash"."3.8.0";
+  by-spec."lodash"."^3.6" =
+    self.by-version."lodash"."3.8.0";
+  "lodash" = self.by-version."lodash"."3.8.0";
+  by-spec."lodash"."^3.6.0" =
+    self.by-version."lodash"."3.8.0";
+  by-spec."lodash"."~2.4.0" =
+    self.by-version."lodash"."2.4.2";
+  by-version."lodash"."2.4.2" = self.buildNodePackage {
+    name = "lodash-2.4.2";
+    version = "2.4.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz";
+      name = "lodash-2.4.2.tgz";
+      sha1 = "fadd834b9683073da179b3eae6d9c0d15053f73e";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."lodash"."~2.4.1" =
+    self.by-version."lodash"."2.4.2";
+  by-spec."lodash._basetostring"."^3.0.0" =
+    self.by-version."lodash._basetostring"."3.0.0";
+  by-version."lodash._basetostring"."3.0.0" = self.buildNodePackage {
+    name = "lodash._basetostring-3.0.0";
+    version = "3.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.0.tgz";
+      name = "lodash._basetostring-3.0.0.tgz";
+      sha1 = "75a9a4aaaa2b2a8761111ff5431e7d83c1daf0e2";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."lodash._createpadding"."^3.0.0" =
+    self.by-version."lodash._createpadding"."3.6.0";
+  by-version."lodash._createpadding"."3.6.0" = self.buildNodePackage {
+    name = "lodash._createpadding-3.6.0";
+    version = "3.6.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/lodash._createpadding/-/lodash._createpadding-3.6.0.tgz";
+      name = "lodash._createpadding-3.6.0.tgz";
+      sha1 = "c466850dd1a05e6bfec54fd0cf0db28b68332d5e";
+    };
+    deps = {
+      "lodash.repeat-3.0.0" = self.by-version."lodash.repeat"."3.0.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."lodash.pad"."^3.0.0" =
+    self.by-version."lodash.pad"."3.1.0";
+  by-version."lodash.pad"."3.1.0" = self.buildNodePackage {
+    name = "lodash.pad-3.1.0";
+    version = "3.1.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/lodash.pad/-/lodash.pad-3.1.0.tgz";
+      name = "lodash.pad-3.1.0.tgz";
+      sha1 = "9f18b1f3749a95e197b5ff2ae752ea9851ada965";
+    };
+    deps = {
+      "lodash._basetostring-3.0.0" = self.by-version."lodash._basetostring"."3.0.0";
+      "lodash._createpadding-3.6.0" = self.by-version."lodash._createpadding"."3.6.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."lodash.padleft"."^3.0.0" =
+    self.by-version."lodash.padleft"."3.1.1";
+  by-version."lodash.padleft"."3.1.1" = self.buildNodePackage {
+    name = "lodash.padleft-3.1.1";
+    version = "3.1.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/lodash.padleft/-/lodash.padleft-3.1.1.tgz";
+      name = "lodash.padleft-3.1.1.tgz";
+      sha1 = "150151f1e0245edba15d50af2d71f1d5cff46530";
+    };
+    deps = {
+      "lodash._basetostring-3.0.0" = self.by-version."lodash._basetostring"."3.0.0";
+      "lodash._createpadding-3.6.0" = self.by-version."lodash._createpadding"."3.6.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."lodash.padright"."^3.0.0" =
+    self.by-version."lodash.padright"."3.1.1";
+  by-version."lodash.padright"."3.1.1" = self.buildNodePackage {
+    name = "lodash.padright-3.1.1";
+    version = "3.1.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/lodash.padright/-/lodash.padright-3.1.1.tgz";
+      name = "lodash.padright-3.1.1.tgz";
+      sha1 = "79f7770baaa39738c040aeb5465e8d88f2aacec0";
+    };
+    deps = {
+      "lodash._basetostring-3.0.0" = self.by-version."lodash._basetostring"."3.0.0";
+      "lodash._createpadding-3.6.0" = self.by-version."lodash._createpadding"."3.6.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."lodash.repeat"."^3.0.0" =
+    self.by-version."lodash.repeat"."3.0.0";
+  by-version."lodash.repeat"."3.0.0" = self.buildNodePackage {
+    name = "lodash.repeat-3.0.0";
+    version = "3.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/lodash.repeat/-/lodash.repeat-3.0.0.tgz";
+      name = "lodash.repeat-3.0.0.tgz";
+      sha1 = "c340f4136c99dc5b2e397b3fd50cffbd172a94b0";
+    };
+    deps = {
+      "lodash._basetostring-3.0.0" = self.by-version."lodash._basetostring"."3.0.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."log-driver"."1.2.4" =
+    self.by-version."log-driver"."1.2.4";
+  by-version."log-driver"."1.2.4" = self.buildNodePackage {
+    name = "log-driver-1.2.4";
+    version = "1.2.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/log-driver/-/log-driver-1.2.4.tgz";
+      name = "log-driver-1.2.4.tgz";
+      sha1 = "2d62d7faef45d8a71341961a04b0761eca99cfa3";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."lolex"."1.1.0" =
+    self.by-version."lolex"."1.1.0";
+  by-version."lolex"."1.1.0" = self.buildNodePackage {
+    name = "lolex-1.1.0";
+    version = "1.1.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/lolex/-/lolex-1.1.0.tgz";
+      name = "lolex-1.1.0.tgz";
+      sha1 = "5dbbbc850395e7523c74b3586f7fbd2626d25b1b";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."lru-cache"."2" =
+    self.by-version."lru-cache"."2.6.2";
+  by-version."lru-cache"."2.6.2" = self.buildNodePackage {
+    name = "lru-cache-2.6.2";
+    version = "2.6.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz";
+      name = "lru-cache-2.6.2.tgz";
+      sha1 = "77741638c6dc972e503dbe41dcb6bfdfba499a38";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."lru-cache"."~2.5.0" =
+    self.by-version."lru-cache"."2.5.2";
+  by-version."lru-cache"."2.5.2" = self.buildNodePackage {
+    name = "lru-cache-2.5.2";
+    version = "2.5.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/lru-cache/-/lru-cache-2.5.2.tgz";
+      name = "lru-cache-2.5.2.tgz";
+      sha1 = "1fddad938aae1263ce138680be1b3f591c0ab41c";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."media-typer"."0.3.0" =
+    self.by-version."media-typer"."0.3.0";
+  by-version."media-typer"."0.3.0" = self.buildNodePackage {
+    name = "media-typer-0.3.0";
+    version = "0.3.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz";
+      name = "media-typer-0.3.0.tgz";
+      sha1 = "8710d7af0aa626f8fffa1ce00168545263255748";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."merge-descriptors"."1.0.0" =
+    self.by-version."merge-descriptors"."1.0.0";
+  by-version."merge-descriptors"."1.0.0" = self.buildNodePackage {
+    name = "merge-descriptors-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.0.tgz";
+      name = "merge-descriptors-1.0.0.tgz";
+      sha1 = "2169cf7538e1b0cc87fb88e1502d8474bbf79864";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."methods"."0.0.1" =
+    self.by-version."methods"."0.0.1";
+  by-version."methods"."0.0.1" = self.buildNodePackage {
+    name = "methods-0.0.1";
+    version = "0.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/methods/-/methods-0.0.1.tgz";
+      name = "methods-0.0.1.tgz";
+      sha1 = "277c90f8bef39709645a8371c51c3b6c648e068c";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."methods"."1.0.0" =
+    self.by-version."methods"."1.0.0";
+  by-version."methods"."1.0.0" = self.buildNodePackage {
+    name = "methods-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/methods/-/methods-1.0.0.tgz";
+      name = "methods-1.0.0.tgz";
+      sha1 = "9a73d86375dfcef26ef61ca3e4b8a2e2538a80e3";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."methods"."~1.1.1" =
+    self.by-version."methods"."1.1.1";
+  by-version."methods"."1.1.1" = self.buildNodePackage {
+    name = "methods-1.1.1";
+    version = "1.1.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/methods/-/methods-1.1.1.tgz";
+      name = "methods-1.1.1.tgz";
+      sha1 = "17ea6366066d00c58e375b8ec7dfd0453c89822a";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."mime"."1.2.5" =
+    self.by-version."mime"."1.2.5";
+  by-version."mime"."1.2.5" = self.buildNodePackage {
+    name = "mime-1.2.5";
+    version = "1.2.5";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/mime/-/mime-1.2.5.tgz";
+      name = "mime-1.2.5.tgz";
+      sha1 = "9eed073022a8bf5e16c8566c6867b8832bfbfa13";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."mime"."1.3.4" =
+    self.by-version."mime"."1.3.4";
+  by-version."mime"."1.3.4" = self.buildNodePackage {
+    name = "mime-1.3.4";
+    version = "1.3.4";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/mime/-/mime-1.3.4.tgz";
+      name = "mime-1.3.4.tgz";
+      sha1 = "115f9e3b6b3daf2959983cb38f149a2d40eb5d53";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."mime"."~1.2.11" =
+    self.by-version."mime"."1.2.11";
+  by-version."mime"."1.2.11" = self.buildNodePackage {
+    name = "mime-1.2.11";
+    version = "1.2.11";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/mime/-/mime-1.2.11.tgz";
+      name = "mime-1.2.11.tgz";
+      sha1 = "58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."mime-db".">= 1.1.2 < 2" =
+    self.by-version."mime-db"."1.9.1";
+  by-version."mime-db"."1.9.1" = self.buildNodePackage {
+    name = "mime-db-1.9.1";
+    version = "1.9.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/mime-db/-/mime-db-1.9.1.tgz";
+      name = "mime-db-1.9.1.tgz";
+      sha1 = "1431049a71791482c29f37bafc8ea2cb3a6dd3e8";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."mime-db"."~1.9.1" =
+    self.by-version."mime-db"."1.9.1";
+  by-spec."mime-types"."~1.0.1" =
+    self.by-version."mime-types"."1.0.2";
+  by-version."mime-types"."1.0.2" = self.buildNodePackage {
+    name = "mime-types-1.0.2";
+    version = "1.0.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz";
+      name = "mime-types-1.0.2.tgz";
+      sha1 = "995ae1392ab8affcbfcb2641dd054e943c0d5dce";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."mime-types"."~2.0.1" =
+    self.by-version."mime-types"."2.0.11";
+  by-version."mime-types"."2.0.11" = self.buildNodePackage {
+    name = "mime-types-2.0.11";
+    version = "2.0.11";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/mime-types/-/mime-types-2.0.11.tgz";
+      name = "mime-types-2.0.11.tgz";
+      sha1 = "bf3449042799d877c815c29929d1e74760e72007";
+    };
+    deps = {
+      "mime-db-1.9.1" = self.by-version."mime-db"."1.9.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."mime-types"."~2.0.11" =
+    self.by-version."mime-types"."2.0.11";
+  by-spec."mime-types"."~2.0.3" =
+    self.by-version."mime-types"."2.0.11";
+  by-spec."minimatch"."0.3" =
+    self.by-version."minimatch"."0.3.0";
+  by-version."minimatch"."0.3.0" = self.buildNodePackage {
+    name = "minimatch-0.3.0";
+    version = "0.3.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz";
+      name = "minimatch-0.3.0.tgz";
+      sha1 = "275d8edaac4f1bb3326472089e7949c8394699dd";
+    };
+    deps = {
+      "lru-cache-2.6.2" = self.by-version."lru-cache"."2.6.2";
+      "sigmund-1.0.0" = self.by-version."sigmund"."1.0.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."minimatch"."0.x" =
+    self.by-version."minimatch"."0.4.0";
+  by-version."minimatch"."0.4.0" = self.buildNodePackage {
+    name = "minimatch-0.4.0";
+    version = "0.4.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/minimatch/-/minimatch-0.4.0.tgz";
+      name = "minimatch-0.4.0.tgz";
+      sha1 = "bd2c7d060d2c8c8fd7cde7f1f2ed2d5b270fdb1b";
+    };
+    deps = {
+      "lru-cache-2.6.2" = self.by-version."lru-cache"."2.6.2";
+      "sigmund-1.0.0" = self.by-version."sigmund"."1.0.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."minimatch"."^2.0.1" =
+    self.by-version."minimatch"."2.0.7";
+  by-version."minimatch"."2.0.7" = self.buildNodePackage {
+    name = "minimatch-2.0.7";
+    version = "2.0.7";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/minimatch/-/minimatch-2.0.7.tgz";
+      name = "minimatch-2.0.7.tgz";
+      sha1 = "d23652ab10e663e7d914602e920e21f9f66492be";
+    };
+    deps = {
+      "brace-expansion-1.1.0" = self.by-version."brace-expansion"."1.1.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."minimatch"."~0.2.0" =
+    self.by-version."minimatch"."0.2.14";
+  by-version."minimatch"."0.2.14" = self.buildNodePackage {
+    name = "minimatch-0.2.14";
+    version = "0.2.14";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz";
+      name = "minimatch-0.2.14.tgz";
+      sha1 = "c74e780574f63c6f9a090e90efbe6ef53a6a756a";
+    };
+    deps = {
+      "lru-cache-2.6.2" = self.by-version."lru-cache"."2.6.2";
+      "sigmund-1.0.0" = self.by-version."sigmund"."1.0.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."minimatch"."~0.2.11" =
+    self.by-version."minimatch"."0.2.14";
+  by-spec."minimist"."0.0.8" =
+    self.by-version."minimist"."0.0.8";
+  by-version."minimist"."0.0.8" = self.buildNodePackage {
+    name = "minimist-0.0.8";
+    version = "0.0.8";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
+      name = "minimist-0.0.8.tgz";
+      sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."minimist"."~0.0.1" =
+    self.by-version."minimist"."0.0.10";
+  by-version."minimist"."0.0.10" = self.buildNodePackage {
+    name = "minimist-0.0.10";
+    version = "0.0.10";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz";
+      name = "minimist-0.0.10.tgz";
+      sha1 = "de3f98543dbf96082be48ad1a0c7cda836301dcf";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."minimist"."~0.0.7" =
+    self.by-version."minimist"."0.0.10";
+  by-spec."minimist"."~1.1.0" =
+    self.by-version."minimist"."1.1.1";
+  by-version."minimist"."1.1.1" = self.buildNodePackage {
+    name = "minimist-1.1.1";
+    version = "1.1.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/minimist/-/minimist-1.1.1.tgz";
+      name = "minimist-1.1.1.tgz";
+      sha1 = "1bc2bc71658cdca5712475684363615b0b4f695b";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."mkdirp"."0.3.0" =
+    self.by-version."mkdirp"."0.3.0";
+  by-version."mkdirp"."0.3.0" = self.buildNodePackage {
+    name = "mkdirp-0.3.0";
+    version = "0.3.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz";
+      name = "mkdirp-0.3.0.tgz";
+      sha1 = "1bbf5ab1ba827af23575143490426455f481fe1e";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."mkdirp"."0.5" =
+    self.by-version."mkdirp"."0.5.1";
+  by-version."mkdirp"."0.5.1" = self.buildNodePackage {
+    name = "mkdirp-0.5.1";
+    version = "0.5.1";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
+      name = "mkdirp-0.5.1.tgz";
+      sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
+    };
+    deps = {
+      "minimist-0.0.8" = self.by-version."minimist"."0.0.8";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."mkdirp"."0.5.0" =
+    self.by-version."mkdirp"."0.5.0";
+  by-version."mkdirp"."0.5.0" = self.buildNodePackage {
+    name = "mkdirp-0.5.0";
+    version = "0.5.0";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz";
+      name = "mkdirp-0.5.0.tgz";
+      sha1 = "1d73076a6df986cd9344e15e71fcc05a4c9abf12";
+    };
+    deps = {
+      "minimist-0.0.8" = self.by-version."minimist"."0.0.8";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."mkdirp"."0.5.x" =
+    self.by-version."mkdirp"."0.5.1";
+  by-spec."mkdirp".">=0.5 0" =
+    self.by-version."mkdirp"."0.5.1";
+  by-spec."mkdirp"."^0.5.0" =
+    self.by-version."mkdirp"."0.5.1";
+  by-spec."mkdirp"."~0.5.0" =
+    self.by-version."mkdirp"."0.5.1";
+  by-spec."mocha"."^2.1.0" =
+    self.by-version."mocha"."2.2.4";
+  by-version."mocha"."2.2.4" = self.buildNodePackage {
+    name = "mocha-2.2.4";
+    version = "2.2.4";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/mocha/-/mocha-2.2.4.tgz";
+      name = "mocha-2.2.4.tgz";
+      sha1 = "192b0edc0e17e56613bc66e5fc7e81c00413a98d";
+    };
+    deps = {
+      "commander-2.3.0" = self.by-version."commander"."2.3.0";
+      "debug-2.0.0" = self.by-version."debug"."2.0.0";
+      "diff-1.0.8" = self.by-version."diff"."1.0.8";
+      "escape-string-regexp-1.0.2" = self.by-version."escape-string-regexp"."1.0.2";
+      "glob-3.2.3" = self.by-version."glob"."3.2.3";
+      "growl-1.8.1" = self.by-version."growl"."1.8.1";
+      "jade-0.26.3" = self.by-version."jade"."0.26.3";
+      "mkdirp-0.5.0" = self.by-version."mkdirp"."0.5.0";
+      "supports-color-1.2.1" = self.by-version."supports-color"."1.2.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "mocha" = self.by-version."mocha"."2.2.4";
+  by-spec."morgan"."^1.3.0" =
+    self.by-version."morgan"."1.5.3";
+  by-version."morgan"."1.5.3" = self.buildNodePackage {
+    name = "morgan-1.5.3";
+    version = "1.5.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/morgan/-/morgan-1.5.3.tgz";
+      name = "morgan-1.5.3.tgz";
+      sha1 = "8adb4e72f9e5c5436e5d93f42910835f79da9fdf";
+    };
+    deps = {
+      "basic-auth-1.0.1" = self.by-version."basic-auth"."1.0.1";
+      "debug-2.2.0" = self.by-version."debug"."2.2.0";
+      "depd-1.0.1" = self.by-version."depd"."1.0.1";
+      "on-finished-2.2.1" = self.by-version."on-finished"."2.2.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "morgan" = self.by-version."morgan"."1.5.3";
+  by-spec."ms"."0.6.2" =
+    self.by-version."ms"."0.6.2";
+  by-version."ms"."0.6.2" = self.buildNodePackage {
+    name = "ms-0.6.2";
+    version = "0.6.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ms/-/ms-0.6.2.tgz";
+      name = "ms-0.6.2.tgz";
+      sha1 = "d89c2124c6fdc1353d65a8b77bf1aac4b193708c";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."ms"."0.7.0" =
+    self.by-version."ms"."0.7.0";
+  by-version."ms"."0.7.0" = self.buildNodePackage {
+    name = "ms-0.7.0";
+    version = "0.7.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ms/-/ms-0.7.0.tgz";
+      name = "ms-0.7.0.tgz";
+      sha1 = "865be94c2e7397ad8a57da6a633a6e2f30798b83";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."ms"."0.7.1" =
+    self.by-version."ms"."0.7.1";
+  by-version."ms"."0.7.1" = self.buildNodePackage {
+    name = "ms-0.7.1";
+    version = "0.7.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz";
+      name = "ms-0.7.1.tgz";
+      sha1 = "9cd13c03adbff25b65effde7ce864ee952017098";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."nan"."1.6.x" =
+    self.by-version."nan"."1.6.2";
+  by-version."nan"."1.6.2" = self.buildNodePackage {
+    name = "nan-1.6.2";
+    version = "1.6.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/nan/-/nan-1.6.2.tgz";
+      name = "nan-1.6.2.tgz";
+      sha1 = "2657d1c43b00f1e847e083832285b7d8f5ba8ec8";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."nan"."~1.0.0" =
+    self.by-version."nan"."1.0.0";
+  by-version."nan"."1.0.0" = self.buildNodePackage {
+    name = "nan-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/nan/-/nan-1.0.0.tgz";
+      name = "nan-1.0.0.tgz";
+      sha1 = "ae24f8850818d662fcab5acf7f3b95bfaa2ccf38";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."nan"."~1.8.4" =
+    self.by-version."nan"."1.8.4";
+  by-version."nan"."1.8.4" = self.buildNodePackage {
+    name = "nan-1.8.4";
+    version = "1.8.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/nan/-/nan-1.8.4.tgz";
+      name = "nan-1.8.4.tgz";
+      sha1 = "3c76b5382eab33e44b758d2813ca9d92e9342f34";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."nconf"."^0.6.9" =
+    self.by-version."nconf"."0.6.9";
+  by-version."nconf"."0.6.9" = self.buildNodePackage {
+    name = "nconf-0.6.9";
+    version = "0.6.9";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/nconf/-/nconf-0.6.9.tgz";
+      name = "nconf-0.6.9.tgz";
+      sha1 = "9570ef15ed6f9ae6b2b3c8d5e71b66d3193cd661";
+    };
+    deps = {
+      "async-0.2.9" = self.by-version."async"."0.2.9";
+      "ini-1.3.3" = self.by-version."ini"."1.3.3";
+      "optimist-0.6.0" = self.by-version."optimist"."0.6.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "nconf" = self.by-version."nconf"."0.6.9";
+  by-spec."negotiator"."0.5.3" =
+    self.by-version."negotiator"."0.5.3";
+  by-version."negotiator"."0.5.3" = self.buildNodePackage {
+    name = "negotiator-0.5.3";
+    version = "0.5.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz";
+      name = "negotiator-0.5.3.tgz";
+      sha1 = "269d5c476810ec92edbe7b6c2f28316384f9a7e8";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."node-pre-gyp"."~0.6.7" =
+    self.by-version."node-pre-gyp"."0.6.7";
+  by-version."node-pre-gyp"."0.6.7" = self.buildNodePackage {
+    name = "node-pre-gyp-0.6.7";
+    version = "0.6.7";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.7.tgz";
+      name = "node-pre-gyp-0.6.7.tgz";
+      sha1 = "4c3ee4ac2934b0b27fead6bc76391c0dccf38ea8";
+    };
+    deps = {
+      "nopt-3.0.1" = self.by-version."nopt"."3.0.1";
+      "npmlog-1.2.0" = self.by-version."npmlog"."1.2.0";
+      "request-2.55.0" = self.by-version."request"."2.55.0";
+      "semver-4.3.4" = self.by-version."semver"."4.3.4";
+      "tar-2.1.1" = self.by-version."tar"."2.1.1";
+      "tar-pack-2.0.0" = self.by-version."tar-pack"."2.0.0";
+      "mkdirp-0.5.1" = self.by-version."mkdirp"."0.5.1";
+      "rc-1.0.1" = self.by-version."rc"."1.0.1";
+      "rimraf-2.3.3" = self.by-version."rimraf"."2.3.3";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."node-uuid"."^1.4.1" =
+    self.by-version."node-uuid"."1.4.3";
+  by-version."node-uuid"."1.4.3" = self.buildNodePackage {
+    name = "node-uuid-1.4.3";
+    version = "1.4.3";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz";
+      name = "node-uuid-1.4.3.tgz";
+      sha1 = "319bb7a56e7cb63f00b5c0cd7851cd4b4ddf1df9";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "node-uuid" = self.by-version."node-uuid"."1.4.3";
+  by-spec."node-uuid"."~1.4.0" =
+    self.by-version."node-uuid"."1.4.3";
+  by-spec."nopt"."3.x" =
+    self.by-version."nopt"."3.0.1";
+  by-version."nopt"."3.0.1" = self.buildNodePackage {
+    name = "nopt-3.0.1";
+    version = "3.0.1";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/nopt/-/nopt-3.0.1.tgz";
+      name = "nopt-3.0.1.tgz";
+      sha1 = "bce5c42446a3291f47622a370abbf158fbbacbfd";
+    };
+    deps = {
+      "abbrev-1.0.5" = self.by-version."abbrev"."1.0.5";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."nopt"."~3.0.1" =
+    self.by-version."nopt"."3.0.1";
+  by-spec."npmlog"."~1.2.0" =
+    self.by-version."npmlog"."1.2.0";
+  by-version."npmlog"."1.2.0" = self.buildNodePackage {
+    name = "npmlog-1.2.0";
+    version = "1.2.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/npmlog/-/npmlog-1.2.0.tgz";
+      name = "npmlog-1.2.0.tgz";
+      sha1 = "b512f18ae8696a0192ada78ba00c06dbbd91bafb";
+    };
+    deps = {
+      "ansi-0.3.0" = self.by-version."ansi"."0.3.0";
+      "are-we-there-yet-1.0.4" = self.by-version."are-we-there-yet"."1.0.4";
+      "gauge-1.2.0" = self.by-version."gauge"."1.2.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."oauth-sign"."~0.3.0" =
+    self.by-version."oauth-sign"."0.3.0";
+  by-version."oauth-sign"."0.3.0" = self.buildNodePackage {
+    name = "oauth-sign-0.3.0";
+    version = "0.3.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz";
+      name = "oauth-sign-0.3.0.tgz";
+      sha1 = "cb540f93bb2b22a7d5941691a288d60e8ea9386e";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."oauth-sign"."~0.6.0" =
+    self.by-version."oauth-sign"."0.6.0";
+  by-version."oauth-sign"."0.6.0" = self.buildNodePackage {
+    name = "oauth-sign-0.6.0";
+    version = "0.6.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/oauth-sign/-/oauth-sign-0.6.0.tgz";
+      name = "oauth-sign-0.6.0.tgz";
+      sha1 = "7dbeae44f6ca454e1f168451d630746735813ce3";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."on-finished"."~2.2.0" =
+    self.by-version."on-finished"."2.2.1";
+  by-version."on-finished"."2.2.1" = self.buildNodePackage {
+    name = "on-finished-2.2.1";
+    version = "2.2.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/on-finished/-/on-finished-2.2.1.tgz";
+      name = "on-finished-2.2.1.tgz";
+      sha1 = "5c85c1cc36299f78029653f667f27b6b99ebc029";
+    };
+    deps = {
+      "ee-first-1.1.0" = self.by-version."ee-first"."1.1.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."on-finished"."~2.2.1" =
+    self.by-version."on-finished"."2.2.1";
+  by-spec."on-headers"."~1.0.0" =
+    self.by-version."on-headers"."1.0.0";
+  by-version."on-headers"."1.0.0" = self.buildNodePackage {
+    name = "on-headers-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/on-headers/-/on-headers-1.0.0.tgz";
+      name = "on-headers-1.0.0.tgz";
+      sha1 = "2c75b5da4375513d0161c6052e7fcbe4953fca5d";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."once"."^1.3.0" =
+    self.by-version."once"."1.3.2";
+  by-version."once"."1.3.2" = self.buildNodePackage {
+    name = "once-1.3.2";
+    version = "1.3.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/once/-/once-1.3.2.tgz";
+      name = "once-1.3.2.tgz";
+      sha1 = "d8feeca93b039ec1dcdee7741c92bdac5e28081b";
+    };
+    deps = {
+      "wrappy-1.0.1" = self.by-version."wrappy"."1.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."once"."~1.1.1" =
+    self.by-version."once"."1.1.1";
+  by-version."once"."1.1.1" = self.buildNodePackage {
+    name = "once-1.1.1";
+    version = "1.1.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/once/-/once-1.1.1.tgz";
+      name = "once-1.1.1.tgz";
+      sha1 = "9db574933ccb08c3a7614d154032c09ea6f339e7";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."optimist"."0.6.0" =
+    self.by-version."optimist"."0.6.0";
+  by-version."optimist"."0.6.0" = self.buildNodePackage {
+    name = "optimist-0.6.0";
+    version = "0.6.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz";
+      name = "optimist-0.6.0.tgz";
+      sha1 = "69424826f3405f79f142e6fc3d9ae58d4dbb9200";
+    };
+    deps = {
+      "wordwrap-0.0.3" = self.by-version."wordwrap"."0.0.3";
+      "minimist-0.0.10" = self.by-version."minimist"."0.0.10";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."optimist"."~0.3" =
+    self.by-version."optimist"."0.3.7";
+  by-version."optimist"."0.3.7" = self.buildNodePackage {
+    name = "optimist-0.3.7";
+    version = "0.3.7";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz";
+      name = "optimist-0.3.7.tgz";
+      sha1 = "c90941ad59e4273328923074d2cf2e7cbc6ec0d9";
+    };
+    deps = {
+      "wordwrap-0.0.3" = self.by-version."wordwrap"."0.0.3";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."optimist"."~0.3.5" =
+    self.by-version."optimist"."0.3.7";
+  by-spec."options".">=0.0.5" =
+    self.by-version."options"."0.0.6";
+  by-version."options"."0.0.6" = self.buildNodePackage {
+    name = "options-0.0.6";
+    version = "0.0.6";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/options/-/options-0.0.6.tgz";
+      name = "options-0.0.6.tgz";
+      sha1 = "ec22d312806bb53e731773e7cdaefcf1c643128f";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."parseurl"."~1.3.0" =
+    self.by-version."parseurl"."1.3.0";
+  by-version."parseurl"."1.3.0" = self.buildNodePackage {
+    name = "parseurl-1.3.0";
+    version = "1.3.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/parseurl/-/parseurl-1.3.0.tgz";
+      name = "parseurl-1.3.0.tgz";
+      sha1 = "b58046db4223e145afa76009e61bac87cc2281b3";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."path-to-regexp"."0.1.3" =
+    self.by-version."path-to-regexp"."0.1.3";
+  by-version."path-to-regexp"."0.1.3" = self.buildNodePackage {
+    name = "path-to-regexp-0.1.3";
+    version = "0.1.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.3.tgz";
+      name = "path-to-regexp-0.1.3.tgz";
+      sha1 = "21b9ab82274279de25b156ea08fd12ca51b8aecb";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."pkginfo"."0.3.x" =
+    self.by-version."pkginfo"."0.3.0";
+  by-version."pkginfo"."0.3.0" = self.buildNodePackage {
+    name = "pkginfo-0.3.0";
+    version = "0.3.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/pkginfo/-/pkginfo-0.3.0.tgz";
+      name = "pkginfo-0.3.0.tgz";
+      sha1 = "726411401039fe9b009eea86614295d5f3a54276";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."proxy-addr"."~1.0.7" =
+    self.by-version."proxy-addr"."1.0.8";
+  by-version."proxy-addr"."1.0.8" = self.buildNodePackage {
+    name = "proxy-addr-1.0.8";
+    version = "1.0.8";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.8.tgz";
+      name = "proxy-addr-1.0.8.tgz";
+      sha1 = "db54ec878bcc1053d57646609219b3715678bafe";
+    };
+    deps = {
+      "forwarded-0.1.0" = self.by-version."forwarded"."0.1.0";
+      "ipaddr.js-1.0.1" = self.by-version."ipaddr.js"."1.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."qs"."0.6.6" =
+    self.by-version."qs"."0.6.6";
+  by-version."qs"."0.6.6" = self.buildNodePackage {
+    name = "qs-0.6.6";
+    version = "0.6.6";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/qs/-/qs-0.6.6.tgz";
+      name = "qs-0.6.6.tgz";
+      sha1 = "6e015098ff51968b8a3c819001d5f2c89bc4b107";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."qs"."2.4.1" =
+    self.by-version."qs"."2.4.1";
+  by-version."qs"."2.4.1" = self.buildNodePackage {
+    name = "qs-2.4.1";
+    version = "2.4.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/qs/-/qs-2.4.1.tgz";
+      name = "qs-2.4.1.tgz";
+      sha1 = "68cbaea971013426a80c1404fad6b1a6b1175245";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."qs"."2.4.2" =
+    self.by-version."qs"."2.4.2";
+  by-version."qs"."2.4.2" = self.buildNodePackage {
+    name = "qs-2.4.2";
+    version = "2.4.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/qs/-/qs-2.4.2.tgz";
+      name = "qs-2.4.2.tgz";
+      sha1 = "f7ce788e5777df0b5010da7f7c4e73ba32470f5a";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."qs"."~1.0.0" =
+    self.by-version."qs"."1.0.2";
+  by-version."qs"."1.0.2" = self.buildNodePackage {
+    name = "qs-1.0.2";
+    version = "1.0.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/qs/-/qs-1.0.2.tgz";
+      name = "qs-1.0.2.tgz";
+      sha1 = "50a93e2b5af6691c31bcea5dae78ee6ea1903768";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."qs"."~2.4.0" =
+    self.by-version."qs"."2.4.2";
+  by-spec."range-parser"."~1.0.2" =
+    self.by-version."range-parser"."1.0.2";
+  by-version."range-parser"."1.0.2" = self.buildNodePackage {
+    name = "range-parser-1.0.2";
+    version = "1.0.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/range-parser/-/range-parser-1.0.2.tgz";
+      name = "range-parser-1.0.2.tgz";
+      sha1 = "06a12a42e5131ba8e457cd892044867f2344e549";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."raw-body"."~2.0.1" =
+    self.by-version."raw-body"."2.0.1";
+  by-version."raw-body"."2.0.1" = self.buildNodePackage {
+    name = "raw-body-2.0.1";
+    version = "2.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/raw-body/-/raw-body-2.0.1.tgz";
+      name = "raw-body-2.0.1.tgz";
+      sha1 = "2b70a3ffd1681c0521bae73454e0ccbc785d378e";
+    };
+    deps = {
+      "bytes-2.0.1" = self.by-version."bytes"."2.0.1";
+      "iconv-lite-0.4.8" = self.by-version."iconv-lite"."0.4.8";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."rc"."~1.0.1" =
+    self.by-version."rc"."1.0.1";
+  by-version."rc"."1.0.1" = self.buildNodePackage {
+    name = "rc-1.0.1";
+    version = "1.0.1";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/rc/-/rc-1.0.1.tgz";
+      name = "rc-1.0.1.tgz";
+      sha1 = "f919c25e804cb0aa60f6fd92d929fc86b45013e8";
+    };
+    deps = {
+      "minimist-0.0.10" = self.by-version."minimist"."0.0.10";
+      "deep-extend-0.2.11" = self.by-version."deep-extend"."0.2.11";
+      "strip-json-comments-0.1.3" = self.by-version."strip-json-comments"."0.1.3";
+      "ini-1.3.3" = self.by-version."ini"."1.3.3";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."readable-stream"."1.0.27-1" =
+    self.by-version."readable-stream"."1.0.27-1";
+  by-version."readable-stream"."1.0.27-1" = self.buildNodePackage {
+    name = "readable-stream-1.0.27-1";
+    version = "1.0.27-1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.27-1.tgz";
+      name = "readable-stream-1.0.27-1.tgz";
+      sha1 = "6b67983c20357cefd07f0165001a16d710d91078";
+    };
+    deps = {
+      "core-util-is-1.0.1" = self.by-version."core-util-is"."1.0.1";
+      "isarray-0.0.1" = self.by-version."isarray"."0.0.1";
+      "string_decoder-0.10.31" = self.by-version."string_decoder"."0.10.31";
+      "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."readable-stream"."^1.1.12" =
+    self.by-version."readable-stream"."1.1.13";
+  by-version."readable-stream"."1.1.13" = self.buildNodePackage {
+    name = "readable-stream-1.1.13";
+    version = "1.1.13";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz";
+      name = "readable-stream-1.1.13.tgz";
+      sha1 = "f6eef764f514c89e2b9e23146a75ba106756d23e";
+    };
+    deps = {
+      "core-util-is-1.0.1" = self.by-version."core-util-is"."1.0.1";
+      "isarray-0.0.1" = self.by-version."isarray"."0.0.1";
+      "string_decoder-0.10.31" = self.by-version."string_decoder"."0.10.31";
+      "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."readable-stream"."^1.1.13" =
+    self.by-version."readable-stream"."1.1.13";
+  by-spec."readable-stream"."~1.0.2" =
+    self.by-version."readable-stream"."1.0.33";
+  by-version."readable-stream"."1.0.33" = self.buildNodePackage {
+    name = "readable-stream-1.0.33";
+    version = "1.0.33";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz";
+      name = "readable-stream-1.0.33.tgz";
+      sha1 = "3a360dd66c1b1d7fd4705389860eda1d0f61126c";
+    };
+    deps = {
+      "core-util-is-1.0.1" = self.by-version."core-util-is"."1.0.1";
+      "isarray-0.0.1" = self.by-version."isarray"."0.0.1";
+      "string_decoder-0.10.31" = self.by-version."string_decoder"."0.10.31";
+      "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."readable-stream"."~1.0.26" =
+    self.by-version."readable-stream"."1.0.33";
+  by-spec."reduce-component"."1.0.1" =
+    self.by-version."reduce-component"."1.0.1";
+  by-version."reduce-component"."1.0.1" = self.buildNodePackage {
+    name = "reduce-component-1.0.1";
+    version = "1.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz";
+      name = "reduce-component-1.0.1.tgz";
+      sha1 = "e0c93542c574521bea13df0f9488ed82ab77c5da";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."request"."2.40.0" =
+    self.by-version."request"."2.40.0";
+  by-version."request"."2.40.0" = self.buildNodePackage {
+    name = "request-2.40.0";
+    version = "2.40.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/request/-/request-2.40.0.tgz";
+      name = "request-2.40.0.tgz";
+      sha1 = "4dd670f696f1e6e842e66b4b5e839301ab9beb67";
+    };
+    deps = {
+      "qs-1.0.2" = self.by-version."qs"."1.0.2";
+      "json-stringify-safe-5.0.0" = self.by-version."json-stringify-safe"."5.0.0";
+      "mime-types-1.0.2" = self.by-version."mime-types"."1.0.2";
+      "forever-agent-0.5.2" = self.by-version."forever-agent"."0.5.2";
+      "node-uuid-1.4.3" = self.by-version."node-uuid"."1.4.3";
+    };
+    optionalDependencies = {
+      "tough-cookie-1.1.0" = self.by-version."tough-cookie"."1.1.0";
+      "form-data-0.1.4" = self.by-version."form-data"."0.1.4";
+      "tunnel-agent-0.4.0" = self.by-version."tunnel-agent"."0.4.0";
+      "http-signature-0.10.1" = self.by-version."http-signature"."0.10.1";
+      "oauth-sign-0.3.0" = self.by-version."oauth-sign"."0.3.0";
+      "hawk-1.1.1" = self.by-version."hawk"."1.1.1";
+      "aws-sign2-0.5.0" = self.by-version."aws-sign2"."0.5.0";
+      "stringstream-0.0.4" = self.by-version."stringstream"."0.0.4";
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."request"."2.x" =
+    self.by-version."request"."2.55.0";
+  by-version."request"."2.55.0" = self.buildNodePackage {
+    name = "request-2.55.0";
+    version = "2.55.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/request/-/request-2.55.0.tgz";
+      name = "request-2.55.0.tgz";
+      sha1 = "d75c1cdf679d76bb100f9bffe1fe551b5c24e93d";
+    };
+    deps = {
+      "bl-0.9.4" = self.by-version."bl"."0.9.4";
+      "caseless-0.9.0" = self.by-version."caseless"."0.9.0";
+      "forever-agent-0.6.1" = self.by-version."forever-agent"."0.6.1";
+      "form-data-0.2.0" = self.by-version."form-data"."0.2.0";
+      "json-stringify-safe-5.0.0" = self.by-version."json-stringify-safe"."5.0.0";
+      "mime-types-2.0.11" = self.by-version."mime-types"."2.0.11";
+      "node-uuid-1.4.3" = self.by-version."node-uuid"."1.4.3";
+      "qs-2.4.2" = self.by-version."qs"."2.4.2";
+      "tunnel-agent-0.4.0" = self.by-version."tunnel-agent"."0.4.0";
+      "tough-cookie-1.1.0" = self.by-version."tough-cookie"."1.1.0";
+      "http-signature-0.10.1" = self.by-version."http-signature"."0.10.1";
+      "oauth-sign-0.6.0" = self.by-version."oauth-sign"."0.6.0";
+      "hawk-2.3.1" = self.by-version."hawk"."2.3.1";
+      "aws-sign2-0.5.0" = self.by-version."aws-sign2"."0.5.0";
+      "stringstream-0.0.4" = self.by-version."stringstream"."0.0.4";
+      "combined-stream-0.0.7" = self.by-version."combined-stream"."0.0.7";
+      "isstream-0.1.2" = self.by-version."isstream"."0.1.2";
+      "har-validator-1.7.0" = self.by-version."har-validator"."1.7.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."require-directory"."^1.2.0" =
+    self.by-version."require-directory"."1.2.0";
+  by-version."require-directory"."1.2.0" = self.buildNodePackage {
+    name = "require-directory-1.2.0";
+    version = "1.2.0";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/require-directory/-/require-directory-1.2.0.tgz";
+      name = "require-directory-1.2.0.tgz";
+      sha1 = "35ff45a82ab73ca6ca35c746c0a17014371e1afd";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "require-directory" = self.by-version."require-directory"."1.2.0";
+  by-spec."resolve"."0.7.x" =
+    self.by-version."resolve"."0.7.4";
+  by-version."resolve"."0.7.4" = self.buildNodePackage {
+    name = "resolve-0.7.4";
+    version = "0.7.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/resolve/-/resolve-0.7.4.tgz";
+      name = "resolve-0.7.4.tgz";
+      sha1 = "395a9ef9e873fbfe12bd14408bd91bb936003d69";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."resolve"."~1.0.0" =
+    self.by-version."resolve"."1.0.0";
+  by-version."resolve"."1.0.0" = self.buildNodePackage {
+    name = "resolve-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/resolve/-/resolve-1.0.0.tgz";
+      name = "resolve-1.0.0.tgz";
+      sha1 = "2a6e3b314dcd57c6519e8e2282af8687e8de61c6";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."rimraf"."2" =
+    self.by-version."rimraf"."2.3.3";
+  by-version."rimraf"."2.3.3" = self.buildNodePackage {
+    name = "rimraf-2.3.3";
+    version = "2.3.3";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/rimraf/-/rimraf-2.3.3.tgz";
+      name = "rimraf-2.3.3.tgz";
+      sha1 = "d0073d8b3010611e8f3ad377b08e9a3c18b98f06";
+    };
+    deps = {
+      "glob-4.5.3" = self.by-version."glob"."4.5.3";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."rimraf"."~2.2.0" =
+    self.by-version."rimraf"."2.2.8";
+  by-version."rimraf"."2.2.8" = self.buildNodePackage {
+    name = "rimraf-2.2.8";
+    version = "2.2.8";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz";
+      name = "rimraf-2.2.8.tgz";
+      sha1 = "e439be2aaee327321952730f99a8929e4fc50582";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."rimraf"."~2.3.2" =
+    self.by-version."rimraf"."2.3.3";
+  by-spec."ripple-lib"."^0.12.3" =
+    self.by-version."ripple-lib"."0.12.4";
+  by-version."ripple-lib"."0.12.4" = self.buildNodePackage {
+    name = "ripple-lib-0.12.4";
+    version = "0.12.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ripple-lib/-/ripple-lib-0.12.4.tgz";
+      name = "ripple-lib-0.12.4.tgz";
+      sha1 = "97675f9ae92bda1397deaaad70a76955d14f91fd";
+    };
+    deps = {
+      "async-0.9.0" = self.by-version."async"."0.9.0";
+      "bignumber.js-2.0.7" = self.by-version."bignumber.js"."2.0.7";
+      "extend-1.2.1" = self.by-version."extend"."1.2.1";
+      "lodash-3.8.0" = self.by-version."lodash"."3.8.0";
+      "lru-cache-2.5.2" = self.by-version."lru-cache"."2.5.2";
+      "ripple-wallet-generator-1.0.3" = self.by-version."ripple-wallet-generator"."1.0.3";
+      "ws-0.7.1" = self.by-version."ws"."0.7.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "ripple-lib" = self.by-version."ripple-lib"."0.12.4";
+  by-spec."ripple-lib-transactionparser"."^0.3.2" =
+    self.by-version."ripple-lib-transactionparser"."0.3.2";
+  by-version."ripple-lib-transactionparser"."0.3.2" = self.buildNodePackage {
+    name = "ripple-lib-transactionparser-0.3.2";
+    version = "0.3.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ripple-lib-transactionparser/-/ripple-lib-transactionparser-0.3.2.tgz";
+      name = "ripple-lib-transactionparser-0.3.2.tgz";
+      sha1 = "cf85e44f9f623798b68f664244e026956092f874";
+    };
+    deps = {
+      "bignumber.js-1.4.1" = self.by-version."bignumber.js"."1.4.1";
+      "lodash-3.8.0" = self.by-version."lodash"."3.8.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "ripple-lib-transactionparser" = self.by-version."ripple-lib-transactionparser"."0.3.2";
+  by-spec."ripple-wallet-generator"."^1.0.3" =
+    self.by-version."ripple-wallet-generator"."1.0.3";
+  by-version."ripple-wallet-generator"."1.0.3" = self.buildNodePackage {
+    name = "ripple-wallet-generator-1.0.3";
+    version = "1.0.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ripple-wallet-generator/-/ripple-wallet-generator-1.0.3.tgz";
+      name = "ripple-wallet-generator-1.0.3.tgz";
+      sha1 = "2a1f0f6e2a39998fcf8fa89a55cb5c999cdb86ca";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."samsam"."~1.1" =
+    self.by-version."samsam"."1.1.2";
+  by-version."samsam"."1.1.2" = self.buildNodePackage {
+    name = "samsam-1.1.2";
+    version = "1.1.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz";
+      name = "samsam-1.1.2.tgz";
+      sha1 = "bec11fdc83a9fda063401210e40176c3024d1567";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."semver"."~4.3.2" =
+    self.by-version."semver"."4.3.4";
+  by-version."semver"."4.3.4" = self.buildNodePackage {
+    name = "semver-4.3.4";
+    version = "4.3.4";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/semver/-/semver-4.3.4.tgz";
+      name = "semver-4.3.4.tgz";
+      sha1 = "bf43a1aae304de040e12a13f84200ca7aeab7589";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."send"."0.12.2" =
+    self.by-version."send"."0.12.2";
+  by-version."send"."0.12.2" = self.buildNodePackage {
+    name = "send-0.12.2";
+    version = "0.12.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/send/-/send-0.12.2.tgz";
+      name = "send-0.12.2.tgz";
+      sha1 = "ba6785e47ab41aa0358b9da401ab22ff0f58eab6";
+    };
+    deps = {
+      "debug-2.1.3" = self.by-version."debug"."2.1.3";
+      "depd-1.0.1" = self.by-version."depd"."1.0.1";
+      "destroy-1.0.3" = self.by-version."destroy"."1.0.3";
+      "escape-html-1.0.1" = self.by-version."escape-html"."1.0.1";
+      "etag-1.5.1" = self.by-version."etag"."1.5.1";
+      "fresh-0.2.4" = self.by-version."fresh"."0.2.4";
+      "mime-1.3.4" = self.by-version."mime"."1.3.4";
+      "ms-0.7.0" = self.by-version."ms"."0.7.0";
+      "on-finished-2.2.1" = self.by-version."on-finished"."2.2.1";
+      "range-parser-1.0.2" = self.by-version."range-parser"."1.0.2";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."serve-static"."~1.9.2" =
+    self.by-version."serve-static"."1.9.2";
+  by-version."serve-static"."1.9.2" = self.buildNodePackage {
+    name = "serve-static-1.9.2";
+    version = "1.9.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/serve-static/-/serve-static-1.9.2.tgz";
+      name = "serve-static-1.9.2.tgz";
+      sha1 = "069fa32453557b218ec2e39140c82d8905d5672c";
+    };
+    deps = {
+      "escape-html-1.0.1" = self.by-version."escape-html"."1.0.1";
+      "parseurl-1.3.0" = self.by-version."parseurl"."1.3.0";
+      "send-0.12.2" = self.by-version."send"."0.12.2";
+      "utils-merge-1.0.0" = self.by-version."utils-merge"."1.0.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."sigmund"."~1.0.0" =
+    self.by-version."sigmund"."1.0.0";
+  by-version."sigmund"."1.0.0" = self.buildNodePackage {
+    name = "sigmund-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz";
+      name = "sigmund-1.0.0.tgz";
+      sha1 = "66a2b3a749ae8b5fb89efd4fcc01dc94fbe02296";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."sinon".">=1.4.0 <2" =
+    self.by-version."sinon"."1.14.1";
+  by-version."sinon"."1.14.1" = self.buildNodePackage {
+    name = "sinon-1.14.1";
+    version = "1.14.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/sinon/-/sinon-1.14.1.tgz";
+      name = "sinon-1.14.1.tgz";
+      sha1 = "d82797841918734507c94b7a73e3f560904578ad";
+    };
+    deps = {
+      "formatio-1.1.1" = self.by-version."formatio"."1.1.1";
+      "util-0.10.3" = self.by-version."util"."0.10.3";
+      "lolex-1.1.0" = self.by-version."lolex"."1.1.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."sinon"."~1.10.0" =
+    self.by-version."sinon"."1.10.3";
+  by-version."sinon"."1.10.3" = self.buildNodePackage {
+    name = "sinon-1.10.3";
+    version = "1.10.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/sinon/-/sinon-1.10.3.tgz";
+      name = "sinon-1.10.3.tgz";
+      sha1 = "c063e0e99d8327dc199113aab52eb83a2e9e3c2c";
+    };
+    deps = {
+      "formatio-1.0.2" = self.by-version."formatio"."1.0.2";
+      "util-0.10.3" = self.by-version."util"."0.10.3";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "sinon" = self.by-version."sinon"."1.10.3";
+  by-spec."sinon-chai"."^2.5.0" =
+    self.by-version."sinon-chai"."2.7.0";
+  by-version."sinon-chai"."2.7.0" = self.buildNodePackage {
+    name = "sinon-chai-2.7.0";
+    version = "2.7.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/sinon-chai/-/sinon-chai-2.7.0.tgz";
+      name = "sinon-chai-2.7.0.tgz";
+      sha1 = "493df3a3d758933fdd3678d011a4f738d5e72540";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [
+      self.by-version."chai"."2.3.0"
+      self.by-version."sinon"."1.14.1"];
+    os = [ ];
+    cpu = [ ];
+  };
+  "sinon-chai" = self.by-version."sinon-chai"."2.7.0";
+  by-spec."sntp"."0.2.x" =
+    self.by-version."sntp"."0.2.4";
+  by-version."sntp"."0.2.4" = self.buildNodePackage {
+    name = "sntp-0.2.4";
+    version = "0.2.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz";
+      name = "sntp-0.2.4.tgz";
+      sha1 = "fb885f18b0f3aad189f824862536bceeec750900";
+    };
+    deps = {
+      "hoek-0.9.1" = self.by-version."hoek"."0.9.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  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 = "http://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz";
+      name = "sntp-1.0.9.tgz";
+      sha1 = "6541184cc90aeea6c6e7b35e2659082443c66198";
+    };
+    deps = {
+      "hoek-2.13.0" = self.by-version."hoek"."2.13.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."source-map"."~0.1.33" =
+    self.by-version."source-map"."0.1.43";
+  by-version."source-map"."0.1.43" = self.buildNodePackage {
+    name = "source-map-0.1.43";
+    version = "0.1.43";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz";
+      name = "source-map-0.1.43.tgz";
+      sha1 = "c24bc146ca517c1471f5dacbe2571b2b7f9e3346";
+    };
+    deps = {
+      "amdefine-0.1.0" = self.by-version."amdefine"."0.1.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."source-map"."~0.1.7" =
+    self.by-version."source-map"."0.1.43";
+  by-spec."sprintf-js"."~1.0.2" =
+    self.by-version."sprintf-js"."1.0.2";
+  by-version."sprintf-js"."1.0.2" = self.buildNodePackage {
+    name = "sprintf-js-1.0.2";
+    version = "1.0.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.2.tgz";
+      name = "sprintf-js-1.0.2.tgz";
+      sha1 = "11e4d84ff32144e35b0bf3a66f8587f38d8f9978";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."sqlite3"."^3.0.2" =
+    self.by-version."sqlite3"."3.0.8";
+  by-version."sqlite3"."3.0.8" = self.buildNodePackage {
+    name = "sqlite3-3.0.8";
+    version = "3.0.8";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/sqlite3/-/sqlite3-3.0.8.tgz";
+      name = "sqlite3-3.0.8.tgz";
+      sha1 = "662d6507426ba2af0cdaf894a1766c8099c0e435";
+    };
+    deps = {
+      "nan-1.8.4" = self.by-version."nan"."1.8.4";
+      "node-pre-gyp-0.6.7" = self.by-version."node-pre-gyp"."0.6.7";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "sqlite3" = self.by-version."sqlite3"."3.0.8";
+  by-spec."stack-trace"."0.0.x" =
+    self.by-version."stack-trace"."0.0.9";
+  by-version."stack-trace"."0.0.9" = self.buildNodePackage {
+    name = "stack-trace-0.0.9";
+    version = "0.0.9";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz";
+      name = "stack-trace-0.0.9.tgz";
+      sha1 = "a8f6eaeca90674c333e7c43953f275b451510695";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    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 = "http://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.4";
+  by-version."stringstream"."0.0.4" = self.buildNodePackage {
+    name = "stringstream-0.0.4";
+    version = "0.0.4";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz";
+      name = "stringstream-0.0.4.tgz";
+      sha1 = "0f0e3423f942960b5692ac324a57dd093bc41a92";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."strip-ansi"."^0.3.0" =
+    self.by-version."strip-ansi"."0.3.0";
+  by-version."strip-ansi"."0.3.0" = self.buildNodePackage {
+    name = "strip-ansi-0.3.0";
+    version = "0.3.0";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz";
+      name = "strip-ansi-0.3.0.tgz";
+      sha1 = "25f48ea22ca79187f3174a4db8759347bb126220";
+    };
+    deps = {
+      "ansi-regex-0.2.1" = self.by-version."ansi-regex"."0.2.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."strip-ansi"."^2.0.1" =
+    self.by-version."strip-ansi"."2.0.1";
+  by-version."strip-ansi"."2.0.1" = self.buildNodePackage {
+    name = "strip-ansi-2.0.1";
+    version = "2.0.1";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz";
+      name = "strip-ansi-2.0.1.tgz";
+      sha1 = "df62c1aa94ed2f114e1d0f21fd1d50482b79a60e";
+    };
+    deps = {
+      "ansi-regex-1.1.1" = self.by-version."ansi-regex"."1.1.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."strip-json-comments"."0.1.x" =
+    self.by-version."strip-json-comments"."0.1.3";
+  by-version."strip-json-comments"."0.1.3" = self.buildNodePackage {
+    name = "strip-json-comments-0.1.3";
+    version = "0.1.3";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz";
+      name = "strip-json-comments-0.1.3.tgz";
+      sha1 = "164c64e370a8a3cc00c9e01b539e569823f0ee54";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."superagent"."0.18.0" =
+    self.by-version."superagent"."0.18.0";
+  by-version."superagent"."0.18.0" = self.buildNodePackage {
+    name = "superagent-0.18.0";
+    version = "0.18.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/superagent/-/superagent-0.18.0.tgz";
+      name = "superagent-0.18.0.tgz";
+      sha1 = "9d4375a3ae2c4fbd55fd20d5b12a2470d2fc8f62";
+    };
+    deps = {
+      "qs-0.6.6" = self.by-version."qs"."0.6.6";
+      "formidable-1.0.14" = self.by-version."formidable"."1.0.14";
+      "mime-1.2.5" = self.by-version."mime"."1.2.5";
+      "component-emitter-1.1.2" = self.by-version."component-emitter"."1.1.2";
+      "methods-0.0.1" = self.by-version."methods"."0.0.1";
+      "cookiejar-1.3.2" = self.by-version."cookiejar"."1.3.2";
+      "debug-0.7.4" = self.by-version."debug"."0.7.4";
+      "reduce-component-1.0.1" = self.by-version."reduce-component"."1.0.1";
+      "extend-1.2.1" = self.by-version."extend"."1.2.1";
+      "form-data-0.1.2" = self.by-version."form-data"."0.1.2";
+      "readable-stream-1.0.27-1" = self.by-version."readable-stream"."1.0.27-1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."supertest"."^0.13.0" =
+    self.by-version."supertest"."0.13.0";
+  by-version."supertest"."0.13.0" = self.buildNodePackage {
+    name = "supertest-0.13.0";
+    version = "0.13.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/supertest/-/supertest-0.13.0.tgz";
+      name = "supertest-0.13.0.tgz";
+      sha1 = "4892bafd9beaa9bbcc95fd5a9f04949aef1ce06f";
+    };
+    deps = {
+      "superagent-0.18.0" = self.by-version."superagent"."0.18.0";
+      "methods-1.0.0" = self.by-version."methods"."1.0.0";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "supertest" = self.by-version."supertest"."0.13.0";
+  by-spec."supports-color"."^0.2.0" =
+    self.by-version."supports-color"."0.2.0";
+  by-version."supports-color"."0.2.0" = self.buildNodePackage {
+    name = "supports-color-0.2.0";
+    version = "0.2.0";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz";
+      name = "supports-color-0.2.0.tgz";
+      sha1 = "d92de2694eb3f67323973d7ae3d8b55b4c22190a";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."supports-color"."^1.3.0" =
+    self.by-version."supports-color"."1.3.1";
+  by-version."supports-color"."1.3.1" = self.buildNodePackage {
+    name = "supports-color-1.3.1";
+    version = "1.3.1";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/supports-color/-/supports-color-1.3.1.tgz";
+      name = "supports-color-1.3.1.tgz";
+      sha1 = "15758df09d8ff3b4acc307539fabe27095e1042d";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."supports-color"."~1.2.0" =
+    self.by-version."supports-color"."1.2.1";
+  by-version."supports-color"."1.2.1" = self.buildNodePackage {
+    name = "supports-color-1.2.1";
+    version = "1.2.1";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/supports-color/-/supports-color-1.2.1.tgz";
+      name = "supports-color-1.2.1.tgz";
+      sha1 = "12ee21507086cd98c1058d9ec0f4ac476b7af3b2";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."tar"."~0.1.17" =
+    self.by-version."tar"."0.1.20";
+  by-version."tar"."0.1.20" = self.buildNodePackage {
+    name = "tar-0.1.20";
+    version = "0.1.20";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/tar/-/tar-0.1.20.tgz";
+      name = "tar-0.1.20.tgz";
+      sha1 = "42940bae5b5f22c74483699126f9f3f27449cb13";
+    };
+    deps = {
+      "block-stream-0.0.7" = self.by-version."block-stream"."0.0.7";
+      "fstream-0.1.31" = self.by-version."fstream"."0.1.31";
+      "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."tar"."~2.1.0" =
+    self.by-version."tar"."2.1.1";
+  by-version."tar"."2.1.1" = self.buildNodePackage {
+    name = "tar-2.1.1";
+    version = "2.1.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/tar/-/tar-2.1.1.tgz";
+      name = "tar-2.1.1.tgz";
+      sha1 = "ac0649e135fa4546e430c7698514e1da2e8a7cc4";
+    };
+    deps = {
+      "block-stream-0.0.7" = self.by-version."block-stream"."0.0.7";
+      "fstream-1.0.6" = self.by-version."fstream"."1.0.6";
+      "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."tar-pack"."~2.0.0" =
+    self.by-version."tar-pack"."2.0.0";
+  by-version."tar-pack"."2.0.0" = self.buildNodePackage {
+    name = "tar-pack-2.0.0";
+    version = "2.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/tar-pack/-/tar-pack-2.0.0.tgz";
+      name = "tar-pack-2.0.0.tgz";
+      sha1 = "c2c401c02dd366138645e917b3a6baa256a9dcab";
+    };
+    deps = {
+      "uid-number-0.0.3" = self.by-version."uid-number"."0.0.3";
+      "once-1.1.1" = self.by-version."once"."1.1.1";
+      "debug-0.7.4" = self.by-version."debug"."0.7.4";
+      "rimraf-2.2.8" = self.by-version."rimraf"."2.2.8";
+      "fstream-0.1.31" = self.by-version."fstream"."0.1.31";
+      "tar-0.1.20" = self.by-version."tar"."0.1.20";
+      "fstream-ignore-0.0.7" = self.by-version."fstream-ignore"."0.0.7";
+      "readable-stream-1.0.33" = self.by-version."readable-stream"."1.0.33";
+    };
+    optionalDependencies = {
+      "graceful-fs-1.2.3" = self.by-version."graceful-fs"."1.2.3";
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."tildify"."~1.0.0" =
+    self.by-version."tildify"."1.0.0";
+  by-version."tildify"."1.0.0" = self.buildNodePackage {
+    name = "tildify-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/tildify/-/tildify-1.0.0.tgz";
+      name = "tildify-1.0.0.tgz";
+      sha1 = "2a021db5e8fbde0a8f8b4df37adaa8fb1d39d7dd";
+    };
+    deps = {
+      "user-home-1.1.1" = self.by-version."user-home"."1.1.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."tinycolor"."0.x" =
+    self.by-version."tinycolor"."0.0.1";
+  by-version."tinycolor"."0.0.1" = self.buildNodePackage {
+    name = "tinycolor-0.0.1";
+    version = "0.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz";
+      name = "tinycolor-0.0.1.tgz";
+      sha1 = "320b5a52d83abb5978d81a3e887d4aefb15a6164";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."tough-cookie".">=0.12.0" =
+    self.by-version."tough-cookie"."1.1.0";
+  by-version."tough-cookie"."1.1.0" = self.buildNodePackage {
+    name = "tough-cookie-1.1.0";
+    version = "1.1.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/tough-cookie/-/tough-cookie-1.1.0.tgz";
+      name = "tough-cookie-1.1.0.tgz";
+      sha1 = "126d2490e66ae5286b6863debd4a341076915954";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."tunnel-agent"."~0.4.0" =
+    self.by-version."tunnel-agent"."0.4.0";
+  by-version."tunnel-agent"."0.4.0" = self.buildNodePackage {
+    name = "tunnel-agent-0.4.0";
+    version = "0.4.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz";
+      name = "tunnel-agent-0.4.0.tgz";
+      sha1 = "b1184e312ffbcf70b3b4c78e8c219de7ebb1c550";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."type-detect"."0.1.1" =
+    self.by-version."type-detect"."0.1.1";
+  by-version."type-detect"."0.1.1" = self.buildNodePackage {
+    name = "type-detect-0.1.1";
+    version = "0.1.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz";
+      name = "type-detect-0.1.1.tgz";
+      sha1 = "0ba5ec2a885640e470ea4e8505971900dac58822";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."type-is"."~1.6.1" =
+    self.by-version."type-is"."1.6.2";
+  by-version."type-is"."1.6.2" = self.buildNodePackage {
+    name = "type-is-1.6.2";
+    version = "1.6.2";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/type-is/-/type-is-1.6.2.tgz";
+      name = "type-is-1.6.2.tgz";
+      sha1 = "694e83e5d110417e681cea278227f264ae406e33";
+    };
+    deps = {
+      "media-typer-0.3.0" = self.by-version."media-typer"."0.3.0";
+      "mime-types-2.0.11" = self.by-version."mime-types"."2.0.11";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."type-is"."~1.6.2" =
+    self.by-version."type-is"."1.6.2";
+  by-spec."uglify-js"."~2.3" =
+    self.by-version."uglify-js"."2.3.6";
+  by-version."uglify-js"."2.3.6" = self.buildNodePackage {
+    name = "uglify-js-2.3.6";
+    version = "2.3.6";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/uglify-js/-/uglify-js-2.3.6.tgz";
+      name = "uglify-js-2.3.6.tgz";
+      sha1 = "fa0984770b428b7a9b2a8058f46355d14fef211a";
+    };
+    deps = {
+      "async-0.2.10" = self.by-version."async"."0.2.10";
+      "source-map-0.1.43" = self.by-version."source-map"."0.1.43";
+      "optimist-0.3.7" = self.by-version."optimist"."0.3.7";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."uid-number"."0.0.3" =
+    self.by-version."uid-number"."0.0.3";
+  by-version."uid-number"."0.0.3" = self.buildNodePackage {
+    name = "uid-number-0.0.3";
+    version = "0.0.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/uid-number/-/uid-number-0.0.3.tgz";
+      name = "uid-number-0.0.3.tgz";
+      sha1 = "cefb0fa138d8d8098da71a40a0d04a8327d6e1cc";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."ultron"."1.0.x" =
+    self.by-version."ultron"."1.0.1";
+  by-version."ultron"."1.0.1" = self.buildNodePackage {
+    name = "ultron-1.0.1";
+    version = "1.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ultron/-/ultron-1.0.1.tgz";
+      name = "ultron-1.0.1.tgz";
+      sha1 = "c9d8d86c9cf2823028eb45629ab725897dd65dc5";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."underscore"."~1.7.0" =
+    self.by-version."underscore"."1.7.0";
+  by-version."underscore"."1.7.0" = self.buildNodePackage {
+    name = "underscore-1.7.0";
+    version = "1.7.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz";
+      name = "underscore-1.7.0.tgz";
+      sha1 = "6bbaf0877500d36be34ecaa584e0db9fef035209";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."underscore.string"."~2.4.0" =
+    self.by-version."underscore.string"."2.4.0";
+  by-version."underscore.string"."2.4.0" = self.buildNodePackage {
+    name = "underscore.string-2.4.0";
+    version = "2.4.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz";
+      name = "underscore.string-2.4.0.tgz";
+      sha1 = "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."user-home"."^1.0.0" =
+    self.by-version."user-home"."1.1.1";
+  by-version."user-home"."1.1.1" = self.buildNodePackage {
+    name = "user-home-1.1.1";
+    version = "1.1.1";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz";
+      name = "user-home-1.1.1.tgz";
+      sha1 = "2b5be23a32b63a7c9deb8d0f28d485724a3df190";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."utf-8-validate"."1.0.x" =
+    self.by-version."utf-8-validate"."1.0.1";
+  by-version."utf-8-validate"."1.0.1" = self.buildNodePackage {
+    name = "utf-8-validate-1.0.1";
+    version = "1.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/utf-8-validate/-/utf-8-validate-1.0.1.tgz";
+      name = "utf-8-validate-1.0.1.tgz";
+      sha1 = "d15eb67e28f6bb93c9401eeb7eac7030a183e8d1";
+    };
+    deps = {
+      "bindings-1.2.1" = self.by-version."bindings"."1.2.1";
+      "nan-1.6.2" = self.by-version."nan"."1.6.2";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."util".">=0.10.3 <1" =
+    self.by-version."util"."0.10.3";
+  by-version."util"."0.10.3" = self.buildNodePackage {
+    name = "util-0.10.3";
+    version = "0.10.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/util/-/util-0.10.3.tgz";
+      name = "util-0.10.3.tgz";
+      sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9";
+    };
+    deps = {
+      "inherits-2.0.1" = self.by-version."inherits"."2.0.1";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."utils-merge"."1.0.0" =
+    self.by-version."utils-merge"."1.0.0";
+  by-version."utils-merge"."1.0.0" = self.buildNodePackage {
+    name = "utils-merge-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz";
+      name = "utils-merge-1.0.0.tgz";
+      sha1 = "0294fb922bb9375153541c4f7096231f287c8af8";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."vary"."~1.0.0" =
+    self.by-version."vary"."1.0.0";
+  by-version."vary"."1.0.0" = self.buildNodePackage {
+    name = "vary-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/vary/-/vary-1.0.0.tgz";
+      name = "vary-1.0.0.tgz";
+      sha1 = "c5e76cec20d3820d8f2a96e7bee38731c34da1e7";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."when"."~3.4.6" =
+    self.by-version."when"."3.4.6";
+  by-version."when"."3.4.6" = self.buildNodePackage {
+    name = "when-3.4.6";
+    version = "3.4.6";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/when/-/when-3.4.6.tgz";
+      name = "when-3.4.6.tgz";
+      sha1 = "8fbcb7cc1439d2c3a68c431f1516e6dcce9ad28c";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."which"."1.0.x" =
+    self.by-version."which"."1.0.9";
+  by-version."which"."1.0.9" = self.buildNodePackage {
+    name = "which-1.0.9";
+    version = "1.0.9";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/which/-/which-1.0.9.tgz";
+      name = "which-1.0.9.tgz";
+      sha1 = "460c1da0f810103d0321a9b633af9e575e64486f";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."winston"."^1.0.0" =
+    self.by-version."winston"."1.0.0";
+  by-version."winston"."1.0.0" = self.buildNodePackage {
+    name = "winston-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/winston/-/winston-1.0.0.tgz";
+      name = "winston-1.0.0.tgz";
+      sha1 = "30e36e0041fc0a864b0029565719e4dc41d026a4";
+    };
+    deps = {
+      "async-0.9.0" = self.by-version."async"."0.9.0";
+      "colors-1.0.3" = self.by-version."colors"."1.0.3";
+      "cycle-1.0.3" = self.by-version."cycle"."1.0.3";
+      "eyes-0.1.8" = self.by-version."eyes"."0.1.8";
+      "isstream-0.1.2" = self.by-version."isstream"."0.1.2";
+      "pkginfo-0.3.0" = self.by-version."pkginfo"."0.3.0";
+      "stack-trace-0.0.9" = self.by-version."stack-trace"."0.0.9";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "winston" = self.by-version."winston"."1.0.0";
+  by-spec."wordwrap"."0.0.x" =
+    self.by-version."wordwrap"."0.0.3";
+  by-version."wordwrap"."0.0.3" = self.buildNodePackage {
+    name = "wordwrap-0.0.3";
+    version = "0.0.3";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz";
+      name = "wordwrap-0.0.3.tgz";
+      sha1 = "a3d5da6cd5c0bc0008d37234bbaf1bed63059107";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."wordwrap".">=0.0.2" =
+    self.by-version."wordwrap"."1.0.0";
+  by-version."wordwrap"."1.0.0" = self.buildNodePackage {
+    name = "wordwrap-1.0.0";
+    version = "1.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz";
+      name = "wordwrap-1.0.0.tgz";
+      sha1 = "27584810891456a4171c8d0226441ade90cbcaeb";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."wordwrap"."~0.0.2" =
+    self.by-version."wordwrap"."0.0.3";
+  by-spec."wrappy"."1" =
+    self.by-version."wrappy"."1.0.1";
+  by-version."wrappy"."1.0.1" = self.buildNodePackage {
+    name = "wrappy-1.0.1";
+    version = "1.0.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz";
+      name = "wrappy-1.0.1.tgz";
+      sha1 = "1e65969965ccbc2db4548c6b84a6f2c5aedd4739";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."ws"."^0.4.32" =
+    self.by-version."ws"."0.4.32";
+  by-version."ws"."0.4.32" = self.buildNodePackage {
+    name = "ws-0.4.32";
+    version = "0.4.32";
+    bin = true;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ws/-/ws-0.4.32.tgz";
+      name = "ws-0.4.32.tgz";
+      sha1 = "787a6154414f3c99ed83c5772153b20feb0cec32";
+    };
+    deps = {
+      "commander-2.1.0" = self.by-version."commander"."2.1.0";
+      "nan-1.0.0" = self.by-version."nan"."1.0.0";
+      "tinycolor-0.0.1" = self.by-version."tinycolor"."0.0.1";
+      "options-0.0.6" = self.by-version."options"."0.0.6";
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  "ws" = self.by-version."ws"."0.4.32";
+  by-spec."ws"."~0.7.1" =
+    self.by-version."ws"."0.7.1";
+  by-version."ws"."0.7.1" = self.buildNodePackage {
+    name = "ws-0.7.1";
+    version = "0.7.1";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/ws/-/ws-0.7.1.tgz";
+      name = "ws-0.7.1.tgz";
+      sha1 = "8f1c7864ca08081be3cd0ac330df0d29c5fcd0da";
+    };
+    deps = {
+      "options-0.0.6" = self.by-version."options"."0.0.6";
+      "ultron-1.0.1" = self.by-version."ultron"."1.0.1";
+    };
+    optionalDependencies = {
+      "bufferutil-1.0.1" = self.by-version."bufferutil"."1.0.1";
+      "utf-8-validate-1.0.1" = self.by-version."utf-8-validate"."1.0.1";
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+  by-spec."xtend"."^4.0.0" =
+    self.by-version."xtend"."4.0.0";
+  by-version."xtend"."4.0.0" = self.buildNodePackage {
+    name = "xtend-4.0.0";
+    version = "4.0.0";
+    bin = false;
+    src = fetchurl {
+      url = "http://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz";
+      name = "xtend-4.0.0.tgz";
+      sha1 = "8bc36ff87aedbe7ce9eaf0bca36b2354a743840f";
+    };
+    deps = {
+    };
+    optionalDependencies = {
+    };
+    peerDependencies = [];
+    os = [ ];
+    cpu = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/roundcube/default.nix b/nixpkgs/pkgs/servers/roundcube/default.nix
new file mode 100644
index 000000000000..c0648f5183d9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/roundcube/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchzip }:
+let
+  version = "1.3.8";
+in
+fetchzip rec {
+  name= "roundcube-${version}";
+
+  url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/roundcubemail-${version}-complete.tar.gz";
+  sha256 = "1lhwr13bglm8rqgamnb480b07wpqhw9bskjj2xxb0x8kdjly29ks";
+
+  extraPostFetch = ''
+    ln -sf /etc/roundcube/config.inc.php $out/config/config.inc.php
+    rm -rf $out/installer
+  '';
+
+  meta = {
+    description = "Open Source Webmail Software";
+    maintainers = with stdenv.lib.maintainers; [ vskilet ];
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/rpcbind/default.nix b/nixpkgs/pkgs/servers/rpcbind/default.nix
new file mode 100644
index 000000000000..fc28f621959b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/rpcbind/default.nix
@@ -0,0 +1,39 @@
+{ fetchgit, stdenv, pkgconfig, libnsl, libtirpc, autoreconfHook
+, useSystemd ? true, systemd }:
+
+stdenv.mkDerivation rec {
+  name = "rpcbind-${version}";
+  version = "1.2.5";
+
+  src = fetchgit {
+    url = "git://git.linux-nfs.org/projects/steved/rpcbind.git";
+    rev = "c0c89b3bf2bdf304a5fe3cab626334e0cdaf1ef2";
+    sha256 = "1k5rr0pia70ifyp877rbjdd82377fp7ii0sqvv18qhashr6489va";
+  };
+
+  patches = [
+    ./sunrpc.patch
+  ];
+
+  buildInputs = [ libnsl libtirpc ]
+             ++ stdenv.lib.optional useSystemd systemd;
+
+  configureFlags = [
+    "--with-systemdsystemunitdir=${if useSystemd then "${placeholder "out"}/etc/systemd/system" else "no"}"
+    "--enable-warmstarts"
+    "--with-rpcuser=rpc"
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  meta = with stdenv.lib; {
+    description = "ONC RPC portmapper";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    homepage = https://linux-nfs.org/;
+    maintainers = with maintainers; [ abbradar ];
+    longDescription = ''
+      Universal addresses to RPC program number mapper.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/servers/rpcbind/sunrpc.patch b/nixpkgs/pkgs/servers/rpcbind/sunrpc.patch
new file mode 100644
index 000000000000..450d33aa1c40
--- /dev/null
+++ b/nixpkgs/pkgs/servers/rpcbind/sunrpc.patch
@@ -0,0 +1,29 @@
+http://projects.archlinux.org/svntogit/packages.git/tree/trunk/rpcbind-sunrpc.patch?h=packages/rpcbind
+
+Lookup "sunrpc" instead of "rpcbind" in /etc/services, since the former is the
+official IANA name.
+
+diff -ru3 rpcbind-0.2.3/src/rpcbind.c rpcbind-0.2.3.new/src/rpcbind.c
+--- rpcbind-0.2.3/src/rpcbind.c	2015-04-27 17:07:43.000000000 +0300
++++ rpcbind-0.2.3.new/src/rpcbind.c	2015-05-18 16:29:24.938380694 +0300
+@@ -132,7 +132,7 @@
+ char *udp_uaddr;	/* Universal UDP address */
+ char *tcp_uaddr;	/* Universal TCP address */
+ #endif
+-static char servname[] = "rpcbind";
++static char servname[] = "sunrpc";
+ static char superuser[] = "superuser";
+ 
+ int main __P((int, char *[]));
+diff -ru3 rpcbind-0.2.3/src/rpcinfo.c rpcbind-0.2.3.new/src/rpcinfo.c
+--- rpcbind-0.2.3/src/rpcinfo.c	2015-04-27 17:07:43.000000000 +0300
++++ rpcbind-0.2.3.new/src/rpcinfo.c	2015-05-18 16:30:14.197025336 +0300
+@@ -1842,7 +1842,7 @@
+ 
+   /* Get the address of the rpcbind */
+   memset (&hints, 0, sizeof hints);
+-  if ((getaddrinfo (host, "rpcbind", &hints, &res) != 0) &&
++  if ((getaddrinfo (host, "sunrpc", &hints, &res) != 0) &&
+       (getaddrinfo (host, "portmapper",&hints, &res) != 0))
+     {
+       rpc_createerr.cf_stat = RPC_N2AXLATEFAILURE;
diff --git a/nixpkgs/pkgs/servers/rt/default.nix b/nixpkgs/pkgs/servers/rt/default.nix
new file mode 100644
index 000000000000..4653946270cd
--- /dev/null
+++ b/nixpkgs/pkgs/servers/rt/default.nix
@@ -0,0 +1,102 @@
+{ stdenv, buildEnv, fetchurl, perl, perlPackages, makeWrapper }:
+
+# This package isn't extremely useful as it is, but is getting close.
+# After running:
+#
+#   nix-build . -A rt
+#
+# I created a config file named myconfig.pm with:
+#
+#   use utf8;
+#   Set($rtname, '127.0.0.1');
+#   # These dirs need to be pre-created:
+#   Set($MasonSessionDir, '/home/grahamc/foo/sessiondir/');
+#   Set($MasonDataDir, '/home/grahamc/foo/localstate/');
+#   Set($WebPort, 8080);
+#
+#   Set($DatabaseType, "SQLite");
+#   Set( $DatabaseName, '/home/grahamc/projects/foo/my.db' );
+#
+#   1;
+#
+# and ran
+#
+#  RT_SITE_CONFIG=$(pwd)/myconfig.pm ./result/bin/rt-setup-database --action init
+#
+# Then:
+#
+#   RT_SITE_CONFIG=$(pwd)/myconfig.pm ./result/bin/rt-server
+#
+# Make sure to check out result/etc/RT_Config.pm
+#
+# Good luck.
+stdenv.mkDerivation rec {
+  name = "rt-${version}";
+
+  version = "4.4.3";
+
+  src = fetchurl {
+    url = "https://download.bestpractical.com/pub/rt/release/${name}.tar.gz";
+    sha256 = "1cddgp3j7qm7r3v5j1l1hl6i6laxa64f4nalaarj094hmhyb92kk";
+  };
+
+  patches = [ ./override-generated.patch ];
+
+  buildInputs = [
+    makeWrapper
+    perl
+    (buildEnv {
+      name = "rt-perl-deps";
+      paths = (with perlPackages; [
+        ApacheSession BusinessHours CGIEmulatePSGI CGIPSGI
+        CSSMinifierXP CSSSquish ConvertColor CryptEksblowfish
+        CryptSSLeay DBDSQLite DBDmysql DBIxSearchBuilder DataGUID
+        DataICal DataPagePageset DateExtract DateManip
+        DateTimeFormatNatural DevelGlobalDestruction EmailAddress
+        EmailAddressList FCGI FCGIProcManager FileShareDir FileWhich
+        GD GDGraph GnuPGInterface GraphViz HTMLFormatTextWithLinks
+        HTMLFormatTextWithLinksAndTables HTMLMason
+        HTMLMasonPSGIHandler HTMLQuoted HTMLRewriteAttributes
+        HTMLScrubber IPCRun IPCRun3 JSON JavaScriptMinifierXS LWP
+        LWPProtocolHttps LocaleMaketextFuzzy LocaleMaketextLexicon
+        LogDispatch MIMETools MIMETypes MailTools ModuleRefresh
+        ModuleVersionsReport MozillaCA NetCIDR NetIP PerlIOeol Plack
+        RegexpCommon RegexpCommonnetCIDR RegexpIPv6 RoleBasic
+        ScopeUpper Starlet SymbolGlobalName TermReadKey
+        TextPasswordPronounceable TextQuoted TextTemplate
+        TextWikiFormat TextWrapper TimeParseDate TreeSimple
+        UNIVERSALrequire XMLRSS
+      ]);
+    })
+  ];
+
+  preConfigure = ''
+    configureFlags="$configureFlags --with-web-user=$UID"
+    configureFlags="$configureFlags --with-web-group=$(id -g)"
+    configureFlags="$configureFlags --with-rt-group=$(id -g)"
+    configureFlags="$configureFlags --with-bin-owner=$UID"
+    configureFlags="$configureFlags --with-libs-owner=$UID"
+    configureFlags="$configureFlags --with-libs-group=$(id -g)"
+  '';
+  configureFlags = [
+    "--enable-graphviz"
+    "--enable-gd"
+    "--enable-gpg"
+    "--with-db-type=SQLite"
+  ];
+
+  buildPhase = ''
+    make testdeps | grep -i missing | sort
+  '';
+
+  preFixup = ''
+    for i in $(find $out/bin -type f; find $out/sbin -type f); do
+      wrapProgram $i \
+          --prefix PERL5LIB ':' $PERL5LIB
+    done
+  '';
+
+  meta = {
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/rt/override-generated.patch b/nixpkgs/pkgs/servers/rt/override-generated.patch
new file mode 100644
index 000000000000..5727a9b50c58
--- /dev/null
+++ b/nixpkgs/pkgs/servers/rt/override-generated.patch
@@ -0,0 +1,21 @@
+commit 7aec1e9478ef679227e759ab9537df7584c6a852
+Author: Shea Levy <shea@shealevy.com>
+Date:   Fri Jan 15 09:09:18 2016 -0500
+
+    Make it possible to override hard-coded paths
+
+diff --git a/lib/RT/Generated.pm.in b/lib/RT/Generated.pm.in
+index 9dcb80b..99b034b 100644
+--- a/lib/RT/Generated.pm.in
++++ b/lib/RT/Generated.pm.in
+@@ -82,4 +82,10 @@ $MasonDataDir = '@MASON_DATA_PATH@';
+ $MasonSessionDir = '@MASON_SESSION_PATH@';
+ 
+ 
++if ( my $override_file = $ENV{RT_PATHS_OVERRIDE} )
++{
++    require "$override_file" || die "Couldn't load paths override file: $@";
++}
++
++
+ 1;
diff --git a/nixpkgs/pkgs/servers/sabnzbd/default.nix b/nixpkgs/pkgs/servers/sabnzbd/default.nix
new file mode 100644
index 000000000000..afa6321fb5d3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sabnzbd/default.nix
@@ -0,0 +1,36 @@
+{stdenv, fetchFromGitHub, python2, par2cmdline, unzip, unrar, p7zip, makeWrapper}:
+
+let
+  pythonEnv = python2.withPackages(ps: with ps; [ cryptography cheetah yenc sabyenc ]);
+  path = stdenv.lib.makeBinPath [ par2cmdline unrar unzip p7zip ];
+in stdenv.mkDerivation rec {
+  version = "2.3.3";
+  pname = "sabnzbd";
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "0za4xjc4x44f7i30r86bbza3zppid333ifwzp5h526w3zak1lal8";
+  };
+
+  buildInputs = [ pythonEnv makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out
+    cp -R * $out/
+    mkdir $out/bin
+    echo "${pythonEnv}/bin/python $out/SABnzbd.py \$*" > $out/bin/sabnzbd
+    chmod +x $out/bin/sabnzbd
+    wrapProgram $out/bin/sabnzbd --set PATH ${path}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Usenet NZB downloader, par2 repairer and auto extracting server";
+    homepage = https://sabnzbd.org;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ fridh ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/samba/3.x.nix b/nixpkgs/pkgs/servers/samba/3.x.nix
new file mode 100644
index 000000000000..1f432c189880
--- /dev/null
+++ b/nixpkgs/pkgs/servers/samba/3.x.nix
@@ -0,0 +1,99 @@
+{ stdenv, fetchurl, readline, pam ? null, openldap ? null
+, popt, iniparser, libunwind
+, fam ? null , acl ? null, cups ? null
+, useKerberos ? false, kerberos ? null, winbind ? true
+
+# Eg. smbclient and smbspool require a smb.conf file.
+# If you set configDir to "" an empty configuration file
+# $out/lib/smb.conf is is created for you.
+#
+# configDir defaults to "/etc/samba" so that smbpassword picks up
+# the location of its passwd db files from the system configuration file
+# /etc/samba/smb.conf. That's why nixos touches /etc/samba/smb.conf even if you
+# don't enable the samba upstart service.
+, configDir ? "/etc/samba"
+
+}:
+
+assert useKerberos -> kerberos != null;
+
+stdenv.mkDerivation rec {
+  name = "samba-3.6.25";
+
+  src = fetchurl {
+    url = "mirror://samba/pub/samba/stable/${name}.tar.gz";
+    sha256 = "0l9pz2m67vf398q3c2dwn8jwdxsjb20igncf4byhv6yq5dzqlb4g";
+  };
+
+  patches = [(fetchurl {
+    url = "https://download.samba.org/pub/samba/patches/security/"
+        + "samba-3.6.25-security-2015-12-16.patch";
+    sha256 = "00dcjcn577825mfdwdp76jfy5kcrqw3s4d5c41gqdq5gfcdbmqdb";
+  })];
+
+  buildInputs = [ readline pam openldap popt iniparser libunwind fam acl cups ]
+    ++ stdenv.lib.optional useKerberos kerberos;
+
+  enableParallelBuilding = true;
+
+  postPatch =
+    # XXX: Awful hack to allow cross-compilation.
+    '' sed -i source3/configure \
+           -e 's/^as_fn_error .. \("cannot run test program while cross compiling\)/$as_echo \1/g'
+    ''; # "
+
+  preConfigure =
+    '' cd source3
+       export samba_cv_CC_NEGATIVE_ENUM_VALUES=yes
+       export libreplace_cv_HAVE_GETADDRINFO=yes
+       export ac_cv_file__proc_sys_kernel_core_pattern=no # XXX: true on Linux, false elsewhere
+    '';
+
+  configureFlags =
+    stdenv.lib.optionals (pam != null) [ "--with-pam" "--with-pam_smbpass" ]
+    ++ [ "--with-aio-support"
+         "--disable-swat"
+         "--with-configdir=${configDir}"
+         "--with-fhs"
+         "--localstatedir=/var"
+       ]
+    ++ (stdenv.lib.optional winbind "--with-winbind")
+    ++ (stdenv.lib.optional (stdenv.cc.libc != null) "--with-libiconv=${stdenv.cc.libc}");
+
+  # Need to use a DESTDIR because `make install' tries to write in /var and /etc.
+  installFlags = "DESTDIR=$(TMPDIR)/inst";
+
+  stripAllList = [ "bin" "sbin" ];
+
+  postInstall =
+    ''
+      mkdir -p $out
+      mv $TMPDIR/inst/$out/* $out/
+
+      mkdir -p "$out/lib/pkgconfig"
+      cp pkgconfig/*.pc "$out/lib/pkgconfig"
+
+      mkdir -pv $out/lib/cups/backend
+      ln -sv ../../../bin/smbspool $out/lib/cups/backend/smb
+      mkdir -pv $out/etc/openldap/schema
+      cp ../examples/LDAP/samba.schema $out/etc/openldap/schema
+
+      # For nsswitch. Glibc >= 2.1 looks for libnss_<name>.so.2 (see man
+      # nsswitch.conf), so provide that too.
+      cp -v ../nsswitch/libnss_wins.so "$out/lib"
+      cp -v ../nsswitch/libnss_winbind.so "$out/lib"
+      (cd "$out/lib" && ln -s libnss_winbind.so libnss_winbind.so.2)
+      (cd "$out/lib" && ln -s libnss_wins.so libnss_wins.so.2)
+    '' # */
+    + stdenv.lib.optionalString (configDir == "") "touch $out/lib/smb.conf";
+
+  meta = with stdenv.lib; {
+    homepage = https://www.samba.org/;
+    description = "The standard Windows interoperability suite of programs for Linux and Unix";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    knownVulnerabilities = [
+      "Numerous CVEs and no patches from upstream for 3.x since 2014."
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/samba/4.x-no-persistent-install-dynconfig.patch b/nixpkgs/pkgs/servers/samba/4.x-no-persistent-install-dynconfig.patch
new file mode 100644
index 000000000000..7e3652dbe7b7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/samba/4.x-no-persistent-install-dynconfig.patch
@@ -0,0 +1,15 @@
+diff -ru3 samba-4.4.6/dynconfig/wscript samba-4.4.6-new/dynconfig/wscript
+--- samba-4.4.6/dynconfig/wscript	2016-01-26 14:45:46.000000000 +0300
++++ samba-4.4.6-new/dynconfig/wscript	2016-10-15 22:21:18.159705132 +0300
+@@ -416,11 +416,3 @@
+                         public_headers=os_path_relpath(os.path.join(Options.launch_dir, version_header), bld.curdir),
+                         header_path='samba',
+                         cflags=cflags)
+-
+-    # install some extra empty directories
+-    bld.INSTALL_DIRS("", "${CONFIGDIR} ${PRIVATE_DIR} ${LOGFILEBASE}");
+-    bld.INSTALL_DIRS("", "${PRIVATE_DIR} ${PRIVILEGED_SOCKET_DIR}")
+-    bld.INSTALL_DIRS("", "${STATEDIR} ${CACHEDIR}");
+-
+-    # these might be on non persistent storage
+-    bld.INSTALL_DIRS("", "${LOCKDIR} ${PIDDIR} ${SOCKET_DIR}")
diff --git a/nixpkgs/pkgs/servers/samba/4.x-no-persistent-install.patch b/nixpkgs/pkgs/servers/samba/4.x-no-persistent-install.patch
new file mode 100644
index 000000000000..1c360f6b2c77
--- /dev/null
+++ b/nixpkgs/pkgs/servers/samba/4.x-no-persistent-install.patch
@@ -0,0 +1,39 @@
+diff -ru3 samba-4.4.6/ctdb/wscript samba-4.4.6-new/ctdb/wscript
+--- samba-4.4.6/ctdb/wscript	2016-09-22 09:42:48.000000000 +0300
++++ samba-4.4.6-new/ctdb/wscript	2016-10-15 23:31:13.932088237 +0300
+@@ -581,7 +581,7 @@
+     for t in etc_subdirs:
+         files = SUBDIR_MODE('%s/%s' % (configdir, t), trim_path=configdir)
+         for fmode in files:
+-            bld.INSTALL_FILES(bld.env.CTDB_ETCDIR, 'config/%s' % fmode[0],
++            bld.INSTALL_FILES('${EXEC_PREFIX}${CTDB_ETCDIR}', 'config/%s' % fmode[0],
+                               destname=fmode[0], chmod=fmode[1])
+ 
+     bld.SAMBA_GENERATOR('ctdb-functions',
+@@ -601,23 +601,19 @@
+     ]
+ 
+     for t in etc_scripts:
+-        bld.INSTALL_FILES(bld.env.CTDB_ETCDIR, 'config/%s' % t,
++        bld.INSTALL_FILES('${EXEC_PREFIX}${CTDB_ETCDIR}', 'config/%s' % t,
+                           destname=t, chmod=0755)
+ 
+     bld.SAMBA_GENERATOR('ctdb-sudoers',
+                         source='config/ctdb.sudoers',
+                         target='ctdb.sudoers',
+                         rule='sed %s ${SRC} > ${TGT}' % (sed_cmdline))
+-    bld.INSTALL_FILES('${SYSCONFDIR}/sudoers.d', 'ctdb.sudoers',
++    bld.INSTALL_FILES('${EXEC_PREFIX}${SYSCONFDIR}/sudoers.d', 'ctdb.sudoers',
+                       destname='ctdb')
+ 
+-    bld.INSTALL_FILES('${CTDB_ETCDIR}/notify.d', 'config/notify.d.README',
++    bld.INSTALL_FILES('${EXEC_PREFIX}${CTDB_ETCDIR}/notify.d', 'config/notify.d.README',
+                       destname='README')
+ 
+-    bld.install_dir(bld.env.CTDB_LOGDIR)
+-    bld.install_dir(bld.env.CTDB_RUNDIR)
+-    bld.install_dir(bld.env.CTDB_VARDIR)
+-
+     # Unit tests
+     ctdb_unit_tests = [
+         'db_hash_test',
diff --git a/nixpkgs/pkgs/servers/samba/4.x.nix b/nixpkgs/pkgs/servers/samba/4.x.nix
new file mode 100644
index 000000000000..38f13fcd1fa1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/samba/4.x.nix
@@ -0,0 +1,106 @@
+{ lib, stdenv, fetchurl, python, pkgconfig, perl, libxslt, docbook_xsl
+, fetchpatch
+, docbook_xml_dtd_42, readline, talloc
+, popt, iniparser, libbsd, libarchive, libiconv, gettext
+, krb5Full, zlib, openldap, cups, pam, avahi, acl, libaio, fam, libceph, glusterfs
+, gnutls, ncurses, libunwind, systemd
+
+, enableLDAP ? false
+, enablePrinting ? false
+, enableMDNS ? false
+, enableDomainController ? false
+, enableRegedit ? true
+, enableCephFS ? false
+, enableGlusterFS ? false
+, enableAcl ? (!stdenv.isDarwin)
+, enablePam ? (!stdenv.isDarwin)
+}:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  name = "samba-${version}";
+  version = "4.7.10";
+
+  src = fetchurl {
+    url = "mirror://samba/pub/samba/stable/${name}.tar.gz";
+    sha256 = "0w5y6a7kiw5ap7hd84yglzk7cjax6lxlszd0wz1sxnmqx4a6hn9l";
+  };
+
+  outputs = [ "out" "dev" "man" ];
+
+  patches =
+    [ ./4.x-no-persistent-install.patch
+      ./patch-source3__libads__kerberos_keytab.c.patch
+      ./4.x-no-persistent-install-dynconfig.patch
+      (fetchpatch {
+        url = "https://patch-diff.githubusercontent.com/raw/samba-team/samba/pull/107.patch";
+        sha256 = "0r6q34vjj0bdzmcbnrkad9rww58k4krbwicv4gs1g3dj49skpvd6";
+      })
+    ];
+
+  buildInputs =
+    [ python pkgconfig perl libxslt docbook_xsl docbook_xml_dtd_42 /*
+      docbook_xml_dtd_45 */ readline talloc popt iniparser
+      libbsd libarchive zlib fam libiconv gettext libunwind krb5Full
+    ]
+    ++ optionals stdenv.isLinux [ libaio systemd ]
+    ++ optional enableLDAP openldap
+    ++ optional (enablePrinting && stdenv.isLinux) cups
+    ++ optional enableMDNS avahi
+    ++ optional enableDomainController gnutls
+    ++ optional enableRegedit ncurses
+    ++ optional (enableCephFS && stdenv.isLinux) libceph
+    ++ optional (enableGlusterFS && stdenv.isLinux) glusterfs
+    ++ optional enableAcl acl
+    ++ optional enablePam pam;
+
+  postPatch = ''
+    # Removes absolute paths in scripts
+    sed -i 's,/sbin/,,g' ctdb/config/functions
+
+    # Fix the XML Catalog Paths
+    sed -i "s,\(XML_CATALOG_FILES=\"\),\1$XML_CATALOG_FILES ,g" buildtools/wafsamba/wafsamba.py
+  '';
+
+  configureFlags =
+    [ "--with-static-modules=NONE"
+      "--with-shared-modules=ALL"
+      "--with-system-mitkrb5"
+      "--with-system-mitkdc" "${krb5Full}"
+      "--enable-fhs"
+      "--sysconfdir=/etc"
+      "--localstatedir=/var"
+    ]
+    ++ optional (!enableDomainController) "--without-ad-dc"
+    ++ optionals (!enableLDAP) [ "--without-ldap" "--without-ads" ]
+    ++ optional (!enableAcl) "--without-acl-support"
+    ++ optional (!enablePam) "--without-pam";
+
+  # To build in parallel.
+  buildPhase = "python buildtools/bin/waf build -j $NIX_BUILD_CORES";
+
+  # Some libraries don't have /lib/samba in RPATH but need it.
+  # Use find -type f -executable -exec echo {} \; -exec sh -c 'ldd {} | grep "not found"' \;
+  # Looks like a bug in installer scripts.
+  postFixup = ''
+    export SAMBA_LIBS="$(find $out -type f -name \*.so -exec dirname {} \; | sort | uniq)"
+    read -r -d "" SCRIPT << EOF || true
+    [ -z "\$SAMBA_LIBS" ] && exit 1;
+    BIN='{}';
+    OLD_LIBS="\$(patchelf --print-rpath "\$BIN" 2>/dev/null | tr ':' '\n')";
+    ALL_LIBS="\$(echo -e "\$SAMBA_LIBS\n\$OLD_LIBS" | sort | uniq | tr '\n' ':')";
+    patchelf --set-rpath "\$ALL_LIBS" "\$BIN" 2>/dev/null || exit $?;
+    patchelf --shrink-rpath "\$BIN";
+    EOF
+    find $out -type f -name \*.so -exec $SHELL -c "$SCRIPT" \;
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.samba.org/;
+    description = "The standard Windows interoperability suite of programs for Linux and Unix";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ wkennington ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/samba/master.nix b/nixpkgs/pkgs/servers/samba/master.nix
new file mode 100644
index 000000000000..21038a0f2183
--- /dev/null
+++ b/nixpkgs/pkgs/servers/samba/master.nix
@@ -0,0 +1,29 @@
+{ fetchFromGitHub
+, samba4
+, nettle
+} :
+
+  (samba4.overrideAttrs(oldAttrs: rec {
+    name = "samba-unstable-${version}";
+    version = "2018-03-09";
+
+    src = fetchFromGitHub {
+      owner = "samba-team";
+      repo = "samba";
+      rev = "9e954bcbf43d67a18ee55f84cda0b09028f96b92";
+      sha256 = "07j1pwm4kax6pq21gq9gpmp7dhj5afdyvkhgyl3yz334mb41q11g";
+    };
+
+    # Remove unnecessary install flags, same as <4.8 patch
+    postPatch = oldAttrs.postPatch + ''
+      sed -i '423,433d' dynconfig/wscript
+    '';
+
+    patches = [ ./4.x-no-persistent-install.patch ];
+    buildInputs = [ nettle ] ++ oldAttrs.buildInputs;
+    meta.branch = "master";
+  })).override {
+    # samba4.8+ removed the ability to disable LDAP.
+    # Enable for base derivation here:
+    enableLDAP = true;
+  }
diff --git a/nixpkgs/pkgs/servers/samba/patch-source3__libads__kerberos_keytab.c.patch b/nixpkgs/pkgs/servers/samba/patch-source3__libads__kerberos_keytab.c.patch
new file mode 100644
index 000000000000..9f6577c65c14
--- /dev/null
+++ b/nixpkgs/pkgs/servers/samba/patch-source3__libads__kerberos_keytab.c.patch
@@ -0,0 +1,20 @@
+--- old/source3/libads/kerberos_keytab.c	2017-12-23 14:23:53.247467000 +0100
++++ new/source3/libads/kerberos_keytab.c	2017-12-23 18:57:07.135340000 +0100
+@@ -32,8 +32,6 @@
+ 
+ #ifdef HAVE_KRB5
+ 
+-#ifdef HAVE_ADS
+-
+ /* This MAX_NAME_LEN is a constant defined in krb5.h */
+ #ifndef MAX_KEYTAB_NAME_LEN
+ #define MAX_KEYTAB_NAME_LEN 1100
+@@ -85,6 +83,8 @@
+ 	return ret;
+ }
+ 
++#ifdef HAVE_ADS
++
+ /**********************************************************************
+  Adds a single service principal, i.e. 'host' to the system keytab
+ ***********************************************************************/
diff --git a/nixpkgs/pkgs/servers/search/elasticsearch/5.x.nix b/nixpkgs/pkgs/servers/search/elasticsearch/5.x.nix
new file mode 100644
index 000000000000..07ebf97ab2bf
--- /dev/null
+++ b/nixpkgs/pkgs/servers/search/elasticsearch/5.x.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, elk5Version, makeWrapper, jre_headless, utillinux }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  version = elk5Version;
+  name = "elasticsearch-${version}";
+
+  src = fetchurl {
+    url = "https://artifacts.elastic.co/downloads/elasticsearch/${name}.tar.gz";
+    sha256 = "0sm99m4m4mmigj6ll22kyaw7zkp1s2i0mhzx15fzidnybdnlifb4";
+  };
+
+  patches = [ ./es-home-5.x.patch ./es-classpath-5.x.patch ];
+
+  buildInputs = [ makeWrapper jre_headless utillinux ];
+
+  installPhase = ''
+    mkdir -p $out
+    cp -R bin config lib modules plugins $out
+
+    chmod -x $out/bin/*.*
+
+    wrapProgram $out/bin/elasticsearch \
+      --prefix ES_CLASSPATH : "$out/lib/*" \
+      --prefix PATH : "${utillinux}/bin" \
+      --set JAVA_HOME "${jre_headless}" \
+      --set ES_JVM_OPTIONS "$out/config/jvm.options"
+
+    wrapProgram $out/bin/elasticsearch-plugin \
+      --prefix ES_CLASSPATH : "$out/lib/*" \
+      --set JAVA_HOME "${jre_headless}"
+  '';
+
+  meta = {
+    description = "Open Source, Distributed, RESTful Search Engine";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = [
+      maintainers.apeschar
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/search/elasticsearch/default.nix b/nixpkgs/pkgs/servers/search/elasticsearch/default.nix
new file mode 100644
index 000000000000..d22395e0133a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/search/elasticsearch/default.nix
@@ -0,0 +1,72 @@
+{ elk6Version
+, enableUnfree ? true
+, stdenv
+, fetchurl
+, makeWrapper
+, jre_headless
+, utillinux
+, autoPatchelfHook
+, zlib
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation (rec {
+  version = elk6Version;
+  name = "elasticsearch-${optionalString (!enableUnfree) "oss-"}${version}";
+
+  src = fetchurl {
+    url = "https://artifacts.elastic.co/downloads/elasticsearch/${name}.tar.gz";
+    sha256 =
+      if enableUnfree
+      then "096i8xiy7mfwlslym9mkjb2f5vqdcqhk65583526rcybqxc2zkqp"
+      else "0j3q02c4rw8272w07hm64sk5ssmj4gj8s3qigsbrq5pgf8b03fvs";
+  };
+
+  patches = [ ./es-home-6.x.patch ];
+
+  postPatch = ''
+    substituteInPlace bin/elasticsearch-env --replace \
+      "ES_CLASSPATH=\"\$ES_HOME/lib/\*\"" \
+      "ES_CLASSPATH=\"$out/lib/*\""
+
+    substituteInPlace bin/elasticsearch-cli --replace \
+      "ES_CLASSPATH=\"\$ES_CLASSPATH:\$ES_HOME/\$additional_classpath_directory/\*\"" \
+      "ES_CLASSPATH=\"\$ES_CLASSPATH:$out/\$additional_classpath_directory/\*\""
+  '';
+
+  buildInputs = [ makeWrapper jre_headless utillinux ]
+             ++ optional enableUnfree zlib;
+
+  installPhase = ''
+    mkdir -p $out
+    cp -R bin config lib modules plugins $out
+
+    chmod -x $out/bin/*.*
+
+    wrapProgram $out/bin/elasticsearch \
+      --prefix PATH : "${utillinux}/bin/" \
+      --set JAVA_HOME "${jre_headless}"
+
+    wrapProgram $out/bin/elasticsearch-plugin --set JAVA_HOME "${jre_headless}"
+  '';
+
+  passthru = { inherit enableUnfree; };
+
+  meta = {
+    description = "Open Source, Distributed, RESTful Search Engine";
+    license = if enableUnfree then licenses.elastic else licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ apeschar basvandijk ];
+  };
+} // optionalAttrs enableUnfree {
+  dontPatchELF = true;
+  nativeBuildInputs = [ autoPatchelfHook ];
+  runtimeDependencies = [ zlib ];
+  postFixup = ''
+    for exe in $(find $out/modules/x-pack-ml/platform/linux-x86_64/bin -executable -type f); do
+      echo "patching $exe..."
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$exe"
+    done
+  '';
+})
diff --git a/nixpkgs/pkgs/servers/search/elasticsearch/es-classpath-5.x.patch b/nixpkgs/pkgs/servers/search/elasticsearch/es-classpath-5.x.patch
new file mode 100644
index 000000000000..ccdca1e53afc
--- /dev/null
+++ b/nixpkgs/pkgs/servers/search/elasticsearch/es-classpath-5.x.patch
@@ -0,0 +1,43 @@
+diff -rupN a/bin/elasticsearch b/bin/elasticsearch
+--- a/bin/elasticsearch	2017-05-17 10:53:49.444487071 +0200
++++ b/bin/elasticsearch	2017-05-17 10:55:52.755081523 +0200
+@@ -129,12 +129,7 @@ ES_JAVA_OPTS="$(parse_jvm_options "$ES_J
+ # If an include wasn't specified in the environment, then search for one...
+ if [ "x$ES_INCLUDE" = "x" ]; then
+     # Locations (in order) to use when searching for an include file.
+-    for include in /usr/share/elasticsearch/elasticsearch.in.sh \
+-                   /usr/local/share/elasticsearch/elasticsearch.in.sh \
+-                   /opt/elasticsearch/elasticsearch.in.sh \
+-                   ~/.elasticsearch.in.sh \
+-                   "$ES_HOME/bin/elasticsearch.in.sh" \
+-                   "`dirname "$0"`"/elasticsearch.in.sh; do
++    for include in "`dirname "$0"`"/elasticsearch.in.sh; do
+         if [ -r "$include" ]; then
+             . "$include"
+             break
+diff -rupN a/bin/elasticsearch.in.sh b/bin/elasticsearch.in.sh
+--- a/bin/elasticsearch.in.sh	2017-04-28 19:41:47.000000000 +0200
++++ b/bin/elasticsearch.in.sh	2017-05-17 10:56:49.303519788 +0200
+@@ -1,13 +1 @@
+ #!/bin/bash
+-
+-# check in case a user was using this mechanism
+-if [ "x$ES_CLASSPATH" != "x" ]; then
+-    cat >&2 << EOF
+-Error: Don't modify the classpath with ES_CLASSPATH. Best is to add
+-additional elements via the plugin mechanism, or if code must really be
+-added to the main classpath, add jars to lib/ (unsupported).
+-EOF
+-    exit 1
+-fi
+-
+-ES_CLASSPATH="$ES_HOME/lib/*"
+diff -rupN a/bin/elasticsearch-plugin b/bin/elasticsearch-plugin
+--- a/bin/elasticsearch-plugin	2018-04-13 01:21:55.000000000 +0900
++++ b/bin/elasticsearch-plugin	2018-06-28 19:08:54.700969245 +0900
+@@ -88,4 +88,4 @@ if [ -e "$CONF_DIR" ]; then
+   path_props=("${path_props[@]}" -Des.path.conf="$CONF_DIR")
+ fi
+ 
+-exec "$JAVA" $ES_JAVA_OPTS -Delasticsearch "${path_props[@]}" -cp "$ES_HOME/lib/*" org.elasticsearch.plugins.PluginCli "${args[@]}"
++exec "$JAVA" $ES_JAVA_OPTS -Delasticsearch "${path_props[@]}" -cp "$ES_CLASSPATH" org.elasticsearch.plugins.PluginCli "${args[@]}"
diff --git a/nixpkgs/pkgs/servers/search/elasticsearch/es-home-5.x.patch b/nixpkgs/pkgs/servers/search/elasticsearch/es-home-5.x.patch
new file mode 100644
index 000000000000..cee0137312f1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/search/elasticsearch/es-home-5.x.patch
@@ -0,0 +1,31 @@
+diff -rupN a/bin/elasticsearch b/bin/elasticsearch
+--- a/bin/elasticsearch	2017-05-17 10:53:42.214686741 +0200
++++ b/bin/elasticsearch	2017-05-17 10:53:49.444487071 +0200
+@@ -105,7 +105,11 @@ while [ -h "$SCRIPT" ] ; do
+ done
+ 
+ # determine elasticsearch home
+-ES_HOME=`dirname "$SCRIPT"`/..
++
++if [ -z "$ES_HOME" ]; then
++    echo "You must set the ES_HOME var" >&2
++    exit 1
++fi
+ 
+ # make ELASTICSEARCH_HOME absolute
+ ES_HOME=`cd "$ES_HOME"; pwd`
+diff -rupN a/bin/elasticsearch-plugin b/bin/elasticsearch-plugin
+--- a/bin/elasticsearch-plugin	2017-05-17 10:53:42.214686741 +0200
++++ b/bin/elasticsearch-plugin	2017-05-17 10:53:49.445487044 +0200
+@@ -16,7 +16,10 @@ while [ -h "$SCRIPT" ] ; do
+ done
+ 
+ # determine elasticsearch home
+-ES_HOME=`dirname "$SCRIPT"`/..
++if [ -z "$ES_HOME" ]; then
++    echo "You must set the ES_HOME var" >&2
++    exit 1
++fi
+ 
+ # make ELASTICSEARCH_HOME absolute
+ ES_HOME=`cd "$ES_HOME"; pwd`
diff --git a/nixpkgs/pkgs/servers/search/elasticsearch/es-home-6.x.patch b/nixpkgs/pkgs/servers/search/elasticsearch/es-home-6.x.patch
new file mode 100644
index 000000000000..aba8d396a69c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/search/elasticsearch/es-home-6.x.patch
@@ -0,0 +1,26 @@
+diff -Naur a/bin/elasticsearch-env b/bin/elasticsearch-env
+--- a/bin/elasticsearch-env	2017-12-12 13:31:51.000000000 +0100
++++ b/bin/elasticsearch-env	2017-12-18 19:51:12.282809695 +0100
+@@ -19,18 +19,10 @@
+   fi
+ done
+ 
+-# determine Elasticsearch home; to do this, we strip from the path until we find
+-# bin, and then strip bin (there is an assumption here that there is no nested
+-# directory under bin also named bin)
+-ES_HOME=`dirname "$SCRIPT"`
+-
+-# now make ES_HOME absolute
+-ES_HOME=`cd "$ES_HOME"; pwd`
+-
+-while [ "`basename "$ES_HOME"`" != "bin" ]; do
+-  ES_HOME=`dirname "$ES_HOME"`
+-done
+-ES_HOME=`dirname "$ES_HOME"`
++if [ -z "$ES_HOME" ]; then
++    echo "You must set the ES_HOME var" >&2
++    exit 1
++fi
+ 
+ # now set the classpath
+ ES_CLASSPATH="$ES_HOME/lib/*"
diff --git a/nixpkgs/pkgs/servers/search/elasticsearch/plugins.nix b/nixpkgs/pkgs/servers/search/elasticsearch/plugins.nix
new file mode 100644
index 000000000000..4451b0104464
--- /dev/null
+++ b/nixpkgs/pkgs/servers/search/elasticsearch/plugins.nix
@@ -0,0 +1,68 @@
+{ pkgs,  stdenv, fetchurl, unzip, elasticsearch-oss, javaPackages, elk6Version }:
+
+let
+  esPlugin = a@{
+    pluginName,
+    installPhase ? ''
+      mkdir -p $out/config
+      mkdir -p $out/plugins
+      ES_HOME=$out ${elasticsearch-oss}/bin/elasticsearch-plugin install --batch -v file://$src
+    '',
+    ...
+  }:
+    stdenv.mkDerivation (a // {
+      inherit installPhase;
+      unpackPhase = "true";
+      buildInputs = [ unzip ];
+      meta = a.meta // {
+        platforms = elasticsearch-oss.meta.platforms;
+        maintainers = (a.meta.maintainers or []) ++ (with stdenv.lib.maintainers; [ offline ]);
+      };
+    });
+in {
+
+  elasticsearch_analysis_lemmagen = esPlugin rec {
+    name = "elasticsearch-analysis-lemmagen-${version}";
+    pluginName = "elasticsearch-analysis-lemmagen";
+    version = "${elk6Version}";
+    src = fetchurl {
+      url = "https://github.com/vhyza/elasticsearch-analysis-lemmagen/releases/download/v${version}/${name}-plugin.zip";
+      sha256 = "0299ldqwjn1gn44yyjiqjrxvs6mlclhzl1dbn6xlgg1a2lkaal4v";
+    };
+    meta = with stdenv.lib; {
+      homepage = https://github.com/vhyza/elasticsearch-analysis-lemmagen;
+      description = "LemmaGen Analysis plugin provides jLemmaGen lemmatizer as Elasticsearch token filter";
+      license = licenses.asl20;
+    };
+  };
+
+  discovery-ec2 = esPlugin rec {
+    name = "elasticsearch-discovery-ec2-${version}";
+    pluginName = "discovery-ec2";
+    version = "${elk6Version}";
+    src = pkgs.fetchurl {
+      url = "https://artifacts.elastic.co/downloads/elasticsearch-plugins/discovery-ec2/discovery-ec2-${elk6Version}.zip";
+      sha256 = "1mg9knbc4r21kaiqnmkd8nzf2i23w5zxqnxyz484q0l2jf4hlkq1";
+    };
+    meta = with stdenv.lib; {
+      homepage = https://github.com/elastic/elasticsearch/tree/master/plugins/discovery-ec2;
+      description = "The EC2 discovery plugin uses the AWS API for unicast discovery.";
+      license = licenses.asl20;
+    };
+  };
+
+  search_guard = esPlugin rec {
+    name = "elastic-search-guard-${version}";
+    pluginName = "search-guard";
+    version = "${elk6Version}-23.2";
+    src = fetchurl rec {
+      url = "mirror://maven/com/floragunn/search-guard-6/${version}/search-guard-6-${version}.zip";
+      sha256 = "05310wyxzhylxr0dfgzr10pb0pak30ry8r97g49n6iqj8dw3csnb";
+    };
+    meta = with stdenv.lib; {
+      homepage = https://github.com/floragunncom/search-guard;
+      description = "Plugin to fetch data from JDBC sources for indexing into Elasticsearch";
+      license = licenses.asl20;
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/servers/search/groonga/default.nix b/nixpkgs/pkgs/servers/search/groonga/default.nix
new file mode 100644
index 000000000000..fd14a214be50
--- /dev/null
+++ b/nixpkgs/pkgs/servers/search/groonga/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, mecab, kytea, libedit, pkgconfig
+, suggestSupport ? false, zeromq, libevent, msgpack
+, lz4Support  ? false, lz4
+, zlibSupport ? false, zlib
+}:
+
+stdenv.mkDerivation rec {
+
+  name    = "groonga-${version}";
+  version = "8.0.9";
+
+  src = fetchurl {
+    url    = "https://packages.groonga.org/source/groonga/${name}.tar.gz";
+    sha256 = "1fd5smhqchnjv0injj3x0zsqzffw1r4gq625znqljg6chny3cq08";
+  };
+
+  buildInputs = with stdenv.lib;
+     [ pkgconfig mecab kytea libedit ]
+    ++ optional lz4Support lz4
+    ++ optional zlibSupport zlib
+    ++ optionals suggestSupport [ zeromq libevent msgpack ];
+
+  configureFlags = with stdenv.lib;
+       optional zlibSupport "--with-zlib"
+    ++ optional lz4Support  "--with-lz4";
+
+  doInstallCheck    = true;
+  installCheckPhase = "$out/bin/groonga --version";
+
+  meta = with stdenv.lib; {
+    homepage    = http://groonga.org/;
+    description = "An open-source fulltext search engine and column store";
+    license     = licenses.lgpl21;
+    maintainers = [ maintainers.ericsagnes ];
+    platforms   = platforms.linux;
+    longDescription = ''
+      Groonga is an open-source fulltext search engine and column store. 
+      It lets you write high-performance applications that requires fulltext search.
+    '';
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/search/solr/default.nix b/nixpkgs/pkgs/servers/search/solr/default.nix
new file mode 100644
index 000000000000..04e85212f3cd
--- /dev/null
+++ b/nixpkgs/pkgs/servers/search/solr/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "solr-${version}";
+  version = "7.5.0";
+
+  src = fetchurl {
+    url = "mirror://apache/lucene/solr/${version}/solr-${version}.tgz";
+    sha256 = "1g6f58j2pzb73phj4hfri9mj7vmql72by7w3xrbq1pbnqgzxmhpa";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out $out/bin
+
+    cp -r bin/solr bin/post $out/bin/
+    cp -r contrib $out/
+    cp -r dist $out/
+    cp -r example $out/
+    cp -r server $out/
+
+    wrapProgram $out/bin/solr --set JAVA_HOME "${jre}"
+    wrapProgram $out/bin/post --set JAVA_HOME "${jre}"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://lucene.apache.org/solr/;
+    description = "Open source enterprise search platform from the Apache Lucene project";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rickynils maintainers.domenkozar maintainers.aanderse ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/search/sphinxsearch/default.nix b/nixpkgs/pkgs/servers/search/sphinxsearch/default.nix
new file mode 100644
index 000000000000..7ba23f61fedb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/search/sphinxsearch/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig,
+  version ? "2.2.11",
+  mainSrc ? fetchurl {
+    url = "http://sphinxsearch.com/files/sphinx-${version}-release.tar.gz";
+    sha256 = "1aa1mh32y019j8s3sjzn4vwi0xn83dwgl685jnbgh51k16gh6qk6";
+  }
+}:
+
+stdenv.mkDerivation rec {
+  name = "sphinxsearch-${version}";
+  src = mainSrc;
+
+  configureFlags = [
+    "--program-prefix=sphinxsearch-"
+    "--without-mysql"
+    "--enable-id64"
+  ];
+
+  nativeBuildInputs = [
+    pkgconfig
+  ];
+
+  meta = {
+    description = "An open source full text search server";
+    homepage    = http://sphinxsearch.com;
+    license     = stdenv.lib.licenses.gpl2;
+    platforms   = stdenv.lib.platforms.all;
+    maintainers = with stdenv.lib.maintainers; [ ederoyd46 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/serf/default.nix b/nixpkgs/pkgs/servers/serf/default.nix
new file mode 100644
index 000000000000..4c5f71cb37d6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/serf/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "serf-${version}";
+  version = "0.8.1";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/hashicorp/serf";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = "serf";
+    inherit rev;
+    sha256 = "1arakjvhyasrk52vhxas2ghlrby3i3wj59r7sjrkbpln2cdbqnlx";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Tool for service orchestration and management";
+    homepage = https://www.serf.io/;
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ pradeepchhetri ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/serviio/default.nix b/nixpkgs/pkgs/servers/serviio/default.nix
new file mode 100644
index 000000000000..876cc01592e9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/serviio/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "serviio-${version}";
+  version = "1.9";
+
+  src = fetchurl {
+    url = "http://download.serviio.org/releases/${name}-linux.tar.gz";
+    sha256 = "0vi9dwpdrk087gpi0xib0hwpvdmaf9g99nfdfx2r3wmmdzw7wysl";
+  };
+
+  phases = ["unpackPhase" "installPhase"];
+
+  installPhase = ''
+    mkdir -p $out
+    cp -R config legal lib library plugins LICENCE.txt NOTICE.txt README.txt RELEASE_NOTES.txt $out
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://serviio.org;
+    description = "UPnP Media Streaming Server";
+    longDescription = ''
+      Serviio is a free media server. It allows you to stream your media files (music, video or images)
+      to any DLNA-certified renderer device (e.g. a TV set, Bluray player, games console) on your home network.
+    '';
+    license = licenses.unfree;
+    maintainers = [ maintainers.thpham ];
+    platforms = platforms.linux;
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/servers/shairplay/default.nix b/nixpkgs/pkgs/servers/shairplay/default.nix
new file mode 100644
index 000000000000..f9b17b947cf5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/shairplay/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+, avahi, libao }:
+
+stdenv.mkDerivation rec {
+  name = "shairplay-${version}";
+  version = "2016-01-01";
+
+  src = fetchFromGitHub {
+    owner  = "juhovh";
+    repo   = "shairplay";
+    rev    = "ce80e005908f41d0e6fde1c4a21e9cb8ee54007b";
+    sha256 = "10b4bmqgf4rf1wszvj066mc42p90968vqrmyqyrdal4k6f8by1r6";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [ avahi libao ];
+
+  enableParallelBuilding = true;
+
+  # the build will fail without complaining about a reference to /tmp
+  preFixup = stdenv.lib.optionalString stdenv.isLinux ''
+    patchelf \
+      --set-rpath "${stdenv.lib.makeLibraryPath buildInputs}:$out/lib" \
+      $out/bin/shairplay
+  '';
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Apple airplay and raop protocol server";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/shairport-sync/default.nix b/nixpkgs/pkgs/servers/shairport-sync/default.nix
new file mode 100644
index 000000000000..aaeb810eca0b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/shairport-sync/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, openssl, avahi, alsaLib
+, libdaemon, popt, pkgconfig, libconfig, libpulseaudio, soxr }:
+
+stdenv.mkDerivation rec {
+  version = "3.2.2";
+  name = "shairport-sync-${version}";
+
+  src = fetchFromGitHub {
+    sha256 = "1cw6wybnh4sp3llzmam0zpd6fcmr9y6ykrirzygckp2iaglcqbcv";
+    rev = version;
+    repo = "shairport-sync";
+    owner = "mikebrady";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [
+    openssl
+    avahi
+    alsaLib
+    libdaemon
+    popt
+    libconfig
+    libpulseaudio
+    soxr
+  ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-alsa" "--with-pipe" "--with-pa" "--with-stdout"
+    "--with-avahi" "--with-ssl=openssl" "--with-soxr"
+    "--without-configfiles"
+  ];
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Airtunes server and emulator with multi-room capabilities";
+    license = licenses.mit;
+    maintainers =  with maintainers; [ lnl7 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/shellinabox/default.nix b/nixpkgs/pkgs/servers/shellinabox/default.nix
new file mode 100644
index 000000000000..70bf5c32b3d4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/shellinabox/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pam, openssl, openssh, shadow, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "2.20";
+  name = "shellinabox-${version}";
+
+  src = fetchFromGitHub {
+    owner = "shellinabox";
+    repo = "shellinabox";
+    rev = "v${version}";
+    sha256 = "1hmfayh21cks2lyj572944ll0mmgsxbnj981b3hq3nhdg8ywzjfr";
+  };
+
+  patches = [ ./shellinabox-minus.patch ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ pam openssl openssh makeWrapper ];
+
+  # Disable GSSAPIAuthentication errors. Also, paths in certain source files are
+  # hardcoded. Replace the hardcoded paths with correct paths.
+  preConfigure = ''
+    substituteInPlace ./shellinabox/service.c --replace "-oGSSAPIAuthentication=no" ""
+    substituteInPlace ./shellinabox/launcher.c --replace "/usr/games" "${openssh}/bin"
+    substituteInPlace ./shellinabox/service.c --replace "/bin/login" "${shadow}/bin/login"
+    substituteInPlace ./shellinabox/launcher.c --replace "/bin/login" "${shadow}/bin/login"
+    substituteInPlace ./libhttp/ssl.c --replace "/usr/bin" "${openssl.bin}/bin"
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/shellinaboxd \
+      --prefix LD_LIBRARY_PATH : ${openssl.out}/lib
+    mkdir -p $out/lib
+    cp shellinabox/* $out/lib
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/shellinabox/shellinabox;
+    description = "Web based AJAX terminal emulator";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ tomberek lihop ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/shellinabox/shellinabox-minus.patch b/nixpkgs/pkgs/servers/shellinabox/shellinabox-minus.patch
new file mode 100644
index 000000000000..d84bdd2eb161
--- /dev/null
+++ b/nixpkgs/pkgs/servers/shellinabox/shellinabox-minus.patch
@@ -0,0 +1,28 @@
+diff -ru shellinabox-2.14/shellinabox/vt100.jspp shellinabox-2.14.new/shellinabox/vt100.jspp
+--- shellinabox-2.14/shellinabox/vt100.jspp	2012-04-21 21:30:44.000000000 +0400
++++ shellinabox-2.14.new/shellinabox/vt100.jspp	2014-03-27 16:33:31.012344164 +0400
+@@ -2676,6 +2676,7 @@
+       switch (key) {
+       case  33: /* Page Up      */ this.scrollBack();                   return;
+       case  34: /* Page Down    */ this.scrollFore();                   return;
++      case 173: /* _            */ ch = this.applyModifiers(95, event); break;
+       default:                                                          break;
+       }
+     }
+@@ -2738,6 +2739,7 @@
+       case 123: /* F12          */ ch = '\u001B[24~';                   break;
+       case 144: /* Num Lock     */                                      return;
+       case 145: /* Scroll Lock  */                                      return;
++      case 173: /* -            */ ch = this.applyModifiers(45, event); break;
+       case 186: /* ;            */ ch = this.applyModifiers(59, event); break;
+       case 187: /* =            */ ch = this.applyModifiers(61, event); break;
+       case 188: /* ,            */ ch = this.applyModifiers(44, event); break;
+@@ -2882,6 +2884,7 @@
+     case 109: /* - -> _ */ u = 45; s =  95; break;
+     case 111: /* / -> ? */ u = 47; s =  63; break;
+ 
++    case 173: /* - -> _ */ u = 45; s =  95; break;
+     case 186: /* ; -> : */ u = 59; s =  58; break;
+     case 187: /* = -> + */ u = 61; s =  43; break;
+     case 188: /* , -> < */ u = 44; s =  60; break;
+
diff --git a/nixpkgs/pkgs/servers/shishi/default.nix b/nixpkgs/pkgs/servers/shishi/default.nix
new file mode 100644
index 000000000000..6c4e515d4228
--- /dev/null
+++ b/nixpkgs/pkgs/servers/shishi/default.nix
@@ -0,0 +1,81 @@
+{ stdenv, fetchurl, pkgconfig
+, libgcrypt, libgpgerror, libtasn1
+
+# Optional Dependencies
+, pam ? null, libidn ? null, gnutls ? null
+}:
+
+let
+  mkFlag = trueStr: falseStr: cond: name: val: "--"
+    + (if cond then trueStr else falseStr)
+    + name
+    + stdenv.lib.optionalString (val != null && cond != false) "=${val}";
+  mkEnable = mkFlag "enable-" "disable-";
+  mkWith = mkFlag "with-" "without-";
+  mkOther = mkFlag "" "" true;
+
+  shouldUsePkg = pkg: if pkg != null && stdenv.lib.any (stdenv.lib.meta.platformMatch stdenv.hostPlatform) pkg.meta.platforms then pkg else null;
+
+  optPam = shouldUsePkg pam;
+  optLibidn = shouldUsePkg libidn;
+  optGnutls = shouldUsePkg gnutls;
+in
+with stdenv.lib;
+stdenv.mkDerivation rec {
+  name = "shishi-1.0.2";
+
+  src = fetchurl {
+    url = "mirror://gnu/shishi/${name}.tar.gz";
+    sha256 = "032qf72cpjdfffq1yq54gz3ahgqf2ijca4vl31sfabmjzq9q370d";
+  };
+
+  # Fixes support for gcrypt 1.6+
+  patches = [ ./gcrypt-fix.patch ./freebsd-unistd.patch ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libgcrypt libgpgerror libtasn1 optPam optLibidn optGnutls ];
+
+  configureFlags = [
+    (mkOther                      "sysconfdir"    "/etc")
+    (mkOther                      "localstatedir" "/var")
+    (mkEnable true                "libgcrypt"     null)
+    (mkEnable (optPam != null)    "pam"           null)
+    (mkEnable true                "ipv6"          null)
+    (mkWith   (optLibidn != null) "stringprep"    null)
+    (mkEnable (optGnutls != null) "starttls"      null)
+    (mkEnable true                "des"           null)
+    (mkEnable true                "3des"          null)
+    (mkEnable true                "aes"           null)
+    (mkEnable true                "md"            null)
+    (mkEnable false               "null"          null)
+    (mkEnable true                "arcfour"       null)
+  ];
+
+  NIX_CFLAGS_COMPILE
+    = optionalString stdenv.isDarwin "-DBIND_8_COMPAT";
+
+  doCheck = true;
+
+  installFlags = [ "sysconfdir=\${out}/etc" ];
+
+  # Fix *.la files
+  postInstall = ''
+    sed -i $out/lib/libshi{sa,shi}.la \
+  '' + optionalString (optLibidn != null) ''
+      -e 's,\(-lidn\),-L${optLibidn.out}/lib \1,' \
+  '' + optionalString (optGnutls != null) ''
+      -e 's,\(-lgnutls\),-L${optGnutls.out}/lib \1,' \
+  '' + ''
+      -e 's,\(-lgcrypt\),-L${libgcrypt.out}/lib \1,' \
+      -e 's,\(-lgpg-error\),-L${libgpgerror.out}/lib \1,' \
+      -e 's,\(-ltasn1\),-L${libtasn1.out}/lib \1,'
+  '';
+
+  meta = {
+    homepage    = https://www.gnu.org/software/shishi/;
+    description = "An implementation of the Kerberos 5 network security system";
+    license     = licenses.gpl3Plus;
+    maintainers = with maintainers; [ bjg lovek323 wkennington ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/shishi/freebsd-unistd.patch b/nixpkgs/pkgs/servers/shishi/freebsd-unistd.patch
new file mode 100644
index 000000000000..9399e20205b9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/shishi/freebsd-unistd.patch
@@ -0,0 +1,12 @@
+diff --git a/gl/unistd.in.h b/gl/unistd.in.h
+index 2ea9af4..ed58960 100644
+--- a/gl/unistd.in.h
++++ b/gl/unistd.in.h
+@@ -116,6 +116,7 @@
+ # include <getopt.h>
+ #endif
+ 
++#include "config.h"
+ _GL_INLINE_HEADER_BEGIN
+ #ifndef _GL_UNISTD_INLINE
+ # define _GL_UNISTD_INLINE _GL_INLINE
diff --git a/nixpkgs/pkgs/servers/shishi/gcrypt-fix.patch b/nixpkgs/pkgs/servers/shishi/gcrypt-fix.patch
new file mode 100644
index 000000000000..ccc37389401b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/shishi/gcrypt-fix.patch
@@ -0,0 +1,34 @@
+diff --git a/configure b/configure
+index c9a442b..a596bfe 100755
+--- a/configure
++++ b/configure
+@@ -24491,12 +24491,6 @@ else
+ /* end confdefs.h.  */
+ 
+ #include <gcrypt.h>
+-/* GCRY_MODULE_ID_USER was added in 1.4.4 and gc-libgcrypt.c
+-   will fail on startup if we don't have 1.4.4 or later, so
+-   test for it early. */
+-#if !defined GCRY_MODULE_ID_USER
+-error too old libgcrypt
+-#endif
+ 
+ int
+ main ()
+diff --git a/gl/m4/gc.m4 b/gl/m4/gc.m4
+index b352e33..4bab9f4 100644
+--- a/gl/m4/gc.m4
++++ b/gl/m4/gc.m4
+@@ -12,12 +12,6 @@ AC_DEFUN([gl_GC],
+   if test "$libgcrypt" != no; then
+     AC_LIB_HAVE_LINKFLAGS([gcrypt], [gpg-error], [
+ #include <gcrypt.h>
+-/* GCRY_MODULE_ID_USER was added in 1.4.4 and gc-libgcrypt.c
+-   will fail on startup if we don't have 1.4.4 or later, so
+-   test for it early. */
+-#if !defined GCRY_MODULE_ID_USER
+-error too old libgcrypt
+-#endif
+ ])
+   fi
+ ])
diff --git a/nixpkgs/pkgs/servers/sickbeard/default.nix b/nixpkgs/pkgs/servers/sickbeard/default.nix
new file mode 100644
index 000000000000..4d6e181c61d2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sickbeard/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, python2, makeWrapper }:
+
+let
+  pythonEnv = python2.withPackages(ps: with ps; [ cheetah ]);
+in python2.pkgs.buildPythonApplication rec {
+  name = "sickbeard-${version}";
+  version = "2016-03-21";
+
+  src = fetchFromGitHub {
+    owner = "midgetspy";
+    repo = "Sick-Beard";
+    rev = "171a607e41b7347a74cc815f6ecce7968d9acccf";
+    sha256 = "16bn13pvzl8w6nxm36ii724x48z1cnf8y5fl0m5ig1vpqfypk5vq";
+  };
+
+  dontBuild = true;
+  doCheck = false;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ pythonEnv ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -R {autoProcessTV,cherrypy,data,lib,sickbeard,SickBeard.py} $out/
+
+    makeWrapper $out/SickBeard.py $out/bin/sickbeard
+  '';
+
+  meta = with stdenv.lib; {
+    description = "PVR & episode guide that downloads and manages all your TV shows";
+    license     = licenses.gpl3;
+    homepage    = https:/github.com/midgetspy/Sick-Beard;
+    maintainers = with stdenv.lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sickbeard/sickgear.nix b/nixpkgs/pkgs/servers/sickbeard/sickgear.nix
new file mode 100644
index 000000000000..21254f557530
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sickbeard/sickgear.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, python2, makeWrapper }:
+
+let
+  pythonEnv = python2.withPackages(ps: with ps; [ cheetah ]);
+in python2.pkgs.buildPythonApplication rec {
+  name = "sickgear-${version}";
+  version = "0.17.5";
+
+  src = fetchFromGitHub {
+    owner = "SickGear";
+    repo = "SickGear";
+    rev = "release_${version}";
+    sha256 = "1lx060klgxz8gjanfjvya6p6kd8842qbpp1qhhiw49a25r8gyxpk";
+  };
+
+  dontBuild = true;
+  doCheck = false;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ pythonEnv ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -R {autoProcessTV,gui,lib,sickbeard,SickBeard.py} $out/
+
+    makeWrapper $out/SickBeard.py $out/bin/sickgear
+  '';
+
+  meta = with stdenv.lib; {
+    description = "The most reliable stable TV fork of the great Sick-Beard to fully automate TV enjoyment with innovation";
+    license     = licenses.gpl3;
+    homepage    = https:/github.com/SickGear/SickGear;
+    maintainers = with stdenv.lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sickbeard/sickrage.nix b/nixpkgs/pkgs/servers/sickbeard/sickrage.nix
new file mode 100644
index 000000000000..6ee119520b41
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sickbeard/sickrage.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, python2, makeWrapper }:
+
+python2.pkgs.buildPythonApplication rec {
+  name = "sickrage-${version}";
+  version = "v2018.07.21-1";
+
+  src = fetchFromGitHub {
+    owner = "SickRage";
+    repo = "SickRage";
+    rev = "${version}"; 
+    sha256 = "0lzklpsxqrb73inbv8almnhbnb681pmi44gzc8i4sjwmdksiiif9";
+  };
+
+  dontBuild = true;
+  doCheck = false;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python2 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -R {gui,lib,locale,sickbeard,sickrage,SickBeard.py} $out/
+
+    makeWrapper $out/SickBeard.py $out/bin/sickrage
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Automatic Video Library Manager for TV Shows";
+    longDescription = "It watches for new episodes of your favorite shows, and when they are posted it does its magic.";
+    license     = licenses.gpl3;
+    homepage    = https://sickrage.github.io;
+    maintainers = [ "sterfield@gmail.com" ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/silc-server/default.nix b/nixpkgs/pkgs/servers/silc-server/default.nix
new file mode 100644
index 000000000000..fdb1dcbd1cf6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/silc-server/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "silc-server-1.1.18";
+
+  src = fetchurl {
+    url = "http://silcnet.org/download/server/sources/${name}.tar.bz2";
+    sha256 = "0nr0hrwr4kbi611qazmrify7a27nzxb5n7d97f5i9cw3avxlw38s";
+  };
+
+  meta = {
+    homepage = http://silcnet.org/;
+    description = "Secure Internet Live Conferencing server";
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/simplehttp2server/default.nix b/nixpkgs/pkgs/servers/simplehttp2server/default.nix
new file mode 100644
index 000000000000..083a224d1558
--- /dev/null
+++ b/nixpkgs/pkgs/servers/simplehttp2server/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "simplehttp2server-${version}";
+  version = "3.1.3";
+
+  goPackagePath = "github.com/GoogleChromeLabs/simplehttp2server";
+
+  src = fetchFromGitHub {
+     owner = "GoogleChromeLabs";
+     repo = "simplehttp2server";
+     rev = version;
+     sha256 = "113mcfvy1m91wask5039mhr0187nlw325ac32785yl4bb4igi8aw";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+     homepage = https://github.com/GoogleChromeLabs/simplehttp2server;
+     description = "HTTP/2 server for development purposes";
+     license = licenses.asl20;
+     maintainers = with maintainers; [ yrashk ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/simplehttp2server/deps.nix b/nixpkgs/pkgs/servers/simplehttp2server/deps.nix
new file mode 100644
index 000000000000..e6a26bf2506c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/simplehttp2server/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/NYTimes/gziphandler";
+    fetch = {
+      type = "git";
+      url = "https://github.com/NYTimes/gziphandler";
+      rev = "289a3b81f5aedc99f8d6eb0f67827c142f1310d8";
+      sha256 = "1r9ly9wdqjcc4nwv71mfldf1f5cjm4r34vvkdm5wabmdqqqwkbyx";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/sip/freeswitch/default.nix b/nixpkgs/pkgs/servers/sip/freeswitch/default.nix
new file mode 100644
index 000000000000..ab4147230a92
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sip/freeswitch/default.nix
@@ -0,0 +1,39 @@
+{ fetchurl, stdenv, ncurses, curl, pkgconfig, gnutls, readline
+, openssl, perl, sqlite, libjpeg, speex, pcre
+, ldns, libedit, yasm, which, lua, libopus, libsndfile
+
+, SystemConfiguration
+}:
+
+stdenv.mkDerivation rec {
+  name = "freeswitch-1.6.20";
+
+  src = fetchurl {
+    url = "https://files.freeswitch.org/freeswitch-releases/${name}.tar.bz2";
+    sha256 = "0hqz68abs5x5vzf1mndcvdi35nrhmnklzdrnrk8dyvzvz67hp2ah";
+  };
+  postPatch = ''
+    patchShebangs     libs/libvpx/build/make/rtcd.pl
+    substituteInPlace libs/libvpx/build/make/configure.sh \
+      --replace AS=\''${AS} AS=yasm
+  '';
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    openssl ncurses curl gnutls readline perl libjpeg
+    sqlite pcre speex ldns libedit yasm which lua libopus
+    libsndfile
+  ] ++ stdenv.lib.optionals stdenv.isDarwin [ SystemConfiguration ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    description = "Cross-Platform Scalable FREE Multi-Protocol Soft Switch";
+    homepage = https://freeswitch.org/;
+    license = stdenv.lib.licenses.mpl11;
+    maintainers = with stdenv.lib.maintainers; [ ];
+    platforms = with stdenv.lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sip/sipwitch/default.nix b/nixpkgs/pkgs/servers/sip/sipwitch/default.nix
new file mode 100644
index 000000000000..1252153b79ac
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sip/sipwitch/default.nix
@@ -0,0 +1,27 @@
+{ fetchurl, stdenv, pkgconfig, ucommon, libosip, libexosip, gnutls, zlib }:
+
+stdenv.mkDerivation rec {
+  name = "sipwitch-1.9.15";
+
+  src = fetchurl {
+    url = "mirror://gnu/sipwitch/${name}.tar.gz";
+    sha256 = "2a7aa86a653f6810b3cd9cce6c37b3f70e937e7d14b09fd5c2a70d70588a9482";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ ucommon libosip libexosip gnutls zlib ];
+
+  preConfigure = ''
+    export configureFlags="--sysconfdir=$out/etc"
+  '';
+
+  doCheck = true;
+
+  meta = {
+    description = "Secure peer-to-peer VoIP server that uses the SIP protocol";
+    homepage = https://www.gnu.org/software/sipwitch/;
+    license = stdenv.lib.licenses.gpl3Plus;
+    maintainers = with stdenv.lib.maintainers; [ ];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sks/adapt-to-nixos.patch b/nixpkgs/pkgs/servers/sks/adapt-to-nixos.patch
new file mode 100644
index 000000000000..b4403e8c7bc7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sks/adapt-to-nixos.patch
@@ -0,0 +1,27 @@
+--- a/version.ml	2018-09-08 15:56:18.919154257 +0200
++++ b/version.ml	2018-09-08 15:56:07.544028575 +0200
+@@ -24,16 +24,6 @@
+ 
+ let run () =
+   let bdb_version = Bdb.version () in
+-  let dbstats_dir =
+-    let split = Str.regexp_string "." in
+-    let major_minor_string major minor =
+-      sprintf "Further details about the BDB environment can be seen by \
+-	  executing\ndb%s.%s_stat -x in the KDB and Ptree directories\n" major minor
+-    in
+-    match Str.split split bdb_version with
+-    | major :: minor :: _ -> major_minor_string major minor
+-    | [] | _ :: []        -> major_minor_string "X"   "Y"
+-  in
+   printf "SKS version %s%s\n"
+     Common.version Common.version_suffix;
+ 	
+@@ -44,5 +34,6 @@
+          requirement for recon of SKS %s\n"
+       Common.compatible_version_string;
+ 	
+-  printf "%s" dbstats_dir
++  printf "Further details about the BDB environment can be seen by executing\n\
++    db_stat -x in the KDB and PTree directories\n"
+ 
diff --git a/nixpkgs/pkgs/servers/sks/default.nix b/nixpkgs/pkgs/servers/sks/default.nix
new file mode 100644
index 000000000000..deeeabda7451
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sks/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchFromBitbucket, ocaml, zlib, db, perl, camlp4 }:
+
+stdenv.mkDerivation rec {
+  name = "sks-${version}";
+  version = "1.1.6";
+
+  src = fetchFromBitbucket {
+    owner = "skskeyserver";
+    repo = "sks-keyserver";
+    rev = "${version}";
+    sha256 = "00q5ma5rvl10rkc6cdw8d69bddgrmvy0ckqj3hbisy65l4idj2zm";
+  };
+
+  # pkgs.db provides db_stat, not db$major.$minor_stat
+  patches = [ ./adapt-to-nixos.patch ];
+
+  outputs = [ "out" "webSamples" ];
+
+  buildInputs = [ ocaml zlib db perl camlp4 ];
+
+  makeFlags = [ "PREFIX=$(out)" "MANDIR=$(out)/share/man" ];
+  preConfigure = ''
+    cp Makefile.local.unused Makefile.local
+    sed -i \
+      -e "s:^LIBDB=.*$:LIBDB=-ldb:g" \
+      Makefile.local
+  '';
+
+  preBuild = "make dep";
+
+  doCheck = true;
+  checkPhase = "./sks unit_test";
+
+  # Copy the web examples for the NixOS module
+  postInstall = "cp -R sampleWeb $webSamples";
+
+  meta = with stdenv.lib; {
+    description = "An easily deployable & decentralized OpenPGP keyserver";
+    longDescription = ''
+      SKS is an OpenPGP keyserver whose goal is to provide easy to deploy,
+      decentralized, and highly reliable synchronization. That means that a key
+      submitted to one SKS server will quickly be distributed to all key
+      servers, and even wildly out-of-date servers, or servers that experience
+      spotty connectivity, can fully synchronize with rest of the system.
+    '';
+    inherit (src.meta) homepage;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos fpletz ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/skydns/default.nix b/nixpkgs/pkgs/servers/skydns/default.nix
new file mode 100644
index 000000000000..82d79785b11c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/skydns/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "skydns-${version}";
+  version = "2.5.3a";
+  rev = "${version}";
+  
+  goPackagePath = "github.com/skynetservices/skydns";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "skynetservices";
+    repo = "skydns";
+    sha256 = "0i1iaif79cwnwm7pc8nxfa261cgl4zhm3p2a5a3smhy1ibgccpq7";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = {
+    license = stdenv.lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/skydns/deps.nix b/nixpkgs/pkgs/servers/skydns/deps.nix
new file mode 100644
index 000000000000..a4f4eb120458
--- /dev/null
+++ b/nixpkgs/pkgs/servers/skydns/deps.nix
@@ -0,0 +1,128 @@
+[
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "59b73b37c1e45995477aae817e4a653c89a858db";
+      sha256 = "1dx22jvhvj34ivpr7gw01fncg9yyx35mbpal4mpgnqka7ajmgjsa";
+    };
+  }
+  {
+    goPackagePath = "github.com/coreos/go-systemd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/go-systemd";
+      rev = "a606a1e936df81b70d85448221c7b1c6d8a74ef1";
+      sha256 = "0fhan564swp982dnzzspb6jzfdl453489c0qavh65g3shy5x8x28";
+    };
+  }
+  {
+    goPackagePath = "github.com/rcrowley/go-metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rcrowley/go-metrics";
+      rev = "1ce93efbc8f9c568886b2ef85ce305b2217b3de3";
+      sha256 = "06gg72krlmd0z3zdq6s716blrga95pyj8dc2f2psfbknbkyrkfqa";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "fa8ad6fec33561be4280a8f0514318c79d7f6cb6";
+      sha256 = "11a7v1fjzhhwsl128znjcf5v7v6129xjgkdpym2lial4lac1dhm9";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "40456948a47496dc22168e6af39297a2f8fbf38c";
+      sha256 = "15700w18pifng0l2isa6v25y91r5rb7yfgljqw2g2gqrvac6sr5l";
+    };
+  }
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "b965b613227fddccbfffe13eae360ed3fa822f8d";
+      sha256 = "1p8zsj4r0g61q922khfxpwxhdma2dx4xad1m5qx43mfn28kxngqk";
+    };
+  }
+  {
+    goPackagePath = "github.com/coreos/go-etcd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/go-etcd";
+      rev = "9847b93751a5fbaf227b893d172cee0104ac6427";
+      sha256 = "1ihq01ayqzxvn6hca5j00vl189vi5lm78f0fy2wpk5mrm3xi01l4";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "fc2b8d3a73c4867e51861bbdd5ae3c1f0869dd6a";
+      sha256 = "0ajg41h6402big484drvm72wvid1af2sffw0qkzbmpy04lq68ahj";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "6dbab8106ed3ed77359ac85d9cf08e30290df864";
+      sha256 = "1i3g5h2ncdb8b67742kfpid7d0a1jas1pyicglbglwngfmzhpkna";
+    };
+  }
+  {
+    goPackagePath = "github.com/stathat/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stathat/go";
+      rev = "91dfa3a59c5b233fef9a346a1460f6e2bc889d93";
+      sha256 = "105ql5v8r4hqcsq0ag7asdxqg9n7rvf83y1q1dj2nfjyn4manv6r";
+    };
+  }
+  {
+    goPackagePath = "github.com/ugorji/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ugorji/go";
+      rev = "03e33114d4d60a1f37150325e15f51b0fa6fc4f6";
+      sha256 = "01kdzgx23cgb4k867m1pvsw14hhdr9jf2frqy6i4j4221055m57v";
+    };
+  }
+  {
+    goPackagePath = "github.com/miekg/dns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/miekg/dns";
+      rev = "7e024ce8ce18b21b475ac6baf8fa3c42536bf2fa";
+      sha256 = "0hlwb52lnnj3c6papjk9i5w5cjdw6r7c891v4xksnfvk1f9cy9kl";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "c91d8eefde16bd047416409eb56353ea84a186e4";
+      sha256 = "0pj3gzw9b58l72w0rkpn03ayssglmqfmyxghhfad6mh0b49dvj3r";
+    };
+  }
+  {
+    goPackagePath = "bitbucket.org/ww/goautoneg";
+    fetch = {
+      type = "hg";
+      url = "bitbucket.org/ww/goautoneg";
+      rev = "75cd24fc2f2c2a2088577d12123ddee5f54e0675";
+      sha256 = "19khhn5xhqv1yp7d6k987gh5w5rhrjnp4p0c6fyrd8z6lzz5h9qi";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/slimserver/default.nix b/nixpkgs/pkgs/servers/slimserver/default.nix
new file mode 100644
index 000000000000..fe14f0f33c81
--- /dev/null
+++ b/nixpkgs/pkgs/servers/slimserver/default.nix
@@ -0,0 +1,104 @@
+{ stdenv, fetchurl, fetchpatch, makeWrapper
+, perl, perlPackages, flac, faad2, sox, lame, monkeysAudio, wavpack }:
+
+perlPackages.buildPerlPackage rec {
+  name = "slimserver-${version}";
+  version = "7.9.1";
+
+  src = fetchurl {
+    url = "https://github.com/Logitech/slimserver/archive/${version}.tar.gz";
+    sha256 = "0szp5zkmx2b5lncsijf97asjnl73fyijkbgbwkl1i7p8qnqrb4mp";
+  };
+
+  buildInputs = [
+    makeWrapper
+    perl
+    perlPackages.AnyEvent
+    perlPackages.AudioScan
+    perlPackages.CarpClan
+    perlPackages.CGI
+    perlPackages.ClassXSAccessor
+    perlPackages.DataDump
+    perlPackages.DataURIEncode
+    perlPackages.DBDSQLite
+    perlPackages.DBI
+    perlPackages.DBIxClass
+    perlPackages.DigestSHA1
+    perlPackages.EV
+    perlPackages.ExporterLite
+    perlPackages.FileBOM
+    perlPackages.FileCopyRecursive
+    perlPackages.FileNext
+    perlPackages.FileReadBackwards
+    perlPackages.FileSlurp
+    perlPackages.FileWhich
+    perlPackages.HTMLParser
+    perlPackages.HTTPCookies
+    perlPackages.HTTPDaemon
+    perlPackages.HTTPMessage
+    perlPackages.ImageScale
+    perlPackages.IOSocketSSL
+    perlPackages.IOString
+    perlPackages.JSONXSVersionOneAndTwo
+    perlPackages.LogLog4perl
+    perlPackages.LWP
+    perlPackages.NetHTTP
+    perlPackages.ProcBackground
+    perlPackages.SubName
+    perlPackages.TemplateToolkit
+    perlPackages.TextUnidecode
+    perlPackages.TieCacheLRU
+    perlPackages.TieCacheLRUExpires
+    perlPackages.TieRegexpHash
+    perlPackages.TimeDate
+    perlPackages.URI
+    perlPackages.URIFind
+    perlPackages.UUIDTiny
+    perlPackages.XMLParser
+    perlPackages.XMLSimple
+    perlPackages.YAMLLibYAML
+  ];
+
+
+  prePatch = ''
+    mkdir CPAN_used
+    # slimserver doesn't work with current DBIx/SQL versions, use bundled copies
+    mv CPAN/DBIx CPAN/SQL CPAN_used
+    rm -rf CPAN
+    rm -rf Bin
+    touch Makefile.PL
+
+    # relax audio scan version constraints
+    substituteInPlace lib/Audio/Scan.pm --replace "0.93" "1.01"
+    substituteInPlace modules.conf --replace "Audio::Scan 0.93 0.95" "Audio::Scan 0.93"
+    '';
+
+  preConfigurePhase = "";
+
+  buildPhase = ''
+    mv lib tmp
+    mkdir -p lib/perl5/site_perl
+    mv CPAN_used/* lib/perl5/site_perl
+    cp -rf tmp/* lib/perl5/site_perl
+  '';
+
+  doCheck = false;
+
+  installPhase = ''
+    cp -r . $out
+    wrapProgram $out/slimserver.pl \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ lame flac faad2 sox monkeysAudio wavpack ]}"
+  '';
+
+  outputs = [ "out" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/Logitech/slimserver;
+    description = "Server for Logitech Squeezebox players. This server is also called Logitech Media Server";
+    # the firmware is not under a free license!
+    # https://github.com/Logitech/slimserver/blob/public/7.9/License.txt
+    license = licenses.unfree;
+    maintainers = [ maintainers.phile314 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/smcroute/default.nix b/nixpkgs/pkgs/servers/smcroute/default.nix
new file mode 100644
index 000000000000..8111991cd38a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/smcroute/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, libcap }:
+
+stdenv.mkDerivation rec {
+  name = "smcroute-${version}";
+  version = "2.4.3";
+
+  src = fetchFromGitHub {
+    owner = "troglobit";
+    repo = "smcroute";
+    rev = version;
+    sha256 = "1bdz3dic12lwl3rfczd9bxpgjbpw2g7yap2zddz6dvgkqvyjjf1h";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ libcap ];
+
+  configureFlags = [
+    "--localstatedir=/var"
+    "--with-systemd=\$(out)/lib/systemd/system"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Static multicast routing daemon";
+    homepage = http://troglobit.com/smcroute.html;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ fpletz ];
+    platforms = with platforms; (linux ++ freebsd ++ netbsd ++ openbsd);
+  };
+}
diff --git a/nixpkgs/pkgs/servers/softether/4.18.nix b/nixpkgs/pkgs/servers/softether/4.18.nix
new file mode 100644
index 000000000000..5b0d15136f89
--- /dev/null
+++ b/nixpkgs/pkgs/servers/softether/4.18.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchurl
+, openssl, readline, ncurses, zlib
+, dataDir ? "/var/lib/softether" }:
+
+let
+  os = if stdenv.isLinux then "1"
+       else if stdenv.isFreeBSD then "2"
+       else if stdenv.isSunOS then "3"
+       else if stdenv.isDarwin then "4"
+       else if stdenv.isOpenBSD then "5"
+       else "";
+  cpuBits = if stdenv.is64bit then "2" else "1";
+
+in
+
+stdenv.mkDerivation rec {
+  name = "softether-${version}";
+  version = "4.18";
+  build = "9570";
+  compiledDate = "2015.07.26";
+
+  src = fetchurl {
+    url = "http://www.softether-download.com/files/softether/v${version}-${build}-rtm-${compiledDate}-tree/Source_Code/softether-src-v${version}-${build}-rtm.tar.gz";
+    sha256 = "585d61e524d3cad90806cbeb52ebe54b5144359e6c44676e8e7fb5683ffd4574";
+  };
+
+  buildInputs = [ openssl readline ncurses zlib ];
+
+  preConfigure = ''
+      echo "${os}
+      ${cpuBits}
+      " | ./configure
+      rm configure
+  '';
+
+  buildPhase = ''
+      mkdir -p $out/bin
+      sed -i \
+          -e "/INSTALL_BINDIR=/s|/usr/bin|/bin|g" \
+          -e "/_DIR=/s|/usr|${dataDir}|g" \
+          -e "s|\$(INSTALL|$out/\$(INSTALL|g" \
+          -e "/echo/s|echo $out/|echo |g" \
+          Makefile
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An Open-Source Free Cross-platform Multi-protocol VPN Program";
+    homepage = https://www.softether.org/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.rick68 ];
+    platforms = filter (p: p != "aarch64-linux") platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/softether/4.20.nix b/nixpkgs/pkgs/servers/softether/4.20.nix
new file mode 100644
index 000000000000..91dd0d0411f8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/softether/4.20.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchurl
+, openssl, readline, ncurses, zlib
+, dataDir ? "/var/lib/softether" }:
+
+let
+  os = if stdenv.isLinux then "1"
+       else if stdenv.isFreeBSD then "2"
+       else if stdenv.isSunOS then "3"
+       else if stdenv.isDarwin then "4"
+       else if stdenv.isOpenBSD then "5"
+       else "";
+  cpuBits = if stdenv.is64bit then "2" else "1";
+
+in
+
+stdenv.mkDerivation rec {
+  name = "softether-${version}";
+  version = "4.20";
+  build = "9608";
+  compiledDate = "2016.04.17";
+
+  src = fetchurl {
+    url = "http://www.softether-download.com/files/softether/v${version}-${build}-rtm-${compiledDate}-tree/Source_Code/softether-src-v${version}-${build}-rtm.tar.gz";
+    sha256 = "e559644e34ec6feba43d99f4083f77f9b082dd0574d0bb1e416a65f32ccbc51e";
+  };
+
+  buildInputs = [ openssl readline ncurses zlib ];
+
+  preConfigure = ''
+      echo "${os}
+      ${cpuBits}
+      " | ./configure
+      rm configure
+  '';
+
+  buildPhase = ''
+      mkdir -p $out/bin
+      sed -i \
+          -e "/INSTALL_BINDIR=/s|/usr/bin|/bin|g" \
+          -e "/_DIR=/s|/usr|${dataDir}|g" \
+          -e "s|\$(INSTALL|$out/\$(INSTALL|g" \
+          -e "/echo/s|echo $out/|echo |g" \
+          Makefile
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An Open-Source Free Cross-platform Multi-protocol VPN Program";
+    homepage = https://www.softether.org/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.rick68 ];
+    platforms = filter (p: p != "aarch64-linux") platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/softether/4.25.nix b/nixpkgs/pkgs/servers/softether/4.25.nix
new file mode 100644
index 000000000000..04053174f4e4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/softether/4.25.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchurl
+, openssl, readline, ncurses, zlib
+, dataDir ? "/var/lib/softether" }:
+
+let
+  os = if stdenv.isLinux then "1"
+       else if stdenv.isFreeBSD then "2"
+       else if stdenv.isSunOS then "3"
+       else if stdenv.isDarwin then "4"
+       else if stdenv.isOpenBSD then "5"
+       else "";
+  cpuBits = if stdenv.is64bit then "2" else "1";
+
+in
+
+stdenv.mkDerivation rec {
+  name = "softether-${version}";
+  version = "4.25";
+  build = "9656";
+  compiledDate = "2018.01.15";
+
+  src = fetchurl {
+    url = "http://www.softether-download.com/files/softether/v${version}-${build}-rtm-${compiledDate}-tree/Source_Code/softether-src-v${version}-${build}-rtm.tar.gz";
+    sha256 = "1y1m8lf0xfh7m70d15wj2jjf5a5qhi3j49ciwqmsscsqvb1xwimr";
+  };
+
+  buildInputs = [ openssl readline ncurses zlib ];
+
+  preConfigure = ''
+      echo "${os}
+      ${cpuBits}
+      " | ./configure
+      rm configure
+  '';
+
+  buildPhase = ''
+      mkdir -p $out/bin
+      sed -i \
+          -e "/INSTALL_BINDIR=/s|/usr/bin|/bin|g" \
+          -e "/_DIR=/s|/usr|${dataDir}|g" \
+          -e "s|\$(INSTALL|$out/\$(INSTALL|g" \
+          -e "/echo/s|echo $out/|echo |g" \
+          Makefile
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An Open-Source Free Cross-platform Multi-protocol VPN Program";
+    homepage = https://www.softether.org/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.rick68 ];
+    platforms = filter (p: p != "aarch64-linux") platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sonarr/default.nix b/nixpkgs/pkgs/servers/sonarr/default.nix
new file mode 100644
index 000000000000..1b4bad093c49
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sonarr/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, mono, libmediainfo, sqlite, curl, makeWrapper, ... }:
+
+stdenv.mkDerivation rec {
+  name = "sonarr-${version}";
+  version = "2.0.0.5252";
+
+  src = fetchurl {
+    url = "https://download.sonarr.tv/v2/master/mono/NzbDrone.master.${version}.mono.tar.gz";
+    sha256 = "0rs6sw2yjnhv3v3qbnalz445cilppw91zxxkj93dbp5vdlinw3fp";
+  };
+
+  buildInputs = [
+    makeWrapper
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r * $out/bin/
+
+    makeWrapper "${mono}/bin/mono" $out/bin/NzbDrone \
+      --add-flags "$out/bin/NzbDrone.exe" \
+      --prefix LD_LIBRARY_PATH : ${stdenv.lib.makeLibraryPath [
+          curl sqlite libmediainfo ]}
+  '';
+
+  meta = {
+    description = "Smart PVR for newsgroup and bittorrent users";
+    homepage = https://sonarr.tv/;
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = [ stdenv.lib.maintainers.fadenb ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/cockroachdb/default.nix b/nixpkgs/pkgs/servers/sql/cockroachdb/default.nix
new file mode 100644
index 000000000000..c1c70955d1ff
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/cockroachdb/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, buildGoPackage, fetchurl
+, cmake, xz, which, autoconf
+, ncurses6, libedit, libunwind
+}:
+
+let
+  darwinDeps = [ libunwind libedit ];
+  linuxDeps  = [ ncurses6 ];
+
+  buildInputs = if stdenv.isDarwin then darwinDeps else linuxDeps;
+  nativeBuildInputs = [ cmake xz which autoconf ];
+
+in
+buildGoPackage rec {
+  name = "cockroach-${version}";
+  version = "2.1.3";
+
+  goPackagePath = "github.com/cockroachdb/cockroach";
+
+  src = fetchurl {
+    url = "https://binaries.cockroachdb.com/cockroach-v${version}.src.tgz";
+    sha256 = "0glk2qg4dq7gzkr6wjamxksjn668zsny8mmd0jph4w7166hm3n0n";
+  };
+
+  inherit nativeBuildInputs buildInputs;
+
+  buildPhase = ''
+    runHook preBuild
+    cd $NIX_BUILD_TOP/go/src/${goPackagePath}
+    patchShebangs .
+    make buildoss
+    cd src/${goPackagePath}
+    for asset in man autocomplete; do
+      ./cockroachoss gen $asset
+    done
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D cockroachoss $bin/bin/cockroach
+    install -D cockroach.bash $bin/share/bash-completion/completions/cockroach.bash
+
+    mkdir -p $man/share/man
+    cp -r man $man/share/man
+
+    runHook postInstall
+  '';
+
+  # Unfortunately we have to keep an empty reference to $out, because it seems
+  # buildGoPackages only nukes references to the go compiler under $bin, effectively
+  # making all binary output under $bin mandatory. Ideally, we would just use
+  # $out and $man and remove $bin since there's no point in an empty path. :(
+  outputs = [ "bin" "man" "out" ];
+
+  meta = with stdenv.lib; {
+    homepage    = https://www.cockroachlabs.com;
+    description = "A scalable, survivable, strongly-consistent SQL database";
+    license     = licenses.asl20;
+    platforms   = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" ];
+    maintainers = with maintainers; [ rushmorem thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/mariadb/clang-isfinite.patch b/nixpkgs/pkgs/servers/sql/mariadb/clang-isfinite.patch
new file mode 100644
index 000000000000..8da527d57847
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/mariadb/clang-isfinite.patch
@@ -0,0 +1,17 @@
+diff --git a/include/my_global.h b/include/my_global.h
+index cb31ae2..2866f87 100644
+--- a/include/my_global.h
++++ b/include/my_global.h
+@@ -803,12 +803,6 @@ inline unsigned long long my_double2ulonglong(double d)
+ #endif
+ 
+ #ifndef isfinite
+-#ifdef HAVE_FINITE
+-#define isfinite(x) finite(x)
+-#else
+-#define finite(x) (1.0 / fabs(x) > 0.0)
+-#endif /* HAVE_FINITE */
+-#elif (__cplusplus >= 201103L)
+ #include <cmath>
+ static inline bool isfinite(double x) { return std::isfinite(x); }
+ #endif /* isfinite */
diff --git a/nixpkgs/pkgs/servers/sql/mariadb/cmake-includedir.patch b/nixpkgs/pkgs/servers/sql/mariadb/cmake-includedir.patch
new file mode 100644
index 000000000000..0c4fe7d321e2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/mariadb/cmake-includedir.patch
@@ -0,0 +1,11 @@
+--- a/include/CMakeLists.txt	2017-12-25 05:59:07.204144374 +0100
++++ b/include/CMakeLists.txt	2017-12-25 05:59:26.339552817 +0100
+@@ -94,7 +94,7 @@
+ ENDIF()
+ 
+ MACRO(INSTALL_COMPAT_HEADER file footer)
+-  INSTALL(CODE "FILE(WRITE \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${INSTALL_INCLUDEDIR}/${file}
++  INSTALL(CODE "FILE(WRITE ${INSTALL_INCLUDEDIR}/${file}
+ \"/* Do not edit this file directly, it was auto-generated by cmake */
+ 
+ #warning This file should not be included by clients, include only <mysql.h>
diff --git a/nixpkgs/pkgs/servers/sql/mariadb/default.nix b/nixpkgs/pkgs/servers/sql/mariadb/default.nix
new file mode 100644
index 000000000000..6415fc95437e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/mariadb/default.nix
@@ -0,0 +1,271 @@
+{ stdenv, fetchurl, fetchFromGitHub, cmake, pkgconfig, ncurses, zlib, xz, lzo, lz4, bzip2, snappy
+, libiconv, openssl, pcre, boost, judy, bison, libxml2
+, libaio, libevent, jemalloc, cracklib, systemd, numactl, perl
+, fixDarwinDylibNames, cctools, CoreServices
+, asio, buildEnv, check, scons
+}:
+
+with stdenv.lib;
+
+let # in mariadb # spans the whole file
+
+mariadb = everything // {
+  inherit client; # libmysqlclient.so in .out, necessary headers in .dev and utils in .bin
+  server = everything; # a full single-output build, including everything in `client` again
+  inherit connector-c; # libmysqlclient.so
+  inherit galera;
+};
+
+galeraLibs = buildEnv {
+  name = "galera-lib-inputs-united";
+  paths = [ openssl.out boost check ];
+};
+
+common = rec { # attributes common to both builds
+  version = "10.2.17";
+
+  src = fetchurl {
+    urls = [
+      "https://downloads.mariadb.org/f/mariadb-${version}/source/mariadb-${version}.tar.gz"
+      "https://downloads.mariadb.com/MariaDB/mariadb-${version}/source/mariadb-${version}.tar.gz"
+    ];
+    sha256 = "09xy6mgnz22mz8zgqlnddn8nzgs9xlz8lai4a7aa8x78in7hgcz7";
+    name   = "mariadb-${version}.tar.gz";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  buildInputs = [
+    ncurses openssl zlib pcre jemalloc libiconv
+  ] ++ stdenv.lib.optionals stdenv.isLinux [ libaio systemd ]
+    ++ stdenv.lib.optionals stdenv.isDarwin [ perl fixDarwinDylibNames cctools CoreServices ];
+
+  prePatch = ''
+    sed -i 's,[^"]*/var/log,/var/log,g' storage/mroonga/vendor/groonga/CMakeLists.txt
+  '';
+
+  patches = [ ./cmake-includedir.patch ./include-dirs-path.patch ]
+    ++ stdenv.lib.optional stdenv.cc.isClang ./clang-isfinite.patch;
+
+  cmakeFlags = [
+    "-DBUILD_CONFIG=mysql_release"
+    "-DMANUFACTURER=NixOS.org"
+    "-DDEFAULT_CHARSET=utf8"
+    "-DDEFAULT_COLLATION=utf8_general_ci"
+    "-DSECURITY_HARDENED=ON"
+
+    "-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock"
+    "-DINSTALL_MYSQLSHAREDIR=share/mysql"
+
+    "-DWITH_ZLIB=system"
+    "-DWITH_SSL=system"
+    "-DWITH_PCRE=system"
+
+    # On Darwin without sandbox, CMake will find the system java and attempt to build with java support, but
+    # then it will fail during the actual build. Let's just disable the flag explicitly until someone decides
+    # to pass in java explicitly. This should have no effect on Linux.
+    "-DCONNECT_WITH_JDBC=OFF"
+
+    # Same as above. Somehow on Darwin CMake decides that we support GSS even though we aren't provding the
+    # library through Nix, and then breaks later on. This should have no effect on Linux.
+    "-DPLUGIN_AUTH_GSSAPI=NO"
+    "-DPLUGIN_AUTH_GSSAPI_CLIENT=NO"
+  ]
+    ++ optional stdenv.isDarwin "-DCURSES_LIBRARY=${ncurses.out}/lib/libncurses.dylib"
+    ++ optional stdenv.hostPlatform.isMusl "-DWITHOUT_TOKUDB=1" # mariadb docs say disable this for musl
+    ;
+
+  preConfigure = ''
+    cmakeFlags="$cmakeFlags -DINSTALL_INCLUDEDIR=''${!outputDev}/include/mysql"
+  '';
+
+  postInstall = ''
+    rm "$out"/lib/*.a
+    find "''${!outputBin}/bin" -name '*test*' -delete
+  '';
+
+  passthru.mysqlVersion = "5.7";
+
+  meta = with stdenv.lib; {
+    description = "An enhanced, drop-in replacement for MySQL";
+    homepage    = https://mariadb.org/;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ thoughtpolice wkennington ];
+    platforms   = platforms.all;
+  };
+};
+
+client = stdenv.mkDerivation (common // {
+  name = "mariadb-client-${common.version}";
+
+  outputs = [ "bin" "dev" "out" ];
+
+  propagatedBuildInputs = [ openssl zlib ]; # required from mariadb.pc
+
+  cmakeFlags = common.cmakeFlags ++ [
+    "-DWITHOUT_SERVER=ON"
+  ];
+
+  preConfigure = common.preConfigure + ''
+    cmakeFlags="$cmakeFlags \
+      -DINSTALL_BINDIR=$bin/bin \
+      -DINSTALL_SCRIPTDIR=$bin/bin \
+      -DINSTALL_SUPPORTFILESDIR=$bin/share/mysql \
+      -DINSTALL_DOCDIR=$bin/share/doc/mysql \
+      -DINSTALL_DOCREADMEDIR=$bin/share/doc/mysql \
+      "
+  '';
+
+  # prevent cycle; it needs to reference $dev
+  postInstall = common.postInstall + ''
+    moveToOutput bin/mysql_config "$dev"
+    moveToOutput bin/mariadb_config "$dev"
+  '';
+
+  enableParallelBuilding = true; # the client should be OK
+});
+
+everything = stdenv.mkDerivation (common // {
+  name = "mariadb-${common.version}";
+
+  nativeBuildInputs = common.nativeBuildInputs ++ [ bison ];
+
+  buildInputs = common.buildInputs ++ [
+    xz lzo lz4 bzip2 snappy
+    libxml2 boost judy libevent cracklib
+  ] ++ optional (stdenv.isLinux && !stdenv.isAarch32) numactl;
+
+  cmakeFlags = common.cmakeFlags ++ [
+    "-DMYSQL_DATADIR=/var/lib/mysql"
+    "-DINSTALL_SYSCONFDIR=etc/mysql"
+    "-DINSTALL_INFODIR=share/mysql/docs"
+    "-DINSTALL_MANDIR=share/man"
+    "-DINSTALL_PLUGINDIR=lib/mysql/plugin"
+    "-DINSTALL_SCRIPTDIR=bin"
+    "-DINSTALL_SUPPORTFILESDIR=share/mysql"
+    "-DINSTALL_DOCREADMEDIR=share/doc/mysql"
+    "-DINSTALL_DOCDIR=share/doc/mysql"
+    "-DINSTALL_SHAREDIR=share/mysql"
+    "-DINSTALL_MYSQLTESTDIR=OFF"
+    "-DINSTALL_SQLBENCHDIR=OFF"
+
+    "-DENABLED_LOCAL_INFILE=ON"
+    "-DWITH_READLINE=ON"
+    "-DWITH_EXTRA_CHARSETS=complex"
+    "-DWITH_EMBEDDED_SERVER=ON"
+    "-DWITH_ARCHIVE_STORAGE_ENGINE=1"
+    "-DWITH_BLACKHOLE_STORAGE_ENGINE=1"
+    "-DWITH_INNOBASE_STORAGE_ENGINE=1"
+    "-DWITH_PARTITION_STORAGE_ENGINE=1"
+    "-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1"
+    "-DWITHOUT_FEDERATED_STORAGE_ENGINE=1"
+    "-DWITH_WSREP=ON"
+    "-DWITH_INNODB_DISALLOW_WRITES=ON"
+  ] ++ stdenv.lib.optionals stdenv.isDarwin [
+    "-DWITHOUT_OQGRAPH_STORAGE_ENGINE=1"
+    "-DWITHOUT_TOKUDB=1"
+  ];
+
+  postInstall = common.postInstall + ''
+    rm -r "$out"/data # Don't need testing data
+    rm "$out"/share/man/man1/mysql-test-run.pl.1
+    rm "$out"/bin/rcmysql
+  '' + optionalString (! stdenv.isDarwin) ''
+    sed -i 's/-mariadb/-mysql/' "$out"/bin/galera_new_cluster
+  '';
+
+  CXXFLAGS = optionalString stdenv.isi686 "-fpermissive"
+    + optionalString stdenv.isDarwin " -std=c++11";
+});
+
+connector-c = stdenv.mkDerivation rec {
+  name = "mariadb-connector-c-${version}";
+  version = "2.3.7";
+
+  src = fetchurl {
+    url = "https://downloads.mariadb.org/interstitial/connector-c-${version}/mariadb-connector-c-${version}-src.tar.gz/from/http%3A//nyc2.mirrors.digitalocean.com/mariadb/";
+    sha256 = "13izi35vvxhiwl2dsnqrz75ciisy2s2k30giv7hrm01qlwnmiycl";
+    name   = "mariadb-connector-c-${version}-src.tar.gz";
+  };
+
+  # outputs = [ "dev" "out" ]; FIXME: cmake variables don't allow that < 3.0
+  cmakeFlags = [
+    "-DWITH_EXTERNAL_ZLIB=ON"
+    "-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock"
+  ];
+
+  # The cmake setup-hook uses $out/lib by default, this is not the case here.
+  preConfigure = stdenv.lib.optionalString stdenv.isDarwin ''
+    cmakeFlagsArray+=("-DCMAKE_INSTALL_NAME_DIR=$out/lib/mariadb")
+  '';
+
+  nativeBuildInputs = [ cmake ];
+  propagatedBuildInputs = [ openssl zlib ];
+  buildInputs = [ libiconv ];
+
+  enableParallelBuilding = true;
+
+  postFixup = ''
+    ln -sv mariadb_config $out/bin/mysql_config
+    ln -sv mariadb $out/lib/mysql
+    ln -sv mariadb $out/include/mysql
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Client library that can be used to connect to MySQL or MariaDB";
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ globin ];
+    platforms = platforms.all;
+  };
+};
+
+galera = stdenv.mkDerivation rec {
+  name = "mariadb-galera-${version}";
+  version = "25.3.24";
+
+  src = fetchFromGitHub {
+    owner = "codership";
+    repo = "galera";
+    rev = "release_${version}";
+    sha256 = "1yx3rqy7r4w2l3hnrri30hvsa296v8xidi18p5fdzcpmnhnlwjbi";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ asio boost check openssl scons ];
+
+  postPatch = ''
+    substituteInPlace SConstruct \
+      --replace "boost_library_path = '''" "boost_library_path = '${boost}/lib'"
+  '';
+
+  preConfigure = ''
+    export CPPFLAGS="-I${asio}/include -I${boost.dev}/include -I${check}/include -I${openssl.dev}/include"
+    export LIBPATH="${galeraLibs}/lib"
+  '';
+
+  sconsFlags = "ssl=1 system_asio=1 strict_build_flags=0";
+
+  postInstall = ''
+    # copied with modifications from scripts/packages/freebsd.sh
+    GALERA_LICENSE_DIR="$share/licenses/${name}"
+    install -d $out/{bin,lib/galera,share/doc/galera,$GALERA_LICENSE_DIR}
+    install -m 555 "garb/garbd"                       "$out/bin/garbd"
+    install -m 444 "libgalera_smm.so"                 "$out/lib/galera/libgalera_smm.so"
+    install -m 444 "scripts/packages/README"          "$out/share/doc/galera/"
+    install -m 444 "scripts/packages/README-MySQL"    "$out/share/doc/galera/"
+    install -m 444 "scripts/packages/freebsd/LICENSE" "$out/$GALERA_LICENSE_DIR"
+    install -m 444 "LICENSE"                          "$out/$GALERA_LICENSE_DIR/GPLv2"
+    install -m 444 "asio/LICENSE_1_0.txt"             "$out/$GALERA_LICENSE_DIR/LICENSE.asio"
+    install -m 444 "www.evanjones.ca/LICENSE"         "$out/$GALERA_LICENSE_DIR/LICENSE.crc32c"
+    install -m 444 "chromium/LICENSE"                 "$out/$GALERA_LICENSE_DIR/LICENSE.chromium"
+  '';
+
+  meta = {
+    description = "Galera 3 wsrep provider library";
+    homepage = http://galeracluster.com/;
+    license = licenses.lgpl2;
+    maintainers = with maintainers; [ izorkin ];
+    platforms = platforms.all;
+  };
+};
+in mariadb
diff --git a/nixpkgs/pkgs/servers/sql/mariadb/include-dirs-path.patch b/nixpkgs/pkgs/servers/sql/mariadb/include-dirs-path.patch
new file mode 100644
index 000000000000..8d468cf546a4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/mariadb/include-dirs-path.patch
@@ -0,0 +1,13 @@
+diff --git a/libmariadb/mariadb_config/mariadb_config.c.in b/libmariadb/mariadb_config/mariadb_config.c.in
+index 45d2f4e..e5666db 100644
+--- a/libmariadb/mariadb_config/mariadb_config.c.in
++++ b/libmariadb/mariadb_config/mariadb_config.c.in
+@@ -5,7 +5,7 @@
+ 
+ static char *mariadb_progname;
+ 
+-#define INCLUDE "-I@CMAKE_INSTALL_PREFIX@/@INSTALL_INCLUDEDIR@ -I@CMAKE_INSTALL_PREFIX@/@INSTALL_INCLUDEDIR@/mysql"
++#define INCLUDE "-I@INSTALL_INCLUDEDIR@ -I@INSTALL_INCLUDEDIR@/mysql"
+ #define LIBS    "-L@CMAKE_INSTALL_PREFIX@/@INSTALL_LIBDIR@/ -lmariadb @extra_dynamic_LDFLAGS@"
+ #define LIBS_SYS "@extra_dynamic_LDFLAGS@"
+ #define CFLAGS  INCLUDE
diff --git a/nixpkgs/pkgs/servers/sql/monetdb/default.nix b/nixpkgs/pkgs/servers/sql/monetdb/default.nix
new file mode 100644
index 000000000000..4be2c10b2e4e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/monetdb/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig, file
+, bison, openssl, readline, bzip2
+}:
+
+let
+  version = "11.31.11";
+in stdenv.mkDerivation rec {
+
+  name = "monetdb-${version}";
+
+  src = fetchurl {
+    url = "https://dev.monetdb.org/downloads/sources/archive/MonetDB-${version}.tar.bz2";
+    sha256 = "0x504jdxnqpxln6b69dqagzm2zknf11lykckmydzi6vapfc5msd3";
+  };
+
+  postPatch = ''
+    sed -i "s,/usr/bin/file,${file}/bin/file," configure
+  '';
+
+  nativeBuildInputs = [ pkgconfig file ];
+  buildInputs = [ bison openssl readline bzip2 ];
+
+  meta = with stdenv.lib; {
+    description = "An open source database system";
+    homepage = https://www.monetdb.org/;
+    license = licenses.mpl20;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.StillerHarpo ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/mysql/5.5.17-cygwin.patch b/nixpkgs/pkgs/servers/sql/mysql/5.5.17-cygwin.patch
new file mode 100644
index 000000000000..f5178cd3f390
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/mysql/5.5.17-cygwin.patch
@@ -0,0 +1,44 @@
+--- mysql-5.5.17/cmake/install_macros.cmake	2011-10-12 07:10:24.000000000 -0500
++++ mysql-5.5.17/cmake/install_macros.cmake	2011-11-07 23:19:35.772837800 -0600
+@@ -230,7 +230,13 @@ FUNCTION(MYSQL_INSTALL_TARGETS)
+   IF(ARG_COMPONENT)
+     SET(COMP COMPONENT ${ARG_COMPONENT})
+   ENDIF()
+-  INSTALL(TARGETS ${TARGETS} DESTINATION ${ARG_DESTINATION} ${COMP})
++  IF(${ARG_DESTINATION} STREQUAL "${INSTALL_LIBDIR}")
++    INSTALL(TARGETS ${TARGETS} LIBRARY DESTINATION ${ARG_DESTINATION}
++                               RUNTIME DESTINATION bin
++                               ARCHIVE DESTINATION ${ARG_DESTINATION} ${COMP})
++  ELSE()
++    INSTALL(TARGETS ${TARGETS} DESTINATION ${ARG_DESTINATION} ${COMP})
++  ENDIF()
+   SET(INSTALL_LOCATION ${ARG_DESTINATION} )
+   INSTALL_DEBUG_SYMBOLS("${TARGETS}")
+   SET(INSTALL_LOCATION)
+--- mysql-5.5.17/libmysql/CMakeLists.txt	2011-10-12 07:10:24.000000000 -0500
++++ mysql-5.5.17/libmysql/CMakeLists.txt	2011-11-08 03:19:31.379219300 -0600
+@@ -214,6 +214,7 @@ IF(NOT DISABLE_SHARED)
+     SET_TARGET_PROPERTIES(mysqlclient PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+     SET_TARGET_PROPERTIES(libmysql PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+ 
++    IF(NOT CYGWIN)
+     # Install links to libmysqlclient.so (client_r)
+     GET_VERSIONED_LIBNAME(
+       "${CMAKE_SHARED_LIBRARY_PREFIX}mysqlclient_r"
+@@ -231,5 +232,6 @@ IF(NOT DISABLE_SHARED)
+         linkname)
+       INSTALL_SYMLINK(${linkname} libmysql ${INSTALL_LIBDIR} SharedLibraries)
+     ENDFOREACH()
++    ENDIF(NOT CYGWIN)
+   ENDIF()
+ ENDIF()
+--- mysql-5.5.17/strings/dtoa.c	2011-10-12 07:10:25.000000000 -0500
++++ mysql-5.5.17/strings/dtoa.c	2011-11-07 20:38:05.064690100 -0600
+@@ -36,6 +36,7 @@
+ 
+  ***************************************************************/
+ 
++#define __STRICT_ANSI__
+ #include <my_base.h> /* for EOVERFLOW on Windows */
+ #include <my_global.h>
+ #include <m_string.h>  /* for memcpy and NOT_FIXED_DEC */
diff --git a/nixpkgs/pkgs/servers/sql/mysql/5.5.17-export-symbols.patch b/nixpkgs/pkgs/servers/sql/mysql/5.5.17-export-symbols.patch
new file mode 100644
index 000000000000..edc93c44dfe3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/mysql/5.5.17-export-symbols.patch
@@ -0,0 +1,22 @@
+--- mysql-5.5.17/libmysql/CMakeLists.txt	2011-10-12 07:10:24.000000000 -0500
++++ mysql-5.5.17/libmysql/CMakeLists.txt	2011-11-08 03:19:31.379219300 -0600
+@@ -25,6 +25,11 @@ INCLUDE_DIRECTORIES(
+ ADD_DEFINITIONS(${SSL_DEFINES})
+ 
+ SET(CLIENT_API_FUNCTIONS
++dynstr_free
++dynstr_append_mem
++dynstr_append_os_quoted
++dynstr_realloc
++init_dynamic_string
+ get_tty_password
+ handle_options
+ load_defaults
+@@ -131,6 +136,7 @@ mysql_server_end
+ mysql_set_character_set
+ mysql_get_character_set_info
+ mysql_stmt_next_result
++strfill
+ 
+ CACHE INTERNAL "Functions exported by client API"
+ 
diff --git a/nixpkgs/pkgs/servers/sql/mysql/5.5.x.nix b/nixpkgs/pkgs/servers/sql/mysql/5.5.x.nix
new file mode 100644
index 000000000000..a24dee07de47
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/mysql/5.5.x.nix
@@ -0,0 +1,83 @@
+{ stdenv, fetchurl, cmake, bison, ncurses, openssl, readline, zlib, perl
+, cctools, CoreServices }:
+
+# Note: zlib is not required; MySQL can use an internal zlib.
+
+let
+self = stdenv.mkDerivation rec {
+  name = "mysql-${version}";
+  version = "5.5.62";
+
+  src = fetchurl {
+    url = "mirror://mysql/MySQL-5.5/${name}.tar.gz";
+    sha256 = "1mwrzwk9ap09s430fpdkyhvx5j2syd3xj2hyfzvanjphq4xqbrxi";
+  };
+
+  patches = if stdenv.isCygwin then [
+    ./5.5.17-cygwin.patch
+    ./5.5.17-export-symbols.patch
+  ] else null;
+
+  preConfigure = stdenv.lib.optional stdenv.isDarwin ''
+    ln -s /bin/ps $TMPDIR/ps
+    export PATH=$PATH:$TMPDIR
+  '';
+
+  buildInputs = [ cmake bison ncurses openssl readline zlib ]
+     ++ stdenv.lib.optionals stdenv.isDarwin [ perl cctools CoreServices ];
+
+  enableParallelBuilding = true;
+
+  cmakeFlags = [
+    "-DWITH_SSL=yes"
+    "-DWITH_READLINE=yes"
+    "-DWITH_EMBEDDED_SERVER=yes"
+    "-DWITH_ZLIB=yes"
+    "-DHAVE_IPV6=yes"
+    "-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock"
+    "-DMYSQL_DATADIR=/var/lib/mysql"
+    "-DINSTALL_SYSCONFDIR=etc/mysql"
+    "-DINSTALL_INFODIR=share/mysql/docs"
+    "-DINSTALL_MANDIR=share/man"
+    "-DINSTALL_PLUGINDIR=lib/mysql/plugin"
+    "-DINSTALL_SCRIPTDIR=bin"
+    "-DINSTALL_INCLUDEDIR=include/mysql"
+    "-DINSTALL_DOCREADMEDIR=share/mysql"
+    "-DINSTALL_SUPPORTFILESDIR=share/mysql"
+    "-DINSTALL_MYSQLSHAREDIR=share/mysql"
+    "-DINSTALL_DOCDIR=share/mysql/docs"
+    "-DINSTALL_SHAREDIR=share/mysql"
+    "-DINSTALL_MYSQLTESTDIR="
+    "-DINSTALL_SQLBENCHDIR="
+  ];
+
+  NIX_CFLAGS_COMPILE = [ "-fpermissive" ]; # since gcc-7
+  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s";
+
+  prePatch = ''
+    sed -i -e "s|/usr/bin/libtool|libtool|" cmake/libutils.cmake
+  '';
+  postInstall = ''
+    sed -i -e "s|basedir=\"\"|basedir=\"$out\"|" $out/bin/mysql_install_db
+    rm -r $out/data "$out"/lib/*.a
+  '';
+
+  passthru = {
+    client = self;
+    connector-c = self;
+    server = self;
+    mysqlVersion = "5.5";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://www.mysql.com/;
+    description = "The world's most popular open source database";
+    platforms = platforms.unix;
+    # See https://downloads.mysql.com/docs/licenses/mysqld-5.5-gpl-en.pdf
+    license = with licenses; [
+      artistic1 bsd0 bsd2 bsd3 bsdOriginal
+      gpl2 lgpl2 lgpl21 mit publicDomain  licenses.zlib
+    ];
+    broken = stdenv.isAarch64;
+  };
+}; in self
diff --git a/nixpkgs/pkgs/servers/sql/mysql/5.7.x.nix b/nixpkgs/pkgs/servers/sql/mysql/5.7.x.nix
new file mode 100644
index 000000000000..51fca3997591
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/mysql/5.7.x.nix
@@ -0,0 +1,87 @@
+{ stdenv, fetchurl, cmake, bison
+, boost, libedit, libevent, lz4, ncurses, openssl, protobuf, readline, zlib, perl
+, cctools, CoreServices, developer_cmds }:
+
+# Note: zlib is not required; MySQL can use an internal zlib.
+
+let
+self = stdenv.mkDerivation rec {
+  name = "mysql-${version}";
+  version = "5.7.24";
+
+  src = fetchurl {
+    url = "mirror://mysql/MySQL-5.7/${name}.tar.gz";
+    sha256 = "11qz8cc4zyi7sxs66c5zlap6fd3vra1srwgzcxdzhz59qs90rgq5";
+  };
+
+  preConfigure = stdenv.lib.optional stdenv.isDarwin ''
+    ln -s /bin/ps $TMPDIR/ps
+    export PATH=$PATH:$TMPDIR
+  '';
+
+  nativeBuildInputs = [ cmake bison ];
+
+  buildInputs = [ boost libedit libevent lz4 ncurses openssl protobuf readline zlib ]
+     ++ stdenv.lib.optionals stdenv.isDarwin [ perl cctools CoreServices developer_cmds ];
+
+  enableParallelBuilding = true;
+
+  outputs = [ "out" "static" ];
+
+  cmakeFlags = [
+    "-DCMAKE_SKIP_BUILD_RPATH=OFF" # To run libmysql/libmysql_api_test during build.
+    "-DWITH_SSL=yes"
+    "-DWITH_EMBEDDED_SERVER=yes"
+    "-DWITH_UNIT_TESTS=no"
+    "-DWITH_EDITLINE=system"
+    "-DWITH_LIBEVENT=system"
+    "-DWITH_LZ4=system"
+    "-DWITH_PROTOBUF=system"
+    "-DWITH_ZLIB=system"
+    "-DWITH_ARCHIVE_STORAGE_ENGINE=yes"
+    "-DWITH_BLACKHOLE_STORAGE_ENGINE=yes"
+    "-DWITH_FEDERATED_STORAGE_ENGINE=yes"
+    "-DHAVE_IPV6=yes"
+    "-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock"
+    "-DMYSQL_DATADIR=/var/lib/mysql"
+    "-DINSTALL_INFODIR=share/mysql/docs"
+    "-DINSTALL_MANDIR=share/man"
+    "-DINSTALL_PLUGINDIR=lib/mysql/plugin"
+    "-DINSTALL_SCRIPTDIR=bin"
+    "-DINSTALL_INCLUDEDIR=include/mysql"
+    "-DINSTALL_DOCREADMEDIR=share/mysql"
+    "-DINSTALL_SUPPORTFILESDIR=share/mysql"
+    "-DINSTALL_MYSQLSHAREDIR=share/mysql"
+    "-DINSTALL_MYSQLTESTDIR="
+    "-DINSTALL_DOCDIR=share/mysql/docs"
+    "-DINSTALL_SHAREDIR=share/mysql"
+  ];
+
+  CXXFLAGS = "-fpermissive";
+  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s";
+
+  prePatch = ''
+    sed -i -e "s|/usr/bin/libtool|libtool|" cmake/merge_archives.cmake.in
+  '';
+  postInstall = ''
+    moveToOutput "lib/*.a" $static
+    ln -s libmysqlclient${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/libmysqlclient_r${stdenv.hostPlatform.extensions.sharedLibrary}
+  '';
+
+  passthru = {
+    client = self;
+    connector-c = self;
+    server = self;
+    mysqlVersion = "5.7";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://www.mysql.com/;
+    description = "The world's most popular open source database";
+    platforms = platforms.unix;
+    license = with licenses; [
+      artistic1 bsd0 bsd2 bsd3 bsdOriginal
+      gpl2 lgpl2 lgpl21 mit publicDomain licenses.zlib
+    ];
+  };
+}; in self
diff --git a/nixpkgs/pkgs/servers/sql/mysql/abi_check.patch b/nixpkgs/pkgs/servers/sql/mysql/abi_check.patch
new file mode 100644
index 000000000000..e9f9cfdc9d95
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/mysql/abi_check.patch
@@ -0,0 +1,20 @@
+diff -rc mysql-5.1.40/Makefile.in mysql-5.1.40-new/Makefile.in
+*** mysql-5.1.40/Makefile.in	2009-10-06 19:57:22.000000000 +0200
+--- mysql-5.1.40-new/Makefile.in	2009-12-16 13:07:16.060108763 +0100
+***************
+*** 891,897 ****
+  		--srcdir=$(top_srcdir)
+  	storage/myisam/myisamchk --silent --fast $(distdir)/win/data/mysql/*.MYI
+  
+! all-local:		@ABI_CHECK@	
+  
+  tags:
+  	support-files/build-tags
+--- 891,897 ----
+  		--srcdir=$(top_srcdir)
+  	storage/myisam/myisamchk --silent --fast $(distdir)/win/data/mysql/*.MYI
+  
+! all-local:		
+  
+  tags:
+  	support-files/build-tags
diff --git a/nixpkgs/pkgs/servers/sql/mysql/jdbc/builder.sh b/nixpkgs/pkgs/servers/sql/mysql/jdbc/builder.sh
new file mode 100644
index 000000000000..56336e041356
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/mysql/jdbc/builder.sh
@@ -0,0 +1,9 @@
+source $stdenv/setup
+
+set -e
+
+unzip $src
+cd mysql-connector-java-*
+
+mkdir -p $out/share/java
+cp mysql-connector-java-*-bin.jar $out/share/java/mysql-connector-java.jar
diff --git a/nixpkgs/pkgs/servers/sql/mysql/jdbc/default.nix b/nixpkgs/pkgs/servers/sql/mysql/jdbc/default.nix
new file mode 100644
index 000000000000..66e62b823d9a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/mysql/jdbc/default.nix
@@ -0,0 +1,17 @@
+{stdenv, fetchurl, ant, unzip}:
+
+stdenv.mkDerivation rec {
+  name = "mysql-connector-java-5.1.46";
+  builder = ./builder.sh;
+
+  src = fetchurl {
+    url = "http://dev.mysql.com/get/Downloads/Connector-J/${name}.zip";
+    sha256 = "0dfjshrrx0ndfb6xbdpwhn1f1jkw0km57rgpar0ny8ixmgdnlwnm";
+  };
+
+  buildInputs = [ unzip ant ];
+
+  meta = {
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/oracle-xe/default.nix b/nixpkgs/pkgs/servers/sql/oracle-xe/default.nix
new file mode 100644
index 000000000000..a50d623acbce
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/oracle-xe/default.nix
@@ -0,0 +1,82 @@
+{ stdenv, makeWrapper, requireFile, patchelf, rpmextract, libaio }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  name = "oracle-xe-${version}";
+  version = "11.2.0";
+
+  src = requireFile {
+    name = "${name}-1.0.x86_64.rpm";
+    sha256 = "0s2jj2xn56v5ys6hxb7l7045hw9c1mm1lhj4p2fvqbs02kqchab6";
+
+    url = "http://www.oracle.com/technetwork/"
+        + "products/express-edition/downloads/";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  unpackCmd = ''
+    (mkdir -p "${name}" && cd "${name}" &&
+      ${rpmextract}/bin/rpmextract "$curSrc")
+  '';
+
+  buildPhase = let
+    libs = makeLibraryPath [ libaio ];
+  in ''
+    basedir="u01/app/oracle/product/${version}/xe"
+    cat > "$basedir/network/admin/listener.ora" <<SQL
+    # listener.ora Network Configuration File:
+
+    SID_LIST_LISTENER =
+      (SID_LIST =
+        (SID_DESC =
+          (SID_NAME = PLSExtProc)
+          (ORACLE_HOME = ''${out}/libexec/oracle)
+          (PROGRAM = extproc)
+        )
+      )
+
+    LISTENER =
+      (DESCRIPTION_LIST =
+        (DESCRIPTION =
+          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
+          (ADDRESS = (PROTOCOL = TCP)(HOST = %hostname%)(PORT = %port%))
+        )
+      )
+
+    DEFAULT_SERVICE_LISTENER = (XE)
+    SQL
+
+    find u01 \
+      \( -name '*.sh' \
+      -o -path "$basedir/bin/*" \
+      \) -print -exec "${patchelf}/bin/patchelf" \
+           --interpreter "$(cat "$NIX_CC/nix-support/dynamic-linker")" \
+           --set-rpath "${libs}:$out/libexec/oracle/lib" \
+           --force-rpath '{}' \;
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+
+  installPhase = ''
+    mkdir -p "$out/libexec"
+    cp -r "u01/app/oracle/product/${version}/xe" "$out/libexec/oracle"
+
+    for i in "$out/libexec/oracle/bin"/*; do
+      makeWrapper "$i" "$out/bin/''${i##*/}" \
+        --set ORACLE_HOME "$out/libexec/oracle" \
+        --set ORACLE_SID XE \
+        --run "export NLS_LANG=\$($out/libexec/oracle/bin/nls_lang.sh)" \
+        --prefix PATH : "$out/libexec/oracle/bin"
+    done
+  '';
+
+  meta = {
+    description = "Oracle Database Express Edition";
+    homepage = http://www.oracle.com/technetwork/products/express-edition/;
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/percona/5.6.x.nix b/nixpkgs/pkgs/servers/sql/percona/5.6.x.nix
new file mode 100644
index 000000000000..e440f11b2e44
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/percona/5.6.x.nix
@@ -0,0 +1,62 @@
+{ stdenv, fetchurl, cmake, bison, ncurses, openssl, zlib, libaio, perl }:
+
+stdenv.mkDerivation rec {
+  name = "percona-server-${version}";
+  version = "5.6.35-80.0";
+
+  src = fetchurl {
+    url = "https://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-${version}/source/tarball/percona-server-${version}.tar.gz";
+    sha256 = "0szjywx902da09pg8yqj8l2acplmh69hn5smrk45i291qsi5m6r5";
+  };
+
+  buildInputs = [ cmake bison ncurses openssl zlib libaio perl ];
+
+  enableParallelBuilding = true;
+
+  cmakeFlags = [
+    "-DFEATURE_SET=community"
+    "-DBUILD_CONFIG=mysql_release"
+    "-DCMAKE_BUILD_TYPE=RelWithDebInfo"
+    "-DWITH_SSL=yes"
+    "-DWITH_READLINE=no"
+    "-DWITH_EMBEDDED_SERVER=no"
+    "-DWITH_EDITLINE=bundled"
+    "-DWITH_ZLIB=yes"
+    "-DHAVE_IPV6=no"
+    "-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock"
+    "-DMYSQL_DATADIR=/var/lib/mysql"
+    "-DINSTALL_SYSCONFDIR=etc/mysql"
+    "-DINSTALL_INFODIR=share/mysql/docs"
+    "-DINSTALL_MANDIR=share/man"
+    "-DINSTALL_PLUGINDIR=lib/mysql/plugin"
+    "-DINSTALL_SCRIPTDIR=bin"
+    "-DINSTALL_INCLUDEDIR=include/mysql"
+    "-DINSTALL_DOCREADMEDIR=share/mysql"
+    "-DINSTALL_SUPPORTFILESDIR=share/mysql"
+    "-DINSTALL_MYSQLSHAREDIR=share/mysql"
+    "-DINSTALL_DOCDIR=share/mysql/docs"
+    "-DINSTALL_SHAREDIR=share/mysql"
+  ];
+
+  NIX_LDFLAGS = "-lgcc_s";
+
+  prePatch = ''
+    sed -i -e "s|/usr/bin/libtool|libtool|" cmake/libutils.cmake
+  '';
+  postInstall = ''
+    sed -i -e "s|basedir=\"\"|basedir=\"$out\"|" $out/bin/mysql_install_db
+    rm -r $out/mysql-test $out/sql-bench $out/data "$out"/lib/*.a
+    rm $out/share/man/man1/mysql-test-run.pl.1
+  '';
+
+  passthru.mysqlVersion = "5.6";
+
+  meta = with stdenv.lib; {
+    homepage = https://www.percona.com;
+    description = "a free, fully compatible, enhanced, open source drop-in replacement for MySQL that provides superior performance, scalability and instrumentation";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ grahamc ];
+    broken = true; # 2018-04-11
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/pgbouncer/default.nix b/nixpkgs/pkgs/servers/sql/pgbouncer/default.nix
new file mode 100644
index 000000000000..ef8b77ad1176
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/pgbouncer/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, openssl, libevent }:
+
+stdenv.mkDerivation rec {
+  name = "pgbouncer-${version}";
+  version = "1.9.0";
+
+  src = fetchurl {
+    url = "https://pgbouncer.github.io/downloads/files/${version}/${name}.tar.gz";
+    sha256 = "012zh9l68r1ramrd66yam6y3al0i85dvvg4wwwkn6qwq6dhskv1r";
+  };
+
+  buildInputs = [ libevent openssl ];
+
+  meta = with stdenv.lib; {
+    homepage = https://pgbouncer.github.io;
+    description = "Lightweight connection pooler for PostgreSQL";
+    license = licenses.isc;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/pgpool/default.nix b/nixpkgs/pkgs/servers/sql/pgpool/default.nix
new file mode 100644
index 000000000000..781d25490d21
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/pgpool/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, postgresql, openssl, pam ? null, libmemcached ? null }:
+
+stdenv.mkDerivation rec {
+  name = "pgpool-II-3.4.14";
+
+  src = fetchurl {
+    name = "${name}.tar.gz";
+    url = "http://www.pgpool.net/download.php?f=${name}.tar.gz";
+    sha256 = "1paak83f4lv48xckmf2znryrvhmdz86w4v97mcw2gxm50hcl74sw";
+  };
+
+  patches = [ ./pgpool-II-3.4.14-glibc-2.26.patch ];
+
+  buildInputs = [ postgresql openssl pam libmemcached ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-openssl"
+  ] ++ stdenv.lib.optional (pam != null) "--with-pam"
+    ++ stdenv.lib.optional (libmemcached != null) "--with-memcached=${libmemcached}";
+
+  installFlags = [
+    "sysconfdir=\${out}/etc"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://pgpool.net/mediawiki/index.php;
+    description = "A middleware that works between postgresql servers and postgresql clients";
+    license = licenses.free;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ wkennington ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/pgpool/pgpool-II-3.4.14-glibc-2.26.patch b/nixpkgs/pkgs/servers/sql/pgpool/pgpool-II-3.4.14-glibc-2.26.patch
new file mode 100644
index 000000000000..6efffff0c6d9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/pgpool/pgpool-II-3.4.14-glibc-2.26.patch
@@ -0,0 +1,12 @@
+diff --git a/src/watchdog/wd_lifecheck.c b/src/watchdog/wd_lifecheck.c
+index 1e72307..5cf68a3 100644
+--- a/src/watchdog/wd_lifecheck.c
++++ b/src/watchdog/wd_lifecheck.c
+@@ -26,6 +26,7 @@
+ #include <ctype.h>
+ #include <time.h>
+ #include <string.h>
++#include <stdint.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <netdb.h>
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/cstore_fdw/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/cstore_fdw/default.nix
new file mode 100644
index 000000000000..a6e2c590f385
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/cstore_fdw/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, postgresql, protobufc }:
+
+stdenv.mkDerivation rec {
+  name = "cstore_fdw-${version}";
+  version = "1.6.2";
+
+  nativeBuildInputs = [ protobufc ];
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "citusdata";
+    repo   = "cstore_fdw";
+    rev    = "refs/tags/v${version}";
+    sha256 = "0kdmzpbhhjdg4p6i5963h7qbs88jzgpqc52gz450h7hwb9ckpv74";
+  };
+
+  installPhase = ''
+    mkdir -p $out/{lib,share/extension}
+
+    cp *.so      $out/lib
+    cp *.sql     $out/share/extension
+    cp *.control $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Columnar storage for PostgreSQL";
+    homepage    = https://www.citusdata.com/;
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms   = platforms.linux;
+    license     = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/default.nix
new file mode 100644
index 000000000000..2b56c32d6350
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/default.nix
@@ -0,0 +1,152 @@
+{ lib, stdenv, glibc, fetchurl, zlib, readline, libossp_uuid, openssl, libxml2, makeWrapper, tzdata, systemd, icu, pkgconfig }:
+
+let
+
+  common = { version, sha256, psqlSchema }:
+  let
+    atLeast = lib.versionAtLeast version;
+
+    # Build with ICU by default on versions that support it
+    icuEnabled = atLeast "10";
+  in stdenv.mkDerivation (rec {
+    name = "postgresql-${version}";
+    inherit version;
+
+    src = fetchurl {
+      url = "mirror://postgresql/source/v${version}/${name}.tar.bz2";
+      inherit sha256;
+    };
+
+    outputs = [ "out" "lib" "doc" "man" ];
+    setOutputFlags = false; # $out retains configureFlags :-/
+
+    buildInputs =
+      [ zlib readline openssl libxml2 makeWrapper ]
+      ++ lib.optionals icuEnabled [ icu ]
+      ++ lib.optionals (atLeast "9.6" && !stdenv.isDarwin) [ systemd ]
+      ++ lib.optionals (!stdenv.isDarwin) [ libossp_uuid ];
+
+    nativeBuildInputs = lib.optionals icuEnabled [ pkgconfig ];
+
+    enableParallelBuilding = !stdenv.isDarwin;
+
+    makeFlags = [ "world" ];
+
+    NIX_CFLAGS_COMPILE = [ "-I${libxml2.dev}/include/libxml2" ];
+
+    # Otherwise it retains a reference to compiler and fails; see #44767.  TODO: better.
+    preConfigure = "CC=${stdenv.cc.targetPrefix}cc";
+
+    configureFlags = [
+      "--with-openssl"
+      "--with-libxml"
+      "--sysconfdir=/etc"
+      "--libdir=$(lib)/lib"
+      "--with-system-tzdata=${tzdata}/share/zoneinfo"
+      (lib.optionalString (atLeast "9.6" && !stdenv.isDarwin) "--with-systemd")
+      (if stdenv.isDarwin then "--with-uuid=e2fs" else "--with-ossp-uuid")
+    ] ++ lib.optionals icuEnabled [ "--with-icu" ];
+
+    patches =
+      [ (if atLeast "9.4" then ./disable-resolve_symlinks-94.patch else ./disable-resolve_symlinks.patch)
+        (if atLeast "9.6" then ./less-is-more-96.patch             else ./less-is-more.patch)
+        (if atLeast "9.6" then ./hardcode-pgxs-path-96.patch       else ./hardcode-pgxs-path.patch)
+        ./specify_pkglibdir_at_runtime.patch
+      ];
+
+    installTargets = [ "install-world" ];
+
+    LC_ALL = "C";
+
+    postConfigure =
+      let path = if atLeast "9.6" then "src/common/config_info.c" else "src/bin/pg_config/pg_config.c"; in
+        ''
+          # Hardcode the path to pgxs so pg_config returns the path in $out
+          substituteInPlace "${path}" --replace HARDCODED_PGXS_PATH $out/lib
+        '';
+
+    postInstall =
+      ''
+        moveToOutput "lib/pgxs" "$out" # looks strange, but not deleting it
+        moveToOutput "lib/*.a" "$out"
+        moveToOutput "lib/libecpg*" "$out"
+
+        # Prevent a retained dependency on gcc-wrapper.
+        substituteInPlace "$out/lib/pgxs/src/Makefile.global" --replace ${stdenv.cc}/bin/ld ld
+
+        if [ -z "''${dontDisableStatic:-}" ]; then
+          # Remove static libraries in case dynamic are available.
+          for i in $out/lib/*.a; do
+            name="$(basename "$i")"
+            ext="${stdenv.hostPlatform.extensions.sharedLibrary}"
+            if [ -e "$lib/lib/''${name%.a}$ext" ] || [ -e "''${i%.a}$ext" ]; then
+              rm "$i"
+            fi
+          done
+        fi
+      '';
+
+    postFixup = lib.optionalString (!stdenv.isDarwin && stdenv.hostPlatform.libc == "glibc")
+      ''
+        # initdb needs access to "locale" command from glibc.
+        wrapProgram $out/bin/initdb --prefix PATH ":" ${glibc.bin}/bin
+      '';
+
+    doInstallCheck = false; # needs a running daemon?
+
+    disallowedReferences = [ stdenv.cc ];
+
+    passthru = {
+      inherit readline psqlSchema;
+    };
+
+    meta = with lib; {
+      homepage    = https://www.postgresql.org;
+      description = "A powerful, open source object-relational database system";
+      license     = licenses.postgresql;
+      maintainers = with maintainers; [ ocharles thoughtpolice ];
+      platforms   = platforms.unix;
+      knownVulnerabilities = optional (!atLeast "9.4")
+        "PostgreSQL versions older than 9.4 are not maintained anymore!";
+    };
+  });
+
+in {
+
+  postgresql_9_3 = common {
+    version = "9.3.25";
+    psqlSchema = "9.3";
+    sha256 = "1nxn0hjrg4y5v5n2jgzrbicgv4504r2yfjyk6g6rq0sx8603x5g4";
+  };
+
+  postgresql_9_4 = common {
+    version = "9.4.20";
+    psqlSchema = "9.4";
+    sha256 = "0zzqjz5jrn624hzh04drpj6axh30a9k6bgawid6rwk45nbfxicgf";
+  };
+
+  postgresql_9_5 = common {
+    version = "9.5.15";
+    psqlSchema = "9.5";
+    sha256 = "0i2lylgmsmy2g1ixlvl112fryp7jmrd0i2brk8sxb7vzzpg3znnv";
+  };
+
+  postgresql_9_6 = common {
+    version = "9.6.11";
+    psqlSchema = "9.6";
+    sha256 = "0c55akrkzqd6p6a8hr0338wk246hl76r9j16p4zn3s51d7f0l99q";
+  };
+
+  postgresql_10 = common {
+    version = "10.6";
+    psqlSchema = "10.0";
+    sha256 = "0jv26y3f10svrjxzsgqxg956c86b664azyk2wppzpa5x11pjga38";
+  };
+
+  postgresql_11 = common {
+    version = "11.1";
+    psqlSchema = "11.1";
+    sha256 = "026v0sicsh7avzi45waf8shcbhivyxmi7qgn9fd1x0vl520mx0ch";
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks-94.patch b/nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks-94.patch
new file mode 100644
index 000000000000..fadeea90ac4b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks-94.patch
@@ -0,0 +1,12 @@
+--- a/src/common/exec.c	2014-09-04 20:19:12.236057588 +0200
++++ b/src/common/exec.c	2014-09-04 20:19:50.550251633 +0200
+@@ -218,6 +218,9 @@
+ static int
+ resolve_symlinks(char *path)
+ {
++	// On NixOS we *want* stuff relative to symlinks.
++	return 0;
++
+ #ifdef HAVE_READLINK
+ 	struct stat buf;
+ 	char		orig_wd[MAXPGPATH],
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks.patch b/nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks.patch
new file mode 100644
index 000000000000..3e6fd5e838a2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks.patch
@@ -0,0 +1,14 @@
+diff --git a/src/port/exec.c b/src/port/exec.c
+index c79e8ba..42c4091 100644
+--- a/src/port/exec.c
++++ b/src/port/exec.c
+@@ -216,6 +216,9 @@ find_my_exec(const char *argv0, char *retpath)
+ static int
+ resolve_symlinks(char *path)
+ {
++    // On NixOS we *want* stuff relative to symlinks.
++    return 0;
++
+ #ifdef HAVE_READLINK
+ 	struct stat buf;
+ 	char		orig_wd[MAXPGPATH],
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path-96.patch b/nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path-96.patch
new file mode 100644
index 000000000000..6cd449769baa
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path-96.patch
@@ -0,0 +1,14 @@
+diff -Naur postgresql-9.6.1-orig/src/common/config_info.c postgresql-9.6.1/src/common/config_info.c
+--- postgresql-9.6.1-orig/src/common/config_info.c	2016-11-22 21:39:29.231929261 +0100
++++ postgresql-9.6.1/src/common/config_info.c	2016-11-22 23:36:53.685163543 +0100
+@@ -118,7 +118,10 @@
+ 	i++;
+
+ 	configdata[i].name = pstrdup("PGXS");
++	strlcpy(path, "HARDCODED_PGXS_PATH", sizeof(path));
++/* commented out to be able to point to nix $out path
+ 	get_pkglib_path(my_exec_path, path);
++*/
+ 	strlcat(path, "/pgxs/src/makefiles/pgxs.mk", sizeof(path));
+ 	cleanup_path(path);
+ 	configdata[i].setting = pstrdup(path);
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path.patch b/nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path.patch
new file mode 100644
index 000000000000..355813ffe20e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path.patch
@@ -0,0 +1,17 @@
+--- a/src/bin/pg_config/pg_config.c
++++ b/src/bin/pg_config/pg_config.c
+@@ -220,11 +220,13 @@ show_sysconfdir(bool all)
+ static void
+ show_pgxs(bool all)
+ {
+-	char		path[MAXPGPATH];
++	char		path[MAXPGPATH] = "HARDCODED_PGXS_PATH";
+ 
+ 	if (all)
+ 		printf("PGXS = ");
++  /* commented out to be able to point to nix $out path
+ 	get_pkglib_path(mypath, path);
++  */
+ 	strlcat(path, "/pgxs/src/makefiles/pgxs.mk", sizeof(path));
+ 	cleanup_path(path);
+ 	printf("%s\n", path);
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/jdbc/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/jdbc/default.nix
new file mode 100644
index 000000000000..c67d72705482
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/jdbc/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchMavenArtifact }:
+
+stdenv.mkDerivation rec {
+  name = "postgresql-jdbc-${version}";
+  version = "42.2.5";
+
+  src = fetchMavenArtifact {
+    artifactId = "postgresql";
+    groupId = "org.postgresql";
+    sha256 = "1p0cbb7ka41xxipzjy81hmcndkqynav22xyipkg7qdqrqvw4dykz";
+    inherit version;
+  };
+
+  phases = [ "installPhase" ];
+
+  installPhase = ''
+    install -m444 -D $src/share/java/*postgresql-${version}.jar $out/share/java/postgresql-jdbc.jar
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://jdbc.postgresql.org/;
+    description = "JDBC driver for PostgreSQL allowing Java programs to connect to a PostgreSQL database";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/less-is-more-96.patch b/nixpkgs/pkgs/servers/sql/postgresql/less-is-more-96.patch
new file mode 100644
index 000000000000..f14af9dc2207
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/less-is-more-96.patch
@@ -0,0 +1,12 @@
+diff -Naur postgresql-9.6.1-orig/src/include/fe_utils/print.h postgresql-9.6.1/src/include/fe_utils/print.h
+--- postgresql-9.6.1-orig/src/include/fe_utils/print.h	2016-11-22 21:39:29.148932827 +0100
++++ postgresql-9.6.1/src/include/fe_utils/print.h	2016-11-22 21:39:36.283626258 +0100
+@@ -18,7 +18,7 @@
+ 
+ /* This is not a particularly great place for this ... */
+ #ifndef __CYGWIN__
+-#define DEFAULT_PAGER "more"
++#define DEFAULT_PAGER "less"
+ #else
+ #define DEFAULT_PAGER "less"
+ #endif
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/less-is-more.patch b/nixpkgs/pkgs/servers/sql/postgresql/less-is-more.patch
new file mode 100644
index 000000000000..d640d24bdaad
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/less-is-more.patch
@@ -0,0 +1,12 @@
+diff -Naur postgresql-9.2.7-orig/src/bin/psql/print.h postgresql-9.2.7/src/bin/psql/print.h
+--- postgresql-9.2.7-orig/src/bin/psql/print.h	2014-02-17 14:38:15.000000000 -0500
++++ postgresql-9.2.7/src/bin/psql/print.h	2014-03-04 14:42:28.874014415 -0500
+@@ -178,7 +178,7 @@
+ extern const printTextFormat *get_line_style(const printTableOpt *opt);
+ 
+ #ifndef __CYGWIN__
+-#define DEFAULT_PAGER "more"
++#define DEFAULT_PAGER "less"
+ #else
+ #define DEFAULT_PAGER "less"
+ #endif
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/pg_cron/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/pg_cron/default.nix
new file mode 100644
index 000000000000..959c2c382524
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/pg_cron/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  name = "pg_cron-${version}";
+  version = "1.1.2";
+
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "citusdata";
+    repo   = "pg_cron";
+    rev    = "refs/tags/v${version}";
+    sha256 = "0n74dx1wkg9qxvjhnx03028465ap3p97v2kzqww833dws1wqk5m1";
+  };
+
+  installPhase = ''
+    mkdir -p $out/{lib,share/extension}
+
+    cp *.so      $out/lib
+    cp *.sql     $out/share/extension
+    cp *.control $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Run Cron jobs through PostgreSQL";
+    homepage    = https://www.citusdata.com/;
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms   = platforms.linux;
+    license     = licenses.postgresql;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/pg_hll/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/pg_hll/default.nix
new file mode 100644
index 000000000000..f91a8b1bf252
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/pg_hll/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  name = "pg_hll-${version}";
+  version = "2.12";
+
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "citusdata";
+    repo   = "postgresql-hll";
+    rev    = "refs/tags/v${version}";
+    sha256 = "1jdc9gjqc3dkjxv855q1p594j0awhrrymrcqnl5vw5vx2ny3bpgn";
+  };
+
+  installPhase = ''
+    mkdir -p $out/{lib,share/extension}
+
+    cp *.so      $out/lib
+    cp *.sql     $out/share/extension
+    cp *.control $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "HyperLogLog for PostgreSQL";
+    homepage    = https://www.citusdata.com/;
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms   = platforms.linux;
+    license     = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/pg_repack/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/pg_repack/default.nix
new file mode 100644
index 000000000000..14f71b1e2b3b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/pg_repack/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, postgresql, openssl, zlib, readline }:
+
+stdenv.mkDerivation rec {
+  name = "pg_repack-${version}";
+  version = "1.4.4";
+
+  buildInputs = [ postgresql openssl zlib readline ];
+
+  src = fetchFromGitHub {
+    owner  = "reorg";
+    repo   = "pg_repack";
+    rev    = "refs/tags/ver_${version}";
+    sha256 = "0ynsmsxfkcp82ccpz2nrgg8wiil8yxqigvw6425lx8v80h5lszbw";
+  };
+
+  installPhase = ''
+    install -D bin/pg_repack -t $out/bin/
+    install -D lib/pg_repack.so -t $out/lib/
+    install -D lib/{pg_repack--${version}.sql,pg_repack.control} -t $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Reorganize tables in PostgreSQL databases with minimal locks";
+    longDescription = ''
+      pg_repack is a PostgreSQL extension which lets you remove bloat from tables and indexes, and optionally restore
+      the physical order of clustered indexes. Unlike CLUSTER and VACUUM FULL it works online, without holding an
+      exclusive lock on the processed tables during processing. pg_repack is efficient to boot,
+      with performance comparable to using CLUSTER directly.
+    '';
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ danbst ];
+    inherit (postgresql.meta) platforms;
+    inherit (src.meta) homepage;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/pg_similarity/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/pg_similarity/default.nix
new file mode 100644
index 000000000000..32945c9fa62b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/pg_similarity/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromGitHub, gcc, postgresql }:
+
+stdenv.mkDerivation {
+
+  name = "pg_similarity-1.0";
+  src = fetchFromGitHub {
+    owner = "eulerto";
+    repo = "pg_similarity";
+    rev = "be1a8b08c8716e59b89982557da9ea68cdf868c5";
+    sha256 = "1z4v4r2yccdr8kz3935fnk1bc5vj0qj0apscldyap4wxlyi89xim";
+  };
+
+  buildInputs = [ postgresql gcc ];
+  buildPhase = "USE_PGXS=1 make";
+  installPhase = ''
+    mkdir -p $out/bin   # for buildEnv to setup proper symlinks
+    install -D pg_similarity.so -t $out/lib/
+    install -D ./{pg_similarity--unpackaged--1.0.sql,pg_similarity--1.0.sql,pg_similarity.control} -t $out/share/extension
+  '';
+
+  meta = {
+    description = ''
+       pg_similarity is an extension to support similarity queries on PostgreSQL. The implementation
+       is tightly integrated in the RDBMS in the sense that it defines operators so instead of the traditional
+       operators (= and <>) you can use ~~~ and ~!~ (any of these operators represents a similarity function).
+    '';
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ danbst ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/pgjwt/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/pgjwt/default.nix
new file mode 100644
index 000000000000..ab7ba8943a7b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/pgjwt/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  name    = "pgjwt-${version}";
+  version = "unstable-2017-04-24";
+
+  src = fetchFromGitHub {
+    owner  = "michelp";
+    repo   = "pgjwt";
+    rev    = "546a2911027b716586e241be7fd4c6f1785237cd";
+    sha256 = "1riz0xvwb6y02j0fljbr9hcbqb2jqs4njlivmavy9ysbcrrv1vrf";
+  };
+
+  buildPhase = ":";
+  installPhase = ''
+    mkdir -p $out/bin  # current postgresql extension mechanism in nixos requires bin directory
+    mkdir -p $out/share/extension
+    cp pg*sql *.control $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "PostgreSQL implementation of JSON Web Tokens";
+    longDescription = ''
+      sign() and verify() functions to create and verify JSON Web Tokens.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [spinus];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/pgroonga/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/pgroonga/default.nix
new file mode 100644
index 000000000000..aca5eb1f4ee7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/pgroonga/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig, postgresql, msgpack, groonga }:
+
+stdenv.mkDerivation rec {
+  name = "pgroonga-${version}";
+  version = "2.1.6";
+
+  src = fetchurl {
+    url = "https://packages.groonga.org/source/pgroonga/${name}.tar.gz";
+    sha256 = "1scybfmmlz5p4xgkhfx7pzdiqj5cd60kvbk8m4xa6k3avz0p1sw9";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ postgresql msgpack groonga ];
+
+  makeFlags = [ "HAVE_MSGPACK=1" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -D pgroonga.so -t $out/lib/
+    install -D ./{pgroonga-*.sql,pgroonga.control} -t $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A PostgreSQL extension to use Groonga as the index";
+    longDescription = "PGroonga is a PostgreSQL extension to use Groonga as the index. PostgreSQL supports full text search against languages that use only alphabet and digit. It means that PostgreSQL doesn't support full text search against Japanese, Chinese and so on. You can use super fast full text search feature against all languages by installing PGroonga into your PostgreSQL.";
+    homepage = https://pgroonga.github.io/;
+    license = licenses.postgresql;
+    maintainers = with maintainers; [ DerTim1 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/pgtap/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/pgtap/default.nix
new file mode 100644
index 000000000000..6386049be395
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/pgtap/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, postgresql, perl, perlPackages, which }:
+
+stdenv.mkDerivation rec {
+  name = "pgtap-${version}";
+  version = "0.99.0";
+
+  src = fetchFromGitHub {
+    owner = "theory";
+    repo = "pgtap";
+    rev = "v${version}";
+    sha256 = "0xakjlbb99mgd8za6m0xa6n3s5fhif217iip6b3aywqw7nh1j6nv";
+  };
+
+  nativeBuildInputs = [ postgresql perl perlPackages.TAPParserSourceHandlerpgTAP which ];
+
+  installPhase = ''
+    install -D {sql/pgtap--${version}.sql,pgtap.control} -t $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "pgTAP is a unit testing framework for PostgreSQL";
+    longDescription = ''
+      pgTAP is a unit testing framework for PostgreSQL written in PL/pgSQL and PL/SQL.
+      It includes a comprehensive collection of TAP-emitting assertion functions,
+      as well as the ability to integrate with other TAP-emitting test frameworks.
+      It can also be used in the xUnit testing style.
+    '';
+    maintainers = with maintainers; [ willibutz ];
+    homepage = https://pgtap.org;
+    inherit (postgresql.meta) platforms;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/plv8/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/plv8/default.nix
new file mode 100644
index 000000000000..dae3b2fd1af1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/plv8/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, v8, perl, postgresql }:
+
+stdenv.mkDerivation rec {
+  name = "plv8-${version}";
+  version = "2.3.8";
+
+  nativeBuildInputs = [ perl ];
+  buildInputs = [ v8 postgresql ];
+
+  src = fetchFromGitHub {
+    owner = "plv8";
+    repo = "plv8";
+    rev = "v${version}";
+    sha256 = "0hrmn1zzzdf52zwldg6axv57p0f3b279l9s8lbpijcv60fqrzx16";
+  };
+
+  makeFlags = [ "--makefile=Makefile.shared" ];
+
+  preConfigure = ''
+    patchShebangs ./generate_upgrade.sh
+  '';
+
+  buildPhase = "make -f Makefile.shared all";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -D plv8*.so                                        -t $out/lib
+    install -D {plls,plcoffee,plv8}{--${version}.sql,.control} -t $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "PL/v8 - A Procedural Language in JavaScript powered by V8";
+    homepage = https://pgxn.org/dist/plv8/;
+    maintainers = with maintainers; [ volth ];
+    platforms = platforms.linux;
+    license = licenses.postgresql;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/psqlodbc/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/psqlodbc/default.nix
new file mode 100644
index 000000000000..2364e0913bc8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/psqlodbc/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, libiodbc, postgresql, openssl }:
+
+stdenv.mkDerivation rec {
+  name = "psqlodbc-09.01.0200";
+
+  src = fetchurl {
+    url = "https://ftp.postgresql.org/pub/odbc/versions/src/${name}.tar.gz";
+    sha256 = "0b4w1ahfpp34jpscfk2kv9050lh3xl9pvcysqvaigkcd0vsk1hl9";
+  };
+
+  buildInputs = [ libiodbc postgresql openssl ];
+
+  configureFlags = [ "--with-iodbc=${libiodbc}" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://psqlodbc.projects.postgresql.org/;
+    description = "ODBC driver for PostgreSQL";
+    license = licenses.lgpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/specify_pkglibdir_at_runtime.patch b/nixpkgs/pkgs/servers/sql/postgresql/specify_pkglibdir_at_runtime.patch
new file mode 100644
index 000000000000..fe95d2ee99f0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/specify_pkglibdir_at_runtime.patch
@@ -0,0 +1,29 @@
+diff -ur postgresql-9.5.3-orig/src/port/path.c postgresql-9.5.3/src/port/path.c
+--- postgresql-9.5.3-orig/src/port/path.c	2016-05-09 22:50:23.000000000 +0200
++++ postgresql-9.5.3/src/port/path.c	2016-08-29 22:44:10.507377613 +0200
+@@ -714,7 +714,11 @@
+ void
+ get_lib_path(const char *my_exec_path, char *ret_path)
+ {
+-	make_relative_path(ret_path, LIBDIR, PGBINDIR, my_exec_path);
++	char const * const nix_pglibdir = getenv("NIX_PGLIBDIR");
++	if(nix_pglibdir == NULL)
++		make_relative_path(ret_path, LIBDIR, PGBINDIR, my_exec_path);
++	else
++		make_relative_path(ret_path, nix_pglibdir, PGBINDIR, my_exec_path);
+ }
+ 
+ /*
+@@ -723,7 +727,11 @@
+ void
+ get_pkglib_path(const char *my_exec_path, char *ret_path)
+ {
+-	make_relative_path(ret_path, PKGLIBDIR, PGBINDIR, my_exec_path);
++	char const * const nix_pglibdir = getenv("NIX_PGLIBDIR");
++	if(nix_pglibdir == NULL)
++		make_relative_path(ret_path, PKGLIBDIR, PGBINDIR, my_exec_path);
++	else
++		make_relative_path(ret_path, nix_pglibdir, PGBINDIR, my_exec_path);
+ }
+ 
+ /*
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/timescaledb/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/timescaledb/default.nix
new file mode 100644
index 000000000000..3c53054ba7de
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/timescaledb/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchFromGitHub, cmake, postgresql, openssl }:
+
+# # To enable on NixOS:
+# config.services.postgresql = {
+#   extraPlugins = [ pkgs.timescaledb ];
+#   extraConfig = "shared_preload_libraries = 'timescaledb'";
+# }
+
+stdenv.mkDerivation rec {
+  name = "timescaledb-${version}";
+  version = "1.0.0";
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ postgresql openssl ];
+
+  src = fetchFromGitHub {
+    owner  = "timescale";
+    repo   = "timescaledb";
+    rev    = "refs/tags/${version}";
+    sha256 = "1359jc0dw8q3f0iipqfadzs8lvri9qa5w59ziz00x1d09ppw2q40";
+  };
+
+  # Fix the install phase which tries to install into the pgsql extension dir,
+  # and cannot be manually overridden. This is rather fragile but works OK.
+  patchPhase = ''
+    for x in CMakeLists.txt sql/CMakeLists.txt; do
+      substituteInPlace "$x" \
+        --replace 'DESTINATION "''${PG_SHAREDIR}/extension"' "DESTINATION \"$out/share/extension\""
+    done
+
+    for x in src/CMakeLists.txt src/loader/CMakeLists.txt; do
+      substituteInPlace "$x" \
+        --replace 'DESTINATION ''${PG_PKGLIBDIR}' "DESTINATION \"$out/lib\""
+    done
+  '';
+
+  postInstall = ''
+    # work around an annoying bug, by creating $out/bin, so buildEnv doesn't freak out later
+    # see https://github.com/NixOS/nixpkgs/issues/22653
+
+    mkdir -p $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Scales PostgreSQL for time-series data via automatic partitioning across time and space";
+    homepage    = https://www.timescale.com/;
+    maintainers = with maintainers; [ volth ];
+    platforms   = platforms.linux;
+    license     = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/topn/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/topn/default.nix
new file mode 100644
index 000000000000..dae30aadabd0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/topn/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, postgresql, protobufc }:
+
+stdenv.mkDerivation rec {
+  name = "pg_topn-${version}";
+  version = "2.2.0";
+
+  nativeBuildInputs = [ protobufc ];
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "citusdata";
+    repo   = "postgresql-topn";
+    rev    = "refs/tags/v${version}";
+    sha256 = "1i5fn517mdvzfhlcj7fh4z0iniynanshcn7kzhsq19sgci0g31fr";
+  };
+
+  installPhase = ''
+    mkdir -p $out/{lib,share/extension}
+
+    cp *.so      $out/lib
+    cp *.sql     $out/share/extension
+    cp *.control $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Efficient querying of 'top values' for PostgreSQL";
+    homepage    = https://www.citusdata.com/;
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms   = platforms.linux;
+    license     = licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/tsearch_extras/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/tsearch_extras/default.nix
new file mode 100644
index 000000000000..b43a9c51be0c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/tsearch_extras/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, pkgconfig, postgresql }:
+
+stdenv.mkDerivation rec {
+  name = "tsearch-extras-${version}";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner  = "zulip";
+    repo   = "tsearch_extras";
+    rev    = "84e78f00931c4ef261d98197d6b5d94fc141f742"; # no release tag?
+    sha256 = "18j0saqblg3jhrz38splk173xjwdf32c67ymm18m8n5y94h8d2ba";
+  };
+
+  nativenativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ postgresql ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -D tsearch_extras.so -t $out/lib/
+    install -D ./{tsearch_extras--1.0.sql,tsearch_extras.control} -t $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Provides a few PostgreSQL functions for a lower-level data full text search";
+    homepage = https://github.com/zulip/tsearch_extras/;
+    license = licenses.postgresql;
+    maintainers = with maintainers; [ DerTim1 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/sqlite/jdbc/default.nix b/nixpkgs/pkgs/servers/sql/sqlite/jdbc/default.nix
new file mode 100644
index 000000000000..4e40d8761526
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/sqlite/jdbc/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchMavenArtifact }:
+
+stdenv.mkDerivation rec {
+  pname = "sqlite-jdbc";
+  name = "${pname}-${version}";
+  version = "3.25.2";
+
+  src = fetchMavenArtifact {
+    groupId = "org.xerial";
+    artifactId = "sqlite-jdbc";
+    inherit version;
+    sha256 = "1xk5fi2wzq3jspvbdm5hvs78501i14jy3v7x6fjnh5fnpqdacpd4";
+  };
+
+  phases = [ "installPhase" ];
+
+  installPhase = ''
+    install -m444 -D ${src}/share/java/*${name}.jar "$out/share/java/${name}.jar"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/xerial/sqlite-jdbc";
+    description = "Library for accessing and creating SQLite database files in Java";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jraygauthier ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/sql/virtuoso/6.x.nix b/nixpkgs/pkgs/servers/sql/virtuoso/6.x.nix
new file mode 100644
index 000000000000..0daf7533a604
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/virtuoso/6.x.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchurl, libxml2, openssl, readline, gawk }:
+
+stdenv.mkDerivation rec {
+  name = "virtuoso-opensource-6.1.6";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/virtuoso/${name}.tar.gz";
+    sha256 = "0dx0lp7cngdchi0772hp93zzn6sdap7z8s3vay3mzb9xgf0sdgy6";
+  };
+
+  outputs = [ "out" "dev" "doc" ];
+
+  buildInputs = [ libxml2 openssl readline gawk ];
+
+  CPP = "${stdenv.cc}/bin/gcc -E";
+
+  configureFlags = [
+    "--enable-shared" "--disable-all-vads" "--with-readline=${readline.dev}"
+    "--disable-hslookup" "--disable-wbxml2" "--without-iodbc"
+    "--enable-openssl=${openssl.dev}"
+  ];
+
+  postInstall = ''
+    echo Moving documentation
+    mkdir -pv $out/share/doc
+    mv -v $out/share/virtuoso/doc $out/share/doc/${name}
+
+    echo Removing jars and empty directories
+    find $out -name "*.a" -delete -o -name "*.jar" -delete -o -type d -empty -delete
+
+    for f in $out/lib/*.la; do
+      echo "Fixing $f"
+      substituteInPlace $f \
+        --replace "${readline.dev}" "${readline.out}/lib" \
+        --replace "${openssl.dev}/lib" "${openssl.out}/lib"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "SQL/RDF database used by, e.g., KDE-nepomuk";
+    homepage = http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/;
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/virtuoso/7.x.nix b/nixpkgs/pkgs/servers/sql/virtuoso/7.x.nix
new file mode 100644
index 000000000000..17ec49d16131
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/virtuoso/7.x.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, libxml2, openssl, readline, gawk }:
+
+stdenv.mkDerivation rec {
+  name = "virtuoso-opensource-7.2.4.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/virtuoso/${name}.tar.gz";
+    sha256 = "12dqam1gc1v93l0bj0vlpvjqppki6y1hqrlznywxnw0rrz9pb002";
+  };
+
+  buildInputs = [ libxml2 openssl readline gawk ];
+
+  CPP = "${stdenv.cc}/bin/gcc -E";
+
+  configureFlags = [
+    "--enable-shared" "--disable-all-vads" "--with-readline=${readline.dev}"
+    "--disable-hslookup" "--disable-wbxml2" "--without-iodbc"
+    "--enable-openssl=${openssl.dev}"
+  ];
+
+  postInstall=''
+    echo Moving documentation
+    mkdir -pv $out/share/doc
+    mv -v $out/share/virtuoso/doc $out/share/doc/${name}
+    echo Removing jars and empty directories
+    find $out -name "*.a" -delete -o -name "*.jar" -delete -o -type d -empty -delete
+    '';
+
+  meta = with stdenv.lib; {
+    description = "SQL/RDF database used by, e.g., KDE-nepomuk";
+    homepage = http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/;
+    #configure: The current version [...] can only be built on 64bit platforms
+    platforms = [ "x86_64-linux" ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/squid/4.nix b/nixpkgs/pkgs/servers/squid/4.nix
new file mode 100644
index 000000000000..4b6f710242a0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/squid/4.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, perl, openldap, pam, db, cyrus_sasl, libcap
+, expat, libxml2, openssl }:
+
+stdenv.mkDerivation rec {
+  name = "squid-4.4";
+
+  src = fetchurl {
+    url = "http://www.squid-cache.org/Versions/v4/${name}.tar.xz";
+    sha256 = "10pfx44mps5ng1806rqdwx8jv8b2n25kjvx37dcd4x2mgzdfc1a9";
+  };
+
+  buildInputs = [
+    perl openldap db cyrus_sasl expat libxml2 openssl
+  ] ++ stdenv.lib.optionals stdenv.isLinux [ libcap pam ];
+
+  prePatch = ''
+    substituteInPlace configure --replace "/usr/local/include/libxml2" "${libxml2.dev}/include/libxml2"
+  '';
+
+  configureFlags = [
+    "--enable-ipv6"
+    "--disable-strict-error-checking"
+    "--disable-arch-native"
+    "--with-openssl"
+    "--enable-ssl-crtd"
+    "--enable-storeio=ufs,aufs,diskd,rock"
+    "--enable-removal-policies=lru,heap"
+    "--enable-delay-pools"
+    "--enable-x-accelerator-vary"
+  ] ++ stdenv.lib.optional (stdenv.isLinux && !stdenv.hostPlatform.isMusl) "--enable-linux-netfilter";
+
+  meta = with stdenv.lib; {
+    description = "A caching proxy for the Web supporting HTTP, HTTPS, FTP, and more";
+    homepage = http://www.squid-cache.org;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fpletz raskin ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/squid/default.nix b/nixpkgs/pkgs/servers/squid/default.nix
new file mode 100644
index 000000000000..2fdbc29caedf
--- /dev/null
+++ b/nixpkgs/pkgs/servers/squid/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, perl, openldap, pam, db, cyrus_sasl, libcap
+, expat, libxml2, openssl }:
+
+stdenv.mkDerivation rec {
+  name = "squid-3.5.28";
+
+  src = fetchurl {
+    url = "http://www.squid-cache.org/Versions/v3/3.5/${name}.tar.xz";
+    sha256 = "1n4f55g56b11qz4fazrnvgzx5wp6b6637c4qkbd1lrjwwqibchgx";
+  };
+
+  buildInputs = [
+    perl openldap db cyrus_sasl expat libxml2 openssl
+  ] ++ stdenv.lib.optionals stdenv.isLinux [ libcap pam ];
+
+  configureFlags = [
+    "--enable-ipv6"
+    "--disable-strict-error-checking"
+    "--disable-arch-native"
+    "--with-openssl"
+    "--enable-ssl-crtd"
+    "--enable-storeio=ufs,aufs,diskd,rock"
+    "--enable-removal-policies=lru,heap"
+    "--enable-delay-pools"
+    "--enable-x-accelerator-vary"
+  ] ++ stdenv.lib.optional (stdenv.isLinux && !stdenv.hostPlatform.isMusl) "--enable-linux-netfilter";
+
+  meta = with stdenv.lib; {
+    description = "A caching proxy for the Web supporting HTTP, HTTPS, FTP, and more";
+    homepage = http://www.squid-cache.org;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sslh/default.nix b/nixpkgs/pkgs/servers/sslh/default.nix
new file mode 100644
index 000000000000..455409557592
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sslh/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, libcap, libconfig, perl, tcp_wrappers, pcre }:
+
+stdenv.mkDerivation rec {
+  name = "sslh-${version}";
+  version = "1.20";
+
+  src = fetchurl {
+    url = "https://www.rutschle.net/tech/sslh/sslh-v${version}.tar.gz";
+    sha256 = "05jihpjxx094h7hqzgd9v5jmy77ipwrakzzmjyfvpdzw3h59px57";
+  };
+
+  postPatch = "patchShebangs *.sh";
+
+  buildInputs = [ libcap libconfig perl tcp_wrappers pcre ];
+
+  makeFlags = [ "USELIBCAP=1" "USELIBWRAP=1" ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with stdenv.lib; {
+    description = "Applicative Protocol Multiplexer (e.g. share SSH and HTTPS on the same port)";
+    license = licenses.gpl2Plus;
+    homepage = https://www.rutschle.net/tech/sslh/README.html;
+    maintainers = with maintainers; [ koral fpletz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/teleport/default.nix b/nixpkgs/pkgs/servers/teleport/default.nix
new file mode 100644
index 000000000000..0f08d94a052f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/teleport/default.nix
@@ -0,0 +1,41 @@
+# This file was generated by https://github.com/kamilchm/go2nix v2.0-dev
+{ stdenv, buildGoPackage, zip, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "teleport-${version}";
+  version = "2.4.1";
+
+  # This repo has a private submodule "e" which fetchgit cannot handle without failing.
+  src = fetchFromGitHub {
+    owner = "gravitational";
+    repo = "teleport";
+    rev = "v${version}";
+    sha256 = "09kmlihv4aqc39f9cyv2vm0kqgdf9vmdrgds5krnzqdgy3svyg7y";
+  };
+
+  goPackagePath = "github.com/gravitational/teleport";
+  subPackages = [ "tool/tctl" "tool/teleport" "tool/tsh" ];
+  buildInputs = [ zip ];
+  postBuild = ''
+    pushd .
+    cd $NIX_BUILD_TOP/go/src/github.com/gravitational/teleport
+    mkdir -p build
+    echo "making webassets"
+    make build/webassets.zip
+    cat build/webassets.zip >> $NIX_BUILD_TOP/go/bin/teleport
+    rm -fr build/webassets.zip
+    cd $NIX_BUILD_TOP/go/bin
+    zip -q -A teleport
+    popd
+    '';
+
+  dontStrip = true;
+
+  meta = {
+    description = "A SSH CA management suite";
+    homepage = "https://gravitational.com/teleport/";
+    license = stdenv.lib.licenses.asl20;
+    maintainers = [ stdenv.lib.maintainers.tomberek ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/traefik/default.nix b/nixpkgs/pkgs/servers/traefik/default.nix
new file mode 100644
index 000000000000..154b56596771
--- /dev/null
+++ b/nixpkgs/pkgs/servers/traefik/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, bash, go-bindata}:
+
+buildGoPackage rec {
+  name = "traefik-${version}";
+  version = "1.7.4";
+
+  goPackagePath = "github.com/containous/traefik";
+
+  src = fetchFromGitHub {
+    owner = "containous";
+    repo = "traefik";
+    rev = "v${version}";
+    sha256 = "0y2ac8z09s76qf13m7dgzmhqa5868q7g9r2gxxbq3lhhzwik31vp";
+  };
+
+  buildInputs = [ go-bindata bash ];
+
+  buildPhase = ''
+    runHook preBuild
+    (
+      cd go/src/github.com/containous/traefik
+      bash ./script/make.sh generate
+
+      CODENAME=$(awk -F "=" '/CODENAME=/ { print $2}' script/binary)
+      go build -ldflags "\
+        -X github.com/containous/traefik/version.Version=${version} \
+        -X github.com/containous/traefik/version.Codename=$CODENAME \
+      " -a -o $bin/bin/traefik ./cmd/traefik
+    )
+    runHook postBuild
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://traefik.io;
+    description = "A modern reverse proxy";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hamhut1066 vdemeester ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/trezord/default.nix b/nixpkgs/pkgs/servers/trezord/default.nix
new file mode 100644
index 000000000000..98079c37f1f8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/trezord/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "trezord-go-${version}";
+  version = "2.0.25";
+
+  # Fixes Cgo related build failures (see https://github.com/NixOS/nixpkgs/issues/25959 )
+  hardeningDisable = [ "fortify" ];
+
+  goPackagePath = "github.com/trezor/trezord-go";
+
+  src = fetchFromGitHub {
+    owner  = "trezor";
+    repo   = "trezord-go";
+    rev    = "v${version}";
+    sha256 = "151szgfbikijpwqrvqj43kw38kbbgx2g1khlbj6l4925qba7fycd";
+  };
+
+  meta = with stdenv.lib; {
+    description = "TREZOR Communication Daemon aka TREZOR Bridge";
+    homepage = https://trezor.io;
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ canndrew jb55 maintainers."1000101"];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/tt-rss/default.nix b/nixpkgs/pkgs/servers/tt-rss/default.nix
new file mode 100644
index 000000000000..b3714c7a0c28
--- /dev/null
+++ b/nixpkgs/pkgs/servers/tt-rss/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "tt-rss-${version}";
+  version = "2018-04-05";
+  rev = "963c22646b3e1bd544bd957bf34175b996bd6e53";
+
+  src = fetchurl {
+    url = "https://git.tt-rss.org/git/tt-rss/archive/${rev}.tar.gz";
+    sha256 = "02vjw5cag5x0rpiqalfrqf7iz21rp8ml5wnfd8pdkxbr8182bw3h";
+  };
+
+  installPhase = ''
+    mkdir $out
+    cp -ra * $out/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Web-based news feed (RSS/Atom) aggregator";
+    license = licenses.gpl2Plus;
+    homepage = https://tt-rss.org;
+    maintainers = with maintainers; [ globin zohl ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/tt-rss/plugin-tumblr-gdpr/default.nix b/nixpkgs/pkgs/servers/tt-rss/plugin-tumblr-gdpr/default.nix
new file mode 100644
index 000000000000..88ce2d5c3d08
--- /dev/null
+++ b/nixpkgs/pkgs/servers/tt-rss/plugin-tumblr-gdpr/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, ... }: stdenv.mkDerivation rec {
+  name = "tt-rss-plugin-tumblr-gdpr-${version}";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "GregThib";
+    repo = "ttrss-tumblr-gdpr";
+    rev = "v${version}";
+    sha256 = "1qqnzysg1d0b169kr9fbgi50yjnvw7lrvgrl2zjx6px6z61jhv4j";
+  };
+
+  installPhase = ''
+    mkdir -p $out/tumblr_gdpr
+
+    cp init.php $out/tumblr_gdpr
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Plugin for TT-RSS to workaround GDPR in Europe";
+    longDescription = ''
+      Plugin for TT-RSS to workaround GDPR in Europe.
+
+      The name of the plugin in TT-RSS is 'tumblr_gdpr'.
+    '';
+    license = licenses.gpl3;
+    homepage = https://github.com/GregThib/ttrss-tumblr-gdpr;
+    maintainers = with maintainers; [ das_j ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/tt-rss/theme-feedly/default.nix b/nixpkgs/pkgs/servers/tt-rss/theme-feedly/default.nix
new file mode 100644
index 000000000000..4a9312ae459c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/tt-rss/theme-feedly/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub }: stdenv.mkDerivation rec {
+  name = "tt-rss-theme-feedly-${version}";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "levito";
+    repo = "tt-rss-feedly-theme";
+    rev = "v${version}";
+    sha256 = "1n5vci84l0wxsd2k90m2x3j8d7y9kz5fqc6fk6y7r568p1cakg9b";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir $out
+
+    cp -ra feedly feedly.css $out
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Feedly theme for Tiny Tiny RSS";
+    license = licenses.wtfpl;
+    homepage = https://github.com/levito/tt-rss-feedly-theme;
+    maintainers = with maintainers; [ das_j ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/tvheadend/default.nix b/nixpkgs/pkgs/servers/tvheadend/default.nix
new file mode 100644
index 000000000000..674d96e54622
--- /dev/null
+++ b/nixpkgs/pkgs/servers/tvheadend/default.nix
@@ -0,0 +1,66 @@
+{ stdenv, fetchFromGitHub, cmake, makeWrapper, pkgconfig
+, avahi, dbus, gettext, git, gnutar, gzip, bzip2, ffmpeg, libiconv, openssl, python
+, which, zlib }:
+
+let
+  version = "4.2.7";
+
+in stdenv.mkDerivation rec {
+  name = "tvheadend-${version}";
+
+  src = fetchFromGitHub {
+    owner  = "tvheadend";
+    repo   = "tvheadend";
+    rev    = "v${version}";
+    sha256 = "09q6lddkld22z9nbxx5v3v3z5yvcnl4lgjirvrdprwkv67fld70g";
+  };
+
+  buildInputs = [
+    avahi dbus gettext git gnutar gzip bzip2 ffmpeg libiconv openssl python
+    which zlib
+  ];
+
+  nativeBuildInputs = [ cmake makeWrapper pkgconfig ];
+
+  enableParallelBuilding = true;
+
+  # disable dvbscan, as having it enabled causes a network download which
+  # cannot happen during build.
+  configureFlags = [
+    "--disable-dvbscan"
+    "--disable-bintray_cache"
+    "--disable-ffmpeg_static"
+    "--disable-hdhomerun_client"
+    "--disable-hdhomerun_static"
+  ];
+
+  dontUseCmakeConfigure = true;
+
+  preConfigure = ''
+    patchShebangs ./configure
+
+    substituteInPlace src/config.c \
+      --replace /usr/bin/tar ${gnutar}/bin/tar
+
+    # the version detection script `support/version` reads this file if it
+    # exists, so let's just use that
+    echo ${version} > rpm/version
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/tvheadend \
+      --prefix PATH : ${stdenv.lib.makeBinPath [ bzip2 ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "TV streaming server";
+    longDescription = ''
+	Tvheadend is a TV streaming server and recorder for Linux, FreeBSD and Android
+        supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, IPTV, SAT>IP and HDHomeRun as input sources.
+	Tvheadend offers the HTTP (VLC, MPlayer), HTSP (Kodi, Movian) and SAT>IP streaming.'';
+    homepage = https://tvheadend.org;
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ simonvandel ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/u9fs/default.nix b/nixpkgs/pkgs/servers/u9fs/default.nix
new file mode 100644
index 000000000000..b42fe004af33
--- /dev/null
+++ b/nixpkgs/pkgs/servers/u9fs/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchhg }:
+
+stdenv.mkDerivation {
+  name = "u9fs-20110513";
+  src = fetchhg {
+    url = http://bitbucket.org/plan9-from-bell-labs/u9fs;
+    rev = "9474edb23b11";
+    sha256 = "0irwyk8vnvx0fmz8lmbdb2jrlvas8imr61jr76a1pkwi9wpf2wv6";
+  };
+
+  installPhase =
+    ''
+      mkdir -p $out/bin $out/share/man4
+      cp u9fs $out/bin; cp u9fs.man $out/share/man4
+    '';
+
+  meta = with stdenv.lib;
+    { description = "Serve 9P from Unix";
+      homepage = http://plan9.bell-labs.com/magic/man2html/4/u9fs;
+      license = licenses.free;
+      maintainers = [ maintainers.ehmry ];
+      platforms = platforms.unix;
+    };
+}
diff --git a/nixpkgs/pkgs/servers/udpt/default.nix b/nixpkgs/pkgs/servers/udpt/default.nix
new file mode 100644
index 000000000000..9e9816c941d9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/udpt/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchFromGitHub, boost, sqlite, cmake, gtest }:
+
+stdenv.mkDerivation rec {
+  name = "udpt-${version}";
+  version = "2017-09-27";
+
+  enableParallelBuilding = true;
+
+  # Suitable for a network facing daemon.
+  hardeningEnable = [ "pie" ];
+
+  src = fetchFromGitHub {
+    owner = "naim94a";
+    repo = "udpt";
+    rev = "e0dffc83c8ce76b08a41a4abbd5f8065535d534f";
+    sha256 = "187dw96mzgcmh4k9pvfpb7ckbb8d4vlikamr2x8vkpwzgjs3xd6g";
+  };
+
+  doCheck = true;
+
+  checkPhase = ''
+    runHook preCheck
+
+    make test
+
+    runHook postCheck
+  '';
+
+  buildInputs = [ boost sqlite cmake gtest ];
+
+  postPatch = ''
+    # Enabling optimization (implied by fortify hardening) causes htons
+    # to be re-defined as a macro, turning this use of :: into a syntax error.
+    sed -i '104a#undef htons' src/udpTracker.cpp
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/etc/
+    cp udpt $out/bin
+    cp ../udpt.conf $out/etc/
+    # without this, the resulting binary is unstripped.
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "A lightweight UDP torrent tracker";
+    homepage = https://naim94a.github.io/udpt;
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/uftp/default.nix b/nixpkgs/pkgs/servers/uftp/default.nix
new file mode 100644
index 000000000000..768fdf0b46f8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/uftp/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, openssl }:
+
+stdenv.mkDerivation rec {
+  name = "uftp-${version}";
+  version = "4.9.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/uftp-multicast/source-tar/uftp-${version}.tar.gz";
+    sha256 = "16g54372xy5apk485xz9bp1hfci15mssw7m7givls4lpwhc67379";
+  };
+
+  buildInputs = [ openssl ];
+
+  outputs = [ "out" "man" ];
+
+  patchPhase = ''
+    substituteInPlace makefile --replace gcc cc
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $man/share/man/man1
+    cp {uftp,uftpd,uftp_keymgt,uftpproxyd} $out/bin/
+    cp {uftp.1,uftpd.1,uftp_keymgt.1,uftpproxyd.1} $man/share/man/man1
+  '';
+
+  meta = {
+    description = "Encrypted UDP based FTP with multicast";
+    homepage = http://uftp-multicast.sourceforge.net/;
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = [ stdenv.lib.maintainers.fadenb ];
+    platforms = with stdenv.lib.platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/uhub/default.nix b/nixpkgs/pkgs/servers/uhub/default.nix
new file mode 100644
index 000000000000..52866784faa9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/uhub/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, fetchpatch, fetchFromGitHub, cmake, openssl, sqlite, pkgconfig, systemd
+, tlsSupport ? false }:
+
+assert tlsSupport -> openssl != null;
+
+stdenv.mkDerivation rec {
+  name = "uhub-${version}";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "janvidar";
+    repo = "uhub";
+    rev = version;
+    sha256 = "0zdbxfvw7apmfhqgsfkfp4pn9iflzwdn0zwvzymm5inswfc00pxg";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ cmake sqlite systemd ] ++ stdenv.lib.optional tlsSupport openssl;
+
+  outputs = [ "out"
+    "mod_example"
+    "mod_welcome"
+    "mod_logging"
+    "mod_auth_simple"
+    "mod_auth_sqlite"
+    "mod_chat_history"
+    "mod_chat_only"
+    "mod_topic"
+    "mod_no_guest_downloads"
+  ];
+
+  patches = [
+    ./plugin-dir.patch
+    # fix aarch64 build: https://github.com/janvidar/uhub/issues/46
+    (fetchpatch {
+      url = "https://github.com/janvidar/uhub/pull/47.patch";
+      sha256 = "07yik6za89ar5bxm7m2183i7f6hfbawbxvd4vs02n1zr2fgfxmiq";
+    })
+
+    # Fixed compilation on systemd > 210
+    (fetchpatch {
+      url = "https://github.com/janvidar/uhub/commit/70f2a43f676cdda5961950a8d9a21e12d34993f8.diff";
+      sha256 = "1jp8fvw6f9jh0sdjml9mahkk6p6b96p6rzg2y601mnnbcdj8y8xp";
+    })
+  ];
+
+  cmakeFlags = ''
+    -DSYSTEMD_SUPPORT=ON
+    ${if tlsSupport then "-DSSL_SUPPORT=ON" else "-DSSL_SUPPORT=OFF"}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "High performance peer-to-peer hub for the ADC network";
+    homepage = https://www.uhub.org/;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.ehmry ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/uhub/plugin-dir.patch b/nixpkgs/pkgs/servers/uhub/plugin-dir.patch
new file mode 100644
index 000000000000..d29d600425ff
--- /dev/null
+++ b/nixpkgs/pkgs/servers/uhub/plugin-dir.patch
@@ -0,0 +1,19 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -241,8 +241,14 @@
+ 
+ if (UNIX)
+ 	install( TARGETS uhub uhub-passwd RUNTIME DESTINATION bin )
+-	install( TARGETS mod_example mod_welcome mod_logging mod_auth_simple mod_auth_sqlite mod_chat_history mod_chat_history_sqlite mod_chat_only mod_topic mod_no_guest_downloads DESTINATION /usr/lib/uhub/ OPTIONAL )
+-	install( FILES ${CMAKE_SOURCE_DIR}/doc/uhub.conf ${CMAKE_SOURCE_DIR}/doc/plugins.conf ${CMAKE_SOURCE_DIR}/doc/rules.txt ${CMAKE_SOURCE_DIR}/doc/motd.txt DESTINATION /etc/uhub OPTIONAL )
++
++    set( PLUGINS mod_example mod_welcome mod_logging mod_auth_simple mod_auth_sqlite mod_chat_history mod_chat_only mod_topic mod_no_guest_downloads )
++
++    foreach( PLUGIN ${PLUGINS} )
++        install( TARGETS ${PLUGIN} DESTINATION $ENV{${PLUGIN}} OPTIONAL )
++    endforeach( PLUGIN )
++
++	install( FILES ${CMAKE_SOURCE_DIR}/doc/uhub.conf ${CMAKE_SOURCE_DIR}/doc/plugins.conf ${CMAKE_SOURCE_DIR}/doc/rules.txt ${CMAKE_SOURCE_DIR}/doc/motd.txt DESTINATION doc/ OPTIONAL )
+ endif()
+ 
+ 
diff --git a/nixpkgs/pkgs/servers/ums/default.nix b/nixpkgs/pkgs/servers/ums/default.nix
new file mode 100644
index 000000000000..9bccd5b99fb0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/ums/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, makeWrapper
+, libzen, libmediainfo , jre8
+}:
+
+stdenv.mkDerivation rec {
+  name = "ums-${version}";
+  version = "6.2.2";
+  
+  src = fetchurl {
+    url = "mirror://sourceforge/project/unimediaserver/Official%20Releases/Linux/" + stdenv.lib.toUpper "${name}" + "-Java8.tgz";
+    sha256 = "1qa999la9hixy0pdj9phjvr6lwqycgdvm94nc1606vz0ivf95b15";
+    name = "${name}.tgz";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    cp -a . $out/
+    mkdir $out/bin
+    mv $out/documentation /$out/doc
+
+    makeWrapper "$out/UMS.sh" "$out/bin/ums" \
+      --prefix LD_LIBRARY_PATH ":" "${stdenv.lib.makeLibraryPath [ libzen libmediainfo] }" \
+      --set JAVA_HOME "${jre8}"
+  '';
+
+  meta = {
+      description = "Universal Media Server: a DLNA-compliant UPnP Media Server";
+      license = stdenv.lib.licenses.gpl2;
+      platforms = stdenv.lib.platforms.linux;
+      maintainers = [ stdenv.lib.maintainers.thall ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/unfs3/default.nix b/nixpkgs/pkgs/servers/unfs3/default.nix
new file mode 100644
index 000000000000..4304dc229e35
--- /dev/null
+++ b/nixpkgs/pkgs/servers/unfs3/default.nix
@@ -0,0 +1,33 @@
+{ fetchurl, stdenv, flex, bison }:
+
+stdenv.mkDerivation rec {
+  name = "unfs3-0.9.22";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/unfs3/${name}.tar.gz";
+    sha256 = "076zkyqkn56q0a8n3h65n1a68fknk4hrrp6mbhajq5s1wp5248j8";
+  };
+
+  nativeBuildInputs = [ flex bison ];
+
+  configureFlags = [ "--disable-shared" ];
+
+  doCheck = false;                                # no test suite
+
+  meta = {
+    description = "User-space NFSv3 file system server";
+
+    longDescription =
+      '' UNFS3 is a user-space implementation of the NFSv3 server
+         specification.  It provides a daemon for the MOUNT and NFS
+         protocols, which are used by NFS clients for accessing files on the
+         server.
+      '';
+
+    homepage = http://unfs3.sourceforge.net/;
+
+    license = stdenv.lib.licenses.bsd3;
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/unifi/default.nix b/nixpkgs/pkgs/servers/unifi/default.nix
new file mode 100644
index 000000000000..fd1787d4c99d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/unifi/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, dpkg, fetchurl }:
+
+let
+  generic = { version, sha256, suffix ? "" }:
+  stdenv.mkDerivation rec {
+    name = "unifi-controller-${version}";
+
+    src = fetchurl {
+      url = "https://dl.ubnt.com/unifi/${version}${suffix}/unifi_sysvinit_all.deb";
+      inherit sha256;
+    };
+
+    nativeBuildInputs = [ dpkg ];
+
+    unpackPhase = ''
+      runHook preUnpack
+      dpkg-deb -x $src ./
+      runHook postUnpack
+    '';
+
+    doConfigure = false;
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out
+      cd ./usr/lib/unifi
+      cp -ar dl lib webapps $out
+
+      runHook postInstall
+    '';
+
+    meta = with stdenv.lib; {
+      homepage = http://www.ubnt.com/;
+      description = "Controller for Ubiquiti UniFi access points";
+      license = licenses.unfree;
+      platforms = platforms.unix;
+      maintainers = with maintainers; [ wkennington ];
+    };
+  };
+
+in rec {
+
+  # https://help.ubnt.com/hc/en-us/articles/115000441548-UniFi-Current-Controller-Versions
+
+  unifiLTS = generic {
+    version = "5.6.39";
+    sha256  = "025qq517j32r1pnabg2q8lhy65c6qsk17kzw3aijhrc2gpgj2pa7";
+  };
+
+  unifiStable = generic {
+    version = "5.9.29";
+    sha256  = "0djdjh7lwaa5nvhvz2yh6dn07iad5nq4jpab7rc909sljl6wvwvx";
+  };
+
+  unifiTesting = unifiStable;
+}
diff --git a/nixpkgs/pkgs/servers/uwsgi/default.nix b/nixpkgs/pkgs/servers/uwsgi/default.nix
new file mode 100644
index 000000000000..074b19724d28
--- /dev/null
+++ b/nixpkgs/pkgs/servers/uwsgi/default.nix
@@ -0,0 +1,101 @@
+{ stdenv, lib, fetchurl, pkgconfig, jansson, pcre
+# plugins: list of strings, eg. [ "python2" "python3" ]
+, plugins
+, pam, withPAM ? false
+, systemd, withSystemd ? false
+, python2, python3, ncurses
+, ruby, php-embed, mysql
+}:
+
+let pythonPlugin = pkg : lib.nameValuePair "python${if pkg ? isPy2 then "2" else "3"}" {
+                           interpreter = pkg.interpreter;
+                           path = "plugins/python";
+                           inputs = [ pkg ncurses ];
+                           install = ''
+                             install -Dm644 uwsgidecorators.py $out/${pkg.sitePackages}/uwsgidecorators.py
+                             ${pkg.executable} -m compileall $out/${pkg.sitePackages}/
+                             ${pkg.executable} -O -m compileall $out/${pkg.sitePackages}/
+                           '';
+                         };
+
+    available = lib.listToAttrs [
+                  (pythonPlugin python2)
+                  (pythonPlugin python3)
+                  (lib.nameValuePair "rack" {
+                    path = "plugins/rack";
+                    inputs = [ ruby ];
+                  })
+                  (lib.nameValuePair "cgi" {
+                    # usage: https://uwsgi-docs.readthedocs.io/en/latest/CGI.html?highlight=cgi
+                    path = "plugins/cgi";
+                    inputs = [ ];
+                  })
+                  (lib.nameValuePair "php" {
+                    # usage: https://uwsgi-docs.readthedocs.io/en/latest/PHP.html#running-php-apps-with-nginx
+                    path = "plugins/php";
+                    inputs = [ php-embed ] ++ php-embed.buildInputs;
+                    NIX_CFLAGS_LINK = [ "-L${mysql.connector-c}/lib/mysql" ];
+                  })
+                ];
+
+    getPlugin = name:
+      let all = lib.concatStringsSep ", " (lib.attrNames available);
+      in if lib.hasAttr name available
+         then lib.getAttr name available // { inherit name; }
+         else throw "Unknown UWSGI plugin ${name}, available : ${all}";
+
+    needed = builtins.map getPlugin plugins;
+in
+
+stdenv.mkDerivation rec {
+  name = "uwsgi-${version}";
+  version = "2.0.17.1";
+
+  src = fetchurl {
+    url = "https://projects.unbit.it/downloads/${name}.tar.gz";
+    sha256 = "0xxjb9dyivq5531birvxq2gnyxf2x5q7gz54440acra6qwsq4cfj";
+  };
+
+  nativeBuildInputs = [ python3 pkgconfig ];
+
+  buildInputs =  [ jansson pcre ]
+              ++ lib.optional withPAM pam
+              ++ lib.optional withSystemd systemd
+              ++ lib.concatMap (x: x.inputs) needed
+              ;
+
+  basePlugins =  lib.concatStringsSep ","
+                 (  lib.optional withPAM "pam"
+                 ++ lib.optional withSystemd "systemd_logger"
+                 );
+
+  passthru = {
+    inherit python2 python3;
+  };
+
+  configurePhase = ''
+    export pluginDir=$out/lib/uwsgi
+    substituteAll ${./nixos.ini} buildconf/nixos.ini
+  '';
+
+  buildPhase = ''
+    mkdir -p $pluginDir
+    python3 uwsgiconfig.py --build nixos
+    ${lib.concatMapStringsSep ";" (x: "${x.preBuild or ""}\n ${x.interpreter or "python3"} uwsgiconfig.py --plugin ${x.path} nixos ${x.name}") needed}
+  '';
+
+  installPhase = ''
+    install -Dm755 uwsgi $out/bin/uwsgi
+    ${lib.concatMapStringsSep "\n" (x: x.install or "") needed}
+  '';
+
+  NIX_CFLAGS_LINK = lib.optional withSystemd "-lsystemd" ++ lib.concatMap (x: x.NIX_CFLAGS_LINK or []) needed;
+
+  meta = with stdenv.lib; {
+    homepage = https://uwsgi-docs.readthedocs.org/en/latest/;
+    description = "A fast, self-healing and developer/sysadmin-friendly application container server coded in pure C";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ abbradar schneefux ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/uwsgi/nixos.ini b/nixpkgs/pkgs/servers/uwsgi/nixos.ini
new file mode 100644
index 000000000000..51bc6da33f6c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/uwsgi/nixos.ini
@@ -0,0 +1,6 @@
+[uwsgi]
+plugin_dir = @pluginDir@
+main_plugin = @basePlugins@
+json = true
+yaml = false
+inherit = base
diff --git a/nixpkgs/pkgs/servers/varnish/default.nix b/nixpkgs/pkgs/servers/varnish/default.nix
new file mode 100644
index 000000000000..e447035e32aa
--- /dev/null
+++ b/nixpkgs/pkgs/servers/varnish/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchurl, pcre, libxslt, groff, ncurses, pkgconfig, readline, libedit
+, python2, makeWrapper }:
+
+let
+  common = { version, sha256, extraBuildInputs ? [] }:
+    stdenv.mkDerivation rec {
+      name = "varnish-${version}";
+
+      src = fetchurl {
+        url = "https://varnish-cache.org/_downloads/${name}.tgz";
+        inherit sha256;
+      };
+
+      nativeBuildInputs = [ pkgconfig ];
+      buildInputs = [
+        pcre libxslt groff ncurses readline python2 libedit
+        python2.pkgs.docutils makeWrapper
+      ] ++ extraBuildInputs;
+
+      buildFlags = "localstatedir=/var/spool";
+
+      postInstall = ''
+        wrapProgram "$out/sbin/varnishd" --prefix PATH : "${stdenv.lib.makeBinPath [ stdenv.cc ]}"
+      '';
+
+      # https://github.com/varnishcache/varnish-cache/issues/1875
+      NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isi686 "-fexcess-precision=standard";
+
+      outputs = [ "out" "dev" "man" ];
+
+      meta = with stdenv.lib; {
+        description = "Web application accelerator also known as a caching HTTP reverse proxy";
+        homepage = https://www.varnish-cache.org;
+        license = licenses.bsd2;
+        maintainers = with maintainers; [ garbas fpletz ];
+        platforms = platforms.unix;
+      };
+    };
+in
+{
+  varnish4 = common {
+    version = "4.1.10";
+    sha256 = "08kwx0il6cqxsx3897042plh1yxjaanbaqjbspfl0xgvyvxk6j1n";
+  };
+  varnish5 = common {
+    version = "5.2.1";
+    sha256 = "1cqlj12m426c1lak1hr1fx5zcfsjjvka3hfirz47hvy1g2fjqidq";
+  };
+  varnish6 = common {
+    version = "6.1.1";
+    sha256 = "0gf9hzzrr1lndbbqi8cwlfasi7l517cy3nbgna88i78lm247rvp0";
+    extraBuildInputs = [ python2.pkgs.sphinx ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/varnish/digest.nix b/nixpkgs/pkgs/servers/varnish/digest.nix
new file mode 100644
index 000000000000..2ccb0419c042
--- /dev/null
+++ b/nixpkgs/pkgs/servers/varnish/digest.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, varnish, libmhash, docutils }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.2";
+  name = "${varnish.name}-digest-${version}";
+
+  src = fetchFromGitHub {
+    owner = "varnish";
+    repo = "libvmod-digest";
+    rev = "libvmod-digest-${version}";
+    sha256 = "0jwkqqalydn0pwfdhirl5zjhbc3hldvhh09hxrahibr72fgmgpbx";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig docutils ];
+  buildInputs = [ varnish libmhash ];
+
+  postPatch = ''
+    substituteInPlace autogen.sh  --replace "''${dataroot}/aclocal"                  "${varnish.dev}/share/aclocal"
+    substituteInPlace Makefile.am --replace "''${LIBVARNISHAPI_DATAROOTDIR}/aclocal" "${varnish.dev}/share/aclocal"
+  '';
+
+  configureFlags = [ "VMOD_DIR=$(out)/lib/varnish/vmods" ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Digest and HMAC vmod";
+    homepage = https://github.com/varnish/libvmod-digest;
+    inherit (varnish.meta) license platforms maintainers;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/varnish/dynamic.nix b/nixpkgs/pkgs/servers/varnish/dynamic.nix
new file mode 100644
index 000000000000..711bc1cf78f5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/varnish/dynamic.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, varnish, python, docutils }:
+
+stdenv.mkDerivation rec {
+  version = "0.3";
+  name = "${varnish.name}-dynamic-${version}";
+
+  src = fetchFromGitHub {
+    owner = "nigoroll";
+    repo = "libvmod-dynamic";
+    rev = "475be183fddbd727c3d2523f0518effa9aa881f8"; # 5.2 branch for Varnish-5.2 https://github.com/nigoroll/libvmod-dynamic/commits/5.2
+    sha256 = "12a42lbv0vf6fn3qnvngw893kmbd006f8pgab4ir7irc8855xjgf";
+  };
+
+  nativeBuildInputs = [ pkgconfig docutils autoreconfHook ];
+  buildInputs = [ varnish python ];
+  postPatch = ''
+    substituteInPlace Makefile.am --replace "''${LIBVARNISHAPI_DATAROOTDIR}/aclocal" "${varnish.dev}/share/aclocal"
+  '';
+  configureFlags = [ "VMOD_DIR=$(out)/lib/varnish/vmods" ];
+
+  meta = with stdenv.lib; {
+    description = "Dynamic director similar to the DNS director from Varnish 3";
+    homepage = https://github.com/nigoroll/libvmod-dynamic;
+    inherit (varnish.meta) license platforms maintainers;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/varnish/geoip.nix b/nixpkgs/pkgs/servers/varnish/geoip.nix
new file mode 100644
index 000000000000..d1790252065c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/varnish/geoip.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchpatch, fetchFromGitHub, autoreconfHook, pkgconfig, varnish, geoip, docutils }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.2";
+  name = "${varnish.name}-geoip-${version}";
+
+  src = fetchFromGitHub {
+    owner = "varnish";
+    repo = "libvmod-geoip";
+    rev = "libvmod-geoip-${version}";
+    sha256 = "1gmadayqh3dais14c4skvd47w8h4kyifg7kcw034i0777z5hfpyn";
+  };
+
+  patches = [
+    # IPv6 support
+    (fetchpatch {
+      url = https://github.com/volth/libvmod-geoip-1/commit/0966fe8.patch;
+      sha256 = "053im8h2y8qzs37g95ksr00sf625p23r5ps1j0a2h4lfg70vf4ry";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig docutils ];
+  buildInputs = [ varnish geoip ];
+  configureFlags = [ "VMOD_DIR=$(out)/lib/varnish/vmods" ];
+
+  meta = with stdenv.lib; {
+    description = "GeoIP Varnish module by Varnish Software";
+    homepage = https://github.com/varnish/libvmod-geoip;
+    inherit (varnish.meta) license platforms maintainers;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/varnish/modules.nix b/nixpkgs/pkgs/servers/varnish/modules.nix
new file mode 100644
index 000000000000..7775221d1638
--- /dev/null
+++ b/nixpkgs/pkgs/servers/varnish/modules.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, varnish, python, docutils, removeReferencesTo }:
+
+stdenv.mkDerivation rec {
+  version = "0.14.0";
+  name = "${varnish.name}-modules-${version}";
+
+  src = fetchFromGitHub {
+    owner = "varnish";
+    repo = "varnish-modules";
+    rev = version;
+    sha256 = "17fkbr4i70qgdqsrx1x28ag20xkfyz1v3q3d3ywmv409aczqhm40";
+  };
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook docutils removeReferencesTo ];
+  buildInputs = [ varnish python ];
+
+  postPatch = ''
+    substituteInPlace bootstrap   --replace "''${dataroot}/aclocal"                  "${varnish.dev}/share/aclocal"
+    substituteInPlace Makefile.am --replace "''${LIBVARNISHAPI_DATAROOTDIR}/aclocal" "${varnish.dev}/share/aclocal"
+  '';
+
+  postInstall = "find $out -type f -exec remove-references-to -t ${varnish.dev} '{}' +"; # varnish.dev captured only as __FILE__ in assert messages
+
+  meta = with stdenv.lib; {
+    description = "Collection of Varnish Cache modules (vmods) by Varnish Software";
+    homepage = https://github.com/varnish/varnish-modules;
+    inherit (varnish.meta) license platforms maintainers;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/varnish/packages.nix b/nixpkgs/pkgs/servers/varnish/packages.nix
new file mode 100644
index 000000000000..f468ac58e6cd
--- /dev/null
+++ b/nixpkgs/pkgs/servers/varnish/packages.nix
@@ -0,0 +1,22 @@
+{ callPackage, varnish4, varnish5, varnish6 }:
+
+{
+  varnish4Packages = {
+    varnish = varnish4;
+    digest   = callPackage ./digest.nix   { varnish = varnish4; };
+    rtstatus = callPackage ./rtstatus.nix { varnish = varnish4; }; # varnish4 only
+    modules  = callPackage ./modules.nix  { varnish = varnish4; }; # varnish4 and varnish5 only
+    geoip    = callPackage ./geoip.nix    { varnish = varnish4; }; # varnish4 and varnish5 only
+  };
+  varnish5Packages = {
+    varnish = varnish5;
+    digest   = callPackage ./digest.nix   { varnish = varnish5; };
+    dynamic  = callPackage ./dynamic.nix  { varnish = varnish5; }; # varnish5 only (upstream has a separate branch for varnish4)
+    modules  = callPackage ./modules.nix  { varnish = varnish5; }; # varnish4 and varnish5 only
+    geoip    = callPackage ./geoip.nix    { varnish = varnish5; }; # varnish4 and varnish5 only
+  };
+  varnish6Packages = {
+    varnish = varnish6;
+    digest   = callPackage ./digest.nix   { varnish = varnish6; };
+  };
+}
diff --git a/nixpkgs/pkgs/servers/varnish/rtstatus.nix b/nixpkgs/pkgs/servers/varnish/rtstatus.nix
new file mode 100644
index 000000000000..99c0bb176597
--- /dev/null
+++ b/nixpkgs/pkgs/servers/varnish/rtstatus.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, pkgconfig, varnish, python, docutils }:
+
+stdenv.mkDerivation rec {
+  version = "1.2.0";
+  name = "${varnish.name}-rtstatus-${version}";
+
+  src = fetchurl {
+    url = "https://download.varnish-software.com/libvmod-rtstatus/libvmod-rtstatus-${version}.tar.gz";
+    sha256 = "0hll1aspgpv1daw5sdbn5w1d6birchxgapzb6zi1nhahjlimy4ly";
+  };
+
+  nativeBuildInputs = [ pkgconfig docutils ];
+  buildInputs = [ varnish python ];
+  configureFlags = [ "VMOD_DIR=$(out)/lib/varnish/vmods" ];
+
+  meta = with stdenv.lib; {
+    description = "Varnish realtime status page";
+    homepage = https://github.com/varnish/libvmod-rtstatus;
+    inherit (varnish.meta) license platforms maintainers;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/default.nix b/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/default.nix
new file mode 100644
index 000000000000..e4899597de4f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, pkgs, buildEnv, fetchFromGitHub, nodejs-6_x, phantomjs2, which }:
+
+let
+  nodePackages = import ./node.nix {
+    inherit pkgs;
+    system = stdenv.system;
+  };
+
+  phantomjs-prebuilt = nodePackages."phantomjs-prebuilt-^2.1.12".override (oldAttrs: {
+    buildInputs = oldAttrs.buildInputs ++ [ phantomjs2 ];
+  });
+in
+
+stdenv.mkDerivation {
+  name = "codemirror-hackmdio-05-07-2018";
+
+  src = fetchFromGitHub {
+    owner = "hackmdio";
+    repo = "CodeMirror";
+    rev = "df412731ed3923124f9a43f60e84bdf855eb843a";
+    sha256 = "02v2wccv9sjdda9x45ib8d08i1pc4b8kwg3p6qc314wqq89nhniw";
+  };
+
+  nativeBuildInputs = [ which ];
+  buildInputs = [ nodejs-6_x phantomjs-prebuilt ] ++ (stdenv.lib.attrVals [
+    "blint-^1"
+    "node-static-0.6.0"
+    "rollup-^0.41.0"
+    "rollup-plugin-buble-^0.15.0"
+    "rollup-watch-^3.2.0"
+    "uglify-js-^2.8.15"
+  ] nodePackages);
+
+  buildPhase = ''
+    patchShebangs .
+    npm run build
+    node release
+  '';
+
+  installPhase = ''
+    mkdir -p $out/lib/node_modules/codemirror
+    cp -R {codemirror.min.js,addon,bin,keymap,lib,mode,theme} $out/lib/node_modules/codemirror/
+    ln -s ${nodePackages."url-loader-^0.5.7"}/lib/node_modules/url-loader \
+      $out/lib/node_modules
+  '';
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/deps.json b/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/deps.json
new file mode 100644
index 000000000000..672e413a4a9e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/deps.json
@@ -0,0 +1,8 @@
+[ { "blint": "^1" }
+, { "node-static": "0.6.0" }
+, { "phantomjs-prebuilt": "^2.1.12" }
+, { "rollup": "^0.41.0" }
+, { "rollup-plugin-buble": "^0.15.0" }
+, { "rollup-watch": "^3.2.0" }
+, { "uglify-js": "^2.8.15" }
+, { "url-loader": "^0.5.7" } ]
diff --git a/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/generate.sh b/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/generate.sh
new file mode 100755
index 000000000000..c42da7340c31
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/generate.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p nodePackages.node2nix
+
+node2nix -6 -i deps.json \
+  -e ../../../../development/node-packages/node-env.nix \
+  --no-copy-node-env \
+  -c node.nix
diff --git a/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/node-packages.nix b/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/node-packages.nix
new file mode 100644
index 000000000000..a2d475d5831a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/node-packages.nix
@@ -0,0 +1,1459 @@
+# This file has been generated by node2nix 1.6.0. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
+
+let
+  sources = {
+    "acorn-3.3.0" = {
+      name = "acorn";
+      packageName = "acorn";
+      version = "3.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz";
+        sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a";
+      };
+    };
+    "acorn-5.7.1" = {
+      name = "acorn";
+      packageName = "acorn";
+      version = "5.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz";
+        sha512 = "d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==";
+      };
+    };
+    "acorn-jsx-3.0.1" = {
+      name = "acorn-jsx";
+      packageName = "acorn-jsx";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz";
+        sha1 = "afdf9488fb1ecefc8348f6fb22f464e32a58b36b";
+      };
+    };
+    "acorn-object-spread-1.0.0" = {
+      name = "acorn-object-spread";
+      packageName = "acorn-object-spread";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn-object-spread/-/acorn-object-spread-1.0.0.tgz";
+        sha1 = "48ead0f4a8eb16995a17a0db9ffc6acaada4ba68";
+      };
+    };
+    "ajv-5.5.2" = {
+      name = "ajv";
+      packageName = "ajv";
+      version = "5.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz";
+        sha1 = "73b5eeca3fab653e3d3f9422b341ad42205dc965";
+      };
+    };
+    "align-text-0.1.4" = {
+      name = "align-text";
+      packageName = "align-text";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz";
+        sha1 = "0cd90a561093f35d0a99256c22b7069433fad117";
+      };
+    };
+    "ansi-regex-2.1.1" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
+        sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
+      };
+    };
+    "ansi-styles-1.0.0" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz";
+        sha1 = "cb102df1c56f5123eab8b67cd7b98027a0279178";
+      };
+    };
+    "ansi-styles-2.2.1" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
+        sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
+      };
+    };
+    "asn1-0.2.4" = {
+      name = "asn1";
+      packageName = "asn1";
+      version = "0.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz";
+        sha512 = "jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==";
+      };
+    };
+    "assert-plus-1.0.0" = {
+      name = "assert-plus";
+      packageName = "assert-plus";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
+        sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
+      };
+    };
+    "asynckit-0.4.0" = {
+      name = "asynckit";
+      packageName = "asynckit";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
+        sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
+      };
+    };
+    "aws-sign2-0.7.0" = {
+      name = "aws-sign2";
+      packageName = "aws-sign2";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz";
+        sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
+      };
+    };
+    "aws4-1.8.0" = {
+      name = "aws4";
+      packageName = "aws4";
+      version = "1.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz";
+        sha512 = "ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==";
+      };
+    };
+    "balanced-match-1.0.0" = {
+      name = "balanced-match";
+      packageName = "balanced-match";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz";
+        sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
+      };
+    };
+    "bcrypt-pbkdf-1.0.2" = {
+      name = "bcrypt-pbkdf";
+      packageName = "bcrypt-pbkdf";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
+        sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e";
+      };
+    };
+    "big.js-3.2.0" = {
+      name = "big.js";
+      packageName = "big.js";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz";
+        sha512 = "+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==";
+      };
+    };
+    "brace-expansion-1.1.11" = {
+      name = "brace-expansion";
+      packageName = "brace-expansion";
+      version = "1.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";
+        sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==";
+      };
+    };
+    "buble-0.15.2" = {
+      name = "buble";
+      packageName = "buble";
+      version = "0.15.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buble/-/buble-0.15.2.tgz";
+        sha1 = "547fc47483f8e5e8176d82aa5ebccb183b02d613";
+      };
+    };
+    "buffer-from-1.1.1" = {
+      name = "buffer-from";
+      packageName = "buffer-from";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz";
+        sha512 = "MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==";
+      };
+    };
+    "camelcase-1.2.1" = {
+      name = "camelcase";
+      packageName = "camelcase";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz";
+        sha1 = "9bb5304d2e0b56698b2c758b08a3eaa9daa58a39";
+      };
+    };
+    "caseless-0.12.0" = {
+      name = "caseless";
+      packageName = "caseless";
+      version = "0.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz";
+        sha1 = "1b681c21ff84033c826543090689420d187151dc";
+      };
+    };
+    "center-align-0.1.3" = {
+      name = "center-align";
+      packageName = "center-align";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz";
+        sha1 = "aa0d32629b6ee972200411cbd4461c907bc2b7ad";
+      };
+    };
+    "chalk-0.4.0" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz";
+        sha1 = "5199a3ddcd0c1efe23bc08c1b027b06176e0c64f";
+      };
+    };
+    "chalk-1.1.3" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";
+        sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
+      };
+    };
+    "cliui-2.1.0" = {
+      name = "cliui";
+      packageName = "cliui";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz";
+        sha1 = "4b475760ff80264c762c3a1719032e91c7fea0d1";
+      };
+    };
+    "co-4.6.0" = {
+      name = "co";
+      packageName = "co";
+      version = "4.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/co/-/co-4.6.0.tgz";
+        sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184";
+      };
+    };
+    "combined-stream-1.0.6" = {
+      name = "combined-stream";
+      packageName = "combined-stream";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz";
+        sha1 = "723e7df6e801ac5613113a7e445a9b69cb632818";
+      };
+    };
+    "concat-map-0.0.1" = {
+      name = "concat-map";
+      packageName = "concat-map";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
+        sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
+      };
+    };
+    "concat-stream-1.6.2" = {
+      name = "concat-stream";
+      packageName = "concat-stream";
+      version = "1.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz";
+        sha512 = "27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==";
+      };
+    };
+    "core-util-is-1.0.2" = {
+      name = "core-util-is";
+      packageName = "core-util-is";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
+        sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
+      };
+    };
+    "dashdash-1.14.1" = {
+      name = "dashdash";
+      packageName = "dashdash";
+      version = "1.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
+        sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
+      };
+    };
+    "debug-2.6.9" = {
+      name = "debug";
+      packageName = "debug";
+      version = "2.6.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz";
+        sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==";
+      };
+    };
+    "decamelize-1.2.0" = {
+      name = "decamelize";
+      packageName = "decamelize";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz";
+        sha1 = "f6534d15148269b20352e7bee26f501f9a191290";
+      };
+    };
+    "delayed-stream-1.0.0" = {
+      name = "delayed-stream";
+      packageName = "delayed-stream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
+        sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
+      };
+    };
+    "ecc-jsbn-0.1.2" = {
+      name = "ecc-jsbn";
+      packageName = "ecc-jsbn";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz";
+        sha1 = "3a83a904e54353287874c564b7549386849a98c9";
+      };
+    };
+    "emojis-list-2.1.0" = {
+      name = "emojis-list";
+      packageName = "emojis-list";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz";
+        sha1 = "4daa4d9db00f9819880c79fa457ae5b09a1fd389";
+      };
+    };
+    "es6-promise-4.2.4" = {
+      name = "es6-promise";
+      packageName = "es6-promise";
+      version = "4.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz";
+        sha512 = "/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==";
+      };
+    };
+    "escape-string-regexp-1.0.5" = {
+      name = "escape-string-regexp";
+      packageName = "escape-string-regexp";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
+        sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
+      };
+    };
+    "estree-walker-0.2.1" = {
+      name = "estree-walker";
+      packageName = "estree-walker";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz";
+        sha1 = "bdafe8095383d8414d5dc2ecf4c9173b6db9412e";
+      };
+    };
+    "extend-3.0.2" = {
+      name = "extend";
+      packageName = "extend";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";
+        sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==";
+      };
+    };
+    "extract-zip-1.6.7" = {
+      name = "extract-zip";
+      packageName = "extract-zip";
+      version = "1.6.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz";
+        sha1 = "a840b4b8af6403264c8db57f4f1a74333ef81fe9";
+      };
+    };
+    "extsprintf-1.3.0" = {
+      name = "extsprintf";
+      packageName = "extsprintf";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz";
+        sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
+      };
+    };
+    "fast-deep-equal-1.1.0" = {
+      name = "fast-deep-equal";
+      packageName = "fast-deep-equal";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz";
+        sha1 = "c053477817c86b51daa853c81e059b733d023614";
+      };
+    };
+    "fast-json-stable-stringify-2.0.0" = {
+      name = "fast-json-stable-stringify";
+      packageName = "fast-json-stable-stringify";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz";
+        sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2";
+      };
+    };
+    "fd-slicer-1.0.1" = {
+      name = "fd-slicer";
+      packageName = "fd-slicer";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz";
+        sha1 = "8b5bcbd9ec327c5041bf9ab023fd6750f1177e65";
+      };
+    };
+    "forever-agent-0.6.1" = {
+      name = "forever-agent";
+      packageName = "forever-agent";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
+        sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
+      };
+    };
+    "form-data-2.3.2" = {
+      name = "form-data";
+      packageName = "form-data";
+      version = "2.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz";
+        sha1 = "4970498be604c20c005d4f5c23aecd21d6b49099";
+      };
+    };
+    "fs-extra-1.0.0" = {
+      name = "fs-extra";
+      packageName = "fs-extra";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz";
+        sha1 = "cd3ce5f7e7cb6145883fcae3191e9877f8587950";
+      };
+    };
+    "getpass-0.1.7" = {
+      name = "getpass";
+      packageName = "getpass";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
+        sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
+      };
+    };
+    "graceful-fs-4.1.11" = {
+      name = "graceful-fs";
+      packageName = "graceful-fs";
+      version = "4.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz";
+        sha1 = "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658";
+      };
+    };
+    "har-schema-2.0.0" = {
+      name = "har-schema";
+      packageName = "har-schema";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
+        sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
+      };
+    };
+    "har-validator-5.1.0" = {
+      name = "har-validator";
+      packageName = "har-validator";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz";
+        sha512 = "+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==";
+      };
+    };
+    "has-ansi-2.0.0" = {
+      name = "has-ansi";
+      packageName = "has-ansi";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
+        sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
+      };
+    };
+    "has-color-0.1.7" = {
+      name = "has-color";
+      packageName = "has-color";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz";
+        sha1 = "67144a5260c34fc3cca677d041daf52fe7b78b2f";
+      };
+    };
+    "hasha-2.2.0" = {
+      name = "hasha";
+      packageName = "hasha";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz";
+        sha1 = "78d7cbfc1e6d66303fe79837365984517b2f6ee1";
+      };
+    };
+    "http-signature-1.2.0" = {
+      name = "http-signature";
+      packageName = "http-signature";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";
+        sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
+      };
+    };
+    "inherits-2.0.3" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
+        sha1 = "633c2c83e3da42a502f52466022480f4208261de";
+      };
+    };
+    "is-buffer-1.1.6" = {
+      name = "is-buffer";
+      packageName = "is-buffer";
+      version = "1.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz";
+        sha512 = "NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==";
+      };
+    };
+    "is-stream-1.1.0" = {
+      name = "is-stream";
+      packageName = "is-stream";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz";
+        sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44";
+      };
+    };
+    "is-typedarray-1.0.0" = {
+      name = "is-typedarray";
+      packageName = "is-typedarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
+        sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
+      };
+    };
+    "isarray-1.0.0" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
+        sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
+      };
+    };
+    "isexe-2.0.0" = {
+      name = "isexe";
+      packageName = "isexe";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz";
+        sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10";
+      };
+    };
+    "isstream-0.1.2" = {
+      name = "isstream";
+      packageName = "isstream";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
+        sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
+      };
+    };
+    "jsbn-0.1.1" = {
+      name = "jsbn";
+      packageName = "jsbn";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
+        sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
+      };
+    };
+    "json-schema-0.2.3" = {
+      name = "json-schema";
+      packageName = "json-schema";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
+        sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
+      };
+    };
+    "json-schema-traverse-0.3.1" = {
+      name = "json-schema-traverse";
+      packageName = "json-schema-traverse";
+      version = "0.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz";
+        sha1 = "349a6d44c53a51de89b40805c5d5e59b417d3340";
+      };
+    };
+    "json-stringify-safe-5.0.1" = {
+      name = "json-stringify-safe";
+      packageName = "json-stringify-safe";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
+        sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
+      };
+    };
+    "json5-0.5.1" = {
+      name = "json5";
+      packageName = "json5";
+      version = "0.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz";
+        sha1 = "1eade7acc012034ad84e2396767ead9fa5495821";
+      };
+    };
+    "jsonfile-2.4.0" = {
+      name = "jsonfile";
+      packageName = "jsonfile";
+      version = "2.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz";
+        sha1 = "3736a2b428b87bbda0cc83b53fa3d633a35c2ae8";
+      };
+    };
+    "jsprim-1.4.1" = {
+      name = "jsprim";
+      packageName = "jsprim";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz";
+        sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
+      };
+    };
+    "kew-0.7.0" = {
+      name = "kew";
+      packageName = "kew";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz";
+        sha1 = "79d93d2d33363d6fdd2970b335d9141ad591d79b";
+      };
+    };
+    "kind-of-3.2.2" = {
+      name = "kind-of";
+      packageName = "kind-of";
+      version = "3.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz";
+        sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64";
+      };
+    };
+    "klaw-1.3.1" = {
+      name = "klaw";
+      packageName = "klaw";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz";
+        sha1 = "4088433b46b3b1ba259d78785d8e96f73ba02439";
+      };
+    };
+    "lazy-cache-1.0.4" = {
+      name = "lazy-cache";
+      packageName = "lazy-cache";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz";
+        sha1 = "a1d78fc3a50474cb80845d3b3b6e1da49a446e8e";
+      };
+    };
+    "loader-utils-1.1.0" = {
+      name = "loader-utils";
+      packageName = "loader-utils";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz";
+        sha1 = "c98aef488bcceda2ffb5e2de646d6a754429f5cd";
+      };
+    };
+    "longest-1.0.1" = {
+      name = "longest";
+      packageName = "longest";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz";
+        sha1 = "30a0b2da38f73770e8294a0d22e6625ed77d0097";
+      };
+    };
+    "magic-string-0.14.0" = {
+      name = "magic-string";
+      packageName = "magic-string";
+      version = "0.14.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/magic-string/-/magic-string-0.14.0.tgz";
+        sha1 = "57224aef1701caeed273b17a39a956e72b172462";
+      };
+    };
+    "mime-1.3.6" = {
+      name = "mime";
+      packageName = "mime";
+      version = "1.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz";
+        sha1 = "591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0";
+      };
+    };
+    "mime-db-1.35.0" = {
+      name = "mime-db";
+      packageName = "mime-db";
+      version = "1.35.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz";
+        sha512 = "JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==";
+      };
+    };
+    "mime-types-2.1.19" = {
+      name = "mime-types";
+      packageName = "mime-types";
+      version = "2.1.19";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz";
+        sha512 = "P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==";
+      };
+    };
+    "minimatch-3.0.4" = {
+      name = "minimatch";
+      packageName = "minimatch";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
+        sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==";
+      };
+    };
+    "minimist-0.0.8" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "0.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
+        sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
+      };
+    };
+    "minimist-1.2.0" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";
+        sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284";
+      };
+    };
+    "mkdirp-0.5.1" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "0.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
+        sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
+      };
+    };
+    "ms-2.0.0" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";
+        sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
+      };
+    };
+    "nomnom-1.8.1" = {
+      name = "nomnom";
+      packageName = "nomnom";
+      version = "1.8.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz";
+        sha1 = "2151f722472ba79e50a76fc125bb8c8f2e4dc2a7";
+      };
+    };
+    "oauth-sign-0.9.0" = {
+      name = "oauth-sign";
+      packageName = "oauth-sign";
+      version = "0.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz";
+        sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==";
+      };
+    };
+    "os-homedir-1.0.2" = {
+      name = "os-homedir";
+      packageName = "os-homedir";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz";
+        sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3";
+      };
+    };
+    "pend-1.2.0" = {
+      name = "pend";
+      packageName = "pend";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz";
+        sha1 = "7a57eb550a6783f9115331fcf4663d5c8e007a50";
+      };
+    };
+    "performance-now-2.1.0" = {
+      name = "performance-now";
+      packageName = "performance-now";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
+        sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
+      };
+    };
+    "pinkie-2.0.4" = {
+      name = "pinkie";
+      packageName = "pinkie";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz";
+        sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870";
+      };
+    };
+    "pinkie-promise-2.0.1" = {
+      name = "pinkie-promise";
+      packageName = "pinkie-promise";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
+        sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa";
+      };
+    };
+    "process-nextick-args-2.0.0" = {
+      name = "process-nextick-args";
+      packageName = "process-nextick-args";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz";
+        sha512 = "MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==";
+      };
+    };
+    "progress-1.1.8" = {
+      name = "progress";
+      packageName = "progress";
+      version = "1.1.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz";
+        sha1 = "e260c78f6161cdd9b0e56cc3e0a85de17c7a57be";
+      };
+    };
+    "psl-1.1.29" = {
+      name = "psl";
+      packageName = "psl";
+      version = "1.1.29";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz";
+        sha512 = "AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==";
+      };
+    };
+    "punycode-1.4.1" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz";
+        sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
+      };
+    };
+    "qs-6.5.2" = {
+      name = "qs";
+      packageName = "qs";
+      version = "6.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz";
+        sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==";
+      };
+    };
+    "readable-stream-2.3.6" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "2.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz";
+        sha512 = "tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==";
+      };
+    };
+    "repeat-string-1.6.1" = {
+      name = "repeat-string";
+      packageName = "repeat-string";
+      version = "1.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz";
+        sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637";
+      };
+    };
+    "request-2.88.0" = {
+      name = "request";
+      packageName = "request";
+      version = "2.88.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/request/-/request-2.88.0.tgz";
+        sha512 = "NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==";
+      };
+    };
+    "request-progress-2.0.1" = {
+      name = "request-progress";
+      packageName = "request-progress";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz";
+        sha1 = "5d36bb57961c673aa5b788dbc8141fdf23b44e08";
+      };
+    };
+    "require-relative-0.8.7" = {
+      name = "require-relative";
+      packageName = "require-relative";
+      version = "0.8.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz";
+        sha1 = "7999539fc9e047a37928fa196f8e1563dabd36de";
+      };
+    };
+    "right-align-0.1.3" = {
+      name = "right-align";
+      packageName = "right-align";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz";
+        sha1 = "61339b722fe6a3515689210d24e14c96148613ef";
+      };
+    };
+    "rollup-pluginutils-1.5.2" = {
+      name = "rollup-pluginutils";
+      packageName = "rollup-pluginutils";
+      version = "1.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz";
+        sha1 = "1e156e778f94b7255bfa1b3d0178be8f5c552408";
+      };
+    };
+    "safe-buffer-5.1.2" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
+        sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
+      };
+    };
+    "safer-buffer-2.1.2" = {
+      name = "safer-buffer";
+      packageName = "safer-buffer";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
+        sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
+      };
+    };
+    "source-map-0.5.7" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.5.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz";
+        sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc";
+      };
+    };
+    "source-map-support-0.4.18" = {
+      name = "source-map-support";
+      packageName = "source-map-support";
+      version = "0.4.18";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz";
+        sha512 = "try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==";
+      };
+    };
+    "sshpk-1.14.2" = {
+      name = "sshpk";
+      packageName = "sshpk";
+      version = "1.14.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz";
+        sha1 = "c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98";
+      };
+    };
+    "string_decoder-1.1.1" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
+        sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==";
+      };
+    };
+    "strip-ansi-0.1.1" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz";
+        sha1 = "39e8a98d044d150660abe4a6808acf70bb7bc991";
+      };
+    };
+    "strip-ansi-3.0.1" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
+        sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
+      };
+    };
+    "supports-color-2.0.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
+        sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
+      };
+    };
+    "throttleit-1.0.0" = {
+      name = "throttleit";
+      packageName = "throttleit";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz";
+        sha1 = "9e785836daf46743145a5984b6268d828528ac6c";
+      };
+    };
+    "tough-cookie-2.4.3" = {
+      name = "tough-cookie";
+      packageName = "tough-cookie";
+      version = "2.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz";
+        sha512 = "Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==";
+      };
+    };
+    "tunnel-agent-0.6.0" = {
+      name = "tunnel-agent";
+      packageName = "tunnel-agent";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
+        sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
+      };
+    };
+    "tweetnacl-0.14.5" = {
+      name = "tweetnacl";
+      packageName = "tweetnacl";
+      version = "0.14.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
+        sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
+      };
+    };
+    "typedarray-0.0.6" = {
+      name = "typedarray";
+      packageName = "typedarray";
+      version = "0.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz";
+        sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777";
+      };
+    };
+    "uglify-to-browserify-1.0.2" = {
+      name = "uglify-to-browserify";
+      packageName = "uglify-to-browserify";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz";
+        sha1 = "6e0924d6bda6b5afe349e39a6d632850a0f882b7";
+      };
+    };
+    "underscore-1.6.0" = {
+      name = "underscore";
+      packageName = "underscore";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz";
+        sha1 = "8b38b10cacdef63337b8b24e4ff86d45aea529a8";
+      };
+    };
+    "util-deprecate-1.0.2" = {
+      name = "util-deprecate";
+      packageName = "util-deprecate";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
+        sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
+      };
+    };
+    "uuid-3.3.2" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "3.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz";
+        sha512 = "yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==";
+      };
+    };
+    "verror-1.10.0" = {
+      name = "verror";
+      packageName = "verror";
+      version = "1.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";
+        sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
+      };
+    };
+    "vlq-0.2.3" = {
+      name = "vlq";
+      packageName = "vlq";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz";
+        sha512 = "DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==";
+      };
+    };
+    "which-1.3.1" = {
+      name = "which";
+      packageName = "which";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz";
+        sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==";
+      };
+    };
+    "window-size-0.1.0" = {
+      name = "window-size";
+      packageName = "window-size";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz";
+        sha1 = "5438cd2ea93b202efa3a19fe8887aee7c94f9c9d";
+      };
+    };
+    "wordwrap-0.0.2" = {
+      name = "wordwrap";
+      packageName = "wordwrap";
+      version = "0.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz";
+        sha1 = "b79669bb42ecb409f83d583cad52ca17eaa1643f";
+      };
+    };
+    "yargs-3.10.0" = {
+      name = "yargs";
+      packageName = "yargs";
+      version = "3.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz";
+        sha1 = "f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1";
+      };
+    };
+    "yauzl-2.4.1" = {
+      name = "yauzl";
+      packageName = "yauzl";
+      version = "2.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz";
+        sha1 = "9528f442dab1b2284e58b4379bb194e22e0c4005";
+      };
+    };
+  };
+in
+{
+  "blint-^1" = nodeEnv.buildNodePackage {
+    name = "blint";
+    packageName = "blint";
+    version = "1.0.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/blint/-/blint-1.0.3.tgz";
+      sha512 = "6RwH3oJYMujQNd38WWU+jUSRqWfECrmpfL8o3fn3Q3fE9nn5iAktLZJHGEHqeecownbZZwZneTLbaNbIWwU9/A==";
+    };
+    dependencies = [
+      sources."acorn-5.7.1"
+      sources."ansi-styles-1.0.0"
+      sources."chalk-0.4.0"
+      sources."has-color-0.1.7"
+      sources."nomnom-1.8.1"
+      sources."strip-ansi-0.1.1"
+      sources."underscore-1.6.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "No-ceremony linter";
+      homepage = http://github.com/marijnh/blint;
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "node-static-0.6.0" = nodeEnv.buildNodePackage {
+    name = "node-static";
+    packageName = "node-static";
+    version = "0.6.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/node-static/-/node-static-0.6.0.tgz";
+      sha1 = "e8543a897f3c82048220b39569284d44796eb1e2";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "simple, compliant file streaming module for node";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "phantomjs-prebuilt-^2.1.12" = nodeEnv.buildNodePackage {
+    name = "phantomjs-prebuilt";
+    packageName = "phantomjs-prebuilt";
+    version = "2.1.16";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz";
+      sha1 = "efd212a4a3966d3647684ea8ba788549be2aefef";
+    };
+    dependencies = [
+      sources."ajv-5.5.2"
+      sources."asn1-0.2.4"
+      sources."assert-plus-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.8.0"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."buffer-from-1.1.1"
+      sources."caseless-0.12.0"
+      sources."co-4.6.0"
+      sources."combined-stream-1.0.6"
+      sources."concat-stream-1.6.2"
+      sources."core-util-is-1.0.2"
+      sources."dashdash-1.14.1"
+      sources."debug-2.6.9"
+      sources."delayed-stream-1.0.0"
+      sources."ecc-jsbn-0.1.2"
+      sources."es6-promise-4.2.4"
+      sources."extend-3.0.2"
+      sources."extract-zip-1.6.7"
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-1.1.0"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."fd-slicer-1.0.1"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.2"
+      sources."fs-extra-1.0.0"
+      sources."getpass-0.1.7"
+      sources."graceful-fs-4.1.11"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.1.0"
+      sources."hasha-2.2.0"
+      sources."http-signature-1.2.0"
+      sources."inherits-2.0.3"
+      sources."is-stream-1.1.0"
+      sources."is-typedarray-1.0.0"
+      sources."isarray-1.0.0"
+      sources."isexe-2.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.3.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsonfile-2.4.0"
+      sources."jsprim-1.4.1"
+      sources."kew-0.7.0"
+      sources."klaw-1.3.1"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."ms-2.0.0"
+      sources."oauth-sign-0.9.0"
+      sources."pend-1.2.0"
+      sources."performance-now-2.1.0"
+      sources."pinkie-2.0.4"
+      sources."pinkie-promise-2.0.1"
+      sources."process-nextick-args-2.0.0"
+      sources."progress-1.1.8"
+      sources."psl-1.1.29"
+      sources."punycode-1.4.1"
+      sources."qs-6.5.2"
+      sources."readable-stream-2.3.6"
+      sources."request-2.88.0"
+      sources."request-progress-2.0.1"
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."sshpk-1.14.2"
+      sources."string_decoder-1.1.1"
+      sources."throttleit-1.0.0"
+      sources."tough-cookie-2.4.3"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."typedarray-0.0.6"
+      sources."util-deprecate-1.0.2"
+      sources."uuid-3.3.2"
+      sources."verror-1.10.0"
+      sources."which-1.3.1"
+      sources."yauzl-2.4.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Headless WebKit with JS API";
+      homepage = https://github.com/Medium/phantomjs;
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "rollup-^0.41.0" = nodeEnv.buildNodePackage {
+    name = "rollup";
+    packageName = "rollup";
+    version = "0.41.6";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/rollup/-/rollup-0.41.6.tgz";
+      sha1 = "e0d05497877a398c104d816d2733a718a7a94e2a";
+    };
+    dependencies = [
+      sources."source-map-0.5.7"
+      sources."source-map-support-0.4.18"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Next-generation ES6 module bundler";
+      homepage = https://github.com/rollup/rollup;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "rollup-plugin-buble-^0.15.0" = nodeEnv.buildNodePackage {
+    name = "rollup-plugin-buble";
+    packageName = "rollup-plugin-buble";
+    version = "0.15.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/rollup-plugin-buble/-/rollup-plugin-buble-0.15.0.tgz";
+      sha1 = "83c3e89c7fd2266c7918f41ba3980313519c7fd0";
+    };
+    dependencies = [
+      sources."acorn-3.3.0"
+      sources."acorn-jsx-3.0.1"
+      sources."acorn-object-spread-1.0.0"
+      sources."ansi-regex-2.1.1"
+      sources."ansi-styles-2.2.1"
+      sources."balanced-match-1.0.0"
+      sources."brace-expansion-1.1.11"
+      sources."buble-0.15.2"
+      sources."chalk-1.1.3"
+      sources."concat-map-0.0.1"
+      sources."escape-string-regexp-1.0.5"
+      sources."estree-walker-0.2.1"
+      sources."has-ansi-2.0.0"
+      sources."magic-string-0.14.0"
+      sources."minimatch-3.0.4"
+      sources."minimist-1.2.0"
+      sources."os-homedir-1.0.2"
+      sources."rollup-pluginutils-1.5.2"
+      sources."strip-ansi-3.0.1"
+      sources."supports-color-2.0.0"
+      sources."vlq-0.2.3"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Compile ES2015 with buble";
+      homepage = "https://gitlab.com/rich-harris/rollup-plugin-buble#README";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "rollup-watch-^3.2.0" = nodeEnv.buildNodePackage {
+    name = "rollup-watch";
+    packageName = "rollup-watch";
+    version = "3.2.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/rollup-watch/-/rollup-watch-3.2.2.tgz";
+      sha1 = "5e574232e9ef36da9177f46946d8080cb267354b";
+    };
+    dependencies = [
+      sources."require-relative-0.8.7"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Watch files for changes and perform incremental rebuilds with Rollup";
+      homepage = "https://github.com/rollup/rollup-watch#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "uglify-js-^2.8.15" = nodeEnv.buildNodePackage {
+    name = "uglify-js";
+    packageName = "uglify-js";
+    version = "2.8.29";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz";
+      sha1 = "29c5733148057bb4e1f75df35b7a9cb72e6a59dd";
+    };
+    dependencies = [
+      sources."align-text-0.1.4"
+      sources."camelcase-1.2.1"
+      sources."center-align-0.1.3"
+      sources."cliui-2.1.0"
+      sources."decamelize-1.2.0"
+      sources."is-buffer-1.1.6"
+      sources."kind-of-3.2.2"
+      sources."lazy-cache-1.0.4"
+      sources."longest-1.0.1"
+      sources."repeat-string-1.6.1"
+      sources."right-align-0.1.3"
+      sources."source-map-0.5.7"
+      sources."uglify-to-browserify-1.0.2"
+      sources."window-size-0.1.0"
+      sources."wordwrap-0.0.2"
+      sources."yargs-3.10.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "JavaScript parser, mangler/compressor and beautifier toolkit";
+      homepage = http://lisperator.net/uglifyjs;
+      license = "BSD-2-Clause";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "url-loader-^0.5.7" = nodeEnv.buildNodePackage {
+    name = "url-loader";
+    packageName = "url-loader";
+    version = "0.5.9";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz";
+      sha512 = "B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==";
+    };
+    dependencies = [
+      sources."big.js-3.2.0"
+      sources."emojis-list-2.1.0"
+      sources."json5-0.5.1"
+      sources."loader-utils-1.1.0"
+      sources."mime-1.3.6"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "url loader module for webpack";
+      homepage = "https://github.com/webpack/url-loader#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/node.nix b/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/node.nix
new file mode 100644
index 000000000000..85aedb8a5a4c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/codimd/CodeMirror/node.nix
@@ -0,0 +1,17 @@
+# This file has been generated by node2nix 1.6.0. Do not edit!
+
+{pkgs ? import <nixpkgs> {
+    inherit system;
+  }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-6_x"}:
+
+let
+  nodeEnv = import ../../../../development/node-packages/node-env.nix {
+    inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
+    inherit nodejs;
+    libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
+  };
+in
+import ./node-packages.nix {
+  inherit (pkgs) fetchurl fetchgit;
+  inherit nodeEnv;
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/servers/web-apps/codimd/default.nix b/nixpkgs/pkgs/servers/web-apps/codimd/default.nix
new file mode 100644
index 000000000000..e9f5e0898720
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/codimd/default.nix
@@ -0,0 +1,156 @@
+{ stdenv, pkgs, buildEnv, fetchFromGitHub, makeWrapper
+, fetchpatch, nodejs-6_x, phantomjs2 }:
+let
+  nodePackages = import ./node.nix {
+    inherit pkgs;
+    system = stdenv.system;
+  };
+
+  addPhantomjs = (pkgs:
+    map (pkg: pkg.override ( oldAttrs: {
+      buildInputs = oldAttrs.buildInputs or [] ++ [ phantomjs2 ];
+    })) pkgs);
+
+  drvName = drv: (builtins.parseDrvName drv).name;
+
+  linkNodeDeps = ({ pkg, deps, name ? "" }:
+    nodePackages.${pkg}.override (oldAttrs: {
+      postInstall = stdenv.lib.concatStringsSep "\n" (map (dep: ''
+        ln -s ${nodePackages.${dep}}/lib/node_modules/${drvName dep} \
+          $out/lib/node_modules/${if name != "" then name else drvName pkg}/node_modules
+      '') deps
+      );
+    })
+  );
+
+  filterNodePackagesToList = (filterPkgs: allPkgs:
+    stdenv.lib.mapAttrsToList (_: v: v) (
+      stdenv.lib.filterAttrs (n: _:
+        ! builtins.elem (drvName n) filterPkgs
+      ) allPkgs)
+  );
+
+  # add phantomjs to buildInputs
+  pkgsWithPhantomjs = (addPhantomjs (map (
+    p: nodePackages.${p}
+  ) [
+    "js-url-^2.3.0"
+    "markdown-pdf-^8.0.0"
+  ]));
+
+  # link extra dependencies to lib/node_modules
+  pkgsWithExtraDeps = map (args:
+    linkNodeDeps args ) [
+    { pkg = "select2-^3.5.2-browserify";
+      deps = [ "url-loader-^0.5.7" ]; }
+    { pkg = "js-sequence-diagrams-^1000000.0.6";
+      deps = [ "lodash-^4.17.4" ]; }
+    { pkg = "ionicons-~2.0.1";
+      deps = [ "url-loader-^0.5.7" "file-loader-^0.9.0" ]; }
+    { pkg = "font-awesome-^4.7.0";
+      deps = [ "url-loader-^0.5.7" "file-loader-^0.9.0" ]; }
+    { pkg = "bootstrap-^3.3.7";
+      deps = [ "url-loader-^0.5.7" "file-loader-^0.9.0" ]; }
+    { pkg = "markdown-it-^8.2.2";
+      deps = [ "json-loader-^0.5.4" ]; }
+    { pkg = "markdown-it-emoji-^1.3.0";
+      deps = [ "json-loader-^0.5.4" ]; }
+    { pkg = "raphael-git+https://github.com/dmitrybaranovskiy/raphael";
+      deps = [ "eve-^0.5.4" ];
+      name = "raphael"; }
+  ];
+
+  codemirror = pkgs.callPackage ./CodeMirror { };
+
+  nodeEnv = buildEnv {
+    name = "codimd-env";
+    paths = pkgsWithPhantomjs ++ pkgsWithExtraDeps ++ [
+      codemirror
+   ] ++ filterNodePackagesToList [
+     "bootstrap"
+     "codemirror-git+https://github.com/hackmdio/CodeMirror.git"
+     "font-awesome"
+     "ionicons"
+     "js-sequence-diagrams"
+     "js-url"
+     "markdown-it"
+     "markdown-pdf"
+"node-uuid"
+     "raphael-git+https://github.com/dmitrybaranovskiy/raphael"
+     "select2-browserify"
+   ] nodePackages;
+  };
+
+  name = "codimd-${version}";
+  version = "1.2.0";
+
+  src = stdenv.mkDerivation {
+    name = "${name}-src";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "hackmdio";
+      repo = "codimd";
+      rev = version;
+      sha256 = "003v90g5sxxjv5smxvz6y6bq2ny0xpxhsx2cdgkvj7jla243v48s";
+    };
+
+    dontBuild = true;
+
+    installPhase = ''
+      mkdir $out
+      cp -R . $out
+    '';
+  };
+in
+stdenv.mkDerivation rec {
+  inherit name version src;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ nodejs-6_x ];
+
+  NODE_PATH = "${nodeEnv}/lib/node_modules";
+
+  patches = [
+    (fetchpatch { # fixes for configurable paths
+      url = "https://patch-diff.githubusercontent.com/raw/hackmdio/codimd/pull/940.patch";
+      sha256 = "0w1cvnp3k1n8690gzlrfijisn182i0v8psjs3df394rfx2347xyp";
+    })
+  ];
+
+  buildPhase = ''
+    ln -s ${nodeEnv}/lib/node_modules node_modules
+    npm run build
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cat > $out/bin/codimd <<EOF
+      #!${stdenv.shell}/bin/sh
+      ${nodejs-6_x}/bin/node $out/app.js
+    EOF
+    cp -R {app.js,bin,lib,locales,package.json,public} $out/
+  '';
+
+  postFixup = ''
+    chmod +x $out/bin/codimd
+    wrapProgram $out/bin/codimd \
+      --set NODE_PATH "${nodeEnv}/lib/node_modules"
+  '';
+
+  passthru = {
+    sequelize = pkgs.writeScript "codimd-sequelize" ''
+      #!${pkgs.bash}/bin/bash -e
+      export NODE_PATH="${nodeEnv}/lib/node_modules"
+      exec -a "$0" "${nodeEnv}/lib/node_modules/sequelize-cli/bin/sequelize" "$@"
+    '';
+  };
+
+  meta = with stdenv.lib; {
+    description = "Realtime collaborative markdown notes on all platforms";
+    license = licenses.agpl3;
+    homepage = https://github.com/hackmdio/codimd;
+    maintainers = with maintainers; [ willibutz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/codimd/deps.json b/nixpkgs/pkgs/servers/web-apps/codimd/deps.json
new file mode 100644
index 000000000000..c7cf790fe58e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/codimd/deps.json
@@ -0,0 +1,150 @@
+[ { "eve": "^0.5.4" }
+
+, { "babel-cli": "^6.18.0" }
+, { "babel-core": "^6.21.0" }
+, { "babel-loader": "^6.2.10" }
+, { "babel-plugin-transform-runtime": "^6.15.0" }
+, { "babel-polyfill": "^6.22.0" }
+, { "babel-preset-es2015": "^6.18.0" }
+, { "babel-runtime": "^6.20.0" }
+, { "copy-webpack-plugin": "^4.0.1" }
+, { "css-loader": "^0.26.1" }
+, { "doctoc": "^1.3.0" }
+, { "ejs-loader": "^0.3.0" }
+, { "exports-loader": "^0.6.3" }
+, { "expose": "^0.1.4" }
+, { "expose-loader": "^0.7.1" }
+, { "extract-text-webpack-plugin": "^1.0.1" }
+, { "file-loader": "^0.9.0" }
+, { "html-webpack-plugin": "^2.25.0" }
+, { "imports-loader": "^0.7.0" }
+, { "json-loader": "^0.5.4" }
+, { "jsonlint": "^1.6.2" }
+, { "less": "^2.7.1" }
+, { "less-loader": "^2.2.3" }
+, { "optimize-css-assets-webpack-plugin": "^1.3.0" }
+, { "script-loader": "^0.7.0" }
+, { "standard": "^9.0.1" }
+, { "string-loader": "^0.0.1" }
+, { "style-loader": "^0.13.1" }
+, { "url-loader": "^0.5.7" }
+, { "webpack": "^1.14.0" }
+, { "webpack-parallel-uglify-plugin": "^0.2.0" }
+
+, { "Idle.Js": "git+https://github.com/shawnmclean/Idle.js" }
+, { "archiver": "^2.1.1" }
+, { "async": "^2.1.4" }
+, { "aws-sdk": "^2.7.20" }
+, { "base64url": "^3.0.0" }
+, { "azure-storage": "^2.7.0" }
+, { "blueimp-md5": "^2.6.0" }
+, { "body-parser": "^1.15.2" }
+, { "bootstrap": "^3.3.7" }
+, { "bootstrap-validator": "^0.11.8" }
+, { "chance": "^1.0.4" }
+, { "cheerio": "^0.22.0" }
+, { "codemirror": "git+https://github.com/hackmdio/CodeMirror.git" }
+, { "compression": "^1.6.2" }
+, { "connect-flash": "^0.1.1" }
+, { "connect-session-sequelize": "^4.1.0" }
+, { "cookie": "0.3.1" }
+, { "cookie-parser": "1.4.3" }
+, { "deep-freeze": "^0.0.1" }
+, { "diff-match-patch": "git+https://github.com/hackmdio/diff-match-patch.git" }
+, { "ejs": "^2.5.5" }
+, { "emojify.js": "~1.1.0" }
+, { "express": ">=4.14" }
+, { "express-session": "^1.14.2" }
+, { "file-saver": "^1.3.3" }
+, { "flowchart.js": "^1.6.4" }
+, { "font-awesome": "^4.7.0" }
+, { "formidable": "^1.0.17" }
+, { "gist-embed": "~2.6.0" }
+, { "graceful-fs": "^4.1.11" }
+, { "handlebars": "^4.0.6" }
+, { "helmet": "^3.3.0" }
+, { "highlight.js": "~9.12.0" }
+, { "i18n": "^0.8.3" }
+, { "imgur": "git+https://github.com/hackmdio/node-imgur.git" }
+, { "ionicons": "~2.0.1" }
+, { "jquery": "^3.1.1" }
+, { "jquery-mousewheel": "^3.1.13" }
+, { "jquery-ui": "^1.12.1" }
+, { "js-cookie": "^2.1.3" }
+, { "js-sequence-diagrams": "^1000000.0.6" }
+, { "js-url": "^2.3.0" }
+, { "js-yaml": "^3.7.0" }
+, { "jsdom-nogyp": "^0.8.3" }
+, { "keymaster": "^1.6.2" }
+, { "list.js": "^1.5.0" }
+, { "lodash": "^4.17.4" }
+, { "lz-string": "1.4.4" }
+, { "markdown-it": "^8.2.2" }
+, { "markdown-it-abbr": "^1.0.4" }
+, { "markdown-it-container": "^2.0.0" }
+, { "markdown-it-deflist": "^2.0.1" }
+, { "markdown-it-emoji": "^1.3.0" }
+, { "markdown-it-footnote": "^3.0.1" }
+, { "markdown-it-imsize": "^2.0.1" }
+, { "markdown-it-ins": "^2.0.0" }
+, { "markdown-it-mark": "^2.0.0" }
+, { "markdown-it-mathjax": "^2.0.0" }
+, { "markdown-it-regexp": "^0.4.0" }
+, { "markdown-it-sub": "^1.0.0" }
+, { "markdown-it-sup": "^1.0.0" }
+, { "markdown-pdf": "^8.0.0" }
+, { "mathjax": "~2.7.0" }
+, { "mermaid": "~7.1.0" }
+, { "mattermost": "^3.4.0" }
+, { "meta-marked": "^0.4.2" }
+, { "method-override": "^2.3.7" }
+, { "minimist": "^1.2.0" }
+, { "minio": "^6.0.0" }
+, { "moment": "^2.17.1" }
+, { "morgan": "^1.7.0" }
+, { "mysql": "^2.12.0" }
+, { "node-uuid": "^1.4.7" }
+, { "octicons": "~4.4.0" }
+, { "passport": "^0.4.0" }
+, { "passport-dropbox-oauth2": "^1.1.0" }
+, { "passport-facebook": "^2.1.1" }
+, { "passport-github": "^1.1.0" }
+, { "passport-gitlab2": "^4.0.0" }
+, { "passport-google-oauth20": "^1.0.0" }
+, { "passport-ldapauth": "^2.0.0" }
+, { "passport-local": "^1.0.0" }
+, { "passport-oauth2": "^1.4.0" }
+, { "passport-twitter": "^1.0.4" }
+, { "passport-saml": "^0.31.0" }
+, { "passport.socketio": "^3.7.0" }
+, { "pdfobject": "^2.0.201604172" }
+, { "pg": "^6.1.2" }
+, { "pg-hstore": "^2.3.2" }
+, { "prismjs": "^1.6.0" }
+, { "randomcolor": "^0.5.3" }
+, { "raphael": "git+https://github.com/dmitrybaranovskiy/raphael" }
+, { "readline-sync": "^1.4.7" }
+, { "request": "^2.79.0" }
+, { "reveal.js": "~3.6.0" }
+, { "scrypt": "^6.0.3" }
+, { "select2": "^3.5.2-browserify" }
+, { "sequelize": "^3.28.0" }
+, { "sequelize-cli": "^2.5.1" }
+, { "shortid": "2.2.8" }
+, { "socket.io": "~2.0.4" }
+, { "socket.io-client": "~2.0.4" }
+, { "spin.js": "^2.3.2" }
+, { "sqlite3": "^4.0.1" }
+, { "store": "^2.0.12" }
+, { "string": "^3.3.3" }
+, { "tedious": "^1.14.0" }
+, { "to-markdown": "^3.0.3" }
+, { "toobusy-js": "^0.5.1" }
+, { "uuid": "^3.1.0" }
+, { "uws": "~0.14.1" }
+, { "validator": "^10.4.0" }
+, { "velocity-animate": "^1.4.0" }
+, { "visibilityjs": "^1.2.4" }
+, { "viz.js": "^1.7.0" }
+, { "winston": "^2.3.0" }
+, { "xss": "^1.0.3" } ]
diff --git a/nixpkgs/pkgs/servers/web-apps/codimd/generate.sh b/nixpkgs/pkgs/servers/web-apps/codimd/generate.sh
new file mode 100755
index 000000000000..6d2bf29532e9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/codimd/generate.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p nodePackages.node2nix
+
+node2nix -6 -i deps.json \
+  -e ../../../development/node-packages/node-env.nix \
+  --no-copy-node-env \
+  -c node.nix
diff --git a/nixpkgs/pkgs/servers/web-apps/codimd/node-packages.nix b/nixpkgs/pkgs/servers/web-apps/codimd/node-packages.nix
new file mode 100644
index 000000000000..414cf6c31589
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/codimd/node-packages.nix
@@ -0,0 +1,17911 @@
+# This file has been generated by node2nix 1.6.0. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
+
+let
+  sources = {
+    "@types/body-parser-1.17.0" = {
+      name = "_at_types_slash_body-parser";
+      packageName = "@types/body-parser";
+      version = "1.17.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz";
+        sha512 = "a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==";
+      };
+    };
+    "@types/connect-3.4.32" = {
+      name = "_at_types_slash_connect";
+      packageName = "@types/connect";
+      version = "3.4.32";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz";
+        sha512 = "4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==";
+      };
+    };
+    "@types/events-1.2.0" = {
+      name = "_at_types_slash_events";
+      packageName = "@types/events";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz";
+        sha512 = "KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==";
+      };
+    };
+    "@types/express-4.16.0" = {
+      name = "_at_types_slash_express";
+      packageName = "@types/express";
+      version = "4.16.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/express/-/express-4.16.0.tgz";
+        sha512 = "TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==";
+      };
+    };
+    "@types/express-serve-static-core-4.16.0" = {
+      name = "_at_types_slash_express-serve-static-core";
+      packageName = "@types/express-serve-static-core";
+      version = "4.16.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz";
+        sha512 = "lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==";
+      };
+    };
+    "@types/geojson-1.0.6" = {
+      name = "_at_types_slash_geojson";
+      packageName = "@types/geojson";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz";
+        sha512 = "Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==";
+      };
+    };
+    "@types/ldapjs-1.0.3" = {
+      name = "_at_types_slash_ldapjs";
+      packageName = "@types/ldapjs";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/ldapjs/-/ldapjs-1.0.3.tgz";
+        sha512 = "FSj24s1WsFEfOy8taIKp2DokSZfFkjWYZb88AS5eDj3WTocZ+4DnHjhzrXEs048WQ5mfOLJXMOAnc0kSnHh5Lw==";
+      };
+    };
+    "@types/mime-2.0.0" = {
+      name = "_at_types_slash_mime";
+      packageName = "@types/mime";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz";
+        sha512 = "A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==";
+      };
+    };
+    "@types/node-7.0.68" = {
+      name = "_at_types_slash_node";
+      packageName = "@types/node";
+      version = "7.0.68";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/node/-/node-7.0.68.tgz";
+        sha512 = "ym3LNHwJQU0XDyPrTK6NHJTH5YmGKKe0k56in6pg+Wx4HD8fiKrt8xute6/unHvHujCfzmOQTGz1NoEKgFF5Mw==";
+      };
+    };
+    "@types/passport-0.3.5" = {
+      name = "_at_types_slash_passport";
+      packageName = "@types/passport";
+      version = "0.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/passport/-/passport-0.3.5.tgz";
+        sha512 = "J7mdY1nnhjdbkXT84S3WsyrTtDf2KqUJ9JW3Y9vxA5GuXlejIuvwHw9A2TdNklAqPG2Q0TWqlsA2a2GIeV1jYA==";
+      };
+    };
+    "@types/range-parser-1.2.2" = {
+      name = "_at_types_slash_range-parser";
+      packageName = "@types/range-parser";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.2.tgz";
+        sha512 = "HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw==";
+      };
+    };
+    "@types/serve-static-1.13.2" = {
+      name = "_at_types_slash_serve-static";
+      packageName = "@types/serve-static";
+      version = "1.13.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz";
+        sha512 = "/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==";
+      };
+    };
+    "JSV-4.0.2" = {
+      name = "JSV";
+      packageName = "JSV";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz";
+        sha1 = "d077f6825571f82132f9dffaed587b4029feff57";
+      };
+    };
+    "abab-1.0.4" = {
+      name = "abab";
+      packageName = "abab";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz";
+        sha1 = "5faad9c2c07f60dd76770f71cf025b62a63cfd4e";
+      };
+    };
+    "abbrev-1.1.1" = {
+      name = "abbrev";
+      packageName = "abbrev";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz";
+        sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==";
+      };
+    };
+    "accepts-1.3.5" = {
+      name = "accepts";
+      packageName = "accepts";
+      version = "1.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz";
+        sha1 = "eb777df6011723a3b14e8a72c0805c8e86746bd2";
+      };
+    };
+    "acorn-3.3.0" = {
+      name = "acorn";
+      packageName = "acorn";
+      version = "3.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz";
+        sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a";
+      };
+    };
+    "acorn-4.0.13" = {
+      name = "acorn";
+      packageName = "acorn";
+      version = "4.0.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz";
+        sha1 = "105495ae5361d697bd195c825192e1ad7f253787";
+      };
+    };
+    "acorn-5.7.1" = {
+      name = "acorn";
+      packageName = "acorn";
+      version = "5.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz";
+        sha512 = "d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==";
+      };
+    };
+    "acorn-globals-3.1.0" = {
+      name = "acorn-globals";
+      packageName = "acorn-globals";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz";
+        sha1 = "fd8270f71fbb4996b004fa880ee5d46573a731bf";
+      };
+    };
+    "acorn-jsx-3.0.1" = {
+      name = "acorn-jsx";
+      packageName = "acorn-jsx";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz";
+        sha1 = "afdf9488fb1ecefc8348f6fb22f464e32a58b36b";
+      };
+    };
+    "acorn-object-spread-1.0.0" = {
+      name = "acorn-object-spread";
+      packageName = "acorn-object-spread";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn-object-spread/-/acorn-object-spread-1.0.0.tgz";
+        sha1 = "48ead0f4a8eb16995a17a0db9ffc6acaada4ba68";
+      };
+    };
+    "after-0.8.2" = {
+      name = "after";
+      packageName = "after";
+      version = "0.8.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/after/-/after-0.8.2.tgz";
+        sha1 = "fedb394f9f0e02aa9768e702bda23b505fae7e1f";
+      };
+    };
+    "ajv-4.11.8" = {
+      name = "ajv";
+      packageName = "ajv";
+      version = "4.11.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz";
+        sha1 = "82ffb02b29e662ae53bdc20af15947706739c536";
+      };
+    };
+    "ajv-5.5.2" = {
+      name = "ajv";
+      packageName = "ajv";
+      version = "5.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz";
+        sha1 = "73b5eeca3fab653e3d3f9422b341ad42205dc965";
+      };
+    };
+    "ajv-6.5.2" = {
+      name = "ajv";
+      packageName = "ajv";
+      version = "6.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz";
+        sha512 = "hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==";
+      };
+    };
+    "ajv-keywords-1.5.1" = {
+      name = "ajv-keywords";
+      packageName = "ajv-keywords";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz";
+        sha1 = "314dd0a4b3368fad3dfcdc54ede6171b886daf3c";
+      };
+    };
+    "ajv-keywords-3.2.0" = {
+      name = "ajv-keywords";
+      packageName = "ajv-keywords";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz";
+        sha1 = "e86b819c602cf8821ad637413698f1dec021847a";
+      };
+    };
+    "align-text-0.1.4" = {
+      name = "align-text";
+      packageName = "align-text";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz";
+        sha1 = "0cd90a561093f35d0a99256c22b7069433fad117";
+      };
+    };
+    "alphanum-sort-1.0.2" = {
+      name = "alphanum-sort";
+      packageName = "alphanum-sort";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz";
+        sha1 = "97a1119649b211ad33691d9f9f486a8ec9fbe0a3";
+      };
+    };
+    "ambi-2.5.0" = {
+      name = "ambi";
+      packageName = "ambi";
+      version = "2.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ambi/-/ambi-2.5.0.tgz";
+        sha1 = "7c8e372be48891157e7cea01cb6f9143d1f74220";
+      };
+    };
+    "amdefine-1.0.1" = {
+      name = "amdefine";
+      packageName = "amdefine";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz";
+        sha1 = "4a5282ac164729e93619bcfd3ad151f817ce91f5";
+      };
+    };
+    "anchor-markdown-header-0.5.7" = {
+      name = "anchor-markdown-header";
+      packageName = "anchor-markdown-header";
+      version = "0.5.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz";
+        sha1 = "045063d76e6a1f9cd327a57a0126aa0fdec371a7";
+      };
+    };
+    "ansi-escapes-1.4.0" = {
+      name = "ansi-escapes";
+      packageName = "ansi-escapes";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz";
+        sha1 = "d3a8a83b319aa67793662b13e761c7911422306e";
+      };
+    };
+    "ansi-gray-0.1.1" = {
+      name = "ansi-gray";
+      packageName = "ansi-gray";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz";
+        sha1 = "2962cf54ec9792c48510a3deb524436861ef7251";
+      };
+    };
+    "ansi-regex-2.1.1" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
+        sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
+      };
+    };
+    "ansi-regex-3.0.0" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz";
+        sha1 = "ed0317c322064f79466c02966bddb605ab37d998";
+      };
+    };
+    "ansi-styles-1.0.0" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz";
+        sha1 = "cb102df1c56f5123eab8b67cd7b98027a0279178";
+      };
+    };
+    "ansi-styles-2.2.1" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
+        sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
+      };
+    };
+    "ansi-styles-3.2.1" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "3.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz";
+        sha512 = "VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==";
+      };
+    };
+    "ansi-wrap-0.1.0" = {
+      name = "ansi-wrap";
+      packageName = "ansi-wrap";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz";
+        sha1 = "a82250ddb0015e9a27ca82e82ea603bbfa45efaf";
+      };
+    };
+    "anymatch-1.3.2" = {
+      name = "anymatch";
+      packageName = "anymatch";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz";
+        sha512 = "0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==";
+      };
+    };
+    "aproba-1.2.0" = {
+      name = "aproba";
+      packageName = "aproba";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz";
+        sha512 = "Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==";
+      };
+    };
+    "archiver-utils-1.3.0" = {
+      name = "archiver-utils";
+      packageName = "archiver-utils";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz";
+        sha1 = "e50b4c09c70bf3d680e32ff1b7994e9f9d895174";
+      };
+    };
+    "archy-1.0.0" = {
+      name = "archy";
+      packageName = "archy";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz";
+        sha1 = "f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40";
+      };
+    };
+    "are-we-there-yet-1.1.5" = {
+      name = "are-we-there-yet";
+      packageName = "are-we-there-yet";
+      version = "1.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz";
+        sha512 = "5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==";
+      };
+    };
+    "argparse-0.1.16" = {
+      name = "argparse";
+      packageName = "argparse";
+      version = "0.1.16";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz";
+        sha1 = "cfd01e0fbba3d6caed049fbd758d40f65196f57c";
+      };
+    };
+    "argparse-1.0.10" = {
+      name = "argparse";
+      packageName = "argparse";
+      version = "1.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz";
+        sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==";
+      };
+    };
+    "arr-diff-2.0.0" = {
+      name = "arr-diff";
+      packageName = "arr-diff";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz";
+        sha1 = "8f3b827f955a8bd669697e4a4256ac3ceae356cf";
+      };
+    };
+    "arr-diff-4.0.0" = {
+      name = "arr-diff";
+      packageName = "arr-diff";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz";
+        sha1 = "d6461074febfec71e7e15235761a329a5dc7c520";
+      };
+    };
+    "arr-flatten-1.1.0" = {
+      name = "arr-flatten";
+      packageName = "arr-flatten";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz";
+        sha512 = "L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==";
+      };
+    };
+    "arr-union-3.1.0" = {
+      name = "arr-union";
+      packageName = "arr-union";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz";
+        sha1 = "e39b09aea9def866a8f206e288af63919bae39c4";
+      };
+    };
+    "array-differ-1.0.0" = {
+      name = "array-differ";
+      packageName = "array-differ";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz";
+        sha1 = "eff52e3758249d33be402b8bb8e564bb2b5d4031";
+      };
+    };
+    "array-each-1.0.1" = {
+      name = "array-each";
+      packageName = "array-each";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz";
+        sha1 = "a794af0c05ab1752846ee753a1f211a05ba0c44f";
+      };
+    };
+    "array-equal-1.0.0" = {
+      name = "array-equal";
+      packageName = "array-equal";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz";
+        sha1 = "8c2a5ef2472fd9ea742b04c77a75093ba2757c93";
+      };
+    };
+    "array-flatten-1.1.1" = {
+      name = "array-flatten";
+      packageName = "array-flatten";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz";
+        sha1 = "9a5f699051b1e7073328f2a008968b64ea2955d2";
+      };
+    };
+    "array-slice-1.1.0" = {
+      name = "array-slice";
+      packageName = "array-slice";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz";
+        sha512 = "B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==";
+      };
+    };
+    "array-union-1.0.2" = {
+      name = "array-union";
+      packageName = "array-union";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz";
+        sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39";
+      };
+    };
+    "array-uniq-1.0.3" = {
+      name = "array-uniq";
+      packageName = "array-uniq";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz";
+        sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6";
+      };
+    };
+    "array-unique-0.2.1" = {
+      name = "array-unique";
+      packageName = "array-unique";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz";
+        sha1 = "a1d97ccafcbc2625cc70fadceb36a50c58b01a53";
+      };
+    };
+    "array-unique-0.3.2" = {
+      name = "array-unique";
+      packageName = "array-unique";
+      version = "0.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz";
+        sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428";
+      };
+    };
+    "array.prototype.find-2.0.4" = {
+      name = "array.prototype.find";
+      packageName = "array.prototype.find";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz";
+        sha1 = "556a5c5362c08648323ddaeb9de9d14bc1864c90";
+      };
+    };
+    "arraybuffer.slice-0.0.7" = {
+      name = "arraybuffer.slice";
+      packageName = "arraybuffer.slice";
+      version = "0.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz";
+        sha512 = "wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==";
+      };
+    };
+    "arrify-1.0.1" = {
+      name = "arrify";
+      packageName = "arrify";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz";
+        sha1 = "898508da2226f380df904728456849c1501a4b0d";
+      };
+    };
+    "asap-2.0.6" = {
+      name = "asap";
+      packageName = "asap";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz";
+        sha1 = "e50347611d7e690943208bbdafebcbc2fb866d46";
+      };
+    };
+    "asn1-0.2.3" = {
+      name = "asn1";
+      packageName = "asn1";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz";
+        sha1 = "dac8787713c9966849fc8180777ebe9c1ddf3b86";
+      };
+    };
+    "asn1-0.2.4" = {
+      name = "asn1";
+      packageName = "asn1";
+      version = "0.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz";
+        sha512 = "jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==";
+      };
+    };
+    "assert-1.4.1" = {
+      name = "assert";
+      packageName = "assert";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz";
+        sha1 = "99912d591836b5a6f5b345c0f07eefc08fc65d91";
+      };
+    };
+    "assert-plus-0.1.5" = {
+      name = "assert-plus";
+      packageName = "assert-plus";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz";
+        sha1 = "ee74009413002d84cec7219c6ac811812e723160";
+      };
+    };
+    "assert-plus-0.2.0" = {
+      name = "assert-plus";
+      packageName = "assert-plus";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz";
+        sha1 = "d74e1b87e7affc0db8aadb7021f3fe48101ab234";
+      };
+    };
+    "assert-plus-1.0.0" = {
+      name = "assert-plus";
+      packageName = "assert-plus";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
+        sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
+      };
+    };
+    "assign-symbols-1.0.0" = {
+      name = "assign-symbols";
+      packageName = "assign-symbols";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz";
+        sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367";
+      };
+    };
+    "async-0.2.10" = {
+      name = "async";
+      packageName = "async";
+      version = "0.2.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async/-/async-0.2.10.tgz";
+        sha1 = "b6bbe0b0674b9d719708ca38de8c237cb526c3d1";
+      };
+    };
+    "async-0.9.2" = {
+      name = "async";
+      packageName = "async";
+      version = "0.9.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async/-/async-0.9.2.tgz";
+        sha1 = "aea74d5e61c1f899613bf64bda66d4c78f2fd17d";
+      };
+    };
+    "async-1.0.0" = {
+      name = "async";
+      packageName = "async";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async/-/async-1.0.0.tgz";
+        sha1 = "f8fc04ca3a13784ade9e1641af98578cfbd647a9";
+      };
+    };
+    "async-1.5.2" = {
+      name = "async";
+      packageName = "async";
+      version = "1.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async/-/async-1.5.2.tgz";
+        sha1 = "ec6a61ae56480c0c3cb241c95618e20892f9672a";
+      };
+    };
+    "async-2.6.1" = {
+      name = "async";
+      packageName = "async";
+      version = "2.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async/-/async-2.6.1.tgz";
+        sha512 = "fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==";
+      };
+    };
+    "async-each-1.0.1" = {
+      name = "async-each";
+      packageName = "async-each";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz";
+        sha1 = "19d386a1d9edc6e7c1c85d388aedbcc56d33602d";
+      };
+    };
+    "async-limiter-1.0.0" = {
+      name = "async-limiter";
+      packageName = "async-limiter";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz";
+        sha512 = "jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==";
+      };
+    };
+    "asynckit-0.4.0" = {
+      name = "asynckit";
+      packageName = "asynckit";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
+        sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
+      };
+    };
+    "atob-2.1.1" = {
+      name = "atob";
+      packageName = "atob";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz";
+        sha1 = "ae2d5a729477f289d60dd7f96a6314a22dd6c22a";
+      };
+    };
+    "autolinker-0.15.3" = {
+      name = "autolinker";
+      packageName = "autolinker";
+      version = "0.15.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/autolinker/-/autolinker-0.15.3.tgz";
+        sha1 = "342417d8f2f3461b14cf09088d5edf8791dc9832";
+      };
+    };
+    "autoprefixer-6.7.7" = {
+      name = "autoprefixer";
+      packageName = "autoprefixer";
+      version = "6.7.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz";
+        sha1 = "1dbd1c835658e35ce3f9984099db00585c782014";
+      };
+    };
+    "aws-sign2-0.6.0" = {
+      name = "aws-sign2";
+      packageName = "aws-sign2";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz";
+        sha1 = "14342dd38dbcc94d0e5b87d763cd63612c0e794f";
+      };
+    };
+    "aws-sign2-0.7.0" = {
+      name = "aws-sign2";
+      packageName = "aws-sign2";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz";
+        sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
+      };
+    };
+    "aws4-1.7.0" = {
+      name = "aws4";
+      packageName = "aws4";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz";
+        sha512 = "32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==";
+      };
+    };
+    "babel-code-frame-6.26.0" = {
+      name = "babel-code-frame";
+      packageName = "babel-code-frame";
+      version = "6.26.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz";
+        sha1 = "63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b";
+      };
+    };
+    "babel-core-6.26.3" = {
+      name = "babel-core";
+      packageName = "babel-core";
+      version = "6.26.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz";
+        sha512 = "6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==";
+      };
+    };
+    "babel-generator-6.26.1" = {
+      name = "babel-generator";
+      packageName = "babel-generator";
+      version = "6.26.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz";
+        sha512 = "HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==";
+      };
+    };
+    "babel-helper-call-delegate-6.24.1" = {
+      name = "babel-helper-call-delegate";
+      packageName = "babel-helper-call-delegate";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz";
+        sha1 = "ece6aacddc76e41c3461f88bfc575bd0daa2df8d";
+      };
+    };
+    "babel-helper-define-map-6.26.0" = {
+      name = "babel-helper-define-map";
+      packageName = "babel-helper-define-map";
+      version = "6.26.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz";
+        sha1 = "a5f56dab41a25f97ecb498c7ebaca9819f95be5f";
+      };
+    };
+    "babel-helper-function-name-6.24.1" = {
+      name = "babel-helper-function-name";
+      packageName = "babel-helper-function-name";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz";
+        sha1 = "d3475b8c03ed98242a25b48351ab18399d3580a9";
+      };
+    };
+    "babel-helper-get-function-arity-6.24.1" = {
+      name = "babel-helper-get-function-arity";
+      packageName = "babel-helper-get-function-arity";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz";
+        sha1 = "8f7782aa93407c41d3aa50908f89b031b1b6853d";
+      };
+    };
+    "babel-helper-hoist-variables-6.24.1" = {
+      name = "babel-helper-hoist-variables";
+      packageName = "babel-helper-hoist-variables";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz";
+        sha1 = "1ecb27689c9d25513eadbc9914a73f5408be7a76";
+      };
+    };
+    "babel-helper-optimise-call-expression-6.24.1" = {
+      name = "babel-helper-optimise-call-expression";
+      packageName = "babel-helper-optimise-call-expression";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz";
+        sha1 = "f7a13427ba9f73f8f4fa993c54a97882d1244257";
+      };
+    };
+    "babel-helper-regex-6.26.0" = {
+      name = "babel-helper-regex";
+      packageName = "babel-helper-regex";
+      version = "6.26.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz";
+        sha1 = "325c59f902f82f24b74faceed0363954f6495e72";
+      };
+    };
+    "babel-helper-replace-supers-6.24.1" = {
+      name = "babel-helper-replace-supers";
+      packageName = "babel-helper-replace-supers";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz";
+        sha1 = "bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a";
+      };
+    };
+    "babel-helpers-6.24.1" = {
+      name = "babel-helpers";
+      packageName = "babel-helpers";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz";
+        sha1 = "3471de9caec388e5c850e597e58a26ddf37602b2";
+      };
+    };
+    "babel-messages-6.23.0" = {
+      name = "babel-messages";
+      packageName = "babel-messages";
+      version = "6.23.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz";
+        sha1 = "f3cdf4703858035b2a2951c6ec5edf6c62f2630e";
+      };
+    };
+    "babel-plugin-check-es2015-constants-6.22.0" = {
+      name = "babel-plugin-check-es2015-constants";
+      packageName = "babel-plugin-check-es2015-constants";
+      version = "6.22.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz";
+        sha1 = "35157b101426fd2ffd3da3f75c7d1e91835bbf8a";
+      };
+    };
+    "babel-plugin-transform-es2015-arrow-functions-6.22.0" = {
+      name = "babel-plugin-transform-es2015-arrow-functions";
+      packageName = "babel-plugin-transform-es2015-arrow-functions";
+      version = "6.22.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz";
+        sha1 = "452692cb711d5f79dc7f85e440ce41b9f244d221";
+      };
+    };
+    "babel-plugin-transform-es2015-block-scoped-functions-6.22.0" = {
+      name = "babel-plugin-transform-es2015-block-scoped-functions";
+      packageName = "babel-plugin-transform-es2015-block-scoped-functions";
+      version = "6.22.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz";
+        sha1 = "bbc51b49f964d70cb8d8e0b94e820246ce3a6141";
+      };
+    };
+    "babel-plugin-transform-es2015-block-scoping-6.26.0" = {
+      name = "babel-plugin-transform-es2015-block-scoping";
+      packageName = "babel-plugin-transform-es2015-block-scoping";
+      version = "6.26.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz";
+        sha1 = "d70f5299c1308d05c12f463813b0a09e73b1895f";
+      };
+    };
+    "babel-plugin-transform-es2015-classes-6.24.1" = {
+      name = "babel-plugin-transform-es2015-classes";
+      packageName = "babel-plugin-transform-es2015-classes";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz";
+        sha1 = "5a4c58a50c9c9461e564b4b2a3bfabc97a2584db";
+      };
+    };
+    "babel-plugin-transform-es2015-computed-properties-6.24.1" = {
+      name = "babel-plugin-transform-es2015-computed-properties";
+      packageName = "babel-plugin-transform-es2015-computed-properties";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz";
+        sha1 = "6fe2a8d16895d5634f4cd999b6d3480a308159b3";
+      };
+    };
+    "babel-plugin-transform-es2015-destructuring-6.23.0" = {
+      name = "babel-plugin-transform-es2015-destructuring";
+      packageName = "babel-plugin-transform-es2015-destructuring";
+      version = "6.23.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz";
+        sha1 = "997bb1f1ab967f682d2b0876fe358d60e765c56d";
+      };
+    };
+    "babel-plugin-transform-es2015-duplicate-keys-6.24.1" = {
+      name = "babel-plugin-transform-es2015-duplicate-keys";
+      packageName = "babel-plugin-transform-es2015-duplicate-keys";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz";
+        sha1 = "73eb3d310ca969e3ef9ec91c53741a6f1576423e";
+      };
+    };
+    "babel-plugin-transform-es2015-for-of-6.23.0" = {
+      name = "babel-plugin-transform-es2015-for-of";
+      packageName = "babel-plugin-transform-es2015-for-of";
+      version = "6.23.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz";
+        sha1 = "f47c95b2b613df1d3ecc2fdb7573623c75248691";
+      };
+    };
+    "babel-plugin-transform-es2015-function-name-6.24.1" = {
+      name = "babel-plugin-transform-es2015-function-name";
+      packageName = "babel-plugin-transform-es2015-function-name";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz";
+        sha1 = "834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b";
+      };
+    };
+    "babel-plugin-transform-es2015-literals-6.22.0" = {
+      name = "babel-plugin-transform-es2015-literals";
+      packageName = "babel-plugin-transform-es2015-literals";
+      version = "6.22.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz";
+        sha1 = "4f54a02d6cd66cf915280019a31d31925377ca2e";
+      };
+    };
+    "babel-plugin-transform-es2015-modules-amd-6.24.1" = {
+      name = "babel-plugin-transform-es2015-modules-amd";
+      packageName = "babel-plugin-transform-es2015-modules-amd";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz";
+        sha1 = "3b3e54017239842d6d19c3011c4bd2f00a00d154";
+      };
+    };
+    "babel-plugin-transform-es2015-modules-commonjs-6.26.2" = {
+      name = "babel-plugin-transform-es2015-modules-commonjs";
+      packageName = "babel-plugin-transform-es2015-modules-commonjs";
+      version = "6.26.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz";
+        sha512 = "CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==";
+      };
+    };
+    "babel-plugin-transform-es2015-modules-systemjs-6.24.1" = {
+      name = "babel-plugin-transform-es2015-modules-systemjs";
+      packageName = "babel-plugin-transform-es2015-modules-systemjs";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz";
+        sha1 = "ff89a142b9119a906195f5f106ecf305d9407d23";
+      };
+    };
+    "babel-plugin-transform-es2015-modules-umd-6.24.1" = {
+      name = "babel-plugin-transform-es2015-modules-umd";
+      packageName = "babel-plugin-transform-es2015-modules-umd";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz";
+        sha1 = "ac997e6285cd18ed6176adb607d602344ad38468";
+      };
+    };
+    "babel-plugin-transform-es2015-object-super-6.24.1" = {
+      name = "babel-plugin-transform-es2015-object-super";
+      packageName = "babel-plugin-transform-es2015-object-super";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz";
+        sha1 = "24cef69ae21cb83a7f8603dad021f572eb278f8d";
+      };
+    };
+    "babel-plugin-transform-es2015-parameters-6.24.1" = {
+      name = "babel-plugin-transform-es2015-parameters";
+      packageName = "babel-plugin-transform-es2015-parameters";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz";
+        sha1 = "57ac351ab49caf14a97cd13b09f66fdf0a625f2b";
+      };
+    };
+    "babel-plugin-transform-es2015-shorthand-properties-6.24.1" = {
+      name = "babel-plugin-transform-es2015-shorthand-properties";
+      packageName = "babel-plugin-transform-es2015-shorthand-properties";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz";
+        sha1 = "24f875d6721c87661bbd99a4622e51f14de38aa0";
+      };
+    };
+    "babel-plugin-transform-es2015-spread-6.22.0" = {
+      name = "babel-plugin-transform-es2015-spread";
+      packageName = "babel-plugin-transform-es2015-spread";
+      version = "6.22.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz";
+        sha1 = "d6d68a99f89aedc4536c81a542e8dd9f1746f8d1";
+      };
+    };
+    "babel-plugin-transform-es2015-sticky-regex-6.24.1" = {
+      name = "babel-plugin-transform-es2015-sticky-regex";
+      packageName = "babel-plugin-transform-es2015-sticky-regex";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz";
+        sha1 = "00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc";
+      };
+    };
+    "babel-plugin-transform-es2015-template-literals-6.22.0" = {
+      name = "babel-plugin-transform-es2015-template-literals";
+      packageName = "babel-plugin-transform-es2015-template-literals";
+      version = "6.22.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz";
+        sha1 = "a84b3450f7e9f8f1f6839d6d687da84bb1236d8d";
+      };
+    };
+    "babel-plugin-transform-es2015-typeof-symbol-6.23.0" = {
+      name = "babel-plugin-transform-es2015-typeof-symbol";
+      packageName = "babel-plugin-transform-es2015-typeof-symbol";
+      version = "6.23.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz";
+        sha1 = "dec09f1cddff94b52ac73d505c84df59dcceb372";
+      };
+    };
+    "babel-plugin-transform-es2015-unicode-regex-6.24.1" = {
+      name = "babel-plugin-transform-es2015-unicode-regex";
+      packageName = "babel-plugin-transform-es2015-unicode-regex";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz";
+        sha1 = "d38b12f42ea7323f729387f18a7c5ae1faeb35e9";
+      };
+    };
+    "babel-plugin-transform-regenerator-6.26.0" = {
+      name = "babel-plugin-transform-regenerator";
+      packageName = "babel-plugin-transform-regenerator";
+      version = "6.26.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz";
+        sha1 = "e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f";
+      };
+    };
+    "babel-plugin-transform-strict-mode-6.24.1" = {
+      name = "babel-plugin-transform-strict-mode";
+      packageName = "babel-plugin-transform-strict-mode";
+      version = "6.24.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz";
+        sha1 = "d5faf7aa578a65bbe591cf5edae04a0c67020758";
+      };
+    };
+    "babel-polyfill-6.26.0" = {
+      name = "babel-polyfill";
+      packageName = "babel-polyfill";
+      version = "6.26.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz";
+        sha1 = "379937abc67d7895970adc621f284cd966cf2153";
+      };
+    };
+    "babel-register-6.26.0" = {
+      name = "babel-register";
+      packageName = "babel-register";
+      version = "6.26.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz";
+        sha1 = "6ed021173e2fcb486d7acb45c6009a856f647071";
+      };
+    };
+    "babel-runtime-6.26.0" = {
+      name = "babel-runtime";
+      packageName = "babel-runtime";
+      version = "6.26.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz";
+        sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe";
+      };
+    };
+    "babel-template-6.26.0" = {
+      name = "babel-template";
+      packageName = "babel-template";
+      version = "6.26.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz";
+        sha1 = "de03e2d16396b069f46dd9fff8521fb1a0e35e02";
+      };
+    };
+    "babel-traverse-6.26.0" = {
+      name = "babel-traverse";
+      packageName = "babel-traverse";
+      version = "6.26.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz";
+        sha1 = "46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee";
+      };
+    };
+    "babel-types-6.26.0" = {
+      name = "babel-types";
+      packageName = "babel-types";
+      version = "6.26.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz";
+        sha1 = "a3b073f94ab49eb6fa55cd65227a334380632497";
+      };
+    };
+    "babylon-6.18.0" = {
+      name = "babylon";
+      packageName = "babylon";
+      version = "6.18.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz";
+        sha512 = "q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==";
+      };
+    };
+    "backo2-1.0.2" = {
+      name = "backo2";
+      packageName = "backo2";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz";
+        sha1 = "31ab1ac8b129363463e35b3ebb69f4dfcfba7947";
+      };
+    };
+    "backoff-2.5.0" = {
+      name = "backoff";
+      packageName = "backoff";
+      version = "2.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz";
+        sha1 = "f616eda9d3e4b66b8ca7fca79f695722c5f8e26f";
+      };
+    };
+    "bail-1.0.3" = {
+      name = "bail";
+      packageName = "bail";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz";
+        sha512 = "1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==";
+      };
+    };
+    "balanced-match-0.4.2" = {
+      name = "balanced-match";
+      packageName = "balanced-match";
+      version = "0.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz";
+        sha1 = "cb3f3e3c732dc0f01ee70b403f302e61d7709838";
+      };
+    };
+    "balanced-match-1.0.0" = {
+      name = "balanced-match";
+      packageName = "balanced-match";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz";
+        sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
+      };
+    };
+    "base-0.11.2" = {
+      name = "base";
+      packageName = "base";
+      version = "0.11.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/base/-/base-0.11.2.tgz";
+        sha512 = "5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==";
+      };
+    };
+    "base64-arraybuffer-0.1.5" = {
+      name = "base64-arraybuffer";
+      packageName = "base64-arraybuffer";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz";
+        sha1 = "73926771923b5a19747ad666aa5cd4bf9c6e9ce8";
+      };
+    };
+    "base64-js-1.3.0" = {
+      name = "base64-js";
+      packageName = "base64-js";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz";
+        sha512 = "ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==";
+      };
+    };
+    "base64id-1.0.0" = {
+      name = "base64id";
+      packageName = "base64id";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz";
+        sha1 = "47688cb99bb6804f0e06d3e763b1c32e57d8e6b6";
+      };
+    };
+    "basic-auth-2.0.0" = {
+      name = "basic-auth";
+      packageName = "basic-auth";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz";
+        sha1 = "015db3f353e02e56377755f962742e8981e7bbba";
+      };
+    };
+    "bcrypt-pbkdf-1.0.2" = {
+      name = "bcrypt-pbkdf";
+      packageName = "bcrypt-pbkdf";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
+        sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e";
+      };
+    };
+    "bcryptjs-2.4.3" = {
+      name = "bcryptjs";
+      packageName = "bcryptjs";
+      version = "2.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz";
+        sha1 = "9ab5627b93e60621ff7cdac5da9733027df1d0cb";
+      };
+    };
+    "beeper-1.1.1" = {
+      name = "beeper";
+      packageName = "beeper";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz";
+        sha1 = "e6d5ea8c5dad001304a70b22638447f69cb2f809";
+      };
+    };
+    "better-assert-1.0.2" = {
+      name = "better-assert";
+      packageName = "better-assert";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz";
+        sha1 = "40866b9e1b9e0b55b481894311e68faffaebc522";
+      };
+    };
+    "big-number-0.3.1" = {
+      name = "big-number";
+      packageName = "big-number";
+      version = "0.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/big-number/-/big-number-0.3.1.tgz";
+        sha1 = "ac73020c0a59bb79eb17c2ce2db77f77d974e013";
+      };
+    };
+    "big.js-3.2.0" = {
+      name = "big.js";
+      packageName = "big.js";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz";
+        sha512 = "+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==";
+      };
+    };
+    "bignumber.js-4.1.0" = {
+      name = "bignumber.js";
+      packageName = "bignumber.js";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.1.0.tgz";
+        sha512 = "eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA==";
+      };
+    };
+    "binary-extensions-1.11.0" = {
+      name = "binary-extensions";
+      packageName = "binary-extensions";
+      version = "1.11.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz";
+        sha1 = "46aa1751fb6a2f93ee5e689bb1087d4b14c6c205";
+      };
+    };
+    "bl-1.2.2" = {
+      name = "bl";
+      packageName = "bl";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz";
+        sha512 = "e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==";
+      };
+    };
+    "blint-1.0.3" = {
+      name = "blint";
+      packageName = "blint";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/blint/-/blint-1.0.3.tgz";
+        sha512 = "6RwH3oJYMujQNd38WWU+jUSRqWfECrmpfL8o3fn3Q3fE9nn5iAktLZJHGEHqeecownbZZwZneTLbaNbIWwU9/A==";
+      };
+    };
+    "blob-0.0.4" = {
+      name = "blob";
+      packageName = "blob";
+      version = "0.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz";
+        sha1 = "bcf13052ca54463f30f9fc7e95b9a47630a94921";
+      };
+    };
+    "block-elements-1.2.0" = {
+      name = "block-elements";
+      packageName = "block-elements";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/block-elements/-/block-elements-1.2.0.tgz";
+        sha1 = "8e04ccab638c7e2596f5065fb6c1c7518c905a5d";
+      };
+    };
+    "block-stream2-1.1.0" = {
+      name = "block-stream2";
+      packageName = "block-stream2";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/block-stream2/-/block-stream2-1.1.0.tgz";
+        sha1 = "c738e3a91ba977ebb5e1fef431e13ca11d8639e2";
+      };
+    };
+    "bluebird-3.5.1" = {
+      name = "bluebird";
+      packageName = "bluebird";
+      version = "3.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz";
+        sha512 = "MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==";
+      };
+    };
+    "body-parser-1.18.2" = {
+      name = "body-parser";
+      packageName = "body-parser";
+      version = "1.18.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz";
+        sha1 = "87678a19d84b47d859b83199bd59bce222b10454";
+      };
+    };
+    "boolbase-1.0.0" = {
+      name = "boolbase";
+      packageName = "boolbase";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz";
+        sha1 = "68dff5fbe60c51eb37725ea9e3ed310dcc1e776e";
+      };
+    };
+    "boom-2.10.1" = {
+      name = "boom";
+      packageName = "boom";
+      version = "2.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz";
+        sha1 = "39c8918ceff5799f83f9492a848f625add0c766f";
+      };
+    };
+    "boundary-1.0.1" = {
+      name = "boundary";
+      packageName = "boundary";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/boundary/-/boundary-1.0.1.tgz";
+        sha1 = "4d67dc2602c0cc16dd9bce7ebf87e948290f5812";
+      };
+    };
+    "brace-expansion-1.1.11" = {
+      name = "brace-expansion";
+      packageName = "brace-expansion";
+      version = "1.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";
+        sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==";
+      };
+    };
+    "braces-1.8.5" = {
+      name = "braces";
+      packageName = "braces";
+      version = "1.8.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz";
+        sha1 = "ba77962e12dff969d6b76711e914b737857bf6a7";
+      };
+    };
+    "braces-2.3.2" = {
+      name = "braces";
+      packageName = "braces";
+      version = "2.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz";
+        sha512 = "aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==";
+      };
+    };
+    "browserify-aes-0.4.0" = {
+      name = "browserify-aes";
+      packageName = "browserify-aes";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz";
+        sha1 = "067149b668df31c4b58533e02d01e806d8608e2c";
+      };
+    };
+    "browserify-mime-1.2.9" = {
+      name = "browserify-mime";
+      packageName = "browserify-mime";
+      version = "1.2.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-mime/-/browserify-mime-1.2.9.tgz";
+        sha1 = "aeb1af28de6c0d7a6a2ce40adb68ff18422af31f";
+      };
+    };
+    "browserify-zlib-0.1.4" = {
+      name = "browserify-zlib";
+      packageName = "browserify-zlib";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz";
+        sha1 = "bb35f8a519f600e0fa6b8485241c979d0141fb2d";
+      };
+    };
+    "browserslist-1.7.7" = {
+      name = "browserslist";
+      packageName = "browserslist";
+      version = "1.7.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz";
+        sha1 = "0bd76704258be829b2398bb50e4b62d1a166b0b9";
+      };
+    };
+    "buble-0.15.2" = {
+      name = "buble";
+      packageName = "buble";
+      version = "0.15.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buble/-/buble-0.15.2.tgz";
+        sha1 = "547fc47483f8e5e8176d82aa5ebccb183b02d613";
+      };
+    };
+    "buffer-4.9.1" = {
+      name = "buffer";
+      packageName = "buffer";
+      version = "4.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz";
+        sha1 = "6d1bb601b07a4efced97094132093027c95bc298";
+      };
+    };
+    "buffer-5.2.0" = {
+      name = "buffer";
+      packageName = "buffer";
+      version = "5.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer/-/buffer-5.2.0.tgz";
+        sha512 = "nUJyfChH7PMJy75eRDCCKtszSEFokUNXC1hNVSe+o+VdcgvDPLs20k3v8UXI8ruRYAJiYtyRea8mYyqPxoHWDw==";
+      };
+    };
+    "buffer-alloc-1.2.0" = {
+      name = "buffer-alloc";
+      packageName = "buffer-alloc";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz";
+        sha512 = "CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==";
+      };
+    };
+    "buffer-alloc-unsafe-1.1.0" = {
+      name = "buffer-alloc-unsafe";
+      packageName = "buffer-alloc-unsafe";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz";
+        sha512 = "TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==";
+      };
+    };
+    "buffer-crc32-0.2.13" = {
+      name = "buffer-crc32";
+      packageName = "buffer-crc32";
+      version = "0.2.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz";
+        sha1 = "0d333e3f00eac50aa1454abd30ef8c2a5d9a7242";
+      };
+    };
+    "buffer-fill-1.0.0" = {
+      name = "buffer-fill";
+      packageName = "buffer-fill";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz";
+        sha1 = "f8f78b76789888ef39f205cd637f68e702122b2c";
+      };
+    };
+    "buffer-from-1.1.1" = {
+      name = "buffer-from";
+      packageName = "buffer-from";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz";
+        sha512 = "MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==";
+      };
+    };
+    "buffer-writer-1.0.1" = {
+      name = "buffer-writer";
+      packageName = "buffer-writer";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz";
+        sha1 = "22a936901e3029afcd7547eb4487ceb697a3bf08";
+      };
+    };
+    "builtin-modules-1.1.1" = {
+      name = "builtin-modules";
+      packageName = "builtin-modules";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz";
+        sha1 = "270f076c5a72c02f5b65a47df94c5fe3a278892f";
+      };
+    };
+    "builtin-status-codes-3.0.0" = {
+      name = "builtin-status-codes";
+      packageName = "builtin-status-codes";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz";
+        sha1 = "85982878e21b98e1c66425e03d0174788f569ee8";
+      };
+    };
+    "bunyan-1.8.12" = {
+      name = "bunyan";
+      packageName = "bunyan";
+      version = "1.8.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz";
+        sha1 = "f150f0f6748abdd72aeae84f04403be2ef113797";
+      };
+    };
+    "bytes-3.0.0" = {
+      name = "bytes";
+      packageName = "bytes";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz";
+        sha1 = "d32815404d689699f85a4ea4fa8755dd13a96048";
+      };
+    };
+    "cacache-10.0.4" = {
+      name = "cacache";
+      packageName = "cacache";
+      version = "10.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz";
+        sha512 = "Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==";
+      };
+    };
+    "cache-base-1.0.1" = {
+      name = "cache-base";
+      packageName = "cache-base";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz";
+        sha512 = "AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==";
+      };
+    };
+    "caller-path-0.1.0" = {
+      name = "caller-path";
+      packageName = "caller-path";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz";
+        sha1 = "94085ef63581ecd3daa92444a8fe94e82577751f";
+      };
+    };
+    "callsite-1.0.0" = {
+      name = "callsite";
+      packageName = "callsite";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz";
+        sha1 = "280398e5d664bd74038b6f0905153e6e8af1bc20";
+      };
+    };
+    "callsites-0.2.0" = {
+      name = "callsites";
+      packageName = "callsites";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz";
+        sha1 = "afab96262910a7f33c19a5775825c69f34e350ca";
+      };
+    };
+    "camel-case-3.0.0" = {
+      name = "camel-case";
+      packageName = "camel-case";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz";
+        sha1 = "ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73";
+      };
+    };
+    "camelcase-1.2.1" = {
+      name = "camelcase";
+      packageName = "camelcase";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz";
+        sha1 = "9bb5304d2e0b56698b2c758b08a3eaa9daa58a39";
+      };
+    };
+    "camelcase-4.1.0" = {
+      name = "camelcase";
+      packageName = "camelcase";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz";
+        sha1 = "d545635be1e33c542649c69173e5de6acfae34dd";
+      };
+    };
+    "camelize-1.0.0" = {
+      name = "camelize";
+      packageName = "camelize";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz";
+        sha1 = "164a5483e630fa4321e5af07020e531831b2609b";
+      };
+    };
+    "caniuse-api-1.6.1" = {
+      name = "caniuse-api";
+      packageName = "caniuse-api";
+      version = "1.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz";
+        sha1 = "b534e7c734c4f81ec5fbe8aca2ad24354b962c6c";
+      };
+    };
+    "caniuse-db-1.0.30000874" = {
+      name = "caniuse-db";
+      packageName = "caniuse-db";
+      version = "1.0.30000874";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000874.tgz";
+        sha1 = "49edc0262efdc6c49d4d962bb16d1f0c790fa44e";
+      };
+    };
+    "caseless-0.12.0" = {
+      name = "caseless";
+      packageName = "caseless";
+      version = "0.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz";
+        sha1 = "1b681c21ff84033c826543090689420d187151dc";
+      };
+    };
+    "ccount-1.0.3" = {
+      name = "ccount";
+      packageName = "ccount";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz";
+        sha512 = "Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==";
+      };
+    };
+    "center-align-0.1.3" = {
+      name = "center-align";
+      packageName = "center-align";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz";
+        sha1 = "aa0d32629b6ee972200411cbd4461c907bc2b7ad";
+      };
+    };
+    "chalk-0.4.0" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz";
+        sha1 = "5199a3ddcd0c1efe23bc08c1b027b06176e0c64f";
+      };
+    };
+    "chalk-1.1.3" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";
+        sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
+      };
+    };
+    "chalk-2.4.1" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "2.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz";
+        sha512 = "ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==";
+      };
+    };
+    "character-entities-1.2.2" = {
+      name = "character-entities";
+      packageName = "character-entities";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz";
+        sha512 = "sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==";
+      };
+    };
+    "character-entities-html4-1.1.2" = {
+      name = "character-entities-html4";
+      packageName = "character-entities-html4";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz";
+        sha512 = "sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==";
+      };
+    };
+    "character-entities-legacy-1.1.2" = {
+      name = "character-entities-legacy";
+      packageName = "character-entities-legacy";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz";
+        sha512 = "9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==";
+      };
+    };
+    "character-reference-invalid-1.1.2" = {
+      name = "character-reference-invalid";
+      packageName = "character-reference-invalid";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz";
+        sha512 = "7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==";
+      };
+    };
+    "chokidar-1.7.0" = {
+      name = "chokidar";
+      packageName = "chokidar";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz";
+        sha1 = "798e689778151c8076b4b360e5edd28cda2bb468";
+      };
+    };
+    "chownr-1.0.1" = {
+      name = "chownr";
+      packageName = "chownr";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz";
+        sha1 = "e2a75042a9551908bebd25b8523d5f9769d79181";
+      };
+    };
+    "circular-json-0.3.3" = {
+      name = "circular-json";
+      packageName = "circular-json";
+      version = "0.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz";
+        sha512 = "UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==";
+      };
+    };
+    "clap-1.2.3" = {
+      name = "clap";
+      packageName = "clap";
+      version = "1.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz";
+        sha512 = "4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==";
+      };
+    };
+    "class-utils-0.3.6" = {
+      name = "class-utils";
+      packageName = "class-utils";
+      version = "0.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz";
+        sha512 = "qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==";
+      };
+    };
+    "clean-css-4.1.11" = {
+      name = "clean-css";
+      packageName = "clean-css";
+      version = "4.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz";
+        sha1 = "2ecdf145aba38f54740f26cefd0ff3e03e125d6a";
+      };
+    };
+    "cli-1.0.1" = {
+      name = "cli";
+      packageName = "cli";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz";
+        sha1 = "22817534f24bfa4950c34d532d48ecbc621b8c14";
+      };
+    };
+    "cli-color-1.2.0" = {
+      name = "cli-color";
+      packageName = "cli-color";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli-color/-/cli-color-1.2.0.tgz";
+        sha1 = "3a5ae74fd76b6267af666e69e2afbbd01def34d1";
+      };
+    };
+    "cli-cursor-1.0.2" = {
+      name = "cli-cursor";
+      packageName = "cli-cursor";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz";
+        sha1 = "64da3f7d56a54412e59794bd62dc35295e8f2987";
+      };
+    };
+    "cli-width-2.2.0" = {
+      name = "cli-width";
+      packageName = "cli-width";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz";
+        sha1 = "ff19ede8a9a5e579324147b0c11f0fbcbabed639";
+      };
+    };
+    "clipboard-2.0.1" = {
+      name = "clipboard";
+      packageName = "clipboard";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clipboard/-/clipboard-2.0.1.tgz";
+        sha512 = "7yhQBmtN+uYZmfRjjVjKa0dZdWuabzpSKGtyQZN+9C8xlC788SSJjOHWh7tzurfwTqTD5UDYAhIv5fRJg3sHjQ==";
+      };
+    };
+    "cliui-2.1.0" = {
+      name = "cliui";
+      packageName = "cliui";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz";
+        sha1 = "4b475760ff80264c762c3a1719032e91c7fea0d1";
+      };
+    };
+    "cliui-3.2.0" = {
+      name = "cliui";
+      packageName = "cliui";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz";
+        sha1 = "120601537a916d29940f934da3b48d585a39213d";
+      };
+    };
+    "clone-0.2.0" = {
+      name = "clone";
+      packageName = "clone";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz";
+        sha1 = "c6126a90ad4f72dbf5acdb243cc37724fe93fc1f";
+      };
+    };
+    "clone-1.0.4" = {
+      name = "clone";
+      packageName = "clone";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz";
+        sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e";
+      };
+    };
+    "clone-stats-0.0.1" = {
+      name = "clone-stats";
+      packageName = "clone-stats";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz";
+        sha1 = "b88f94a82cf38b8791d58046ea4029ad88ca99d1";
+      };
+    };
+    "co-4.6.0" = {
+      name = "co";
+      packageName = "co";
+      version = "4.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/co/-/co-4.6.0.tgz";
+        sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184";
+      };
+    };
+    "coa-1.0.4" = {
+      name = "coa";
+      packageName = "coa";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz";
+        sha1 = "a9ef153660d6a86a8bdec0289a5c684d217432fd";
+      };
+    };
+    "code-point-at-1.1.0" = {
+      name = "code-point-at";
+      packageName = "code-point-at";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz";
+        sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77";
+      };
+    };
+    "collapse-white-space-1.0.4" = {
+      name = "collapse-white-space";
+      packageName = "collapse-white-space";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz";
+        sha512 = "YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==";
+      };
+    };
+    "collapse-whitespace-1.1.2" = {
+      name = "collapse-whitespace";
+      packageName = "collapse-whitespace";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/collapse-whitespace/-/collapse-whitespace-1.1.2.tgz";
+        sha1 = "b9b31d79d5594ee3c22c15819c54828e565b3085";
+      };
+    };
+    "collection-visit-1.0.0" = {
+      name = "collection-visit";
+      packageName = "collection-visit";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz";
+        sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0";
+      };
+    };
+    "color-0.11.4" = {
+      name = "color";
+      packageName = "color";
+      version = "0.11.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color/-/color-0.11.4.tgz";
+        sha1 = "6d7b5c74fb65e841cd48792ad1ed5e07b904d764";
+      };
+    };
+    "color-convert-1.9.2" = {
+      name = "color-convert";
+      packageName = "color-convert";
+      version = "1.9.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz";
+        sha512 = "3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==";
+      };
+    };
+    "color-name-1.1.1" = {
+      name = "color-name";
+      packageName = "color-name";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz";
+        sha1 = "4b1415304cf50028ea81643643bd82ea05803689";
+      };
+    };
+    "color-string-0.3.0" = {
+      name = "color-string";
+      packageName = "color-string";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz";
+        sha1 = "27d46fb67025c5c2fa25993bfbf579e47841b991";
+      };
+    };
+    "color-support-1.1.3" = {
+      name = "color-support";
+      packageName = "color-support";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz";
+        sha512 = "qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==";
+      };
+    };
+    "colormin-1.1.2" = {
+      name = "colormin";
+      packageName = "colormin";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz";
+        sha1 = "ea2f7420a72b96881a38aae59ec124a6f7298133";
+      };
+    };
+    "colors-1.0.3" = {
+      name = "colors";
+      packageName = "colors";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz";
+        sha1 = "0433f44d809680fdeb60ed260f1b0c262e82a40b";
+      };
+    };
+    "colors-1.1.2" = {
+      name = "colors";
+      packageName = "colors";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz";
+        sha1 = "168a4701756b6a7f51a12ce0c97bfa28c084ed63";
+      };
+    };
+    "combined-stream-1.0.6" = {
+      name = "combined-stream";
+      packageName = "combined-stream";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz";
+        sha1 = "723e7df6e801ac5613113a7e445a9b69cb632818";
+      };
+    };
+    "commander-2.14.1" = {
+      name = "commander";
+      packageName = "commander";
+      version = "2.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz";
+        sha512 = "+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==";
+      };
+    };
+    "commander-2.16.0" = {
+      name = "commander";
+      packageName = "commander";
+      version = "2.16.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz";
+        sha512 = "sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==";
+      };
+    };
+    "commondir-1.0.1" = {
+      name = "commondir";
+      packageName = "commondir";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz";
+        sha1 = "ddd800da0c66127393cca5950ea968a3aaf1253b";
+      };
+    };
+    "component-bind-1.0.0" = {
+      name = "component-bind";
+      packageName = "component-bind";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz";
+        sha1 = "00c608ab7dcd93897c0009651b1d3a8e1e73bbd1";
+      };
+    };
+    "component-emitter-1.2.1" = {
+      name = "component-emitter";
+      packageName = "component-emitter";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz";
+        sha1 = "137918d6d78283f7df7a6b7c5a63e140e69425e6";
+      };
+    };
+    "component-inherit-0.0.3" = {
+      name = "component-inherit";
+      packageName = "component-inherit";
+      version = "0.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz";
+        sha1 = "645fc4adf58b72b649d5cae65135619db26ff143";
+      };
+    };
+    "compress-commons-1.2.2" = {
+      name = "compress-commons";
+      packageName = "compress-commons";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz";
+        sha1 = "524a9f10903f3a813389b0225d27c48bb751890f";
+      };
+    };
+    "compressible-2.0.14" = {
+      name = "compressible";
+      packageName = "compressible";
+      version = "2.0.14";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz";
+        sha1 = "326c5f507fbb055f54116782b969a81b67a29da7";
+      };
+    };
+    "concat-map-0.0.1" = {
+      name = "concat-map";
+      packageName = "concat-map";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
+        sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
+      };
+    };
+    "concat-stream-1.6.2" = {
+      name = "concat-stream";
+      packageName = "concat-stream";
+      version = "1.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz";
+        sha512 = "27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==";
+      };
+    };
+    "config-chain-1.1.11" = {
+      name = "config-chain";
+      packageName = "config-chain";
+      version = "1.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz";
+        sha1 = "aba09747dfbe4c3e70e766a6e41586e1859fc6f2";
+      };
+    };
+    "console-browserify-1.1.0" = {
+      name = "console-browserify";
+      packageName = "console-browserify";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz";
+        sha1 = "f0241c45730a9fc6323b206dbf38edc741d0bb10";
+      };
+    };
+    "console-control-strings-1.1.0" = {
+      name = "console-control-strings";
+      packageName = "console-control-strings";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz";
+        sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e";
+      };
+    };
+    "constants-browserify-1.0.0" = {
+      name = "constants-browserify";
+      packageName = "constants-browserify";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz";
+        sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75";
+      };
+    };
+    "content-disposition-0.5.2" = {
+      name = "content-disposition";
+      packageName = "content-disposition";
+      version = "0.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz";
+        sha1 = "0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4";
+      };
+    };
+    "content-security-policy-builder-2.0.0" = {
+      name = "content-security-policy-builder";
+      packageName = "content-security-policy-builder";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz";
+        sha512 = "j+Nhmj1yfZAikJLImCvPJFE29x/UuBi+/MWqggGGc515JKaZrjuei2RhULJmy0MsstW3E3htl002bwmBNMKr7w==";
+      };
+    };
+    "content-type-1.0.4" = {
+      name = "content-type";
+      packageName = "content-type";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz";
+        sha512 = "hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==";
+      };
+    };
+    "content-type-parser-1.0.2" = {
+      name = "content-type-parser";
+      packageName = "content-type-parser";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz";
+        sha512 = "lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==";
+      };
+    };
+    "convert-source-map-1.5.1" = {
+      name = "convert-source-map";
+      packageName = "convert-source-map";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz";
+        sha1 = "b8278097b9bc229365de5c62cf5fcaed8b5599e5";
+      };
+    };
+    "cookie-0.3.1" = {
+      name = "cookie";
+      packageName = "cookie";
+      version = "0.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz";
+        sha1 = "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb";
+      };
+    };
+    "cookie-signature-1.0.6" = {
+      name = "cookie-signature";
+      packageName = "cookie-signature";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz";
+        sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c";
+      };
+    };
+    "cookiejar-2.0.6" = {
+      name = "cookiejar";
+      packageName = "cookiejar";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cookiejar/-/cookiejar-2.0.6.tgz";
+        sha1 = "0abf356ad00d1c5a219d88d44518046dd026acfe";
+      };
+    };
+    "copy-concurrently-1.0.5" = {
+      name = "copy-concurrently";
+      packageName = "copy-concurrently";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz";
+        sha512 = "f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==";
+      };
+    };
+    "copy-descriptor-0.1.1" = {
+      name = "copy-descriptor";
+      packageName = "copy-descriptor";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz";
+        sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d";
+      };
+    };
+    "core-js-2.5.7" = {
+      name = "core-js";
+      packageName = "core-js";
+      version = "2.5.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz";
+        sha512 = "RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==";
+      };
+    };
+    "core-util-is-1.0.2" = {
+      name = "core-util-is";
+      packageName = "core-util-is";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
+        sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
+      };
+    };
+    "crc-3.4.4" = {
+      name = "crc";
+      packageName = "crc";
+      version = "3.4.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz";
+        sha1 = "9da1e980e3bd44fc5c93bf5ab3da3378d85e466b";
+      };
+    };
+    "crc-3.8.0" = {
+      name = "crc";
+      packageName = "crc";
+      version = "3.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz";
+        sha512 = "iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==";
+      };
+    };
+    "crc32-stream-2.0.0" = {
+      name = "crc32-stream";
+      packageName = "crc32-stream";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz";
+        sha1 = "e3cdd3b4df3168dd74e3de3fbbcb7b297fe908f4";
+      };
+    };
+    "cross-spawn-5.1.0" = {
+      name = "cross-spawn";
+      packageName = "cross-spawn";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz";
+        sha1 = "e8bd0efee58fcff6f8f94510a0a554bbfa235449";
+      };
+    };
+    "cryptiles-2.0.5" = {
+      name = "cryptiles";
+      packageName = "cryptiles";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz";
+        sha1 = "3bdfecdc608147c1c67202fa291e7dca59eaa3b8";
+      };
+    };
+    "crypto-browserify-3.3.0" = {
+      name = "crypto-browserify";
+      packageName = "crypto-browserify";
+      version = "3.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz";
+        sha1 = "b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c";
+      };
+    };
+    "csextends-1.2.0" = {
+      name = "csextends";
+      packageName = "csextends";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/csextends/-/csextends-1.2.0.tgz";
+        sha512 = "S/8k1bDTJIwuGgQYmsRoE+8P+ohV32WhQ0l4zqrc0XDdxOhjQQD7/wTZwCzoZX53jSX3V/qwjT+OkPTxWQcmjg==";
+      };
+    };
+    "css-color-names-0.0.4" = {
+      name = "css-color-names";
+      packageName = "css-color-names";
+      version = "0.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz";
+        sha1 = "808adc2e79cf84738069b646cb20ec27beb629e0";
+      };
+    };
+    "css-select-1.2.0" = {
+      name = "css-select";
+      packageName = "css-select";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz";
+        sha1 = "2b3a110539c5355f1cd8d314623e870b121ec858";
+      };
+    };
+    "css-selector-tokenizer-0.7.0" = {
+      name = "css-selector-tokenizer";
+      packageName = "css-selector-tokenizer";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz";
+        sha1 = "e6988474ae8c953477bf5e7efecfceccd9cf4c86";
+      };
+    };
+    "css-what-2.1.0" = {
+      name = "css-what";
+      packageName = "css-what";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz";
+        sha1 = "9467d032c38cfaefb9f2d79501253062f87fa1bd";
+      };
+    };
+    "cssesc-0.1.0" = {
+      name = "cssesc";
+      packageName = "cssesc";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz";
+        sha1 = "c814903e45623371a0477b40109aaafbeeaddbb4";
+      };
+    };
+    "cssfilter-0.0.10" = {
+      name = "cssfilter";
+      packageName = "cssfilter";
+      version = "0.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz";
+        sha1 = "c6d2672632a2e5c83e013e6864a42ce8defd20ae";
+      };
+    };
+    "cssnano-3.10.0" = {
+      name = "cssnano";
+      packageName = "cssnano";
+      version = "3.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz";
+        sha1 = "4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38";
+      };
+    };
+    "csso-2.3.2" = {
+      name = "csso";
+      packageName = "csso";
+      version = "2.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz";
+        sha1 = "ddd52c587033f49e94b71fc55569f252e8ff5f85";
+      };
+    };
+    "cssom-0.2.5" = {
+      name = "cssom";
+      packageName = "cssom";
+      version = "0.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssom/-/cssom-0.2.5.tgz";
+        sha1 = "2682709b5902e7212df529116ff788cd5b254894";
+      };
+    };
+    "cssom-0.3.4" = {
+      name = "cssom";
+      packageName = "cssom";
+      version = "0.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz";
+        sha512 = "+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==";
+      };
+    };
+    "cssstyle-0.2.37" = {
+      name = "cssstyle";
+      packageName = "cssstyle";
+      version = "0.2.37";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz";
+        sha1 = "541097234cb2513c83ceed3acddc27ff27987d54";
+      };
+    };
+    "cycle-1.0.3" = {
+      name = "cycle";
+      packageName = "cycle";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz";
+        sha1 = "21e80b2be8580f98b468f379430662b046c34ad2";
+      };
+    };
+    "cyclist-0.2.2" = {
+      name = "cyclist";
+      packageName = "cyclist";
+      version = "0.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz";
+        sha1 = "1b33792e11e914a2fd6d6ed6447464444e5fa640";
+      };
+    };
+    "d-1.0.0" = {
+      name = "d";
+      packageName = "d";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/d/-/d-1.0.0.tgz";
+        sha1 = "754bb5bfe55451da69a58b94d45f4c5b0462d58f";
+      };
+    };
+    "d3-3.5.17" = {
+      name = "d3";
+      packageName = "d3";
+      version = "3.5.17";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz";
+        sha1 = "bc46748004378b21a360c9fc7cf5231790762fb8";
+      };
+    };
+    "dagre-d3-renderer-0.4.26" = {
+      name = "dagre-d3-renderer";
+      packageName = "dagre-d3-renderer";
+      version = "0.4.26";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dagre-d3-renderer/-/dagre-d3-renderer-0.4.26.tgz";
+        sha512 = "vOWj1uA4/APTrfDyfHaH/xpfXhPh9rszW+HOaEwPCeA6Afl06Lobfh7OpESuVMQW2QGuY4UQ7pte/p0WhdDs7w==";
+      };
+    };
+    "dagre-layout-0.8.8" = {
+      name = "dagre-layout";
+      packageName = "dagre-layout";
+      version = "0.8.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dagre-layout/-/dagre-layout-0.8.8.tgz";
+        sha512 = "ZNV15T9za7X+fV8Z07IZquUKugCxm5owoiPPxfEx6OJRD331nkiIaF3vSt0JEY5FkrY0KfRQxcpQ3SpXB7pLPQ==";
+      };
+    };
+    "dashdash-1.14.1" = {
+      name = "dashdash";
+      packageName = "dashdash";
+      version = "1.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
+        sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
+      };
+    };
+    "dasherize-2.0.0" = {
+      name = "dasherize";
+      packageName = "dasherize";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz";
+        sha1 = "6d809c9cd0cf7bb8952d80fc84fa13d47ddb1308";
+      };
+    };
+    "date-now-0.1.4" = {
+      name = "date-now";
+      packageName = "date-now";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz";
+        sha1 = "eaf439fd4d4848ad74e5cc7dbef200672b9e345b";
+      };
+    };
+    "dateformat-2.2.0" = {
+      name = "dateformat";
+      packageName = "dateformat";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz";
+        sha1 = "4065e2013cf9fb916ddfd82efb506ad4c6769062";
+      };
+    };
+    "debug-2.6.9" = {
+      name = "debug";
+      packageName = "debug";
+      version = "2.6.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz";
+        sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==";
+      };
+    };
+    "debug-3.1.0" = {
+      name = "debug";
+      packageName = "debug";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz";
+        sha512 = "OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==";
+      };
+    };
+    "debug-log-1.0.1" = {
+      name = "debug-log";
+      packageName = "debug-log";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz";
+        sha1 = "2307632d4c04382b8df8a32f70b895046d52745f";
+      };
+    };
+    "decamelize-1.2.0" = {
+      name = "decamelize";
+      packageName = "decamelize";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz";
+        sha1 = "f6534d15148269b20352e7bee26f501f9a191290";
+      };
+    };
+    "decode-uri-component-0.2.0" = {
+      name = "decode-uri-component";
+      packageName = "decode-uri-component";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz";
+        sha1 = "eb3913333458775cb84cd1a1fae062106bb87545";
+      };
+    };
+    "deep-equal-1.0.1" = {
+      name = "deep-equal";
+      packageName = "deep-equal";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz";
+        sha1 = "f5d260292b660e084eff4cdbc9f08ad3247448b5";
+      };
+    };
+    "deep-extend-0.6.0" = {
+      name = "deep-extend";
+      packageName = "deep-extend";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz";
+        sha512 = "LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==";
+      };
+    };
+    "deep-is-0.1.3" = {
+      name = "deep-is";
+      packageName = "deep-is";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
+        sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
+      };
+    };
+    "defaults-1.0.3" = {
+      name = "defaults";
+      packageName = "defaults";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz";
+        sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d";
+      };
+    };
+    "define-properties-1.1.2" = {
+      name = "define-properties";
+      packageName = "define-properties";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz";
+        sha1 = "83a73f2fea569898fb737193c8f873caf6d45c94";
+      };
+    };
+    "define-property-0.2.5" = {
+      name = "define-property";
+      packageName = "define-property";
+      version = "0.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz";
+        sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116";
+      };
+    };
+    "define-property-1.0.0" = {
+      name = "define-property";
+      packageName = "define-property";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz";
+        sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6";
+      };
+    };
+    "define-property-2.0.2" = {
+      name = "define-property";
+      packageName = "define-property";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz";
+        sha512 = "jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==";
+      };
+    };
+    "defined-1.0.0" = {
+      name = "defined";
+      packageName = "defined";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz";
+        sha1 = "c98d9bcef75674188e110969151199e39b1fa693";
+      };
+    };
+    "deglob-2.1.1" = {
+      name = "deglob";
+      packageName = "deglob";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz";
+        sha512 = "2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==";
+      };
+    };
+    "del-2.2.2" = {
+      name = "del";
+      packageName = "del";
+      version = "2.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/del/-/del-2.2.2.tgz";
+        sha1 = "c12c981d067846c84bcaf862cff930d907ffd1a8";
+      };
+    };
+    "delayed-stream-1.0.0" = {
+      name = "delayed-stream";
+      packageName = "delayed-stream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
+        sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
+      };
+    };
+    "delegate-3.2.0" = {
+      name = "delegate";
+      packageName = "delegate";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz";
+        sha512 = "IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==";
+      };
+    };
+    "delegates-1.0.0" = {
+      name = "delegates";
+      packageName = "delegates";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz";
+        sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a";
+      };
+    };
+    "depd-1.1.1" = {
+      name = "depd";
+      packageName = "depd";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz";
+        sha1 = "5783b4e1c459f06fa5ca27f991f3d06e7a310359";
+      };
+    };
+    "depd-1.1.2" = {
+      name = "depd";
+      packageName = "depd";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz";
+        sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9";
+      };
+    };
+    "deprecated-0.0.1" = {
+      name = "deprecated";
+      packageName = "deprecated";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz";
+        sha1 = "f9c9af5464afa1e7a971458a8bdef2aa94d5bb19";
+      };
+    };
+    "destroy-1.0.4" = {
+      name = "destroy";
+      packageName = "destroy";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz";
+        sha1 = "978857442c44749e4206613e37946205826abd80";
+      };
+    };
+    "detect-file-0.1.0" = {
+      name = "detect-file";
+      packageName = "detect-file";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz";
+        sha1 = "4935dedfd9488648e006b0129566e9386711ea63";
+      };
+    };
+    "detect-file-1.0.0" = {
+      name = "detect-file";
+      packageName = "detect-file";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz";
+        sha1 = "f0d66d03672a825cb1b73bdb3fe62310c8e552b7";
+      };
+    };
+    "detect-indent-4.0.0" = {
+      name = "detect-indent";
+      packageName = "detect-indent";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz";
+        sha1 = "f76d064352cdf43a1cb6ce619c4ee3a9475de208";
+      };
+    };
+    "detect-libc-1.0.3" = {
+      name = "detect-libc";
+      packageName = "detect-libc";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz";
+        sha1 = "fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b";
+      };
+    };
+    "dir-glob-2.0.0" = {
+      name = "dir-glob";
+      packageName = "dir-glob";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz";
+        sha512 = "37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==";
+      };
+    };
+    "dns-lookup-all-1.0.2" = {
+      name = "dns-lookup-all";
+      packageName = "dns-lookup-all";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dns-lookup-all/-/dns-lookup-all-1.0.2.tgz";
+        sha1 = "4d8b2b1af69c83a7b262eb5de92485b7b3a215eb";
+      };
+    };
+    "dns-prefetch-control-0.1.0" = {
+      name = "dns-prefetch-control";
+      packageName = "dns-prefetch-control";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz";
+        sha1 = "60ddb457774e178f1f9415f0cabb0e85b0b300b2";
+      };
+    };
+    "doctrine-1.5.0" = {
+      name = "doctrine";
+      packageName = "doctrine";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz";
+        sha1 = "379dce730f6166f76cefa4e6707a159b02c5a6fa";
+      };
+    };
+    "doctrine-2.1.0" = {
+      name = "doctrine";
+      packageName = "doctrine";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz";
+        sha512 = "35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==";
+      };
+    };
+    "dom-converter-0.1.4" = {
+      name = "dom-converter";
+      packageName = "dom-converter";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz";
+        sha1 = "a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b";
+      };
+    };
+    "dom-serializer-0.1.0" = {
+      name = "dom-serializer";
+      packageName = "dom-serializer";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz";
+        sha1 = "073c697546ce0780ce23be4a28e293e40bc30c82";
+      };
+    };
+    "domain-browser-1.2.0" = {
+      name = "domain-browser";
+      packageName = "domain-browser";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz";
+        sha512 = "jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==";
+      };
+    };
+    "domelementtype-1.1.3" = {
+      name = "domelementtype";
+      packageName = "domelementtype";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz";
+        sha1 = "bd28773e2642881aec51544924299c5cd822185b";
+      };
+    };
+    "domelementtype-1.3.0" = {
+      name = "domelementtype";
+      packageName = "domelementtype";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz";
+        sha1 = "b17aed82e8ab59e52dd9c19b1756e0fc187204c2";
+      };
+    };
+    "domhandler-2.1.0" = {
+      name = "domhandler";
+      packageName = "domhandler";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz";
+        sha1 = "d2646f5e57f6c3bab11cf6cb05d3c0acf7412594";
+      };
+    };
+    "domhandler-2.3.0" = {
+      name = "domhandler";
+      packageName = "domhandler";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz";
+        sha1 = "2de59a0822d5027fabff6f032c2b25a2a8abe738";
+      };
+    };
+    "domhandler-2.4.2" = {
+      name = "domhandler";
+      packageName = "domhandler";
+      version = "2.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz";
+        sha512 = "JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==";
+      };
+    };
+    "domutils-1.1.6" = {
+      name = "domutils";
+      packageName = "domutils";
+      version = "1.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz";
+        sha1 = "bddc3de099b9a2efacc51c623f28f416ecc57485";
+      };
+    };
+    "domutils-1.5.1" = {
+      name = "domutils";
+      packageName = "domutils";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz";
+        sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf";
+      };
+    };
+    "domutils-1.7.0" = {
+      name = "domutils";
+      packageName = "domutils";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz";
+        sha512 = "Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==";
+      };
+    };
+    "dont-sniff-mimetype-1.0.0" = {
+      name = "dont-sniff-mimetype";
+      packageName = "dont-sniff-mimetype";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz";
+        sha1 = "5932890dc9f4e2f19e5eb02a20026e5e5efc8f58";
+      };
+    };
+    "dottie-1.1.1" = {
+      name = "dottie";
+      packageName = "dottie";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dottie/-/dottie-1.1.1.tgz";
+        sha1 = "45c2a3f48bd6528eeed267a69a848eaaca6faa6a";
+      };
+    };
+    "dtrace-provider-0.8.7" = {
+      name = "dtrace-provider";
+      packageName = "dtrace-provider";
+      version = "0.8.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz";
+        sha1 = "dc939b4d3e0620cfe0c1cd803d0d2d7ed04ffd04";
+      };
+    };
+    "duplexer-0.1.1" = {
+      name = "duplexer";
+      packageName = "duplexer";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz";
+        sha1 = "ace6ff808c1ce66b57d1ebf97977acb02334cfc1";
+      };
+    };
+    "duplexer2-0.0.2" = {
+      name = "duplexer2";
+      packageName = "duplexer2";
+      version = "0.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz";
+        sha1 = "c614dcf67e2fb14995a91711e5a617e8a60a31db";
+      };
+    };
+    "duplexify-3.6.0" = {
+      name = "duplexify";
+      packageName = "duplexify";
+      version = "3.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz";
+        sha512 = "fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==";
+      };
+    };
+    "eachr-2.0.4" = {
+      name = "eachr";
+      packageName = "eachr";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eachr/-/eachr-2.0.4.tgz";
+        sha1 = "466f7caa10708f610509e32c807aafe57fc122bf";
+      };
+    };
+    "ecc-jsbn-0.1.2" = {
+      name = "ecc-jsbn";
+      packageName = "ecc-jsbn";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz";
+        sha1 = "3a83a904e54353287874c564b7549386849a98c9";
+      };
+    };
+    "editions-1.3.4" = {
+      name = "editions";
+      packageName = "editions";
+      version = "1.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz";
+        sha512 = "gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==";
+      };
+    };
+    "editorconfig-0.13.3" = {
+      name = "editorconfig";
+      packageName = "editorconfig";
+      version = "0.13.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.3.tgz";
+        sha512 = "WkjsUNVCu+ITKDj73QDvi0trvpdDWdkDyHybDGSXPfekLCqwmpD7CP7iPbvBgosNuLcI96XTDwNa75JyFl7tEQ==";
+      };
+    };
+    "ee-first-1.1.1" = {
+      name = "ee-first";
+      packageName = "ee-first";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz";
+        sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d";
+      };
+    };
+    "ejs-2.6.1" = {
+      name = "ejs";
+      packageName = "ejs";
+      version = "2.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz";
+        sha512 = "0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==";
+      };
+    };
+    "electron-to-chromium-1.3.55" = {
+      name = "electron-to-chromium";
+      packageName = "electron-to-chromium";
+      version = "1.3.55";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.55.tgz";
+        sha1 = "f150e10b20b77d9d41afcca312efe0c3b1a7fdce";
+      };
+    };
+    "emoji-regex-6.1.3" = {
+      name = "emoji-regex";
+      packageName = "emoji-regex";
+      version = "6.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.3.tgz";
+        sha1 = "ec79a3969b02d2ecf2b72254279bf99bc7a83932";
+      };
+    };
+    "emojis-list-2.1.0" = {
+      name = "emojis-list";
+      packageName = "emojis-list";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz";
+        sha1 = "4daa4d9db00f9819880c79fa457ae5b09a1fd389";
+      };
+    };
+    "encodeurl-1.0.2" = {
+      name = "encodeurl";
+      packageName = "encodeurl";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz";
+        sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59";
+      };
+    };
+    "end-of-stream-0.1.5" = {
+      name = "end-of-stream";
+      packageName = "end-of-stream";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz";
+        sha1 = "8e177206c3c80837d85632e8b9359dfe8b2f6eaf";
+      };
+    };
+    "end-of-stream-1.4.1" = {
+      name = "end-of-stream";
+      packageName = "end-of-stream";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz";
+        sha512 = "1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==";
+      };
+    };
+    "engine.io-3.1.5" = {
+      name = "engine.io";
+      packageName = "engine.io";
+      version = "3.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz";
+        sha512 = "D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==";
+      };
+    };
+    "engine.io-client-3.1.6" = {
+      name = "engine.io-client";
+      packageName = "engine.io-client";
+      version = "3.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz";
+        sha512 = "hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==";
+      };
+    };
+    "engine.io-parser-2.1.2" = {
+      name = "engine.io-parser";
+      packageName = "engine.io-parser";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz";
+        sha512 = "dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==";
+      };
+    };
+    "enhanced-resolve-0.9.1" = {
+      name = "enhanced-resolve";
+      packageName = "enhanced-resolve";
+      version = "0.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz";
+        sha1 = "4d6e689b3725f86090927ccc86cd9f1635b89e2e";
+      };
+    };
+    "entities-1.0.0" = {
+      name = "entities";
+      packageName = "entities";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz";
+        sha1 = "b2987aa3821347fcde642b24fdfc9e4fb712bf26";
+      };
+    };
+    "entities-1.1.1" = {
+      name = "entities";
+      packageName = "entities";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz";
+        sha1 = "6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0";
+      };
+    };
+    "errno-0.1.7" = {
+      name = "errno";
+      packageName = "errno";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz";
+        sha512 = "MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==";
+      };
+    };
+    "error-ex-1.3.2" = {
+      name = "error-ex";
+      packageName = "error-ex";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz";
+        sha512 = "7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==";
+      };
+    };
+    "es-abstract-1.12.0" = {
+      name = "es-abstract";
+      packageName = "es-abstract";
+      version = "1.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz";
+        sha512 = "C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==";
+      };
+    };
+    "es-to-primitive-1.1.1" = {
+      name = "es-to-primitive";
+      packageName = "es-to-primitive";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz";
+        sha1 = "45355248a88979034b6792e19bb81f2b7975dd0d";
+      };
+    };
+    "es5-ext-0.10.45" = {
+      name = "es5-ext";
+      packageName = "es5-ext";
+      version = "0.10.45";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz";
+        sha512 = "FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==";
+      };
+    };
+    "es6-error-2.1.1" = {
+      name = "es6-error";
+      packageName = "es6-error";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es6-error/-/es6-error-2.1.1.tgz";
+        sha1 = "91384301ec5ed1c9a7247d1128247216f03547cd";
+      };
+    };
+    "es6-iterator-2.0.3" = {
+      name = "es6-iterator";
+      packageName = "es6-iterator";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz";
+        sha1 = "a7de889141a05a94b0854403b2d0a0fbfa98f3b7";
+      };
+    };
+    "es6-map-0.1.5" = {
+      name = "es6-map";
+      packageName = "es6-map";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz";
+        sha1 = "9136e0503dcc06a301690f0bb14ff4e364e949f0";
+      };
+    };
+    "es6-promise-4.2.4" = {
+      name = "es6-promise";
+      packageName = "es6-promise";
+      version = "4.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz";
+        sha512 = "/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==";
+      };
+    };
+    "es6-set-0.1.5" = {
+      name = "es6-set";
+      packageName = "es6-set";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz";
+        sha1 = "d2b3ec5d4d800ced818db538d28974db0a73ccb1";
+      };
+    };
+    "es6-symbol-3.1.1" = {
+      name = "es6-symbol";
+      packageName = "es6-symbol";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz";
+        sha1 = "bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77";
+      };
+    };
+    "es6-weak-map-2.0.2" = {
+      name = "es6-weak-map";
+      packageName = "es6-weak-map";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz";
+        sha1 = "5e3ab32251ffd1538a1f8e5ffa1357772f92d96f";
+      };
+    };
+    "escape-html-1.0.3" = {
+      name = "escape-html";
+      packageName = "escape-html";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz";
+        sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988";
+      };
+    };
+    "escape-string-regexp-1.0.5" = {
+      name = "escape-string-regexp";
+      packageName = "escape-string-regexp";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
+        sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
+      };
+    };
+    "escodegen-1.11.0" = {
+      name = "escodegen";
+      packageName = "escodegen";
+      version = "1.11.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz";
+        sha512 = "IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==";
+      };
+    };
+    "escope-3.6.0" = {
+      name = "escope";
+      packageName = "escope";
+      version = "3.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz";
+        sha1 = "e01975e812781a163a6dadfdd80398dc64c889c3";
+      };
+    };
+    "eslint-3.18.0" = {
+      name = "eslint";
+      packageName = "eslint";
+      version = "3.18.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint/-/eslint-3.18.0.tgz";
+        sha1 = "647e985c4ae71502d20ac62c109f66d5104c8a4b";
+      };
+    };
+    "eslint-config-standard-7.1.0" = {
+      name = "eslint-config-standard";
+      packageName = "eslint-config-standard";
+      version = "7.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-7.1.0.tgz";
+        sha1 = "47e769ea0739f5b2d5693b1a501c21c9650fafcf";
+      };
+    };
+    "eslint-config-standard-jsx-3.3.0" = {
+      name = "eslint-config-standard-jsx";
+      packageName = "eslint-config-standard-jsx";
+      version = "3.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-3.3.0.tgz";
+        sha1 = "cab0801a15a360bf63facb97ab22fbdd88d8a5e0";
+      };
+    };
+    "eslint-plugin-promise-3.4.2" = {
+      name = "eslint-plugin-promise";
+      packageName = "eslint-plugin-promise";
+      version = "3.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.4.2.tgz";
+        sha1 = "1be2793eafe2d18b5b123b8136c269f804fe7122";
+      };
+    };
+    "eslint-plugin-react-6.9.0" = {
+      name = "eslint-plugin-react";
+      packageName = "eslint-plugin-react";
+      version = "6.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.9.0.tgz";
+        sha1 = "54c2e9906b76f9d10142030bdc34e9d6840a0bb2";
+      };
+    };
+    "eslint-plugin-standard-2.0.1" = {
+      name = "eslint-plugin-standard";
+      packageName = "eslint-plugin-standard";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-2.0.1.tgz";
+        sha1 = "3589699ff9c917f2c25f76a916687f641c369ff3";
+      };
+    };
+    "espree-3.5.4" = {
+      name = "espree";
+      packageName = "espree";
+      version = "3.5.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz";
+        sha512 = "yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==";
+      };
+    };
+    "esprima-2.7.3" = {
+      name = "esprima";
+      packageName = "esprima";
+      version = "2.7.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz";
+        sha1 = "96e3b70d5779f6ad49cd032673d1c312767ba581";
+      };
+    };
+    "esprima-3.1.3" = {
+      name = "esprima";
+      packageName = "esprima";
+      version = "3.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz";
+        sha1 = "fdca51cee6133895e3c88d535ce49dbff62a4633";
+      };
+    };
+    "esprima-4.0.1" = {
+      name = "esprima";
+      packageName = "esprima";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz";
+        sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==";
+      };
+    };
+    "esquery-1.0.1" = {
+      name = "esquery";
+      packageName = "esquery";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz";
+        sha512 = "SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==";
+      };
+    };
+    "esrecurse-4.2.1" = {
+      name = "esrecurse";
+      packageName = "esrecurse";
+      version = "4.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz";
+        sha512 = "64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==";
+      };
+    };
+    "estraverse-4.2.0" = {
+      name = "estraverse";
+      packageName = "estraverse";
+      version = "4.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz";
+        sha1 = "0dee3fed31fcd469618ce7342099fc1afa0bdb13";
+      };
+    };
+    "estree-walker-0.2.1" = {
+      name = "estree-walker";
+      packageName = "estree-walker";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz";
+        sha1 = "bdafe8095383d8414d5dc2ecf4c9173b6db9412e";
+      };
+    };
+    "esutils-2.0.2" = {
+      name = "esutils";
+      packageName = "esutils";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz";
+        sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b";
+      };
+    };
+    "etag-1.8.1" = {
+      name = "etag";
+      packageName = "etag";
+      version = "1.8.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz";
+        sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887";
+      };
+    };
+    "eve-git://github.com/adobe-webplatform/eve.git#eef80ed" = {
+      name = "eve";
+      packageName = "eve";
+      version = "0.4.1";
+      src = fetchgit {
+        url = "git://github.com/adobe-webplatform/eve.git";
+        rev = "eef80ed8d188423c2272746fb8ae5cc8dad84cb1";
+        sha256 = "2b86ece1177813f6ee1eb6b0cc0e85cfdaca208eb46aa911dd802263e2d9b003";
+      };
+    };
+    "eve-raphael-0.5.0" = {
+      name = "eve-raphael";
+      packageName = "eve-raphael";
+      version = "0.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eve-raphael/-/eve-raphael-0.5.0.tgz";
+        sha1 = "17c754b792beef3fa6684d79cf5a47c63c4cda30";
+      };
+    };
+    "event-emitter-0.3.5" = {
+      name = "event-emitter";
+      packageName = "event-emitter";
+      version = "0.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz";
+        sha1 = "df8c69eef1647923c7157b9ce83840610b02cc39";
+      };
+    };
+    "eventemitter2-0.4.14" = {
+      name = "eventemitter2";
+      packageName = "eventemitter2";
+      version = "0.4.14";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz";
+        sha1 = "8f61b75cde012b2e9eb284d4545583b5643b61ab";
+      };
+    };
+    "events-1.1.1" = {
+      name = "events";
+      packageName = "events";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/events/-/events-1.1.1.tgz";
+        sha1 = "9ebdb7635ad099c70dcc4c2a1f5004288e8bd924";
+      };
+    };
+    "execa-0.7.0" = {
+      name = "execa";
+      packageName = "execa";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz";
+        sha1 = "944becd34cc41ee32a63a9faf27ad5a65fc59777";
+      };
+    };
+    "exit-0.1.2" = {
+      name = "exit";
+      packageName = "exit";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz";
+        sha1 = "0632638f8d877cc82107d30a0fff1a17cba1cd0c";
+      };
+    };
+    "exit-hook-1.1.1" = {
+      name = "exit-hook";
+      packageName = "exit-hook";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz";
+        sha1 = "f05ca233b48c05d54fff07765df8507e95c02ff8";
+      };
+    };
+    "expand-brackets-0.1.5" = {
+      name = "expand-brackets";
+      packageName = "expand-brackets";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz";
+        sha1 = "df07284e342a807cd733ac5af72411e581d1177b";
+      };
+    };
+    "expand-brackets-2.1.4" = {
+      name = "expand-brackets";
+      packageName = "expand-brackets";
+      version = "2.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz";
+        sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622";
+      };
+    };
+    "expand-range-1.8.2" = {
+      name = "expand-range";
+      packageName = "expand-range";
+      version = "1.8.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz";
+        sha1 = "a299effd335fe2721ebae8e257ec79644fc85337";
+      };
+    };
+    "expand-tilde-1.2.2" = {
+      name = "expand-tilde";
+      packageName = "expand-tilde";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz";
+        sha1 = "0b81eba897e5a3d31d1c3d102f8f01441e559449";
+      };
+    };
+    "expand-tilde-2.0.2" = {
+      name = "expand-tilde";
+      packageName = "expand-tilde";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz";
+        sha1 = "97e801aa052df02454de46b02bf621642cdc8502";
+      };
+    };
+    "expect-ct-0.1.1" = {
+      name = "expect-ct";
+      packageName = "expect-ct";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/expect-ct/-/expect-ct-0.1.1.tgz";
+        sha512 = "ngXzTfoRGG7fYens3/RMb6yYoVLvLMfmsSllP/mZPxNHgFq41TmPSLF/nLY7fwoclI2vElvAmILFWGUYqdjfCg==";
+      };
+    };
+    "extend-1.2.1" = {
+      name = "extend";
+      packageName = "extend";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz";
+        sha1 = "a0f5fd6cfc83a5fe49ef698d60ec8a624dd4576c";
+      };
+    };
+    "extend-3.0.0" = {
+      name = "extend";
+      packageName = "extend";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz";
+        sha1 = "5a474353b9f3353ddd8176dfd37b91c83a46f1d4";
+      };
+    };
+    "extend-3.0.2" = {
+      name = "extend";
+      packageName = "extend";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";
+        sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==";
+      };
+    };
+    "extend-shallow-2.0.1" = {
+      name = "extend-shallow";
+      packageName = "extend-shallow";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz";
+        sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f";
+      };
+    };
+    "extend-shallow-3.0.2" = {
+      name = "extend-shallow";
+      packageName = "extend-shallow";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz";
+        sha1 = "26a71aaf073b39fb2127172746131c2704028db8";
+      };
+    };
+    "extendr-2.1.0" = {
+      name = "extendr";
+      packageName = "extendr";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extendr/-/extendr-2.1.0.tgz";
+        sha1 = "301aa0bbea565f4d2dc8f570f2a22611a8527b56";
+      };
+    };
+    "extglob-0.3.2" = {
+      name = "extglob";
+      packageName = "extglob";
+      version = "0.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz";
+        sha1 = "2e18ff3d2f49ab2765cec9023f011daa8d8349a1";
+      };
+    };
+    "extglob-2.0.4" = {
+      name = "extglob";
+      packageName = "extglob";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz";
+        sha512 = "Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==";
+      };
+    };
+    "extract-opts-2.2.0" = {
+      name = "extract-opts";
+      packageName = "extract-opts";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extract-opts/-/extract-opts-2.2.0.tgz";
+        sha1 = "1fa28eba7352c6db480f885ceb71a46810be6d7d";
+      };
+    };
+    "extract-zip-1.6.7" = {
+      name = "extract-zip";
+      packageName = "extract-zip";
+      version = "1.6.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz";
+        sha1 = "a840b4b8af6403264c8db57f4f1a74333ef81fe9";
+      };
+    };
+    "extsprintf-1.2.0" = {
+      name = "extsprintf";
+      packageName = "extsprintf";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz";
+        sha1 = "5ad946c22f5b32ba7f8cd7426711c6e8a3fc2529";
+      };
+    };
+    "extsprintf-1.3.0" = {
+      name = "extsprintf";
+      packageName = "extsprintf";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz";
+        sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
+      };
+    };
+    "eyes-0.1.8" = {
+      name = "eyes";
+      packageName = "eyes";
+      version = "0.1.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz";
+        sha1 = "62cf120234c683785d902348a800ef3e0cc20bc0";
+      };
+    };
+    "fancy-log-1.3.2" = {
+      name = "fancy-log";
+      packageName = "fancy-log";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz";
+        sha1 = "f41125e3d84f2e7d89a43d06d958c8f78be16be1";
+      };
+    };
+    "fast-deep-equal-1.1.0" = {
+      name = "fast-deep-equal";
+      packageName = "fast-deep-equal";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz";
+        sha1 = "c053477817c86b51daa853c81e059b733d023614";
+      };
+    };
+    "fast-deep-equal-2.0.1" = {
+      name = "fast-deep-equal";
+      packageName = "fast-deep-equal";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz";
+        sha1 = "7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49";
+      };
+    };
+    "fast-json-stable-stringify-2.0.0" = {
+      name = "fast-json-stable-stringify";
+      packageName = "fast-json-stable-stringify";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz";
+        sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2";
+      };
+    };
+    "fast-levenshtein-2.0.6" = {
+      name = "fast-levenshtein";
+      packageName = "fast-levenshtein";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
+        sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
+      };
+    };
+    "fastparse-1.1.1" = {
+      name = "fastparse";
+      packageName = "fastparse";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz";
+        sha1 = "d1e2643b38a94d7583b479060e6c4affc94071f8";
+      };
+    };
+    "fd-slicer-1.0.1" = {
+      name = "fd-slicer";
+      packageName = "fd-slicer";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz";
+        sha1 = "8b5bcbd9ec327c5041bf9ab023fd6750f1177e65";
+      };
+    };
+    "figures-1.7.0" = {
+      name = "figures";
+      packageName = "figures";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz";
+        sha1 = "cbe1e3affcf1cd44b80cadfed28dc793a9701d2e";
+      };
+    };
+    "file-entry-cache-2.0.0" = {
+      name = "file-entry-cache";
+      packageName = "file-entry-cache";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz";
+        sha1 = "c392990c3e684783d838b8c84a45d8a048458361";
+      };
+    };
+    "filename-regex-2.0.1" = {
+      name = "filename-regex";
+      packageName = "filename-regex";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz";
+        sha1 = "c1c4b9bee3e09725ddb106b75c1e301fe2f18b26";
+      };
+    };
+    "fill-range-2.2.4" = {
+      name = "fill-range";
+      packageName = "fill-range";
+      version = "2.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz";
+        sha512 = "cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==";
+      };
+    };
+    "fill-range-4.0.0" = {
+      name = "fill-range";
+      packageName = "fill-range";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz";
+        sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7";
+      };
+    };
+    "finalhandler-1.1.1" = {
+      name = "finalhandler";
+      packageName = "finalhandler";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz";
+        sha512 = "Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==";
+      };
+    };
+    "find-cache-dir-0.1.1" = {
+      name = "find-cache-dir";
+      packageName = "find-cache-dir";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz";
+        sha1 = "c8defae57c8a52a8a784f9e31c57c742e993a0b9";
+      };
+    };
+    "find-cache-dir-1.0.0" = {
+      name = "find-cache-dir";
+      packageName = "find-cache-dir";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz";
+        sha1 = "9288e3e9e3cc3748717d39eade17cf71fc30ee6f";
+      };
+    };
+    "find-index-0.1.1" = {
+      name = "find-index";
+      packageName = "find-index";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz";
+        sha1 = "675d358b2ca3892d795a1ab47232f8b6e2e0dde4";
+      };
+    };
+    "find-root-1.1.0" = {
+      name = "find-root";
+      packageName = "find-root";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz";
+        sha512 = "NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==";
+      };
+    };
+    "find-up-1.1.2" = {
+      name = "find-up";
+      packageName = "find-up";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz";
+        sha1 = "6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f";
+      };
+    };
+    "find-up-2.1.0" = {
+      name = "find-up";
+      packageName = "find-up";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz";
+        sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7";
+      };
+    };
+    "findup-sync-1.0.0" = {
+      name = "findup-sync";
+      packageName = "findup-sync";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/findup-sync/-/findup-sync-1.0.0.tgz";
+        sha1 = "6f7e4b57b6ee3a4037b4414eaedea3f58f71e0ec";
+      };
+    };
+    "findup-sync-2.0.0" = {
+      name = "findup-sync";
+      packageName = "findup-sync";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz";
+        sha1 = "9326b1488c22d1a6088650a86901b2d9a90a2cbc";
+      };
+    };
+    "fined-1.1.0" = {
+      name = "fined";
+      packageName = "fined";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz";
+        sha1 = "b37dc844b76a2f5e7081e884f7c0ae344f153476";
+      };
+    };
+    "first-chunk-stream-1.0.0" = {
+      name = "first-chunk-stream";
+      packageName = "first-chunk-stream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz";
+        sha1 = "59bfb50cd905f60d7c394cd3d9acaab4e6ad934e";
+      };
+    };
+    "flagged-respawn-1.0.0" = {
+      name = "flagged-respawn";
+      packageName = "flagged-respawn";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz";
+        sha1 = "4e79ae9b2eb38bf86b3bb56bf3e0a56aa5fcabd7";
+      };
+    };
+    "flat-cache-1.3.0" = {
+      name = "flat-cache";
+      packageName = "flat-cache";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz";
+        sha1 = "d3030b32b38154f4e3b7e9c709f490f7ef97c481";
+      };
+    };
+    "flatten-1.0.2" = {
+      name = "flatten";
+      packageName = "flatten";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz";
+        sha1 = "dae46a9d78fbe25292258cc1e780a41d95c03782";
+      };
+    };
+    "flush-write-stream-1.0.3" = {
+      name = "flush-write-stream";
+      packageName = "flush-write-stream";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz";
+        sha512 = "calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==";
+      };
+    };
+    "for-in-1.0.2" = {
+      name = "for-in";
+      packageName = "for-in";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz";
+        sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80";
+      };
+    };
+    "for-own-0.1.5" = {
+      name = "for-own";
+      packageName = "for-own";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz";
+        sha1 = "5265c681a4f294dabbf17c9509b6763aa84510ce";
+      };
+    };
+    "for-own-1.0.0" = {
+      name = "for-own";
+      packageName = "for-own";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz";
+        sha1 = "c63332f415cedc4b04dbfe70cf836494c53cb44b";
+      };
+    };
+    "foreach-2.0.5" = {
+      name = "foreach";
+      packageName = "foreach";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz";
+        sha1 = "0bee005018aeb260d0a3af3ae658dd0136ec1b99";
+      };
+    };
+    "forever-agent-0.6.1" = {
+      name = "forever-agent";
+      packageName = "forever-agent";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
+        sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
+      };
+    };
+    "form-data-1.0.0-rc3" = {
+      name = "form-data";
+      packageName = "form-data";
+      version = "1.0.0-rc3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc3.tgz";
+        sha1 = "d35bc62e7fbc2937ae78f948aaa0d38d90607577";
+      };
+    };
+    "form-data-2.1.4" = {
+      name = "form-data";
+      packageName = "form-data";
+      version = "2.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz";
+        sha1 = "33c183acf193276ecaa98143a69e94bfee1750d1";
+      };
+    };
+    "form-data-2.3.2" = {
+      name = "form-data";
+      packageName = "form-data";
+      version = "2.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz";
+        sha1 = "4970498be604c20c005d4f5c23aecd21d6b49099";
+      };
+    };
+    "formidable-1.0.17" = {
+      name = "formidable";
+      packageName = "formidable";
+      version = "1.0.17";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/formidable/-/formidable-1.0.17.tgz";
+        sha1 = "ef5491490f9433b705faa77249c99029ae348559";
+      };
+    };
+    "forwarded-0.1.2" = {
+      name = "forwarded";
+      packageName = "forwarded";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz";
+        sha1 = "98c23dab1175657b8c0573e8ceccd91b0ff18c84";
+      };
+    };
+    "fragment-cache-0.2.1" = {
+      name = "fragment-cache";
+      packageName = "fragment-cache";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz";
+        sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19";
+      };
+    };
+    "frameguard-3.0.0" = {
+      name = "frameguard";
+      packageName = "frameguard";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/frameguard/-/frameguard-3.0.0.tgz";
+        sha1 = "7bcad469ee7b96e91d12ceb3959c78235a9272e9";
+      };
+    };
+    "fresh-0.5.2" = {
+      name = "fresh";
+      packageName = "fresh";
+      version = "0.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz";
+        sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7";
+      };
+    };
+    "from2-2.3.0" = {
+      name = "from2";
+      packageName = "from2";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz";
+        sha1 = "8bfb5502bde4a4d36cfdeea007fcca21d7e382af";
+      };
+    };
+    "fs-constants-1.0.0" = {
+      name = "fs-constants";
+      packageName = "fs-constants";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz";
+        sha512 = "y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==";
+      };
+    };
+    "fs-exists-sync-0.1.0" = {
+      name = "fs-exists-sync";
+      packageName = "fs-exists-sync";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz";
+        sha1 = "982d6893af918e72d08dec9e8673ff2b5a8d6add";
+      };
+    };
+    "fs-extra-1.0.0" = {
+      name = "fs-extra";
+      packageName = "fs-extra";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz";
+        sha1 = "cd3ce5f7e7cb6145883fcae3191e9877f8587950";
+      };
+    };
+    "fs-extra-4.0.3" = {
+      name = "fs-extra";
+      packageName = "fs-extra";
+      version = "4.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz";
+        sha512 = "q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==";
+      };
+    };
+    "fs-minipass-1.2.5" = {
+      name = "fs-minipass";
+      packageName = "fs-minipass";
+      version = "1.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz";
+        sha512 = "JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==";
+      };
+    };
+    "fs-readdir-recursive-1.1.0" = {
+      name = "fs-readdir-recursive";
+      packageName = "fs-readdir-recursive";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz";
+        sha512 = "GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==";
+      };
+    };
+    "fs-write-stream-atomic-1.0.10" = {
+      name = "fs-write-stream-atomic";
+      packageName = "fs-write-stream-atomic";
+      version = "1.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz";
+        sha1 = "b47df53493ef911df75731e70a9ded0189db40c9";
+      };
+    };
+    "fs.realpath-1.0.0" = {
+      name = "fs.realpath";
+      packageName = "fs.realpath";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
+        sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
+      };
+    };
+    "fsevents-1.2.4" = {
+      name = "fsevents";
+      packageName = "fsevents";
+      version = "1.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz";
+        sha512 = "z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==";
+      };
+    };
+    "function-bind-1.1.1" = {
+      name = "function-bind";
+      packageName = "function-bind";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz";
+        sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==";
+      };
+    };
+    "gauge-2.7.4" = {
+      name = "gauge";
+      packageName = "gauge";
+      version = "2.7.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz";
+        sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7";
+      };
+    };
+    "gaze-0.5.2" = {
+      name = "gaze";
+      packageName = "gaze";
+      version = "0.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz";
+        sha1 = "40b709537d24d1d45767db5a908689dfe69ac44f";
+      };
+    };
+    "generate-function-2.0.0" = {
+      name = "generate-function";
+      packageName = "generate-function";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz";
+        sha1 = "6858fe7c0969b7d4e9093337647ac79f60dfbe74";
+      };
+    };
+    "generate-object-property-1.2.0" = {
+      name = "generate-object-property";
+      packageName = "generate-object-property";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz";
+        sha1 = "9c0e1c40308ce804f4783618b937fa88f99d50d0";
+      };
+    };
+    "generic-pool-2.4.2" = {
+      name = "generic-pool";
+      packageName = "generic-pool";
+      version = "2.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.2.tgz";
+        sha1 = "886bc5bf0beb7db96e81bcbba078818de5a62683";
+      };
+    };
+    "generic-pool-2.4.3" = {
+      name = "generic-pool";
+      packageName = "generic-pool";
+      version = "2.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.3.tgz";
+        sha1 = "780c36f69dfad05a5a045dd37be7adca11a4f6ff";
+      };
+    };
+    "get-caller-file-1.0.3" = {
+      name = "get-caller-file";
+      packageName = "get-caller-file";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz";
+        sha512 = "3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==";
+      };
+    };
+    "get-stdin-5.0.1" = {
+      name = "get-stdin";
+      packageName = "get-stdin";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz";
+        sha1 = "122e161591e21ff4c52530305693f20e6393a398";
+      };
+    };
+    "get-stream-3.0.0" = {
+      name = "get-stream";
+      packageName = "get-stream";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz";
+        sha1 = "8e943d1358dc37555054ecbe2edb05aa174ede14";
+      };
+    };
+    "get-value-2.0.6" = {
+      name = "get-value";
+      packageName = "get-value";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz";
+        sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28";
+      };
+    };
+    "getpass-0.1.7" = {
+      name = "getpass";
+      packageName = "getpass";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
+        sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
+      };
+    };
+    "glob-3.1.21" = {
+      name = "glob";
+      packageName = "glob";
+      version = "3.1.21";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz";
+        sha1 = "d29e0a055dea5138f4d07ed40e8982e83c2066cd";
+      };
+    };
+    "glob-4.5.3" = {
+      name = "glob";
+      packageName = "glob";
+      version = "4.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz";
+        sha1 = "c6cb73d3226c1efef04de3c56d012f03377ee15f";
+      };
+    };
+    "glob-6.0.4" = {
+      name = "glob";
+      packageName = "glob";
+      version = "6.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz";
+        sha1 = "0f08860f6a155127b2fadd4f9ce24b1aab6e4d22";
+      };
+    };
+    "glob-7.1.2" = {
+      name = "glob";
+      packageName = "glob";
+      version = "7.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz";
+        sha512 = "MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==";
+      };
+    };
+    "glob-base-0.3.0" = {
+      name = "glob-base";
+      packageName = "glob-base";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz";
+        sha1 = "dbb164f6221b1c0b1ccf82aea328b497df0ea3c4";
+      };
+    };
+    "glob-parent-2.0.0" = {
+      name = "glob-parent";
+      packageName = "glob-parent";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz";
+        sha1 = "81383d72db054fcccf5336daa902f182f6edbb28";
+      };
+    };
+    "glob-stream-3.1.18" = {
+      name = "glob-stream";
+      packageName = "glob-stream";
+      version = "3.1.18";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz";
+        sha1 = "9170a5f12b790306fdfe598f313f8f7954fd143b";
+      };
+    };
+    "glob-watcher-0.0.6" = {
+      name = "glob-watcher";
+      packageName = "glob-watcher";
+      version = "0.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz";
+        sha1 = "b95b4a8df74b39c83298b0c05c978b4d9a3b710b";
+      };
+    };
+    "glob2base-0.0.12" = {
+      name = "glob2base";
+      packageName = "glob2base";
+      version = "0.0.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz";
+        sha1 = "9d419b3e28f12e83a362164a277055922c9c0d56";
+      };
+    };
+    "global-modules-0.2.3" = {
+      name = "global-modules";
+      packageName = "global-modules";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz";
+        sha1 = "ea5a3bed42c6d6ce995a4f8a1269b5dae223828d";
+      };
+    };
+    "global-modules-1.0.0" = {
+      name = "global-modules";
+      packageName = "global-modules";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz";
+        sha512 = "sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==";
+      };
+    };
+    "global-prefix-0.1.5" = {
+      name = "global-prefix";
+      packageName = "global-prefix";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz";
+        sha1 = "8d3bc6b8da3ca8112a160d8d496ff0462bfef78f";
+      };
+    };
+    "global-prefix-1.0.2" = {
+      name = "global-prefix";
+      packageName = "global-prefix";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz";
+        sha1 = "dbf743c6c14992593c655568cb66ed32c0122ebe";
+      };
+    };
+    "globals-9.18.0" = {
+      name = "globals";
+      packageName = "globals";
+      version = "9.18.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz";
+        sha512 = "S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==";
+      };
+    };
+    "globby-5.0.0" = {
+      name = "globby";
+      packageName = "globby";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz";
+        sha1 = "ebd84667ca0dbb330b99bcfc68eac2bc54370e0d";
+      };
+    };
+    "globby-7.1.1" = {
+      name = "globby";
+      packageName = "globby";
+      version = "7.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz";
+        sha1 = "fb2ccff9401f8600945dfada97440cca972b8680";
+      };
+    };
+    "globule-0.1.0" = {
+      name = "globule";
+      packageName = "globule";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz";
+        sha1 = "d9c8edde1da79d125a151b79533b978676346ae5";
+      };
+    };
+    "glogg-1.0.1" = {
+      name = "glogg";
+      packageName = "glogg";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz";
+        sha512 = "ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==";
+      };
+    };
+    "good-listener-1.2.2" = {
+      name = "good-listener";
+      packageName = "good-listener";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz";
+        sha1 = "d53b30cdf9313dffb7dc9a0d477096aa6d145c50";
+      };
+    };
+    "graceful-fs-1.2.3" = {
+      name = "graceful-fs";
+      packageName = "graceful-fs";
+      version = "1.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz";
+        sha1 = "15a4806a57547cb2d2dbf27f42e89a8c3451b364";
+      };
+    };
+    "graceful-fs-3.0.11" = {
+      name = "graceful-fs";
+      packageName = "graceful-fs";
+      version = "3.0.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz";
+        sha1 = "7613c778a1afea62f25c630a086d7f3acbbdd818";
+      };
+    };
+    "graceful-fs-4.1.11" = {
+      name = "graceful-fs";
+      packageName = "graceful-fs";
+      version = "4.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz";
+        sha1 = "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658";
+      };
+    };
+    "graphlib-2.1.5" = {
+      name = "graphlib";
+      packageName = "graphlib";
+      version = "2.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/graphlib/-/graphlib-2.1.5.tgz";
+        sha512 = "XvtbqCcw+EM5SqQrIetIKKD+uZVNQtDPD1goIg7K73RuRZtVI5rYMdcCVSHm/AS1sCBZ7vt0p5WgXouucHQaOA==";
+      };
+    };
+    "graphlibrary-2.2.0" = {
+      name = "graphlibrary";
+      packageName = "graphlibrary";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/graphlibrary/-/graphlibrary-2.2.0.tgz";
+        sha512 = "XTcvT55L8u4MBZrM37zXoUxsgxs/7sow7YSygd9CIwfWTVO8RVu7AYXhhCiTuFEf+APKgx6Jk4SuQbYR0vYKmQ==";
+      };
+    };
+    "grunt-contrib-jshint-1.1.0" = {
+      name = "grunt-contrib-jshint";
+      packageName = "grunt-contrib-jshint";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.1.0.tgz";
+        sha1 = "369d909b2593c40e8be79940b21340850c7939ac";
+      };
+    };
+    "grunt-contrib-qunit-2.0.0" = {
+      name = "grunt-contrib-qunit";
+      packageName = "grunt-contrib-qunit";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-2.0.0.tgz";
+        sha1 = "54a51b4b2c84fee62c3b7e00145c928d1ec2b7ec";
+      };
+    };
+    "grunt-contrib-uglify-3.4.0" = {
+      name = "grunt-contrib-uglify";
+      packageName = "grunt-contrib-uglify";
+      version = "3.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-3.4.0.tgz";
+        sha512 = "UXsTpeP0pytpTYlmll3RDndsRXfdwmrf1tI/AtD/PrArQAzGmKMvj83aVt3D8egWlE6KqPjsJBLCCvfC52LI/A==";
+      };
+    };
+    "grunt-lib-phantomjs-1.1.0" = {
+      name = "grunt-lib-phantomjs";
+      packageName = "grunt-lib-phantomjs";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/grunt-lib-phantomjs/-/grunt-lib-phantomjs-1.1.0.tgz";
+        sha1 = "9e9edcdd9fd2dd40e0c181c94371d572aa5eead2";
+      };
+    };
+    "gulp-3.9.1" = {
+      name = "gulp";
+      packageName = "gulp";
+      version = "3.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz";
+        sha1 = "571ce45928dd40af6514fc4011866016c13845b4";
+      };
+    };
+    "gulp-help-1.6.1" = {
+      name = "gulp-help";
+      packageName = "gulp-help";
+      version = "1.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gulp-help/-/gulp-help-1.6.1.tgz";
+        sha1 = "261db186e18397fef3f6a2c22e9c315bfa88ae0c";
+      };
+    };
+    "gulp-util-3.0.8" = {
+      name = "gulp-util";
+      packageName = "gulp-util";
+      version = "3.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz";
+        sha1 = "0054e1e744502e27c04c187c3ecc505dd54bbb4f";
+      };
+    };
+    "gulplog-1.0.0" = {
+      name = "gulplog";
+      packageName = "gulplog";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz";
+        sha1 = "e28c4d45d05ecbbed818363ce8f9c5926229ffe5";
+      };
+    };
+    "gzip-size-3.0.0" = {
+      name = "gzip-size";
+      packageName = "gzip-size";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz";
+        sha1 = "546188e9bdc337f673772f81660464b389dce520";
+      };
+    };
+    "har-schema-1.0.5" = {
+      name = "har-schema";
+      packageName = "har-schema";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz";
+        sha1 = "d263135f43307c02c602afc8fe95970c0151369e";
+      };
+    };
+    "har-schema-2.0.0" = {
+      name = "har-schema";
+      packageName = "har-schema";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
+        sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
+      };
+    };
+    "har-validator-4.2.1" = {
+      name = "har-validator";
+      packageName = "har-validator";
+      version = "4.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz";
+        sha1 = "33481d0f1bbff600dd203d75812a6a5fba002e2a";
+      };
+    };
+    "har-validator-5.0.3" = {
+      name = "har-validator";
+      packageName = "har-validator";
+      version = "5.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz";
+        sha1 = "ba402c266194f15956ef15e0fcf242993f6a7dfd";
+      };
+    };
+    "has-1.0.3" = {
+      name = "has";
+      packageName = "has";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz";
+        sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==";
+      };
+    };
+    "has-ansi-2.0.0" = {
+      name = "has-ansi";
+      packageName = "has-ansi";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
+        sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
+      };
+    };
+    "has-binary2-1.0.3" = {
+      name = "has-binary2";
+      packageName = "has-binary2";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz";
+        sha512 = "G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==";
+      };
+    };
+    "has-color-0.1.7" = {
+      name = "has-color";
+      packageName = "has-color";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz";
+        sha1 = "67144a5260c34fc3cca677d041daf52fe7b78b2f";
+      };
+    };
+    "has-cors-1.1.0" = {
+      name = "has-cors";
+      packageName = "has-cors";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz";
+        sha1 = "5e474793f7ea9843d1bb99c23eef49ff126fff39";
+      };
+    };
+    "has-flag-1.0.0" = {
+      name = "has-flag";
+      packageName = "has-flag";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz";
+        sha1 = "9d9e793165ce017a00f00418c43f942a7b1d11fa";
+      };
+    };
+    "has-flag-3.0.0" = {
+      name = "has-flag";
+      packageName = "has-flag";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz";
+        sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd";
+      };
+    };
+    "has-gulplog-0.1.0" = {
+      name = "has-gulplog";
+      packageName = "has-gulplog";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz";
+        sha1 = "6414c82913697da51590397dafb12f22967811ce";
+      };
+    };
+    "has-unicode-2.0.1" = {
+      name = "has-unicode";
+      packageName = "has-unicode";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz";
+        sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9";
+      };
+    };
+    "has-value-0.3.1" = {
+      name = "has-value";
+      packageName = "has-value";
+      version = "0.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz";
+        sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f";
+      };
+    };
+    "has-value-1.0.0" = {
+      name = "has-value";
+      packageName = "has-value";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz";
+        sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177";
+      };
+    };
+    "has-values-0.1.4" = {
+      name = "has-values";
+      packageName = "has-values";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz";
+        sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771";
+      };
+    };
+    "has-values-1.0.0" = {
+      name = "has-values";
+      packageName = "has-values";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz";
+        sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f";
+      };
+    };
+    "hash-base-3.0.4" = {
+      name = "hash-base";
+      packageName = "hash-base";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz";
+        sha1 = "5fc8686847ecd73499403319a6b0a3f3f6ae4918";
+      };
+    };
+    "hasha-2.2.0" = {
+      name = "hasha";
+      packageName = "hasha";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz";
+        sha1 = "78d7cbfc1e6d66303fe79837365984517b2f6ee1";
+      };
+    };
+    "hawk-3.1.3" = {
+      name = "hawk";
+      packageName = "hawk";
+      version = "3.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz";
+        sha1 = "078444bd7c1640b0fe540d2c9b73d59678e8e1c4";
+      };
+    };
+    "he-1.1.1" = {
+      name = "he";
+      packageName = "he";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/he/-/he-1.1.1.tgz";
+        sha1 = "93410fd21b009735151f8868c2f271f3427e23fd";
+      };
+    };
+    "helmet-crossdomain-0.3.0" = {
+      name = "helmet-crossdomain";
+      packageName = "helmet-crossdomain";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/helmet-crossdomain/-/helmet-crossdomain-0.3.0.tgz";
+        sha512 = "YiXhj0E35nC4Na5EPE4mTfoXMf9JTGpN4OtB4aLqShKuH9d2HNaJX5MQoglO6STVka0uMsHyG5lCut5Kzsy7Lg==";
+      };
+    };
+    "helmet-csp-2.7.1" = {
+      name = "helmet-csp";
+      packageName = "helmet-csp";
+      version = "2.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.7.1.tgz";
+        sha512 = "sCHwywg4daQ2mY0YYwXSZRsgcCeerUwxMwNixGA7aMLkVmPTYBl7gJoZDHOZyXkqPrtuDT3s2B1A+RLI7WxSdQ==";
+      };
+    };
+    "hide-powered-by-1.0.0" = {
+      name = "hide-powered-by";
+      packageName = "hide-powered-by";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.0.0.tgz";
+        sha1 = "4a85ad65881f62857fc70af7174a1184dccce32b";
+      };
+    };
+    "highlight.js-9.12.0" = {
+      name = "highlight.js";
+      packageName = "highlight.js";
+      version = "9.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz";
+        sha1 = "e6d9dbe57cbefe60751f02af336195870c90c01e";
+      };
+    };
+    "hoek-2.16.3" = {
+      name = "hoek";
+      packageName = "hoek";
+      version = "2.16.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz";
+        sha1 = "20bb7403d3cea398e91dc4710a8ff1b8274a25ed";
+      };
+    };
+    "home-or-tmp-2.0.0" = {
+      name = "home-or-tmp";
+      packageName = "home-or-tmp";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz";
+        sha1 = "e36c3f2d2cae7d746a857e38d18d5f32a7882db8";
+      };
+    };
+    "homedir-polyfill-1.0.1" = {
+      name = "homedir-polyfill";
+      packageName = "homedir-polyfill";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz";
+        sha1 = "4c2bbc8a758998feebf5ed68580f76d46768b4bc";
+      };
+    };
+    "hooker-0.2.3" = {
+      name = "hooker";
+      packageName = "hooker";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz";
+        sha1 = "b834f723cc4a242aa65963459df6d984c5d3d959";
+      };
+    };
+    "hosted-git-info-2.7.1" = {
+      name = "hosted-git-info";
+      packageName = "hosted-git-info";
+      version = "2.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz";
+        sha512 = "7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==";
+      };
+    };
+    "hpkp-2.0.0" = {
+      name = "hpkp";
+      packageName = "hpkp";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz";
+        sha1 = "10e142264e76215a5d30c44ec43de64dee6d1672";
+      };
+    };
+    "hsts-2.1.0" = {
+      name = "hsts";
+      packageName = "hsts";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hsts/-/hsts-2.1.0.tgz";
+        sha512 = "zXhh/DqgrTXJ7erTN6Fh5k/xjMhDGXCqdYN3wvxUvGUQvnxcFfUd8E+6vLg/nk3ss1TYMb+DhRl25fYABioTvA==";
+      };
+    };
+    "html-comment-regex-1.1.1" = {
+      name = "html-comment-regex";
+      packageName = "html-comment-regex";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz";
+        sha1 = "668b93776eaae55ebde8f3ad464b307a4963625e";
+      };
+    };
+    "html-encoding-sniffer-1.0.2" = {
+      name = "html-encoding-sniffer";
+      packageName = "html-encoding-sniffer";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz";
+        sha512 = "71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==";
+      };
+    };
+    "html-minifier-3.5.19" = {
+      name = "html-minifier";
+      packageName = "html-minifier";
+      version = "3.5.19";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.19.tgz";
+        sha512 = "Qr2JC9nsjK8oCrEmuB430ZIA8YWbF3D5LSjywD75FTuXmeqacwHgIM8wp3vHYzzPbklSjp53RdmDuzR4ub2HzA==";
+      };
+    };
+    "htmlparser2-3.3.0" = {
+      name = "htmlparser2";
+      packageName = "htmlparser2";
+      version = "3.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz";
+        sha1 = "cc70d05a59f6542e43f0e685c982e14c924a9efe";
+      };
+    };
+    "htmlparser2-3.8.3" = {
+      name = "htmlparser2";
+      packageName = "htmlparser2";
+      version = "3.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz";
+        sha1 = "996c28b191516a8be86501a7d79757e5c70c1068";
+      };
+    };
+    "htmlparser2-3.9.2" = {
+      name = "htmlparser2";
+      packageName = "htmlparser2";
+      version = "3.9.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz";
+        sha1 = "1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338";
+      };
+    };
+    "http-errors-1.6.2" = {
+      name = "http-errors";
+      packageName = "http-errors";
+      version = "1.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz";
+        sha1 = "0a002cc85707192a7e7946ceedc11155f60ec736";
+      };
+    };
+    "http-errors-1.6.3" = {
+      name = "http-errors";
+      packageName = "http-errors";
+      version = "1.6.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz";
+        sha1 = "8b55680bb4be283a0b5bf4ea2e38580be1d9320d";
+      };
+    };
+    "http-signature-1.1.1" = {
+      name = "http-signature";
+      packageName = "http-signature";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz";
+        sha1 = "df72e267066cd0ac67fb76adf8e134a8fbcf91bf";
+      };
+    };
+    "http-signature-1.2.0" = {
+      name = "http-signature";
+      packageName = "http-signature";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";
+        sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
+      };
+    };
+    "https-browserify-0.0.1" = {
+      name = "https-browserify";
+      packageName = "https-browserify";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz";
+        sha1 = "3f91365cabe60b77ed0ebba24b454e3e09d95a82";
+      };
+    };
+    "iconv-lite-0.4.19" = {
+      name = "iconv-lite";
+      packageName = "iconv-lite";
+      version = "0.4.19";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz";
+        sha512 = "oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==";
+      };
+    };
+    "iconv-lite-0.4.23" = {
+      name = "iconv-lite";
+      packageName = "iconv-lite";
+      version = "0.4.23";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz";
+        sha512 = "neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==";
+      };
+    };
+    "icss-replace-symbols-1.1.0" = {
+      name = "icss-replace-symbols";
+      packageName = "icss-replace-symbols";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz";
+        sha1 = "06ea6f83679a7749e386cfe1fe812ae5db223ded";
+      };
+    };
+    "ieee754-1.1.12" = {
+      name = "ieee754";
+      packageName = "ieee754";
+      version = "1.1.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz";
+        sha512 = "GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==";
+      };
+    };
+    "ieee754-1.1.8" = {
+      name = "ieee754";
+      packageName = "ieee754";
+      version = "1.1.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz";
+        sha1 = "be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4";
+      };
+    };
+    "ienoopen-1.0.0" = {
+      name = "ienoopen";
+      packageName = "ienoopen";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz";
+        sha1 = "346a428f474aac8f50cf3784ea2d0f16f62bda6b";
+      };
+    };
+    "iferr-0.1.5" = {
+      name = "iferr";
+      packageName = "iferr";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz";
+        sha1 = "c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501";
+      };
+    };
+    "ignore-3.3.10" = {
+      name = "ignore";
+      packageName = "ignore";
+      version = "3.3.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz";
+        sha512 = "Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==";
+      };
+    };
+    "ignore-walk-3.0.1" = {
+      name = "ignore-walk";
+      packageName = "ignore-walk";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz";
+        sha512 = "DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==";
+      };
+    };
+    "ignorefs-1.2.0" = {
+      name = "ignorefs";
+      packageName = "ignorefs";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ignorefs/-/ignorefs-1.2.0.tgz";
+        sha1 = "da59fb858976e4a5e43702ccd1f282fdbc9e5756";
+      };
+    };
+    "ignorepatterns-1.1.0" = {
+      name = "ignorepatterns";
+      packageName = "ignorepatterns";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ignorepatterns/-/ignorepatterns-1.1.0.tgz";
+        sha1 = "ac8f436f2239b5dfb66d5f0d3a904a87ac67cc5e";
+      };
+    };
+    "image-size-0.5.5" = {
+      name = "image-size";
+      packageName = "image-size";
+      version = "0.5.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz";
+        sha1 = "09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c";
+      };
+    };
+    "imurmurhash-0.1.4" = {
+      name = "imurmurhash";
+      packageName = "imurmurhash";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
+        sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
+      };
+    };
+    "indexes-of-1.0.1" = {
+      name = "indexes-of";
+      packageName = "indexes-of";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz";
+        sha1 = "f30f716c8e2bd346c7b67d3df3915566a7c05607";
+      };
+    };
+    "indexof-0.0.1" = {
+      name = "indexof";
+      packageName = "indexof";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz";
+        sha1 = "82dc336d232b9062179d05ab3293a66059fd435d";
+      };
+    };
+    "inflection-1.12.0" = {
+      name = "inflection";
+      packageName = "inflection";
+      version = "1.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz";
+        sha1 = "a200935656d6f5f6bc4dc7502e1aecb703228416";
+      };
+    };
+    "inflight-1.0.6" = {
+      name = "inflight";
+      packageName = "inflight";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
+        sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
+      };
+    };
+    "inherits-1.0.2" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz";
+        sha1 = "ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b";
+      };
+    };
+    "inherits-2.0.1" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz";
+        sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1";
+      };
+    };
+    "inherits-2.0.3" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
+        sha1 = "633c2c83e3da42a502f52466022480f4208261de";
+      };
+    };
+    "ini-1.3.5" = {
+      name = "ini";
+      packageName = "ini";
+      version = "1.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz";
+        sha512 = "RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==";
+      };
+    };
+    "inquirer-0.12.0" = {
+      name = "inquirer";
+      packageName = "inquirer";
+      version = "0.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz";
+        sha1 = "1ef2bfd63504df0bc75785fff8c2c41df12f077e";
+      };
+    };
+    "interpret-0.6.6" = {
+      name = "interpret";
+      packageName = "interpret";
+      version = "0.6.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz";
+        sha1 = "fecd7a18e7ce5ca6abfb953e1f86213a49f1625b";
+      };
+    };
+    "interpret-1.1.0" = {
+      name = "interpret";
+      packageName = "interpret";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz";
+        sha1 = "7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614";
+      };
+    };
+    "invariant-2.2.4" = {
+      name = "invariant";
+      packageName = "invariant";
+      version = "2.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz";
+        sha512 = "phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==";
+      };
+    };
+    "invert-kv-1.0.0" = {
+      name = "invert-kv";
+      packageName = "invert-kv";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz";
+        sha1 = "104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6";
+      };
+    };
+    "ipaddr.js-1.8.0" = {
+      name = "ipaddr.js";
+      packageName = "ipaddr.js";
+      version = "1.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz";
+        sha1 = "eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e";
+      };
+    };
+    "is-absolute-1.0.0" = {
+      name = "is-absolute";
+      packageName = "is-absolute";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz";
+        sha512 = "dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==";
+      };
+    };
+    "is-absolute-url-2.1.0" = {
+      name = "is-absolute-url";
+      packageName = "is-absolute-url";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz";
+        sha1 = "50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6";
+      };
+    };
+    "is-accessor-descriptor-0.1.6" = {
+      name = "is-accessor-descriptor";
+      packageName = "is-accessor-descriptor";
+      version = "0.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz";
+        sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6";
+      };
+    };
+    "is-accessor-descriptor-1.0.0" = {
+      name = "is-accessor-descriptor";
+      packageName = "is-accessor-descriptor";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz";
+        sha512 = "m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==";
+      };
+    };
+    "is-alphabetical-1.0.2" = {
+      name = "is-alphabetical";
+      packageName = "is-alphabetical";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz";
+        sha512 = "V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==";
+      };
+    };
+    "is-alphanumerical-1.0.2" = {
+      name = "is-alphanumerical";
+      packageName = "is-alphanumerical";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz";
+        sha512 = "pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==";
+      };
+    };
+    "is-arrayish-0.2.1" = {
+      name = "is-arrayish";
+      packageName = "is-arrayish";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz";
+        sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d";
+      };
+    };
+    "is-binary-path-1.0.1" = {
+      name = "is-binary-path";
+      packageName = "is-binary-path";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz";
+        sha1 = "75f16642b480f187a711c814161fd3a4a7655898";
+      };
+    };
+    "is-buffer-1.1.6" = {
+      name = "is-buffer";
+      packageName = "is-buffer";
+      version = "1.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz";
+        sha512 = "NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==";
+      };
+    };
+    "is-builtin-module-1.0.0" = {
+      name = "is-builtin-module";
+      packageName = "is-builtin-module";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz";
+        sha1 = "540572d34f7ac3119f8f76c30cbc1b1e037affbe";
+      };
+    };
+    "is-callable-1.1.4" = {
+      name = "is-callable";
+      packageName = "is-callable";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz";
+        sha512 = "r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==";
+      };
+    };
+    "is-data-descriptor-0.1.4" = {
+      name = "is-data-descriptor";
+      packageName = "is-data-descriptor";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz";
+        sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56";
+      };
+    };
+    "is-data-descriptor-1.0.0" = {
+      name = "is-data-descriptor";
+      packageName = "is-data-descriptor";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz";
+        sha512 = "jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==";
+      };
+    };
+    "is-date-object-1.0.1" = {
+      name = "is-date-object";
+      packageName = "is-date-object";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz";
+        sha1 = "9aa20eb6aeebbff77fbd33e74ca01b33581d3a16";
+      };
+    };
+    "is-decimal-1.0.2" = {
+      name = "is-decimal";
+      packageName = "is-decimal";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz";
+        sha512 = "TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==";
+      };
+    };
+    "is-descriptor-0.1.6" = {
+      name = "is-descriptor";
+      packageName = "is-descriptor";
+      version = "0.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz";
+        sha512 = "avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==";
+      };
+    };
+    "is-descriptor-1.0.2" = {
+      name = "is-descriptor";
+      packageName = "is-descriptor";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz";
+        sha512 = "2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==";
+      };
+    };
+    "is-dotfile-1.0.3" = {
+      name = "is-dotfile";
+      packageName = "is-dotfile";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz";
+        sha1 = "a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1";
+      };
+    };
+    "is-equal-shallow-0.1.3" = {
+      name = "is-equal-shallow";
+      packageName = "is-equal-shallow";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz";
+        sha1 = "2238098fc221de0bcfa5d9eac4c45d638aa1c534";
+      };
+    };
+    "is-extendable-0.1.1" = {
+      name = "is-extendable";
+      packageName = "is-extendable";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz";
+        sha1 = "62b110e289a471418e3ec36a617d472e301dfc89";
+      };
+    };
+    "is-extendable-1.0.1" = {
+      name = "is-extendable";
+      packageName = "is-extendable";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz";
+        sha512 = "arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==";
+      };
+    };
+    "is-extglob-1.0.0" = {
+      name = "is-extglob";
+      packageName = "is-extglob";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz";
+        sha1 = "ac468177c4943405a092fc8f29760c6ffc6206c0";
+      };
+    };
+    "is-extglob-2.1.1" = {
+      name = "is-extglob";
+      packageName = "is-extglob";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz";
+        sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2";
+      };
+    };
+    "is-finite-1.0.2" = {
+      name = "is-finite";
+      packageName = "is-finite";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz";
+        sha1 = "cc6677695602be550ef11e8b4aa6305342b6d0aa";
+      };
+    };
+    "is-fullwidth-code-point-1.0.0" = {
+      name = "is-fullwidth-code-point";
+      packageName = "is-fullwidth-code-point";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
+        sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
+      };
+    };
+    "is-fullwidth-code-point-2.0.0" = {
+      name = "is-fullwidth-code-point";
+      packageName = "is-fullwidth-code-point";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
+        sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
+      };
+    };
+    "is-glob-2.0.1" = {
+      name = "is-glob";
+      packageName = "is-glob";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz";
+        sha1 = "d096f926a3ded5600f3fdfd91198cb0888c2d863";
+      };
+    };
+    "is-glob-3.1.0" = {
+      name = "is-glob";
+      packageName = "is-glob";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz";
+        sha1 = "7ba5ae24217804ac70707b96922567486cc3e84a";
+      };
+    };
+    "is-glob-4.0.0" = {
+      name = "is-glob";
+      packageName = "is-glob";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz";
+        sha1 = "9521c76845cc2610a85203ddf080a958c2ffabc0";
+      };
+    };
+    "is-hexadecimal-1.0.2" = {
+      name = "is-hexadecimal";
+      packageName = "is-hexadecimal";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz";
+        sha512 = "but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==";
+      };
+    };
+    "is-my-ip-valid-1.0.0" = {
+      name = "is-my-ip-valid";
+      packageName = "is-my-ip-valid";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz";
+        sha512 = "gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==";
+      };
+    };
+    "is-my-json-valid-2.17.2" = {
+      name = "is-my-json-valid";
+      packageName = "is-my-json-valid";
+      version = "2.17.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz";
+        sha512 = "IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==";
+      };
+    };
+    "is-number-2.1.0" = {
+      name = "is-number";
+      packageName = "is-number";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz";
+        sha1 = "01fcbbb393463a548f2f466cce16dece49db908f";
+      };
+    };
+    "is-number-3.0.0" = {
+      name = "is-number";
+      packageName = "is-number";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz";
+        sha1 = "24fd6201a4782cf50561c810276afc7d12d71195";
+      };
+    };
+    "is-number-4.0.0" = {
+      name = "is-number";
+      packageName = "is-number";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz";
+        sha512 = "rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==";
+      };
+    };
+    "is-path-cwd-1.0.0" = {
+      name = "is-path-cwd";
+      packageName = "is-path-cwd";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz";
+        sha1 = "d225ec23132e89edd38fda767472e62e65f1106d";
+      };
+    };
+    "is-path-in-cwd-1.0.1" = {
+      name = "is-path-in-cwd";
+      packageName = "is-path-in-cwd";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz";
+        sha512 = "FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==";
+      };
+    };
+    "is-path-inside-1.0.1" = {
+      name = "is-path-inside";
+      packageName = "is-path-inside";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz";
+        sha1 = "8ef5b7de50437a3fdca6b4e865ef7aa55cb48036";
+      };
+    };
+    "is-plain-obj-1.1.0" = {
+      name = "is-plain-obj";
+      packageName = "is-plain-obj";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz";
+        sha1 = "71a50c8429dfca773c92a390a4a03b39fcd51d3e";
+      };
+    };
+    "is-plain-object-2.0.4" = {
+      name = "is-plain-object";
+      packageName = "is-plain-object";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz";
+        sha512 = "h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==";
+      };
+    };
+    "is-posix-bracket-0.1.1" = {
+      name = "is-posix-bracket";
+      packageName = "is-posix-bracket";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz";
+        sha1 = "3334dc79774368e92f016e6fbc0a88f5cd6e6bc4";
+      };
+    };
+    "is-primitive-2.0.0" = {
+      name = "is-primitive";
+      packageName = "is-primitive";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz";
+        sha1 = "207bab91638499c07b2adf240a41a87210034575";
+      };
+    };
+    "is-promise-2.1.0" = {
+      name = "is-promise";
+      packageName = "is-promise";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz";
+        sha1 = "79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa";
+      };
+    };
+    "is-property-1.0.2" = {
+      name = "is-property";
+      packageName = "is-property";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz";
+        sha1 = "57fe1c4e48474edd65b09911f26b1cd4095dda84";
+      };
+    };
+    "is-regex-1.0.4" = {
+      name = "is-regex";
+      packageName = "is-regex";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz";
+        sha1 = "5517489b547091b0930e095654ced25ee97e9491";
+      };
+    };
+    "is-relative-1.0.0" = {
+      name = "is-relative";
+      packageName = "is-relative";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz";
+        sha512 = "Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==";
+      };
+    };
+    "is-resolvable-1.1.0" = {
+      name = "is-resolvable";
+      packageName = "is-resolvable";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz";
+        sha512 = "qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==";
+      };
+    };
+    "is-stream-1.1.0" = {
+      name = "is-stream";
+      packageName = "is-stream";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz";
+        sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44";
+      };
+    };
+    "is-svg-2.1.0" = {
+      name = "is-svg";
+      packageName = "is-svg";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz";
+        sha1 = "cf61090da0d9efbcab8722deba6f032208dbb0e9";
+      };
+    };
+    "is-symbol-1.0.1" = {
+      name = "is-symbol";
+      packageName = "is-symbol";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz";
+        sha1 = "3cc59f00025194b6ab2e38dbae6689256b660572";
+      };
+    };
+    "is-typedarray-1.0.0" = {
+      name = "is-typedarray";
+      packageName = "is-typedarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
+        sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
+      };
+    };
+    "is-unc-path-1.0.0" = {
+      name = "is-unc-path";
+      packageName = "is-unc-path";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz";
+        sha512 = "mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==";
+      };
+    };
+    "is-utf8-0.2.1" = {
+      name = "is-utf8";
+      packageName = "is-utf8";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz";
+        sha1 = "4b0da1442104d1b336340e80797e865cf39f7d72";
+      };
+    };
+    "is-windows-0.2.0" = {
+      name = "is-windows";
+      packageName = "is-windows";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz";
+        sha1 = "de1aa6d63ea29dd248737b69f1ff8b8002d2108c";
+      };
+    };
+    "is-windows-1.0.2" = {
+      name = "is-windows";
+      packageName = "is-windows";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz";
+        sha512 = "eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==";
+      };
+    };
+    "isarray-0.0.1" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz";
+        sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf";
+      };
+    };
+    "isarray-1.0.0" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
+        sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
+      };
+    };
+    "isarray-2.0.1" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz";
+        sha1 = "a37d94ed9cda2d59865c9f76fe596ee1f338741e";
+      };
+    };
+    "isexe-2.0.0" = {
+      name = "isexe";
+      packageName = "isexe";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz";
+        sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10";
+      };
+    };
+    "isobject-2.1.0" = {
+      name = "isobject";
+      packageName = "isobject";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz";
+        sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89";
+      };
+    };
+    "isobject-3.0.1" = {
+      name = "isobject";
+      packageName = "isobject";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz";
+        sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df";
+      };
+    };
+    "isstream-0.1.2" = {
+      name = "isstream";
+      packageName = "isstream";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
+        sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
+      };
+    };
+    "jmespath-0.15.0" = {
+      name = "jmespath";
+      packageName = "jmespath";
+      version = "0.15.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz";
+        sha1 = "a3f222a9aae9f966f5d27c796510e28091764217";
+      };
+    };
+    "js-base64-2.4.8" = {
+      name = "js-base64";
+      packageName = "js-base64";
+      version = "2.4.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-base64/-/js-base64-2.4.8.tgz";
+        sha512 = "hm2nYpDrwoO/OzBhdcqs/XGT6XjSuSSCVEpia+Kl2J6x4CYt5hISlVL/AYU1khoDXv0AQVgxtdJySb9gjAn56Q==";
+      };
+    };
+    "js-beautify-1.7.5" = {
+      name = "js-beautify";
+      packageName = "js-beautify";
+      version = "1.7.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-beautify/-/js-beautify-1.7.5.tgz";
+        sha512 = "9OhfAqGOrD7hoQBLJMTA+BKuKmoEtTJXzZ7WDF/9gvjtey1koVLuZqIY6c51aPDjbNdNtIXAkiWKVhziawE9Og==";
+      };
+    };
+    "js-string-escape-1.0.1" = {
+      name = "js-string-escape";
+      packageName = "js-string-escape";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz";
+        sha1 = "e2625badbc0d67c7533e9edc1068c587ae4137ef";
+      };
+    };
+    "js-tokens-3.0.2" = {
+      name = "js-tokens";
+      packageName = "js-tokens";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz";
+        sha1 = "9866df395102130e38f7f996bceb65443209c25b";
+      };
+    };
+    "js-yaml-3.12.0" = {
+      name = "js-yaml";
+      packageName = "js-yaml";
+      version = "3.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz";
+        sha512 = "PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==";
+      };
+    };
+    "js-yaml-3.5.5" = {
+      name = "js-yaml";
+      packageName = "js-yaml";
+      version = "3.5.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz";
+        sha1 = "0377c38017cabc7322b0d1fbcd25a491641f2fbe";
+      };
+    };
+    "js-yaml-3.7.0" = {
+      name = "js-yaml";
+      packageName = "js-yaml";
+      version = "3.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz";
+        sha1 = "5c967ddd837a9bfdca5f2de84253abe8a1c03b80";
+      };
+    };
+    "jsbn-0.1.1" = {
+      name = "jsbn";
+      packageName = "jsbn";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
+        sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
+      };
+    };
+    "jsdom-9.12.0" = {
+      name = "jsdom";
+      packageName = "jsdom";
+      version = "9.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz";
+        sha1 = "e8c546fffcb06c00d4833ca84410fed7f8a097d4";
+      };
+    };
+    "jsesc-0.5.0" = {
+      name = "jsesc";
+      packageName = "jsesc";
+      version = "0.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz";
+        sha1 = "e7dee66e35d6fc16f710fe91d5cf69f70f08911d";
+      };
+    };
+    "jsesc-1.3.0" = {
+      name = "jsesc";
+      packageName = "jsesc";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz";
+        sha1 = "46c3fec8c1892b12b0833db9bc7622176dbab34b";
+      };
+    };
+    "jshint-2.9.6" = {
+      name = "jshint";
+      packageName = "jshint";
+      version = "2.9.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jshint/-/jshint-2.9.6.tgz";
+        sha512 = "KO9SIAKTlJQOM4lE64GQUtGBRpTOuvbrRrSZw3AhUxMNG266nX9hK2cKA4SBhXOj0irJGyNyGSLT62HGOVDEOA==";
+      };
+    };
+    "json-edm-parser-0.1.2" = {
+      name = "json-edm-parser";
+      packageName = "json-edm-parser";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-edm-parser/-/json-edm-parser-0.1.2.tgz";
+        sha1 = "1e60b0fef1bc0af67bc0d146dfdde5486cd615b4";
+      };
+    };
+    "json-parse-better-errors-1.0.2" = {
+      name = "json-parse-better-errors";
+      packageName = "json-parse-better-errors";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz";
+        sha512 = "mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==";
+      };
+    };
+    "json-schema-0.2.3" = {
+      name = "json-schema";
+      packageName = "json-schema";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
+        sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
+      };
+    };
+    "json-schema-traverse-0.3.1" = {
+      name = "json-schema-traverse";
+      packageName = "json-schema-traverse";
+      version = "0.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz";
+        sha1 = "349a6d44c53a51de89b40805c5d5e59b417d3340";
+      };
+    };
+    "json-schema-traverse-0.4.1" = {
+      name = "json-schema-traverse";
+      packageName = "json-schema-traverse";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+        sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==";
+      };
+    };
+    "json-stable-stringify-1.0.1" = {
+      name = "json-stable-stringify";
+      packageName = "json-stable-stringify";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz";
+        sha1 = "9a759d39c5f2ff503fd5300646ed445f88c4f9af";
+      };
+    };
+    "json-stream-1.0.0" = {
+      name = "json-stream";
+      packageName = "json-stream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz";
+        sha1 = "1a3854e28d2bbeeab31cc7ddf683d2ddc5652708";
+      };
+    };
+    "json-stringify-safe-5.0.1" = {
+      name = "json-stringify-safe";
+      packageName = "json-stringify-safe";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
+        sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
+      };
+    };
+    "json5-0.5.1" = {
+      name = "json5";
+      packageName = "json5";
+      version = "0.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz";
+        sha1 = "1eade7acc012034ad84e2396767ead9fa5495821";
+      };
+    };
+    "jsonfile-2.4.0" = {
+      name = "jsonfile";
+      packageName = "jsonfile";
+      version = "2.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz";
+        sha1 = "3736a2b428b87bbda0cc83b53fa3d633a35c2ae8";
+      };
+    };
+    "jsonfile-4.0.0" = {
+      name = "jsonfile";
+      packageName = "jsonfile";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz";
+        sha1 = "8771aae0799b64076b76640fca058f9c10e33ecb";
+      };
+    };
+    "jsonify-0.0.0" = {
+      name = "jsonify";
+      packageName = "jsonify";
+      version = "0.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz";
+        sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73";
+      };
+    };
+    "jsonparse-1.2.0" = {
+      name = "jsonparse";
+      packageName = "jsonparse";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonparse/-/jsonparse-1.2.0.tgz";
+        sha1 = "5c0c5685107160e72fe7489bddea0b44c2bc67bd";
+      };
+    };
+    "jsonpointer-4.0.1" = {
+      name = "jsonpointer";
+      packageName = "jsonpointer";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz";
+        sha1 = "4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9";
+      };
+    };
+    "jsprim-1.4.1" = {
+      name = "jsprim";
+      packageName = "jsprim";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz";
+        sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
+      };
+    };
+    "jsx-ast-utils-1.4.1" = {
+      name = "jsx-ast-utils";
+      packageName = "jsx-ast-utils";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz";
+        sha1 = "3867213e8dd79bf1e8f2300c0cfc1efb182c0df1";
+      };
+    };
+    "kew-0.7.0" = {
+      name = "kew";
+      packageName = "kew";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz";
+        sha1 = "79d93d2d33363d6fdd2970b335d9141ad591d79b";
+      };
+    };
+    "kind-of-3.2.2" = {
+      name = "kind-of";
+      packageName = "kind-of";
+      version = "3.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz";
+        sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64";
+      };
+    };
+    "kind-of-4.0.0" = {
+      name = "kind-of";
+      packageName = "kind-of";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz";
+        sha1 = "20813df3d712928b207378691a45066fae72dd57";
+      };
+    };
+    "kind-of-5.1.0" = {
+      name = "kind-of";
+      packageName = "kind-of";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz";
+        sha512 = "NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==";
+      };
+    };
+    "kind-of-6.0.2" = {
+      name = "kind-of";
+      packageName = "kind-of";
+      version = "6.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz";
+        sha512 = "s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==";
+      };
+    };
+    "klaw-1.3.1" = {
+      name = "klaw";
+      packageName = "klaw";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz";
+        sha1 = "4088433b46b3b1ba259d78785d8e96f73ba02439";
+      };
+    };
+    "lazy-cache-1.0.4" = {
+      name = "lazy-cache";
+      packageName = "lazy-cache";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz";
+        sha1 = "a1d78fc3a50474cb80845d3b3b6e1da49a446e8e";
+      };
+    };
+    "lazystream-1.0.0" = {
+      name = "lazystream";
+      packageName = "lazystream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz";
+        sha1 = "f6995fe0f820392f61396be89462407bb77168e4";
+      };
+    };
+    "lcid-1.0.0" = {
+      name = "lcid";
+      packageName = "lcid";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz";
+        sha1 = "308accafa0bc483a3867b4b6f2b9506251d1b835";
+      };
+    };
+    "ldap-filter-0.2.2" = {
+      name = "ldap-filter";
+      packageName = "ldap-filter";
+      version = "0.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz";
+        sha1 = "f2b842be0b86da3352798505b31ebcae590d77d0";
+      };
+    };
+    "ldapauth-fork-4.0.2" = {
+      name = "ldapauth-fork";
+      packageName = "ldapauth-fork";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ldapauth-fork/-/ldapauth-fork-4.0.2.tgz";
+        sha512 = "YoPHsyfV6L/4SO5EMi/Jk1xUMaY+ANlR4Yp+WIsqGkWOLPKkuzRYB4s/IsdKBeb3sdwVCw+q/YN9eoa1dXmQdA==";
+      };
+    };
+    "ldapjs-1.0.2" = {
+      name = "ldapjs";
+      packageName = "ldapjs";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz";
+        sha1 = "544ff7032b7b83c68f0701328d9297aa694340f9";
+      };
+    };
+    "levn-0.3.0" = {
+      name = "levn";
+      packageName = "levn";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
+        sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
+      };
+    };
+    "liftoff-2.5.0" = {
+      name = "liftoff";
+      packageName = "liftoff";
+      version = "2.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz";
+        sha1 = "2009291bb31cea861bbf10a7c15a28caf75c31ec";
+      };
+    };
+    "linkify-it-2.0.3" = {
+      name = "linkify-it";
+      packageName = "linkify-it";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz";
+        sha1 = "d94a4648f9b1c179d64fa97291268bdb6ce9434f";
+      };
+    };
+    "load-json-file-2.0.0" = {
+      name = "load-json-file";
+      packageName = "load-json-file";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz";
+        sha1 = "7947e42149af80d696cbf797bcaabcfe1fe29ca8";
+      };
+    };
+    "load-json-file-4.0.0" = {
+      name = "load-json-file";
+      packageName = "load-json-file";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz";
+        sha1 = "2f5f45ab91e33216234fd53adab668eb4ec0993b";
+      };
+    };
+    "loader-utils-0.2.17" = {
+      name = "loader-utils";
+      packageName = "loader-utils";
+      version = "0.2.17";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz";
+        sha1 = "f86e6374d43205a6e6c60e9196f17c0299bfb348";
+      };
+    };
+    "loader-utils-1.1.0" = {
+      name = "loader-utils";
+      packageName = "loader-utils";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz";
+        sha1 = "c98aef488bcceda2ffb5e2de646d6a754429f5cd";
+      };
+    };
+    "locate-path-2.0.0" = {
+      name = "locate-path";
+      packageName = "locate-path";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz";
+        sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e";
+      };
+    };
+    "lodash-1.0.2" = {
+      name = "lodash";
+      packageName = "lodash";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz";
+        sha1 = "8f57560c83b59fc270bd3d561b690043430e2551";
+      };
+    };
+    "lodash-3.10.1" = {
+      name = "lodash";
+      packageName = "lodash";
+      version = "3.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz";
+        sha1 = "5bf45e8e49ba4189e17d482789dfd15bd140b7b6";
+      };
+    };
+    "lodash-4.17.10" = {
+      name = "lodash";
+      packageName = "lodash";
+      version = "4.17.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz";
+        sha512 = "UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==";
+      };
+    };
+    "lodash._basecopy-3.0.1" = {
+      name = "lodash._basecopy";
+      packageName = "lodash._basecopy";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz";
+        sha1 = "8da0e6a876cf344c0ad8a54882111dd3c5c7ca36";
+      };
+    };
+    "lodash._basetostring-3.0.1" = {
+      name = "lodash._basetostring";
+      packageName = "lodash._basetostring";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz";
+        sha1 = "d1861d877f824a52f669832dcaf3ee15566a07d5";
+      };
+    };
+    "lodash._basevalues-3.0.0" = {
+      name = "lodash._basevalues";
+      packageName = "lodash._basevalues";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz";
+        sha1 = "5b775762802bde3d3297503e26300820fdf661b7";
+      };
+    };
+    "lodash._getnative-3.9.1" = {
+      name = "lodash._getnative";
+      packageName = "lodash._getnative";
+      version = "3.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz";
+        sha1 = "570bc7dede46d61cdcde687d65d3eecbaa3aaff5";
+      };
+    };
+    "lodash._isiterateecall-3.0.9" = {
+      name = "lodash._isiterateecall";
+      packageName = "lodash._isiterateecall";
+      version = "3.0.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz";
+        sha1 = "5203ad7ba425fae842460e696db9cf3e6aac057c";
+      };
+    };
+    "lodash._reescape-3.0.0" = {
+      name = "lodash._reescape";
+      packageName = "lodash._reescape";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz";
+        sha1 = "2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a";
+      };
+    };
+    "lodash._reevaluate-3.0.0" = {
+      name = "lodash._reevaluate";
+      packageName = "lodash._reevaluate";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz";
+        sha1 = "58bc74c40664953ae0b124d806996daca431e2ed";
+      };
+    };
+    "lodash._reinterpolate-3.0.0" = {
+      name = "lodash._reinterpolate";
+      packageName = "lodash._reinterpolate";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz";
+        sha1 = "0ccf2d89166af03b3663c796538b75ac6e114d9d";
+      };
+    };
+    "lodash._root-3.0.1" = {
+      name = "lodash._root";
+      packageName = "lodash._root";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz";
+        sha1 = "fba1c4524c19ee9a5f8136b4609f017cf4ded692";
+      };
+    };
+    "lodash.assignin-4.2.0" = {
+      name = "lodash.assignin";
+      packageName = "lodash.assignin";
+      version = "4.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz";
+        sha1 = "ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2";
+      };
+    };
+    "lodash.bind-4.2.1" = {
+      name = "lodash.bind";
+      packageName = "lodash.bind";
+      version = "4.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz";
+        sha1 = "7ae3017e939622ac31b7d7d7dcb1b34db1690d35";
+      };
+    };
+    "lodash.camelcase-4.3.0" = {
+      name = "lodash.camelcase";
+      packageName = "lodash.camelcase";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz";
+        sha1 = "b28aa6288a2b9fc651035c7711f65ab6190331a6";
+      };
+    };
+    "lodash.defaults-4.2.0" = {
+      name = "lodash.defaults";
+      packageName = "lodash.defaults";
+      version = "4.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz";
+        sha1 = "d09178716ffea4dde9e5fb7b37f6f0802274580c";
+      };
+    };
+    "lodash.escape-3.2.0" = {
+      name = "lodash.escape";
+      packageName = "lodash.escape";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz";
+        sha1 = "995ee0dc18c1b48cc92effae71a10aab5b487698";
+      };
+    };
+    "lodash.filter-4.6.0" = {
+      name = "lodash.filter";
+      packageName = "lodash.filter";
+      version = "4.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz";
+        sha1 = "668b1d4981603ae1cc5a6fa760143e480b4c4ace";
+      };
+    };
+    "lodash.flatten-4.4.0" = {
+      name = "lodash.flatten";
+      packageName = "lodash.flatten";
+      version = "4.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz";
+        sha1 = "f31c22225a9632d2bbf8e4addbef240aa765a61f";
+      };
+    };
+    "lodash.foreach-4.5.0" = {
+      name = "lodash.foreach";
+      packageName = "lodash.foreach";
+      version = "4.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz";
+        sha1 = "1a6a35eace401280c7f06dddec35165ab27e3e53";
+      };
+    };
+    "lodash.isarguments-3.1.0" = {
+      name = "lodash.isarguments";
+      packageName = "lodash.isarguments";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz";
+        sha1 = "2f573d85c6a24289ff00663b491c1d338ff3458a";
+      };
+    };
+    "lodash.isarray-3.0.4" = {
+      name = "lodash.isarray";
+      packageName = "lodash.isarray";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz";
+        sha1 = "79e4eb88c36a8122af86f844aa9bcd851b5fbb55";
+      };
+    };
+    "lodash.keys-3.1.2" = {
+      name = "lodash.keys";
+      packageName = "lodash.keys";
+      version = "3.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz";
+        sha1 = "4dbc0472b156be50a0b286855d1bd0b0c656098a";
+      };
+    };
+    "lodash.map-4.6.0" = {
+      name = "lodash.map";
+      packageName = "lodash.map";
+      version = "4.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz";
+        sha1 = "771ec7839e3473d9c4cde28b19394c3562f4f6d3";
+      };
+    };
+    "lodash.memoize-4.1.2" = {
+      name = "lodash.memoize";
+      packageName = "lodash.memoize";
+      version = "4.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz";
+        sha1 = "bcc6c49a42a2840ed997f323eada5ecd182e0bfe";
+      };
+    };
+    "lodash.merge-4.6.1" = {
+      name = "lodash.merge";
+      packageName = "lodash.merge";
+      version = "4.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz";
+        sha512 = "AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==";
+      };
+    };
+    "lodash.pick-4.4.0" = {
+      name = "lodash.pick";
+      packageName = "lodash.pick";
+      version = "4.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz";
+        sha1 = "52f05610fff9ded422611441ed1fc123a03001b3";
+      };
+    };
+    "lodash.reduce-4.6.0" = {
+      name = "lodash.reduce";
+      packageName = "lodash.reduce";
+      version = "4.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz";
+        sha1 = "f1ab6b839299ad48f784abbf476596f03b914d3b";
+      };
+    };
+    "lodash.reject-4.6.0" = {
+      name = "lodash.reject";
+      packageName = "lodash.reject";
+      version = "4.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz";
+        sha1 = "80d6492dc1470864bbf583533b651f42a9f52415";
+      };
+    };
+    "lodash.restparam-3.6.1" = {
+      name = "lodash.restparam";
+      packageName = "lodash.restparam";
+      version = "3.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz";
+        sha1 = "936a4e309ef330a7645ed4145986c85ae5b20805";
+      };
+    };
+    "lodash.some-4.6.0" = {
+      name = "lodash.some";
+      packageName = "lodash.some";
+      version = "4.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz";
+        sha1 = "1bb9f314ef6b8baded13b549169b2a945eb68e4d";
+      };
+    };
+    "lodash.template-3.6.2" = {
+      name = "lodash.template";
+      packageName = "lodash.template";
+      version = "3.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz";
+        sha1 = "f8cdecc6169a255be9098ae8b0c53d378931d14f";
+      };
+    };
+    "lodash.templatesettings-3.1.1" = {
+      name = "lodash.templatesettings";
+      packageName = "lodash.templatesettings";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz";
+        sha1 = "fb307844753b66b9f1afa54e262c745307dba8e5";
+      };
+    };
+    "lodash.uniq-4.5.0" = {
+      name = "lodash.uniq";
+      packageName = "lodash.uniq";
+      version = "4.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz";
+        sha1 = "d0225373aeb652adc1bc82e4945339a842754773";
+      };
+    };
+    "longest-1.0.1" = {
+      name = "longest";
+      packageName = "longest";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz";
+        sha1 = "30a0b2da38f73770e8294a0d22e6625ed77d0097";
+      };
+    };
+    "longest-streak-1.0.0" = {
+      name = "longest-streak";
+      packageName = "longest-streak";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/longest-streak/-/longest-streak-1.0.0.tgz";
+        sha1 = "d06597c4d4c31b52ccb1f5d8f8fe7148eafd6965";
+      };
+    };
+    "loose-envify-1.4.0" = {
+      name = "loose-envify";
+      packageName = "loose-envify";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz";
+        sha512 = "lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==";
+      };
+    };
+    "lower-case-1.1.4" = {
+      name = "lower-case";
+      packageName = "lower-case";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz";
+        sha1 = "9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac";
+      };
+    };
+    "lru-cache-2.7.3" = {
+      name = "lru-cache";
+      packageName = "lru-cache";
+      version = "2.7.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz";
+        sha1 = "6d4524e8b955f95d4f5b58851ce21dd72fb4e952";
+      };
+    };
+    "lru-cache-3.2.0" = {
+      name = "lru-cache";
+      packageName = "lru-cache";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz";
+        sha1 = "71789b3b7f5399bec8565dda38aa30d2a097efee";
+      };
+    };
+    "lru-cache-4.1.3" = {
+      name = "lru-cache";
+      packageName = "lru-cache";
+      version = "4.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz";
+        sha512 = "fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==";
+      };
+    };
+    "lru-queue-0.1.0" = {
+      name = "lru-queue";
+      packageName = "lru-queue";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz";
+        sha1 = "2738bd9f0d3cf4f84490c5736c48699ac632cda3";
+      };
+    };
+    "magic-string-0.14.0" = {
+      name = "magic-string";
+      packageName = "magic-string";
+      version = "0.14.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/magic-string/-/magic-string-0.14.0.tgz";
+        sha1 = "57224aef1701caeed273b17a39a956e72b172462";
+      };
+    };
+    "make-dir-1.3.0" = {
+      name = "make-dir";
+      packageName = "make-dir";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz";
+        sha512 = "2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==";
+      };
+    };
+    "make-iterator-1.0.1" = {
+      name = "make-iterator";
+      packageName = "make-iterator";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz";
+        sha512 = "pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==";
+      };
+    };
+    "make-plural-3.0.6" = {
+      name = "make-plural";
+      packageName = "make-plural";
+      version = "3.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/make-plural/-/make-plural-3.0.6.tgz";
+        sha1 = "2033a03bac290b8f3bb91258f65b9df7e8b01ca7";
+      };
+    };
+    "map-cache-0.2.2" = {
+      name = "map-cache";
+      packageName = "map-cache";
+      version = "0.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz";
+        sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf";
+      };
+    };
+    "map-visit-1.0.0" = {
+      name = "map-visit";
+      packageName = "map-visit";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz";
+        sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f";
+      };
+    };
+    "markdown-table-0.4.0" = {
+      name = "markdown-table";
+      packageName = "markdown-table";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/markdown-table/-/markdown-table-0.4.0.tgz";
+        sha1 = "890c2c1b3bfe83fb00e4129b8e4cfe645270f9d1";
+      };
+    };
+    "markdown-to-ast-3.4.0" = {
+      name = "markdown-to-ast";
+      packageName = "markdown-to-ast";
+      version = "3.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/markdown-to-ast/-/markdown-to-ast-3.4.0.tgz";
+        sha1 = "0e2cba81390b0549a9153ec3b0d915b61c164be7";
+      };
+    };
+    "marked-0.3.19" = {
+      name = "marked";
+      packageName = "marked";
+      version = "0.3.19";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz";
+        sha512 = "ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==";
+      };
+    };
+    "math-expression-evaluator-1.2.17" = {
+      name = "math-expression-evaluator";
+      packageName = "math-expression-evaluator";
+      version = "1.2.17";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz";
+        sha1 = "de819fdbcd84dccd8fae59c6aeb79615b9d266ac";
+      };
+    };
+    "math-interval-parser-1.1.0" = {
+      name = "math-interval-parser";
+      packageName = "math-interval-parser";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-1.1.0.tgz";
+        sha1 = "dbeda5b06b3249973c6df6170fde2386f0afd893";
+      };
+    };
+    "math-random-1.0.1" = {
+      name = "math-random";
+      packageName = "math-random";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz";
+        sha1 = "8b3aac588b8a66e4975e3cdea67f7bb329601fac";
+      };
+    };
+    "maxmin-2.1.0" = {
+      name = "maxmin";
+      packageName = "maxmin";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz";
+        sha1 = "4d3b220903d95eee7eb7ac7fa864e72dc09a3166";
+      };
+    };
+    "md5.js-1.3.4" = {
+      name = "md5.js";
+      packageName = "md5.js";
+      version = "1.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz";
+        sha1 = "e9bdbde94a20a5ac18b04340fc5764d5b09d901d";
+      };
+    };
+    "mdurl-1.0.1" = {
+      name = "mdurl";
+      packageName = "mdurl";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz";
+        sha1 = "fe85b2ec75a59037f2adfec100fd6c601761152e";
+      };
+    };
+    "media-typer-0.3.0" = {
+      name = "media-typer";
+      packageName = "media-typer";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz";
+        sha1 = "8710d7af0aa626f8fffa1ce00168545263255748";
+      };
+    };
+    "mem-1.1.0" = {
+      name = "mem";
+      packageName = "mem";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz";
+        sha1 = "5edd52b485ca1d900fe64895505399a0dfa45f76";
+      };
+    };
+    "memoizee-0.4.12" = {
+      name = "memoizee";
+      packageName = "memoizee";
+      version = "0.4.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/memoizee/-/memoizee-0.4.12.tgz";
+        sha512 = "sprBu6nwxBWBvBOh5v2jcsGqiGLlL2xr2dLub3vR8dnE8YB17omwtm/0NSHl8jjNbcsJd5GMWJAnTSVe/O0Wfg==";
+      };
+    };
+    "memory-fs-0.2.0" = {
+      name = "memory-fs";
+      packageName = "memory-fs";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz";
+        sha1 = "f2bb25368bc121e391c2520de92969caee0a0290";
+      };
+    };
+    "memory-fs-0.3.0" = {
+      name = "memory-fs";
+      packageName = "memory-fs";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz";
+        sha1 = "7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20";
+      };
+    };
+    "merge-descriptors-1.0.1" = {
+      name = "merge-descriptors";
+      packageName = "merge-descriptors";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz";
+        sha1 = "b00aaa556dd8b44568150ec9d1b953f3f90cbb61";
+      };
+    };
+    "messageformat-0.3.1" = {
+      name = "messageformat";
+      packageName = "messageformat";
+      version = "0.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/messageformat/-/messageformat-0.3.1.tgz";
+        sha1 = "e58fff8245e9b3971799e5b43db58b3e9417f5a2";
+      };
+    };
+    "methods-1.1.2" = {
+      name = "methods";
+      packageName = "methods";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz";
+        sha1 = "5529a4d67654134edcc5266656835b0f851afcee";
+      };
+    };
+    "micromatch-2.3.11" = {
+      name = "micromatch";
+      packageName = "micromatch";
+      version = "2.3.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz";
+        sha1 = "86677c97d1720b363431d04d0d15293bd38c1565";
+      };
+    };
+    "micromatch-3.1.10" = {
+      name = "micromatch";
+      packageName = "micromatch";
+      version = "3.1.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz";
+        sha512 = "MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==";
+      };
+    };
+    "mime-1.3.4" = {
+      name = "mime";
+      packageName = "mime";
+      version = "1.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz";
+        sha1 = "115f9e3b6b3daf2959983cb38f149a2d40eb5d53";
+      };
+    };
+    "mime-1.3.6" = {
+      name = "mime";
+      packageName = "mime";
+      version = "1.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz";
+        sha1 = "591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0";
+      };
+    };
+    "mime-1.4.1" = {
+      name = "mime";
+      packageName = "mime";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz";
+        sha512 = "KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==";
+      };
+    };
+    "mime-1.6.0" = {
+      name = "mime";
+      packageName = "mime";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz";
+        sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==";
+      };
+    };
+    "mime-db-1.35.0" = {
+      name = "mime-db";
+      packageName = "mime-db";
+      version = "1.35.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz";
+        sha512 = "JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==";
+      };
+    };
+    "mime-types-2.1.19" = {
+      name = "mime-types";
+      packageName = "mime-types";
+      version = "2.1.19";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz";
+        sha512 = "P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==";
+      };
+    };
+    "mimic-fn-1.2.0" = {
+      name = "mimic-fn";
+      packageName = "mimic-fn";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz";
+        sha512 = "jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==";
+      };
+    };
+    "minimatch-0.2.14" = {
+      name = "minimatch";
+      packageName = "minimatch";
+      version = "0.2.14";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz";
+        sha1 = "c74e780574f63c6f9a090e90efbe6ef53a6a756a";
+      };
+    };
+    "minimatch-2.0.10" = {
+      name = "minimatch";
+      packageName = "minimatch";
+      version = "2.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz";
+        sha1 = "8d087c39c6b38c001b97fca7ce6d0e1e80afbac7";
+      };
+    };
+    "minimatch-3.0.4" = {
+      name = "minimatch";
+      packageName = "minimatch";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
+        sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==";
+      };
+    };
+    "minimist-0.0.10" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "0.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz";
+        sha1 = "de3f98543dbf96082be48ad1a0c7cda836301dcf";
+      };
+    };
+    "minimist-0.0.8" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "0.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
+        sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
+      };
+    };
+    "minimist-1.2.0" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";
+        sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284";
+      };
+    };
+    "minipass-2.3.3" = {
+      name = "minipass";
+      packageName = "minipass";
+      version = "2.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minipass/-/minipass-2.3.3.tgz";
+        sha512 = "/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==";
+      };
+    };
+    "minizlib-1.1.0" = {
+      name = "minizlib";
+      packageName = "minizlib";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz";
+        sha512 = "4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==";
+      };
+    };
+    "mississippi-2.0.0" = {
+      name = "mississippi";
+      packageName = "mississippi";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz";
+        sha512 = "zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==";
+      };
+    };
+    "mixin-deep-1.3.1" = {
+      name = "mixin-deep";
+      packageName = "mixin-deep";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz";
+        sha512 = "8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==";
+      };
+    };
+    "mkdirp-0.5.1" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "0.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
+        sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
+      };
+    };
+    "moment-2.22.2" = {
+      name = "moment";
+      packageName = "moment";
+      version = "2.22.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz";
+        sha1 = "3c257f9839fc0e93ff53149632239eb90783ff66";
+      };
+    };
+    "moment-timezone-0.5.21" = {
+      name = "moment-timezone";
+      packageName = "moment-timezone";
+      version = "0.5.21";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.21.tgz";
+        sha512 = "j96bAh4otsgj3lKydm3K7kdtA3iKf2m6MY2iSYCzCm5a1zmHo1g+aK3068dDEeocLZQIS9kU8bsdQHLqEvgW0A==";
+      };
+    };
+    "move-concurrently-1.0.1" = {
+      name = "move-concurrently";
+      packageName = "move-concurrently";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz";
+        sha1 = "be2c005fda32e0b29af1f05d7c4b33214c701f92";
+      };
+    };
+    "ms-2.0.0" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";
+        sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
+      };
+    };
+    "multipipe-0.1.2" = {
+      name = "multipipe";
+      packageName = "multipipe";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz";
+        sha1 = "2a8f2ddf70eed564dff2d57f1e1a137d9f05078b";
+      };
+    };
+    "mustache-2.3.0" = {
+      name = "mustache";
+      packageName = "mustache";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mustache/-/mustache-2.3.0.tgz";
+        sha1 = "4028f7778b17708a489930a6e52ac3bca0da41d0";
+      };
+    };
+    "mute-stream-0.0.5" = {
+      name = "mute-stream";
+      packageName = "mute-stream";
+      version = "0.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz";
+        sha1 = "8fbfabb0a98a253d3184331f9e8deb7372fac6c0";
+      };
+    };
+    "mv-2.1.1" = {
+      name = "mv";
+      packageName = "mv";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz";
+        sha1 = "ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2";
+      };
+    };
+    "nan-2.10.0" = {
+      name = "nan";
+      packageName = "nan";
+      version = "2.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz";
+        sha512 = "bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==";
+      };
+    };
+    "nanomatch-1.2.13" = {
+      name = "nanomatch";
+      packageName = "nanomatch";
+      version = "1.2.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz";
+        sha512 = "fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==";
+      };
+    };
+    "natives-1.1.4" = {
+      name = "natives";
+      packageName = "natives";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz";
+        sha512 = "Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==";
+      };
+    };
+    "natural-compare-1.4.0" = {
+      name = "natural-compare";
+      packageName = "natural-compare";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz";
+        sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7";
+      };
+    };
+    "ncp-2.0.0" = {
+      name = "ncp";
+      packageName = "ncp";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz";
+        sha1 = "195a21d6c46e361d2fb1281ba38b91e9df7bdbb3";
+      };
+    };
+    "needle-2.2.1" = {
+      name = "needle";
+      packageName = "needle";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/needle/-/needle-2.2.1.tgz";
+        sha512 = "t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q==";
+      };
+    };
+    "negotiator-0.6.1" = {
+      name = "negotiator";
+      packageName = "negotiator";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz";
+        sha1 = "2b327184e8992101177b28563fb5e7102acd0ca9";
+      };
+    };
+    "next-tick-1.0.0" = {
+      name = "next-tick";
+      packageName = "next-tick";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz";
+        sha1 = "ca86d1fe8828169b0120208e3dc8424b9db8342c";
+      };
+    };
+    "no-case-2.3.2" = {
+      name = "no-case";
+      packageName = "no-case";
+      version = "2.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz";
+        sha512 = "rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==";
+      };
+    };
+    "nocache-2.0.0" = {
+      name = "nocache";
+      packageName = "nocache";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz";
+        sha1 = "202b48021a0c4cbde2df80de15a17443c8b43980";
+      };
+    };
+    "node-forge-0.7.5" = {
+      name = "node-forge";
+      packageName = "node-forge";
+      version = "0.7.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz";
+        sha512 = "MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==";
+      };
+    };
+    "node-libs-browser-0.7.0" = {
+      name = "node-libs-browser";
+      packageName = "node-libs-browser";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz";
+        sha1 = "3e272c0819e308935e26674408d7af0e1491b83b";
+      };
+    };
+    "node-pre-gyp-0.10.3" = {
+      name = "node-pre-gyp";
+      packageName = "node-pre-gyp";
+      version = "0.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz";
+        sha512 = "d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==";
+      };
+    };
+    "node-static-0.6.0" = {
+      name = "node-static";
+      packageName = "node-static";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-static/-/node-static-0.6.0.tgz";
+        sha1 = "e8543a897f3c82048220b39569284d44796eb1e2";
+      };
+    };
+    "nomnom-1.8.1" = {
+      name = "nomnom";
+      packageName = "nomnom";
+      version = "1.8.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz";
+        sha1 = "2151f722472ba79e50a76fc125bb8c8f2e4dc2a7";
+      };
+    };
+    "nopt-3.0.6" = {
+      name = "nopt";
+      packageName = "nopt";
+      version = "3.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz";
+        sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9";
+      };
+    };
+    "nopt-4.0.1" = {
+      name = "nopt";
+      packageName = "nopt";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz";
+        sha1 = "d0d4685afd5415193c8c7505602d0d17cd64474d";
+      };
+    };
+    "normalize-package-data-2.4.0" = {
+      name = "normalize-package-data";
+      packageName = "normalize-package-data";
+      version = "2.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz";
+        sha512 = "9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==";
+      };
+    };
+    "normalize-path-2.1.1" = {
+      name = "normalize-path";
+      packageName = "normalize-path";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz";
+        sha1 = "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9";
+      };
+    };
+    "normalize-range-0.1.2" = {
+      name = "normalize-range";
+      packageName = "normalize-range";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz";
+        sha1 = "2d10c06bdfd312ea9777695a4d28439456b75942";
+      };
+    };
+    "normalize-url-1.9.1" = {
+      name = "normalize-url";
+      packageName = "normalize-url";
+      version = "1.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz";
+        sha1 = "2cc0d66b31ea23036458436e3620d85954c66c3c";
+      };
+    };
+    "npm-bundled-1.0.3" = {
+      name = "npm-bundled";
+      packageName = "npm-bundled";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz";
+        sha512 = "ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==";
+      };
+    };
+    "npm-packlist-1.1.11" = {
+      name = "npm-packlist";
+      packageName = "npm-packlist";
+      version = "1.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.11.tgz";
+        sha512 = "CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA==";
+      };
+    };
+    "npm-run-path-2.0.2" = {
+      name = "npm-run-path";
+      packageName = "npm-run-path";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz";
+        sha1 = "35a9232dfa35d7067b4cb2ddf2357b1871536c5f";
+      };
+    };
+    "npmlog-4.1.2" = {
+      name = "npmlog";
+      packageName = "npmlog";
+      version = "4.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz";
+        sha512 = "2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==";
+      };
+    };
+    "nth-check-1.0.1" = {
+      name = "nth-check";
+      packageName = "nth-check";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz";
+        sha1 = "9929acdf628fc2c41098deab82ac580cf149aae4";
+      };
+    };
+    "num2fraction-1.2.2" = {
+      name = "num2fraction";
+      packageName = "num2fraction";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz";
+        sha1 = "6f682b6a027a4e9ddfa4564cd2589d1d4e669ede";
+      };
+    };
+    "number-is-nan-1.0.1" = {
+      name = "number-is-nan";
+      packageName = "number-is-nan";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz";
+        sha1 = "097b602b53422a522c1afb8790318336941a011d";
+      };
+    };
+    "nwmatcher-1.3.9" = {
+      name = "nwmatcher";
+      packageName = "nwmatcher";
+      version = "1.3.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.3.9.tgz";
+        sha1 = "8bab486ff7fa3dfd086656bbe8b17116d3692d2a";
+      };
+    };
+    "nwmatcher-1.4.4" = {
+      name = "nwmatcher";
+      packageName = "nwmatcher";
+      version = "1.4.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz";
+        sha512 = "3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==";
+      };
+    };
+    "oauth-0.9.15" = {
+      name = "oauth";
+      packageName = "oauth";
+      version = "0.9.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz";
+        sha1 = "bd1fefaf686c96b75475aed5196412ff60cfb9c1";
+      };
+    };
+    "oauth-sign-0.8.2" = {
+      name = "oauth-sign";
+      packageName = "oauth-sign";
+      version = "0.8.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz";
+        sha1 = "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43";
+      };
+    };
+    "object-assign-3.0.0" = {
+      name = "object-assign";
+      packageName = "object-assign";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz";
+        sha1 = "9bedd5ca0897949bca47e7ff408062d549f587f2";
+      };
+    };
+    "object-assign-4.1.0" = {
+      name = "object-assign";
+      packageName = "object-assign";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz";
+        sha1 = "7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0";
+      };
+    };
+    "object-assign-4.1.1" = {
+      name = "object-assign";
+      packageName = "object-assign";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";
+        sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
+      };
+    };
+    "object-component-0.0.3" = {
+      name = "object-component";
+      packageName = "object-component";
+      version = "0.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz";
+        sha1 = "f0c69aa50efc95b866c186f400a33769cb2f1291";
+      };
+    };
+    "object-copy-0.1.0" = {
+      name = "object-copy";
+      packageName = "object-copy";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz";
+        sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c";
+      };
+    };
+    "object-keys-1.0.12" = {
+      name = "object-keys";
+      packageName = "object-keys";
+      version = "1.0.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz";
+        sha512 = "FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==";
+      };
+    };
+    "object-visit-1.0.1" = {
+      name = "object-visit";
+      packageName = "object-visit";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz";
+        sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb";
+      };
+    };
+    "object.defaults-1.1.0" = {
+      name = "object.defaults";
+      packageName = "object.defaults";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz";
+        sha1 = "3a7f868334b407dea06da16d88d5cd29e435fecf";
+      };
+    };
+    "object.map-1.0.1" = {
+      name = "object.map";
+      packageName = "object.map";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz";
+        sha1 = "cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37";
+      };
+    };
+    "object.omit-2.0.1" = {
+      name = "object.omit";
+      packageName = "object.omit";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz";
+        sha1 = "1a9c744829f39dbb858c76ca3579ae2a54ebd1fa";
+      };
+    };
+    "object.pick-1.3.0" = {
+      name = "object.pick";
+      packageName = "object.pick";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz";
+        sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747";
+      };
+    };
+    "on-finished-2.3.0" = {
+      name = "on-finished";
+      packageName = "on-finished";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz";
+        sha1 = "20f1336481b083cd75337992a16971aa2d906947";
+      };
+    };
+    "on-headers-1.0.1" = {
+      name = "on-headers";
+      packageName = "on-headers";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz";
+        sha1 = "928f5d0f470d49342651ea6794b0857c100693f7";
+      };
+    };
+    "once-1.3.3" = {
+      name = "once";
+      packageName = "once";
+      version = "1.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/once/-/once-1.3.3.tgz";
+        sha1 = "b2e261557ce4c314ec8304f3fa82663e4297ca20";
+      };
+    };
+    "once-1.4.0" = {
+      name = "once";
+      packageName = "once";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
+        sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
+      };
+    };
+    "onetime-1.1.0" = {
+      name = "onetime";
+      packageName = "onetime";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz";
+        sha1 = "a1f7838f8314c516f05ecefcbc4ccfe04b4ed789";
+      };
+    };
+    "optimist-0.6.1" = {
+      name = "optimist";
+      packageName = "optimist";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz";
+        sha1 = "da3ea74686fa21a19a111c326e90eb15a0196686";
+      };
+    };
+    "optionator-0.8.2" = {
+      name = "optionator";
+      packageName = "optionator";
+      version = "0.8.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz";
+        sha1 = "364c5e409d3f4d6301d6c0b4c05bba50180aeb64";
+      };
+    };
+    "orchestrator-0.3.8" = {
+      name = "orchestrator";
+      packageName = "orchestrator";
+      version = "0.3.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz";
+        sha1 = "14e7e9e2764f7315fbac184e506c7aa6df94ad7e";
+      };
+    };
+    "ordered-read-streams-0.1.0" = {
+      name = "ordered-read-streams";
+      packageName = "ordered-read-streams";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz";
+        sha1 = "fd565a9af8eb4473ba69b6ed8a34352cb552f126";
+      };
+    };
+    "os-browserify-0.2.1" = {
+      name = "os-browserify";
+      packageName = "os-browserify";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz";
+        sha1 = "63fc4ccee5d2d7763d26bbf8601078e6c2e0044f";
+      };
+    };
+    "os-homedir-1.0.2" = {
+      name = "os-homedir";
+      packageName = "os-homedir";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz";
+        sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3";
+      };
+    };
+    "os-locale-2.1.0" = {
+      name = "os-locale";
+      packageName = "os-locale";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz";
+        sha512 = "3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==";
+      };
+    };
+    "os-tmpdir-1.0.2" = {
+      name = "os-tmpdir";
+      packageName = "os-tmpdir";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
+        sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
+      };
+    };
+    "osenv-0.1.5" = {
+      name = "osenv";
+      packageName = "osenv";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz";
+        sha512 = "0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==";
+      };
+    };
+    "output-file-sync-1.1.2" = {
+      name = "output-file-sync";
+      packageName = "output-file-sync";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz";
+        sha1 = "d0a33eefe61a205facb90092e826598d5245ce76";
+      };
+    };
+    "p-finally-1.0.0" = {
+      name = "p-finally";
+      packageName = "p-finally";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz";
+        sha1 = "3fbcfb15b899a44123b34b6dcc18b724336a2cae";
+      };
+    };
+    "p-limit-1.3.0" = {
+      name = "p-limit";
+      packageName = "p-limit";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz";
+        sha512 = "vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==";
+      };
+    };
+    "p-locate-2.0.0" = {
+      name = "p-locate";
+      packageName = "p-locate";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz";
+        sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43";
+      };
+    };
+    "p-try-1.0.0" = {
+      name = "p-try";
+      packageName = "p-try";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz";
+        sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3";
+      };
+    };
+    "package-1.0.1" = {
+      name = "package";
+      packageName = "package";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/package/-/package-1.0.1.tgz";
+        sha1 = "d25a1f99e2506dcb27d6704b83dca8a312e4edcc";
+      };
+    };
+    "packet-reader-0.3.1" = {
+      name = "packet-reader";
+      packageName = "packet-reader";
+      version = "0.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/packet-reader/-/packet-reader-0.3.1.tgz";
+        sha1 = "cd62e60af8d7fea8a705ec4ff990871c46871f27";
+      };
+    };
+    "pako-0.2.9" = {
+      name = "pako";
+      packageName = "pako";
+      version = "0.2.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz";
+        sha1 = "f3f7522f4ef782348da8161bad9ecfd51bf83a75";
+      };
+    };
+    "parallel-transform-1.1.0" = {
+      name = "parallel-transform";
+      packageName = "parallel-transform";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz";
+        sha1 = "d410f065b05da23081fcd10f28854c29bda33b06";
+      };
+    };
+    "param-case-2.1.1" = {
+      name = "param-case";
+      packageName = "param-case";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz";
+        sha1 = "df94fd8cf6531ecf75e6bef9a0858fbc72be2247";
+      };
+    };
+    "parse-entities-1.1.2" = {
+      name = "parse-entities";
+      packageName = "parse-entities";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.2.tgz";
+        sha512 = "5N9lmQ7tmxfXf+hO3X6KRG6w7uYO/HL9fHalSySTdyn63C3WNvTM/1R8tn1u1larNcEbo3Slcy2bsVDQqvEpUg==";
+      };
+    };
+    "parse-filepath-1.0.2" = {
+      name = "parse-filepath";
+      packageName = "parse-filepath";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz";
+        sha1 = "a632127f53aaf3d15876f5872f3ffac763d6c891";
+      };
+    };
+    "parse-glob-3.0.4" = {
+      name = "parse-glob";
+      packageName = "parse-glob";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz";
+        sha1 = "b2c376cfb11f35513badd173ef0bb6e3a388391c";
+      };
+    };
+    "parse-json-2.2.0" = {
+      name = "parse-json";
+      packageName = "parse-json";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz";
+        sha1 = "f480f40434ef80741f8469099f8dea18f55a4dc9";
+      };
+    };
+    "parse-json-4.0.0" = {
+      name = "parse-json";
+      packageName = "parse-json";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz";
+        sha1 = "be35f5425be1f7f6c747184f98a788cb99477ee0";
+      };
+    };
+    "parse-passwd-1.0.0" = {
+      name = "parse-passwd";
+      packageName = "parse-passwd";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz";
+        sha1 = "6d5b934a456993b23d37f40a382d6f1666a8e5c6";
+      };
+    };
+    "parse5-1.5.1" = {
+      name = "parse5";
+      packageName = "parse5";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz";
+        sha1 = "9b7f3b0de32be78dc2401b17573ccaf0f6f59d94";
+      };
+    };
+    "parseqs-0.0.5" = {
+      name = "parseqs";
+      packageName = "parseqs";
+      version = "0.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz";
+        sha1 = "d5208a3738e46766e291ba2ea173684921a8b89d";
+      };
+    };
+    "parseuri-0.0.5" = {
+      name = "parseuri";
+      packageName = "parseuri";
+      version = "0.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz";
+        sha1 = "80204a50d4dbb779bfdc6ebe2778d90e4bce320a";
+      };
+    };
+    "parseurl-1.3.2" = {
+      name = "parseurl";
+      packageName = "parseurl";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz";
+        sha1 = "fc289d4ed8993119460c156253262cdc8de65bf3";
+      };
+    };
+    "pascalcase-0.1.1" = {
+      name = "pascalcase";
+      packageName = "pascalcase";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz";
+        sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14";
+      };
+    };
+    "passport-oauth-1.0.0" = {
+      name = "passport-oauth";
+      packageName = "passport-oauth";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/passport-oauth/-/passport-oauth-1.0.0.tgz";
+        sha1 = "90aff63387540f02089af28cdad39ea7f80d77df";
+      };
+    };
+    "passport-oauth1-1.1.0" = {
+      name = "passport-oauth1";
+      packageName = "passport-oauth1";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/passport-oauth1/-/passport-oauth1-1.1.0.tgz";
+        sha1 = "a7de988a211f9cf4687377130ea74df32730c918";
+      };
+    };
+    "passport-oauth2-1.4.0" = {
+      name = "passport-oauth2";
+      packageName = "passport-oauth2";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.4.0.tgz";
+        sha1 = "f62f81583cbe12609be7ce6f160b9395a27b86ad";
+      };
+    };
+    "passport-strategy-1.0.0" = {
+      name = "passport-strategy";
+      packageName = "passport-strategy";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz";
+        sha1 = "b5539aa8fc225a3d1ad179476ddf236b440f52e4";
+      };
+    };
+    "path-browserify-0.0.0" = {
+      name = "path-browserify";
+      packageName = "path-browserify";
+      version = "0.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz";
+        sha1 = "a0b870729aae214005b7d5032ec2cbbb0fb4451a";
+      };
+    };
+    "path-exists-2.1.0" = {
+      name = "path-exists";
+      packageName = "path-exists";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz";
+        sha1 = "0feb6c64f0fc518d9a754dd5efb62c7022761f4b";
+      };
+    };
+    "path-exists-3.0.0" = {
+      name = "path-exists";
+      packageName = "path-exists";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz";
+        sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515";
+      };
+    };
+    "path-is-absolute-1.0.1" = {
+      name = "path-is-absolute";
+      packageName = "path-is-absolute";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+        sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
+      };
+    };
+    "path-is-inside-1.0.2" = {
+      name = "path-is-inside";
+      packageName = "path-is-inside";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz";
+        sha1 = "365417dede44430d1c11af61027facf074bdfc53";
+      };
+    };
+    "path-key-2.0.1" = {
+      name = "path-key";
+      packageName = "path-key";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz";
+        sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40";
+      };
+    };
+    "path-parse-1.0.5" = {
+      name = "path-parse";
+      packageName = "path-parse";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz";
+        sha1 = "3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1";
+      };
+    };
+    "path-root-0.1.1" = {
+      name = "path-root";
+      packageName = "path-root";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz";
+        sha1 = "9a4a6814cac1c0cd73360a95f32083c8ea4745b7";
+      };
+    };
+    "path-root-regex-0.1.2" = {
+      name = "path-root-regex";
+      packageName = "path-root-regex";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz";
+        sha1 = "bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d";
+      };
+    };
+    "path-to-regexp-0.1.7" = {
+      name = "path-to-regexp";
+      packageName = "path-to-regexp";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz";
+        sha1 = "df604178005f522f15eb4490e7247a1bfaa67f8c";
+      };
+    };
+    "path-type-2.0.0" = {
+      name = "path-type";
+      packageName = "path-type";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz";
+        sha1 = "f012ccb8415b7096fc2daa1054c3d72389594c73";
+      };
+    };
+    "path-type-3.0.0" = {
+      name = "path-type";
+      packageName = "path-type";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz";
+        sha512 = "T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==";
+      };
+    };
+    "pause-0.0.1" = {
+      name = "pause";
+      packageName = "pause";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz";
+        sha1 = "1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d";
+      };
+    };
+    "pbkdf2-compat-2.0.1" = {
+      name = "pbkdf2-compat";
+      packageName = "pbkdf2-compat";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz";
+        sha1 = "b6e0c8fa99494d94e0511575802a59a5c142f288";
+      };
+    };
+    "pend-1.2.0" = {
+      name = "pend";
+      packageName = "pend";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz";
+        sha1 = "7a57eb550a6783f9115331fcf4663d5c8e007a50";
+      };
+    };
+    "performance-now-0.2.0" = {
+      name = "performance-now";
+      packageName = "performance-now";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz";
+        sha1 = "33ef30c5c77d4ea21c5a53869d91b56d8f2555e5";
+      };
+    };
+    "performance-now-2.1.0" = {
+      name = "performance-now";
+      packageName = "performance-now";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
+        sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
+      };
+    };
+    "pg-connection-string-0.1.3" = {
+      name = "pg-connection-string";
+      packageName = "pg-connection-string";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz";
+        sha1 = "da1847b20940e42ee1492beaf65d49d91b245df7";
+      };
+    };
+    "pg-int8-1.0.1" = {
+      name = "pg-int8";
+      packageName = "pg-int8";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz";
+        sha512 = "WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==";
+      };
+    };
+    "pg-pool-1.8.0" = {
+      name = "pg-pool";
+      packageName = "pg-pool";
+      version = "1.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-pool/-/pg-pool-1.8.0.tgz";
+        sha1 = "f7ec73824c37a03f076f51bfdf70e340147c4f37";
+      };
+    };
+    "pg-types-1.13.0" = {
+      name = "pg-types";
+      packageName = "pg-types";
+      version = "1.13.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-types/-/pg-types-1.13.0.tgz";
+        sha512 = "lfKli0Gkl/+za/+b6lzENajczwZHc7D5kiUCZfgm914jipD2kIOIvEkAhZ8GrW3/TUoP9w8FHjwpPObBye5KQQ==";
+      };
+    };
+    "pgpass-1.0.2" = {
+      name = "pgpass";
+      packageName = "pgpass";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz";
+        sha1 = "2a7bb41b6065b67907e91da1b07c1847c877b306";
+      };
+    };
+    "phantom-4.0.12" = {
+      name = "phantom";
+      packageName = "phantom";
+      version = "4.0.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/phantom/-/phantom-4.0.12.tgz";
+        sha512 = "Tz82XhtPmwCk1FFPmecy7yRGZG2btpzY2KI9fcoPT7zT9det0CcMyfBFPp1S8DqzsnQnm8ZYEfdy528mwVtksA==";
+      };
+    };
+    "phantomjs-prebuilt-2.1.16" = {
+      name = "phantomjs-prebuilt";
+      packageName = "phantomjs-prebuilt";
+      version = "2.1.16";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz";
+        sha1 = "efd212a4a3966d3647684ea8ba788549be2aefef";
+      };
+    };
+    "pify-2.3.0" = {
+      name = "pify";
+      packageName = "pify";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz";
+        sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c";
+      };
+    };
+    "pify-3.0.0" = {
+      name = "pify";
+      packageName = "pify";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz";
+        sha1 = "e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176";
+      };
+    };
+    "pinkie-2.0.4" = {
+      name = "pinkie";
+      packageName = "pinkie";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz";
+        sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870";
+      };
+    };
+    "pinkie-promise-2.0.1" = {
+      name = "pinkie-promise";
+      packageName = "pinkie-promise";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
+        sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa";
+      };
+    };
+    "pkg-conf-2.1.0" = {
+      name = "pkg-conf";
+      packageName = "pkg-conf";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz";
+        sha1 = "2126514ca6f2abfebd168596df18ba57867f0058";
+      };
+    };
+    "pkg-config-1.1.1" = {
+      name = "pkg-config";
+      packageName = "pkg-config";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz";
+        sha1 = "557ef22d73da3c8837107766c52eadabde298fe4";
+      };
+    };
+    "pkg-dir-1.0.0" = {
+      name = "pkg-dir";
+      packageName = "pkg-dir";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz";
+        sha1 = "7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4";
+      };
+    };
+    "pkg-dir-2.0.0" = {
+      name = "pkg-dir";
+      packageName = "pkg-dir";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz";
+        sha1 = "f6d5d1109e19d63edf428e0bd57e12777615334b";
+      };
+    };
+    "pkginfo-0.2.3" = {
+      name = "pkginfo";
+      packageName = "pkginfo";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkginfo/-/pkginfo-0.2.3.tgz";
+        sha1 = "7239c42a5ef6c30b8f328439d9b9ff71042490f8";
+      };
+    };
+    "platform-1.3.5" = {
+      name = "platform";
+      packageName = "platform";
+      version = "1.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz";
+        sha512 = "TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==";
+      };
+    };
+    "pluralize-1.2.1" = {
+      name = "pluralize";
+      packageName = "pluralize";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz";
+        sha1 = "d1a21483fd22bb41e58a12fa3421823140897c45";
+      };
+    };
+    "posix-character-classes-0.1.1" = {
+      name = "posix-character-classes";
+      packageName = "posix-character-classes";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz";
+        sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab";
+      };
+    };
+    "postcss-5.2.18" = {
+      name = "postcss";
+      packageName = "postcss";
+      version = "5.2.18";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz";
+        sha512 = "zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==";
+      };
+    };
+    "postcss-6.0.23" = {
+      name = "postcss";
+      packageName = "postcss";
+      version = "6.0.23";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz";
+        sha512 = "soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==";
+      };
+    };
+    "postcss-calc-5.3.1" = {
+      name = "postcss-calc";
+      packageName = "postcss-calc";
+      version = "5.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz";
+        sha1 = "77bae7ca928ad85716e2fda42f261bf7c1d65b5e";
+      };
+    };
+    "postcss-colormin-2.2.2" = {
+      name = "postcss-colormin";
+      packageName = "postcss-colormin";
+      version = "2.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz";
+        sha1 = "6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b";
+      };
+    };
+    "postcss-convert-values-2.6.1" = {
+      name = "postcss-convert-values";
+      packageName = "postcss-convert-values";
+      version = "2.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz";
+        sha1 = "bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d";
+      };
+    };
+    "postcss-discard-comments-2.0.4" = {
+      name = "postcss-discard-comments";
+      packageName = "postcss-discard-comments";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz";
+        sha1 = "befe89fafd5b3dace5ccce51b76b81514be00e3d";
+      };
+    };
+    "postcss-discard-duplicates-2.1.0" = {
+      name = "postcss-discard-duplicates";
+      packageName = "postcss-discard-duplicates";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz";
+        sha1 = "b9abf27b88ac188158a5eb12abcae20263b91932";
+      };
+    };
+    "postcss-discard-empty-2.1.0" = {
+      name = "postcss-discard-empty";
+      packageName = "postcss-discard-empty";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz";
+        sha1 = "d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5";
+      };
+    };
+    "postcss-discard-overridden-0.1.1" = {
+      name = "postcss-discard-overridden";
+      packageName = "postcss-discard-overridden";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz";
+        sha1 = "8b1eaf554f686fb288cd874c55667b0aa3668d58";
+      };
+    };
+    "postcss-discard-unused-2.2.3" = {
+      name = "postcss-discard-unused";
+      packageName = "postcss-discard-unused";
+      version = "2.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz";
+        sha1 = "bce30b2cc591ffc634322b5fb3464b6d934f4433";
+      };
+    };
+    "postcss-filter-plugins-2.0.3" = {
+      name = "postcss-filter-plugins";
+      packageName = "postcss-filter-plugins";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz";
+        sha512 = "T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==";
+      };
+    };
+    "postcss-merge-idents-2.1.7" = {
+      name = "postcss-merge-idents";
+      packageName = "postcss-merge-idents";
+      version = "2.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz";
+        sha1 = "4c5530313c08e1d5b3bbf3d2bbc747e278eea270";
+      };
+    };
+    "postcss-merge-longhand-2.0.2" = {
+      name = "postcss-merge-longhand";
+      packageName = "postcss-merge-longhand";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz";
+        sha1 = "23d90cd127b0a77994915332739034a1a4f3d658";
+      };
+    };
+    "postcss-merge-rules-2.1.2" = {
+      name = "postcss-merge-rules";
+      packageName = "postcss-merge-rules";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz";
+        sha1 = "d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721";
+      };
+    };
+    "postcss-message-helpers-2.0.0" = {
+      name = "postcss-message-helpers";
+      packageName = "postcss-message-helpers";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz";
+        sha1 = "a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e";
+      };
+    };
+    "postcss-minify-font-values-1.0.5" = {
+      name = "postcss-minify-font-values";
+      packageName = "postcss-minify-font-values";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz";
+        sha1 = "4b58edb56641eba7c8474ab3526cafd7bbdecb69";
+      };
+    };
+    "postcss-minify-gradients-1.0.5" = {
+      name = "postcss-minify-gradients";
+      packageName = "postcss-minify-gradients";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz";
+        sha1 = "5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1";
+      };
+    };
+    "postcss-minify-params-1.2.2" = {
+      name = "postcss-minify-params";
+      packageName = "postcss-minify-params";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz";
+        sha1 = "ad2ce071373b943b3d930a3fa59a358c28d6f1f3";
+      };
+    };
+    "postcss-minify-selectors-2.1.1" = {
+      name = "postcss-minify-selectors";
+      packageName = "postcss-minify-selectors";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz";
+        sha1 = "b2c6a98c0072cf91b932d1a496508114311735bf";
+      };
+    };
+    "postcss-modules-extract-imports-1.2.0" = {
+      name = "postcss-modules-extract-imports";
+      packageName = "postcss-modules-extract-imports";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz";
+        sha1 = "66140ecece38ef06bf0d3e355d69bf59d141ea85";
+      };
+    };
+    "postcss-modules-local-by-default-1.2.0" = {
+      name = "postcss-modules-local-by-default";
+      packageName = "postcss-modules-local-by-default";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz";
+        sha1 = "f7d80c398c5a393fa7964466bd19500a7d61c069";
+      };
+    };
+    "postcss-modules-scope-1.1.0" = {
+      name = "postcss-modules-scope";
+      packageName = "postcss-modules-scope";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz";
+        sha1 = "d6ea64994c79f97b62a72b426fbe6056a194bb90";
+      };
+    };
+    "postcss-modules-values-1.3.0" = {
+      name = "postcss-modules-values";
+      packageName = "postcss-modules-values";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz";
+        sha1 = "ecffa9d7e192518389f42ad0e83f72aec456ea20";
+      };
+    };
+    "postcss-normalize-charset-1.1.1" = {
+      name = "postcss-normalize-charset";
+      packageName = "postcss-normalize-charset";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz";
+        sha1 = "ef9ee71212d7fe759c78ed162f61ed62b5cb93f1";
+      };
+    };
+    "postcss-normalize-url-3.0.8" = {
+      name = "postcss-normalize-url";
+      packageName = "postcss-normalize-url";
+      version = "3.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz";
+        sha1 = "108f74b3f2fcdaf891a2ffa3ea4592279fc78222";
+      };
+    };
+    "postcss-ordered-values-2.2.3" = {
+      name = "postcss-ordered-values";
+      packageName = "postcss-ordered-values";
+      version = "2.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz";
+        sha1 = "eec6c2a67b6c412a8db2042e77fe8da43f95c11d";
+      };
+    };
+    "postcss-reduce-idents-2.4.0" = {
+      name = "postcss-reduce-idents";
+      packageName = "postcss-reduce-idents";
+      version = "2.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz";
+        sha1 = "c2c6d20cc958284f6abfbe63f7609bf409059ad3";
+      };
+    };
+    "postcss-reduce-initial-1.0.1" = {
+      name = "postcss-reduce-initial";
+      packageName = "postcss-reduce-initial";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz";
+        sha1 = "68f80695f045d08263a879ad240df8dd64f644ea";
+      };
+    };
+    "postcss-reduce-transforms-1.0.4" = {
+      name = "postcss-reduce-transforms";
+      packageName = "postcss-reduce-transforms";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz";
+        sha1 = "ff76f4d8212437b31c298a42d2e1444025771ae1";
+      };
+    };
+    "postcss-selector-parser-2.2.3" = {
+      name = "postcss-selector-parser";
+      packageName = "postcss-selector-parser";
+      version = "2.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz";
+        sha1 = "f9437788606c3c9acee16ffe8d8b16297f27bb90";
+      };
+    };
+    "postcss-svgo-2.1.6" = {
+      name = "postcss-svgo";
+      packageName = "postcss-svgo";
+      version = "2.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz";
+        sha1 = "b6df18aa613b666e133f08adb5219c2684ac108d";
+      };
+    };
+    "postcss-unique-selectors-2.0.2" = {
+      name = "postcss-unique-selectors";
+      packageName = "postcss-unique-selectors";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz";
+        sha1 = "981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d";
+      };
+    };
+    "postcss-value-parser-3.3.0" = {
+      name = "postcss-value-parser";
+      packageName = "postcss-value-parser";
+      version = "3.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz";
+        sha1 = "87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15";
+      };
+    };
+    "postcss-zindex-2.2.0" = {
+      name = "postcss-zindex";
+      packageName = "postcss-zindex";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz";
+        sha1 = "d2109ddc055b91af67fc4cb3b025946639d2af22";
+      };
+    };
+    "postgres-array-1.0.2" = {
+      name = "postgres-array";
+      packageName = "postgres-array";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.2.tgz";
+        sha1 = "8e0b32eb03bf77a5c0a7851e0441c169a256a238";
+      };
+    };
+    "postgres-bytea-1.0.0" = {
+      name = "postgres-bytea";
+      packageName = "postgres-bytea";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz";
+        sha1 = "027b533c0aa890e26d172d47cf9ccecc521acd35";
+      };
+    };
+    "postgres-date-1.0.3" = {
+      name = "postgres-date";
+      packageName = "postgres-date";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.3.tgz";
+        sha1 = "e2d89702efdb258ff9d9cee0fe91bd06975257a8";
+      };
+    };
+    "postgres-interval-1.1.2" = {
+      name = "postgres-interval";
+      packageName = "postgres-interval";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.2.tgz";
+        sha512 = "fC3xNHeTskCxL1dC8KOtxXt7YeFmlbTYtn7ul8MkVERuTmf7pI4DrkAxcw3kh1fQ9uz4wQmd03a1mRiXUZChfQ==";
+      };
+    };
+    "precond-0.2.3" = {
+      name = "precond";
+      packageName = "precond";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz";
+        sha1 = "aa9591bcaa24923f1e0f4849d240f47efc1075ac";
+      };
+    };
+    "prelude-ls-1.1.2" = {
+      name = "prelude-ls";
+      packageName = "prelude-ls";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
+        sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
+      };
+    };
+    "prepend-http-1.0.4" = {
+      name = "prepend-http";
+      packageName = "prepend-http";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz";
+        sha1 = "d4f4562b0ce3696e41ac52d0e002e57a635dc6dc";
+      };
+    };
+    "preserve-0.2.0" = {
+      name = "preserve";
+      packageName = "preserve";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz";
+        sha1 = "815ed1f6ebc65926f865b310c0713bcb3315ce4b";
+      };
+    };
+    "pretty-bytes-3.0.1" = {
+      name = "pretty-bytes";
+      packageName = "pretty-bytes";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz";
+        sha1 = "27d0008d778063a0b4811bb35c79f1bd5d5fbccf";
+      };
+    };
+    "pretty-error-2.1.1" = {
+      name = "pretty-error";
+      packageName = "pretty-error";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz";
+        sha1 = "5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3";
+      };
+    };
+    "pretty-hrtime-1.0.3" = {
+      name = "pretty-hrtime";
+      packageName = "pretty-hrtime";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz";
+        sha1 = "b7e3ea42435a4c9b2759d99e0f201eb195802ee1";
+      };
+    };
+    "private-0.1.8" = {
+      name = "private";
+      packageName = "private";
+      version = "0.1.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/private/-/private-0.1.8.tgz";
+        sha512 = "VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==";
+      };
+    };
+    "process-0.11.10" = {
+      name = "process";
+      packageName = "process";
+      version = "0.11.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/process/-/process-0.11.10.tgz";
+        sha1 = "7332300e840161bda3e69a1d1d91a7d4bc16f182";
+      };
+    };
+    "process-nextick-args-1.0.7" = {
+      name = "process-nextick-args";
+      packageName = "process-nextick-args";
+      version = "1.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz";
+        sha1 = "150e20b756590ad3f91093f25a4f2ad8bff30ba3";
+      };
+    };
+    "process-nextick-args-2.0.0" = {
+      name = "process-nextick-args";
+      packageName = "process-nextick-args";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz";
+        sha512 = "MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==";
+      };
+    };
+    "progress-1.1.8" = {
+      name = "progress";
+      packageName = "progress";
+      version = "1.1.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz";
+        sha1 = "e260c78f6161cdd9b0e56cc3e0a85de17c7a57be";
+      };
+    };
+    "promise-7.3.1" = {
+      name = "promise";
+      packageName = "promise";
+      version = "7.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz";
+        sha512 = "nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==";
+      };
+    };
+    "promise-inflight-1.0.1" = {
+      name = "promise-inflight";
+      packageName = "promise-inflight";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz";
+        sha1 = "98472870bf228132fcbdd868129bad12c3c029e3";
+      };
+    };
+    "proto-list-1.2.4" = {
+      name = "proto-list";
+      packageName = "proto-list";
+      version = "1.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz";
+        sha1 = "212d5bfe1318306a420f6402b8e26ff39647a849";
+      };
+    };
+    "proxy-addr-2.0.4" = {
+      name = "proxy-addr";
+      packageName = "proxy-addr";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz";
+        sha512 = "5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==";
+      };
+    };
+    "prr-1.0.1" = {
+      name = "prr";
+      packageName = "prr";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz";
+        sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476";
+      };
+    };
+    "pseudomap-1.0.2" = {
+      name = "pseudomap";
+      packageName = "pseudomap";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz";
+        sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3";
+      };
+    };
+    "psl-1.1.29" = {
+      name = "psl";
+      packageName = "psl";
+      version = "1.1.29";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz";
+        sha512 = "AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==";
+      };
+    };
+    "pump-2.0.1" = {
+      name = "pump";
+      packageName = "pump";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz";
+        sha512 = "ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==";
+      };
+    };
+    "pumpify-1.5.1" = {
+      name = "pumpify";
+      packageName = "pumpify";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz";
+        sha512 = "oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==";
+      };
+    };
+    "punycode-1.3.2" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz";
+        sha1 = "9653a036fb7c1ee42342f2325cceefea3926c48d";
+      };
+    };
+    "punycode-1.4.1" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz";
+        sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
+      };
+    };
+    "punycode-2.1.1" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz";
+        sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==";
+      };
+    };
+    "q-1.5.1" = {
+      name = "q";
+      packageName = "q";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/q/-/q-1.5.1.tgz";
+        sha1 = "7e32f75b41381291d04611f1bf14109ac00651d7";
+      };
+    };
+    "qs-2.3.3" = {
+      name = "qs";
+      packageName = "qs";
+      version = "2.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz";
+        sha1 = "e9e85adbe75da0bbe4c8e0476a086290f863b404";
+      };
+    };
+    "qs-6.4.0" = {
+      name = "qs";
+      packageName = "qs";
+      version = "6.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz";
+        sha1 = "13e26d28ad6b0ffaa91312cd3bf708ed351e7233";
+      };
+    };
+    "qs-6.5.1" = {
+      name = "qs";
+      packageName = "qs";
+      version = "6.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz";
+        sha512 = "eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==";
+      };
+    };
+    "qs-6.5.2" = {
+      name = "qs";
+      packageName = "qs";
+      version = "6.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz";
+        sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==";
+      };
+    };
+    "query-string-4.3.4" = {
+      name = "query-string";
+      packageName = "query-string";
+      version = "4.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz";
+        sha1 = "bbb693b9ca915c232515b228b1a02b609043dbeb";
+      };
+    };
+    "querystring-0.2.0" = {
+      name = "querystring";
+      packageName = "querystring";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz";
+        sha1 = "b209849203bb25df820da756e747005878521620";
+      };
+    };
+    "querystring-es3-0.2.1" = {
+      name = "querystring-es3";
+      packageName = "querystring-es3";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz";
+        sha1 = "9ec61f79049875707d69414596fd907a4d711e73";
+      };
+    };
+    "random-bytes-1.0.0" = {
+      name = "random-bytes";
+      packageName = "random-bytes";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz";
+        sha1 = "4f68a1dc0ae58bd3fb95848c30324db75d64360b";
+      };
+    };
+    "randomatic-3.0.0" = {
+      name = "randomatic";
+      packageName = "randomatic";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz";
+        sha512 = "VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==";
+      };
+    };
+    "range-parser-1.2.0" = {
+      name = "range-parser";
+      packageName = "range-parser";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz";
+        sha1 = "f49be6b487894ddc40dcc94a322f611092e00d5e";
+      };
+    };
+    "raphael-2.1.4" = {
+      name = "raphael";
+      packageName = "raphael";
+      version = "2.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/raphael/-/raphael-2.1.4.tgz";
+        sha1 = "b09ca664ad048b814bb2ff5d4d1e75838cab9c97";
+      };
+    };
+    "raphael-2.2.7" = {
+      name = "raphael";
+      packageName = "raphael";
+      version = "2.2.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/raphael/-/raphael-2.2.7.tgz";
+        sha1 = "231b19141f8d086986d8faceb66f8b562ee2c810";
+      };
+    };
+    "raw-body-2.3.2" = {
+      name = "raw-body";
+      packageName = "raw-body";
+      version = "2.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz";
+        sha1 = "bcd60c77d3eb93cde0050295c3f379389bc88f89";
+      };
+    };
+    "raw-body-2.3.3" = {
+      name = "raw-body";
+      packageName = "raw-body";
+      version = "2.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz";
+        sha512 = "9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==";
+      };
+    };
+    "raw-loader-0.5.1" = {
+      name = "raw-loader";
+      packageName = "raw-loader";
+      version = "0.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz";
+        sha1 = "0c3d0beaed8a01c966d9787bf778281252a979aa";
+      };
+    };
+    "rc-1.2.8" = {
+      name = "rc";
+      packageName = "rc";
+      version = "1.2.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz";
+        sha512 = "y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==";
+      };
+    };
+    "read-pkg-2.0.0" = {
+      name = "read-pkg";
+      packageName = "read-pkg";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz";
+        sha1 = "8ef1c0623c6a6db0dc6713c4bfac46332b2368f8";
+      };
+    };
+    "read-pkg-up-2.0.0" = {
+      name = "read-pkg-up";
+      packageName = "read-pkg-up";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz";
+        sha1 = "6b72a8048984e0c41e79510fd5e9fa99b3b549be";
+      };
+    };
+    "readable-stream-1.0.27-1" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "1.0.27-1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.27-1.tgz";
+        sha1 = "6b67983c20357cefd07f0165001a16d710d91078";
+      };
+    };
+    "readable-stream-1.0.34" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "1.0.34";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz";
+        sha1 = "125820e34bc842d2f2aaafafe4c2916ee32c157c";
+      };
+    };
+    "readable-stream-1.1.14" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "1.1.14";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz";
+        sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9";
+      };
+    };
+    "readable-stream-2.0.6" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz";
+        sha1 = "8f90341e68a53ccc928788dacfcd11b36eb9b78e";
+      };
+    };
+    "readable-stream-2.3.6" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "2.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz";
+        sha512 = "tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==";
+      };
+    };
+    "readdirp-2.1.0" = {
+      name = "readdirp";
+      packageName = "readdirp";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz";
+        sha1 = "4ed0ad060df3073300c48440373f72d1cc642d78";
+      };
+    };
+    "readline2-1.0.1" = {
+      name = "readline2";
+      packageName = "readline2";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz";
+        sha1 = "41059608ffc154757b715d9989d199ffbf372e35";
+      };
+    };
+    "rechoir-0.6.2" = {
+      name = "rechoir";
+      packageName = "rechoir";
+      version = "0.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz";
+        sha1 = "85204b54dba82d5742e28c96756ef43af50e3384";
+      };
+    };
+    "redefine-0.2.1" = {
+      name = "redefine";
+      packageName = "redefine";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/redefine/-/redefine-0.2.1.tgz";
+        sha1 = "e89ee7a6f24d19fff62590569332dc60380a89a3";
+      };
+    };
+    "reduce-component-1.0.1" = {
+      name = "reduce-component";
+      packageName = "reduce-component";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz";
+        sha1 = "e0c93542c574521bea13df0f9488ed82ab77c5da";
+      };
+    };
+    "reduce-css-calc-1.3.0" = {
+      name = "reduce-css-calc";
+      packageName = "reduce-css-calc";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz";
+        sha1 = "747c914e049614a4c9cfbba629871ad1d2927716";
+      };
+    };
+    "reduce-function-call-1.0.2" = {
+      name = "reduce-function-call";
+      packageName = "reduce-function-call";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz";
+        sha1 = "5a200bf92e0e37751752fe45b0ab330fd4b6be99";
+      };
+    };
+    "referrer-policy-1.1.0" = {
+      name = "referrer-policy";
+      packageName = "referrer-policy";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.1.0.tgz";
+        sha1 = "35774eb735bf50fb6c078e83334b472350207d79";
+      };
+    };
+    "regenerate-1.4.0" = {
+      name = "regenerate";
+      packageName = "regenerate";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz";
+        sha512 = "1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==";
+      };
+    };
+    "regenerator-runtime-0.10.5" = {
+      name = "regenerator-runtime";
+      packageName = "regenerator-runtime";
+      version = "0.10.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz";
+        sha1 = "336c3efc1220adcedda2c9fab67b5a7955a33658";
+      };
+    };
+    "regenerator-runtime-0.11.1" = {
+      name = "regenerator-runtime";
+      packageName = "regenerator-runtime";
+      version = "0.11.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz";
+        sha512 = "MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==";
+      };
+    };
+    "regenerator-transform-0.10.1" = {
+      name = "regenerator-transform";
+      packageName = "regenerator-transform";
+      version = "0.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz";
+        sha512 = "PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==";
+      };
+    };
+    "regex-cache-0.4.4" = {
+      name = "regex-cache";
+      packageName = "regex-cache";
+      version = "0.4.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz";
+        sha512 = "nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==";
+      };
+    };
+    "regex-not-1.0.2" = {
+      name = "regex-not";
+      packageName = "regex-not";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz";
+        sha512 = "J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==";
+      };
+    };
+    "regexpu-core-1.0.0" = {
+      name = "regexpu-core";
+      packageName = "regexpu-core";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz";
+        sha1 = "86a763f58ee4d7c2f6b102e4764050de7ed90c6b";
+      };
+    };
+    "regexpu-core-2.0.0" = {
+      name = "regexpu-core";
+      packageName = "regexpu-core";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz";
+        sha1 = "49d038837b8dcf8bfa5b9a42139938e6ea2ae240";
+      };
+    };
+    "regjsgen-0.2.0" = {
+      name = "regjsgen";
+      packageName = "regjsgen";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz";
+        sha1 = "6c016adeac554f75823fe37ac05b92d5a4edb1f7";
+      };
+    };
+    "regjsparser-0.1.5" = {
+      name = "regjsparser";
+      packageName = "regjsparser";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz";
+        sha1 = "7ee8f84dc6fa792d3fd0ae228d24bd949ead205c";
+      };
+    };
+    "relateurl-0.2.7" = {
+      name = "relateurl";
+      packageName = "relateurl";
+      version = "0.2.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz";
+        sha1 = "54dbf377e51440aca90a4cd274600d3ff2d888a9";
+      };
+    };
+    "remark-5.1.0" = {
+      name = "remark";
+      packageName = "remark";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/remark/-/remark-5.1.0.tgz";
+        sha1 = "cb463bd3dbcb4b99794935eee1cf71d7a8e3068c";
+      };
+    };
+    "remark-parse-1.1.0" = {
+      name = "remark-parse";
+      packageName = "remark-parse";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/remark-parse/-/remark-parse-1.1.0.tgz";
+        sha1 = "c3ca10f9a8da04615c28f09aa4e304510526ec21";
+      };
+    };
+    "remark-stringify-1.1.0" = {
+      name = "remark-stringify";
+      packageName = "remark-stringify";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/remark-stringify/-/remark-stringify-1.1.0.tgz";
+        sha1 = "a7105e25b9ee2bf9a49b75d2c423f11b06ae2092";
+      };
+    };
+    "remarkable-1.7.1" = {
+      name = "remarkable";
+      packageName = "remarkable";
+      version = "1.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/remarkable/-/remarkable-1.7.1.tgz";
+        sha1 = "aaca4972100b66a642a63a1021ca4bac1be3bff6";
+      };
+    };
+    "remove-trailing-separator-1.1.0" = {
+      name = "remove-trailing-separator";
+      packageName = "remove-trailing-separator";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz";
+        sha1 = "c24bce2a283adad5bc3f58e0d48249b92379d8ef";
+      };
+    };
+    "renderkid-2.0.1" = {
+      name = "renderkid";
+      packageName = "renderkid";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz";
+        sha1 = "898cabfc8bede4b7b91135a3ffd323e58c0db319";
+      };
+    };
+    "repeat-element-1.1.2" = {
+      name = "repeat-element";
+      packageName = "repeat-element";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz";
+        sha1 = "ef089a178d1483baae4d93eb98b4f9e4e11d990a";
+      };
+    };
+    "repeat-string-1.6.1" = {
+      name = "repeat-string";
+      packageName = "repeat-string";
+      version = "1.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz";
+        sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637";
+      };
+    };
+    "repeating-2.0.1" = {
+      name = "repeating";
+      packageName = "repeating";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz";
+        sha1 = "5214c53a926d3552707527fbab415dbc08d06dda";
+      };
+    };
+    "replace-ext-0.0.1" = {
+      name = "replace-ext";
+      packageName = "replace-ext";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz";
+        sha1 = "29bbd92078a739f0bcce2b4ee41e837953522924";
+      };
+    };
+    "request-2.81.0" = {
+      name = "request";
+      packageName = "request";
+      version = "2.81.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/request/-/request-2.81.0.tgz";
+        sha1 = "c6928946a0e06c5f8d6f8a9333469ffda46298a0";
+      };
+    };
+    "request-2.87.0" = {
+      name = "request";
+      packageName = "request";
+      version = "2.87.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/request/-/request-2.87.0.tgz";
+        sha512 = "fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==";
+      };
+    };
+    "request-progress-2.0.1" = {
+      name = "request-progress";
+      packageName = "request-progress";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz";
+        sha1 = "5d36bb57961c673aa5b788dbc8141fdf23b44e08";
+      };
+    };
+    "require-directory-2.1.1" = {
+      name = "require-directory";
+      packageName = "require-directory";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz";
+        sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42";
+      };
+    };
+    "require-main-filename-1.0.1" = {
+      name = "require-main-filename";
+      packageName = "require-main-filename";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz";
+        sha1 = "97f717b69d48784f5f526a6c5aa8ffdda055a4d1";
+      };
+    };
+    "require-relative-0.8.7" = {
+      name = "require-relative";
+      packageName = "require-relative";
+      version = "0.8.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz";
+        sha1 = "7999539fc9e047a37928fa196f8e1563dabd36de";
+      };
+    };
+    "require-uncached-1.0.3" = {
+      name = "require-uncached";
+      packageName = "require-uncached";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz";
+        sha1 = "4e0d56d6c9662fd31e43011c4b95aa49955421d3";
+      };
+    };
+    "resolve-1.8.1" = {
+      name = "resolve";
+      packageName = "resolve";
+      version = "1.8.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz";
+        sha512 = "AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==";
+      };
+    };
+    "resolve-dir-0.1.1" = {
+      name = "resolve-dir";
+      packageName = "resolve-dir";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz";
+        sha1 = "b219259a5602fac5c5c496ad894a6e8cc430261e";
+      };
+    };
+    "resolve-dir-1.0.1" = {
+      name = "resolve-dir";
+      packageName = "resolve-dir";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz";
+        sha1 = "79a40644c362be82f26effe739c9bb5382046f43";
+      };
+    };
+    "resolve-from-1.0.1" = {
+      name = "resolve-from";
+      packageName = "resolve-from";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz";
+        sha1 = "26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226";
+      };
+    };
+    "resolve-url-0.2.1" = {
+      name = "resolve-url";
+      packageName = "resolve-url";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz";
+        sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a";
+      };
+    };
+    "restore-cursor-1.0.1" = {
+      name = "restore-cursor";
+      packageName = "restore-cursor";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz";
+        sha1 = "34661f46886327fed2991479152252df92daa541";
+      };
+    };
+    "ret-0.1.15" = {
+      name = "ret";
+      packageName = "ret";
+      version = "0.1.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz";
+        sha512 = "TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==";
+      };
+    };
+    "retry-as-promised-2.3.2" = {
+      name = "retry-as-promised";
+      packageName = "retry-as-promised";
+      version = "2.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.2.tgz";
+        sha1 = "cd974ee4fd9b5fe03cbf31871ee48221c07737b7";
+      };
+    };
+    "right-align-0.1.3" = {
+      name = "right-align";
+      packageName = "right-align";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz";
+        sha1 = "61339b722fe6a3515689210d24e14c96148613ef";
+      };
+    };
+    "rimraf-2.4.5" = {
+      name = "rimraf";
+      packageName = "rimraf";
+      version = "2.4.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz";
+        sha1 = "ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da";
+      };
+    };
+    "rimraf-2.6.2" = {
+      name = "rimraf";
+      packageName = "rimraf";
+      version = "2.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz";
+        sha512 = "lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==";
+      };
+    };
+    "ripemd160-0.2.0" = {
+      name = "ripemd160";
+      packageName = "ripemd160";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz";
+        sha1 = "2bf198bde167cacfa51c0a928e84b68bbe171fce";
+      };
+    };
+    "rollup-0.41.6" = {
+      name = "rollup";
+      packageName = "rollup";
+      version = "0.41.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rollup/-/rollup-0.41.6.tgz";
+        sha1 = "e0d05497877a398c104d816d2733a718a7a94e2a";
+      };
+    };
+    "rollup-plugin-buble-0.15.0" = {
+      name = "rollup-plugin-buble";
+      packageName = "rollup-plugin-buble";
+      version = "0.15.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rollup-plugin-buble/-/rollup-plugin-buble-0.15.0.tgz";
+        sha1 = "83c3e89c7fd2266c7918f41ba3980313519c7fd0";
+      };
+    };
+    "rollup-pluginutils-1.5.2" = {
+      name = "rollup-pluginutils";
+      packageName = "rollup-pluginutils";
+      version = "1.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz";
+        sha1 = "1e156e778f94b7255bfa1b3d0178be8f5c552408";
+      };
+    };
+    "rollup-watch-3.2.2" = {
+      name = "rollup-watch";
+      packageName = "rollup-watch";
+      version = "3.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rollup-watch/-/rollup-watch-3.2.2.tgz";
+        sha1 = "5e574232e9ef36da9177f46946d8080cb267354b";
+      };
+    };
+    "run-async-0.1.0" = {
+      name = "run-async";
+      packageName = "run-async";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz";
+        sha1 = "c8ad4a5e110661e402a7d21b530e009f25f8e389";
+      };
+    };
+    "run-parallel-1.1.9" = {
+      name = "run-parallel";
+      packageName = "run-parallel";
+      version = "1.1.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz";
+        sha512 = "DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==";
+      };
+    };
+    "run-queue-1.0.3" = {
+      name = "run-queue";
+      packageName = "run-queue";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz";
+        sha1 = "e848396f057d223f24386924618e25694161ec47";
+      };
+    };
+    "rx-lite-3.1.2" = {
+      name = "rx-lite";
+      packageName = "rx-lite";
+      version = "3.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz";
+        sha1 = "19ce502ca572665f3b647b10939f97fd1615f102";
+      };
+    };
+    "safe-buffer-5.1.1" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz";
+        sha512 = "kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==";
+      };
+    };
+    "safe-buffer-5.1.2" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
+        sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
+      };
+    };
+    "safe-json-stringify-1.2.0" = {
+      name = "safe-json-stringify";
+      packageName = "safe-json-stringify";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz";
+        sha512 = "gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==";
+      };
+    };
+    "safe-regex-1.1.0" = {
+      name = "safe-regex";
+      packageName = "safe-regex";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz";
+        sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e";
+      };
+    };
+    "safefs-3.2.2" = {
+      name = "safefs";
+      packageName = "safefs";
+      version = "3.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safefs/-/safefs-3.2.2.tgz";
+        sha1 = "8170c1444d7038e08caea05a374fae2fa349e15c";
+      };
+    };
+    "safer-buffer-2.1.2" = {
+      name = "safer-buffer";
+      packageName = "safer-buffer";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
+        sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
+      };
+    };
+    "sax-0.5.8" = {
+      name = "sax";
+      packageName = "sax";
+      version = "0.5.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz";
+        sha1 = "d472db228eb331c2506b0e8c15524adb939d12c1";
+      };
+    };
+    "sax-1.2.1" = {
+      name = "sax";
+      packageName = "sax";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz";
+        sha1 = "7b8e656190b228e81a66aea748480d828cd2d37a";
+      };
+    };
+    "sax-1.2.4" = {
+      name = "sax";
+      packageName = "sax";
+      version = "1.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz";
+        sha512 = "NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==";
+      };
+    };
+    "scandirectory-2.5.0" = {
+      name = "scandirectory";
+      packageName = "scandirectory";
+      version = "2.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/scandirectory/-/scandirectory-2.5.0.tgz";
+        sha1 = "6ce03f54a090b668e3cbedbf20edf9e310593e72";
+      };
+    };
+    "schema-utils-0.4.5" = {
+      name = "schema-utils";
+      packageName = "schema-utils";
+      version = "0.4.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz";
+        sha512 = "yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==";
+      };
+    };
+    "select-1.1.2" = {
+      name = "select";
+      packageName = "select";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/select/-/select-1.1.2.tgz";
+        sha1 = "0e7350acdec80b1108528786ec1d4418d11b396d";
+      };
+    };
+    "semver-4.3.2" = {
+      name = "semver";
+      packageName = "semver";
+      version = "4.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz";
+        sha1 = "c7a07158a80bedd052355b770d82d6640f803be7";
+      };
+    };
+    "semver-4.3.6" = {
+      name = "semver";
+      packageName = "semver";
+      version = "4.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz";
+        sha1 = "300bc6e0e86374f7ba61068b5b1ecd57fc6532da";
+      };
+    };
+    "semver-5.5.0" = {
+      name = "semver";
+      packageName = "semver";
+      version = "5.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz";
+        sha512 = "4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==";
+      };
+    };
+    "send-0.16.2" = {
+      name = "send";
+      packageName = "send";
+      version = "0.16.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/send/-/send-0.16.2.tgz";
+        sha512 = "E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==";
+      };
+    };
+    "sequencify-0.0.7" = {
+      name = "sequencify";
+      packageName = "sequencify";
+      version = "0.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz";
+        sha1 = "90cff19d02e07027fd767f5ead3e7b95d1e7380c";
+      };
+    };
+    "serialize-javascript-1.5.0" = {
+      name = "serialize-javascript";
+      packageName = "serialize-javascript";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz";
+        sha512 = "Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==";
+      };
+    };
+    "series-stream-1.0.1" = {
+      name = "series-stream";
+      packageName = "series-stream";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/series-stream/-/series-stream-1.0.1.tgz";
+        sha1 = "311a09c5c1d5a091440832e1a480a47400f1005d";
+      };
+    };
+    "serve-static-1.13.2" = {
+      name = "serve-static";
+      packageName = "serve-static";
+      version = "1.13.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz";
+        sha512 = "p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==";
+      };
+    };
+    "set-blocking-2.0.0" = {
+      name = "set-blocking";
+      packageName = "set-blocking";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz";
+        sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
+      };
+    };
+    "set-immediate-shim-1.0.1" = {
+      name = "set-immediate-shim";
+      packageName = "set-immediate-shim";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz";
+        sha1 = "4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61";
+      };
+    };
+    "set-value-0.4.3" = {
+      name = "set-value";
+      packageName = "set-value";
+      version = "0.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz";
+        sha1 = "7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1";
+      };
+    };
+    "set-value-2.0.0" = {
+      name = "set-value";
+      packageName = "set-value";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz";
+        sha512 = "hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==";
+      };
+    };
+    "setimmediate-1.0.5" = {
+      name = "setimmediate";
+      packageName = "setimmediate";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz";
+        sha1 = "290cbb232e306942d7d7ea9b83732ab7856f8285";
+      };
+    };
+    "setprototypeof-1.0.3" = {
+      name = "setprototypeof";
+      packageName = "setprototypeof";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz";
+        sha1 = "66567e37043eeb4f04d91bd658c0cbefb55b8e04";
+      };
+    };
+    "setprototypeof-1.1.0" = {
+      name = "setprototypeof";
+      packageName = "setprototypeof";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz";
+        sha512 = "BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==";
+      };
+    };
+    "sha.js-2.2.6" = {
+      name = "sha.js";
+      packageName = "sha.js";
+      version = "2.2.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz";
+        sha1 = "17ddeddc5f722fb66501658895461977867315ba";
+      };
+    };
+    "shebang-command-1.2.0" = {
+      name = "shebang-command";
+      packageName = "shebang-command";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz";
+        sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea";
+      };
+    };
+    "shebang-regex-1.0.0" = {
+      name = "shebang-regex";
+      packageName = "shebang-regex";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz";
+        sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3";
+      };
+    };
+    "shelljs-0.3.0" = {
+      name = "shelljs";
+      packageName = "shelljs";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz";
+        sha1 = "3596e6307a781544f591f37da618360f31db57b1";
+      };
+    };
+    "shelljs-0.7.8" = {
+      name = "shelljs";
+      packageName = "shelljs";
+      version = "0.7.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz";
+        sha1 = "decbcf874b0d1e5fb72e14b164a9683048e9acb3";
+      };
+    };
+    "shimmer-1.1.0" = {
+      name = "shimmer";
+      packageName = "shimmer";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz";
+        sha1 = "97d7377137ffbbab425522e429fe0aa89a488b35";
+      };
+    };
+    "sigmund-1.0.1" = {
+      name = "sigmund";
+      packageName = "sigmund";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz";
+        sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590";
+      };
+    };
+    "signal-exit-3.0.2" = {
+      name = "signal-exit";
+      packageName = "signal-exit";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz";
+        sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d";
+      };
+    };
+    "slash-1.0.0" = {
+      name = "slash";
+      packageName = "slash";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz";
+        sha1 = "c41f2f6c39fc16d1cd17ad4b5d896114ae470d55";
+      };
+    };
+    "slice-ansi-0.0.4" = {
+      name = "slice-ansi";
+      packageName = "slice-ansi";
+      version = "0.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz";
+        sha1 = "edbf8903f66f7ce2f8eafd6ceed65e264c831b35";
+      };
+    };
+    "snapdragon-0.8.2" = {
+      name = "snapdragon";
+      packageName = "snapdragon";
+      version = "0.8.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz";
+        sha512 = "FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==";
+      };
+    };
+    "snapdragon-node-2.1.1" = {
+      name = "snapdragon-node";
+      packageName = "snapdragon-node";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz";
+        sha512 = "O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==";
+      };
+    };
+    "snapdragon-util-3.0.1" = {
+      name = "snapdragon-util";
+      packageName = "snapdragon-util";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz";
+        sha512 = "mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==";
+      };
+    };
+    "sntp-1.0.9" = {
+      name = "sntp";
+      packageName = "sntp";
+      version = "1.0.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz";
+        sha1 = "6541184cc90aeea6c6e7b35e2659082443c66198";
+      };
+    };
+    "socket.io-adapter-1.1.1" = {
+      name = "socket.io-adapter";
+      packageName = "socket.io-adapter";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz";
+        sha1 = "2a805e8a14d6372124dd9159ad4502f8cb07f06b";
+      };
+    };
+    "socket.io-client-2.0.4" = {
+      name = "socket.io-client";
+      packageName = "socket.io-client";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz";
+        sha1 = "0918a552406dc5e540b380dcd97afc4a64332f8e";
+      };
+    };
+    "socket.io-parser-3.1.3" = {
+      name = "socket.io-parser";
+      packageName = "socket.io-parser";
+      version = "3.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz";
+        sha512 = "g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==";
+      };
+    };
+    "sort-keys-1.1.2" = {
+      name = "sort-keys";
+      packageName = "sort-keys";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz";
+        sha1 = "441b6d4d346798f1b4e49e8920adfba0e543f9ad";
+      };
+    };
+    "source-list-map-0.1.8" = {
+      name = "source-list-map";
+      packageName = "source-list-map";
+      version = "0.1.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz";
+        sha1 = "c550b2ab5427f6b3f21f5afead88c4f5587b2106";
+      };
+    };
+    "source-list-map-2.0.0" = {
+      name = "source-list-map";
+      packageName = "source-list-map";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz";
+        sha512 = "I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==";
+      };
+    };
+    "source-map-0.4.4" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.4.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz";
+        sha1 = "eba4f5da9c0dc999de68032d8b4f76173652036b";
+      };
+    };
+    "source-map-0.5.7" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.5.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz";
+        sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc";
+      };
+    };
+    "source-map-0.6.1" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz";
+        sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==";
+      };
+    };
+    "source-map-resolve-0.5.2" = {
+      name = "source-map-resolve";
+      packageName = "source-map-resolve";
+      version = "0.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz";
+        sha512 = "MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==";
+      };
+    };
+    "source-map-support-0.4.18" = {
+      name = "source-map-support";
+      packageName = "source-map-support";
+      version = "0.4.18";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz";
+        sha512 = "try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==";
+      };
+    };
+    "source-map-url-0.4.0" = {
+      name = "source-map-url";
+      packageName = "source-map-url";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz";
+        sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3";
+      };
+    };
+    "sparkles-1.0.1" = {
+      name = "sparkles";
+      packageName = "sparkles";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz";
+        sha512 = "dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==";
+      };
+    };
+    "spdx-correct-3.0.0" = {
+      name = "spdx-correct";
+      packageName = "spdx-correct";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz";
+        sha512 = "N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==";
+      };
+    };
+    "spdx-exceptions-2.1.0" = {
+      name = "spdx-exceptions";
+      packageName = "spdx-exceptions";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz";
+        sha512 = "4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==";
+      };
+    };
+    "spdx-expression-parse-3.0.0" = {
+      name = "spdx-expression-parse";
+      packageName = "spdx-expression-parse";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz";
+        sha512 = "Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==";
+      };
+    };
+    "spdx-license-ids-3.0.0" = {
+      name = "spdx-license-ids";
+      packageName = "spdx-license-ids";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz";
+        sha512 = "2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==";
+      };
+    };
+    "split-1.0.1" = {
+      name = "split";
+      packageName = "split";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/split/-/split-1.0.1.tgz";
+        sha512 = "mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==";
+      };
+    };
+    "split-string-3.1.0" = {
+      name = "split-string";
+      packageName = "split-string";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz";
+        sha512 = "NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==";
+      };
+    };
+    "sprintf-0.1.5" = {
+      name = "sprintf";
+      packageName = "sprintf";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sprintf/-/sprintf-0.1.5.tgz";
+        sha1 = "8f83e39a9317c1a502cb7db8050e51c679f6edcf";
+      };
+    };
+    "sprintf-js-1.0.3" = {
+      name = "sprintf-js";
+      packageName = "sprintf-js";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz";
+        sha1 = "04e6926f662895354f3dd015203633b857297e2c";
+      };
+    };
+    "sprintf-js-1.1.1" = {
+      name = "sprintf-js";
+      packageName = "sprintf-js";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz";
+        sha1 = "36be78320afe5801f6cea3ee78b6e5aab940ea0c";
+      };
+    };
+    "sqlstring-2.3.1" = {
+      name = "sqlstring";
+      packageName = "sqlstring";
+      version = "2.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz";
+        sha1 = "475393ff9e91479aea62dcaf0ca3d14983a7fb40";
+      };
+    };
+    "sshpk-1.14.2" = {
+      name = "sshpk";
+      packageName = "sshpk";
+      version = "1.14.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz";
+        sha1 = "c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98";
+      };
+    };
+    "ssri-5.3.0" = {
+      name = "ssri";
+      packageName = "ssri";
+      version = "5.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz";
+        sha512 = "XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==";
+      };
+    };
+    "stack-trace-0.0.10" = {
+      name = "stack-trace";
+      packageName = "stack-trace";
+      version = "0.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz";
+        sha1 = "547c70b347e8d32b4e108ea1a2a159e5fdde19c0";
+      };
+    };
+    "standard-engine-5.4.0" = {
+      name = "standard-engine";
+      packageName = "standard-engine";
+      version = "5.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/standard-engine/-/standard-engine-5.4.0.tgz";
+        sha1 = "e0e86959ea0786425d3383e40c1bf70d2f985579";
+      };
+    };
+    "static-extend-0.1.2" = {
+      name = "static-extend";
+      packageName = "static-extend";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz";
+        sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6";
+      };
+    };
+    "statuses-1.4.0" = {
+      name = "statuses";
+      packageName = "statuses";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz";
+        sha512 = "zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==";
+      };
+    };
+    "statuses-1.5.0" = {
+      name = "statuses";
+      packageName = "statuses";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz";
+        sha1 = "161c7dac177659fd9811f43771fa99381478628c";
+      };
+    };
+    "stream-browserify-2.0.1" = {
+      name = "stream-browserify";
+      packageName = "stream-browserify";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz";
+        sha1 = "66266ee5f9bdb9940a4e4514cafb43bb71e5c9db";
+      };
+    };
+    "stream-consume-0.1.1" = {
+      name = "stream-consume";
+      packageName = "stream-consume";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz";
+        sha512 = "tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==";
+      };
+    };
+    "stream-each-1.2.3" = {
+      name = "stream-each";
+      packageName = "stream-each";
+      version = "1.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz";
+        sha512 = "vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==";
+      };
+    };
+    "stream-from-to-1.4.3" = {
+      name = "stream-from-to";
+      packageName = "stream-from-to";
+      version = "1.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-from-to/-/stream-from-to-1.4.3.tgz";
+        sha1 = "b270473ebc514e73615727c5d2f76b229941df94";
+      };
+    };
+    "stream-http-2.8.3" = {
+      name = "stream-http";
+      packageName = "stream-http";
+      version = "2.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz";
+        sha512 = "+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==";
+      };
+    };
+    "stream-shift-1.0.0" = {
+      name = "stream-shift";
+      packageName = "stream-shift";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz";
+        sha1 = "d5c752825e5367e786f78e18e445ea223a155952";
+      };
+    };
+    "strict-uri-encode-1.1.0" = {
+      name = "strict-uri-encode";
+      packageName = "strict-uri-encode";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz";
+        sha1 = "279b225df1d582b1f54e65addd4352e18faa0713";
+      };
+    };
+    "string-natural-compare-2.0.2" = {
+      name = "string-natural-compare";
+      packageName = "string-natural-compare";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-2.0.2.tgz";
+        sha1 = "c5ce4e278ab5d1265ae6fc55435aeb7b76fcb001";
+      };
+    };
+    "string-width-1.0.2" = {
+      name = "string-width";
+      packageName = "string-width";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
+        sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
+      };
+    };
+    "string-width-2.1.1" = {
+      name = "string-width";
+      packageName = "string-width";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz";
+        sha512 = "nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==";
+      };
+    };
+    "string_decoder-0.10.31" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "0.10.31";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz";
+        sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94";
+      };
+    };
+    "string_decoder-1.1.1" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
+        sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==";
+      };
+    };
+    "stringify-entities-1.3.2" = {
+      name = "stringify-entities";
+      packageName = "stringify-entities";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz";
+        sha512 = "nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==";
+      };
+    };
+    "stringstream-0.0.6" = {
+      name = "stringstream";
+      packageName = "stringstream";
+      version = "0.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz";
+        sha512 = "87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==";
+      };
+    };
+    "strip-ansi-0.1.1" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz";
+        sha1 = "39e8a98d044d150660abe4a6808acf70bb7bc991";
+      };
+    };
+    "strip-ansi-3.0.1" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
+        sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
+      };
+    };
+    "strip-ansi-4.0.0" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz";
+        sha1 = "a8479022eb1ac368a871389b635262c505ee368f";
+      };
+    };
+    "strip-bom-1.0.0" = {
+      name = "strip-bom";
+      packageName = "strip-bom";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz";
+        sha1 = "85b8862f3844b5a6d5ec8467a93598173a36f794";
+      };
+    };
+    "strip-bom-3.0.0" = {
+      name = "strip-bom";
+      packageName = "strip-bom";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz";
+        sha1 = "2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3";
+      };
+    };
+    "strip-eof-1.0.0" = {
+      name = "strip-eof";
+      packageName = "strip-eof";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz";
+        sha1 = "bb43ff5598a6eb05d89b59fcd129c983313606bf";
+      };
+    };
+    "strip-json-comments-1.0.4" = {
+      name = "strip-json-comments";
+      packageName = "strip-json-comments";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz";
+        sha1 = "1e15fbcac97d3ee99bf2d73b4c656b082bbafb91";
+      };
+    };
+    "strip-json-comments-2.0.1" = {
+      name = "strip-json-comments";
+      packageName = "strip-json-comments";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz";
+        sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a";
+      };
+    };
+    "structured-source-3.0.2" = {
+      name = "structured-source";
+      packageName = "structured-source";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/structured-source/-/structured-source-3.0.2.tgz";
+        sha1 = "dd802425e0f53dc4a6e7aca3752901a1ccda7af5";
+      };
+    };
+    "superagent-1.8.3" = {
+      name = "superagent";
+      packageName = "superagent";
+      version = "1.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/superagent/-/superagent-1.8.3.tgz";
+        sha1 = "2b7d70fcc870eda4f2a61e619dd54009b86547c3";
+      };
+    };
+    "supports-color-2.0.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
+        sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
+      };
+    };
+    "supports-color-3.2.3" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "3.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz";
+        sha1 = "65ac0504b3954171d8a64946b2ae3cbb8a5f54f6";
+      };
+    };
+    "supports-color-5.4.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "5.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz";
+        sha512 = "zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==";
+      };
+    };
+    "svgo-0.7.2" = {
+      name = "svgo";
+      packageName = "svgo";
+      version = "0.7.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz";
+        sha1 = "9f5772413952135c6fefbf40afe6a4faa88b4bb5";
+      };
+    };
+    "symbol-tree-3.2.2" = {
+      name = "symbol-tree";
+      packageName = "symbol-tree";
+      version = "3.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz";
+        sha1 = "ae27db38f660a7ae2e1c3b7d1bc290819b8519e6";
+      };
+    };
+    "table-3.8.3" = {
+      name = "table";
+      packageName = "table";
+      version = "3.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/table/-/table-3.8.3.tgz";
+        sha1 = "2bbc542f0fda9861a755d3947fefd8b3f513855f";
+      };
+    };
+    "tapable-0.1.10" = {
+      name = "tapable";
+      packageName = "tapable";
+      version = "0.1.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz";
+        sha1 = "29c35707c2b70e50d07482b5d202e8ed446dafd4";
+      };
+    };
+    "tar-4.4.6" = {
+      name = "tar";
+      packageName = "tar";
+      version = "4.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tar/-/tar-4.4.6.tgz";
+        sha512 = "tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==";
+      };
+    };
+    "tar-stream-1.6.1" = {
+      name = "tar-stream";
+      packageName = "tar-stream";
+      version = "1.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz";
+        sha512 = "IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==";
+      };
+    };
+    "taskgroup-4.3.1" = {
+      name = "taskgroup";
+      packageName = "taskgroup";
+      version = "4.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/taskgroup/-/taskgroup-4.3.1.tgz";
+        sha1 = "7de193febd768273c457730497024d512c27915a";
+      };
+    };
+    "temporary-0.0.8" = {
+      name = "temporary";
+      packageName = "temporary";
+      version = "0.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz";
+        sha1 = "a18a981d28ba8ca36027fb3c30538c3ecb740ac0";
+      };
+    };
+    "terraformer-1.0.9" = {
+      name = "terraformer";
+      packageName = "terraformer";
+      version = "1.0.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/terraformer/-/terraformer-1.0.9.tgz";
+        sha512 = "YlmQ1fsMWTkKGDGibCRWgmLzrpDRUr63Q025LJ/taYQ6j1Yb8q9McKF7NBi6ACAyUXO6F/bl9w6v4MY307y5Ag==";
+      };
+    };
+    "terraformer-wkt-parser-1.2.0" = {
+      name = "terraformer-wkt-parser";
+      packageName = "terraformer-wkt-parser";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.0.tgz";
+        sha512 = "QU3iA54St5lF8Za1jg1oj4NYc8sn5tCZ08aNSWDeGzrsaV48eZk1iAVWasxhNspYBoCqdHuoot1pUTUrE1AJ4w==";
+      };
+    };
+    "text-table-0.2.0" = {
+      name = "text-table";
+      packageName = "text-table";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz";
+        sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4";
+      };
+    };
+    "throttleit-1.0.0" = {
+      name = "throttleit";
+      packageName = "throttleit";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz";
+        sha1 = "9e785836daf46743145a5984b6268d828528ac6c";
+      };
+    };
+    "through-2.3.8" = {
+      name = "through";
+      packageName = "through";
+      version = "2.3.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/through/-/through-2.3.8.tgz";
+        sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5";
+      };
+    };
+    "through2-0.6.5" = {
+      name = "through2";
+      packageName = "through2";
+      version = "0.6.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz";
+        sha1 = "41ab9c67b29d57209071410e1d7a7a968cd3ad48";
+      };
+    };
+    "through2-2.0.3" = {
+      name = "through2";
+      packageName = "through2";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz";
+        sha1 = "0004569b37c7c74ba39c43f3ced78d1ad94140be";
+      };
+    };
+    "tildify-1.2.0" = {
+      name = "tildify";
+      packageName = "tildify";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz";
+        sha1 = "dcec03f55dca9b7aa3e5b04f21817eb56e63588a";
+      };
+    };
+    "time-stamp-1.1.0" = {
+      name = "time-stamp";
+      packageName = "time-stamp";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz";
+        sha1 = "764a5a11af50561921b133f3b44e618687e0f5c3";
+      };
+    };
+    "timers-browserify-2.0.10" = {
+      name = "timers-browserify";
+      packageName = "timers-browserify";
+      version = "2.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz";
+        sha512 = "YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==";
+      };
+    };
+    "timers-ext-0.1.5" = {
+      name = "timers-ext";
+      packageName = "timers-ext";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.5.tgz";
+        sha512 = "tsEStd7kmACHENhsUPaxb8Jf8/+GZZxyNFQbZD07HQOyooOa6At1rQqjffgvg7n+dxscQa9cjjMdWhJtsP2sxg==";
+      };
+    };
+    "tiny-emitter-2.0.2" = {
+      name = "tiny-emitter";
+      packageName = "tiny-emitter";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz";
+        sha512 = "2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==";
+      };
+    };
+    "tmp-0.0.29" = {
+      name = "tmp";
+      packageName = "tmp";
+      version = "0.0.29";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz";
+        sha1 = "f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0";
+      };
+    };
+    "tmp-0.0.33" = {
+      name = "tmp";
+      packageName = "tmp";
+      version = "0.0.33";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz";
+        sha512 = "jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==";
+      };
+    };
+    "to-array-0.1.4" = {
+      name = "to-array";
+      packageName = "to-array";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz";
+        sha1 = "17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890";
+      };
+    };
+    "to-arraybuffer-1.0.1" = {
+      name = "to-arraybuffer";
+      packageName = "to-arraybuffer";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz";
+        sha1 = "7d229b1fcc637e466ca081180836a7aabff83f43";
+      };
+    };
+    "to-buffer-1.1.1" = {
+      name = "to-buffer";
+      packageName = "to-buffer";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz";
+        sha512 = "lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==";
+      };
+    };
+    "to-fast-properties-1.0.3" = {
+      name = "to-fast-properties";
+      packageName = "to-fast-properties";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz";
+        sha1 = "b83571fa4d8c25b82e231b06e3a3055de4ca1a47";
+      };
+    };
+    "to-object-path-0.3.0" = {
+      name = "to-object-path";
+      packageName = "to-object-path";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz";
+        sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af";
+      };
+    };
+    "to-regex-3.0.2" = {
+      name = "to-regex";
+      packageName = "to-regex";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz";
+        sha512 = "FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==";
+      };
+    };
+    "to-regex-range-2.1.1" = {
+      name = "to-regex-range";
+      packageName = "to-regex-range";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz";
+        sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38";
+      };
+    };
+    "toposort-1.0.7" = {
+      name = "toposort";
+      packageName = "toposort";
+      version = "1.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz";
+        sha1 = "2e68442d9f64ec720b8cc89e6443ac6caa950029";
+      };
+    };
+    "toposort-class-1.0.1" = {
+      name = "toposort-class";
+      packageName = "toposort-class";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz";
+        sha1 = "7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988";
+      };
+    };
+    "tough-cookie-2.3.4" = {
+      name = "tough-cookie";
+      packageName = "tough-cookie";
+      version = "2.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz";
+        sha512 = "TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==";
+      };
+    };
+    "tough-cookie-2.4.3" = {
+      name = "tough-cookie";
+      packageName = "tough-cookie";
+      version = "2.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz";
+        sha512 = "Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==";
+      };
+    };
+    "tr46-0.0.3" = {
+      name = "tr46";
+      packageName = "tr46";
+      version = "0.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz";
+        sha1 = "8184fd347dac9cdc185992f3a6622e14b9d9ab6a";
+      };
+    };
+    "traverse-0.6.6" = {
+      name = "traverse";
+      packageName = "traverse";
+      version = "0.6.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz";
+        sha1 = "cbdf560fd7b9af632502fed40f918c157ea97137";
+      };
+    };
+    "trim-0.0.1" = {
+      name = "trim";
+      packageName = "trim";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz";
+        sha1 = "5858547f6b290757ee95cccc666fb50084c460dd";
+      };
+    };
+    "trim-right-1.0.1" = {
+      name = "trim-right";
+      packageName = "trim-right";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz";
+        sha1 = "cb2e1203067e0c8de1f614094b9fe45704ea6003";
+      };
+    };
+    "trim-trailing-lines-1.1.1" = {
+      name = "trim-trailing-lines";
+      packageName = "trim-trailing-lines";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz";
+        sha512 = "bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==";
+      };
+    };
+    "trough-1.0.2" = {
+      name = "trough";
+      packageName = "trough";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/trough/-/trough-1.0.2.tgz";
+        sha512 = "FHkoUZvG6Egrv9XZAyYGKEyb1JMsFphgPjoczkZC2y6W93U1jswcVURB8MUvtsahEPEVACyxD47JAL63vF4JsQ==";
+      };
+    };
+    "tty-browserify-0.0.0" = {
+      name = "tty-browserify";
+      packageName = "tty-browserify";
+      version = "0.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz";
+        sha1 = "a157ba402da24e9bf957f9aa69d524eed42901a6";
+      };
+    };
+    "tunnel-agent-0.6.0" = {
+      name = "tunnel-agent";
+      packageName = "tunnel-agent";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
+        sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
+      };
+    };
+    "tweetnacl-0.14.5" = {
+      name = "tweetnacl";
+      packageName = "tweetnacl";
+      version = "0.14.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
+        sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
+      };
+    };
+    "type-check-0.3.2" = {
+      name = "type-check";
+      packageName = "type-check";
+      version = "0.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
+        sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
+      };
+    };
+    "type-is-1.6.16" = {
+      name = "type-is";
+      packageName = "type-is";
+      version = "1.6.16";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz";
+        sha512 = "HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==";
+      };
+    };
+    "typechecker-2.0.8" = {
+      name = "typechecker";
+      packageName = "typechecker";
+      version = "2.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typechecker/-/typechecker-2.0.8.tgz";
+        sha1 = "e83da84bb64c584ccb345838576c40b0337db82e";
+      };
+    };
+    "typechecker-2.1.0" = {
+      name = "typechecker";
+      packageName = "typechecker";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typechecker/-/typechecker-2.1.0.tgz";
+        sha1 = "d1c2093a54ff8a19f58cff877eeaa54f2242d383";
+      };
+    };
+    "typechecker-4.5.0" = {
+      name = "typechecker";
+      packageName = "typechecker";
+      version = "4.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typechecker/-/typechecker-4.5.0.tgz";
+        sha512 = "bqPE/ck3bVIaXP7gMKTKSHrypT32lpYTpiqzPYeYzdSQnmaGvaGhy7TnN/M/+5R+2rs/kKcp9ZLPRp/Q9Yj+4w==";
+      };
+    };
+    "typedarray-0.0.6" = {
+      name = "typedarray";
+      packageName = "typedarray";
+      version = "0.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz";
+        sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777";
+      };
+    };
+    "uc.micro-1.0.5" = {
+      name = "uc.micro";
+      packageName = "uc.micro";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.5.tgz";
+        sha512 = "JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==";
+      };
+    };
+    "uglify-es-3.3.10" = {
+      name = "uglify-es";
+      packageName = "uglify-es";
+      version = "3.3.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.10.tgz";
+        sha512 = "rPzPisCzW68Okj1zNrfa2dR9uEm43SevDmpR6FChoZABFk9dANGnzzBMgHYUXI3609//63fnVkyQ1SQmAMyjww==";
+      };
+    };
+    "uglify-js-2.7.5" = {
+      name = "uglify-js";
+      packageName = "uglify-js";
+      version = "2.7.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz";
+        sha1 = "4612c0c7baaee2ba7c487de4904ae122079f2ca8";
+      };
+    };
+    "uglify-js-2.8.29" = {
+      name = "uglify-js";
+      packageName = "uglify-js";
+      version = "2.8.29";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz";
+        sha1 = "29c5733148057bb4e1f75df35b7a9cb72e6a59dd";
+      };
+    };
+    "uglify-js-3.4.6" = {
+      name = "uglify-js";
+      packageName = "uglify-js";
+      version = "3.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.6.tgz";
+        sha512 = "O1D7L6WcOzS1qW2ehopEm4cWm5yA6bQBozlks8jO8ODxYCy4zv+bR/la4Lwp01tpkYGNonnpXvUpYtrvSu8Yzg==";
+      };
+    };
+    "uglify-to-browserify-1.0.2" = {
+      name = "uglify-to-browserify";
+      packageName = "uglify-to-browserify";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz";
+        sha1 = "6e0924d6bda6b5afe349e39a6d632850a0f882b7";
+      };
+    };
+    "uid-safe-2.1.5" = {
+      name = "uid-safe";
+      packageName = "uid-safe";
+      version = "2.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz";
+        sha512 = "KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==";
+      };
+    };
+    "uid2-0.0.3" = {
+      name = "uid2";
+      packageName = "uid2";
+      version = "0.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz";
+        sha1 = "483126e11774df2f71b8b639dcd799c376162b82";
+      };
+    };
+    "ultron-1.1.1" = {
+      name = "ultron";
+      packageName = "ultron";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz";
+        sha512 = "UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==";
+      };
+    };
+    "umzug-1.12.0" = {
+      name = "umzug";
+      packageName = "umzug";
+      version = "1.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/umzug/-/umzug-1.12.0.tgz";
+        sha1 = "a79c91f2862eee3130c6c347f2b90ad68a66e8b8";
+      };
+    };
+    "unc-path-regex-0.1.2" = {
+      name = "unc-path-regex";
+      packageName = "unc-path-regex";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz";
+        sha1 = "e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa";
+      };
+    };
+    "underscore-1.4.4" = {
+      name = "underscore";
+      packageName = "underscore";
+      version = "1.4.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz";
+        sha1 = "61a6a32010622afa07963bf325203cf12239d604";
+      };
+    };
+    "underscore-1.6.0" = {
+      name = "underscore";
+      packageName = "underscore";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz";
+        sha1 = "8b38b10cacdef63337b8b24e4ff86d45aea529a8";
+      };
+    };
+    "underscore-1.7.0" = {
+      name = "underscore";
+      packageName = "underscore";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz";
+        sha1 = "6bbaf0877500d36be34ecaa584e0db9fef035209";
+      };
+    };
+    "underscore-1.8.3" = {
+      name = "underscore";
+      packageName = "underscore";
+      version = "1.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz";
+        sha1 = "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022";
+      };
+    };
+    "underscore-1.9.1" = {
+      name = "underscore";
+      packageName = "underscore";
+      version = "1.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz";
+        sha512 = "5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==";
+      };
+    };
+    "underscore.string-2.4.0" = {
+      name = "underscore.string";
+      packageName = "underscore.string";
+      version = "2.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz";
+        sha1 = "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b";
+      };
+    };
+    "unherit-1.1.1" = {
+      name = "unherit";
+      packageName = "unherit";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz";
+        sha512 = "+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==";
+      };
+    };
+    "unicode-5.2.0-0.7.5" = {
+      name = "unicode-5.2.0";
+      packageName = "unicode-5.2.0";
+      version = "0.7.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unicode-5.2.0/-/unicode-5.2.0-0.7.5.tgz";
+        sha512 = "KVGLW1Bri30x00yv4HNM8kBxoqFXr0Sbo55735nvrlsx4PYBZol3UtoWgO492fSwmsetzPEZzy73rbU8OGXJcA==";
+      };
+    };
+    "unified-4.2.1" = {
+      name = "unified";
+      packageName = "unified";
+      version = "4.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unified/-/unified-4.2.1.tgz";
+        sha1 = "76ff43aa8da430f6e7e4a55c84ebac2ad2cfcd2e";
+      };
+    };
+    "union-value-1.0.0" = {
+      name = "union-value";
+      packageName = "union-value";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz";
+        sha1 = "5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4";
+      };
+    };
+    "uniq-1.0.1" = {
+      name = "uniq";
+      packageName = "uniq";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz";
+        sha1 = "b31c5ae8254844a3a8281541ce2b04b865a734ff";
+      };
+    };
+    "uniqs-2.0.0" = {
+      name = "uniqs";
+      packageName = "uniqs";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz";
+        sha1 = "ffede4b36b25290696e6e165d4a59edb998e6b02";
+      };
+    };
+    "unique-filename-1.1.0" = {
+      name = "unique-filename";
+      packageName = "unique-filename";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz";
+        sha1 = "d05f2fe4032560871f30e93cbe735eea201514f3";
+      };
+    };
+    "unique-slug-2.0.0" = {
+      name = "unique-slug";
+      packageName = "unique-slug";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz";
+        sha1 = "db6676e7c7cc0629878ff196097c78855ae9f4ab";
+      };
+    };
+    "unique-stream-1.0.0" = {
+      name = "unique-stream";
+      packageName = "unique-stream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz";
+        sha1 = "d59a4a75427447d9aa6c91e70263f8d26a4b104b";
+      };
+    };
+    "unist-util-is-2.1.2" = {
+      name = "unist-util-is";
+      packageName = "unist-util-is";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz";
+        sha512 = "YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==";
+      };
+    };
+    "unist-util-remove-position-1.1.2" = {
+      name = "unist-util-remove-position";
+      packageName = "unist-util-remove-position";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz";
+        sha512 = "XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==";
+      };
+    };
+    "unist-util-visit-1.4.0" = {
+      name = "unist-util-visit";
+      packageName = "unist-util-visit";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz";
+        sha512 = "FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==";
+      };
+    };
+    "unist-util-visit-parents-2.0.1" = {
+      name = "unist-util-visit-parents";
+      packageName = "unist-util-visit-parents";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz";
+        sha512 = "6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==";
+      };
+    };
+    "universalify-0.1.2" = {
+      name = "universalify";
+      packageName = "universalify";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz";
+        sha512 = "rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==";
+      };
+    };
+    "unpipe-1.0.0" = {
+      name = "unpipe";
+      packageName = "unpipe";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz";
+        sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec";
+      };
+    };
+    "unset-value-1.0.0" = {
+      name = "unset-value";
+      packageName = "unset-value";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz";
+        sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559";
+      };
+    };
+    "update-section-0.3.3" = {
+      name = "update-section";
+      packageName = "update-section";
+      version = "0.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/update-section/-/update-section-0.3.3.tgz";
+        sha1 = "458f17820d37820dc60e20b86d94391b00123158";
+      };
+    };
+    "upper-case-1.1.3" = {
+      name = "upper-case";
+      packageName = "upper-case";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz";
+        sha1 = "f6b4501c2ec4cdd26ba78be7222961de77621598";
+      };
+    };
+    "uri-js-4.2.2" = {
+      name = "uri-js";
+      packageName = "uri-js";
+      version = "4.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz";
+        sha512 = "KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==";
+      };
+    };
+    "uri-path-1.0.0" = {
+      name = "uri-path";
+      packageName = "uri-path";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz";
+        sha1 = "9747f018358933c31de0fccfd82d138e67262e32";
+      };
+    };
+    "urix-0.1.0" = {
+      name = "urix";
+      packageName = "urix";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz";
+        sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72";
+      };
+    };
+    "url-0.10.3" = {
+      name = "url";
+      packageName = "url";
+      version = "0.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/url/-/url-0.10.3.tgz";
+        sha1 = "021e4d9c7705f21bbf37d03ceb58767402774c64";
+      };
+    };
+    "url-0.11.0" = {
+      name = "url";
+      packageName = "url";
+      version = "0.11.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/url/-/url-0.11.0.tgz";
+        sha1 = "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1";
+      };
+    };
+    "use-3.1.1" = {
+      name = "use";
+      packageName = "use";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/use/-/use-3.1.1.tgz";
+        sha512 = "cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==";
+      };
+    };
+    "user-home-1.1.1" = {
+      name = "user-home";
+      packageName = "user-home";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz";
+        sha1 = "2b5be23a32b63a7c9deb8d0f28d485724a3df190";
+      };
+    };
+    "user-home-2.0.0" = {
+      name = "user-home";
+      packageName = "user-home";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz";
+        sha1 = "9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f";
+      };
+    };
+    "util-0.10.3" = {
+      name = "util";
+      packageName = "util";
+      version = "0.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util/-/util-0.10.3.tgz";
+        sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9";
+      };
+    };
+    "util-0.10.4" = {
+      name = "util";
+      packageName = "util";
+      version = "0.10.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util/-/util-0.10.4.tgz";
+        sha512 = "0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==";
+      };
+    };
+    "util-deprecate-1.0.2" = {
+      name = "util-deprecate";
+      packageName = "util-deprecate";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
+        sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
+      };
+    };
+    "utila-0.3.3" = {
+      name = "utila";
+      packageName = "utila";
+      version = "0.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz";
+        sha1 = "d7e8e7d7e309107092b05f8d9688824d633a4226";
+      };
+    };
+    "utila-0.4.0" = {
+      name = "utila";
+      packageName = "utila";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz";
+        sha1 = "8a16a05d445657a3aea5eecc5b12a4fa5379772c";
+      };
+    };
+    "utils-merge-1.0.1" = {
+      name = "utils-merge";
+      packageName = "utils-merge";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz";
+        sha1 = "9f95710f50a267947b2ccc124741c1028427e713";
+      };
+    };
+    "uuid-3.1.0" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz";
+        sha512 = "DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==";
+      };
+    };
+    "uuid-3.3.2" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "3.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz";
+        sha512 = "yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==";
+      };
+    };
+    "uws-9.14.0" = {
+      name = "uws";
+      packageName = "uws";
+      version = "9.14.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz";
+        sha512 = "HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==";
+      };
+    };
+    "v8flags-2.1.1" = {
+      name = "v8flags";
+      packageName = "v8flags";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz";
+        sha1 = "aab1a1fa30d45f88dd321148875ac02c0b55e5b4";
+      };
+    };
+    "validate-npm-package-license-3.0.3" = {
+      name = "validate-npm-package-license";
+      packageName = "validate-npm-package-license";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz";
+        sha512 = "63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==";
+      };
+    };
+    "validator-5.7.0" = {
+      name = "validator";
+      packageName = "validator";
+      version = "5.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/validator/-/validator-5.7.0.tgz";
+        sha1 = "7a87a58146b695ac486071141c0c49d67da05e5c";
+      };
+    };
+    "validator-9.4.1" = {
+      name = "validator";
+      packageName = "validator";
+      version = "9.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz";
+        sha512 = "YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==";
+      };
+    };
+    "vary-1.1.2" = {
+      name = "vary";
+      packageName = "vary";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz";
+        sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc";
+      };
+    };
+    "vasync-1.6.4" = {
+      name = "vasync";
+      packageName = "vasync";
+      version = "1.6.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz";
+        sha1 = "dfe93616ad0e7ae801b332a9d88bfc5cdc8e1d1f";
+      };
+    };
+    "vendors-1.0.2" = {
+      name = "vendors";
+      packageName = "vendors";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz";
+        sha512 = "w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==";
+      };
+    };
+    "verror-1.10.0" = {
+      name = "verror";
+      packageName = "verror";
+      version = "1.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";
+        sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
+      };
+    };
+    "verror-1.6.0" = {
+      name = "verror";
+      packageName = "verror";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz";
+        sha1 = "7d13b27b1facc2e2da90405eb5ea6e5bdd252ea5";
+      };
+    };
+    "vfile-1.4.0" = {
+      name = "vfile";
+      packageName = "vfile";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vfile/-/vfile-1.4.0.tgz";
+        sha1 = "c0fd6fa484f8debdb771f68c31ed75d88da97fe7";
+      };
+    };
+    "vfile-location-2.0.3" = {
+      name = "vfile-location";
+      packageName = "vfile-location";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.3.tgz";
+        sha512 = "zM5/l4lfw1CBoPx3Jimxoc5RNDAHHpk6AM6LM0pTIkm5SUSsx8ZekZ0PVdf0WEZ7kjlhSt7ZlqbRL6Cd6dBs6A==";
+      };
+    };
+    "vinyl-0.4.6" = {
+      name = "vinyl";
+      packageName = "vinyl";
+      version = "0.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz";
+        sha1 = "2f356c87a550a255461f36bbeb2a5ba8bf784847";
+      };
+    };
+    "vinyl-0.5.3" = {
+      name = "vinyl";
+      packageName = "vinyl";
+      version = "0.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz";
+        sha1 = "b0455b38fc5e0cf30d4325132e461970c2091cde";
+      };
+    };
+    "vinyl-fs-0.3.14" = {
+      name = "vinyl-fs";
+      packageName = "vinyl-fs";
+      version = "0.3.14";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz";
+        sha1 = "9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6";
+      };
+    };
+    "vlq-0.2.3" = {
+      name = "vlq";
+      packageName = "vlq";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz";
+        sha512 = "DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==";
+      };
+    };
+    "vm-browserify-0.0.4" = {
+      name = "vm-browserify";
+      packageName = "vm-browserify";
+      version = "0.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz";
+        sha1 = "5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73";
+      };
+    };
+    "void-elements-2.0.1" = {
+      name = "void-elements";
+      packageName = "void-elements";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz";
+        sha1 = "c066afb582bb1cb4128d60ea92392e94d5e9dbec";
+      };
+    };
+    "watchpack-0.2.9" = {
+      name = "watchpack";
+      packageName = "watchpack";
+      version = "0.2.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz";
+        sha1 = "62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b";
+      };
+    };
+    "watchr-2.4.13" = {
+      name = "watchr";
+      packageName = "watchr";
+      version = "2.4.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/watchr/-/watchr-2.4.13.tgz";
+        sha1 = "d74847bb4d6f90f61fe2c74f9f68662aa0e07601";
+      };
+    };
+    "webidl-conversions-3.0.1" = {
+      name = "webidl-conversions";
+      packageName = "webidl-conversions";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz";
+        sha1 = "24534275e2a7bc6be7bc86611cc16ae0a5654871";
+      };
+    };
+    "webidl-conversions-4.0.2" = {
+      name = "webidl-conversions";
+      packageName = "webidl-conversions";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz";
+        sha512 = "YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==";
+      };
+    };
+    "webpack-core-0.6.9" = {
+      name = "webpack-core";
+      packageName = "webpack-core";
+      version = "0.6.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz";
+        sha1 = "fc571588c8558da77be9efb6debdc5a3b172bdc2";
+      };
+    };
+    "webpack-sources-0.1.5" = {
+      name = "webpack-sources";
+      packageName = "webpack-sources";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz";
+        sha1 = "aa1f3abf0f0d74db7111c40e500b84f966640750";
+      };
+    };
+    "webpack-sources-1.1.0" = {
+      name = "webpack-sources";
+      packageName = "webpack-sources";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz";
+        sha512 = "aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==";
+      };
+    };
+    "whatwg-encoding-1.0.3" = {
+      name = "whatwg-encoding";
+      packageName = "whatwg-encoding";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz";
+        sha512 = "jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==";
+      };
+    };
+    "whatwg-url-4.8.0" = {
+      name = "whatwg-url";
+      packageName = "whatwg-url";
+      version = "4.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz";
+        sha1 = "d2981aa9148c1e00a41c5a6131166ab4683bbcc0";
+      };
+    };
+    "whet.extend-0.9.9" = {
+      name = "whet.extend";
+      packageName = "whet.extend";
+      version = "0.9.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz";
+        sha1 = "f877d5bf648c97e5aa542fadc16d6a259b9c11a1";
+      };
+    };
+    "which-1.3.1" = {
+      name = "which";
+      packageName = "which";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz";
+        sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==";
+      };
+    };
+    "which-module-2.0.0" = {
+      name = "which-module";
+      packageName = "which-module";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz";
+        sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a";
+      };
+    };
+    "wide-align-1.1.3" = {
+      name = "wide-align";
+      packageName = "wide-align";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz";
+        sha512 = "QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==";
+      };
+    };
+    "window-size-0.1.0" = {
+      name = "window-size";
+      packageName = "window-size";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz";
+        sha1 = "5438cd2ea93b202efa3a19fe8887aee7c94f9c9d";
+      };
+    };
+    "winston-2.4.3" = {
+      name = "winston";
+      packageName = "winston";
+      version = "2.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/winston/-/winston-2.4.3.tgz";
+        sha512 = "GYKuysPz2pxYAVJD2NPsDLP5Z79SDEzPm9/j4tCjkF/n89iBNGBMJcR+dMUqxgPNgoSs6fVygPi+Vl2oxIpBuw==";
+      };
+    };
+    "wkx-0.2.0" = {
+      name = "wkx";
+      packageName = "wkx";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wkx/-/wkx-0.2.0.tgz";
+        sha1 = "76c24f16acd0cd8f93cd34aa331e0f7961256e84";
+      };
+    };
+    "wordwrap-0.0.2" = {
+      name = "wordwrap";
+      packageName = "wordwrap";
+      version = "0.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz";
+        sha1 = "b79669bb42ecb409f83d583cad52ca17eaa1643f";
+      };
+    };
+    "wordwrap-0.0.3" = {
+      name = "wordwrap";
+      packageName = "wordwrap";
+      version = "0.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz";
+        sha1 = "a3d5da6cd5c0bc0008d37234bbaf1bed63059107";
+      };
+    };
+    "wordwrap-1.0.0" = {
+      name = "wordwrap";
+      packageName = "wordwrap";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz";
+        sha1 = "27584810891456a4171c8d0226441ade90cbcaeb";
+      };
+    };
+    "worker-farm-1.6.0" = {
+      name = "worker-farm";
+      packageName = "worker-farm";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz";
+        sha512 = "6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==";
+      };
+    };
+    "wrap-ansi-2.1.0" = {
+      name = "wrap-ansi";
+      packageName = "wrap-ansi";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz";
+        sha1 = "d8fc3d284dd05794fe84973caecdd1cf824fdd85";
+      };
+    };
+    "wrappy-1.0.2" = {
+      name = "wrappy";
+      packageName = "wrappy";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
+        sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
+      };
+    };
+    "write-0.2.1" = {
+      name = "write";
+      packageName = "write";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/write/-/write-0.2.1.tgz";
+        sha1 = "5fc03828e264cea3fe91455476f7a3c566cb0757";
+      };
+    };
+    "ws-3.3.3" = {
+      name = "ws";
+      packageName = "ws";
+      version = "3.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz";
+        sha512 = "nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==";
+      };
+    };
+    "x-xss-protection-1.1.0" = {
+      name = "x-xss-protection";
+      packageName = "x-xss-protection";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.1.0.tgz";
+        sha512 = "rx3GzJlgEeZ08MIcDsU2vY2B1QEriUKJTSiNHHUIem6eg9pzVOr2TL3Y4Pd6TMAM5D5azGjcxqI62piITBDHVg==";
+      };
+    };
+    "xml-1.0.1" = {
+      name = "xml";
+      packageName = "xml";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz";
+        sha1 = "78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5";
+      };
+    };
+    "xml-crypto-0.10.1" = {
+      name = "xml-crypto";
+      packageName = "xml-crypto";
+      version = "0.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xml-crypto/-/xml-crypto-0.10.1.tgz";
+        sha1 = "f832f74ccf56f24afcae1163a1fcab44d96774a8";
+      };
+    };
+    "xml-encryption-0.11.2" = {
+      name = "xml-encryption";
+      packageName = "xml-encryption";
+      version = "0.11.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xml-encryption/-/xml-encryption-0.11.2.tgz";
+        sha512 = "jVvES7i5ovdO7N+NjgncA326xYKjhqeAnnvIgRnY7ROLCfFqEDLwP0Sxp/30SHG0AXQV1048T5yinOFyvwGFzg==";
+      };
+    };
+    "xml-name-validator-2.0.1" = {
+      name = "xml-name-validator";
+      packageName = "xml-name-validator";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz";
+        sha1 = "4d8b8f1eccd3419aa362061becef515e1e559635";
+      };
+    };
+    "xml2js-0.2.8" = {
+      name = "xml2js";
+      packageName = "xml2js";
+      version = "0.2.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xml2js/-/xml2js-0.2.8.tgz";
+        sha1 = "9b81690931631ff09d1957549faf54f4f980b3c2";
+      };
+    };
+    "xml2js-0.4.19" = {
+      name = "xml2js";
+      packageName = "xml2js";
+      version = "0.4.19";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz";
+        sha512 = "esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==";
+      };
+    };
+    "xmlbuilder-0.4.3" = {
+      name = "xmlbuilder";
+      packageName = "xmlbuilder";
+      version = "0.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-0.4.3.tgz";
+        sha1 = "c4614ba74e0ad196e609c9272cd9e1ddb28a8a58";
+      };
+    };
+    "xmlbuilder-9.0.7" = {
+      name = "xmlbuilder";
+      packageName = "xmlbuilder";
+      version = "9.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz";
+        sha1 = "132ee63d2ec5565c557e20f4c22df9aca686b10d";
+      };
+    };
+    "xmldom-0.1.19" = {
+      name = "xmldom";
+      packageName = "xmldom";
+      version = "0.1.19";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz";
+        sha1 = "631fc07776efd84118bf25171b37ed4d075a0abc";
+      };
+    };
+    "xmldom-0.1.27" = {
+      name = "xmldom";
+      packageName = "xmldom";
+      version = "0.1.27";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz";
+        sha1 = "d501f97b3bdb403af8ef9ecc20573187aadac0e9";
+      };
+    };
+    "xmlhttprequest-1.8.0" = {
+      name = "xmlhttprequest";
+      packageName = "xmlhttprequest";
+      version = "1.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz";
+        sha1 = "67fe075c5c24fef39f9d65f5f7b7fe75171968fc";
+      };
+    };
+    "xmlhttprequest-ssl-1.5.5" = {
+      name = "xmlhttprequest-ssl";
+      packageName = "xmlhttprequest-ssl";
+      version = "1.5.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz";
+        sha1 = "c2876b06168aadc40e57d97e81191ac8f4398b3e";
+      };
+    };
+    "xpath-0.0.27" = {
+      name = "xpath";
+      packageName = "xpath";
+      version = "0.0.27";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz";
+        sha512 = "fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==";
+      };
+    };
+    "xpath.js-1.1.0" = {
+      name = "xpath.js";
+      packageName = "xpath.js";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz";
+        sha512 = "jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==";
+      };
+    };
+    "xregexp-2.0.0" = {
+      name = "xregexp";
+      packageName = "xregexp";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz";
+        sha1 = "52a63e56ca0b84a7f3a5f3d61872f126ad7a5943";
+      };
+    };
+    "xtend-4.0.1" = {
+      name = "xtend";
+      packageName = "xtend";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz";
+        sha1 = "a5c6d532be656e23db820efb943a1f04998d63af";
+      };
+    };
+    "xtraverse-0.1.0" = {
+      name = "xtraverse";
+      packageName = "xtraverse";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xtraverse/-/xtraverse-0.1.0.tgz";
+        sha1 = "b741bad018ef78d8a9d2e83ade007b3f7959c732";
+      };
+    };
+    "y18n-3.2.1" = {
+      name = "y18n";
+      packageName = "y18n";
+      version = "3.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz";
+        sha1 = "6d15fba884c08679c0d77e88e7759e811e07fa41";
+      };
+    };
+    "y18n-4.0.0" = {
+      name = "y18n";
+      packageName = "y18n";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz";
+        sha512 = "r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==";
+      };
+    };
+    "yallist-2.1.2" = {
+      name = "yallist";
+      packageName = "yallist";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz";
+        sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52";
+      };
+    };
+    "yallist-3.0.2" = {
+      name = "yallist";
+      packageName = "yallist";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz";
+        sha1 = "8452b4bb7e83c7c188d8041c1a837c773d6d8bb9";
+      };
+    };
+    "yargs-3.10.0" = {
+      name = "yargs";
+      packageName = "yargs";
+      version = "3.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz";
+        sha1 = "f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1";
+      };
+    };
+    "yargs-8.0.2" = {
+      name = "yargs";
+      packageName = "yargs";
+      version = "8.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz";
+        sha1 = "6299a9055b1cefc969ff7e79c1d918dceb22c360";
+      };
+    };
+    "yargs-parser-7.0.0" = {
+      name = "yargs-parser";
+      packageName = "yargs-parser";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz";
+        sha1 = "8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9";
+      };
+    };
+    "yauzl-2.4.1" = {
+      name = "yauzl";
+      packageName = "yauzl";
+      version = "2.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz";
+        sha1 = "9528f442dab1b2284e58b4379bb194e22e0c4005";
+      };
+    };
+    "yeast-0.1.2" = {
+      name = "yeast";
+      packageName = "yeast";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz";
+        sha1 = "008e06d8094320c372dbc2f8ed76a0ca6c8ac419";
+      };
+    };
+    "zip-stream-1.2.0" = {
+      name = "zip-stream";
+      packageName = "zip-stream";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz";
+        sha1 = "a8bc45f4c1b49699c6b90198baacaacdbcd4ba04";
+      };
+    };
+  };
+in
+{
+  "uglifyjs-webpack-plugin-^1.2.7" = nodeEnv.buildNodePackage {
+    name = "uglifyjs-webpack-plugin";
+    packageName = "uglifyjs-webpack-plugin";
+    version = "1.2.7";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz";
+      sha512 = "1VicfKhCYHLS8m1DCApqBhoulnASsEoJ/BvpUpP4zoNAPpKzdH+ghk0olGJMmwX2/jprK2j3hAHdUbczBSy2FA==";
+    };
+    dependencies = [
+      sources."ajv-6.5.2"
+      sources."ajv-keywords-3.2.0"
+      sources."aproba-1.2.0"
+      sources."balanced-match-1.0.0"
+      sources."bluebird-3.5.1"
+      sources."brace-expansion-1.1.11"
+      sources."buffer-from-1.1.1"
+      sources."cacache-10.0.4"
+      sources."chownr-1.0.1"
+      sources."commander-2.14.1"
+      sources."commondir-1.0.1"
+      sources."concat-map-0.0.1"
+      sources."concat-stream-1.6.2"
+      sources."copy-concurrently-1.0.5"
+      sources."core-util-is-1.0.2"
+      sources."cyclist-0.2.2"
+      sources."duplexify-3.6.0"
+      sources."end-of-stream-1.4.1"
+      sources."errno-0.1.7"
+      sources."fast-deep-equal-2.0.1"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."find-cache-dir-1.0.0"
+      sources."find-up-2.1.0"
+      sources."flush-write-stream-1.0.3"
+      sources."from2-2.3.0"
+      sources."fs-write-stream-atomic-1.0.10"
+      sources."fs.realpath-1.0.0"
+      sources."glob-7.1.2"
+      sources."graceful-fs-4.1.11"
+      sources."iferr-0.1.5"
+      sources."imurmurhash-0.1.4"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."isarray-1.0.0"
+      sources."json-schema-traverse-0.4.1"
+      sources."locate-path-2.0.0"
+      sources."lru-cache-4.1.3"
+      sources."make-dir-1.3.0"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."mississippi-2.0.0"
+      sources."mkdirp-0.5.1"
+      sources."move-concurrently-1.0.1"
+      sources."once-1.4.0"
+      sources."p-limit-1.3.0"
+      sources."p-locate-2.0.0"
+      sources."p-try-1.0.0"
+      sources."parallel-transform-1.1.0"
+      sources."path-exists-3.0.0"
+      sources."path-is-absolute-1.0.1"
+      sources."pify-3.0.0"
+      sources."pkg-dir-2.0.0"
+      sources."process-nextick-args-2.0.0"
+      sources."promise-inflight-1.0.1"
+      sources."prr-1.0.1"
+      sources."pseudomap-1.0.2"
+      sources."pump-2.0.1"
+      sources."pumpify-1.5.1"
+      sources."punycode-2.1.1"
+      sources."readable-stream-2.3.6"
+      sources."rimraf-2.6.2"
+      sources."run-queue-1.0.3"
+      sources."safe-buffer-5.1.2"
+      sources."schema-utils-0.4.5"
+      sources."serialize-javascript-1.5.0"
+      sources."source-list-map-2.0.0"
+      sources."source-map-0.6.1"
+      sources."ssri-5.3.0"
+      sources."stream-each-1.2.3"
+      sources."stream-shift-1.0.0"
+      sources."string_decoder-1.1.1"
+      sources."through2-2.0.3"
+      sources."typedarray-0.0.6"
+      sources."uglify-es-3.3.10"
+      sources."unique-filename-1.1.0"
+      sources."unique-slug-2.0.0"
+      sources."uri-js-4.2.2"
+      sources."util-deprecate-1.0.2"
+      sources."webpack-sources-1.1.0"
+      sources."worker-farm-1.6.0"
+      sources."wrappy-1.0.2"
+      sources."xtend-4.0.1"
+      sources."y18n-4.0.0"
+      sources."yallist-2.1.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "UglifyJS plugin for webpack";
+      homepage = https://github.com/webpack-contrib/uglifyjs-webpack-plugin;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "babel-cli-^6.18.0" = nodeEnv.buildNodePackage {
+    name = "babel-cli";
+    packageName = "babel-cli";
+    version = "6.26.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz";
+      sha1 = "502ab54874d7db88ad00b887a06383ce03d002f1";
+    };
+    dependencies = [
+      sources."ansi-regex-2.1.1"
+      sources."ansi-styles-2.2.1"
+      sources."anymatch-1.3.2"
+      sources."arr-diff-2.0.0"
+      sources."arr-flatten-1.1.0"
+      sources."array-unique-0.2.1"
+      sources."async-each-1.0.1"
+      sources."babel-code-frame-6.26.0"
+      sources."babel-core-6.26.3"
+      sources."babel-generator-6.26.1"
+      sources."babel-helpers-6.24.1"
+      sources."babel-messages-6.23.0"
+      sources."babel-polyfill-6.26.0"
+      sources."babel-register-6.26.0"
+      (sources."babel-runtime-6.26.0" // {
+        dependencies = [
+          sources."regenerator-runtime-0.11.1"
+        ];
+      })
+      sources."babel-template-6.26.0"
+      sources."babel-traverse-6.26.0"
+      sources."babel-types-6.26.0"
+      sources."babylon-6.18.0"
+      sources."balanced-match-1.0.0"
+      sources."binary-extensions-1.11.0"
+      sources."brace-expansion-1.1.11"
+      sources."braces-1.8.5"
+      sources."chalk-1.1.3"
+      sources."chokidar-1.7.0"
+      sources."commander-2.16.0"
+      sources."concat-map-0.0.1"
+      sources."convert-source-map-1.5.1"
+      sources."core-js-2.5.7"
+      sources."core-util-is-1.0.2"
+      sources."debug-2.6.9"
+      sources."detect-indent-4.0.0"
+      sources."escape-string-regexp-1.0.5"
+      sources."esutils-2.0.2"
+      sources."expand-brackets-0.1.5"
+      sources."expand-range-1.8.2"
+      sources."extglob-0.3.2"
+      sources."filename-regex-2.0.1"
+      sources."fill-range-2.2.4"
+      sources."for-in-1.0.2"
+      sources."for-own-0.1.5"
+      sources."fs-readdir-recursive-1.1.0"
+      sources."fs.realpath-1.0.0"
+      sources."fsevents-1.2.4"
+      sources."glob-7.1.2"
+      sources."glob-base-0.3.0"
+      sources."glob-parent-2.0.0"
+      sources."globals-9.18.0"
+      sources."graceful-fs-4.1.11"
+      sources."has-ansi-2.0.0"
+      sources."home-or-tmp-2.0.0"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."invariant-2.2.4"
+      sources."is-binary-path-1.0.1"
+      sources."is-buffer-1.1.6"
+      sources."is-dotfile-1.0.3"
+      sources."is-equal-shallow-0.1.3"
+      sources."is-extendable-0.1.1"
+      sources."is-extglob-1.0.0"
+      sources."is-finite-1.0.2"
+      sources."is-glob-2.0.1"
+      sources."is-number-2.1.0"
+      sources."is-posix-bracket-0.1.1"
+      sources."is-primitive-2.0.0"
+      sources."isarray-1.0.0"
+      sources."isobject-2.1.0"
+      sources."js-tokens-3.0.2"
+      sources."jsesc-1.3.0"
+      sources."json5-0.5.1"
+      sources."kind-of-3.2.2"
+      sources."lodash-4.17.10"
+      sources."loose-envify-1.4.0"
+      sources."math-random-1.0.1"
+      sources."micromatch-2.3.11"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."ms-2.0.0"
+      sources."nan-2.10.0"
+      sources."normalize-path-2.1.1"
+      sources."number-is-nan-1.0.1"
+      sources."object-assign-4.1.1"
+      sources."object.omit-2.0.1"
+      sources."once-1.4.0"
+      sources."os-homedir-1.0.2"
+      sources."os-tmpdir-1.0.2"
+      sources."output-file-sync-1.1.2"
+      sources."parse-glob-3.0.4"
+      sources."path-is-absolute-1.0.1"
+      sources."preserve-0.2.0"
+      sources."private-0.1.8"
+      sources."process-nextick-args-2.0.0"
+      (sources."randomatic-3.0.0" // {
+        dependencies = [
+          sources."is-number-4.0.0"
+          sources."kind-of-6.0.2"
+        ];
+      })
+      sources."readable-stream-2.3.6"
+      sources."readdirp-2.1.0"
+      sources."regenerator-runtime-0.10.5"
+      sources."regex-cache-0.4.4"
+      sources."remove-trailing-separator-1.1.0"
+      sources."repeat-element-1.1.2"
+      sources."repeat-string-1.6.1"
+      sources."repeating-2.0.1"
+      sources."safe-buffer-5.1.2"
+      sources."set-immediate-shim-1.0.1"
+      sources."slash-1.0.0"
+      sources."source-map-0.5.7"
+      sources."source-map-support-0.4.18"
+      sources."string_decoder-1.1.1"
+      sources."strip-ansi-3.0.1"
+      sources."supports-color-2.0.0"
+      sources."to-fast-properties-1.0.3"
+      sources."trim-right-1.0.1"
+      sources."user-home-1.1.1"
+      sources."util-deprecate-1.0.2"
+      sources."v8flags-2.1.1"
+      sources."wrappy-1.0.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Babel command line.";
+      homepage = https://babeljs.io/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "babel-core-^6.21.0" = nodeEnv.buildNodePackage {
+    name = "babel-core";
+    packageName = "babel-core";
+    version = "6.26.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz";
+      sha512 = "6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==";
+    };
+    dependencies = [
+      sources."ansi-regex-2.1.1"
+      sources."ansi-styles-2.2.1"
+      sources."babel-code-frame-6.26.0"
+      sources."babel-core-6.26.3"
+      sources."babel-generator-6.26.1"
+      sources."babel-helpers-6.24.1"
+      sources."babel-messages-6.23.0"
+      sources."babel-register-6.26.0"
+      sources."babel-runtime-6.26.0"
+      sources."babel-template-6.26.0"
+      sources."babel-traverse-6.26.0"
+      sources."babel-types-6.26.0"
+      sources."babylon-6.18.0"
+      sources."balanced-match-1.0.0"
+      sources."brace-expansion-1.1.11"
+      sources."chalk-1.1.3"
+      sources."concat-map-0.0.1"
+      sources."convert-source-map-1.5.1"
+      sources."core-js-2.5.7"
+      sources."debug-2.6.9"
+      sources."detect-indent-4.0.0"
+      sources."escape-string-regexp-1.0.5"
+      sources."esutils-2.0.2"
+      sources."globals-9.18.0"
+      sources."has-ansi-2.0.0"
+      sources."home-or-tmp-2.0.0"
+      sources."invariant-2.2.4"
+      sources."is-finite-1.0.2"
+      sources."js-tokens-3.0.2"
+      sources."jsesc-1.3.0"
+      sources."json5-0.5.1"
+      sources."lodash-4.17.10"
+      sources."loose-envify-1.4.0"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."ms-2.0.0"
+      sources."number-is-nan-1.0.1"
+      sources."os-homedir-1.0.2"
+      sources."os-tmpdir-1.0.2"
+      sources."path-is-absolute-1.0.1"
+      sources."private-0.1.8"
+      sources."regenerator-runtime-0.11.1"
+      sources."repeating-2.0.1"
+      sources."slash-1.0.0"
+      sources."source-map-0.5.7"
+      sources."source-map-support-0.4.18"
+      sources."strip-ansi-3.0.1"
+      sources."supports-color-2.0.0"
+      sources."to-fast-properties-1.0.3"
+      sources."trim-right-1.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Babel compiler core.";
+      homepage = https://babeljs.io/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "babel-loader-^6.2.10" = nodeEnv.buildNodePackage {
+    name = "babel-loader";
+    packageName = "babel-loader";
+    version = "6.4.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz";
+      sha1 = "0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca";
+    };
+    dependencies = [
+      sources."big.js-3.2.0"
+      sources."commondir-1.0.1"
+      sources."emojis-list-2.1.0"
+      sources."find-cache-dir-0.1.1"
+      sources."find-up-1.1.2"
+      sources."json5-0.5.1"
+      sources."loader-utils-0.2.17"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."object-assign-4.1.1"
+      sources."path-exists-2.1.0"
+      sources."pinkie-2.0.4"
+      sources."pinkie-promise-2.0.1"
+      sources."pkg-dir-1.0.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "babel module loader for webpack";
+      homepage = https://github.com/babel/babel-loader;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "babel-plugin-transform-runtime-^6.15.0" = nodeEnv.buildNodePackage {
+    name = "babel-plugin-transform-runtime";
+    packageName = "babel-plugin-transform-runtime";
+    version = "6.23.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz";
+      sha1 = "88490d446502ea9b8e7efb0fe09ec4d99479b1ee";
+    };
+    dependencies = [
+      sources."babel-runtime-6.26.0"
+      sources."core-js-2.5.7"
+      sources."regenerator-runtime-0.11.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Externalise references to helpers and builtins, automatically polyfilling your code without polluting globals";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "babel-polyfill-^6.22.0" = nodeEnv.buildNodePackage {
+    name = "babel-polyfill";
+    packageName = "babel-polyfill";
+    version = "6.26.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz";
+      sha1 = "379937abc67d7895970adc621f284cd966cf2153";
+    };
+    dependencies = [
+      (sources."babel-runtime-6.26.0" // {
+        dependencies = [
+          sources."regenerator-runtime-0.11.1"
+        ];
+      })
+      sources."core-js-2.5.7"
+      sources."regenerator-runtime-0.10.5"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Provides polyfills necessary for a full ES2015+ environment";
+      homepage = https://babeljs.io/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "babel-preset-es2015-^6.18.0" = nodeEnv.buildNodePackage {
+    name = "babel-preset-es2015";
+    packageName = "babel-preset-es2015";
+    version = "6.24.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz";
+      sha1 = "d44050d6bc2c9feea702aaf38d727a0210538939";
+    };
+    dependencies = [
+      sources."ansi-regex-2.1.1"
+      sources."ansi-styles-2.2.1"
+      sources."babel-code-frame-6.26.0"
+      sources."babel-helper-call-delegate-6.24.1"
+      sources."babel-helper-define-map-6.26.0"
+      sources."babel-helper-function-name-6.24.1"
+      sources."babel-helper-get-function-arity-6.24.1"
+      sources."babel-helper-hoist-variables-6.24.1"
+      sources."babel-helper-optimise-call-expression-6.24.1"
+      sources."babel-helper-regex-6.26.0"
+      sources."babel-helper-replace-supers-6.24.1"
+      sources."babel-messages-6.23.0"
+      sources."babel-plugin-check-es2015-constants-6.22.0"
+      sources."babel-plugin-transform-es2015-arrow-functions-6.22.0"
+      sources."babel-plugin-transform-es2015-block-scoped-functions-6.22.0"
+      sources."babel-plugin-transform-es2015-block-scoping-6.26.0"
+      sources."babel-plugin-transform-es2015-classes-6.24.1"
+      sources."babel-plugin-transform-es2015-computed-properties-6.24.1"
+      sources."babel-plugin-transform-es2015-destructuring-6.23.0"
+      sources."babel-plugin-transform-es2015-duplicate-keys-6.24.1"
+      sources."babel-plugin-transform-es2015-for-of-6.23.0"
+      sources."babel-plugin-transform-es2015-function-name-6.24.1"
+      sources."babel-plugin-transform-es2015-literals-6.22.0"
+      sources."babel-plugin-transform-es2015-modules-amd-6.24.1"
+      sources."babel-plugin-transform-es2015-modules-commonjs-6.26.2"
+      sources."babel-plugin-transform-es2015-modules-systemjs-6.24.1"
+      sources."babel-plugin-transform-es2015-modules-umd-6.24.1"
+      sources."babel-plugin-transform-es2015-object-super-6.24.1"
+      sources."babel-plugin-transform-es2015-parameters-6.24.1"
+      sources."babel-plugin-transform-es2015-shorthand-properties-6.24.1"
+      sources."babel-plugin-transform-es2015-spread-6.22.0"
+      sources."babel-plugin-transform-es2015-sticky-regex-6.24.1"
+      sources."babel-plugin-transform-es2015-template-literals-6.22.0"
+      sources."babel-plugin-transform-es2015-typeof-symbol-6.23.0"
+      sources."babel-plugin-transform-es2015-unicode-regex-6.24.1"
+      sources."babel-plugin-transform-regenerator-6.26.0"
+      sources."babel-plugin-transform-strict-mode-6.24.1"
+      sources."babel-runtime-6.26.0"
+      sources."babel-template-6.26.0"
+      sources."babel-traverse-6.26.0"
+      sources."babel-types-6.26.0"
+      sources."babylon-6.18.0"
+      sources."chalk-1.1.3"
+      sources."core-js-2.5.7"
+      sources."debug-2.6.9"
+      sources."escape-string-regexp-1.0.5"
+      sources."esutils-2.0.2"
+      sources."globals-9.18.0"
+      sources."has-ansi-2.0.0"
+      sources."invariant-2.2.4"
+      sources."js-tokens-3.0.2"
+      sources."jsesc-0.5.0"
+      sources."lodash-4.17.10"
+      sources."loose-envify-1.4.0"
+      sources."ms-2.0.0"
+      sources."private-0.1.8"
+      sources."regenerate-1.4.0"
+      sources."regenerator-runtime-0.11.1"
+      sources."regenerator-transform-0.10.1"
+      sources."regexpu-core-2.0.0"
+      sources."regjsgen-0.2.0"
+      sources."regjsparser-0.1.5"
+      sources."strip-ansi-3.0.1"
+      sources."supports-color-2.0.0"
+      sources."to-fast-properties-1.0.3"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Babel preset for all es2015 plugins.";
+      homepage = https://babeljs.io/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "babel-runtime-^6.20.0" = nodeEnv.buildNodePackage {
+    name = "babel-runtime";
+    packageName = "babel-runtime";
+    version = "6.26.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz";
+      sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe";
+    };
+    dependencies = [
+      sources."core-js-2.5.7"
+      sources."regenerator-runtime-0.11.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "babel selfContained runtime";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "copy-webpack-plugin-^4.0.1" = nodeEnv.buildNodePackage {
+    name = "copy-webpack-plugin";
+    packageName = "copy-webpack-plugin";
+    version = "4.5.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.2.tgz";
+      sha512 = "zmC33E8FFSq3AbflTvqvPvBo621H36Afsxlui91d+QyZxPIuXghfnTsa1CuqiAaCPgJoSUWfTFbKJnadZpKEbQ==";
+    };
+    dependencies = [
+      sources."aproba-1.2.0"
+      sources."array-union-1.0.2"
+      sources."array-uniq-1.0.3"
+      sources."arrify-1.0.1"
+      sources."balanced-match-1.0.0"
+      sources."big.js-3.2.0"
+      sources."bluebird-3.5.1"
+      sources."brace-expansion-1.1.11"
+      sources."buffer-from-1.1.1"
+      sources."cacache-10.0.4"
+      sources."chownr-1.0.1"
+      sources."commondir-1.0.1"
+      sources."concat-map-0.0.1"
+      sources."concat-stream-1.6.2"
+      sources."copy-concurrently-1.0.5"
+      sources."core-util-is-1.0.2"
+      sources."cyclist-0.2.2"
+      sources."dir-glob-2.0.0"
+      sources."duplexify-3.6.0"
+      sources."emojis-list-2.1.0"
+      sources."end-of-stream-1.4.1"
+      sources."find-cache-dir-1.0.0"
+      sources."find-up-2.1.0"
+      sources."flush-write-stream-1.0.3"
+      sources."from2-2.3.0"
+      sources."fs-write-stream-atomic-1.0.10"
+      sources."fs.realpath-1.0.0"
+      sources."glob-7.1.2"
+      sources."globby-7.1.1"
+      sources."graceful-fs-4.1.11"
+      sources."iferr-0.1.5"
+      sources."ignore-3.3.10"
+      sources."imurmurhash-0.1.4"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."is-extglob-2.1.1"
+      sources."is-glob-4.0.0"
+      sources."isarray-1.0.0"
+      sources."json5-0.5.1"
+      sources."loader-utils-1.1.0"
+      sources."locate-path-2.0.0"
+      sources."lru-cache-4.1.3"
+      sources."make-dir-1.3.0"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."mississippi-2.0.0"
+      sources."mkdirp-0.5.1"
+      sources."move-concurrently-1.0.1"
+      sources."once-1.4.0"
+      sources."p-limit-1.3.0"
+      sources."p-locate-2.0.0"
+      sources."p-try-1.0.0"
+      sources."parallel-transform-1.1.0"
+      sources."path-exists-3.0.0"
+      sources."path-is-absolute-1.0.1"
+      sources."path-type-3.0.0"
+      sources."pify-3.0.0"
+      sources."pkg-dir-2.0.0"
+      sources."process-nextick-args-2.0.0"
+      sources."promise-inflight-1.0.1"
+      sources."pseudomap-1.0.2"
+      sources."pump-2.0.1"
+      sources."pumpify-1.5.1"
+      sources."readable-stream-2.3.6"
+      sources."rimraf-2.6.2"
+      sources."run-queue-1.0.3"
+      sources."safe-buffer-5.1.2"
+      sources."serialize-javascript-1.5.0"
+      sources."slash-1.0.0"
+      sources."ssri-5.3.0"
+      sources."stream-each-1.2.3"
+      sources."stream-shift-1.0.0"
+      sources."string_decoder-1.1.1"
+      sources."through2-2.0.3"
+      sources."typedarray-0.0.6"
+      sources."unique-filename-1.1.0"
+      sources."unique-slug-2.0.0"
+      sources."util-deprecate-1.0.2"
+      sources."wrappy-1.0.2"
+      sources."xtend-4.0.1"
+      sources."y18n-4.0.0"
+      sources."yallist-2.1.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Copy files && directories with webpack";
+      homepage = https://github.com/webpack-contrib/copy-webpack-plugin;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "css-loader-^0.26.1" = nodeEnv.buildNodePackage {
+    name = "css-loader";
+    packageName = "css-loader";
+    version = "0.26.4";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/css-loader/-/css-loader-0.26.4.tgz";
+      sha1 = "b61e9e30db94303e6ffc892f10ecd09ad025a1fd";
+    };
+    dependencies = [
+      sources."alphanum-sort-1.0.2"
+      sources."ansi-regex-2.1.1"
+      sources."ansi-styles-2.2.1"
+      sources."argparse-1.0.10"
+      sources."autoprefixer-6.7.7"
+      sources."babel-code-frame-6.26.0"
+      sources."balanced-match-0.4.2"
+      sources."big.js-3.2.0"
+      sources."browserslist-1.7.7"
+      sources."caniuse-api-1.6.1"
+      sources."caniuse-db-1.0.30000874"
+      sources."chalk-1.1.3"
+      sources."clap-1.2.3"
+      sources."clone-1.0.4"
+      sources."coa-1.0.4"
+      sources."color-0.11.4"
+      sources."color-convert-1.9.2"
+      sources."color-name-1.1.1"
+      sources."color-string-0.3.0"
+      sources."colormin-1.1.2"
+      sources."colors-1.1.2"
+      sources."css-color-names-0.0.4"
+      sources."css-selector-tokenizer-0.7.0"
+      sources."cssesc-0.1.0"
+      sources."cssnano-3.10.0"
+      sources."csso-2.3.2"
+      sources."decamelize-1.2.0"
+      sources."defined-1.0.0"
+      sources."electron-to-chromium-1.3.55"
+      sources."emojis-list-2.1.0"
+      sources."escape-string-regexp-1.0.5"
+      sources."esprima-2.7.3"
+      sources."esutils-2.0.2"
+      sources."fastparse-1.1.1"
+      sources."flatten-1.0.2"
+      sources."function-bind-1.1.1"
+      sources."has-1.0.3"
+      sources."has-ansi-2.0.0"
+      sources."has-flag-1.0.0"
+      sources."html-comment-regex-1.1.1"
+      sources."icss-replace-symbols-1.1.0"
+      sources."indexes-of-1.0.1"
+      sources."is-absolute-url-2.1.0"
+      sources."is-plain-obj-1.1.0"
+      sources."is-svg-2.1.0"
+      sources."js-base64-2.4.8"
+      sources."js-tokens-3.0.2"
+      sources."js-yaml-3.7.0"
+      sources."jsesc-0.5.0"
+      sources."json5-0.5.1"
+      sources."loader-utils-1.1.0"
+      sources."lodash.camelcase-4.3.0"
+      sources."lodash.memoize-4.1.2"
+      sources."lodash.uniq-4.5.0"
+      sources."math-expression-evaluator-1.2.17"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."normalize-range-0.1.2"
+      sources."normalize-url-1.9.1"
+      sources."num2fraction-1.2.2"
+      sources."object-assign-4.1.1"
+      (sources."postcss-5.2.18" // {
+        dependencies = [
+          sources."supports-color-3.2.3"
+        ];
+      })
+      sources."postcss-calc-5.3.1"
+      sources."postcss-colormin-2.2.2"
+      sources."postcss-convert-values-2.6.1"
+      sources."postcss-discard-comments-2.0.4"
+      sources."postcss-discard-duplicates-2.1.0"
+      sources."postcss-discard-empty-2.1.0"
+      sources."postcss-discard-overridden-0.1.1"
+      sources."postcss-discard-unused-2.2.3"
+      sources."postcss-filter-plugins-2.0.3"
+      sources."postcss-merge-idents-2.1.7"
+      sources."postcss-merge-longhand-2.0.2"
+      sources."postcss-merge-rules-2.1.2"
+      sources."postcss-message-helpers-2.0.0"
+      sources."postcss-minify-font-values-1.0.5"
+      sources."postcss-minify-gradients-1.0.5"
+      sources."postcss-minify-params-1.2.2"
+      sources."postcss-minify-selectors-2.1.1"
+      (sources."postcss-modules-extract-imports-1.2.0" // {
+        dependencies = [
+          sources."ansi-styles-3.2.1"
+          sources."chalk-2.4.1"
+          sources."has-flag-3.0.0"
+          sources."postcss-6.0.23"
+          sources."source-map-0.6.1"
+          sources."supports-color-5.4.0"
+        ];
+      })
+      (sources."postcss-modules-local-by-default-1.2.0" // {
+        dependencies = [
+          sources."ansi-styles-3.2.1"
+          sources."chalk-2.4.1"
+          sources."has-flag-3.0.0"
+          sources."postcss-6.0.23"
+          sources."source-map-0.6.1"
+          sources."supports-color-5.4.0"
+        ];
+      })
+      (sources."postcss-modules-scope-1.1.0" // {
+        dependencies = [
+          sources."ansi-styles-3.2.1"
+          sources."chalk-2.4.1"
+          sources."has-flag-3.0.0"
+          sources."postcss-6.0.23"
+          sources."source-map-0.6.1"
+          sources."supports-color-5.4.0"
+        ];
+      })
+      (sources."postcss-modules-values-1.3.0" // {
+        dependencies = [
+          sources."ansi-styles-3.2.1"
+          sources."chalk-2.4.1"
+          sources."has-flag-3.0.0"
+          sources."postcss-6.0.23"
+          sources."source-map-0.6.1"
+          sources."supports-color-5.4.0"
+        ];
+      })
+      sources."postcss-normalize-charset-1.1.1"
+      sources."postcss-normalize-url-3.0.8"
+      sources."postcss-ordered-values-2.2.3"
+      sources."postcss-reduce-idents-2.4.0"
+      sources."postcss-reduce-initial-1.0.1"
+      sources."postcss-reduce-transforms-1.0.4"
+      sources."postcss-selector-parser-2.2.3"
+      sources."postcss-svgo-2.1.6"
+      sources."postcss-unique-selectors-2.0.2"
+      sources."postcss-value-parser-3.3.0"
+      sources."postcss-zindex-2.2.0"
+      sources."prepend-http-1.0.4"
+      sources."q-1.5.1"
+      sources."query-string-4.3.4"
+      sources."reduce-css-calc-1.3.0"
+      sources."reduce-function-call-1.0.2"
+      sources."regenerate-1.4.0"
+      sources."regexpu-core-1.0.0"
+      sources."regjsgen-0.2.0"
+      sources."regjsparser-0.1.5"
+      sources."sax-1.2.4"
+      sources."sort-keys-1.1.2"
+      sources."source-list-map-0.1.8"
+      sources."source-map-0.5.7"
+      sources."sprintf-js-1.0.3"
+      sources."strict-uri-encode-1.1.0"
+      sources."strip-ansi-3.0.1"
+      sources."supports-color-2.0.0"
+      sources."svgo-0.7.2"
+      sources."uniq-1.0.1"
+      sources."uniqs-2.0.0"
+      sources."vendors-1.0.2"
+      sources."whet.extend-0.9.9"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "css loader module for webpack";
+      homepage = "https://github.com/webpack/css-loader#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "doctoc-^1.3.0" = nodeEnv.buildNodePackage {
+    name = "doctoc";
+    packageName = "doctoc";
+    version = "1.3.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/doctoc/-/doctoc-1.3.1.tgz";
+      sha1 = "f012e3603e3156254c2ef22ac88c7190f55426ba";
+    };
+    dependencies = [
+      sources."anchor-markdown-header-0.5.7"
+      sources."bail-1.0.3"
+      sources."boundary-1.0.1"
+      sources."ccount-1.0.3"
+      sources."character-entities-1.2.2"
+      sources."character-entities-html4-1.1.2"
+      sources."character-entities-legacy-1.1.2"
+      sources."character-reference-invalid-1.1.2"
+      sources."collapse-white-space-1.0.4"
+      sources."core-util-is-1.0.2"
+      sources."debug-2.6.9"
+      (sources."dom-serializer-0.1.0" // {
+        dependencies = [
+          sources."domelementtype-1.1.3"
+        ];
+      })
+      sources."domelementtype-1.3.0"
+      sources."domhandler-2.4.2"
+      sources."domutils-1.7.0"
+      sources."emoji-regex-6.1.3"
+      sources."entities-1.1.1"
+      sources."extend-3.0.2"
+      sources."function-bind-1.1.1"
+      sources."has-1.0.3"
+      sources."htmlparser2-3.9.2"
+      sources."inherits-2.0.3"
+      sources."is-alphabetical-1.0.2"
+      sources."is-alphanumerical-1.0.2"
+      sources."is-decimal-1.0.2"
+      sources."is-hexadecimal-1.0.2"
+      sources."isarray-1.0.0"
+      sources."longest-streak-1.0.0"
+      sources."markdown-table-0.4.0"
+      sources."markdown-to-ast-3.4.0"
+      sources."minimist-1.2.0"
+      sources."ms-2.0.0"
+      sources."once-1.4.0"
+      sources."parse-entities-1.1.2"
+      sources."process-nextick-args-2.0.0"
+      sources."readable-stream-2.3.6"
+      sources."remark-5.1.0"
+      sources."remark-parse-1.1.0"
+      sources."remark-stringify-1.1.0"
+      sources."repeat-string-1.6.1"
+      sources."safe-buffer-5.1.2"
+      sources."string_decoder-1.1.1"
+      sources."stringify-entities-1.3.2"
+      sources."structured-source-3.0.2"
+      sources."traverse-0.6.6"
+      sources."trim-0.0.1"
+      sources."trim-trailing-lines-1.1.1"
+      sources."trough-1.0.2"
+      sources."underscore-1.8.3"
+      sources."unherit-1.1.1"
+      sources."unified-4.2.1"
+      sources."unist-util-is-2.1.2"
+      sources."unist-util-remove-position-1.1.2"
+      sources."unist-util-visit-1.4.0"
+      sources."unist-util-visit-parents-2.0.1"
+      sources."update-section-0.3.3"
+      sources."util-deprecate-1.0.2"
+      sources."vfile-1.4.0"
+      sources."vfile-location-2.0.3"
+      sources."wrappy-1.0.2"
+      sources."xtend-4.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Generates TOC for markdown files of local git repo.";
+      homepage = "https://github.com/thlorenz/doctoc#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "ejs-loader-^0.3.0" = nodeEnv.buildNodePackage {
+    name = "ejs-loader";
+    packageName = "ejs-loader";
+    version = "0.3.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/ejs-loader/-/ejs-loader-0.3.1.tgz";
+      sha512 = "bdJHTxBY3uqZ6L5V1WRohf1gr7ousgESpArPVseEQCWCATs+M8BRqxyJWqnFo+h815gTA++g5LyAyqS5OTIfdQ==";
+    };
+    dependencies = [
+      sources."big.js-3.2.0"
+      sources."emojis-list-2.1.0"
+      sources."json5-0.5.1"
+      sources."loader-utils-0.2.17"
+      sources."lodash-3.10.1"
+      sources."object-assign-4.1.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "EJS (Underscore/LoDash Templates) loader for webpack";
+      homepage = https://github.com/okonet/ejs-loader;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "exports-loader-^0.6.3" = nodeEnv.buildNodePackage {
+    name = "exports-loader";
+    packageName = "exports-loader";
+    version = "0.6.4";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.4.tgz";
+      sha1 = "d70fc6121975b35fc12830cf52754be2740fc886";
+    };
+    dependencies = [
+      sources."big.js-3.2.0"
+      sources."emojis-list-2.1.0"
+      sources."json5-0.5.1"
+      sources."loader-utils-1.1.0"
+      sources."source-map-0.5.7"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "exports loader module for webpack";
+      homepage = "https://github.com/webpack/exports-loader#readme";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "expose-^0.1.4" = nodeEnv.buildNodePackage {
+    name = "expose";
+    packageName = "expose";
+    version = "0.1.4";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/expose/-/expose-0.1.4.tgz";
+      sha1 = "197aa807200f5114d01520a8ce6a4f42b7f9ba29";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Search modules and expose exports onto a given namespace.";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "expose-loader-^0.7.1" = nodeEnv.buildNodePackage {
+    name = "expose-loader";
+    packageName = "expose-loader";
+    version = "0.7.5";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.5.tgz";
+      sha512 = "iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "expose loader module for webpack";
+      homepage = https://github.com/webpack-contrib/expose-loader;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "extract-text-webpack-plugin-^1.0.1" = nodeEnv.buildNodePackage {
+    name = "extract-text-webpack-plugin";
+    packageName = "extract-text-webpack-plugin";
+    version = "1.0.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz";
+      sha1 = "c95bf3cbaac49dc96f1dc6e072549fbb654ccd2c";
+    };
+    dependencies = [
+      sources."async-1.5.2"
+      sources."big.js-3.2.0"
+      sources."emojis-list-2.1.0"
+      sources."json5-0.5.1"
+      sources."loader-utils-0.2.17"
+      sources."object-assign-4.1.1"
+      sources."source-list-map-0.1.8"
+      sources."source-map-0.5.7"
+      sources."webpack-sources-0.1.5"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Extract text from bundle into a file.";
+      homepage = http://github.com/webpack/extract-text-webpack-plugin;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "file-loader-^0.9.0" = nodeEnv.buildNodePackage {
+    name = "file-loader";
+    packageName = "file-loader";
+    version = "0.9.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/file-loader/-/file-loader-0.9.0.tgz";
+      sha1 = "1d2daddd424ce6d1b07cfe3f79731bed3617ab42";
+    };
+    dependencies = [
+      sources."big.js-3.2.0"
+      sources."emojis-list-2.1.0"
+      sources."json5-0.5.1"
+      sources."loader-utils-0.2.17"
+      sources."object-assign-4.1.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "file loader module for webpack";
+      homepage = https://github.com/webpack/file-loader;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "html-webpack-plugin-^2.25.0" = nodeEnv.buildNodePackage {
+    name = "html-webpack-plugin";
+    packageName = "html-webpack-plugin";
+    version = "2.30.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz";
+      sha1 = "7f9c421b7ea91ec460f56527d78df484ee7537d5";
+    };
+    dependencies = [
+      sources."ansi-regex-2.1.1"
+      sources."big.js-3.2.0"
+      sources."bluebird-3.5.1"
+      sources."boolbase-1.0.0"
+      sources."camel-case-3.0.0"
+      sources."clean-css-4.1.11"
+      sources."commander-2.16.0"
+      sources."core-util-is-1.0.2"
+      sources."css-select-1.2.0"
+      sources."css-what-2.1.0"
+      (sources."dom-converter-0.1.4" // {
+        dependencies = [
+          sources."utila-0.3.3"
+        ];
+      })
+      (sources."dom-serializer-0.1.0" // {
+        dependencies = [
+          sources."domelementtype-1.1.3"
+        ];
+      })
+      sources."domelementtype-1.3.0"
+      sources."domhandler-2.1.0"
+      sources."domutils-1.5.1"
+      sources."emojis-list-2.1.0"
+      sources."entities-1.1.1"
+      sources."he-1.1.1"
+      sources."html-minifier-3.5.19"
+      (sources."htmlparser2-3.3.0" // {
+        dependencies = [
+          sources."domutils-1.1.6"
+        ];
+      })
+      sources."inherits-2.0.3"
+      sources."isarray-0.0.1"
+      sources."json5-0.5.1"
+      sources."loader-utils-0.2.17"
+      sources."lodash-4.17.10"
+      sources."lower-case-1.1.4"
+      sources."no-case-2.3.2"
+      sources."nth-check-1.0.1"
+      sources."object-assign-4.1.1"
+      sources."param-case-2.1.1"
+      sources."pretty-error-2.1.1"
+      sources."readable-stream-1.0.34"
+      sources."relateurl-0.2.7"
+      (sources."renderkid-2.0.1" // {
+        dependencies = [
+          sources."utila-0.3.3"
+        ];
+      })
+      sources."source-map-0.5.7"
+      sources."string_decoder-0.10.31"
+      sources."strip-ansi-3.0.1"
+      sources."toposort-1.0.7"
+      (sources."uglify-js-3.4.6" // {
+        dependencies = [
+          sources."source-map-0.6.1"
+        ];
+      })
+      sources."upper-case-1.1.3"
+      sources."utila-0.4.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Simplifies creation of HTML files to serve your webpack bundles";
+      homepage = https://github.com/jantimon/html-webpack-plugin;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "imports-loader-^0.7.0" = nodeEnv.buildNodePackage {
+    name = "imports-loader";
+    packageName = "imports-loader";
+    version = "0.7.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/imports-loader/-/imports-loader-0.7.1.tgz";
+      sha1 = "f204b5f34702a32c1db7d48d89d5e867a0441253";
+    };
+    dependencies = [
+      sources."big.js-3.2.0"
+      sources."emojis-list-2.1.0"
+      sources."json5-0.5.1"
+      sources."loader-utils-1.1.0"
+      sources."source-map-0.5.7"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "imports loader module for webpack";
+      homepage = "https://github.com/webpack/imports-loader#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "json-loader-^0.5.4" = nodeEnv.buildNodePackage {
+    name = "json-loader";
+    packageName = "json-loader";
+    version = "0.5.7";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz";
+      sha512 = "QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "json loader module for webpack";
+      homepage = "https://github.com/webpack/json-loader#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "jsonlint-^1.6.2" = nodeEnv.buildNodePackage {
+    name = "jsonlint";
+    packageName = "jsonlint";
+    version = "1.6.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.3.tgz";
+      sha512 = "jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A==";
+    };
+    dependencies = [
+      sources."JSV-4.0.2"
+      sources."ansi-styles-1.0.0"
+      sources."chalk-0.4.0"
+      sources."has-color-0.1.7"
+      sources."nomnom-1.8.1"
+      sources."strip-ansi-0.1.1"
+      sources."underscore-1.6.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Validate JSON";
+      homepage = http://zaach.github.com/jsonlint/;
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "less-^2.7.1" = nodeEnv.buildNodePackage {
+    name = "less";
+    packageName = "less";
+    version = "2.7.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/less/-/less-2.7.3.tgz";
+      sha512 = "KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==";
+    };
+    dependencies = [
+      sources."ajv-4.11.8"
+      sources."asap-2.0.6"
+      sources."asn1-0.2.4"
+      sources."assert-plus-0.2.0"
+      sources."asynckit-0.4.0"
+      sources."aws-sign2-0.6.0"
+      sources."aws4-1.7.0"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."boom-2.10.1"
+      sources."caseless-0.12.0"
+      sources."co-4.6.0"
+      sources."combined-stream-1.0.6"
+      sources."core-util-is-1.0.2"
+      sources."cryptiles-2.0.5"
+      (sources."dashdash-1.14.1" // {
+        dependencies = [
+          sources."assert-plus-1.0.0"
+        ];
+      })
+      sources."delayed-stream-1.0.0"
+      sources."ecc-jsbn-0.1.2"
+      sources."errno-0.1.7"
+      sources."extend-3.0.2"
+      sources."extsprintf-1.3.0"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.1.4"
+      (sources."getpass-0.1.7" // {
+        dependencies = [
+          sources."assert-plus-1.0.0"
+        ];
+      })
+      sources."graceful-fs-4.1.11"
+      sources."har-schema-1.0.5"
+      sources."har-validator-4.2.1"
+      sources."hawk-3.1.3"
+      sources."hoek-2.16.3"
+      sources."http-signature-1.1.1"
+      sources."image-size-0.5.5"
+      sources."is-typedarray-1.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."json-schema-0.2.3"
+      sources."json-stable-stringify-1.0.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsonify-0.0.0"
+      (sources."jsprim-1.4.1" // {
+        dependencies = [
+          sources."assert-plus-1.0.0"
+        ];
+      })
+      sources."mime-1.6.0"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."oauth-sign-0.8.2"
+      sources."performance-now-0.2.0"
+      sources."promise-7.3.1"
+      sources."prr-1.0.1"
+      sources."punycode-1.4.1"
+      sources."qs-6.4.0"
+      sources."request-2.81.0"
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."sntp-1.0.9"
+      sources."source-map-0.5.7"
+      (sources."sshpk-1.14.2" // {
+        dependencies = [
+          sources."assert-plus-1.0.0"
+        ];
+      })
+      sources."stringstream-0.0.6"
+      sources."tough-cookie-2.3.4"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."uuid-3.3.2"
+      (sources."verror-1.10.0" // {
+        dependencies = [
+          sources."assert-plus-1.0.0"
+        ];
+      })
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Leaner CSS";
+      homepage = http://lesscss.org/;
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "less-loader-^2.2.3" = nodeEnv.buildNodePackage {
+    name = "less-loader";
+    packageName = "less-loader";
+    version = "2.2.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/less-loader/-/less-loader-2.2.3.tgz";
+      sha1 = "b6d8f8139c8493df09d992a93a00734b08f84528";
+    };
+    dependencies = [
+      sources."big.js-3.2.0"
+      sources."emojis-list-2.1.0"
+      sources."json5-0.5.1"
+      sources."loader-utils-0.2.17"
+      sources."object-assign-4.1.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "less loader module for webpack";
+      homepage = "https://github.com/webpack/less-loader#readme";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "optimize-css-assets-webpack-plugin-^1.3.0" = nodeEnv.buildNodePackage {
+    name = "optimize-css-assets-webpack-plugin";
+    packageName = "optimize-css-assets-webpack-plugin";
+    version = "1.3.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-1.3.2.tgz";
+      sha1 = "eb27456e21eefbd8080f31e8368c59684e585a2c";
+    };
+    dependencies = [
+      sources."alphanum-sort-1.0.2"
+      sources."ansi-regex-2.1.1"
+      sources."ansi-styles-2.2.1"
+      sources."argparse-1.0.10"
+      sources."autoprefixer-6.7.7"
+      sources."balanced-match-0.4.2"
+      sources."browserslist-1.7.7"
+      sources."caniuse-api-1.6.1"
+      sources."caniuse-db-1.0.30000874"
+      (sources."chalk-1.1.3" // {
+        dependencies = [
+          sources."supports-color-2.0.0"
+        ];
+      })
+      sources."clap-1.2.3"
+      sources."clone-1.0.4"
+      sources."coa-1.0.4"
+      sources."color-0.11.4"
+      sources."color-convert-1.9.2"
+      sources."color-name-1.1.1"
+      sources."color-string-0.3.0"
+      sources."colormin-1.1.2"
+      sources."colors-1.1.2"
+      sources."css-color-names-0.0.4"
+      sources."cssnano-3.10.0"
+      sources."csso-2.3.2"
+      sources."decamelize-1.2.0"
+      sources."defined-1.0.0"
+      sources."electron-to-chromium-1.3.55"
+      sources."escape-string-regexp-1.0.5"
+      sources."esprima-2.7.3"
+      sources."flatten-1.0.2"
+      sources."function-bind-1.1.1"
+      sources."has-1.0.3"
+      sources."has-ansi-2.0.0"
+      sources."has-flag-1.0.0"
+      sources."html-comment-regex-1.1.1"
+      sources."indexes-of-1.0.1"
+      sources."is-absolute-url-2.1.0"
+      sources."is-plain-obj-1.1.0"
+      sources."is-svg-2.1.0"
+      sources."js-base64-2.4.8"
+      sources."js-yaml-3.7.0"
+      sources."lodash.memoize-4.1.2"
+      sources."lodash.uniq-4.5.0"
+      sources."math-expression-evaluator-1.2.17"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."normalize-range-0.1.2"
+      sources."normalize-url-1.9.1"
+      sources."num2fraction-1.2.2"
+      sources."object-assign-4.1.1"
+      sources."postcss-5.2.18"
+      sources."postcss-calc-5.3.1"
+      sources."postcss-colormin-2.2.2"
+      sources."postcss-convert-values-2.6.1"
+      sources."postcss-discard-comments-2.0.4"
+      sources."postcss-discard-duplicates-2.1.0"
+      sources."postcss-discard-empty-2.1.0"
+      sources."postcss-discard-overridden-0.1.1"
+      sources."postcss-discard-unused-2.2.3"
+      sources."postcss-filter-plugins-2.0.3"
+      sources."postcss-merge-idents-2.1.7"
+      sources."postcss-merge-longhand-2.0.2"
+      sources."postcss-merge-rules-2.1.2"
+      sources."postcss-message-helpers-2.0.0"
+      sources."postcss-minify-font-values-1.0.5"
+      sources."postcss-minify-gradients-1.0.5"
+      sources."postcss-minify-params-1.2.2"
+      sources."postcss-minify-selectors-2.1.1"
+      sources."postcss-normalize-charset-1.1.1"
+      sources."postcss-normalize-url-3.0.8"
+      sources."postcss-ordered-values-2.2.3"
+      sources."postcss-reduce-idents-2.4.0"
+      sources."postcss-reduce-initial-1.0.1"
+      sources."postcss-reduce-transforms-1.0.4"
+      sources."postcss-selector-parser-2.2.3"
+      sources."postcss-svgo-2.1.6"
+      sources."postcss-unique-selectors-2.0.2"
+      sources."postcss-value-parser-3.3.0"
+      sources."postcss-zindex-2.2.0"
+      sources."prepend-http-1.0.4"
+      sources."q-1.5.1"
+      sources."query-string-4.3.4"
+      sources."reduce-css-calc-1.3.0"
+      sources."reduce-function-call-1.0.2"
+      sources."sax-1.2.4"
+      sources."sort-keys-1.1.2"
+      sources."source-list-map-0.1.8"
+      sources."source-map-0.5.7"
+      sources."sprintf-js-1.0.3"
+      sources."strict-uri-encode-1.1.0"
+      sources."strip-ansi-3.0.1"
+      sources."supports-color-3.2.3"
+      sources."svgo-0.7.2"
+      sources."underscore-1.9.1"
+      sources."uniq-1.0.1"
+      sources."uniqs-2.0.0"
+      sources."vendors-1.0.2"
+      sources."webpack-sources-0.1.5"
+      sources."whet.extend-0.9.9"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A Webpack plugin to optimize \\ minimize CSS assets.";
+      homepage = http://github.com/NMFR/optimize-css-assets-webpack-plugin;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "script-loader-^0.7.0" = nodeEnv.buildNodePackage {
+    name = "script-loader";
+    packageName = "script-loader";
+    version = "0.7.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/script-loader/-/script-loader-0.7.2.tgz";
+      sha512 = "UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==";
+    };
+    dependencies = [
+      sources."raw-loader-0.5.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "script loader module for webpack";
+      homepage = https://github.com/webpack/script-loader;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "standard-^9.0.1" = nodeEnv.buildNodePackage {
+    name = "standard";
+    packageName = "standard";
+    version = "9.0.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/standard/-/standard-9.0.2.tgz";
+      sha1 = "9bd3b9467492e212b1914d78553943ff9b48fd99";
+    };
+    dependencies = [
+      sources."acorn-5.7.1"
+      (sources."acorn-jsx-3.0.1" // {
+        dependencies = [
+          sources."acorn-3.3.0"
+        ];
+      })
+      sources."ajv-4.11.8"
+      sources."ajv-keywords-1.5.1"
+      sources."ansi-escapes-1.4.0"
+      sources."ansi-regex-2.1.1"
+      sources."ansi-styles-2.2.1"
+      sources."argparse-1.0.10"
+      sources."array-union-1.0.2"
+      sources."array-uniq-1.0.3"
+      sources."array.prototype.find-2.0.4"
+      sources."arrify-1.0.1"
+      sources."babel-code-frame-6.26.0"
+      sources."balanced-match-1.0.0"
+      sources."brace-expansion-1.1.11"
+      sources."buffer-from-1.1.1"
+      sources."caller-path-0.1.0"
+      sources."callsites-0.2.0"
+      sources."chalk-1.1.3"
+      sources."circular-json-0.3.3"
+      sources."cli-cursor-1.0.2"
+      sources."cli-width-2.2.0"
+      sources."co-4.6.0"
+      sources."code-point-at-1.1.0"
+      sources."concat-map-0.0.1"
+      sources."concat-stream-1.6.2"
+      sources."core-util-is-1.0.2"
+      sources."d-1.0.0"
+      sources."debug-2.6.9"
+      sources."debug-log-1.0.1"
+      sources."deep-is-0.1.3"
+      sources."define-properties-1.1.2"
+      sources."deglob-2.1.1"
+      sources."del-2.2.2"
+      sources."doctrine-2.1.0"
+      sources."error-ex-1.3.2"
+      sources."es-abstract-1.12.0"
+      sources."es-to-primitive-1.1.1"
+      sources."es5-ext-0.10.45"
+      sources."es6-iterator-2.0.3"
+      sources."es6-map-0.1.5"
+      sources."es6-set-0.1.5"
+      sources."es6-symbol-3.1.1"
+      sources."es6-weak-map-2.0.2"
+      sources."escape-string-regexp-1.0.5"
+      sources."escope-3.6.0"
+      sources."eslint-3.18.0"
+      sources."eslint-config-standard-7.1.0"
+      sources."eslint-config-standard-jsx-3.3.0"
+      sources."eslint-plugin-promise-3.4.2"
+      (sources."eslint-plugin-react-6.9.0" // {
+        dependencies = [
+          sources."doctrine-1.5.0"
+        ];
+      })
+      sources."eslint-plugin-standard-2.0.1"
+      sources."espree-3.5.4"
+      sources."esprima-4.0.1"
+      sources."esquery-1.0.1"
+      sources."esrecurse-4.2.1"
+      sources."estraverse-4.2.0"
+      sources."esutils-2.0.2"
+      sources."event-emitter-0.3.5"
+      sources."exit-hook-1.1.1"
+      sources."fast-levenshtein-2.0.6"
+      sources."figures-1.7.0"
+      sources."file-entry-cache-2.0.0"
+      sources."find-root-1.1.0"
+      sources."find-up-2.1.0"
+      sources."flat-cache-1.3.0"
+      sources."foreach-2.0.5"
+      sources."fs.realpath-1.0.0"
+      sources."function-bind-1.1.1"
+      sources."generate-function-2.0.0"
+      sources."generate-object-property-1.2.0"
+      sources."get-stdin-5.0.1"
+      sources."glob-7.1.2"
+      sources."globals-9.18.0"
+      sources."globby-5.0.0"
+      sources."graceful-fs-4.1.11"
+      sources."has-1.0.3"
+      sources."has-ansi-2.0.0"
+      sources."home-or-tmp-2.0.0"
+      sources."ignore-3.3.10"
+      sources."imurmurhash-0.1.4"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."inquirer-0.12.0"
+      sources."interpret-1.1.0"
+      sources."is-arrayish-0.2.1"
+      sources."is-callable-1.1.4"
+      sources."is-date-object-1.0.1"
+      sources."is-fullwidth-code-point-1.0.0"
+      sources."is-my-ip-valid-1.0.0"
+      sources."is-my-json-valid-2.17.2"
+      sources."is-path-cwd-1.0.0"
+      sources."is-path-in-cwd-1.0.1"
+      sources."is-path-inside-1.0.1"
+      sources."is-property-1.0.2"
+      sources."is-regex-1.0.4"
+      sources."is-resolvable-1.1.0"
+      sources."is-symbol-1.0.1"
+      sources."isarray-1.0.0"
+      sources."js-tokens-3.0.2"
+      sources."js-yaml-3.12.0"
+      sources."json-parse-better-errors-1.0.2"
+      sources."json-stable-stringify-1.0.1"
+      sources."jsonify-0.0.0"
+      sources."jsonpointer-4.0.1"
+      sources."jsx-ast-utils-1.4.1"
+      sources."levn-0.3.0"
+      (sources."load-json-file-4.0.0" // {
+        dependencies = [
+          sources."pify-3.0.0"
+        ];
+      })
+      sources."locate-path-2.0.0"
+      sources."lodash-4.17.10"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."ms-2.0.0"
+      sources."mute-stream-0.0.5"
+      sources."natural-compare-1.4.0"
+      sources."next-tick-1.0.0"
+      sources."number-is-nan-1.0.1"
+      sources."object-assign-4.1.1"
+      sources."object-keys-1.0.12"
+      sources."once-1.4.0"
+      sources."onetime-1.1.0"
+      sources."optionator-0.8.2"
+      sources."os-homedir-1.0.2"
+      sources."os-tmpdir-1.0.2"
+      sources."p-limit-1.3.0"
+      sources."p-locate-2.0.0"
+      sources."p-try-1.0.0"
+      sources."parse-json-4.0.0"
+      sources."path-exists-3.0.0"
+      sources."path-is-absolute-1.0.1"
+      sources."path-is-inside-1.0.2"
+      sources."path-parse-1.0.5"
+      sources."pify-2.3.0"
+      sources."pinkie-2.0.4"
+      sources."pinkie-promise-2.0.1"
+      sources."pkg-conf-2.1.0"
+      sources."pkg-config-1.1.1"
+      sources."pluralize-1.2.1"
+      sources."prelude-ls-1.1.2"
+      sources."process-nextick-args-2.0.0"
+      sources."progress-1.1.8"
+      sources."readable-stream-2.3.6"
+      sources."readline2-1.0.1"
+      sources."rechoir-0.6.2"
+      sources."require-uncached-1.0.3"
+      sources."resolve-1.8.1"
+      sources."resolve-from-1.0.1"
+      sources."restore-cursor-1.0.1"
+      sources."rimraf-2.6.2"
+      sources."run-async-0.1.0"
+      sources."run-parallel-1.1.9"
+      sources."rx-lite-3.1.2"
+      sources."safe-buffer-5.1.2"
+      sources."shelljs-0.7.8"
+      sources."slice-ansi-0.0.4"
+      sources."sprintf-js-1.0.3"
+      (sources."standard-engine-5.4.0" // {
+        dependencies = [
+          sources."minimist-1.2.0"
+        ];
+      })
+      sources."string-width-1.0.2"
+      sources."string_decoder-1.1.1"
+      sources."strip-ansi-3.0.1"
+      sources."strip-bom-3.0.0"
+      sources."strip-json-comments-2.0.1"
+      sources."supports-color-2.0.0"
+      (sources."table-3.8.3" // {
+        dependencies = [
+          sources."ansi-regex-3.0.0"
+          sources."is-fullwidth-code-point-2.0.0"
+          sources."string-width-2.1.1"
+          sources."strip-ansi-4.0.0"
+        ];
+      })
+      sources."text-table-0.2.0"
+      sources."through-2.3.8"
+      sources."type-check-0.3.2"
+      sources."typedarray-0.0.6"
+      sources."uniq-1.0.1"
+      sources."user-home-2.0.0"
+      sources."util-deprecate-1.0.2"
+      sources."wordwrap-1.0.0"
+      sources."wrappy-1.0.2"
+      sources."write-0.2.1"
+      sources."xtend-4.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "JavaScript Standard Style";
+      homepage = http://standardjs.com/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "string-loader-^0.0.1" = nodeEnv.buildNodePackage {
+    name = "string-loader";
+    packageName = "string-loader";
+    version = "0.0.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/string-loader/-/string-loader-0.0.1.tgz";
+      sha1 = "496f3cccc990213e0dd5411499f9ac6a6a6f2ff8";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "string loader for webpack";
+      homepage = "https://github.com/enmoon/string-loader#readme";
+      license = "ISC";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "style-loader-^0.13.1" = nodeEnv.buildNodePackage {
+    name = "style-loader";
+    packageName = "style-loader";
+    version = "0.13.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz";
+      sha1 = "74533384cf698c7104c7951150b49717adc2f3bb";
+    };
+    dependencies = [
+      sources."big.js-3.2.0"
+      sources."emojis-list-2.1.0"
+      sources."json5-0.5.1"
+      sources."loader-utils-1.1.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "style loader module for webpack";
+      homepage = "https://github.com/webpack/style-loader#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "url-loader-^0.5.7" = nodeEnv.buildNodePackage {
+    name = "url-loader";
+    packageName = "url-loader";
+    version = "0.5.9";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz";
+      sha512 = "B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==";
+    };
+    dependencies = [
+      sources."big.js-3.2.0"
+      sources."emojis-list-2.1.0"
+      sources."json5-0.5.1"
+      sources."loader-utils-1.1.0"
+      sources."mime-1.3.6"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "url loader module for webpack";
+      homepage = "https://github.com/webpack/url-loader#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "webpack-^1.14.0" = nodeEnv.buildNodePackage {
+    name = "webpack";
+    packageName = "webpack";
+    version = "1.15.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz";
+      sha1 = "4ff31f53db03339e55164a9d468ee0324968fe98";
+    };
+    dependencies = [
+      sources."acorn-3.3.0"
+      sources."align-text-0.1.4"
+      sources."amdefine-1.0.1"
+      sources."anymatch-1.3.2"
+      sources."arr-diff-2.0.0"
+      sources."arr-flatten-1.1.0"
+      sources."array-unique-0.2.1"
+      (sources."assert-1.4.1" // {
+        dependencies = [
+          sources."inherits-2.0.1"
+          sources."util-0.10.3"
+        ];
+      })
+      sources."async-1.5.2"
+      sources."async-each-1.0.1"
+      sources."balanced-match-1.0.0"
+      sources."base64-js-1.3.0"
+      sources."big.js-3.2.0"
+      sources."binary-extensions-1.11.0"
+      sources."brace-expansion-1.1.11"
+      sources."braces-1.8.5"
+      sources."browserify-aes-0.4.0"
+      sources."browserify-zlib-0.1.4"
+      sources."buffer-4.9.1"
+      sources."builtin-status-codes-3.0.0"
+      sources."camelcase-1.2.1"
+      sources."center-align-0.1.3"
+      sources."chokidar-1.7.0"
+      (sources."cliui-2.1.0" // {
+        dependencies = [
+          sources."wordwrap-0.0.2"
+        ];
+      })
+      sources."clone-1.0.4"
+      sources."concat-map-0.0.1"
+      sources."console-browserify-1.1.0"
+      sources."constants-browserify-1.0.0"
+      sources."core-util-is-1.0.2"
+      sources."crypto-browserify-3.3.0"
+      sources."date-now-0.1.4"
+      sources."decamelize-1.2.0"
+      sources."domain-browser-1.2.0"
+      sources."emojis-list-2.1.0"
+      (sources."enhanced-resolve-0.9.1" // {
+        dependencies = [
+          sources."memory-fs-0.2.0"
+        ];
+      })
+      sources."errno-0.1.7"
+      sources."events-1.1.1"
+      sources."expand-brackets-0.1.5"
+      sources."expand-range-1.8.2"
+      sources."extglob-0.3.2"
+      sources."filename-regex-2.0.1"
+      sources."fill-range-2.2.4"
+      sources."for-in-1.0.2"
+      sources."for-own-0.1.5"
+      sources."fsevents-1.2.4"
+      sources."glob-base-0.3.0"
+      sources."glob-parent-2.0.0"
+      sources."graceful-fs-4.1.11"
+      sources."has-flag-1.0.0"
+      sources."https-browserify-0.0.1"
+      sources."ieee754-1.1.12"
+      sources."indexof-0.0.1"
+      sources."inherits-2.0.3"
+      sources."interpret-0.6.6"
+      sources."is-binary-path-1.0.1"
+      sources."is-buffer-1.1.6"
+      sources."is-dotfile-1.0.3"
+      sources."is-equal-shallow-0.1.3"
+      sources."is-extendable-0.1.1"
+      sources."is-extglob-1.0.0"
+      sources."is-glob-2.0.1"
+      sources."is-number-2.1.0"
+      sources."is-posix-bracket-0.1.1"
+      sources."is-primitive-2.0.0"
+      sources."isarray-1.0.0"
+      sources."isobject-2.1.0"
+      sources."json5-0.5.1"
+      sources."kind-of-3.2.2"
+      sources."lazy-cache-1.0.4"
+      sources."loader-utils-0.2.17"
+      sources."longest-1.0.1"
+      sources."math-random-1.0.1"
+      sources."memory-fs-0.3.0"
+      sources."micromatch-2.3.11"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."nan-2.10.0"
+      (sources."node-libs-browser-0.7.0" // {
+        dependencies = [
+          sources."string_decoder-0.10.31"
+        ];
+      })
+      sources."normalize-path-2.1.1"
+      sources."object-assign-4.1.1"
+      sources."object.omit-2.0.1"
+      sources."optimist-0.6.1"
+      sources."os-browserify-0.2.1"
+      sources."pako-0.2.9"
+      sources."parse-glob-3.0.4"
+      sources."path-browserify-0.0.0"
+      sources."path-is-absolute-1.0.1"
+      sources."pbkdf2-compat-2.0.1"
+      sources."preserve-0.2.0"
+      sources."process-0.11.10"
+      sources."process-nextick-args-2.0.0"
+      sources."prr-1.0.1"
+      sources."punycode-1.4.1"
+      sources."querystring-0.2.0"
+      sources."querystring-es3-0.2.1"
+      (sources."randomatic-3.0.0" // {
+        dependencies = [
+          sources."is-number-4.0.0"
+          sources."kind-of-6.0.2"
+        ];
+      })
+      sources."readable-stream-2.3.6"
+      sources."readdirp-2.1.0"
+      sources."regex-cache-0.4.4"
+      sources."remove-trailing-separator-1.1.0"
+      sources."repeat-element-1.1.2"
+      sources."repeat-string-1.6.1"
+      sources."right-align-0.1.3"
+      sources."ripemd160-0.2.0"
+      sources."safe-buffer-5.1.2"
+      sources."set-immediate-shim-1.0.1"
+      sources."setimmediate-1.0.5"
+      sources."sha.js-2.2.6"
+      sources."source-list-map-0.1.8"
+      sources."source-map-0.5.7"
+      sources."stream-browserify-2.0.1"
+      sources."stream-http-2.8.3"
+      sources."string_decoder-1.1.1"
+      sources."supports-color-3.2.3"
+      sources."tapable-0.1.10"
+      sources."timers-browserify-2.0.10"
+      sources."to-arraybuffer-1.0.1"
+      sources."tty-browserify-0.0.0"
+      (sources."uglify-js-2.7.5" // {
+        dependencies = [
+          sources."async-0.2.10"
+        ];
+      })
+      sources."uglify-to-browserify-1.0.2"
+      (sources."url-0.11.0" // {
+        dependencies = [
+          sources."punycode-1.3.2"
+        ];
+      })
+      sources."util-0.10.4"
+      sources."util-deprecate-1.0.2"
+      sources."vm-browserify-0.0.4"
+      (sources."watchpack-0.2.9" // {
+        dependencies = [
+          sources."async-0.9.2"
+        ];
+      })
+      (sources."webpack-core-0.6.9" // {
+        dependencies = [
+          sources."source-map-0.4.4"
+        ];
+      })
+      sources."window-size-0.1.0"
+      sources."wordwrap-0.0.3"
+      sources."xtend-4.0.1"
+      sources."yargs-3.10.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Packs CommonJs/AMD modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jade, coffee, css, less, ... and your custom stuff.";
+      homepage = https://github.com/webpack/webpack;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "webpack-parallel-uglify-plugin-^0.2.0" = nodeEnv.buildNodePackage {
+    name = "webpack-parallel-uglify-plugin";
+    packageName = "webpack-parallel-uglify-plugin";
+    version = "0.2.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/webpack-parallel-uglify-plugin/-/webpack-parallel-uglify-plugin-0.2.0.tgz";
+      sha1 = "6daa575cdf7262a1b994ce037b216590b16d2f3d";
+    };
+    dependencies = [
+      sources."align-text-0.1.4"
+      sources."balanced-match-1.0.0"
+      sources."brace-expansion-1.1.11"
+      sources."camelcase-1.2.1"
+      sources."center-align-0.1.3"
+      sources."cliui-2.1.0"
+      sources."concat-map-0.0.1"
+      sources."decamelize-1.2.0"
+      sources."fs.realpath-1.0.0"
+      sources."glob-7.1.2"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."is-buffer-1.1.6"
+      sources."kind-of-3.2.2"
+      sources."lazy-cache-1.0.4"
+      sources."longest-1.0.1"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."once-1.4.0"
+      sources."os-tmpdir-1.0.2"
+      sources."path-is-absolute-1.0.1"
+      sources."repeat-string-1.6.1"
+      sources."right-align-0.1.3"
+      sources."source-list-map-0.1.8"
+      sources."source-map-0.5.7"
+      sources."tmp-0.0.29"
+      sources."uglify-js-2.8.29"
+      sources."uglify-to-browserify-1.0.2"
+      sources."webpack-sources-0.1.5"
+      sources."window-size-0.1.0"
+      sources."wordwrap-0.0.2"
+      sources."wrappy-1.0.2"
+      sources."yargs-3.10.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A webpack plugin to run uglifyjs in parallel.";
+      homepage = "https://github.com/gdborton/webpack-parallel-uglify-plugin#readme";
+      license = "ISC";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "eve-^0.5.4" = nodeEnv.buildNodePackage {
+    name = "eve";
+    packageName = "eve";
+    version = "0.5.4";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/eve/-/eve-0.5.4.tgz";
+      sha1 = "67d080b9725291d7e389e34c26860dd97f1debaa";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Simple custom events";
+      homepage = "https://github.com/adobe-webplatform/eve#readme";
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "Idle.Js-git+https://github.com/shawnmclean/Idle.js" = nodeEnv.buildNodePackage {
+    name = "Idle.Js";
+    packageName = "Idle.Js";
+    version = "0.0.1";
+    src = fetchgit {
+      url = "https://github.com/shawnmclean/Idle.js";
+      rev = "db9beb3483a460ad638ec947867720f0ed066a62";
+      sha256 = "05f1b2d5b7013b48d80729fe0edf3a6b7c96ee5c55572f70e81b9593176648dd";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      license = "Apache 2.0";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "archiver-^2.1.1" = nodeEnv.buildNodePackage {
+    name = "archiver";
+    packageName = "archiver";
+    version = "2.1.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz";
+      sha1 = "ff662b4a78201494a3ee544d3a33fe7496509ebc";
+    };
+    dependencies = [
+      sources."archiver-utils-1.3.0"
+      sources."async-2.6.1"
+      sources."balanced-match-1.0.0"
+      sources."base64-js-1.3.0"
+      sources."bl-1.2.2"
+      sources."brace-expansion-1.1.11"
+      sources."buffer-5.2.0"
+      sources."buffer-alloc-1.2.0"
+      sources."buffer-alloc-unsafe-1.1.0"
+      sources."buffer-crc32-0.2.13"
+      sources."buffer-fill-1.0.0"
+      sources."compress-commons-1.2.2"
+      sources."concat-map-0.0.1"
+      sources."core-util-is-1.0.2"
+      sources."crc-3.8.0"
+      sources."crc32-stream-2.0.0"
+      sources."end-of-stream-1.4.1"
+      sources."fs-constants-1.0.0"
+      sources."fs.realpath-1.0.0"
+      sources."glob-7.1.2"
+      sources."graceful-fs-4.1.11"
+      sources."ieee754-1.1.12"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."isarray-1.0.0"
+      sources."lazystream-1.0.0"
+      sources."lodash-4.17.10"
+      sources."minimatch-3.0.4"
+      sources."normalize-path-2.1.1"
+      sources."once-1.4.0"
+      sources."path-is-absolute-1.0.1"
+      sources."process-nextick-args-2.0.0"
+      sources."readable-stream-2.3.6"
+      sources."remove-trailing-separator-1.1.0"
+      sources."safe-buffer-5.1.2"
+      sources."string_decoder-1.1.1"
+      sources."tar-stream-1.6.1"
+      sources."to-buffer-1.1.1"
+      sources."util-deprecate-1.0.2"
+      sources."wrappy-1.0.2"
+      sources."xtend-4.0.1"
+      sources."zip-stream-1.2.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "a streaming interface for archive generation";
+      homepage = https://github.com/archiverjs/node-archiver;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "async-^2.1.4" = nodeEnv.buildNodePackage {
+    name = "async";
+    packageName = "async";
+    version = "2.6.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/async/-/async-2.6.1.tgz";
+      sha512 = "fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==";
+    };
+    dependencies = [
+      sources."lodash-4.17.10"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Higher-order functions and common patterns for asynchronous code";
+      homepage = https://caolan.github.io/async/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "aws-sdk-^2.7.20" = nodeEnv.buildNodePackage {
+    name = "aws-sdk";
+    packageName = "aws-sdk";
+    version = "2.286.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.286.2.tgz";
+      sha512 = "46a/2+rGEgIlmUz08vZOkYFmZIgj+An/cc+Ngz9XBLkAZbx+3sBzOrxexrlVV69MPkMbckbeZjIq8NEJWV5gPw==";
+    };
+    dependencies = [
+      sources."base64-js-1.3.0"
+      sources."buffer-4.9.1"
+      sources."events-1.1.1"
+      sources."ieee754-1.1.8"
+      sources."isarray-1.0.0"
+      sources."jmespath-0.15.0"
+      sources."punycode-1.3.2"
+      sources."querystring-0.2.0"
+      sources."sax-1.2.1"
+      sources."url-0.10.3"
+      sources."uuid-3.1.0"
+      sources."xml2js-0.4.19"
+      sources."xmlbuilder-9.0.7"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "AWS SDK for JavaScript";
+      homepage = https://github.com/aws/aws-sdk-js;
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "base64url-^3.0.0" = nodeEnv.buildNodePackage {
+    name = "base64url";
+    packageName = "base64url";
+    version = "3.0.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/base64url/-/base64url-3.0.0.tgz";
+      sha512 = "LIVmqIrIWuiqTvn4RzcrwCOuHo2DD6tKmKBPXXlr4p4n4l6BZBkwFTIa3zu1XkX5MbZgro4a6BvPi+n2Mns5Gg==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "For encoding to/from base64urls";
+      homepage = "https://github.com/brianloveswords/base64url#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "azure-storage-^2.7.0" = nodeEnv.buildNodePackage {
+    name = "azure-storage";
+    packageName = "azure-storage";
+    version = "2.10.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/azure-storage/-/azure-storage-2.10.1.tgz";
+      sha512 = "rnFo1uMIPtilusRCpK91tfY3P4Q7qRsDNwriXdp+OeTIGkGt0cTxL4mhqYfNPYPK+WBQmBdGWhOk+iROM05dcw==";
+    };
+    dependencies = [
+      sources."ajv-5.5.2"
+      sources."asn1-0.2.4"
+      sources."assert-plus-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.7.0"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."browserify-mime-1.2.9"
+      sources."caseless-0.12.0"
+      sources."co-4.6.0"
+      sources."combined-stream-1.0.6"
+      sources."core-util-is-1.0.2"
+      sources."dashdash-1.14.1"
+      sources."delayed-stream-1.0.0"
+      sources."ecc-jsbn-0.1.2"
+      sources."extend-1.2.1"
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-1.1.0"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.2"
+      sources."getpass-0.1.7"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.0.3"
+      sources."hash-base-3.0.4"
+      sources."http-signature-1.2.0"
+      sources."inherits-2.0.3"
+      sources."is-typedarray-1.0.0"
+      sources."isarray-1.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."json-edm-parser-0.1.2"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.3.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsonparse-1.2.0"
+      sources."jsprim-1.4.1"
+      sources."md5.js-1.3.4"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."oauth-sign-0.8.2"
+      sources."performance-now-2.1.0"
+      sources."process-nextick-args-1.0.7"
+      sources."punycode-1.4.1"
+      sources."qs-6.5.2"
+      sources."readable-stream-2.0.6"
+      (sources."request-2.87.0" // {
+        dependencies = [
+          sources."extend-3.0.2"
+        ];
+      })
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."sax-0.5.8"
+      sources."sshpk-1.14.2"
+      sources."string_decoder-0.10.31"
+      sources."tough-cookie-2.3.4"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."underscore-1.8.3"
+      sources."util-deprecate-1.0.2"
+      sources."uuid-3.3.2"
+      sources."validator-9.4.1"
+      sources."verror-1.10.0"
+      sources."xml2js-0.2.8"
+      sources."xmlbuilder-0.4.3"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Microsoft Azure Storage Client Library for Node.js";
+      homepage = http://github.com/Azure/azure-storage-node;
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "blueimp-md5-^2.6.0" = nodeEnv.buildNodePackage {
+    name = "blueimp-md5";
+    packageName = "blueimp-md5";
+    version = "2.10.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.10.0.tgz";
+      sha512 = "EkNUOi7tpV68TqjpiUz9D9NcT8um2+qtgntmMbi5UKssVX2m/2PLqotcric0RE63pB3HPN/fjf3cKHN2ufGSUQ==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "JavaScript MD5 implementation. Compatible with server-side environments like Node.js, module loaders like RequireJS, Browserify or webpack and all web browsers.";
+      homepage = https://github.com/blueimp/JavaScript-MD5;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "body-parser-^1.15.2" = nodeEnv.buildNodePackage {
+    name = "body-parser";
+    packageName = "body-parser";
+    version = "1.18.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz";
+      sha1 = "5b292198ffdd553b3a0f20ded0592b956955c8b4";
+    };
+    dependencies = [
+      sources."bytes-3.0.0"
+      sources."content-type-1.0.4"
+      sources."debug-2.6.9"
+      sources."depd-1.1.2"
+      sources."ee-first-1.1.1"
+      sources."http-errors-1.6.3"
+      sources."iconv-lite-0.4.23"
+      sources."inherits-2.0.3"
+      sources."media-typer-0.3.0"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."ms-2.0.0"
+      sources."on-finished-2.3.0"
+      sources."qs-6.5.2"
+      sources."raw-body-2.3.3"
+      sources."safer-buffer-2.1.2"
+      sources."setprototypeof-1.1.0"
+      sources."statuses-1.5.0"
+      sources."type-is-1.6.16"
+      sources."unpipe-1.0.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Node.js body parsing middleware";
+      homepage = "https://github.com/expressjs/body-parser#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "bootstrap-^3.3.7" = nodeEnv.buildNodePackage {
+    name = "bootstrap";
+    packageName = "bootstrap";
+    version = "3.3.7";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz";
+      sha1 = "5a389394549f23330875a3b150656574f8a9eb71";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "The most popular front-end framework for developing responsive, mobile first projects on the web.";
+      homepage = http://getbootstrap.com/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "bootstrap-validator-^0.11.8" = nodeEnv.buildNodePackage {
+    name = "bootstrap-validator";
+    packageName = "bootstrap-validator";
+    version = "0.11.9";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/bootstrap-validator/-/bootstrap-validator-0.11.9.tgz";
+      sha1 = "fb7058eef53623e78f5aa7967026f98f875a9404";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A user-friendly HTML5 Form validator for Bootstrap 3";
+      homepage = "https://github.com/1000hz/bootstrap-validator#readme";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "chance-^1.0.4" = nodeEnv.buildNodePackage {
+    name = "chance";
+    packageName = "chance";
+    version = "1.0.16";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/chance/-/chance-1.0.16.tgz";
+      sha512 = "2bgDHH5bVfAXH05SPtjqrsASzZ7h90yCuYT2z4mkYpxxYvJXiIydBFzVieVHZx7wLH1Ag2Azaaej2/zA1XUrNQ==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Chance - Utility library to generate anything random";
+      homepage = http://chancejs.com/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "cheerio-^0.22.0" = nodeEnv.buildNodePackage {
+    name = "cheerio";
+    packageName = "cheerio";
+    version = "0.22.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz";
+      sha1 = "a9baa860a3f9b595a6b81b1a86873121ed3a269e";
+    };
+    dependencies = [
+      sources."boolbase-1.0.0"
+      sources."core-util-is-1.0.2"
+      sources."css-select-1.2.0"
+      sources."css-what-2.1.0"
+      (sources."dom-serializer-0.1.0" // {
+        dependencies = [
+          sources."domelementtype-1.1.3"
+        ];
+      })
+      sources."domelementtype-1.3.0"
+      sources."domhandler-2.4.2"
+      sources."domutils-1.5.1"
+      sources."entities-1.1.1"
+      sources."htmlparser2-3.9.2"
+      sources."inherits-2.0.3"
+      sources."isarray-1.0.0"
+      sources."lodash.assignin-4.2.0"
+      sources."lodash.bind-4.2.1"
+      sources."lodash.defaults-4.2.0"
+      sources."lodash.filter-4.6.0"
+      sources."lodash.flatten-4.4.0"
+      sources."lodash.foreach-4.5.0"
+      sources."lodash.map-4.6.0"
+      sources."lodash.merge-4.6.1"
+      sources."lodash.pick-4.4.0"
+      sources."lodash.reduce-4.6.0"
+      sources."lodash.reject-4.6.0"
+      sources."lodash.some-4.6.0"
+      sources."nth-check-1.0.1"
+      sources."process-nextick-args-2.0.0"
+      sources."readable-stream-2.3.6"
+      sources."safe-buffer-5.1.2"
+      sources."string_decoder-1.1.1"
+      sources."util-deprecate-1.0.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Tiny, fast, and elegant implementation of core jQuery designed specifically for the server";
+      homepage = "https://github.com/cheeriojs/cheerio#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "codemirror-git+https://github.com/hackmdio/CodeMirror.git" = nodeEnv.buildNodePackage {
+    name = "codemirror";
+    packageName = "codemirror";
+    version = "5.39.1";
+    src = fetchgit {
+      url = "https://github.com/hackmdio/CodeMirror.git";
+      rev = "df412731ed3923124f9a43f60e84bdf855eb843a";
+      sha256 = "3c5a6813c29893301836773c3ed122ec868840432b16d2936a4deab419e3620b";
+    };
+    dependencies = [
+      sources."acorn-5.7.1"
+      (sources."acorn-jsx-3.0.1" // {
+        dependencies = [
+          sources."acorn-3.3.0"
+        ];
+      })
+      (sources."acorn-object-spread-1.0.0" // {
+        dependencies = [
+          sources."acorn-3.3.0"
+        ];
+      })
+      sources."ajv-5.5.2"
+      sources."align-text-0.1.4"
+      sources."ansi-regex-2.1.1"
+      sources."ansi-styles-1.0.0"
+      sources."asn1-0.2.4"
+      sources."assert-plus-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.7.0"
+      sources."balanced-match-1.0.0"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."blint-1.0.3"
+      sources."brace-expansion-1.1.11"
+      (sources."buble-0.15.2" // {
+        dependencies = [
+          sources."acorn-3.3.0"
+          sources."ansi-styles-2.2.1"
+          sources."chalk-1.1.3"
+          sources."minimist-1.2.0"
+          sources."strip-ansi-3.0.1"
+        ];
+      })
+      sources."buffer-from-1.1.1"
+      sources."camelcase-1.2.1"
+      sources."caseless-0.12.0"
+      sources."center-align-0.1.3"
+      sources."chalk-0.4.0"
+      sources."cliui-2.1.0"
+      sources."co-4.6.0"
+      sources."combined-stream-1.0.6"
+      sources."concat-map-0.0.1"
+      sources."concat-stream-1.6.2"
+      sources."core-util-is-1.0.2"
+      sources."dashdash-1.14.1"
+      sources."debug-2.6.9"
+      sources."decamelize-1.2.0"
+      sources."delayed-stream-1.0.0"
+      sources."ecc-jsbn-0.1.2"
+      sources."es6-promise-4.2.4"
+      sources."escape-string-regexp-1.0.5"
+      sources."estree-walker-0.2.1"
+      sources."extend-3.0.2"
+      sources."extract-zip-1.6.7"
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-1.1.0"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."fd-slicer-1.0.1"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.2"
+      sources."fs-extra-1.0.0"
+      sources."getpass-0.1.7"
+      sources."graceful-fs-4.1.11"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.0.3"
+      sources."has-ansi-2.0.0"
+      sources."has-color-0.1.7"
+      sources."hasha-2.2.0"
+      sources."http-signature-1.2.0"
+      sources."inherits-2.0.3"
+      sources."is-buffer-1.1.6"
+      sources."is-stream-1.1.0"
+      sources."is-typedarray-1.0.0"
+      sources."isarray-1.0.0"
+      sources."isexe-2.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.3.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsonfile-2.4.0"
+      sources."jsprim-1.4.1"
+      sources."kew-0.7.0"
+      sources."kind-of-3.2.2"
+      sources."klaw-1.3.1"
+      sources."lazy-cache-1.0.4"
+      sources."longest-1.0.1"
+      sources."magic-string-0.14.0"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."ms-2.0.0"
+      sources."node-static-0.6.0"
+      sources."nomnom-1.8.1"
+      sources."oauth-sign-0.8.2"
+      sources."os-homedir-1.0.2"
+      sources."pend-1.2.0"
+      sources."performance-now-2.1.0"
+      sources."phantomjs-prebuilt-2.1.16"
+      sources."pinkie-2.0.4"
+      sources."pinkie-promise-2.0.1"
+      sources."process-nextick-args-2.0.0"
+      sources."progress-1.1.8"
+      sources."punycode-1.4.1"
+      sources."qs-6.5.2"
+      sources."readable-stream-2.3.6"
+      sources."repeat-string-1.6.1"
+      sources."request-2.87.0"
+      sources."request-progress-2.0.1"
+      sources."require-relative-0.8.7"
+      sources."right-align-0.1.3"
+      sources."rollup-0.41.6"
+      sources."rollup-plugin-buble-0.15.0"
+      sources."rollup-pluginutils-1.5.2"
+      sources."rollup-watch-3.2.2"
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."source-map-0.5.7"
+      sources."source-map-support-0.4.18"
+      sources."sshpk-1.14.2"
+      sources."string_decoder-1.1.1"
+      sources."strip-ansi-0.1.1"
+      sources."supports-color-2.0.0"
+      sources."throttleit-1.0.0"
+      sources."tough-cookie-2.3.4"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."typedarray-0.0.6"
+      sources."uglify-js-2.8.29"
+      sources."uglify-to-browserify-1.0.2"
+      sources."underscore-1.6.0"
+      sources."util-deprecate-1.0.2"
+      sources."uuid-3.3.2"
+      sources."verror-1.10.0"
+      sources."vlq-0.2.3"
+      sources."which-1.3.1"
+      sources."window-size-0.1.0"
+      sources."wordwrap-0.0.2"
+      sources."yargs-3.10.0"
+      sources."yauzl-2.4.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Full-featured in-browser code editor";
+      homepage = http://codemirror.net/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "compression-^1.6.2" = nodeEnv.buildNodePackage {
+    name = "compression";
+    packageName = "compression";
+    version = "1.7.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz";
+      sha512 = "HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==";
+    };
+    dependencies = [
+      sources."accepts-1.3.5"
+      sources."bytes-3.0.0"
+      sources."compressible-2.0.14"
+      sources."debug-2.6.9"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."ms-2.0.0"
+      sources."negotiator-0.6.1"
+      sources."on-headers-1.0.1"
+      sources."safe-buffer-5.1.2"
+      sources."vary-1.1.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Node.js compression middleware";
+      homepage = "https://github.com/expressjs/compression#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "connect-flash-^0.1.1" = nodeEnv.buildNodePackage {
+    name = "connect-flash";
+    packageName = "connect-flash";
+    version = "0.1.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/connect-flash/-/connect-flash-0.1.1.tgz";
+      sha1 = "d8630f26d95a7f851f9956b1e8cc6732f3b6aa30";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Flash message middleware for Connect.";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "connect-session-sequelize-^4.1.0" = nodeEnv.buildNodePackage {
+    name = "connect-session-sequelize";
+    packageName = "connect-session-sequelize";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/connect-session-sequelize/-/connect-session-sequelize-4.1.0.tgz";
+      sha1 = "d402749c3bebd79209192c164c090742b3fe2011";
+    };
+    dependencies = [
+      sources."debug-2.6.9"
+      sources."deep-equal-1.0.1"
+      sources."ms-2.0.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Session store for connect-session using sequelize";
+      homepage = https://github.com/mweibel/connect-session-sequelize;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "cookie-0.3.1" = nodeEnv.buildNodePackage {
+    name = "cookie";
+    packageName = "cookie";
+    version = "0.3.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz";
+      sha1 = "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "HTTP server cookie parsing and serialization";
+      homepage = https://github.com/jshttp/cookie;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "cookie-parser-1.4.3" = nodeEnv.buildNodePackage {
+    name = "cookie-parser";
+    packageName = "cookie-parser";
+    version = "1.4.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz";
+      sha1 = "0fe31fa19d000b95f4aadf1f53fdc2b8a203baa5";
+    };
+    dependencies = [
+      sources."cookie-0.3.1"
+      sources."cookie-signature-1.0.6"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "cookie parsing with signatures";
+      homepage = https://github.com/expressjs/cookie-parser;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "deep-freeze-^0.0.1" = nodeEnv.buildNodePackage {
+    name = "deep-freeze";
+    packageName = "deep-freeze";
+    version = "0.0.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz";
+      sha1 = "3a0b0005de18672819dfd38cd31f91179c893e84";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "recursively Object.freeze() objects and functions";
+      homepage = https://github.com/substack/deep-freeze;
+      license = "public domain";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "diff-match-patch-git+https://github.com/hackmdio/diff-match-patch.git" = nodeEnv.buildNodePackage {
+    name = "diff-match-patch";
+    packageName = "diff-match-patch";
+    version = "1.1.0";
+    src = fetchgit {
+      url = "https://github.com/hackmdio/diff-match-patch.git";
+      rev = "73e56e779a2a8503b05458e607077d0fd1d80419";
+      sha256 = "2ea9013d983e96621b447f40ca983f697ad355a9ed9dc48f5ab42fa1f183937f";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "npm package for https://code.google.com/p/google-diff-match-patch/";
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "ejs-^2.5.5" = nodeEnv.buildNodePackage {
+    name = "ejs";
+    packageName = "ejs";
+    version = "2.6.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz";
+      sha512 = "0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Embedded JavaScript templates";
+      homepage = https://github.com/mde/ejs;
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "emojify.js-~1.1.0" = nodeEnv.buildNodePackage {
+    name = "emojify.js";
+    packageName = "emojify.js";
+    version = "1.1.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/emojify.js/-/emojify.js-1.1.0.tgz";
+      sha1 = "079fff223307c9007f570785e8e4935d5c398beb";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A Javascript module to convert emoji keywords to images.";
+      homepage = "https://github.com/hassankhan/emojify.js#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "express->=4.14" = nodeEnv.buildNodePackage {
+    name = "express";
+    packageName = "express";
+    version = "4.16.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/express/-/express-4.16.3.tgz";
+      sha1 = "6af8a502350db3246ecc4becf6b5a34d22f7ed53";
+    };
+    dependencies = [
+      sources."accepts-1.3.5"
+      sources."array-flatten-1.1.1"
+      sources."body-parser-1.18.2"
+      sources."bytes-3.0.0"
+      sources."content-disposition-0.5.2"
+      sources."content-type-1.0.4"
+      sources."cookie-0.3.1"
+      sources."cookie-signature-1.0.6"
+      sources."debug-2.6.9"
+      sources."depd-1.1.2"
+      sources."destroy-1.0.4"
+      sources."ee-first-1.1.1"
+      sources."encodeurl-1.0.2"
+      sources."escape-html-1.0.3"
+      sources."etag-1.8.1"
+      sources."finalhandler-1.1.1"
+      sources."forwarded-0.1.2"
+      sources."fresh-0.5.2"
+      sources."http-errors-1.6.3"
+      sources."iconv-lite-0.4.19"
+      sources."inherits-2.0.3"
+      sources."ipaddr.js-1.8.0"
+      sources."media-typer-0.3.0"
+      sources."merge-descriptors-1.0.1"
+      sources."methods-1.1.2"
+      sources."mime-1.4.1"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."ms-2.0.0"
+      sources."negotiator-0.6.1"
+      sources."on-finished-2.3.0"
+      sources."parseurl-1.3.2"
+      sources."path-to-regexp-0.1.7"
+      sources."proxy-addr-2.0.4"
+      sources."qs-6.5.1"
+      sources."range-parser-1.2.0"
+      (sources."raw-body-2.3.2" // {
+        dependencies = [
+          sources."depd-1.1.1"
+          sources."http-errors-1.6.2"
+          sources."setprototypeof-1.0.3"
+        ];
+      })
+      sources."safe-buffer-5.1.1"
+      sources."send-0.16.2"
+      sources."serve-static-1.13.2"
+      sources."setprototypeof-1.1.0"
+      sources."statuses-1.4.0"
+      sources."type-is-1.6.16"
+      sources."unpipe-1.0.0"
+      sources."utils-merge-1.0.1"
+      sources."vary-1.1.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Fast, unopinionated, minimalist web framework";
+      homepage = http://expressjs.com/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "express-session-^1.14.2" = nodeEnv.buildNodePackage {
+    name = "express-session";
+    packageName = "express-session";
+    version = "1.15.6";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz";
+      sha512 = "r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==";
+    };
+    dependencies = [
+      sources."cookie-0.3.1"
+      sources."cookie-signature-1.0.6"
+      sources."crc-3.4.4"
+      sources."debug-2.6.9"
+      sources."depd-1.1.2"
+      sources."ms-2.0.0"
+      sources."on-headers-1.0.1"
+      sources."parseurl-1.3.2"
+      sources."random-bytes-1.0.0"
+      sources."uid-safe-2.1.5"
+      sources."utils-merge-1.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Simple session middleware for Express";
+      homepage = "https://github.com/expressjs/session#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "file-saver-^1.3.3" = nodeEnv.buildNodePackage {
+    name = "file-saver";
+    packageName = "file-saver";
+    version = "1.3.8";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz";
+      sha512 = "spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "An HTML5 saveAs() FileSaver implementation";
+      homepage = "https://github.com/eligrey/FileSaver.js#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "flowchart.js-^1.6.4" = nodeEnv.buildNodePackage {
+    name = "flowchart.js";
+    packageName = "flowchart.js";
+    version = "1.11.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/flowchart.js/-/flowchart.js-1.11.3.tgz";
+      sha512 = "Hk5vKKsEjYp/Vt4gSRBx39z+6OLwkg3top/EQ4antpZXCVrHLajVGWEqhCPeEBixhzDxAtHdRn4aFEtRhlTzHA==";
+    };
+    dependencies = [
+      sources."eve-raphael-0.5.0"
+      sources."raphael-2.2.7"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "[![JS.ORG](https://img.shields.io/badge/js.org-flowchart-ffb400.svg?style=flat-square)](http://js.org)";
+      homepage = http://flowchart.js.org/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "font-awesome-^4.7.0" = nodeEnv.buildNodePackage {
+    name = "font-awesome";
+    packageName = "font-awesome";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz";
+      sha1 = "8fa8cf0411a1a31afd07b06d2902bb9fc815a133";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "The iconic font and CSS framework";
+      homepage = http://fontawesome.io/;
+      license = "(OFL-1.1 AND MIT)";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "formidable-^1.0.17" = nodeEnv.buildNodePackage {
+    name = "formidable";
+    packageName = "formidable";
+    version = "1.2.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz";
+      sha512 = "Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A node.js module for parsing form data, especially file uploads.";
+      homepage = https://github.com/felixge/node-formidable;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "gist-embed-~2.6.0" = nodeEnv.buildNodePackage {
+    name = "gist-embed";
+    packageName = "gist-embed";
+    version = "2.6.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/gist-embed/-/gist-embed-2.6.0.tgz";
+      sha1 = "1ea95703fa1fc2a1255419f6f06c67e9920649ab";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Ultra powered gist embedding for your website";
+      homepage = "https://github.com/blairvanderhoof/gist-embed#readme";
+      license = "BSD-2-Clause";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "graceful-fs-^4.1.11" = nodeEnv.buildNodePackage {
+    name = "graceful-fs";
+    packageName = "graceful-fs";
+    version = "4.1.11";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz";
+      sha1 = "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A drop-in replacement for fs, making various improvements.";
+      homepage = "https://github.com/isaacs/node-graceful-fs#readme";
+      license = "ISC";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "handlebars-^4.0.6" = nodeEnv.buildNodePackage {
+    name = "handlebars";
+    packageName = "handlebars";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz";
+      sha1 = "630a35dfe0294bc281edae6ffc5d329fc7982dcc";
+    };
+    dependencies = [
+      sources."align-text-0.1.4"
+      sources."amdefine-1.0.1"
+      sources."async-1.5.2"
+      sources."camelcase-1.2.1"
+      sources."center-align-0.1.3"
+      (sources."cliui-2.1.0" // {
+        dependencies = [
+          sources."wordwrap-0.0.2"
+        ];
+      })
+      sources."decamelize-1.2.0"
+      sources."is-buffer-1.1.6"
+      sources."kind-of-3.2.2"
+      sources."lazy-cache-1.0.4"
+      sources."longest-1.0.1"
+      sources."minimist-0.0.10"
+      sources."optimist-0.6.1"
+      sources."repeat-string-1.6.1"
+      sources."right-align-0.1.3"
+      sources."source-map-0.4.4"
+      (sources."uglify-js-2.8.29" // {
+        dependencies = [
+          sources."source-map-0.5.7"
+        ];
+      })
+      sources."uglify-to-browserify-1.0.2"
+      sources."window-size-0.1.0"
+      sources."wordwrap-0.0.3"
+      sources."yargs-3.10.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Handlebars provides the power necessary to let you build semantic templates effectively with no frustration";
+      homepage = http://www.handlebarsjs.com/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "helmet-^3.3.0" = nodeEnv.buildNodePackage {
+    name = "helmet";
+    packageName = "helmet";
+    version = "3.13.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/helmet/-/helmet-3.13.0.tgz";
+      sha512 = "rCYnlbOBkeP6fCo4sXZNu91vIAWlbVgolwnUANtnzPANRf2kJZ2a6yjRnCqG23Tyl2/ExvJ8bDg4xUdNCIWnrw==";
+    };
+    dependencies = [
+      sources."camelize-1.0.0"
+      sources."content-security-policy-builder-2.0.0"
+      sources."dasherize-2.0.0"
+      sources."dns-prefetch-control-0.1.0"
+      sources."dont-sniff-mimetype-1.0.0"
+      sources."expect-ct-0.1.1"
+      sources."frameguard-3.0.0"
+      sources."helmet-crossdomain-0.3.0"
+      sources."helmet-csp-2.7.1"
+      sources."hide-powered-by-1.0.0"
+      sources."hpkp-2.0.0"
+      sources."hsts-2.1.0"
+      sources."ienoopen-1.0.0"
+      sources."nocache-2.0.0"
+      sources."platform-1.3.5"
+      sources."referrer-policy-1.1.0"
+      sources."x-xss-protection-1.1.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "help secure Express/Connect apps with various HTTP headers";
+      homepage = https://helmetjs.github.io/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "highlight.js-~9.12.0" = nodeEnv.buildNodePackage {
+    name = "highlight.js";
+    packageName = "highlight.js";
+    version = "9.12.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz";
+      sha1 = "e6d9dbe57cbefe60751f02af336195870c90c01e";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Syntax highlighting with language autodetection.";
+      homepage = https://highlightjs.org/;
+      license = "BSD-3-Clause";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "i18n-^0.8.3" = nodeEnv.buildNodePackage {
+    name = "i18n";
+    packageName = "i18n";
+    version = "0.8.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/i18n/-/i18n-0.8.3.tgz";
+      sha1 = "2d8cf1c24722602c2041d01ba6ae5eaa51388f0e";
+    };
+    dependencies = [
+      sources."abbrev-1.1.1"
+      (sources."ambi-2.5.0" // {
+        dependencies = [
+          sources."typechecker-4.5.0"
+        ];
+      })
+      sources."async-1.5.2"
+      sources."balanced-match-1.0.0"
+      sources."brace-expansion-1.1.11"
+      sources."concat-map-0.0.1"
+      sources."csextends-1.2.0"
+      sources."debug-3.1.0"
+      sources."eachr-2.0.4"
+      sources."editions-1.3.4"
+      (sources."extendr-2.1.0" // {
+        dependencies = [
+          sources."typechecker-2.0.8"
+        ];
+      })
+      (sources."extract-opts-2.2.0" // {
+        dependencies = [
+          sources."typechecker-2.0.8"
+        ];
+      })
+      sources."glob-6.0.4"
+      sources."graceful-fs-4.1.11"
+      sources."ignorefs-1.2.0"
+      sources."ignorepatterns-1.1.0"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."make-plural-3.0.6"
+      sources."math-interval-parser-1.1.0"
+      sources."messageformat-0.3.1"
+      sources."minimatch-3.0.4"
+      sources."minimist-1.2.0"
+      sources."ms-2.0.0"
+      sources."mustache-2.3.0"
+      sources."nopt-3.0.6"
+      sources."once-1.4.0"
+      sources."path-is-absolute-1.0.1"
+      sources."safefs-3.2.2"
+      sources."scandirectory-2.5.0"
+      sources."sprintf-js-1.1.1"
+      sources."taskgroup-4.3.1"
+      sources."typechecker-2.1.0"
+      sources."watchr-2.4.13"
+      sources."wrappy-1.0.2"
+      sources."xregexp-2.0.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "lightweight translation module with dynamic json storage";
+      homepage = http://github.com/mashpie/i18n-node;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "imgur-git+https://github.com/hackmdio/node-imgur.git" = nodeEnv.buildNodePackage {
+    name = "imgur";
+    packageName = "imgur";
+    version = "0.2.0";
+    src = fetchgit {
+      url = "https://github.com/hackmdio/node-imgur.git";
+      rev = "0fba6d163428c946942cd2c3022634cbb8754e38";
+      sha256 = "b7dc96b2ccefdca42dca10138d3121b405b2b7e70ffa055ce225ad63bc3f3c7a";
+    };
+    dependencies = [
+      sources."ajv-5.5.2"
+      sources."asn1-0.2.4"
+      sources."assert-plus-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.7.0"
+      sources."balanced-match-1.0.0"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."brace-expansion-1.1.11"
+      sources."caseless-0.12.0"
+      sources."co-4.6.0"
+      sources."combined-stream-1.0.6"
+      sources."commander-2.16.0"
+      sources."concat-map-0.0.1"
+      sources."core-util-is-1.0.2"
+      sources."dashdash-1.14.1"
+      sources."delayed-stream-1.0.0"
+      sources."ecc-jsbn-0.1.2"
+      sources."extend-3.0.2"
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-1.1.0"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.2"
+      sources."getpass-0.1.7"
+      sources."glob-4.5.3"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.0.3"
+      sources."http-signature-1.2.0"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."is-typedarray-1.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.3.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsprim-1.4.1"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."minimatch-2.0.10"
+      sources."oauth-sign-0.8.2"
+      sources."once-1.4.0"
+      sources."performance-now-2.1.0"
+      sources."punycode-1.4.1"
+      sources."q-1.5.1"
+      sources."qs-6.5.2"
+      sources."request-2.87.0"
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."sshpk-1.14.2"
+      sources."tough-cookie-2.3.4"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."uuid-3.3.2"
+      sources."verror-1.10.0"
+      sources."wrappy-1.0.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Upload images to imgur.com";
+      homepage = https://github.com/kaimallea/node-imgur;
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "ionicons-~2.0.1" = nodeEnv.buildNodePackage {
+    name = "ionicons";
+    packageName = "ionicons";
+    version = "2.0.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/ionicons/-/ionicons-2.0.1.tgz";
+      sha1 = "ca398113293ea870244f538f0aabbd4b5b209a3e";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Ionicons - free and beautiful icons from the creators of Ionic Framework";
+      homepage = "https://github.com/driftyco/ionicons#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "jquery-^3.1.1" = nodeEnv.buildNodePackage {
+    name = "jquery";
+    packageName = "jquery";
+    version = "3.3.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz";
+      sha512 = "Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "JavaScript library for DOM operations";
+      homepage = https://jquery.com/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "jquery-mousewheel-^3.1.13" = nodeEnv.buildNodePackage {
+    name = "jquery-mousewheel";
+    packageName = "jquery-mousewheel";
+    version = "3.1.13";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/jquery-mousewheel/-/jquery-mousewheel-3.1.13.tgz";
+      sha1 = "06f0335f16e353a695e7206bf50503cb523a6ee5";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A jQuery plugin that adds cross-browser mouse wheel support.";
+      homepage = https://github.com/jquery/jquery-mousewheel;
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "jquery-ui-^1.12.1" = nodeEnv.buildNodePackage {
+    name = "jquery-ui";
+    packageName = "jquery-ui";
+    version = "1.12.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.12.1.tgz";
+      sha1 = "bcb4045c8dd0539c134bc1488cdd3e768a7a9e51";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library.";
+      homepage = http://jqueryui.com/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "js-cookie-^2.1.3" = nodeEnv.buildNodePackage {
+    name = "js-cookie";
+    packageName = "js-cookie";
+    version = "2.2.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.0.tgz";
+      sha1 = "1b2c279a6eece380a12168b92485265b35b1effb";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A simple, lightweight JavaScript API for handling cookies";
+      homepage = "https://github.com/js-cookie/js-cookie#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "js-sequence-diagrams-^1000000.0.6" = nodeEnv.buildNodePackage {
+    name = "js-sequence-diagrams";
+    packageName = "js-sequence-diagrams";
+    version = "1000000.0.6";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/js-sequence-diagrams/-/js-sequence-diagrams-1000000.0.6.tgz";
+      sha1 = "e95db01420479c5ccbc12046af1da42fde649e5c";
+    };
+    dependencies = [
+      sources."eve-git://github.com/adobe-webplatform/eve.git#eef80ed"
+      sources."raphael-2.1.4"
+      sources."underscore-1.4.4"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Fucks NPM and draws simple SVG sequence diagrams from textual representation of the diagram";
+      homepage = "https://github.com/Moeditor/js-sequence-diagrams#readme";
+      license = "BSD-2-Clause";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "js-url-^2.3.0" = nodeEnv.buildNodePackage {
+    name = "js-url";
+    packageName = "js-url";
+    version = "2.3.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/js-url/-/js-url-2.3.0.tgz";
+      sha1 = "e0c02b622e89710749399f440d49056e72f70078";
+    };
+    dependencies = [
+      sources."ajv-5.5.2"
+      sources."ansi-regex-2.1.1"
+      sources."ansi-styles-2.2.1"
+      sources."asn1-0.2.4"
+      sources."assert-plus-1.0.0"
+      sources."async-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.7.0"
+      sources."balanced-match-1.0.0"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."brace-expansion-1.1.11"
+      sources."buffer-from-1.1.1"
+      sources."caseless-0.12.0"
+      sources."chalk-1.1.3"
+      sources."cli-1.0.1"
+      sources."co-4.6.0"
+      sources."colors-1.0.3"
+      sources."combined-stream-1.0.6"
+      sources."commander-2.16.0"
+      sources."concat-map-0.0.1"
+      sources."concat-stream-1.6.2"
+      sources."console-browserify-1.1.0"
+      sources."core-util-is-1.0.2"
+      sources."cycle-1.0.3"
+      sources."dashdash-1.14.1"
+      sources."date-now-0.1.4"
+      sources."debug-2.6.9"
+      sources."delayed-stream-1.0.0"
+      (sources."dom-serializer-0.1.0" // {
+        dependencies = [
+          sources."domelementtype-1.1.3"
+          sources."entities-1.1.1"
+        ];
+      })
+      sources."domelementtype-1.3.0"
+      sources."domhandler-2.3.0"
+      sources."domutils-1.5.1"
+      sources."duplexer-0.1.1"
+      sources."ecc-jsbn-0.1.2"
+      sources."entities-1.0.0"
+      sources."es6-promise-4.2.4"
+      sources."escape-string-regexp-1.0.5"
+      sources."eventemitter2-0.4.14"
+      sources."exit-0.1.2"
+      sources."extend-3.0.2"
+      sources."extract-zip-1.6.7"
+      sources."extsprintf-1.3.0"
+      sources."eyes-0.1.8"
+      sources."fast-deep-equal-1.1.0"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."fd-slicer-1.0.1"
+      sources."figures-1.7.0"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.2"
+      sources."fs-extra-1.0.0"
+      sources."fs.realpath-1.0.0"
+      sources."getpass-0.1.7"
+      sources."glob-7.1.2"
+      sources."graceful-fs-4.1.11"
+      sources."grunt-contrib-jshint-1.1.0"
+      sources."grunt-contrib-qunit-2.0.0"
+      sources."grunt-contrib-uglify-3.4.0"
+      sources."grunt-lib-phantomjs-1.1.0"
+      sources."gzip-size-3.0.0"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.0.3"
+      sources."has-ansi-2.0.0"
+      sources."hasha-2.2.0"
+      sources."hooker-0.2.3"
+      (sources."htmlparser2-3.8.3" // {
+        dependencies = [
+          sources."isarray-0.0.1"
+          sources."readable-stream-1.1.14"
+          sources."string_decoder-0.10.31"
+        ];
+      })
+      sources."http-signature-1.2.0"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."is-stream-1.1.0"
+      sources."is-typedarray-1.0.0"
+      sources."isarray-1.0.0"
+      sources."isexe-2.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."jshint-2.9.6"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.3.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsonfile-2.4.0"
+      sources."jsprim-1.4.1"
+      sources."kew-0.7.0"
+      sources."klaw-1.3.1"
+      sources."lodash-4.17.10"
+      sources."maxmin-2.1.0"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."ms-2.0.0"
+      sources."number-is-nan-1.0.1"
+      sources."oauth-sign-0.8.2"
+      sources."object-assign-4.1.1"
+      sources."once-1.4.0"
+      sources."package-1.0.1"
+      sources."path-is-absolute-1.0.1"
+      sources."pend-1.2.0"
+      sources."performance-now-2.1.0"
+      sources."phantom-4.0.12"
+      sources."phantomjs-prebuilt-2.1.16"
+      sources."pinkie-2.0.4"
+      sources."pinkie-promise-2.0.1"
+      sources."pretty-bytes-3.0.1"
+      sources."process-nextick-args-2.0.0"
+      sources."progress-1.1.8"
+      sources."punycode-1.4.1"
+      sources."qs-6.5.2"
+      sources."readable-stream-2.3.6"
+      sources."request-2.87.0"
+      sources."request-progress-2.0.1"
+      sources."rimraf-2.6.2"
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."semver-5.5.0"
+      sources."shelljs-0.3.0"
+      sources."source-map-0.6.1"
+      sources."split-1.0.1"
+      sources."sshpk-1.14.2"
+      sources."stack-trace-0.0.10"
+      sources."string_decoder-1.1.1"
+      sources."strip-ansi-3.0.1"
+      sources."strip-json-comments-1.0.4"
+      sources."supports-color-2.0.0"
+      sources."temporary-0.0.8"
+      sources."throttleit-1.0.0"
+      sources."through-2.3.8"
+      sources."tough-cookie-2.3.4"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."typedarray-0.0.6"
+      sources."uglify-js-3.4.6"
+      sources."unicode-5.2.0-0.7.5"
+      sources."uri-path-1.0.0"
+      sources."util-deprecate-1.0.2"
+      sources."uuid-3.3.2"
+      sources."verror-1.10.0"
+      sources."which-1.3.1"
+      sources."winston-2.4.3"
+      sources."wrappy-1.0.2"
+      sources."yauzl-2.4.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A simple, lightweight url parser for JavaScript (~1.7 Kb minified, ~0.7Kb gzipped).";
+      homepage = https://github.com/WillZWL/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "js-yaml-^3.7.0" = nodeEnv.buildNodePackage {
+    name = "js-yaml";
+    packageName = "js-yaml";
+    version = "3.12.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz";
+      sha512 = "PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==";
+    };
+    dependencies = [
+      sources."argparse-1.0.10"
+      sources."esprima-4.0.1"
+      sources."sprintf-js-1.0.3"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "YAML 1.2 parser and serializer";
+      homepage = https://github.com/nodeca/js-yaml;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "jsdom-nogyp-^0.8.3" = nodeEnv.buildNodePackage {
+    name = "jsdom-nogyp";
+    packageName = "jsdom-nogyp";
+    version = "0.8.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/jsdom-nogyp/-/jsdom-nogyp-0.8.3.tgz";
+      sha1 = "924b3f03cfe487dfcdf6375e6324252ceb80d0cc";
+    };
+    dependencies = [
+      sources."ajv-5.5.2"
+      sources."asn1-0.2.4"
+      sources."assert-plus-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.7.0"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."caseless-0.12.0"
+      sources."co-4.6.0"
+      sources."combined-stream-1.0.6"
+      sources."core-util-is-1.0.2"
+      sources."cssom-0.2.5"
+      (sources."cssstyle-0.2.37" // {
+        dependencies = [
+          sources."cssom-0.3.4"
+        ];
+      })
+      sources."dashdash-1.14.1"
+      sources."delayed-stream-1.0.0"
+      (sources."dom-serializer-0.1.0" // {
+        dependencies = [
+          sources."domelementtype-1.1.3"
+        ];
+      })
+      sources."domelementtype-1.3.0"
+      sources."domhandler-2.4.2"
+      sources."domutils-1.7.0"
+      sources."ecc-jsbn-0.1.2"
+      sources."entities-1.1.1"
+      sources."extend-3.0.2"
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-1.1.0"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.2"
+      sources."getpass-0.1.7"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.0.3"
+      sources."htmlparser2-3.9.2"
+      sources."http-signature-1.2.0"
+      sources."inherits-2.0.3"
+      sources."is-typedarray-1.0.0"
+      sources."isarray-1.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.3.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsprim-1.4.1"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."nwmatcher-1.3.9"
+      sources."oauth-sign-0.8.2"
+      sources."performance-now-2.1.0"
+      sources."process-nextick-args-2.0.0"
+      sources."punycode-1.4.1"
+      sources."qs-6.5.2"
+      sources."readable-stream-2.3.6"
+      sources."request-2.87.0"
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."sshpk-1.14.2"
+      sources."string_decoder-1.1.1"
+      sources."tough-cookie-2.3.4"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."util-deprecate-1.0.2"
+      sources."uuid-3.3.2"
+      sources."verror-1.10.0"
+      sources."xmlhttprequest-1.8.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A JavaScript implementation of the W3C DOM, forked from jsdom, remove dependencies to contextify and node-gyp";
+      license = {
+        type = "MIT";
+        url = "http://github.com/tmpvar/jsdom/blob/master/LICENSE.txt";
+      };
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "keymaster-^1.6.2" = nodeEnv.buildNodePackage {
+    name = "keymaster";
+    packageName = "keymaster";
+    version = "1.6.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/keymaster/-/keymaster-1.6.2.tgz";
+      sha1 = "e1ae54d0ea9488f9f60b66b668f02e9a1946c6eb";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "library for defining and dispatching keyboard shortcuts";
+      homepage = https://github.com/madrobby/keymaster;
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "list.js-^1.5.0" = nodeEnv.buildNodePackage {
+    name = "list.js";
+    packageName = "list.js";
+    version = "1.5.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/list.js/-/list.js-1.5.0.tgz";
+      sha1 = "a4cbfc8281ddefc02fdb2d30c8748bfae25fbcda";
+    };
+    dependencies = [
+      sources."string-natural-compare-2.0.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "The perfect library for lists. Supports search, sort, filters and flexibility. Built to be invisible and work on existing HTML";
+      homepage = http://listjs.com/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "lodash-^4.17.4" = nodeEnv.buildNodePackage {
+    name = "lodash";
+    packageName = "lodash";
+    version = "4.17.10";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz";
+      sha512 = "UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Lodash modular utilities.";
+      homepage = https://lodash.com/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "lz-string-1.4.4" = nodeEnv.buildNodePackage {
+    name = "lz-string";
+    packageName = "lz-string";
+    version = "1.4.4";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz";
+      sha1 = "c0d8eaf36059f705796e1e344811cf4c498d3a26";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "LZ-based compression algorithm";
+      homepage = http://pieroxy.net/blog/pages/lz-string/index.html;
+      license = "WTFPL";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "markdown-it-^8.2.2" = nodeEnv.buildNodePackage {
+    name = "markdown-it";
+    packageName = "markdown-it";
+    version = "8.4.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz";
+      sha512 = "GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==";
+    };
+    dependencies = [
+      sources."argparse-1.0.10"
+      sources."entities-1.1.1"
+      sources."linkify-it-2.0.3"
+      sources."mdurl-1.0.1"
+      sources."sprintf-js-1.0.3"
+      sources."uc.micro-1.0.5"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Markdown-it - modern pluggable markdown parser.";
+      homepage = "https://github.com/markdown-it/markdown-it#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "markdown-it-abbr-^1.0.4" = nodeEnv.buildNodePackage {
+    name = "markdown-it-abbr";
+    packageName = "markdown-it-abbr";
+    version = "1.0.4";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/markdown-it-abbr/-/markdown-it-abbr-1.0.4.tgz";
+      sha1 = "d66b5364521cbb3dd8aa59dadfba2fb6865c8fd8";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "<abbr> tag for markdown-it markdown parser.";
+      homepage = https://github.com/markdown-it/markdown-it-abbr;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "markdown-it-container-^2.0.0" = nodeEnv.buildNodePackage {
+    name = "markdown-it-container";
+    packageName = "markdown-it-container";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-2.0.0.tgz";
+      sha1 = "0019b43fd02eefece2f1960a2895fba81a404695";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Plugin to create block-level custom containers for markdown-it markdown parser";
+      homepage = "https://github.com/markdown-it/markdown-it-container#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "markdown-it-deflist-^2.0.1" = nodeEnv.buildNodePackage {
+    name = "markdown-it-deflist";
+    packageName = "markdown-it-deflist";
+    version = "2.0.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/markdown-it-deflist/-/markdown-it-deflist-2.0.3.tgz";
+      sha512 = "/BNZ8ksW42bflm1qQLnRI09oqU2847Z7MVavrR0MORyKLtiUYOMpwtlAfMSZAQU9UCvaUZMpgVAqoS3vpToJxw==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "<dl> tag for markdown-it markdown parser.";
+      homepage = https://github.com/markdown-it/markdown-it-deflist;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "markdown-it-emoji-^1.3.0" = nodeEnv.buildNodePackage {
+    name = "markdown-it-emoji";
+    packageName = "markdown-it-emoji";
+    version = "1.4.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz";
+      sha1 = "9bee0e9a990a963ba96df6980c4fddb05dfb4dcc";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Emoji plugin for markdown-it markdown parser.";
+      homepage = https://github.com/markdown-it/markdown-it-emoji;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "markdown-it-footnote-^3.0.1" = nodeEnv.buildNodePackage {
+    name = "markdown-it-footnote";
+    packageName = "markdown-it-footnote";
+    version = "3.0.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/markdown-it-footnote/-/markdown-it-footnote-3.0.1.tgz";
+      sha1 = "7f3730747cacc86e2fe0bf8a17a710f34791517a";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Footnotes for markdown-it markdown parser.";
+      homepage = "https://github.com/markdown-it/markdown-it-footnote#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "markdown-it-imsize-^2.0.1" = nodeEnv.buildNodePackage {
+    name = "markdown-it-imsize";
+    packageName = "markdown-it-imsize";
+    version = "2.0.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/markdown-it-imsize/-/markdown-it-imsize-2.0.1.tgz";
+      sha1 = "cca0427905d05338a247cb9ca9d968c5cddd5170";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Markdown-it plugin to specify image size";
+      homepage = https://github.com/tatsy/markdown-it-imsize;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "markdown-it-ins-^2.0.0" = nodeEnv.buildNodePackage {
+    name = "markdown-it-ins";
+    packageName = "markdown-it-ins";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/markdown-it-ins/-/markdown-it-ins-2.0.0.tgz";
+      sha1 = "a5aa6a30f1e2f71e9497567cfdff40f1fde67483";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "<ins> tag for markdown-it markdown parser.";
+      homepage = https://github.com/markdown-it/markdown-it-ins;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "markdown-it-mark-^2.0.0" = nodeEnv.buildNodePackage {
+    name = "markdown-it-mark";
+    packageName = "markdown-it-mark";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/markdown-it-mark/-/markdown-it-mark-2.0.0.tgz";
+      sha1 = "46a1aa947105aed8188978e0a016179e404f42c7";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "<mark> tag for markdown-it markdown parser.";
+      homepage = https://github.com/markdown-it/markdown-it-mark;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "markdown-it-mathjax-^2.0.0" = nodeEnv.buildNodePackage {
+    name = "markdown-it-mathjax";
+    packageName = "markdown-it-mathjax";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/markdown-it-mathjax/-/markdown-it-mathjax-2.0.0.tgz";
+      sha1 = "ae2b4f4c5c719a03f9e475c664f7b2685231d9e9";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "[![Build Status](https://img.shields.io/travis/classeur/markdown-it-mathjax/master.svg?style=flat)](https://travis-ci.org/classeur/markdown-it-mathjax) [![NPM version](https://img.shields.io/npm/v/markdown-it-mathjax.svg?style=flat)](https://www.npmjs.org";
+      homepage = "https://github.com/classeur/markdown-it-mathjax#readme";
+      license = "ISC";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "markdown-it-regexp-^0.4.0" = nodeEnv.buildNodePackage {
+    name = "markdown-it-regexp";
+    packageName = "markdown-it-regexp";
+    version = "0.4.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/markdown-it-regexp/-/markdown-it-regexp-0.4.0.tgz";
+      sha1 = "d64d713eecec55ce4cfdeb321750ecc099e2c2dc";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "plugin that makes regexp replacement simple";
+      homepage = https://github.com/rlidwka/markdown-it-regexp;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "markdown-it-sub-^1.0.0" = nodeEnv.buildNodePackage {
+    name = "markdown-it-sub";
+    packageName = "markdown-it-sub";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/markdown-it-sub/-/markdown-it-sub-1.0.0.tgz";
+      sha1 = "375fd6026eae7ddcb012497f6411195ea1e3afe8";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "<sub> tag for markdown-it markdown parser.";
+      homepage = https://github.com/markdown-it/markdown-it-sub;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "markdown-it-sup-^1.0.0" = nodeEnv.buildNodePackage {
+    name = "markdown-it-sup";
+    packageName = "markdown-it-sup";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/markdown-it-sup/-/markdown-it-sup-1.0.0.tgz";
+      sha1 = "cb9c9ff91a5255ac08f3fd3d63286e15df0a1fc3";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "<sup> tag for markdown-it markdown parser.";
+      homepage = https://github.com/markdown-it/markdown-it-sup;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "markdown-pdf-^8.0.0" = nodeEnv.buildNodePackage {
+    name = "markdown-pdf";
+    packageName = "markdown-pdf";
+    version = "8.1.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/markdown-pdf/-/markdown-pdf-8.1.1.tgz";
+      sha512 = "lpRyiNptdwArH6bG6Y8X13G5Qr/usTTDXxTp7zjhwxJ+cQO7Z6A1T265ZiN6PVDLzRNxxtcquQCIOpTC0U1NFg==";
+    };
+    dependencies = [
+      sources."ajv-5.5.2"
+      sources."argparse-0.1.16"
+      sources."asn1-0.2.4"
+      sources."assert-plus-1.0.0"
+      sources."async-1.5.2"
+      sources."asynckit-0.4.0"
+      sources."autolinker-0.15.3"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.7.0"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."buffer-from-1.1.1"
+      sources."caseless-0.12.0"
+      sources."co-4.6.0"
+      sources."combined-stream-1.0.6"
+      sources."commander-2.16.0"
+      sources."concat-stream-1.6.2"
+      sources."core-util-is-1.0.2"
+      sources."dashdash-1.14.1"
+      sources."debug-2.6.9"
+      sources."delayed-stream-1.0.0"
+      sources."duplexer-0.1.1"
+      sources."ecc-jsbn-0.1.2"
+      sources."es6-promise-4.2.4"
+      sources."extend-3.0.2"
+      sources."extract-zip-1.6.7"
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-1.1.0"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."fd-slicer-1.0.1"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.2"
+      sources."fs-extra-1.0.0"
+      sources."getpass-0.1.7"
+      sources."graceful-fs-4.1.11"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.0.3"
+      sources."hasha-2.2.0"
+      sources."highlight.js-9.12.0"
+      sources."http-signature-1.2.0"
+      sources."inherits-2.0.3"
+      sources."is-stream-1.1.0"
+      sources."is-typedarray-1.0.0"
+      sources."isarray-1.0.0"
+      sources."isexe-2.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.3.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsonfile-2.4.0"
+      sources."jsprim-1.4.1"
+      sources."kew-0.7.0"
+      sources."klaw-1.3.1"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."ms-2.0.0"
+      sources."oauth-sign-0.8.2"
+      sources."os-tmpdir-1.0.2"
+      sources."pend-1.2.0"
+      sources."performance-now-2.1.0"
+      sources."phantomjs-prebuilt-2.1.16"
+      sources."pinkie-2.0.4"
+      sources."pinkie-promise-2.0.1"
+      sources."process-nextick-args-2.0.0"
+      sources."progress-1.1.8"
+      sources."punycode-1.4.1"
+      sources."qs-6.5.2"
+      sources."readable-stream-2.3.6"
+      sources."remarkable-1.7.1"
+      sources."request-2.87.0"
+      sources."request-progress-2.0.1"
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."series-stream-1.0.1"
+      sources."sshpk-1.14.2"
+      sources."stream-from-to-1.4.3"
+      sources."string_decoder-1.1.1"
+      sources."throttleit-1.0.0"
+      sources."through2-2.0.3"
+      sources."tmp-0.0.33"
+      sources."tough-cookie-2.3.4"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."typedarray-0.0.6"
+      sources."underscore-1.7.0"
+      sources."underscore.string-2.4.0"
+      sources."util-deprecate-1.0.2"
+      sources."uuid-3.3.2"
+      sources."verror-1.10.0"
+      sources."which-1.3.1"
+      sources."xtend-4.0.1"
+      sources."yauzl-2.4.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Markdown to PDF converter";
+      homepage = https://github.com/alanshaw/markdown-pdf;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "mathjax-~2.7.0" = nodeEnv.buildNodePackage {
+    name = "mathjax";
+    packageName = "mathjax";
+    version = "2.7.5";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/mathjax/-/mathjax-2.7.5.tgz";
+      sha512 = "OzsJNitEHAJB3y4IIlPCAvS0yoXwYjlo2Y4kmm9KQzyIBZt2d8yKRalby3uTRNN4fZQiGL2iMXjpdP1u2Rq2DQ==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Beautiful math in all browsers. MathJax is an open-source JavaScript display engine for LaTeX, MathML, and AsciiMath notation that works in all browsers.";
+      homepage = "https://github.com/mathjax/MathJax#readme";
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "mermaid-~7.1.0" = nodeEnv.buildNodePackage {
+    name = "mermaid";
+    packageName = "mermaid";
+    version = "7.1.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/mermaid/-/mermaid-7.1.2.tgz";
+      sha512 = "bDLu3fQuf3/R0fNkNzB0GTaF7+6SxnZpfTs9DVQF1ougsuP23MBzvEIGfL0ML8zeyg7+J2D+0AaoLVhskW5ulw==";
+    };
+    dependencies = [
+      sources."d3-3.5.17"
+      sources."dagre-d3-renderer-0.4.26"
+      sources."dagre-layout-0.8.8"
+      sources."graphlib-2.1.5"
+      sources."graphlibrary-2.2.0"
+      sources."he-1.1.1"
+      sources."lodash-4.17.10"
+      sources."moment-2.22.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.";
+      homepage = "https://github.com/knsv/mermaid#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "mattermost-^3.4.0" = nodeEnv.buildNodePackage {
+    name = "mattermost";
+    packageName = "mattermost";
+    version = "3.4.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/mattermost/-/mattermost-3.4.0.tgz";
+      sha1 = "7e4958e1bc96c7da7bc5f179dd2c6ae5035a8857";
+    };
+    dependencies = [
+      sources."async-1.5.2"
+      sources."combined-stream-1.0.6"
+      sources."component-emitter-1.2.1"
+      sources."cookiejar-2.0.6"
+      sources."core-util-is-1.0.2"
+      sources."debug-2.6.9"
+      sources."delayed-stream-1.0.0"
+      sources."extend-3.0.0"
+      sources."form-data-1.0.0-rc3"
+      sources."formidable-1.0.17"
+      sources."inherits-2.0.3"
+      sources."isarray-0.0.1"
+      sources."methods-1.1.2"
+      sources."mime-1.3.4"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."ms-2.0.0"
+      sources."qs-2.3.3"
+      sources."readable-stream-1.0.27-1"
+      sources."reduce-component-1.0.1"
+      sources."string_decoder-0.10.31"
+      sources."superagent-1.8.3"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Javascript library for interacting with the Mattermost API";
+      homepage = https://www.mattermost.org/;
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "meta-marked-^0.4.2" = nodeEnv.buildNodePackage {
+    name = "meta-marked";
+    packageName = "meta-marked";
+    version = "0.4.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/meta-marked/-/meta-marked-0.4.2.tgz";
+      sha1 = "4a1fae344f53d7040aacabb723e2f432a37455f8";
+    };
+    dependencies = [
+      sources."argparse-1.0.10"
+      sources."esprima-2.7.3"
+      sources."js-yaml-3.5.5"
+      sources."marked-0.3.19"
+      sources."sprintf-js-1.0.3"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "The 'marked' markdown processor with a simple metadata system.";
+      homepage = "https://github.com/j201/meta-marked#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "method-override-^2.3.7" = nodeEnv.buildNodePackage {
+    name = "method-override";
+    packageName = "method-override";
+    version = "2.3.10";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/method-override/-/method-override-2.3.10.tgz";
+      sha1 = "e3daf8d5dee10dd2dce7d4ae88d62bbee77476b4";
+    };
+    dependencies = [
+      sources."debug-2.6.9"
+      sources."methods-1.1.2"
+      sources."ms-2.0.0"
+      sources."parseurl-1.3.2"
+      sources."vary-1.1.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Override HTTP verbs";
+      homepage = "https://github.com/expressjs/method-override#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "minimist-^1.2.0" = nodeEnv.buildNodePackage {
+    name = "minimist";
+    packageName = "minimist";
+    version = "1.2.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";
+      sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "parse argument options";
+      homepage = https://github.com/substack/minimist;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "minio-^6.0.0" = nodeEnv.buildNodePackage {
+    name = "minio";
+    packageName = "minio";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/minio/-/minio-6.0.0.tgz";
+      sha1 = "7e514d38eaacf2264556b232f1c2c063cc6ca7ba";
+    };
+    dependencies = [
+      sources."async-1.5.2"
+      sources."block-stream2-1.1.0"
+      sources."buffer-from-1.1.1"
+      sources."concat-stream-1.6.2"
+      sources."core-util-is-1.0.2"
+      sources."defined-1.0.0"
+      sources."es6-error-2.1.1"
+      sources."inherits-2.0.3"
+      sources."isarray-1.0.0"
+      sources."json-stream-1.0.0"
+      sources."lodash-4.17.10"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."process-nextick-args-2.0.0"
+      sources."querystring-0.2.0"
+      sources."readable-stream-2.3.6"
+      sources."safe-buffer-5.1.2"
+      sources."sax-1.2.4"
+      sources."source-map-0.5.7"
+      sources."source-map-support-0.4.18"
+      sources."string_decoder-1.1.1"
+      (sources."through2-0.6.5" // {
+        dependencies = [
+          sources."isarray-0.0.1"
+          sources."readable-stream-1.0.34"
+          sources."string_decoder-0.10.31"
+        ];
+      })
+      sources."typedarray-0.0.6"
+      sources."util-deprecate-1.0.2"
+      sources."uuid-3.3.2"
+      sources."xml-1.0.1"
+      sources."xml2js-0.4.19"
+      sources."xmlbuilder-9.0.7"
+      sources."xtend-4.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "S3 Compatible Cloud Storage client";
+      homepage = "https://github.com/minio/minio-js#readme";
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "moment-^2.17.1" = nodeEnv.buildNodePackage {
+    name = "moment";
+    packageName = "moment";
+    version = "2.22.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz";
+      sha1 = "3c257f9839fc0e93ff53149632239eb90783ff66";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Parse, validate, manipulate, and display dates";
+      homepage = http://momentjs.com/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "morgan-^1.7.0" = nodeEnv.buildNodePackage {
+    name = "morgan";
+    packageName = "morgan";
+    version = "1.9.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz";
+      sha1 = "d01fa6c65859b76fcf31b3cb53a3821a311d8051";
+    };
+    dependencies = [
+      sources."basic-auth-2.0.0"
+      sources."debug-2.6.9"
+      sources."depd-1.1.2"
+      sources."ee-first-1.1.1"
+      sources."ms-2.0.0"
+      sources."on-finished-2.3.0"
+      sources."on-headers-1.0.1"
+      sources."safe-buffer-5.1.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "HTTP request logger middleware for node.js";
+      homepage = "https://github.com/expressjs/morgan#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "mysql-^2.12.0" = nodeEnv.buildNodePackage {
+    name = "mysql";
+    packageName = "mysql";
+    version = "2.16.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/mysql/-/mysql-2.16.0.tgz";
+      sha512 = "dPbN2LHonQp7D5ja5DJXNbCLe/HRdu+f3v61aguzNRQIrmZLOeRoymBYyeThrR6ug+FqzDL95Gc9maqZUJS+Gw==";
+    };
+    dependencies = [
+      sources."bignumber.js-4.1.0"
+      sources."core-util-is-1.0.2"
+      sources."inherits-2.0.3"
+      sources."isarray-1.0.0"
+      sources."process-nextick-args-2.0.0"
+      sources."readable-stream-2.3.6"
+      sources."safe-buffer-5.1.2"
+      sources."sqlstring-2.3.1"
+      sources."string_decoder-1.1.1"
+      sources."util-deprecate-1.0.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A node.js driver for mysql. It is written in JavaScript, does not require compiling, and is 100% MIT licensed.";
+      homepage = "https://github.com/mysqljs/mysql#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "node-uuid-^1.4.7" = nodeEnv.buildNodePackage {
+    name = "node-uuid";
+    packageName = "node-uuid";
+    version = "1.4.8";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz";
+      sha1 = "b040eb0923968afabf8d32fb1f17f1167fdab907";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.";
+      homepage = https://github.com/broofa/node-uuid;
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "octicons-~4.4.0" = nodeEnv.buildNodePackage {
+    name = "octicons";
+    packageName = "octicons";
+    version = "4.4.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/octicons/-/octicons-4.4.0.tgz";
+      sha1 = "aca3bd32f5dc1d907a8d0de744f78e0c54e19446";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A scalable set of icons handcrafted with <3 by GitHub.";
+      homepage = https://octicons.github.com/;
+      license = "(OFL-1.1 OR MIT)";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "passport-^0.4.0" = nodeEnv.buildNodePackage {
+    name = "passport";
+    packageName = "passport";
+    version = "0.4.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz";
+      sha1 = "c5095691347bd5ad3b5e180238c3914d16f05811";
+    };
+    dependencies = [
+      sources."passport-strategy-1.0.0"
+      sources."pause-0.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Simple, unobtrusive authentication for Node.js.";
+      homepage = http://passportjs.org/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "passport-dropbox-oauth2-^1.1.0" = nodeEnv.buildNodePackage {
+    name = "passport-dropbox-oauth2";
+    packageName = "passport-dropbox-oauth2";
+    version = "1.1.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/passport-dropbox-oauth2/-/passport-dropbox-oauth2-1.1.0.tgz";
+      sha1 = "77c737636e4841944dfb82dfc42c3d8ab782c10e";
+    };
+    dependencies = [
+      sources."oauth-0.9.15"
+      sources."passport-oauth-1.0.0"
+      sources."passport-oauth1-1.1.0"
+      sources."passport-oauth2-1.4.0"
+      sources."passport-strategy-1.0.0"
+      sources."pkginfo-0.2.3"
+      sources."uid2-0.0.3"
+      sources."utils-merge-1.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Dropbox OAuth 2.0 authentication strategy for Passport.";
+      homepage = "https://github.com/florianheinemann/passport-dropbox-oauth2#readme";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "passport-facebook-^2.1.1" = nodeEnv.buildNodePackage {
+    name = "passport-facebook";
+    packageName = "passport-facebook";
+    version = "2.1.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/passport-facebook/-/passport-facebook-2.1.1.tgz";
+      sha1 = "c39d0b52ae4d59163245a4e21a7b9b6321303311";
+    };
+    dependencies = [
+      sources."oauth-0.9.15"
+      sources."passport-oauth2-1.4.0"
+      sources."passport-strategy-1.0.0"
+      sources."uid2-0.0.3"
+      sources."utils-merge-1.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Facebook authentication strategy for Passport.";
+      homepage = "https://github.com/jaredhanson/passport-facebook#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "passport-github-^1.1.0" = nodeEnv.buildNodePackage {
+    name = "passport-github";
+    packageName = "passport-github";
+    version = "1.1.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/passport-github/-/passport-github-1.1.0.tgz";
+      sha1 = "8ce1e3fcd61ad7578eb1df595839e4aea12355d4";
+    };
+    dependencies = [
+      sources."oauth-0.9.15"
+      sources."passport-oauth2-1.4.0"
+      sources."passport-strategy-1.0.0"
+      sources."uid2-0.0.3"
+      sources."utils-merge-1.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "GitHub authentication strategy for Passport.";
+      homepage = "https://github.com/jaredhanson/passport-github#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "passport-gitlab2-^4.0.0" = nodeEnv.buildNodePackage {
+    name = "passport-gitlab2";
+    packageName = "passport-gitlab2";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/passport-gitlab2/-/passport-gitlab2-4.0.0.tgz";
+      sha512 = "C/8/L8piHwv57J6fY/MzsEJc8yCkgsyBSzMWxfTfEHRvCaTkD08vJ5b/txydKrWrRPl4MHuZfisFnKlZHmq4yw==";
+    };
+    dependencies = [
+      sources."oauth-0.9.15"
+      sources."passport-oauth2-1.4.0"
+      sources."passport-strategy-1.0.0"
+      sources."uid2-0.0.3"
+      sources."utils-merge-1.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "GitLab authentication strategy for Passport.";
+      homepage = "https://github.com/fh1ch/passport-gitlab2#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "passport-google-oauth20-^1.0.0" = nodeEnv.buildNodePackage {
+    name = "passport-google-oauth20";
+    packageName = "passport-google-oauth20";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-1.0.0.tgz";
+      sha1 = "3b960e8a1d70d1dbe794615c827c68c40392a5d0";
+    };
+    dependencies = [
+      sources."oauth-0.9.15"
+      sources."passport-oauth2-1.4.0"
+      sources."passport-strategy-1.0.0"
+      sources."uid2-0.0.3"
+      sources."utils-merge-1.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Google (OAuth 2.0) authentication strategy for Passport.";
+      homepage = "https://github.com/jaredhanson/passport-google-oauth2#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "passport-ldapauth-^2.0.0" = nodeEnv.buildNodePackage {
+    name = "passport-ldapauth";
+    packageName = "passport-ldapauth";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/passport-ldapauth/-/passport-ldapauth-2.0.0.tgz";
+      sha1 = "42dff004417185d0a4d9f776a3eed8d4731fd689";
+    };
+    dependencies = [
+      sources."@types/body-parser-1.17.0"
+      sources."@types/connect-3.4.32"
+      sources."@types/events-1.2.0"
+      sources."@types/express-4.16.0"
+      sources."@types/express-serve-static-core-4.16.0"
+      sources."@types/ldapjs-1.0.3"
+      sources."@types/mime-2.0.0"
+      sources."@types/node-7.0.68"
+      sources."@types/passport-0.3.5"
+      sources."@types/range-parser-1.2.2"
+      sources."@types/serve-static-1.13.2"
+      sources."asn1-0.2.3"
+      sources."assert-plus-1.0.0"
+      sources."backoff-2.5.0"
+      sources."balanced-match-1.0.0"
+      sources."bcryptjs-2.4.3"
+      sources."brace-expansion-1.1.11"
+      sources."bunyan-1.8.12"
+      sources."concat-map-0.0.1"
+      sources."core-util-is-1.0.2"
+      sources."dashdash-1.14.1"
+      sources."dtrace-provider-0.8.7"
+      sources."extsprintf-1.2.0"
+      sources."glob-6.0.4"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      (sources."ldap-filter-0.2.2" // {
+        dependencies = [
+          sources."assert-plus-0.1.5"
+        ];
+      })
+      sources."ldapauth-fork-4.0.2"
+      sources."ldapjs-1.0.2"
+      sources."lru-cache-4.1.3"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."mkdirp-0.5.1"
+      sources."moment-2.22.2"
+      sources."mv-2.1.1"
+      sources."nan-2.10.0"
+      sources."ncp-2.0.0"
+      sources."once-1.4.0"
+      sources."passport-strategy-1.0.0"
+      sources."path-is-absolute-1.0.1"
+      sources."precond-0.2.3"
+      sources."pseudomap-1.0.2"
+      sources."rimraf-2.4.5"
+      sources."safe-json-stringify-1.2.0"
+      (sources."vasync-1.6.4" // {
+        dependencies = [
+          sources."verror-1.6.0"
+        ];
+      })
+      sources."verror-1.10.0"
+      sources."wrappy-1.0.2"
+      sources."yallist-2.1.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "LDAP authentication strategy for Passport";
+      homepage = "https://github.com/vesse/passport-ldapauth#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "passport-local-^1.0.0" = nodeEnv.buildNodePackage {
+    name = "passport-local";
+    packageName = "passport-local";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz";
+      sha1 = "1fe63268c92e75606626437e3b906662c15ba6ee";
+    };
+    dependencies = [
+      sources."passport-strategy-1.0.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Local username and password authentication strategy for Passport.";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "passport-oauth2-^1.4.0" = nodeEnv.buildNodePackage {
+    name = "passport-oauth2";
+    packageName = "passport-oauth2";
+    version = "1.4.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.4.0.tgz";
+      sha1 = "f62f81583cbe12609be7ce6f160b9395a27b86ad";
+    };
+    dependencies = [
+      sources."oauth-0.9.15"
+      sources."passport-strategy-1.0.0"
+      sources."uid2-0.0.3"
+      sources."utils-merge-1.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "OAuth 2.0 authentication strategy for Passport.";
+      homepage = "https://github.com/jaredhanson/passport-oauth2#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "passport-twitter-^1.0.4" = nodeEnv.buildNodePackage {
+    name = "passport-twitter";
+    packageName = "passport-twitter";
+    version = "1.0.4";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/passport-twitter/-/passport-twitter-1.0.4.tgz";
+      sha1 = "01a799e1f760bf2de49f2ba5fba32282f18932d7";
+    };
+    dependencies = [
+      sources."oauth-0.9.15"
+      sources."passport-oauth1-1.1.0"
+      sources."passport-strategy-1.0.0"
+      sources."utils-merge-1.0.1"
+      sources."xmldom-0.1.27"
+      sources."xtraverse-0.1.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Twitter authentication strategy for Passport.";
+      homepage = "https://github.com/jaredhanson/passport-twitter#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "passport-saml-^0.31.0" = nodeEnv.buildNodePackage {
+    name = "passport-saml";
+    packageName = "passport-saml";
+    version = "0.31.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/passport-saml/-/passport-saml-0.31.0.tgz";
+      sha1 = "e4d654cab30f018bfd39056efe7bcfa770aab463";
+    };
+    dependencies = [
+      sources."async-2.6.1"
+      sources."ejs-2.6.1"
+      sources."lodash-4.17.10"
+      sources."node-forge-0.7.5"
+      sources."passport-strategy-1.0.0"
+      sources."q-1.5.1"
+      sources."sax-1.2.4"
+      (sources."xml-crypto-0.10.1" // {
+        dependencies = [
+          sources."xmldom-0.1.19"
+        ];
+      })
+      sources."xml-encryption-0.11.2"
+      sources."xml2js-0.4.19"
+      sources."xmlbuilder-9.0.7"
+      sources."xmldom-0.1.27"
+      sources."xpath-0.0.27"
+      sources."xpath.js-1.1.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "SAML 2.0 authentication strategy for Passport";
+      homepage = "https://github.com/bergie/passport-saml#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "passport.socketio-^3.7.0" = nodeEnv.buildNodePackage {
+    name = "passport.socketio";
+    packageName = "passport.socketio";
+    version = "3.7.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/passport.socketio/-/passport.socketio-3.7.0.tgz";
+      sha1 = "2ee5fafe9695d4281c8cddd3fe975ecd18e6726e";
+    };
+    dependencies = [
+      sources."xtend-4.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "access passport.js authenticated user information from socket.io";
+      homepage = "https://github.com/jfromaniello/passport.socketio#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "pdfobject-^2.0.201604172" = nodeEnv.buildNodePackage {
+    name = "pdfobject";
+    packageName = "pdfobject";
+    version = "2.0.201604172";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/pdfobject/-/pdfobject-2.0.201604172.tgz";
+      sha1 = "112edf93b98be121a5e780b06e7f5f78ad31ab3f";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "An open-source standards-friendly JavaScript utility for embedding PDF files into HTML documents";
+      homepage = "https://github.com/pipwerks/PDFObject#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "pg-^6.1.2" = nodeEnv.buildNodePackage {
+    name = "pg";
+    packageName = "pg";
+    version = "6.4.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/pg/-/pg-6.4.2.tgz";
+      sha1 = "c364011060eac7a507a2ae063eb857ece910e27f";
+    };
+    dependencies = [
+      sources."buffer-writer-1.0.1"
+      sources."generic-pool-2.4.3"
+      sources."js-string-escape-1.0.1"
+      sources."object-assign-4.1.0"
+      sources."packet-reader-0.3.1"
+      sources."pg-connection-string-0.1.3"
+      sources."pg-int8-1.0.1"
+      sources."pg-pool-1.8.0"
+      sources."pg-types-1.13.0"
+      sources."pgpass-1.0.2"
+      sources."postgres-array-1.0.2"
+      sources."postgres-bytea-1.0.0"
+      sources."postgres-date-1.0.3"
+      sources."postgres-interval-1.1.2"
+      sources."semver-4.3.2"
+      sources."split-1.0.1"
+      sources."through-2.3.8"
+      sources."xtend-4.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "PostgreSQL client - pure javascript & libpq with the same API";
+      homepage = http://github.com/brianc/node-postgres;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "pg-hstore-^2.3.2" = nodeEnv.buildNodePackage {
+    name = "pg-hstore";
+    packageName = "pg-hstore";
+    version = "2.3.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/pg-hstore/-/pg-hstore-2.3.2.tgz";
+      sha1 = "f7ef053e7b9b892ae986af2f7cbe86432dfcf24f";
+    };
+    dependencies = [
+      sources."underscore-1.9.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "An module for serializing and deserializing JSON data in to hstore format";
+      homepage = https://github.com/scarney81/pg-hstore;
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "prismjs-^1.6.0" = nodeEnv.buildNodePackage {
+    name = "prismjs";
+    packageName = "prismjs";
+    version = "1.15.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/prismjs/-/prismjs-1.15.0.tgz";
+      sha512 = "Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA==";
+    };
+    dependencies = [
+      sources."clipboard-2.0.1"
+      sources."delegate-3.2.0"
+      sources."good-listener-1.2.2"
+      sources."select-1.1.2"
+      sources."tiny-emitter-2.0.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Lightweight, robust, elegant syntax highlighting. A spin-off project from Dabblet.";
+      homepage = "https://github.com/LeaVerou/prism#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "randomcolor-^0.5.3" = nodeEnv.buildNodePackage {
+    name = "randomcolor";
+    packageName = "randomcolor";
+    version = "0.5.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/randomcolor/-/randomcolor-0.5.3.tgz";
+      sha1 = "7f90f2f2a7f6d5a52232161eeaeeaea9ac3b5815";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A tiny script for generating attractive random colors";
+      homepage = https://randomcolor.llllll.li/;
+      license = "CC0";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "raphael-git+https://github.com/dmitrybaranovskiy/raphael" = nodeEnv.buildNodePackage {
+    name = "raphael";
+    packageName = "raphael";
+    version = "2.2.7";
+    src = fetchgit {
+      url = "https://github.com/dmitrybaranovskiy/raphael";
+      rev = "527c51b7b12f846f9ab0d5ddf14767912b569c7d";
+      sha256 = "a9c2dece0218d3c82ad624fd55d7f81b7696fd0415bc0f52429f2d09497b25d8";
+    };
+    dependencies = [
+      sources."eve-raphael-0.5.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "JavaScript Vector Library";
+      homepage = http://dmitrybaranovskiy.github.io/raphael/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "readline-sync-^1.4.7" = nodeEnv.buildNodePackage {
+    name = "readline-sync";
+    packageName = "readline-sync";
+    version = "1.4.9";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.9.tgz";
+      sha1 = "3eda8e65f23cd2a17e61301b1f0003396af5ecda";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Synchronous Readline for interactively running to have a conversation with the user via a console(TTY).";
+      homepage = https://github.com/anseki/readline-sync;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "request-^2.79.0" = nodeEnv.buildNodePackage {
+    name = "request";
+    packageName = "request";
+    version = "2.87.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/request/-/request-2.87.0.tgz";
+      sha512 = "fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==";
+    };
+    dependencies = [
+      sources."ajv-5.5.2"
+      sources."asn1-0.2.4"
+      sources."assert-plus-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.7.0"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."caseless-0.12.0"
+      sources."co-4.6.0"
+      sources."combined-stream-1.0.6"
+      sources."core-util-is-1.0.2"
+      sources."dashdash-1.14.1"
+      sources."delayed-stream-1.0.0"
+      sources."ecc-jsbn-0.1.2"
+      sources."extend-3.0.2"
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-1.1.0"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.2"
+      sources."getpass-0.1.7"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.0.3"
+      sources."http-signature-1.2.0"
+      sources."is-typedarray-1.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.3.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsprim-1.4.1"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."oauth-sign-0.8.2"
+      sources."performance-now-2.1.0"
+      sources."punycode-1.4.1"
+      sources."qs-6.5.2"
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."sshpk-1.14.2"
+      sources."tough-cookie-2.3.4"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."uuid-3.3.2"
+      sources."verror-1.10.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Simplified HTTP request client.";
+      homepage = "https://github.com/request/request#readme";
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "reveal.js-~3.6.0" = nodeEnv.buildNodePackage {
+    name = "reveal.js";
+    packageName = "reveal.js";
+    version = "3.6.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/reveal.js/-/reveal.js-3.6.0.tgz";
+      sha512 = "ZhXBWoDiaNySAJgs3XqmkHTmjR3Dkkhyy89VY8PLzXBDwNhP7ZEGtBT1H3xJRCEGOD4ScLJBbU75PRiPLQgWgw==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "The HTML Presentation Framework";
+      homepage = http://revealjs.com/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "scrypt-^6.0.3" = nodeEnv.buildNodePackage {
+    name = "scrypt";
+    packageName = "scrypt";
+    version = "6.0.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz";
+      sha1 = "04e014a5682b53fa50c2d5cce167d719c06d870d";
+    };
+    dependencies = [
+      sources."nan-2.10.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "The scrypt crypto library for NodeJS";
+      homepage = https://github.com/barrysteyn/node-scrypt;
+      license = "zlib";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "select2-^3.5.2-browserify" = nodeEnv.buildNodePackage {
+    name = "select2";
+    packageName = "select2";
+    version = "3.5.2-browserify";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/select2/-/select2-3.5.2-browserify.tgz";
+      sha1 = "dc4dafda38d67a734e8a97a46f0d3529ae05391d";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Browserify-ed version of Select2.";
+      homepage = http://ivaynberg.github.io/select2;
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "sequelize-^3.28.0" = nodeEnv.buildNodePackage {
+    name = "sequelize";
+    packageName = "sequelize";
+    version = "3.33.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/sequelize/-/sequelize-3.33.0.tgz";
+      sha1 = "b0eb12b87223aded10e50a9d78506e0dd42f9208";
+    };
+    dependencies = [
+      sources."@types/geojson-1.0.6"
+      sources."bluebird-3.5.1"
+      sources."debug-2.6.9"
+      sources."depd-1.1.2"
+      sources."dottie-1.1.1"
+      sources."generic-pool-2.4.2"
+      sources."inflection-1.12.0"
+      sources."lodash-4.17.10"
+      sources."moment-2.22.2"
+      sources."moment-timezone-0.5.21"
+      sources."ms-2.0.0"
+      sources."retry-as-promised-2.3.2"
+      sources."semver-5.5.0"
+      sources."shimmer-1.1.0"
+      sources."terraformer-1.0.9"
+      sources."terraformer-wkt-parser-1.2.0"
+      sources."toposort-class-1.0.1"
+      sources."uuid-3.3.2"
+      sources."validator-5.7.0"
+      sources."wkx-0.2.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Multi dialect ORM for Node.JS/io.js";
+      homepage = "https://github.com/sequelize/sequelize#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "sequelize-cli-^2.5.1" = nodeEnv.buildNodePackage {
+    name = "sequelize-cli";
+    packageName = "sequelize-cli";
+    version = "2.8.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/sequelize-cli/-/sequelize-cli-2.8.0.tgz";
+      sha1 = "4304cce60e499169603f838dedbab421c9849e74";
+    };
+    dependencies = [
+      sources."abbrev-1.1.1"
+      sources."ansi-gray-0.1.1"
+      sources."ansi-regex-2.1.1"
+      sources."ansi-styles-2.2.1"
+      sources."ansi-wrap-0.1.0"
+      sources."archy-1.0.0"
+      sources."arr-diff-2.0.0"
+      sources."arr-flatten-1.1.0"
+      sources."arr-union-3.1.0"
+      sources."array-differ-1.0.0"
+      sources."array-each-1.0.1"
+      sources."array-slice-1.1.0"
+      sources."array-uniq-1.0.3"
+      sources."array-unique-0.2.1"
+      sources."assign-symbols-1.0.0"
+      sources."atob-2.1.1"
+      sources."balanced-match-1.0.0"
+      (sources."base-0.11.2" // {
+        dependencies = [
+          sources."define-property-1.0.0"
+          sources."isobject-3.0.1"
+        ];
+      })
+      sources."beeper-1.1.1"
+      sources."bluebird-3.5.1"
+      sources."brace-expansion-1.1.11"
+      sources."braces-1.8.5"
+      sources."builtin-modules-1.1.1"
+      (sources."cache-base-1.0.1" // {
+        dependencies = [
+          sources."isobject-3.0.1"
+        ];
+      })
+      sources."camelcase-4.1.0"
+      sources."chalk-1.1.3"
+      (sources."class-utils-0.3.6" // {
+        dependencies = [
+          sources."define-property-0.2.5"
+          (sources."is-accessor-descriptor-0.1.6" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          (sources."is-data-descriptor-0.1.4" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          sources."is-descriptor-0.1.6"
+          sources."isobject-3.0.1"
+          sources."kind-of-5.1.0"
+        ];
+      })
+      sources."cli-color-1.2.0"
+      (sources."cliui-3.2.0" // {
+        dependencies = [
+          sources."string-width-1.0.2"
+        ];
+      })
+      sources."clone-1.0.4"
+      sources."clone-stats-0.0.1"
+      sources."code-point-at-1.1.0"
+      sources."collection-visit-1.0.0"
+      sources."color-support-1.1.3"
+      sources."commander-2.16.0"
+      sources."component-emitter-1.2.1"
+      sources."concat-map-0.0.1"
+      sources."config-chain-1.1.11"
+      sources."copy-descriptor-0.1.1"
+      sources."core-util-is-1.0.2"
+      (sources."cross-spawn-5.1.0" // {
+        dependencies = [
+          sources."lru-cache-4.1.3"
+        ];
+      })
+      sources."d-1.0.0"
+      sources."dateformat-2.2.0"
+      sources."debug-2.6.9"
+      sources."decamelize-1.2.0"
+      sources."decode-uri-component-0.2.0"
+      sources."defaults-1.0.3"
+      (sources."define-property-2.0.2" // {
+        dependencies = [
+          sources."isobject-3.0.1"
+        ];
+      })
+      sources."deprecated-0.0.1"
+      sources."detect-file-0.1.0"
+      sources."duplexer2-0.0.2"
+      (sources."editorconfig-0.13.3" // {
+        dependencies = [
+          sources."lru-cache-3.2.0"
+          sources."semver-5.5.0"
+        ];
+      })
+      sources."end-of-stream-0.1.5"
+      sources."error-ex-1.3.2"
+      sources."es5-ext-0.10.45"
+      sources."es6-iterator-2.0.3"
+      sources."es6-symbol-3.1.1"
+      sources."es6-weak-map-2.0.2"
+      sources."escape-string-regexp-1.0.5"
+      sources."event-emitter-0.3.5"
+      sources."execa-0.7.0"
+      sources."expand-brackets-0.1.5"
+      sources."expand-range-1.8.2"
+      sources."expand-tilde-1.2.2"
+      sources."extend-3.0.2"
+      (sources."extend-shallow-3.0.2" // {
+        dependencies = [
+          sources."is-extendable-1.0.1"
+        ];
+      })
+      sources."extglob-0.3.2"
+      sources."fancy-log-1.3.2"
+      sources."filename-regex-2.0.1"
+      sources."fill-range-2.2.4"
+      sources."find-index-0.1.1"
+      sources."find-up-2.1.0"
+      sources."findup-sync-1.0.0"
+      (sources."fined-1.1.0" // {
+        dependencies = [
+          sources."expand-tilde-2.0.2"
+        ];
+      })
+      sources."first-chunk-stream-1.0.0"
+      sources."flagged-respawn-1.0.0"
+      sources."for-in-1.0.2"
+      sources."for-own-0.1.5"
+      sources."fragment-cache-0.2.1"
+      sources."fs-exists-sync-0.1.0"
+      sources."fs-extra-4.0.3"
+      sources."gaze-0.5.2"
+      sources."get-caller-file-1.0.3"
+      sources."get-stream-3.0.0"
+      sources."get-value-2.0.6"
+      sources."glob-4.5.3"
+      sources."glob-base-0.3.0"
+      sources."glob-parent-2.0.0"
+      (sources."glob-stream-3.1.18" // {
+        dependencies = [
+          sources."isarray-0.0.1"
+          sources."readable-stream-1.0.34"
+          sources."through2-0.6.5"
+        ];
+      })
+      sources."glob-watcher-0.0.6"
+      sources."glob2base-0.0.12"
+      sources."global-modules-0.2.3"
+      sources."global-prefix-0.1.5"
+      (sources."globule-0.1.0" // {
+        dependencies = [
+          sources."glob-3.1.21"
+          sources."graceful-fs-1.2.3"
+          sources."inherits-1.0.2"
+          sources."lodash-1.0.2"
+          sources."minimatch-0.2.14"
+        ];
+      })
+      sources."glogg-1.0.1"
+      sources."graceful-fs-4.1.11"
+      sources."gulp-3.9.1"
+      sources."gulp-help-1.6.1"
+      sources."gulp-util-3.0.8"
+      sources."gulplog-1.0.0"
+      sources."has-ansi-2.0.0"
+      sources."has-gulplog-0.1.0"
+      (sources."has-value-1.0.0" // {
+        dependencies = [
+          sources."isobject-3.0.1"
+        ];
+      })
+      (sources."has-values-1.0.0" // {
+        dependencies = [
+          (sources."is-number-3.0.0" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          sources."kind-of-4.0.0"
+        ];
+      })
+      sources."homedir-polyfill-1.0.1"
+      sources."hosted-git-info-2.7.1"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."ini-1.3.5"
+      sources."interpret-1.1.0"
+      sources."invert-kv-1.0.0"
+      (sources."is-absolute-1.0.0" // {
+        dependencies = [
+          sources."is-windows-1.0.2"
+        ];
+      })
+      (sources."is-accessor-descriptor-1.0.0" // {
+        dependencies = [
+          sources."kind-of-6.0.2"
+        ];
+      })
+      sources."is-arrayish-0.2.1"
+      sources."is-buffer-1.1.6"
+      sources."is-builtin-module-1.0.0"
+      (sources."is-data-descriptor-1.0.0" // {
+        dependencies = [
+          sources."kind-of-6.0.2"
+        ];
+      })
+      (sources."is-descriptor-1.0.2" // {
+        dependencies = [
+          sources."kind-of-6.0.2"
+        ];
+      })
+      sources."is-dotfile-1.0.3"
+      sources."is-equal-shallow-0.1.3"
+      sources."is-extendable-0.1.1"
+      sources."is-extglob-1.0.0"
+      sources."is-fullwidth-code-point-1.0.0"
+      sources."is-glob-2.0.1"
+      sources."is-number-2.1.0"
+      (sources."is-plain-object-2.0.4" // {
+        dependencies = [
+          sources."isobject-3.0.1"
+        ];
+      })
+      sources."is-posix-bracket-0.1.1"
+      sources."is-primitive-2.0.0"
+      sources."is-promise-2.1.0"
+      sources."is-relative-1.0.0"
+      sources."is-stream-1.1.0"
+      sources."is-unc-path-1.0.0"
+      sources."is-utf8-0.2.1"
+      sources."is-windows-0.2.0"
+      sources."isarray-1.0.0"
+      sources."isexe-2.0.0"
+      sources."isobject-2.1.0"
+      sources."js-beautify-1.7.5"
+      sources."jsonfile-4.0.0"
+      sources."kind-of-3.2.2"
+      sources."lcid-1.0.0"
+      (sources."liftoff-2.5.0" // {
+        dependencies = [
+          sources."arr-diff-4.0.0"
+          sources."array-unique-0.3.2"
+          (sources."braces-2.3.2" // {
+            dependencies = [
+              sources."extend-shallow-2.0.1"
+            ];
+          })
+          sources."detect-file-1.0.0"
+          (sources."expand-brackets-2.1.4" // {
+            dependencies = [
+              sources."define-property-0.2.5"
+              sources."extend-shallow-2.0.1"
+            ];
+          })
+          sources."expand-tilde-2.0.2"
+          (sources."extglob-2.0.4" // {
+            dependencies = [
+              sources."define-property-1.0.0"
+              sources."extend-shallow-2.0.1"
+            ];
+          })
+          (sources."fill-range-4.0.0" // {
+            dependencies = [
+              sources."extend-shallow-2.0.1"
+            ];
+          })
+          sources."findup-sync-2.0.0"
+          sources."global-modules-1.0.0"
+          sources."global-prefix-1.0.2"
+          (sources."is-accessor-descriptor-0.1.6" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          (sources."is-data-descriptor-0.1.4" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          (sources."is-descriptor-0.1.6" // {
+            dependencies = [
+              sources."kind-of-5.1.0"
+            ];
+          })
+          sources."is-extglob-2.1.1"
+          sources."is-glob-3.1.0"
+          (sources."is-number-3.0.0" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          sources."is-windows-1.0.2"
+          sources."isobject-3.0.1"
+          sources."kind-of-6.0.2"
+          sources."micromatch-3.1.10"
+          sources."resolve-dir-1.0.1"
+        ];
+      })
+      (sources."load-json-file-2.0.0" // {
+        dependencies = [
+          sources."strip-bom-3.0.0"
+        ];
+      })
+      sources."locate-path-2.0.0"
+      sources."lodash-4.17.10"
+      sources."lodash._basecopy-3.0.1"
+      sources."lodash._basetostring-3.0.1"
+      sources."lodash._basevalues-3.0.0"
+      sources."lodash._getnative-3.9.1"
+      sources."lodash._isiterateecall-3.0.9"
+      sources."lodash._reescape-3.0.0"
+      sources."lodash._reevaluate-3.0.0"
+      sources."lodash._reinterpolate-3.0.0"
+      sources."lodash._root-3.0.1"
+      sources."lodash.escape-3.2.0"
+      sources."lodash.isarguments-3.1.0"
+      sources."lodash.isarray-3.0.4"
+      sources."lodash.keys-3.1.2"
+      sources."lodash.restparam-3.6.1"
+      sources."lodash.template-3.6.2"
+      sources."lodash.templatesettings-3.1.1"
+      sources."lru-cache-2.7.3"
+      sources."lru-queue-0.1.0"
+      (sources."make-iterator-1.0.1" // {
+        dependencies = [
+          sources."kind-of-6.0.2"
+        ];
+      })
+      sources."map-cache-0.2.2"
+      sources."map-visit-1.0.0"
+      sources."math-random-1.0.1"
+      sources."mem-1.1.0"
+      sources."memoizee-0.4.12"
+      sources."micromatch-2.3.11"
+      sources."mimic-fn-1.2.0"
+      sources."minimatch-2.0.10"
+      sources."minimist-1.2.0"
+      (sources."mixin-deep-1.3.1" // {
+        dependencies = [
+          sources."is-extendable-1.0.1"
+        ];
+      })
+      (sources."mkdirp-0.5.1" // {
+        dependencies = [
+          sources."minimist-0.0.8"
+        ];
+      })
+      sources."moment-2.22.2"
+      sources."ms-2.0.0"
+      sources."multipipe-0.1.2"
+      (sources."nanomatch-1.2.13" // {
+        dependencies = [
+          sources."arr-diff-4.0.0"
+          sources."array-unique-0.3.2"
+          sources."is-windows-1.0.2"
+          sources."kind-of-6.0.2"
+        ];
+      })
+      sources."natives-1.1.4"
+      sources."next-tick-1.0.0"
+      sources."nopt-3.0.6"
+      sources."normalize-package-data-2.4.0"
+      sources."normalize-path-2.1.1"
+      sources."npm-run-path-2.0.2"
+      sources."number-is-nan-1.0.1"
+      sources."object-assign-3.0.0"
+      (sources."object-copy-0.1.0" // {
+        dependencies = [
+          sources."define-property-0.2.5"
+          sources."is-accessor-descriptor-0.1.6"
+          sources."is-data-descriptor-0.1.4"
+          (sources."is-descriptor-0.1.6" // {
+            dependencies = [
+              sources."kind-of-5.1.0"
+            ];
+          })
+        ];
+      })
+      (sources."object-visit-1.0.1" // {
+        dependencies = [
+          sources."isobject-3.0.1"
+        ];
+      })
+      (sources."object.defaults-1.1.0" // {
+        dependencies = [
+          sources."for-own-1.0.0"
+          sources."isobject-3.0.1"
+        ];
+      })
+      (sources."object.map-1.0.1" // {
+        dependencies = [
+          sources."for-own-1.0.0"
+        ];
+      })
+      sources."object.omit-2.0.1"
+      (sources."object.pick-1.3.0" // {
+        dependencies = [
+          sources."isobject-3.0.1"
+        ];
+      })
+      sources."once-1.3.3"
+      sources."orchestrator-0.3.8"
+      sources."ordered-read-streams-0.1.0"
+      sources."os-homedir-1.0.2"
+      sources."os-locale-2.1.0"
+      sources."p-finally-1.0.0"
+      sources."p-limit-1.3.0"
+      sources."p-locate-2.0.0"
+      sources."p-try-1.0.0"
+      sources."parse-filepath-1.0.2"
+      sources."parse-glob-3.0.4"
+      sources."parse-json-2.2.0"
+      sources."parse-passwd-1.0.0"
+      sources."pascalcase-0.1.1"
+      sources."path-exists-3.0.0"
+      sources."path-key-2.0.1"
+      sources."path-parse-1.0.5"
+      sources."path-root-0.1.1"
+      sources."path-root-regex-0.1.2"
+      sources."path-type-2.0.0"
+      sources."pify-2.3.0"
+      sources."posix-character-classes-0.1.1"
+      sources."preserve-0.2.0"
+      sources."pretty-hrtime-1.0.3"
+      sources."process-nextick-args-2.0.0"
+      sources."proto-list-1.2.4"
+      sources."pseudomap-1.0.2"
+      (sources."randomatic-3.0.0" // {
+        dependencies = [
+          sources."is-number-4.0.0"
+          sources."kind-of-6.0.2"
+        ];
+      })
+      sources."read-pkg-2.0.0"
+      sources."read-pkg-up-2.0.0"
+      (sources."readable-stream-1.1.14" // {
+        dependencies = [
+          sources."isarray-0.0.1"
+        ];
+      })
+      sources."rechoir-0.6.2"
+      sources."redefine-0.2.1"
+      sources."regex-cache-0.4.4"
+      sources."regex-not-1.0.2"
+      sources."remove-trailing-separator-1.1.0"
+      sources."repeat-element-1.1.2"
+      sources."repeat-string-1.6.1"
+      sources."replace-ext-0.0.1"
+      sources."require-directory-2.1.1"
+      sources."require-main-filename-1.0.1"
+      sources."resolve-1.8.1"
+      sources."resolve-dir-0.1.1"
+      sources."resolve-url-0.2.1"
+      sources."ret-0.1.15"
+      sources."safe-buffer-5.1.2"
+      sources."safe-regex-1.1.0"
+      sources."semver-4.3.6"
+      sources."sequencify-0.0.7"
+      sources."set-blocking-2.0.0"
+      (sources."set-value-2.0.0" // {
+        dependencies = [
+          sources."extend-shallow-2.0.1"
+        ];
+      })
+      sources."shebang-command-1.2.0"
+      sources."shebang-regex-1.0.0"
+      sources."sigmund-1.0.1"
+      sources."signal-exit-3.0.2"
+      (sources."snapdragon-0.8.2" // {
+        dependencies = [
+          sources."define-property-0.2.5"
+          sources."extend-shallow-2.0.1"
+          (sources."is-accessor-descriptor-0.1.6" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          (sources."is-data-descriptor-0.1.4" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          sources."is-descriptor-0.1.6"
+          sources."kind-of-5.1.0"
+        ];
+      })
+      (sources."snapdragon-node-2.1.1" // {
+        dependencies = [
+          sources."define-property-1.0.0"
+          sources."isobject-3.0.1"
+        ];
+      })
+      sources."snapdragon-util-3.0.1"
+      sources."source-map-0.5.7"
+      sources."source-map-resolve-0.5.2"
+      sources."source-map-url-0.4.0"
+      sources."sparkles-1.0.1"
+      sources."spdx-correct-3.0.0"
+      sources."spdx-exceptions-2.1.0"
+      sources."spdx-expression-parse-3.0.0"
+      sources."spdx-license-ids-3.0.0"
+      sources."split-string-3.1.0"
+      (sources."static-extend-0.1.2" // {
+        dependencies = [
+          sources."define-property-0.2.5"
+          (sources."is-accessor-descriptor-0.1.6" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          (sources."is-data-descriptor-0.1.4" // {
+            dependencies = [
+              sources."kind-of-3.2.2"
+            ];
+          })
+          sources."is-descriptor-0.1.6"
+          sources."kind-of-5.1.0"
+        ];
+      })
+      sources."stream-consume-0.1.1"
+      (sources."string-width-2.1.1" // {
+        dependencies = [
+          sources."ansi-regex-3.0.0"
+          sources."is-fullwidth-code-point-2.0.0"
+          sources."strip-ansi-4.0.0"
+        ];
+      })
+      sources."string_decoder-0.10.31"
+      sources."strip-ansi-3.0.1"
+      sources."strip-bom-1.0.0"
+      sources."strip-eof-1.0.0"
+      sources."supports-color-2.0.0"
+      (sources."through2-2.0.3" // {
+        dependencies = [
+          sources."readable-stream-2.3.6"
+          sources."string_decoder-1.1.1"
+        ];
+      })
+      sources."tildify-1.2.0"
+      sources."time-stamp-1.1.0"
+      sources."timers-ext-0.1.5"
+      sources."to-object-path-0.3.0"
+      sources."to-regex-3.0.2"
+      (sources."to-regex-range-2.1.1" // {
+        dependencies = [
+          sources."is-number-3.0.0"
+        ];
+      })
+      sources."umzug-1.12.0"
+      sources."unc-path-regex-0.1.2"
+      (sources."union-value-1.0.0" // {
+        dependencies = [
+          sources."extend-shallow-2.0.1"
+          sources."set-value-0.4.3"
+        ];
+      })
+      sources."unique-stream-1.0.0"
+      sources."universalify-0.1.2"
+      (sources."unset-value-1.0.0" // {
+        dependencies = [
+          (sources."has-value-0.3.1" // {
+            dependencies = [
+              sources."isobject-2.1.0"
+            ];
+          })
+          sources."has-values-0.1.4"
+          sources."isobject-3.0.1"
+        ];
+      })
+      sources."urix-0.1.0"
+      sources."use-3.1.1"
+      sources."user-home-1.1.1"
+      sources."util-deprecate-1.0.2"
+      sources."v8flags-2.1.1"
+      sources."validate-npm-package-license-3.0.3"
+      sources."vinyl-0.5.3"
+      (sources."vinyl-fs-0.3.14" // {
+        dependencies = [
+          sources."clone-0.2.0"
+          sources."graceful-fs-3.0.11"
+          sources."isarray-0.0.1"
+          sources."readable-stream-1.0.34"
+          sources."through2-0.6.5"
+          sources."vinyl-0.4.6"
+        ];
+      })
+      sources."which-1.3.1"
+      sources."which-module-2.0.0"
+      (sources."wrap-ansi-2.1.0" // {
+        dependencies = [
+          sources."string-width-1.0.2"
+        ];
+      })
+      sources."wrappy-1.0.2"
+      sources."xtend-4.0.1"
+      sources."y18n-3.2.1"
+      sources."yallist-2.1.2"
+      sources."yargs-8.0.2"
+      sources."yargs-parser-7.0.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "The Sequelize CLI";
+      homepage = https://github.com/sequelize/cli;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "shortid-2.2.8" = nodeEnv.buildNodePackage {
+    name = "shortid";
+    packageName = "shortid";
+    version = "2.2.8";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/shortid/-/shortid-2.2.8.tgz";
+      sha1 = "033b117d6a2e975804f6f0969dbe7d3d0b355131";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Amazingly short non-sequential url-friendly unique id generator.";
+      homepage = https://github.com/dylang/shortid;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "socket.io-~2.0.4" = nodeEnv.buildNodePackage {
+    name = "socket.io";
+    packageName = "socket.io";
+    version = "2.0.4";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz";
+      sha1 = "c1a4590ceff87ecf13c72652f046f716b29e6014";
+    };
+    dependencies = [
+      sources."accepts-1.3.5"
+      sources."after-0.8.2"
+      sources."arraybuffer.slice-0.0.7"
+      sources."async-limiter-1.0.0"
+      sources."backo2-1.0.2"
+      sources."base64-arraybuffer-0.1.5"
+      sources."base64id-1.0.0"
+      sources."better-assert-1.0.2"
+      sources."blob-0.0.4"
+      sources."callsite-1.0.0"
+      sources."component-bind-1.0.0"
+      sources."component-emitter-1.2.1"
+      sources."component-inherit-0.0.3"
+      sources."cookie-0.3.1"
+      sources."debug-2.6.9"
+      (sources."engine.io-3.1.5" // {
+        dependencies = [
+          sources."debug-3.1.0"
+        ];
+      })
+      (sources."engine.io-client-3.1.6" // {
+        dependencies = [
+          sources."debug-3.1.0"
+        ];
+      })
+      sources."engine.io-parser-2.1.2"
+      sources."has-binary2-1.0.3"
+      sources."has-cors-1.1.0"
+      sources."indexof-0.0.1"
+      sources."isarray-2.0.1"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."ms-2.0.0"
+      sources."negotiator-0.6.1"
+      sources."object-component-0.0.3"
+      sources."parseqs-0.0.5"
+      sources."parseuri-0.0.5"
+      sources."safe-buffer-5.1.2"
+      sources."socket.io-adapter-1.1.1"
+      sources."socket.io-client-2.0.4"
+      (sources."socket.io-parser-3.1.3" // {
+        dependencies = [
+          sources."debug-3.1.0"
+        ];
+      })
+      sources."to-array-0.1.4"
+      sources."ultron-1.1.1"
+      sources."uws-9.14.0"
+      sources."ws-3.3.3"
+      sources."xmlhttprequest-ssl-1.5.5"
+      sources."yeast-0.1.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "node.js realtime framework server";
+      homepage = "https://github.com/socketio/socket.io#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "socket.io-client-~2.0.4" = nodeEnv.buildNodePackage {
+    name = "socket.io-client";
+    packageName = "socket.io-client";
+    version = "2.0.4";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz";
+      sha1 = "0918a552406dc5e540b380dcd97afc4a64332f8e";
+    };
+    dependencies = [
+      sources."after-0.8.2"
+      sources."arraybuffer.slice-0.0.7"
+      sources."async-limiter-1.0.0"
+      sources."backo2-1.0.2"
+      sources."base64-arraybuffer-0.1.5"
+      sources."better-assert-1.0.2"
+      sources."blob-0.0.4"
+      sources."callsite-1.0.0"
+      sources."component-bind-1.0.0"
+      sources."component-emitter-1.2.1"
+      sources."component-inherit-0.0.3"
+      sources."debug-2.6.9"
+      (sources."engine.io-client-3.1.6" // {
+        dependencies = [
+          sources."debug-3.1.0"
+        ];
+      })
+      sources."engine.io-parser-2.1.2"
+      sources."has-binary2-1.0.3"
+      sources."has-cors-1.1.0"
+      sources."indexof-0.0.1"
+      sources."isarray-2.0.1"
+      sources."ms-2.0.0"
+      sources."object-component-0.0.3"
+      sources."parseqs-0.0.5"
+      sources."parseuri-0.0.5"
+      sources."safe-buffer-5.1.2"
+      (sources."socket.io-parser-3.1.3" // {
+        dependencies = [
+          sources."debug-3.1.0"
+        ];
+      })
+      sources."to-array-0.1.4"
+      sources."ultron-1.1.1"
+      sources."ws-3.3.3"
+      sources."xmlhttprequest-ssl-1.5.5"
+      sources."yeast-0.1.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "[![Build Status](https://secure.travis-ci.org/socketio/socket.io-client.svg?branch=master)](http://travis-ci.org/socketio/socket.io-client) [![Dependency Status](https://david-dm.org/socketio/socket.io-client.svg)](https://david-dm.org/socketio/socket.io-";
+      homepage = "https://github.com/Automattic/socket.io-client#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "spin.js-^2.3.2" = nodeEnv.buildNodePackage {
+    name = "spin.js";
+    packageName = "spin.js";
+    version = "2.3.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/spin.js/-/spin.js-2.3.2.tgz";
+      sha1 = "6caa56d520673450fd5cfbc6971e6d0772c37a1a";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "An animated CSS3 loading spinner with VML fallback for IE.";
+      homepage = "https://github.com/fgnass/spin.js#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "sqlite3-^4.0.1" = nodeEnv.buildNodePackage {
+    name = "sqlite3";
+    packageName = "sqlite3";
+    version = "4.0.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.2.tgz";
+      sha512 = "51ferIRwYOhzUEtogqOa/y9supADlAht98bF/gbIi6WkzRJX6Yioldxbzj1MV4yV+LgdKD/kkHwFTeFXOG4htA==";
+    };
+    dependencies = [
+      sources."abbrev-1.1.1"
+      sources."ajv-5.5.2"
+      sources."ansi-regex-2.1.1"
+      sources."aproba-1.2.0"
+      sources."are-we-there-yet-1.1.5"
+      sources."asn1-0.2.4"
+      sources."assert-plus-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.7.0"
+      sources."balanced-match-1.0.0"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."brace-expansion-1.1.11"
+      sources."caseless-0.12.0"
+      sources."chownr-1.0.1"
+      sources."co-4.6.0"
+      sources."code-point-at-1.1.0"
+      sources."combined-stream-1.0.6"
+      sources."concat-map-0.0.1"
+      sources."console-control-strings-1.1.0"
+      sources."core-util-is-1.0.2"
+      sources."dashdash-1.14.1"
+      sources."debug-2.6.9"
+      sources."deep-extend-0.6.0"
+      sources."delayed-stream-1.0.0"
+      sources."delegates-1.0.0"
+      sources."detect-libc-1.0.3"
+      sources."ecc-jsbn-0.1.2"
+      sources."extend-3.0.2"
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-1.1.0"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.2"
+      sources."fs-minipass-1.2.5"
+      sources."fs.realpath-1.0.0"
+      sources."gauge-2.7.4"
+      sources."getpass-0.1.7"
+      sources."glob-7.1.2"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.0.3"
+      sources."has-unicode-2.0.1"
+      sources."http-signature-1.2.0"
+      sources."iconv-lite-0.4.23"
+      sources."ignore-walk-3.0.1"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.3"
+      sources."ini-1.3.5"
+      sources."is-fullwidth-code-point-1.0.0"
+      sources."is-typedarray-1.0.0"
+      sources."isarray-1.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.3.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsprim-1.4.1"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."minipass-2.3.3"
+      sources."minizlib-1.1.0"
+      sources."mkdirp-0.5.1"
+      sources."ms-2.0.0"
+      sources."nan-2.10.0"
+      sources."needle-2.2.1"
+      sources."node-pre-gyp-0.10.3"
+      sources."nopt-4.0.1"
+      sources."npm-bundled-1.0.3"
+      sources."npm-packlist-1.1.11"
+      sources."npmlog-4.1.2"
+      sources."number-is-nan-1.0.1"
+      sources."oauth-sign-0.8.2"
+      sources."object-assign-4.1.1"
+      sources."once-1.4.0"
+      sources."os-homedir-1.0.2"
+      sources."os-tmpdir-1.0.2"
+      sources."osenv-0.1.5"
+      sources."path-is-absolute-1.0.1"
+      sources."performance-now-2.1.0"
+      sources."process-nextick-args-2.0.0"
+      sources."punycode-1.4.1"
+      sources."qs-6.5.2"
+      (sources."rc-1.2.8" // {
+        dependencies = [
+          sources."minimist-1.2.0"
+        ];
+      })
+      sources."readable-stream-2.3.6"
+      sources."request-2.87.0"
+      sources."rimraf-2.6.2"
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."sax-1.2.4"
+      sources."semver-5.5.0"
+      sources."set-blocking-2.0.0"
+      sources."signal-exit-3.0.2"
+      sources."sshpk-1.14.2"
+      sources."string-width-1.0.2"
+      sources."string_decoder-1.1.1"
+      sources."strip-ansi-3.0.1"
+      sources."strip-json-comments-2.0.1"
+      sources."tar-4.4.6"
+      sources."tough-cookie-2.3.4"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."util-deprecate-1.0.2"
+      sources."uuid-3.3.2"
+      sources."verror-1.10.0"
+      sources."wide-align-1.1.3"
+      sources."wrappy-1.0.2"
+      sources."yallist-3.0.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Asynchronous, non-blocking SQLite3 bindings";
+      homepage = http://github.com/mapbox/node-sqlite3;
+      license = "BSD-3-Clause";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "store-^2.0.12" = nodeEnv.buildNodePackage {
+    name = "store";
+    packageName = "store";
+    version = "2.0.12";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/store/-/store-2.0.12.tgz";
+      sha1 = "8c534e2a0b831f72b75fc5f1119857c44ef5d593";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A localStorage wrapper for all browsers without using cookies or flash. Uses localStorage, globalStorage, and userData behavior under the hood";
+      homepage = "https://github.com/marcuswestin/store.js#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "string-^3.3.3" = nodeEnv.buildNodePackage {
+    name = "string";
+    packageName = "string";
+    version = "3.3.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/string/-/string-3.3.3.tgz";
+      sha1 = "5ea211cd92d228e184294990a6cc97b366a77cb0";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "string contains methods that aren't included in the vanilla JavaScript string such as escaping html, decoding html entities, stripping tags, etc.";
+      homepage = http://stringjs.com/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "tedious-^1.14.0" = nodeEnv.buildNodePackage {
+    name = "tedious";
+    packageName = "tedious";
+    version = "1.15.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/tedious/-/tedious-1.15.0.tgz";
+      sha1 = "9bda9e9798212c8fcd9438a70cb2a806abcae70a";
+    };
+    dependencies = [
+      sources."babel-runtime-6.26.0"
+      sources."big-number-0.3.1"
+      sources."bl-1.2.2"
+      sources."core-js-2.5.7"
+      sources."core-util-is-1.0.2"
+      sources."dns-lookup-all-1.0.2"
+      sources."iconv-lite-0.4.23"
+      sources."inherits-2.0.3"
+      sources."isarray-1.0.0"
+      sources."process-nextick-args-2.0.0"
+      sources."readable-stream-2.3.6"
+      sources."regenerator-runtime-0.11.1"
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."semver-5.5.0"
+      sources."sprintf-0.1.5"
+      sources."string_decoder-1.1.1"
+      sources."util-deprecate-1.0.2"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A TDS driver, for connecting to MS SQLServer databases.";
+      homepage = https://github.com/tediousjs/tedious;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "to-markdown-^3.0.3" = nodeEnv.buildNodePackage {
+    name = "to-markdown";
+    packageName = "to-markdown";
+    version = "3.1.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/to-markdown/-/to-markdown-3.1.1.tgz";
+      sha1 = "251e241b8c74c7ad177292e6c52cc195c9268c11";
+    };
+    dependencies = [
+      sources."abab-1.0.4"
+      sources."acorn-4.0.13"
+      sources."acorn-globals-3.1.0"
+      sources."ajv-5.5.2"
+      sources."array-equal-1.0.0"
+      sources."asn1-0.2.4"
+      sources."assert-plus-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.7.0"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."block-elements-1.2.0"
+      sources."caseless-0.12.0"
+      sources."co-4.6.0"
+      sources."collapse-whitespace-1.1.2"
+      sources."combined-stream-1.0.6"
+      sources."content-type-parser-1.0.2"
+      sources."core-util-is-1.0.2"
+      sources."cssom-0.3.4"
+      sources."cssstyle-0.2.37"
+      sources."dashdash-1.14.1"
+      sources."deep-is-0.1.3"
+      sources."delayed-stream-1.0.0"
+      sources."ecc-jsbn-0.1.2"
+      sources."escodegen-1.11.0"
+      sources."esprima-3.1.3"
+      sources."estraverse-4.2.0"
+      sources."esutils-2.0.2"
+      sources."extend-3.0.2"
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-1.1.0"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."fast-levenshtein-2.0.6"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.2"
+      sources."getpass-0.1.7"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.0.3"
+      sources."html-encoding-sniffer-1.0.2"
+      sources."http-signature-1.2.0"
+      sources."iconv-lite-0.4.19"
+      sources."is-typedarray-1.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."jsdom-9.12.0"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.3.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsprim-1.4.1"
+      sources."levn-0.3.0"
+      sources."mime-db-1.35.0"
+      sources."mime-types-2.1.19"
+      sources."nwmatcher-1.4.4"
+      sources."oauth-sign-0.8.2"
+      sources."optionator-0.8.2"
+      sources."parse5-1.5.1"
+      sources."performance-now-2.1.0"
+      sources."prelude-ls-1.1.2"
+      sources."psl-1.1.29"
+      sources."punycode-1.4.1"
+      sources."qs-6.5.2"
+      (sources."request-2.87.0" // {
+        dependencies = [
+          sources."tough-cookie-2.3.4"
+        ];
+      })
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."sax-1.2.4"
+      sources."source-map-0.6.1"
+      sources."sshpk-1.14.2"
+      sources."symbol-tree-3.2.2"
+      sources."tough-cookie-2.4.3"
+      sources."tr46-0.0.3"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."type-check-0.3.2"
+      sources."uuid-3.3.2"
+      sources."verror-1.10.0"
+      sources."void-elements-2.0.1"
+      sources."webidl-conversions-4.0.2"
+      sources."whatwg-encoding-1.0.3"
+      (sources."whatwg-url-4.8.0" // {
+        dependencies = [
+          sources."webidl-conversions-3.0.1"
+        ];
+      })
+      sources."wordwrap-1.0.0"
+      sources."xml-name-validator-2.0.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "HTML-to-Markdown converter";
+      homepage = "https://github.com/domchristie/to-markdown#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "toobusy-js-^0.5.1" = nodeEnv.buildNodePackage {
+    name = "toobusy-js";
+    packageName = "toobusy-js";
+    version = "0.5.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/toobusy-js/-/toobusy-js-0.5.1.tgz";
+      sha1 = "5511f78f6a87a6a512d44fdb0efa13672217f659";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Don't fall over when your Node.JS server is too busy. Now without native dependencies!";
+      homepage = https://github.com/STRML/node-toobusy;
+      license = "WTFPL";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "uuid-^3.1.0" = nodeEnv.buildNodePackage {
+    name = "uuid";
+    packageName = "uuid";
+    version = "3.3.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz";
+      sha512 = "yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "RFC4122 (v1, v4, and v5) UUIDs";
+      homepage = "https://github.com/kelektiv/node-uuid#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "uws-~0.14.1" = nodeEnv.buildNodePackage {
+    name = "uws";
+    packageName = "uws";
+    version = "0.14.5";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/uws/-/uws-0.14.5.tgz";
+      sha1 = "67aaf33c46b2a587a5f6666d00f7691328f149dc";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Tiny WebSockets";
+      homepage = https://github.com/uWebSockets/uWebSockets;
+      license = "Zlib";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "validator-^10.4.0" = nodeEnv.buildNodePackage {
+    name = "validator";
+    packageName = "validator";
+    version = "10.5.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/validator/-/validator-10.5.0.tgz";
+      sha512 = "6OOi+eV2mOxCFLq0f2cJDrdB6lrtLXEUxabhNRGjgOLT/l3SSll9J49Cl+LIloUqkWWTPraK/mucEQ3dc2jStQ==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "String validation and sanitization";
+      homepage = http://github.com/chriso/validator.js;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "velocity-animate-^1.4.0" = nodeEnv.buildNodePackage {
+    name = "velocity-animate";
+    packageName = "velocity-animate";
+    version = "1.5.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/velocity-animate/-/velocity-animate-1.5.2.tgz";
+      sha512 = "m6EXlCAMetKztO1ppBhGU1/1MR3IiEevO6ESq6rcrSQ3Q77xYSW13jkfXW88o4xMrkXJhy/U7j4wFR/twMB0Eg==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Accelerated JavaScript animation.";
+      homepage = http://velocityjs.org/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "visibilityjs-^1.2.4" = nodeEnv.buildNodePackage {
+    name = "visibilityjs";
+    packageName = "visibilityjs";
+    version = "1.2.8";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/visibilityjs/-/visibilityjs-1.2.8.tgz";
+      sha512 = "Y+aL3OUX88b+/VSmkmC2ApuLbf0grzbNLpCfIDSw3BzTU6PqcPsdgIOaw8b+eZoy+DdQqnVN3y/Evow9vQq9Ig==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Wrapper for the Page Visibility API";
+      homepage = "https://github.com/ai/visibilityjs#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "viz.js-^1.7.0" = nodeEnv.buildNodePackage {
+    name = "viz.js";
+    packageName = "viz.js";
+    version = "1.8.2";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/viz.js/-/viz.js-1.8.2.tgz";
+      sha512 = "W+1+N/hdzLpQZEcvz79n2IgUE9pfx6JLdHh3Kh8RGvLL8P1LdJVQmi2OsDcLdY4QVID4OUy+FPelyerX0nJxIQ==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A hack to put Graphviz on the web.";
+      homepage = https://github.com/mdaines/viz.js;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "winston-^2.3.0" = nodeEnv.buildNodePackage {
+    name = "winston";
+    packageName = "winston";
+    version = "2.4.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/winston/-/winston-2.4.3.tgz";
+      sha512 = "GYKuysPz2pxYAVJD2NPsDLP5Z79SDEzPm9/j4tCjkF/n89iBNGBMJcR+dMUqxgPNgoSs6fVygPi+Vl2oxIpBuw==";
+    };
+    dependencies = [
+      sources."async-1.0.0"
+      sources."colors-1.0.3"
+      sources."cycle-1.0.3"
+      sources."eyes-0.1.8"
+      sources."isstream-0.1.2"
+      sources."stack-trace-0.0.10"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A multi-transport async logging library for Node.js";
+      homepage = "https://github.com/winstonjs/winston#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+  "xss-^1.0.3" = nodeEnv.buildNodePackage {
+    name = "xss";
+    packageName = "xss";
+    version = "1.0.3";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/xss/-/xss-1.0.3.tgz";
+      sha512 = "LTpz3jXPLUphMMmyufoZRSKnqMj41OVypZ8uYGzvjkMV9C1EdACrhQl/EM8Qfh5htSAuMIQFOejmKAZGkJfaCg==";
+    };
+    dependencies = [
+      sources."commander-2.16.0"
+      sources."cssfilter-0.0.10"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Sanitize untrusted HTML (to prevent XSS) with a configuration specified by a Whitelist";
+      homepage = https://github.com/leizongmin/js-xss;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = false;
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/servers/web-apps/codimd/node.nix b/nixpkgs/pkgs/servers/web-apps/codimd/node.nix
new file mode 100644
index 000000000000..8f3be4cc8c7f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/codimd/node.nix
@@ -0,0 +1,17 @@
+# This file has been generated by node2nix 1.6.0. Do not edit!
+
+{pkgs ? import <nixpkgs> {
+    inherit system;
+  }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-6_x"}:
+
+let
+  nodeEnv = import ../../../development/node-packages/node-env.nix {
+    inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
+    inherit nodejs;
+    libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
+  };
+in
+import ./node-packages.nix {
+  inherit (pkgs) fetchurl fetchgit;
+  inherit nodeEnv;
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/servers/web-apps/fileshelter/default.nix b/nixpkgs/pkgs/servers/web-apps/fileshelter/default.nix
new file mode 100644
index 000000000000..01fb8c624820
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/fileshelter/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, libzip, boost, wt3, libconfig, pkgconfig } :
+
+stdenv.mkDerivation rec {
+  pname = "fileshelter";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "epoupon";
+    repo = "fileshelter";
+    rev = "v${version}";
+    sha256 = "1n9hrls3l9gf8wfz6m9bylma1b1hdvdqsksv2dlp1zdgjdzv200b";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ libzip boost wt3 libconfig ];
+
+  postInstall = ''
+    ln -s ${wt3}/share/Wt/resources $out/share/fileshelter/docroot/resources
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/epoupon/fileshelter;
+    description = "FileShelter is a 'one-click' file sharing web application";
+    maintainers = [ maintainers.willibutz ];
+    license = licenses.gpl3;
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/frab/Gemfile b/nixpkgs/pkgs/servers/web-apps/frab/Gemfile
new file mode 100644
index 000000000000..098b8f3d7d7a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/frab/Gemfile
@@ -0,0 +1,88 @@
+source 'https://rubygems.org'
+
+if ENV['CUSTOM_RUBY_VERSION']
+  ruby ENV['CUSTOM_RUBY_VERSION'] # i.e.: '2.3'
+end
+
+gem 'rails', '~> 4.2'
+
+# Use SCSS for stylesheets
+gem 'sass-rails', '~> 5.0'
+# Use Uglifier as compressor for JavaScript assets
+gem 'uglifier', '>= 1.3.0'
+# Use CoffeeScript for .coffee assets and views
+gem 'coffee-rails', '~> 4.1.0'
+
+gem 'mysql2', group: :mysql
+gem 'pg', group: :postgresql
+gem 'sqlite3', group: :sqlite3
+
+# Use Puma as the app server
+gem 'puma'
+
+# Capistrano for deployment
+group :capistrano do
+  gem 'airbrussh'
+  gem 'capistrano', '~> 3.4.0', require: false
+  gem 'capistrano-rails',   require: false
+  gem 'capistrano-bundler', require: false
+  gem 'capistrano-rvm',     require: false
+  gem 'capistrano3-puma',   require: false
+end
+
+# Use jquery as the JavaScript library
+gem 'jquery-rails'
+gem 'jquery-migrate-rails'
+gem 'jquery-ui-rails'
+
+# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
+gem 'jbuilder', '~> 2.0'
+
+gem 'activeresource'
+gem 'acts_as_commentable'
+gem 'bcrypt'
+gem 'cancancan'
+gem 'cocoon'
+gem 'dotenv-rails'
+gem 'haml'
+gem 'localized_language_select', github: 'frab/localized_language_select', branch: 'master'
+gem 'nokogiri'
+gem 'paperclip', '~> 4.1'
+gem 'paper_trail'
+gem 'prawn', '< 1.0'
+gem 'prawn_rails'
+gem 'ransack'
+gem 'ri_cal'
+gem 'roust'
+gem 'rqrcode'
+#gem 'roust', :git => 'git@github.com:bulletproofnetworks/roust.git'
+gem 'simple_form'
+gem 'sucker_punch'
+gem 'transitions', require: ['transitions', 'active_record/transitions']
+gem 'will_paginate'
+
+group :production do
+  gem 'exception_notification'
+end
+
+group :development, :test do
+  gem 'bullet'
+  gem 'pry-rails'
+  gem 'pry-byebug'
+  gem 'letter_opener'
+  gem 'faker'
+end
+
+group :test do
+  gem 'database_cleaner'
+  gem 'factory_girl_rails', '~> 4.0'
+  gem 'shoulda'
+end
+
+group :doc do
+  gem 'redcarpet'       # documentation
+  gem 'github-markdown' # documentation
+  gem 'yard'            # documentation
+  # gem 'rails-erd'      # graph
+  # gem 'ruby-graphviz', require: 'graphviz' # Optional: only required for graphing
+end
diff --git a/nixpkgs/pkgs/servers/web-apps/frab/Gemfile.lock b/nixpkgs/pkgs/servers/web-apps/frab/Gemfile.lock
new file mode 100644
index 000000000000..dc18be7a33db
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/frab/Gemfile.lock
@@ -0,0 +1,329 @@
+GIT
+  remote: git://github.com/frab/localized_language_select.git
+  revision: 85df6b97789de6e29c630808b630e56a1b76f80c
+  branch: master
+  specs:
+    localized_language_select (0.3.0)
+      rails (>= 4.1.0)
+
+GEM
+  remote: https://rubygems.org/
+  specs:
+    actionmailer (4.2.7.1)
+      actionpack (= 4.2.7.1)
+      actionview (= 4.2.7.1)
+      activejob (= 4.2.7.1)
+      mail (~> 2.5, >= 2.5.4)
+      rails-dom-testing (~> 1.0, >= 1.0.5)
+    actionpack (4.2.7.1)
+      actionview (= 4.2.7.1)
+      activesupport (= 4.2.7.1)
+      rack (~> 1.6)
+      rack-test (~> 0.6.2)
+      rails-dom-testing (~> 1.0, >= 1.0.5)
+      rails-html-sanitizer (~> 1.0, >= 1.0.2)
+    actionview (4.2.7.1)
+      activesupport (= 4.2.7.1)
+      builder (~> 3.1)
+      erubis (~> 2.7.0)
+      rails-dom-testing (~> 1.0, >= 1.0.5)
+      rails-html-sanitizer (~> 1.0, >= 1.0.2)
+    activejob (4.2.7.1)
+      activesupport (= 4.2.7.1)
+      globalid (>= 0.3.0)
+    activemodel (4.2.7.1)
+      activesupport (= 4.2.7.1)
+      builder (~> 3.1)
+    activerecord (4.2.7.1)
+      activemodel (= 4.2.7.1)
+      activesupport (= 4.2.7.1)
+      arel (~> 6.0)
+    activeresource (4.1.0)
+      activemodel (~> 4.0)
+      activesupport (~> 4.0)
+      rails-observers (~> 0.1.2)
+    activesupport (4.2.7.1)
+      i18n (~> 0.7)
+      json (~> 1.7, >= 1.7.7)
+      minitest (~> 5.1)
+      thread_safe (~> 0.3, >= 0.3.4)
+      tzinfo (~> 1.1)
+    acts_as_commentable (4.0.2)
+    addressable (2.4.0)
+    airbrussh (1.1.1)
+      sshkit (>= 1.6.1, != 1.7.0)
+    arel (6.0.3)
+    bcrypt (3.1.11)
+    builder (3.2.2)
+    bullet (5.4.0)
+      activesupport (>= 3.0.0)
+      uniform_notifier (~> 1.10.0)
+    byebug (9.0.5)
+    cancancan (1.15.0)
+    capistrano (3.4.1)
+      i18n
+      rake (>= 10.0.0)
+      sshkit (~> 1.3)
+    capistrano-bundler (1.1.4)
+      capistrano (~> 3.1)
+      sshkit (~> 1.2)
+    capistrano-rails (1.1.8)
+      capistrano (~> 3.1)
+      capistrano-bundler (~> 1.1)
+    capistrano-rvm (0.1.2)
+      capistrano (~> 3.0)
+      sshkit (~> 1.2)
+    capistrano3-puma (1.2.1)
+      capistrano (~> 3.0)
+      puma (>= 2.6)
+    chunky_png (1.3.7)
+    climate_control (0.0.3)
+      activesupport (>= 3.0)
+    cocaine (0.5.8)
+      climate_control (>= 0.0.3, < 1.0)
+    cocoon (1.2.9)
+    coderay (1.1.1)
+    coffee-rails (4.1.1)
+      coffee-script (>= 2.2.0)
+      railties (>= 4.0.0, < 5.1.x)
+    coffee-script (2.4.1)
+      coffee-script-source
+      execjs
+    coffee-script-source (1.10.0)
+    concurrent-ruby (1.0.2)
+    database_cleaner (1.5.3)
+    dotenv (2.1.1)
+    dotenv-rails (2.1.1)
+      dotenv (= 2.1.1)
+      railties (>= 4.0, < 5.1)
+    erubis (2.7.0)
+    exception_notification (4.2.1)
+      actionmailer (>= 4.0, < 6)
+      activesupport (>= 4.0, < 6)
+    execjs (2.7.0)
+    factory_girl (4.7.0)
+      activesupport (>= 3.0.0)
+    factory_girl_rails (4.7.0)
+      factory_girl (~> 4.7.0)
+      railties (>= 3.0.0)
+    faker (1.6.6)
+      i18n (~> 0.5)
+    github-markdown (0.6.9)
+    globalid (0.3.7)
+      activesupport (>= 4.1.0)
+    haml (4.0.7)
+      tilt
+    httparty (0.14.0)
+      multi_xml (>= 0.5.2)
+    i18n (0.7.0)
+    jbuilder (2.6.0)
+      activesupport (>= 3.0.0, < 5.1)
+      multi_json (~> 1.2)
+    jquery-migrate-rails (1.2.1)
+    jquery-rails (4.2.1)
+      rails-dom-testing (>= 1, < 3)
+      railties (>= 4.2.0)
+      thor (>= 0.14, < 2.0)
+    jquery-ui-rails (5.0.5)
+      railties (>= 3.2.16)
+    json (1.8.3)
+    launchy (2.4.3)
+      addressable (~> 2.3)
+    letter_opener (1.4.1)
+      launchy (~> 2.2)
+    loofah (2.0.3)
+      nokogiri (>= 1.5.9)
+    mail (2.6.4)
+      mime-types (>= 1.16, < 4)
+    method_source (0.8.2)
+    mime-types (3.1)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2016.0521)
+    mimemagic (0.3.0)
+    mini_portile2 (2.1.0)
+    minitest (5.9.1)
+    multi_json (1.12.1)
+    multi_xml (0.5.5)
+    mysql2 (0.4.4)
+    net-scp (1.2.1)
+      net-ssh (>= 2.6.5)
+    net-ssh (3.2.0)
+    nokogiri (1.6.7.2)
+      mini_portile2 (~> 2.0.0.rc2)
+      pkg-config (~> 1.1.7)
+    paper_trail (5.2.2)
+      activerecord (>= 3.0, < 6.0)
+      request_store (~> 1.1)
+    paperclip (4.3.7)
+      activemodel (>= 3.2.0)
+      activesupport (>= 3.2.0)
+      cocaine (~> 0.5.5)
+      mime-types
+      mimemagic (= 0.3.0)
+    pdf-core (0.1.6)
+    pg (0.19.0)
+    pkg-config (1.1.7)
+    polyamorous (1.3.1)
+      activerecord (>= 3.0)
+    prawn (0.15.0)
+      pdf-core (~> 0.1.3)
+      ttfunk (~> 1.1.0)
+    prawn_rails (0.0.11)
+      prawn (>= 0.11.1)
+      railties (>= 3.0.0)
+    pry (0.10.4)
+      coderay (~> 1.1.0)
+      method_source (~> 0.8.1)
+      slop (~> 3.4)
+    pry-byebug (3.4.0)
+      byebug (~> 9.0)
+      pry (~> 0.10)
+    pry-rails (0.3.4)
+      pry (>= 0.9.10)
+    puma (3.9.1)
+    rack (1.6.11)
+    rack-test (0.6.3)
+      rack (>= 1.0)
+    rails (4.2.7.1)
+      actionmailer (= 4.2.7.1)
+      actionpack (= 4.2.7.1)
+      actionview (= 4.2.7.1)
+      activejob (= 4.2.7.1)
+      activemodel (= 4.2.7.1)
+      activerecord (= 4.2.7.1)
+      activesupport (= 4.2.7.1)
+      bundler (>= 1.3.0, < 2.0)
+      railties (= 4.2.7.1)
+      sprockets-rails
+    rails-deprecated_sanitizer (1.0.3)
+      activesupport (>= 4.2.0.alpha)
+    rails-dom-testing (1.0.7)
+      activesupport (>= 4.2.0.beta, < 5.0)
+      nokogiri (~> 1.6.0)
+      rails-deprecated_sanitizer (>= 1.0.1)
+    rails-html-sanitizer (1.0.3)
+      loofah (~> 2.0)
+    rails-observers (0.1.2)
+      activemodel (~> 4.0)
+    railties (4.2.7.1)
+      actionpack (= 4.2.7.1)
+      activesupport (= 4.2.7.1)
+      rake (>= 0.8.7)
+      thor (>= 0.18.1, < 2.0)
+    rake (11.3.0)
+    ransack (1.8.2)
+      actionpack (>= 3.0)
+      activerecord (>= 3.0)
+      activesupport (>= 3.0)
+      i18n
+      polyamorous (~> 1.3)
+    redcarpet (3.3.4)
+    request_store (1.3.1)
+    ri_cal (0.8.8)
+    roust (1.8.9)
+      activesupport (>= 4.0.10)
+      httparty (>= 0.13.1)
+      mail (>= 2.5.4)
+    rqrcode (0.10.1)
+      chunky_png (~> 1.0)
+    sass (3.4.22)
+    sass-rails (5.0.6)
+      railties (>= 4.0.0, < 6)
+      sass (~> 3.1)
+      sprockets (>= 2.8, < 4.0)
+      sprockets-rails (>= 2.0, < 4.0)
+      tilt (>= 1.1, < 3)
+    shoulda (3.5.0)
+      shoulda-context (~> 1.0, >= 1.0.1)
+      shoulda-matchers (>= 1.4.1, < 3.0)
+    shoulda-context (1.2.1)
+    shoulda-matchers (2.8.0)
+      activesupport (>= 3.0.0)
+    simple_form (3.3.1)
+      actionpack (> 4, < 5.1)
+      activemodel (> 4, < 5.1)
+    slop (3.6.0)
+    sprockets (3.7.0)
+      concurrent-ruby (~> 1.0)
+      rack (> 1, < 3)
+    sprockets-rails (3.2.0)
+      actionpack (>= 4.0)
+      activesupport (>= 4.0)
+      sprockets (>= 3.0.0)
+    sqlite3 (1.3.11)
+    sshkit (1.11.3)
+      net-scp (>= 1.1.2)
+      net-ssh (>= 2.8.0)
+    sucker_punch (2.0.2)
+      concurrent-ruby (~> 1.0.0)
+    thor (0.19.1)
+    thread_safe (0.3.5)
+    tilt (2.0.5)
+    transitions (1.2.0)
+    ttfunk (1.1.1)
+    tzinfo (1.2.2)
+      thread_safe (~> 0.1)
+    uglifier (3.0.2)
+      execjs (>= 0.3.0, < 3)
+    uniform_notifier (1.10.0)
+    will_paginate (3.1.3)
+    yard (0.9.5)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  activeresource
+  acts_as_commentable
+  airbrussh
+  bcrypt
+  bullet
+  cancancan
+  capistrano (~> 3.4.0)
+  capistrano-bundler
+  capistrano-rails
+  capistrano-rvm
+  capistrano3-puma
+  cocoon
+  coffee-rails (~> 4.1.0)
+  database_cleaner
+  dotenv-rails
+  exception_notification
+  factory_girl_rails (~> 4.0)
+  faker
+  github-markdown
+  haml
+  jbuilder (~> 2.0)
+  jquery-migrate-rails
+  jquery-rails
+  jquery-ui-rails
+  letter_opener
+  localized_language_select!
+  mysql2
+  nokogiri
+  paper_trail
+  paperclip (~> 4.1)
+  pg
+  prawn (< 1.0)
+  prawn_rails
+  pry-byebug
+  pry-rails
+  puma
+  rails (~> 4.2)
+  ransack
+  redcarpet
+  ri_cal
+  roust
+  rqrcode
+  sass-rails (~> 5.0)
+  shoulda
+  simple_form
+  sqlite3
+  sucker_punch
+  transitions
+  uglifier (>= 1.3.0)
+  will_paginate
+  yard
+
+BUNDLED WITH
+   1.13.1
diff --git a/nixpkgs/pkgs/servers/web-apps/frab/default.nix b/nixpkgs/pkgs/servers/web-apps/frab/default.nix
new file mode 100644
index 000000000000..d6a5128b8130
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/frab/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, bundlerEnv, fetchFromGitHub, ruby, nodejs }:
+
+let
+  env = bundlerEnv {
+    name = "frab";
+    inherit ruby;
+    gemfile = ./Gemfile;
+    lockfile = ./Gemfile.lock;
+    gemset = ./gemset.nix;
+  };
+
+in
+
+stdenv.mkDerivation rec {
+  name = "frab-2016-12-28";
+
+  src = fetchFromGitHub {
+    owner = "frab";
+    repo = "frab";
+    rev = "e4bbcfd1a9db7f89f53a8702c236d9628bafb72c";
+    sha256 = "04pzmif8jxjww3fdf2zbg3k7cm49vxc9hhf4xhmvdmvywgin6fqp";
+  };
+
+  buildInputs = [ env nodejs ];
+
+  buildPhase = ''
+    cp config/database.yml.template config/database.yml
+    cp .env.development .env.production
+    bundler exec rake assets:precompile RAILS_ENV=production
+    rm .env.production
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share
+    cp -r . $out/share/frab
+
+    ln -sf /run/frab/database.yml $out/share/frab/config/database.yml
+    rm -rf $out/share/frab/tmp $out/share/frab/public/system
+    ln -sf /run/frab/system $out/share/frab/public/system
+    ln -sf /tmp $out/share/frab/tmp
+  '';
+
+  passthru = {
+    inherit env ruby;
+  };
+
+  meta = with stdenv.lib; {
+    description = "Web-based conference planning and management system";
+    homepage = https://github.com/frab/frab;
+    license = licenses.mit;
+    broken = true; # 2018-09-08; no successful hydra build since 2018-02-14
+  };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/frab/gemset.nix b/nixpkgs/pkgs/servers/web-apps/frab/gemset.nix
new file mode 100644
index 000000000000..c3259a2709c9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/frab/gemset.nix
@@ -0,0 +1,998 @@
+{
+  actionmailer = {
+    dependencies = ["actionpack" "actionview" "activejob" "mail" "rails-dom-testing"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lw1pss1mrjm7x7qcg9pvxv55rz3d994yf3mwmlfg1y12fxq00n3";
+      type = "gem";
+    };
+    version = "4.2.7.1";
+  };
+  actionpack = {
+    dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ray5bvlmkimjax011zsw0mz9llfkqrfm7q1avjlp4i0kpcz8zlh";
+      type = "gem";
+    };
+    version = "4.2.7.1";
+  };
+  actionview = {
+    dependencies = ["activesupport" "builder" "erubis" "rails-dom-testing" "rails-html-sanitizer"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11m2x5nlbqrw79fh6h7m444lrka7wwy32b0dvgqg7ilbzih43k0c";
+      type = "gem";
+    };
+    version = "4.2.7.1";
+  };
+  activejob = {
+    dependencies = ["activesupport" "globalid"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ish5wd8nvmj7f6x1i22aw5ycizy5n1z1c7f3kyxmqwhw7lb0gaz";
+      type = "gem";
+    };
+    version = "4.2.7.1";
+  };
+  activemodel = {
+    dependencies = ["activesupport" "builder"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0acz0mbmahsc9mn41275fpfnrqwig5k09m3xhz3455kv90fn79v5";
+      type = "gem";
+    };
+    version = "4.2.7.1";
+  };
+  activerecord = {
+    dependencies = ["activemodel" "activesupport" "arel"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lk8l6i9p7qfl0pg261v5yph0w0sc0vysrdzc6bm5i5rxgi68flj";
+      type = "gem";
+    };
+    version = "4.2.7.1";
+  };
+  activeresource = {
+    dependencies = ["activemodel" "activesupport" "rails-observers"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nr5is20cx18s7vg8bdrdc996s2abl3h7fsi1q6mqsrzw7nrv2fa";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  activesupport = {
+    dependencies = ["i18n" "json" "minitest" "thread_safe" "tzinfo"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gds12k7nxrcc09b727a458ndidy1nfcllj9x22jcaj7pppvq6r4";
+      type = "gem";
+    };
+    version = "4.2.7.1";
+  };
+  acts_as_commentable = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p4bwyqmm4ybcscn292aixschdzvns2dpl8a7w4zm0rqy2619cc9";
+      type = "gem";
+    };
+    version = "4.0.2";
+  };
+  addressable = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mpn7sbjl477h56gmxsjqb89r5s3w7vx5af994ssgc3iamvgzgvs";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  airbrussh = {
+    dependencies = ["sshkit"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pv22d2kjdbsg9q45jca3f5gsylr2r1wfpn58g58xj4s4q4r95nx";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  arel = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk";
+      type = "gem";
+    };
+    version = "6.0.3";
+  };
+  bcrypt = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d254sdhdj6mzak3fb5x3jam8b94pvl1srladvs53j05a89j5z50";
+      type = "gem";
+    };
+    version = "3.1.11";
+  };
+  builder = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2";
+      type = "gem";
+    };
+    version = "3.2.2";
+  };
+  bullet = {
+    dependencies = ["activesupport" "uniform_notifier"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06pba7bdjnazbl0yhhvlina08nkawnm76zihkaam4k7fm0yrq1k0";
+      type = "gem";
+    };
+    version = "5.4.0";
+  };
+  byebug = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18sdnscwwm76i2kbcib2ckwfwpq8b1dbfr97gdcx3j1x547yqv9x";
+      type = "gem";
+    };
+    version = "9.0.5";
+  };
+  cancancan = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05kb459laaw339n7mas37v4k83nwz228bfpaghgybza347341x85";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  capistrano = {
+    dependencies = ["i18n" "rake" "sshkit"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f73w6gpml0ickmwky1cn6d8392q075zy10a323f3vmyvxyhr0jb";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  capistrano-bundler = {
+    dependencies = ["capistrano" "sshkit"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f4iikm7pn0li2lj6p53wl0d6y7svn0h76z9c6c582mmwxa9c72p";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  capistrano-rails = {
+    dependencies = ["capistrano" "capistrano-bundler"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03lzihrq72rwcqq7jiqak79wy0xbdnymn5gxj0bfgfjlg5kpgssw";
+      type = "gem";
+    };
+    version = "1.1.8";
+  };
+  capistrano-rvm = {
+    dependencies = ["capistrano" "sshkit"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15sy8zcal041yy5kb7fcdqnxvndgdhg3w1kvb5dk7hfjk3ypznsa";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  capistrano3-puma = {
+    dependencies = ["capistrano" "puma"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ynz1arnr07kcl0vsaa1znhp2ywhhs4fwndnkw8sasr9bydksln8";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  chunky_png = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p1zy4gyfp7rapr2yxcljkw6qh0chkwf356i387b3fg85cwdj4xh";
+      type = "gem";
+    };
+    version = "1.3.7";
+  };
+  climate_control = {
+    dependencies = ["activesupport"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krknwk6b8lwv1j9kjbxib6kf5zh4pxkf3y2vcyycx5d6nci1s55";
+      type = "gem";
+    };
+    version = "0.0.3";
+  };
+  cocaine = {
+    dependencies = ["climate_control"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01kk5xd7lspbkdvn6nyj0y51zhvia3z6r4nalbdcqw5fbsywwi7d";
+      type = "gem";
+    };
+    version = "0.5.8";
+  };
+  cocoon = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gzznkrs6qy31v85cvdqyn5wd3vwlciwibf9clmd6gi4dns21pmv";
+      type = "gem";
+    };
+    version = "1.2.9";
+  };
+  coderay = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x6z923iwr1hi04k6kz5a6llrixflz8h5sskl9mhaaxy9jx2x93r";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  coffee-rails = {
+    dependencies = ["coffee-script" "railties"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mv1kaw3z4ry6cm51w8pfrbby40gqwxanrqyqr0nvs8j1bscc1gw";
+      type = "gem";
+    };
+    version = "4.1.1";
+  };
+  coffee-script = {
+    dependencies = ["coffee-script-source" "execjs"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rc7scyk7mnpfxqv5yy4y5q1hx3i7q3ahplcp4bq2g5r24g2izl2";
+      type = "gem";
+    };
+    version = "2.4.1";
+  };
+  coffee-script-source = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k4fg39rrkl3bpgchfj94fbl9s4ysaz16w8dkqncf2vyf79l3qz0";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  concurrent-ruby = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kb4sav7yli12pjr8lscv8z49g52a5xzpfg3z9h8clzw6z74qjsw";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  database_cleaner = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fx6zmqznklmkbjl6f713jyl11d4g9q220rcl86m2jp82r8kfwjj";
+      type = "gem";
+    };
+    version = "1.5.3";
+  };
+  dotenv = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p6zz0xzb15vq8jphpw2fh6m4dianw7s76ci8vj9x3zxayrn4lfm";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  dotenv-rails = {
+    dependencies = ["dotenv" "railties"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17s6c0yqaz01xd5wywjscbvv0pa3grak2lhwby91j84qm6h95vxz";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  erubis = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  exception_notification = {
+    dependencies = ["actionmailer" "activesupport"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vclsr0rjfy1khvqyj67lgpa0v14nb542vvjkyaswn367nnmijhw";
+      type = "gem";
+    };
+    version = "4.2.1";
+  };
+  execjs = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  factory_girl = {
+    dependencies = ["activesupport"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xzl4z9z390fsnyxp10c9if2n46zan3n6zwwpfnwc33crv4s410i";
+      type = "gem";
+    };
+    version = "4.7.0";
+  };
+  factory_girl_rails = {
+    dependencies = ["factory_girl" "railties"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hzpirb33xdqaz44i1mbcfv0icjrghhgaz747llcfsflljd4pa4r";
+      type = "gem";
+    };
+    version = "4.7.0";
+  };
+  faker = {
+    dependencies = ["i18n"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09amnh5d0m3q2gpb0vr9spbfa8l2nc0kl3s79y6sx7a16hrl4vvc";
+      type = "gem";
+    };
+    version = "1.6.6";
+  };
+  github-markdown = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nax4fyyhz9xmi7q6mmc6d1h8hc0cxda9d7q5z0pba88mj00s9fj";
+      type = "gem";
+    };
+    version = "0.6.9";
+  };
+  globalid = {
+    dependencies = ["activesupport"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11plkgyl3w9k4y2scc1igvpgwyz4fnmsr63h2q4j8wkb48nlnhak";
+      type = "gem";
+    };
+    version = "0.3.7";
+  };
+  haml = {
+    dependencies = ["tilt"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mrzjgkygvfii66bbylj2j93na8i89998yi01fin3whwqbvx0m1p";
+      type = "gem";
+    };
+    version = "4.0.7";
+  };
+  httparty = {
+    dependencies = ["multi_xml"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1msa213hclsv14ijh49i1wggf9avhnj2j4xr58m9jx6fixlbggw6";
+      type = "gem";
+    };
+    version = "0.14.0";
+  };
+  i18n = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1i5z1ykl8zhszsxcs8mzl8d0dxgs3ylz8qlzrw74jb0gplkx6758";
+      type = "gem";
+    };
+    version = "0.7.0";
+  };
+  jbuilder = {
+    dependencies = ["activesupport" "multi_json"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jbh1296imd0arc9nl1m71yfd7kg505p8srr1ijpsqv4hhbz5qci";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  jquery-migrate-rails = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pcfs339wki4ax4imb4qi2xb04bbj6j4xvn8x3yn6yf95frrvch6";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  jquery-rails = {
+    dependencies = ["rails-dom-testing" "railties" "thor"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0prqyixv7j2qlq67qdr3miwcyvi27b9a82j51gbpb6vcl0ig2rik";
+      type = "gem";
+    };
+    version = "4.2.1";
+  };
+  jquery-ui-rails = {
+    dependencies = ["railties"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gfygrv4bjpjd2c377lw7xzk1b77rxjyy3w6wl4bq1gkqvyrkx77";
+      type = "gem";
+    };
+    version = "5.0.5";
+  };
+  json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nsby6ry8l9xg3yw4adlhk2pnc7i0h0rznvcss4vk3v74qg0k8lc";
+      type = "gem";
+    };
+    version = "1.8.3";
+  };
+  launchy = {
+    dependencies = ["addressable"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "190lfbiy1vwxhbgn4nl4dcbzxvm049jwc158r2x7kq3g5khjrxa2";
+      type = "gem";
+    };
+    version = "2.4.3";
+  };
+  letter_opener = {
+    dependencies = ["launchy"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pcrdbxvp2x5six8fqn8gf09bn9rd3jga76ds205yph5m8fsda21";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  localized_language_select = {
+    dependencies = ["rails"];
+    source = {
+      fetchSubmodules = false;
+      rev = "85df6b97789de6e29c630808b630e56a1b76f80c";
+      sha256 = "1b2pd8120nrl3s3idpgdzhrjkn9g5sxnkx4j671fjiyhadlr0q5j";
+      type = "git";
+      url = "git://github.com/frab/localized_language_select.git";
+    };
+    version = "0.3.0";
+  };
+  loofah = {
+    dependencies = ["nokogiri"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "109ps521p0sr3kgc460d58b4pr1z4mqggan2jbsf0aajy9s6xis8";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+  mail = {
+    dependencies = ["mime-types"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0c9vqfy0na9b5096i5i4qvrvhwamjnmajhgqi3kdsdfl8l6agmkp";
+      type = "gem";
+    };
+    version = "2.6.4";
+  };
+  method_source = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g5i4w0dmlhzd18dijlqw5gk27bv6dj2kziqzrzb7mpgxgsd1sf2";
+      type = "gem";
+    };
+    version = "0.8.2";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0087z9kbnlqhci7fxh9f6il63hj1k02icq2rs0c6cppmqchr753m";
+      type = "gem";
+    };
+    version = "3.1";
+  };
+  mime-types-data = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04my3746hwa4yvbx1ranhfaqkgf6vavi1kyijjnw8w3dy37vqhkm";
+      type = "gem";
+    };
+    version = "3.2016.0521";
+  };
+  mimemagic = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "101lq4bnjs7ywdcicpw3vbz9amg5gbb4va1626fybd2hawgdx8d9";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  mini_portile2 = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y25adxb1hgg1wb2rn20g3vl07qziq6fz364jc5694611zz863hb";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  minitest = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0300naf4ilpd9sf0k8si9h9sclkizaschn8bpnri5fqmvm9ybdbq";
+      type = "gem";
+    };
+    version = "5.9.1";
+  };
+  multi_json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wpc23ls6v2xbk3l1qncsbz16npvmw8p0b38l8czdzri18mp51xk";
+      type = "gem";
+    };
+    version = "1.12.1";
+  };
+  multi_xml = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i8r7dsz4z79z3j023l8swan7qpbgxbwwz11g38y2vjqjk16v4q8";
+      type = "gem";
+    };
+    version = "0.5.5";
+  };
+  mysql2 = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1v537b7865f4z610rljy8prwmq1yhk3zalp9mcbxn7aqb3g75pra";
+      type = "gem";
+    };
+    version = "0.4.4";
+  };
+  net-scp = {
+    dependencies = ["net-ssh"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b0jqrcsp4bbi4n4mzyf70cp2ysyp6x07j8k8cqgxnvb4i3a134j";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  net-ssh = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11djaq0h3bzzy61dca3l84rrs91702hha4vgg387gviipgz7f3yy";
+      type = "gem";
+    };
+    version = "3.2.0";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "pkg-config"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11sbmpy60ynak6s3794q32lc99hs448msjy8rkp84ay7mq7zqspv";
+      type = "gem";
+    };
+    version = "1.6.7.2";
+  };
+  paper_trail = {
+    dependencies = ["activerecord" "request_store"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w3y2h1w0kml2fmzx4sdcrhnbj273npwrs0cx91xdgy2qfjj6hmr";
+      type = "gem";
+    };
+    version = "5.2.2";
+  };
+  paperclip = {
+    dependencies = ["activemodel" "activesupport" "cocaine" "mime-types" "mimemagic"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r8krh5xg790845wzlc2r7l0jwskw4c4wk9xh4bpprqykwaghg0r";
+      type = "gem";
+    };
+    version = "4.3.7";
+  };
+  pdf-core = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x121sznmhfmjnk0rzpp6djxgi28afpc8avnhn3kzlmpc87r7fyi";
+      type = "gem";
+    };
+    version = "0.1.6";
+  };
+  pg = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bplv27d0f8vwdj51967498pl1cjxq19hhcj4hdjr4h3s72l2z4j";
+      type = "gem";
+    };
+    version = "0.19.0";
+  };
+  pkg-config = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lljiqnm0b4z6iy87lzapwrdfa6ps63x2z5zbs038iig8dqx2g0z";
+      type = "gem";
+    };
+    version = "1.1.7";
+  };
+  polyamorous = {
+    dependencies = ["activerecord"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1501y9l81b2lwb93fkycq8dr1bi6qcdhia3qv4fddnmrdihkl3pv";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  prawn = {
+    dependencies = ["pdf-core" "ttfunk"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04pxzfmmy8a6bv3zvh1mmyy5zi4bj994kq1v6qnlq2xlhvg4cxjc";
+      type = "gem";
+    };
+    version = "0.15.0";
+  };
+  prawn_rails = {
+    dependencies = ["prawn" "railties"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19m1pv2rsl3rf9rni78l8137dy2sq1r2443biv19wi9nis2pvgdg";
+      type = "gem";
+    };
+    version = "0.0.11";
+  };
+  pry = {
+    dependencies = ["coderay" "method_source" "slop"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05xbzyin63aj2prrv8fbq2d5df2mid93m81hz5bvf2v4hnzs42ar";
+      type = "gem";
+    };
+    version = "0.10.4";
+  };
+  pry-byebug = {
+    dependencies = ["byebug" "pry"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pvc94kgxd33p6iz41ghyadq8zfbjhkk07nvz2mbh3yhrc8w7gmw";
+      type = "gem";
+    };
+    version = "3.4.0";
+  };
+  pry-rails = {
+    dependencies = ["pry"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a2iinvabis2xmv0z7z7jmh7bbkkngxj2qixfdg5m6qj9x8k1kx6";
+      type = "gem";
+    };
+    version = "0.3.4";
+  };
+  puma = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k13n500r7v480rcbxm7k09hip0zi7p8zvy3vajj8g9hb7gdcwnp";
+      type = "gem";
+    };
+    version = "3.9.1";
+  };
+  rack = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g9926ln2lw12lfxm4ylq1h6nl0rafl10za3xvjzc87qvnqic87f";
+      type = "gem";
+    };
+    version = "1.6.11";
+  };
+  rack-test = {
+    dependencies = ["rack"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h6x5jq24makgv2fq5qqgjlrk74dxfy62jif9blk43llw8ib2q7z";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  rails = {
+    dependencies = ["actionmailer" "actionpack" "actionview" "activejob" "activemodel" "activerecord" "activesupport" "railties" "sprockets-rails"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1avd16ir7qx23dcnz1b3cafq1lja6rq0w222bs658p9n33rbw54l";
+      type = "gem";
+    };
+    version = "4.2.7.1";
+  };
+  rails-deprecated_sanitizer = {
+    dependencies = ["activesupport"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qxymchzdxww8bjsxj05kbf86hsmrjx40r41ksj0xsixr2gmhbbj";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  rails-dom-testing = {
+    dependencies = ["activesupport" "nokogiri" "rails-deprecated_sanitizer"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1v8jl6803mbqpxh4hn0szj081q1a3ap0nb8ni0qswi7z4la844v8";
+      type = "gem";
+    };
+    version = "1.0.7";
+  };
+  rails-html-sanitizer = {
+    dependencies = ["loofah"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "138fd86kv073zqfx0xifm646w6bgw2lr8snk16lknrrfrss8xnm7";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  rails-observers = {
+    dependencies = ["activemodel"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lsw19jzmvipvrfy2z04hi7r29dvkfc43h43vs67x6lsj9rxwwcy";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  railties = {
+    dependencies = ["actionpack" "activesupport" "rake" "thor"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04rz7cn64zzvq7lnhc9zqmaqmqkq84q25v0ym9lcw75j1cj1mrq4";
+      type = "gem";
+    };
+    version = "4.2.7.1";
+  };
+  rake = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cnjmbcyhm4hacpjn337mg1pnaw6hj09f74clwgh6znx8wam9xla";
+      type = "gem";
+    };
+    version = "11.3.0";
+  };
+  ransack = {
+    dependencies = ["actionpack" "activerecord" "activesupport" "i18n" "polyamorous"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cya3wygwjhj8rckckkl387bmva4nyfvqcl0qhp9hk3zv8y6wxjc";
+      type = "gem";
+    };
+    version = "1.8.2";
+  };
+  redcarpet = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04v85p0bnpf1c7w4n0yr03s35yimxh0idgdrrybl9y13zbw5kgvg";
+      type = "gem";
+    };
+    version = "3.3.4";
+  };
+  request_store = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1va9x0b3ww4chcfqlmi8b14db39di1mwa7qrjbh7ma0lhndvs2zv";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  ri_cal = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1flga63anfpfpdwz6lpm3icpdqmvjq757hihfaw63rlkwq4pf390";
+      type = "gem";
+    };
+    version = "0.8.8";
+  };
+  roust = {
+    dependencies = ["activesupport" "httparty" "mail"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zdnwxxh34psv0iybcdnk9w4dpgpr07j3w1fvigkpccgz5vs82qk";
+      type = "gem";
+    };
+    version = "1.8.9";
+  };
+  rqrcode = {
+    dependencies = ["chunky_png"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h1pnnydgs032psakvg3l779w3ghbn08ajhhhw19hpmnfhrs8k0a";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  sass = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dkj6v26fkg1g0majqswwmhxva7cd6p3psrhdlx93qal72dssywy";
+      type = "gem";
+    };
+    version = "3.4.22";
+  };
+  sass-rails = {
+    dependencies = ["railties" "sass" "sprockets" "sprockets-rails" "tilt"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0iji20hb8crncz14piss1b29bfb6l89sz3ai5fny3iw39vnxkdcb";
+      type = "gem";
+    };
+    version = "5.0.6";
+  };
+  shoulda = {
+    dependencies = ["shoulda-context" "shoulda-matchers"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0csmf15a7mcinfq54lfa4arp0f4b2jmwva55m0p94hdf3pxnjymy";
+      type = "gem";
+    };
+    version = "3.5.0";
+  };
+  shoulda-context = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06wv2ika5zrbxn0m3qxwk0zkbspxids3zmlq3xxays5qmvl1qb55";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  shoulda-matchers = {
+    dependencies = ["activesupport"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0d3ryqcsk1n9y35bx5wxnqbgw4m8b3c79isazdjnnbg8crdp72d0";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  simple_form = {
+    dependencies = ["actionpack" "activemodel"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ii3rkkbj5cc10f5rdiny18ncdh36kijr25cah0ybbr7kigh3v3b";
+      type = "gem";
+    };
+    version = "3.3.1";
+  };
+  slop = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00w8g3j7k7kl8ri2cf1m58ckxk8rn350gp4chfscmgv6pq1spk3n";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  sprockets = {
+    dependencies = ["concurrent-ruby" "rack"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jzsfiladswnzbrwqfiaj1xip68y58rwx0lpmj907vvq47k87gj1";
+      type = "gem";
+    };
+    version = "3.7.0";
+  };
+  sprockets-rails = {
+    dependencies = ["actionpack" "activesupport" "sprockets"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zr9vk2vn44wcn4265hhnnnsciwlmqzqc6bnx78if1xcssxj6x44";
+      type = "gem";
+    };
+    version = "3.2.0";
+  };
+  sqlite3 = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19r06wglnm6479ffj9dl0fa4p5j2wi6dj7k6k3d0rbx7036cv3ny";
+      type = "gem";
+    };
+    version = "1.3.11";
+  };
+  sshkit = {
+    dependencies = ["net-scp" "net-ssh"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wpqvr2dyxwp3shwh0221i1ahyg8vd2hyilmjvdi026l00gk2j4l";
+      type = "gem";
+    };
+    version = "1.11.3";
+  };
+  sucker_punch = {
+    dependencies = ["concurrent-ruby"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l8b53mlzl568kdl4la8kcjjcnawmbl0q6hq9c3kkyippa5c0x55";
+      type = "gem";
+    };
+    version = "2.0.2";
+  };
+  thor = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z";
+      type = "gem";
+    };
+    version = "0.19.1";
+  };
+  thread_safe = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hq46wqsyylx5afkp6jmcihdpv4ynzzq9ygb6z2pb1cbz5js0gcr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  tilt = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lgk8bfx24959yq1cn55php3321wddw947mgj07bxfnwyipy9hqf";
+      type = "gem";
+    };
+    version = "2.0.5";
+  };
+  transitions = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11byymi45s4pxbhj195277r16dyhxkqc2jwf7snbhan23izzay2c";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  ttfunk = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jvgqhp0i6v9d7davwdn20skgi508yd0xcf1h4p9f5dlslmpnkhj";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c01p3kg6xvy1cgjnzdfq45fggbwish8krd0h864jvbpybyx7cgx";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  uglifier = {
+    dependencies = ["execjs"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f30s1631k03x4wm7xyc79g92pppzvyysa773zsaq2kcry1pmifc";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  uniform_notifier = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jha0l7x602g5rvah960xl9r0f3q25gslj39i0x1vai8i5z6zr1l";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  will_paginate = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xlls78hkkmk33q1rb84rgg2xr39g06a1z1239nq59c825g83k01";
+      type = "gem";
+    };
+    version = "3.1.3";
+  };
+  yard = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gjl0sh7h0a9s67pllagw8192kscljg4y8nddfrqhji4g21yvcas";
+      type = "gem";
+    };
+    version = "0.9.5";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/servers/web-apps/matomo/bootstrap.php b/nixpkgs/pkgs/servers/web-apps/matomo/bootstrap.php
new file mode 100644
index 000000000000..a8163f33e5c0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/matomo/bootstrap.php
@@ -0,0 +1,6 @@
+<?php
+// get PIWIK_USER_PATH from environment variable,
+// so this bootstrap.php can be read-only but still configure PIWIK_USER_PATH at runtime
+if ($path = getenv('PIWIK_USER_PATH')) {
+  define('PIWIK_USER_PATH', $path);
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/matomo/default.nix b/nixpkgs/pkgs/servers/web-apps/matomo/default.nix
new file mode 100644
index 000000000000..9c1180ffb494
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/matomo/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, fetchurl, makeWrapper, php }:
+
+stdenv.mkDerivation rec {
+  name = "matomo-${version}";
+  version = "3.7.0";
+
+  src = fetchurl {
+    # TODO: As soon as the tarballs are renamed as well on future releases, this should be enabled again
+    # url = "https://builds.matomo.org/${name}.tar.gz";
+    url = "https://builds.matomo.org/piwik-${version}.tar.gz";
+    sha256 = "17ihsmwdfrx1c1v8cp5pc3swx3h0i0l9pjrc8jyww08kavfbfly6";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  # make-localhost-default-database-server.patch:
+  #   This changes the default value of the database server field
+  #   from 127.0.0.1 to localhost.
+  #   unix socket authentication only works with localhost,
+  #   but password-based SQL authentication works with both.
+  # TODO: is upstream interested in this?
+  # -> discussion at https://github.com/matomo-org/matomo/issues/12646
+  patches = [ ./make-localhost-default-database-host.patch ];
+
+  # this bootstrap.php adds support for getting PIWIK_USER_PATH
+  # from an environment variable. Point it to a mutable location
+  # to be able to use matomo read-only from the nix store
+  postPatch = ''
+    cp ${./bootstrap.php} bootstrap.php
+  '';
+
+  # TODO: future versions might rename the PIWIK_… variables to MATOMO_…
+  # TODO: Move more unnecessary files from share/, especially using PIWIK_INCLUDE_PATH.
+  #       See https://forum.matomo.org/t/bootstrap-php/5926/10 and
+  #       https://github.com/matomo-org/matomo/issues/11654#issuecomment-297730843
+  installPhase = ''
+    runHook preInstall
+
+    # copy evertything to share/, used as webroot folder, and then remove what's known to be not needed
+    mkdir -p $out/share
+    cp -ra * $out/share/
+    # tmp/ is created by matomo in PIWIK_USER_PATH
+    rmdir $out/share/tmp
+    # config/ needs to be copied to PIWIK_USER_PATH anyway
+    mv $out/share/config $out/
+
+    makeWrapper ${php}/bin/php $out/bin/matomo-console \
+      --add-flags "$out/share/console"
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A real-time web analytics application";
+    license = licenses.gpl3Plus;
+    homepage = https://matomo.org/;
+    platforms = platforms.all;
+    maintainers = [ maintainers.florianjacob ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/matomo/make-localhost-default-database-host.patch b/nixpkgs/pkgs/servers/web-apps/matomo/make-localhost-default-database-host.patch
new file mode 100644
index 000000000000..48808ac2ccca
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/matomo/make-localhost-default-database-host.patch
@@ -0,0 +1,13 @@
+diff --git a/plugins/Installation/FormDatabaseSetup.php b/plugins/Installation/FormDatabaseSetup.php
+index 9364f49870..2625cbb91b 100644
+--- a/plugins/Installation/FormDatabaseSetup.php
++++ b/plugins/Installation/FormDatabaseSetup.php
+@@ -82,7 +82,7 @@ class FormDatabaseSetup extends QuickForm2
+ 
+         // default values
+         $this->addDataSource(new HTML_QuickForm2_DataSource_Array(array(
+-                                                                       'host'          => '127.0.0.1',
++                                                                       'host'          => 'localhost',
+                                                                        'type'          => $defaultDatabaseType,
+                                                                        'tables_prefix' => 'matomo_',
+                                                                   )));
diff --git a/nixpkgs/pkgs/servers/web-apps/morty/default.nix b/nixpkgs/pkgs/servers/web-apps/morty/default.nix
new file mode 100644
index 000000000000..e4dd9b0f2dc7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/morty/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  name = "morty-${version}";
+  version = "0.2.0";
+
+  goPackagePath = "github.com/asciimoo/morty";
+
+  src = fetchgit {
+    rev = "v${version}";
+    url = "https://github.com/asciimoo/morty";
+    sha256 = "1wvrdlwbpzizfg7wrcfyf1x6qllp3aw425n88z516wc9jalfqrrm";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/asciimoo/morty";
+    maintainers = with maintainers; [ leenaars ];
+    license = licenses.agpl3;
+    description = "Privacy aware web content sanitizer proxy as a service";
+    longDescription = ''
+      Morty is a web content sanitizer proxy as a service. It rewrites web
+      pages to exclude malicious HTML tags and attributes. It also replaces
+      external resource references to prevent third party information leaks.
+
+      The main goal of morty is to provide a result proxy for searx, but it
+      can be used as a standalone sanitizer service too.
+
+      Features:
+
+      * HTML sanitization
+      * Rewrites HTML/CSS external references to locals
+      * JavaScript blocking
+      * No Cookies forwarded
+      * No Referrers
+      * No Caching/Etag
+      * Supports GET/POST forms and IFrames
+      * Optional HMAC URL verifier key to prevent service abuse
+'';
+   };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/morty/deps.nix b/nixpkgs/pkgs/servers/web-apps/morty/deps.nix
new file mode 100644
index 000000000000..643fc5bb7636
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/morty/deps.nix
@@ -0,0 +1,57 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/klauspost/compress";
+    fetch = {
+      type = "git";
+      url = "https://github.com/klauspost/compress";
+      rev = "5698df94daded084fa836b7df2ffbf6cbd3dd63a";
+      sha256 = "1jligmzsyv08dysdaih3r95ki0dqnay9wlzganl4r0mamwhq22wz";
+    };
+  }
+  {
+    goPackagePath = "github.com/klauspost/cpuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/klauspost/cpuid";
+      rev = "ae832f27941af41db13bd6d8efd2493e3b22415a";
+      sha256 = "1h46y0lbzx0zjdnwbh0znf2ghgbvpzk1p269kkn7v8645xk3apk9";
+    };
+  }
+  {
+    goPackagePath = "github.com/valyala/bytebufferpool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/valyala/bytebufferpool";
+      rev = "e746df99fe4a3986f4d4f79e13c1e0117ce9c2f7";
+      sha256 = "01lqzjddq6kz9v41nkky7wbgk7f1cw036sa7ldz10d82g5klzl93";
+    };
+  }
+  {
+    goPackagePath = "github.com/valyala/fasthttp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/valyala/fasthttp";
+      rev = "e5f51c11919d4f66400334047b897ef0a94c6f3c";
+      sha256 = "0g24gys7xk449jd9ja89vr33i3amcb12jnmhsrmd5r2q8byv3l09";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "f5dfe339be1d06f81b22525fe34671ee7d2c8904";
+      sha256 = "01y9j7pjnnld4ipmzjvs0hls0hh698f2sga8cxaw5y6r5j7igaah";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "4e4a3210bb54bb31f6ab2cdca2edcc0b50c420c1";
+      sha256 = "10505r4xw1njnr2ns1s5r62s4pwif0kfaa30xxpgpz6qxrrmw15s";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/servers/web-apps/pgpkeyserver-lite/default.nix b/nixpkgs/pkgs/servers/web-apps/pgpkeyserver-lite/default.nix
new file mode 100644
index 000000000000..c4f49b36bf80
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/pgpkeyserver-lite/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, lib } : 
+
+stdenv.mkDerivation rec {
+  name = "pgpkeyserver-lite-${version}";
+  version = "2017-07-18";
+
+  src = fetchFromGitHub {
+    owner = "mattrude";
+    repo = "pgpkeyserver-lite";
+    rev = "a038cb7";
+    sha256 = "12pn92pcpv38b2gmamppn9yzdn7x52pgxnzpal22gqsxwimhs2rx";
+  };
+
+  installPhase = ''
+    mkdir -p $out
+    cp -R 404.html assets favicon.ico index.html robots.txt $out
+  '';
+
+  meta = {
+    homepage = https://github.com/mattrude/pgpkeyserver-lite;
+    description = "A lightweight static front-end for a sks keyserver.";
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.calbrecht ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/restya-board/default.nix b/nixpkgs/pkgs/servers/web-apps/restya-board/default.nix
new file mode 100644
index 000000000000..946606e37013
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/restya-board/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchurl, unzip }:
+
+let
+
+  hide-card-id = fetchurl {
+    url = "https://github.com/RestyaPlatform/board-apps/releases/download/v2/r_hide_card_id-v0.1.2.zip";
+    sha256 = "1scm696rs8wx0z2y0g6r9vf01b0yay79azw8n785c6zdvrbqw7dp";
+  };
+
+  togetherjs = fetchurl {
+    url = "https://github.com/RestyaPlatform/board-apps/releases/download/v2/r_togetherjs-v0.1.2.zip";
+    sha256 = "1kms7z0ci15plwbs6nxvz15w0ym3in39msbncaj3cn0p72kvx5cm";
+  };
+
+in
+
+stdenv.mkDerivation rec {
+  name = "rstya-board-${version}";
+  version = "0.6";
+
+  src = fetchurl {
+    url = "https://github.com/RestyaPlatform/board/releases/download/v${version}/board-v${version}.zip";
+    sha256 = "1js8c69qmga7bikp66fqhch3n2vw49918z32q88lz3havqzai8gd";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  buildCommand = ''
+    mkdir $out
+    unzip -d $out $src
+
+    cd $out
+    patch -p1 < ${./fix_request-uri.patch}
+
+    chmod +x $out/server/php/shell/*.sh
+
+    mkdir $out/client/apps
+    unzip -d $out/client/apps ${hide-card-id}
+    unzip -d $out/client/apps ${togetherjs}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Web-based kanban board";
+    license = licenses.osl3;
+    homepage = http://restya.com;
+    maintainers = with maintainers; [ tstrobel ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/web-apps/restya-board/fix_request-uri.patch b/nixpkgs/pkgs/servers/web-apps/restya-board/fix_request-uri.patch
new file mode 100644
index 000000000000..9b96756e8299
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/restya-board/fix_request-uri.patch
@@ -0,0 +1,12 @@
+diff --git a/server/php/R/r.php b/server/php/R/r.php
+--- a/server/php/R/r.php
++++ b/server/php/R/r.php
+@@ -18,7 +18,7 @@ $r_debug = '';
+ $authUser = $client = $form = array();
+ $_server_protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') ? 'https' : 'http';
+ $_server_domain_url = $_server_protocol . '://' . $_SERVER['HTTP_HOST']; // http://localhost
+-header('x-response-url:' . $_SERVER[REQUEST_URI]);
++header('x-response-url:' . $_SERVER['REQUEST_URI']);
+ header('Access-Control-Allow-Origin: *');
+ header('Access-Control-Allow-Methods: *');
+ require_once '../config.inc.php';
diff --git a/nixpkgs/pkgs/servers/web-apps/searx/default.nix b/nixpkgs/pkgs/servers/web-apps/searx/default.nix
new file mode 100644
index 000000000000..cde8f9fecbc8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/searx/default.nix
@@ -0,0 +1,50 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "searx";
+  version = "0.14.0";
+
+  # Can not use PyPI because certain test files are missing.
+  src = fetchFromGitHub {
+    owner = "asciimoo";
+    repo = "searx";
+    rev = "v${version}";
+    sha256 = "046xg6xcs1mxgahz7kwf3fsmwd99q3hhms6pdjlvyczidlfhpmxl";
+  };
+
+  postPatch = ''
+    substituteInPlace requirements.txt \
+      --replace 'certifi==2017.11.5' 'certifi' \
+      --replace 'flask==0.12.2' 'flask==0.12.*' \
+      --replace 'flask-babel==0.11.2' 'flask-babel==0.11.*' \
+      --replace 'lxml==4.1.1' 'lxml==4.1.*' \
+      --replace 'idna==2.5' 'idna' \
+      --replace 'pygments==2.1.3' 'pygments>=2.1,<3.0' \
+      --replace 'pyopenssl==17.4.0' 'pyopenssl' \
+      --replace 'python-dateutil==2.6.1' 'python-dateutil==2.6.*'
+  '';
+
+  propagatedBuildInputs = [
+    pyyaml lxml grequests flaskbabel flask requests
+    gevent speaklater Babel pytz dateutil pygments
+    pyasn1 pyasn1-modules ndg-httpsclient certifi pysocks
+  ];
+
+  checkInputs = [
+    splinter mock plone-testing robotsuite unittest2 selenium
+  ];
+
+  preCheck = ''
+    rm tests/test_robot.py # A variable that is imported is commented out
+    rm tests/unit/engines/pubmed.py
+  '';
+
+  meta = with lib; {
+    homepage = https://github.com/asciimoo/searx;
+    description = "A privacy-respecting, hackable metasearch engine";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ matejc fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/selfoss/default.nix b/nixpkgs/pkgs/servers/web-apps/selfoss/default.nix
new file mode 100644
index 000000000000..615efa3b3672
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/selfoss/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  name = "selfoss-${version}";
+  version = "2.18";
+
+  src = fetchurl {
+    url = "https://github.com/SSilence/selfoss/releases/download/${version}/${name}.zip";
+    sha256 = "1vd699r1kjc34n8avggckx2b0daj5rmgrj997sggjw2inaq4cg8b";
+  };
+
+  sourceRoot = ".";
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    mkdir $out
+    cp -ra * $out/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Web-based news feed (RSS/Atom) aggregator";
+    homepage = https://selfoss.aditu.de;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ jtojnar regnat ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/shaarli/default.nix b/nixpkgs/pkgs/servers/web-apps/shaarli/default.nix
new file mode 100644
index 000000000000..bfb98add9433
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/shaarli/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "shaarli-${version}";
+  version = "0.10.2";
+
+  src = fetchurl {
+    url = "https://github.com/shaarli/Shaarli/releases/download/v${version}/shaarli-v${version}-full.tar.gz";
+    sha256 = "0h8sspj7siy3vgpi2i3gdrjcr5935fr4dfwq2zwd70sjx2sh9s78";
+  };
+
+  outputs = [ "out" "doc" ];
+
+  patchPhase = ''
+    substituteInPlace index.php \
+      --replace "new ConfigManager();" "new ConfigManager(getenv('SHAARLI_CONFIG'));"
+  '';
+
+#    Point $SHAARLI_CONFIG to your configuration file, see https://github.com/shaarli/Shaarli/wiki/Shaarli-configuration.
+#    For example:
+#      <?php /*
+#      {
+#          "credentials": {
+#              "login": "user",
+#              "hash": "(password hash)",
+#              "salt": "(password salt)"
+#          },
+#          "resource": {
+#              "data_dir": "\/var\/lib\/shaarli",
+#              "config": "\/var\/lib\/shaarli\/config.json.php",
+#              "datastore": "\/var\/lib\/shaarli\/datastore.php",
+#              "ban_file": "\/var\/lib\/shaarli\/ipbans.php",
+#              "updates": "\/var\/lib\/shaarli\/updates.txt",
+#              "log": "\/var\/lib\/shaarli\/log.txt",
+#              "update_check": "\/var\/lib\/shaarli\/lastupdatecheck.txt",
+#              "raintpl_tmp": "\/var\/lib\/shaarli\/tmp",
+#              "thumbnails_cache": "\/var\/lib\/shaarli\/cache",
+#              "page_cache": "\/var\/lib\/shaarli\/pagecache"
+#          },
+#          "updates": {
+#              "check_updates": false
+#          }
+#      }
+#      */ ?>
+
+  installPhase = ''
+    rm -r {cache,pagecache,tmp,data}/
+    mkdir -p $doc/share/doc
+    mv doc/ $doc/share/doc/shaarli
+    mkdir $out/
+    cp -R ./* $out
+  '';
+
+  meta = with stdenv.lib; {
+    description = "The personal, minimalist, super-fast, database free, bookmarking service";
+    license = licenses.gpl3Plus;
+    homepage = https://github.com/shaarli/Shaarli;
+    maintainers = with maintainers; [ schneefux ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/shaarli/material-theme.nix b/nixpkgs/pkgs/servers/web-apps/shaarli/material-theme.nix
new file mode 100644
index 000000000000..939976b0a269
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/shaarli/material-theme.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "shaarli-material-${version}";
+  version = "0.9.5";
+
+  src = fetchFromGitHub {
+    owner = "kalvn";
+    repo = "Shaarli-Material";
+    rev = "v${version}";
+    sha256 = "1bxw74ksvfv46995iwc7jhvl78hd84lcq3h9iyxvs8gpkhkapv55";
+  };
+
+  patchPhase = ''
+    for f in material/*.html
+    do
+      substituteInPlace $f \
+        --replace '.min.css?v={$version_hash}"' '.min.css#"' \
+        --replace '.min.js?v={$version_hash}"'  '.min.js#"' \
+        --replace '.png"'     '.png#"'
+    done
+  '';
+
+  installPhase = ''
+    mv material/ $out
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A theme base on Google's Material Design for Shaarli, the superfast delicious clone";
+    license = licenses.mit;
+    homepage = https://github.com/kalvn/Shaarli-Material;
+    maintainers = with maintainers; [ schneefux ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/virtlyst/add-admin-password-env.patch b/nixpkgs/pkgs/servers/web-apps/virtlyst/add-admin-password-env.patch
new file mode 100644
index 000000000000..e20acdb04a9e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/virtlyst/add-admin-password-env.patch
@@ -0,0 +1,14 @@
+diff --git a/src/virtlyst.cpp b/src/virtlyst.cpp
+index acd195d..8809e4f 100644
+--- a/src/virtlyst.cpp
++++ b/src/virtlyst.cpp
+@@ -340,7 +340,8 @@ bool Virtlyst::createDB()
+         qCCritical(VIRTLYST) << "Error creating database" << query.lastError().text();
+         return false;
+     }
+-    const QString password = QString::fromLatin1(QUuid::createUuid().toRfc4122().toHex());
++    const QString password = qEnvironmentVariable("VIRTLYST_ADMIN_PASSWORD",
++            QString::fromLatin1(QUuid::createUuid().toRfc4122().toHex()));
+     query.bindValue(QStringLiteral(":password"), QString::fromLatin1(
+                         CredentialPassword::createPassword(password.toUtf8(), QCryptographicHash::Sha256, 10000, 16, 16)));
+     if (!query.exec()) {
diff --git a/nixpkgs/pkgs/servers/web-apps/virtlyst/default.nix b/nixpkgs/pkgs/servers/web-apps/virtlyst/default.nix
new file mode 100644
index 000000000000..0c51b6b13cdd
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/virtlyst/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, fetchFromGitHub, cmake, pkgconfig, autoPatchelfHook
+, qtbase, libvirt, cutelyst, grantlee }:
+
+stdenv.mkDerivation rec {
+  name = "virtlyst-${version}";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "cutelyst";
+    repo = "Virtlyst";
+    rev = "v${version}";
+    sha256 = "1vgjai34hqppkpl0ryxkyhpm9dsx1chs3bii3wc3h40hl80n6dgy";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig autoPatchelfHook ];
+  buildInputs = [ qtbase libvirt cutelyst grantlee ];
+
+  installPhase = ''
+    mkdir -p $out/lib
+    cp src/libVirtlyst.so $out/lib
+    cp -r ../root $out
+  '';
+
+  patches = [ ./add-admin-password-env.patch ];
+
+  meta = with lib; {
+    description = "Web interface to manage virtual machines with libvirt";
+    homepage = https://github.com/cutelyst/Virtlyst;
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/wallabag/default.nix b/nixpkgs/pkgs/servers/web-apps/wallabag/default.nix
new file mode 100644
index 000000000000..ed399f58bcf1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/wallabag/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "wallabag-${version}";
+  version = "2.3.3";
+
+  # remember to rm -r var/cache/* after a rebuild or unexpected errors will occur
+
+  src = fetchurl {
+    url = "https://static.wallabag.org/releases/wallabag-release-${version}.tar.gz";
+    sha256 = "12q5daigqn4xqp9pyfzac881qm9ywrflm8sivhl3spczyh41gwpg";
+  };
+
+  outputs = [ "out" ];
+
+  patches = [ ./wallabag-data.patch ]; # exposes $WALLABAG_DATA
+
+  prePatch = ''
+    rm Makefile # use the "shared hosting" package with bundled dependencies
+  '';
+
+  installPhase = ''
+    mkdir $out/
+    cp -R * $out/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Web page archiver";
+    longDescription = ''
+      wallabag is a self hostable application for saving web pages.
+
+      Point the environment variable $WALLABAG_DATA to a data directory that contains the folder `app/config` which must be a clone of wallabag's configuration files with your customized `parameters.yml`. These need to be updated every package upgrade.
+      After a package upgrade, empty the `var/cache` folder.
+    '';
+    license = licenses.mit;
+    homepage = http://wallabag.org;
+    maintainers = with maintainers; [ schneefux ];
+    platforms = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/web-apps/wallabag/wallabag-data.patch b/nixpkgs/pkgs/servers/web-apps/wallabag/wallabag-data.patch
new file mode 100644
index 000000000000..086e93959800
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/wallabag/wallabag-data.patch
@@ -0,0 +1,26 @@
+diff --git a/app/AppKernel.php b/app/AppKernel.php
+index 40726f05..7d44e600 100644
+--- a/app/AppKernel.php
++++ b/app/AppKernel.php
+@@ -58,14 +58,19 @@ class AppKernel extends Kernel
+         return $bundles;
+     }
+ 
++    public function getProjectDir()
++    {
++        return getenv('WALLABAG_DATA') ?: dirname(__DIR__);
++    }
++
+     public function getCacheDir()
+     {
+-        return dirname(__DIR__) . '/var/cache/' . $this->getEnvironment();
++        return $this->getProjectDir() . '/var/cache/' . $this->getEnvironment();
+     }
+ 
+     public function getLogDir()
+     {
+-        return dirname(__DIR__) . '/var/logs';
++        return $this->getProjectDir() . '/var/logs';
+     }
+ 
+     public function registerContainerConfiguration(LoaderInterface $loader)
diff --git a/nixpkgs/pkgs/servers/web-apps/wordpress/default.nix b/nixpkgs/pkgs/servers/web-apps/wordpress/default.nix
new file mode 100644
index 000000000000..57254713f4b0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/wordpress/default.nix
@@ -0,0 +1,13 @@
+  # Upgrading? We have a test! nix-build ./nixos/tests/wordpress.nix
+{ fetchFromGitHub, lib } : fetchFromGitHub {
+  owner = "WordPress";
+  repo = "WordPress";
+  rev = "4.9.1";
+  sha256 = "0d931mv6wbgnc7f15nisnn5al0ffi19zya2iwdzw98s4klpaq955";
+  meta = {
+    homepage = https://wordpress.org;
+    description = "WordPress is open source software you can use to create a beautiful website, blog, or app.";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.basvandijk ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/webmetro/default.nix b/nixpkgs/pkgs/servers/webmetro/default.nix
new file mode 100644
index 000000000000..45369f5f5a06
--- /dev/null
+++ b/nixpkgs/pkgs/servers/webmetro/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "webmetro";
+  name = "${pname}-${version}";
+  version = "unstable-20180426";
+
+  src = fetchFromGitHub {
+    owner = "Tangent128";
+    repo = pname;
+    rev = "4f6cc00fe647bd311d00a8a4cb53ab08f20a04f9";
+    sha256 = "1n2c7ygs8qsd5zgii6fqqcwg427bsij082bg4ijnzkq5630dx651";
+  };
+
+  cargoSha256 = "0drf331qic1gf58j7izwp0q2l4w0dyrhr19rd2y5k43cw4m1nq59";
+
+  meta = with stdenv.lib; {
+    description = "Simple relay server for broadcasting a WebM stream";
+    longDescription = ''
+    Webmetro is a simple relay server for broadcasting a WebM stream
+    from one uploader to many downloaders, via HTTP.
+    The initialization segment is remembered, so that viewers can join
+    mid-stream.  Cluster timestamps are rewritten to be monotonic, so multiple
+    (compatibly-encoded) webm files can be chained together without
+    clients needing to reconnect.
+    '';
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/x11/quartz-wm/default.nix b/nixpkgs/pkgs/servers/x11/quartz-wm/default.nix
new file mode 100644
index 000000000000..ccb3937ac85f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/quartz-wm/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, xorg, pixman, pkgconfig, AppKit, Foundation, Xplugin, cf-private }:
+
+let version = "1.3.1";
+in stdenv.mkDerivation {
+  name = "quartz-wm-${version}";
+  src = fetchurl {
+    url = "http://xquartz-dl.macosforge.org/src/quartz-wm-${version}.tar.xz";
+    sha256 = "1j8zd3p7rhay1s3sxq6anw78k5s59mx44xpqla2ianl62346a5g9";
+  };
+  patches = [
+    ./no_title_crash.patch
+    ./extern-patch.patch
+  ];
+  buildInputs = [
+    xorg.libXinerama
+    xorg.libAppleWM
+    xorg.applewmproto
+    xorg.libXrandr
+    xorg.libXext
+    pixman
+    pkgconfig
+    AppKit Xplugin Foundation
+    # Needed for CFNotificationCenterAddObserver symbols.
+    cf-private
+  ];
+  meta = with stdenv.lib; {
+    license = licenses.apsl20;
+    platforms = platforms.darwin;
+    maintainers = with maintainers; [ matthewbauer ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/x11/quartz-wm/extern-patch.patch b/nixpkgs/pkgs/servers/x11/quartz-wm/extern-patch.patch
new file mode 100644
index 000000000000..cd7b47fc7b05
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/quartz-wm/extern-patch.patch
@@ -0,0 +1,13 @@
+diff --git a/src/x-list.h b/src/x-list.h
+index bb85c02..059c88b 100644
+--- a/src/x-list.h
++++ b/src/x-list.h
+@@ -39,7 +39,7 @@
+ #endif
+ 
+ #ifndef X_EXTERN
+-# define X_EXTERN __private_extern__
++# define X_EXTERN extern
+ #endif
+ 
+ X_EXTERN void X_PFX (list_free_1) (x_list *node);
diff --git a/nixpkgs/pkgs/servers/x11/quartz-wm/no_title_crash.patch b/nixpkgs/pkgs/servers/x11/quartz-wm/no_title_crash.patch
new file mode 100644
index 000000000000..751a35072bcf
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/quartz-wm/no_title_crash.patch
@@ -0,0 +1,25 @@
+commit c28527b1340c51f2b492a31e49127106cebbfc5d
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date:   Fri Jun 1 10:38:37 2012 -0700
+
+    Fix a crash when minimizing windows without titles
+    
+    <rdar://problem/11575791>
+    
+    Regression-from: 21f210c923aa5d79400ce46275084f2636c92bd9
+    
+    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+diff --git a/src/x-window.m b/src/x-window.m
+index a210c6a..e3b9066 100644
+--- a/src/x-window.m
++++ b/src/x-window.m
+@@ -2139,7 +2139,7 @@ - (void) do_collapse
+     if (wid == XP_NULL_NATIVE_WINDOW_ID)
+         return;
+ 
+-    title_c = strdup([_title UTF8String]);
++    title_c = strdup([[self title] UTF8String]);
+     assert(title_c);
+ 
+     err = qwm_dock_minimize_item_with_title_async (wid, title_c);
diff --git a/nixpkgs/pkgs/servers/x11/xorg/builder.sh b/nixpkgs/pkgs/servers/x11/xorg/builder.sh
new file mode 100644
index 000000000000..5a832cb14d53
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/builder.sh
@@ -0,0 +1,40 @@
+# This is the builder for all X.org components.
+source $stdenv/setup
+
+
+# After installation, automatically add all "Requires" fields in the
+# pkgconfig files (*.pc) to the propagated build inputs.
+origPostInstall=$postInstall
+postInstall() {
+    if test -n "$origPostInstall"; then eval "$origPostInstall"; fi
+
+    local r p requires
+    set +o pipefail
+    requires=$(grep "Requires:" ${!outputDev}/lib/pkgconfig/*.pc | \
+        sed "s/Requires://" | sed "s/,/ /g")
+    set -o pipefail
+
+    echo "propagating requisites $requires"
+
+    for r in $requires; do
+        for p in "${pkgsHostHost[@]}" "${pkgsHostTarget[@]}"; do
+            if test -e $p/lib/pkgconfig/$r.pc; then
+                echo "  found requisite $r in $p"
+                propagatedBuildInputs+=" $p"
+            fi
+        done
+    done
+}
+
+
+installFlags="appdefaultdir=$out/share/X11/app-defaults $installFlags"
+
+
+if test -n "$x11BuildHook"; then
+    source $x11BuildHook
+fi
+
+
+enableParallelBuilding=1
+
+genericBuild
diff --git a/nixpkgs/pkgs/servers/x11/xorg/darwin/dri/GL/internal/dri_interface.h b/nixpkgs/pkgs/servers/x11/xorg/darwin/dri/GL/internal/dri_interface.h
new file mode 100644
index 000000000000..b012570ae133
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/darwin/dri/GL/internal/dri_interface.h
@@ -0,0 +1,1409 @@
+/*
+ * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2007-2008 Red Hat, Inc.
+ * (C) Copyright IBM Corporation 2004
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
+ * license, and/or sell copies of the Software, and to permit persons to whom
+ * the Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file dri_interface.h
+ *
+ * This file contains all the types and functions that define the interface
+ * between a DRI driver and driver loader.  Currently, the most common driver
+ * loader is the XFree86 libGL.so.  However, other loaders do exist, and in
+ * the future the server-side libglx.a will also be a loader.
+ * 
+ * \author Kevin E. Martin <kevin@precisioninsight.com>
+ * \author Ian Romanick <idr@us.ibm.com>
+ * \author Kristian Høgsberg <krh@redhat.com>
+ */
+
+#ifndef DRI_INTERFACE_H
+#define DRI_INTERFACE_H
+
+/* For archs with no drm.h */
+#if defined(__APPLE__) || defined(__CYGWIN__) || defined(__GNU__)
+#ifndef __NOT_HAVE_DRM_H
+#define __NOT_HAVE_DRM_H
+#endif
+#endif
+
+#ifndef __NOT_HAVE_DRM_H
+#include <drm.h>
+#else
+typedef unsigned int drm_context_t;
+typedef unsigned int drm_drawable_t;
+typedef struct drm_clip_rect drm_clip_rect_t;
+#endif
+
+/**
+ * \name DRI interface structures
+ *
+ * The following structures define the interface between the GLX client
+ * side library and the DRI (direct rendering infrastructure).
+ */
+/*@{*/
+typedef struct __DRIdisplayRec		__DRIdisplay;
+typedef struct __DRIscreenRec		__DRIscreen;
+typedef struct __DRIcontextRec		__DRIcontext;
+typedef struct __DRIdrawableRec		__DRIdrawable;
+typedef struct __DRIconfigRec		__DRIconfig;
+typedef struct __DRIframebufferRec	__DRIframebuffer;
+typedef struct __DRIversionRec		__DRIversion;
+
+typedef struct __DRIcoreExtensionRec		__DRIcoreExtension;
+typedef struct __DRIextensionRec		__DRIextension;
+typedef struct __DRIcopySubBufferExtensionRec	__DRIcopySubBufferExtension;
+typedef struct __DRIswapControlExtensionRec	__DRIswapControlExtension;
+typedef struct __DRIframeTrackingExtensionRec	__DRIframeTrackingExtension;
+typedef struct __DRImediaStreamCounterExtensionRec	__DRImediaStreamCounterExtension;
+typedef struct __DRItexOffsetExtensionRec	__DRItexOffsetExtension;
+typedef struct __DRItexBufferExtensionRec	__DRItexBufferExtension;
+typedef struct __DRIlegacyExtensionRec		__DRIlegacyExtension;
+typedef struct __DRIswrastExtensionRec		__DRIswrastExtension;
+typedef struct __DRIbufferRec			__DRIbuffer;
+typedef struct __DRIdri2ExtensionRec		__DRIdri2Extension;
+typedef struct __DRIdri2LoaderExtensionRec	__DRIdri2LoaderExtension;
+typedef struct __DRI2flushExtensionRec	__DRI2flushExtension;
+typedef struct __DRI2throttleExtensionRec	__DRI2throttleExtension;
+
+
+typedef struct __DRIimageLoaderExtensionRec     __DRIimageLoaderExtension;
+typedef struct __DRIimageDriverExtensionRec     __DRIimageDriverExtension;
+
+/*@}*/
+
+
+/**
+ * Extension struct.  Drivers 'inherit' from this struct by embedding
+ * it as the first element in the extension struct.
+ *
+ * We never break API in for a DRI extension.  If we need to change
+ * the way things work in a non-backwards compatible manner, we
+ * introduce a new extension.  During a transition period, we can
+ * leave both the old and the new extension in the driver, which
+ * allows us to move to the new interface without having to update the
+ * loader(s) in lock step.
+ *
+ * However, we can add entry points to an extension over time as long
+ * as we don't break the old ones.  As we add entry points to an
+ * extension, we increase the version number.  The corresponding
+ * #define can be used to guard code that accesses the new entry
+ * points at compile time and the version field in the extension
+ * struct can be used at run-time to determine how to use the
+ * extension.
+ */
+struct __DRIextensionRec {
+    const char *name;
+    int version;
+};
+
+/**
+ * The first set of extension are the screen extensions, returned by
+ * __DRIcore::getExtensions().  This entry point will return a list of
+ * extensions and the loader can use the ones it knows about by
+ * casting them to more specific extensions and advertising any GLX
+ * extensions the DRI extensions enables.
+ */
+
+/**
+ * Used by drivers to indicate support for setting the read drawable.
+ */
+#define __DRI_READ_DRAWABLE "DRI_ReadDrawable"
+#define __DRI_READ_DRAWABLE_VERSION 1
+
+/**
+ * Used by drivers that implement the GLX_MESA_copy_sub_buffer extension.
+ */
+#define __DRI_COPY_SUB_BUFFER "DRI_CopySubBuffer"
+#define __DRI_COPY_SUB_BUFFER_VERSION 1
+struct __DRIcopySubBufferExtensionRec {
+    __DRIextension base;
+    void (*copySubBuffer)(__DRIdrawable *drawable, int x, int y, int w, int h);
+};
+
+/**
+ * Used by drivers that implement the GLX_SGI_swap_control or
+ * GLX_MESA_swap_control extension.
+ */
+#define __DRI_SWAP_CONTROL "DRI_SwapControl"
+#define __DRI_SWAP_CONTROL_VERSION 1
+struct __DRIswapControlExtensionRec {
+    __DRIextension base;
+    void (*setSwapInterval)(__DRIdrawable *drawable, unsigned int inteval);
+    unsigned int (*getSwapInterval)(__DRIdrawable *drawable);
+};
+
+/**
+ * Used by drivers that implement the GLX_MESA_swap_frame_usage extension.
+ */
+#define __DRI_FRAME_TRACKING "DRI_FrameTracking"
+#define __DRI_FRAME_TRACKING_VERSION 1
+struct __DRIframeTrackingExtensionRec {
+    __DRIextension base;
+
+    /**
+     * Enable or disable frame usage tracking.
+     * 
+     * \since Internal API version 20030317.
+     */
+    int (*frameTracking)(__DRIdrawable *drawable, GLboolean enable);
+
+    /**
+     * Retrieve frame usage information.
+     * 
+     * \since Internal API version 20030317.
+     */
+    int (*queryFrameTracking)(__DRIdrawable *drawable,
+			      int64_t * sbc, int64_t * missedFrames,
+			      float * lastMissedUsage, float * usage);
+};
+
+
+/**
+ * Used by drivers that implement the GLX_SGI_video_sync extension.
+ */
+#define __DRI_MEDIA_STREAM_COUNTER "DRI_MediaStreamCounter"
+#define __DRI_MEDIA_STREAM_COUNTER_VERSION 1
+struct __DRImediaStreamCounterExtensionRec {
+    __DRIextension base;
+
+    /**
+     * Wait for the MSC to equal target_msc, or, if that has already passed,
+     * the next time (MSC % divisor) is equal to remainder.  If divisor is
+     * zero, the function will return as soon as MSC is greater than or equal
+     * to target_msc.
+     */
+    int (*waitForMSC)(__DRIdrawable *drawable,
+		      int64_t target_msc, int64_t divisor, int64_t remainder,
+		      int64_t * msc, int64_t * sbc);
+
+    /**
+     * Get the number of vertical refreshes since some point in time before
+     * this function was first called (i.e., system start up).
+     */
+    int (*getDrawableMSC)(__DRIscreen *screen, __DRIdrawable *drawable,
+			  int64_t *msc);
+};
+
+
+#define __DRI_TEX_OFFSET "DRI_TexOffset"
+#define __DRI_TEX_OFFSET_VERSION 1
+struct __DRItexOffsetExtensionRec {
+    __DRIextension base;
+
+    /**
+     * Method to override base texture image with a driver specific 'offset'.
+     * The depth passed in allows e.g. to ignore the alpha channel of texture
+     * images where the non-alpha components don't occupy a whole texel.
+     *
+     * For GLX_EXT_texture_from_pixmap with AIGLX.
+     */
+    void (*setTexOffset)(__DRIcontext *pDRICtx, GLint texname,
+			 unsigned long long offset, GLint depth, GLuint pitch);
+};
+
+
+/* Valid values for format in the setTexBuffer2 function below.  These
+ * values match the GLX tokens for compatibility reasons, but we
+ * define them here since the DRI interface can't depend on GLX. */
+#define __DRI_TEXTURE_FORMAT_NONE        0x20D8
+#define __DRI_TEXTURE_FORMAT_RGB         0x20D9
+#define __DRI_TEXTURE_FORMAT_RGBA        0x20DA
+
+#define __DRI_TEX_BUFFER "DRI_TexBuffer"
+#define __DRI_TEX_BUFFER_VERSION 2
+struct __DRItexBufferExtensionRec {
+    __DRIextension base;
+
+    /**
+     * Method to override base texture image with the contents of a
+     * __DRIdrawable. 
+     *
+     * For GLX_EXT_texture_from_pixmap with AIGLX.  Deprecated in favor of
+     * setTexBuffer2 in version 2 of this interface
+     */
+    void (*setTexBuffer)(__DRIcontext *pDRICtx,
+			 GLint target,
+			 __DRIdrawable *pDraw);
+
+    /**
+     * Method to override base texture image with the contents of a
+     * __DRIdrawable, including the required texture format attribute.
+     *
+     * For GLX_EXT_texture_from_pixmap with AIGLX.
+     */
+    void (*setTexBuffer2)(__DRIcontext *pDRICtx,
+			  GLint target,
+			  GLint format,
+			  __DRIdrawable *pDraw);
+    /**
+     * Method to release texture buffer in case some special platform
+     * need this.
+     *
+     * For GLX_EXT_texture_from_pixmap with AIGLX.
+     */
+    void (*releaseTexBuffer)(__DRIcontext *pDRICtx,
+			GLint target,
+			__DRIdrawable *pDraw);
+};
+
+/**
+ * Used by drivers that implement DRI2
+ */
+#define __DRI2_FLUSH "DRI2_Flush"
+#define __DRI2_FLUSH_VERSION 4
+
+#define __DRI2_FLUSH_DRAWABLE (1 << 0) /* the drawable should be flushed. */
+#define __DRI2_FLUSH_CONTEXT  (1 << 1) /* glFlush should be called */
+
+enum __DRI2throttleReason {
+   __DRI2_THROTTLE_SWAPBUFFER,
+   __DRI2_THROTTLE_COPYSUBBUFFER,
+   __DRI2_THROTTLE_FLUSHFRONT
+};
+
+struct __DRI2flushExtensionRec {
+    __DRIextension base;
+    void (*flush)(__DRIdrawable *drawable);
+
+    /**
+     * Ask the driver to call getBuffers/getBuffersWithFormat before
+     * it starts rendering again.
+     *
+     * \param drawable the drawable to invalidate
+     *
+     * \since 3
+     */
+    void (*invalidate)(__DRIdrawable *drawable);
+
+    /**
+     * This function reduces the number of flushes in the driver by combining
+     * several operations into one call.
+     *
+     * It can:
+     * - throttle
+     * - flush a drawable
+     * - flush a context
+     *
+     * \param context           the context
+     * \param drawable          the drawable to flush
+     * \param flags             a combination of _DRI2_FLUSH_xxx flags
+     * \param throttle_reason   the reason for throttling, 0 = no throttling
+     *
+     * \since 4
+     */
+    void (*flush_with_flags)(__DRIcontext *ctx,
+                             __DRIdrawable *drawable,
+                             unsigned flags,
+                             enum __DRI2throttleReason throttle_reason);
+};
+
+
+/**
+ * Extension that the driver uses to request
+ * throttle callbacks.
+ */
+
+#define __DRI2_THROTTLE "DRI2_Throttle"
+#define __DRI2_THROTTLE_VERSION 1
+
+struct __DRI2throttleExtensionRec {
+   __DRIextension base;
+   void (*throttle)(__DRIcontext *ctx,
+		    __DRIdrawable *drawable,
+		    enum __DRI2throttleReason reason);
+};
+
+/*@}*/
+
+/**
+ * The following extensions describe loader features that the DRI
+ * driver can make use of.  Some of these are mandatory, such as the
+ * getDrawableInfo extension for DRI and the DRI Loader extensions for
+ * DRI2, while others are optional, and if present allow the driver to
+ * expose certain features.  The loader pass in a NULL terminated
+ * array of these extensions to the driver in the createNewScreen
+ * constructor.
+ */
+
+typedef struct __DRIgetDrawableInfoExtensionRec __DRIgetDrawableInfoExtension;
+typedef struct __DRIsystemTimeExtensionRec __DRIsystemTimeExtension;
+typedef struct __DRIdamageExtensionRec __DRIdamageExtension;
+typedef struct __DRIloaderExtensionRec __DRIloaderExtension;
+typedef struct __DRIswrastLoaderExtensionRec __DRIswrastLoaderExtension;
+
+
+/**
+ * Callback to getDrawableInfo protocol
+ */
+#define __DRI_GET_DRAWABLE_INFO "DRI_GetDrawableInfo"
+#define __DRI_GET_DRAWABLE_INFO_VERSION 1
+struct __DRIgetDrawableInfoExtensionRec {
+    __DRIextension base;
+
+    /**
+     * This function is used to get information about the position, size, and
+     * clip rects of a drawable.
+     */
+    GLboolean (* getDrawableInfo) ( __DRIdrawable *drawable,
+	unsigned int * index, unsigned int * stamp,
+        int * x, int * y, int * width, int * height,
+        int * numClipRects, drm_clip_rect_t ** pClipRects,
+        int * backX, int * backY,
+	int * numBackClipRects, drm_clip_rect_t ** pBackClipRects,
+	void *loaderPrivate);
+};
+
+/**
+ * Callback to get system time for media stream counter extensions.
+ */
+#define __DRI_SYSTEM_TIME "DRI_SystemTime"
+#define __DRI_SYSTEM_TIME_VERSION 1
+struct __DRIsystemTimeExtensionRec {
+    __DRIextension base;
+
+    /**
+     * Get the 64-bit unadjusted system time (UST).
+     */
+    int (*getUST)(int64_t * ust);
+
+    /**
+     * Get the media stream counter (MSC) rate.
+     * 
+     * Matching the definition in GLX_OML_sync_control, this function returns
+     * the rate of the "media stream counter".  In practical terms, this is
+     * the frame refresh rate of the display.
+     */
+    GLboolean (*getMSCRate)(__DRIdrawable *draw,
+			    int32_t * numerator, int32_t * denominator,
+			    void *loaderPrivate);
+};
+
+/**
+ * Damage reporting
+ */
+#define __DRI_DAMAGE "DRI_Damage"
+#define __DRI_DAMAGE_VERSION 1
+struct __DRIdamageExtensionRec {
+    __DRIextension base;
+
+    /**
+     * Reports areas of the given drawable which have been modified by the
+     * driver.
+     *
+     * \param drawable which the drawing was done to.
+     * \param rects rectangles affected, with the drawable origin as the
+     *	      origin.
+     * \param x X offset of the drawable within the screen (used in the
+     *	      front_buffer case)
+     * \param y Y offset of the drawable within the screen.
+     * \param front_buffer boolean flag for whether the drawing to the
+     * 	      drawable was actually done directly to the front buffer (instead
+     *	      of backing storage, for example)
+     * \param loaderPrivate the data passed in at createNewDrawable time
+     */
+    void (*reportDamage)(__DRIdrawable *draw,
+			 int x, int y,
+			 drm_clip_rect_t *rects, int num_rects,
+			 GLboolean front_buffer,
+			 void *loaderPrivate);
+};
+
+#define __DRI_SWRAST_IMAGE_OP_DRAW	1
+#define __DRI_SWRAST_IMAGE_OP_CLEAR	2
+#define __DRI_SWRAST_IMAGE_OP_SWAP	3
+
+/**
+ * SWRast Loader extension.
+ */
+#define __DRI_SWRAST_LOADER "DRI_SWRastLoader"
+#define __DRI_SWRAST_LOADER_VERSION 1
+struct __DRIswrastLoaderExtensionRec {
+    __DRIextension base;
+
+    /*
+     * Drawable position and size
+     */
+    void (*getDrawableInfo)(__DRIdrawable *drawable,
+			    int *x, int *y, int *width, int *height,
+			    void *loaderPrivate);
+
+    /**
+     * Put image to drawable
+     */
+    void (*putImage)(__DRIdrawable *drawable, int op,
+		     int x, int y, int width, int height,
+		     char *data, void *loaderPrivate);
+
+    /**
+     * Get image from readable
+     */
+    void (*getImage)(__DRIdrawable *readable,
+		     int x, int y, int width, int height,
+		     char *data, void *loaderPrivate);
+};
+
+/**
+ * Invalidate loader extension.  The presence of this extension
+ * indicates to the DRI driver that the loader will call invalidate in
+ * the __DRI2_FLUSH extension, whenever the needs to query for new
+ * buffers.  This means that the DRI driver can drop the polling in
+ * glViewport().
+ *
+ * The extension doesn't provide any functionality, it's only use to
+ * indicate to the driver that it can use the new semantics.  A DRI
+ * driver can use this to switch between the different semantics or
+ * just refuse to initialize if this extension isn't present.
+ */
+#define __DRI_USE_INVALIDATE "DRI_UseInvalidate"
+#define __DRI_USE_INVALIDATE_VERSION 1
+
+typedef struct __DRIuseInvalidateExtensionRec __DRIuseInvalidateExtension;
+struct __DRIuseInvalidateExtensionRec {
+   __DRIextension base;
+};
+
+/**
+ * The remaining extensions describe driver extensions, immediately
+ * available interfaces provided by the driver.  To start using the
+ * driver, dlsym() for the __DRI_DRIVER_EXTENSIONS symbol and look for
+ * the extension you need in the array.
+ */
+#define __DRI_DRIVER_EXTENSIONS "__driDriverExtensions"
+
+/**
+ * This symbol replaces the __DRI_DRIVER_EXTENSIONS symbol, and will be
+ * suffixed by "_drivername", allowing multiple drivers to be built into one
+ * library, and also giving the driver the chance to return a variable driver
+ * extensions struct depending on the driver name being loaded or any other
+ * system state.
+ *
+ * The function prototype is:
+ *
+ * const __DRIextension **__driDriverGetExtensions_drivername(void);
+ */
+#define __DRI_DRIVER_GET_EXTENSIONS "__driDriverGetExtensions"
+
+/**
+ * Tokens for __DRIconfig attribs.  A number of attributes defined by
+ * GLX or EGL standards are not in the table, as they must be provided
+ * by the loader.  For example, FBConfig ID or visual ID, drawable type.
+ */
+
+#define __DRI_ATTRIB_BUFFER_SIZE		 1
+#define __DRI_ATTRIB_LEVEL			 2
+#define __DRI_ATTRIB_RED_SIZE			 3
+#define __DRI_ATTRIB_GREEN_SIZE			 4
+#define __DRI_ATTRIB_BLUE_SIZE			 5
+#define __DRI_ATTRIB_LUMINANCE_SIZE		 6
+#define __DRI_ATTRIB_ALPHA_SIZE			 7
+#define __DRI_ATTRIB_ALPHA_MASK_SIZE		 8
+#define __DRI_ATTRIB_DEPTH_SIZE			 9
+#define __DRI_ATTRIB_STENCIL_SIZE		10
+#define __DRI_ATTRIB_ACCUM_RED_SIZE		11
+#define __DRI_ATTRIB_ACCUM_GREEN_SIZE		12
+#define __DRI_ATTRIB_ACCUM_BLUE_SIZE		13
+#define __DRI_ATTRIB_ACCUM_ALPHA_SIZE		14
+#define __DRI_ATTRIB_SAMPLE_BUFFERS		15
+#define __DRI_ATTRIB_SAMPLES			16
+#define __DRI_ATTRIB_RENDER_TYPE		17
+#define __DRI_ATTRIB_CONFIG_CAVEAT		18
+#define __DRI_ATTRIB_CONFORMANT			19
+#define __DRI_ATTRIB_DOUBLE_BUFFER		20
+#define __DRI_ATTRIB_STEREO			21
+#define __DRI_ATTRIB_AUX_BUFFERS		22
+#define __DRI_ATTRIB_TRANSPARENT_TYPE		23
+#define __DRI_ATTRIB_TRANSPARENT_INDEX_VALUE	24
+#define __DRI_ATTRIB_TRANSPARENT_RED_VALUE	25
+#define __DRI_ATTRIB_TRANSPARENT_GREEN_VALUE	26
+#define __DRI_ATTRIB_TRANSPARENT_BLUE_VALUE	27
+#define __DRI_ATTRIB_TRANSPARENT_ALPHA_VALUE	28
+#define __DRI_ATTRIB_FLOAT_MODE			29
+#define __DRI_ATTRIB_RED_MASK			30
+#define __DRI_ATTRIB_GREEN_MASK			31
+#define __DRI_ATTRIB_BLUE_MASK			32
+#define __DRI_ATTRIB_ALPHA_MASK			33
+#define __DRI_ATTRIB_MAX_PBUFFER_WIDTH		34
+#define __DRI_ATTRIB_MAX_PBUFFER_HEIGHT		35
+#define __DRI_ATTRIB_MAX_PBUFFER_PIXELS		36
+#define __DRI_ATTRIB_OPTIMAL_PBUFFER_WIDTH	37
+#define __DRI_ATTRIB_OPTIMAL_PBUFFER_HEIGHT	38
+#define __DRI_ATTRIB_VISUAL_SELECT_GROUP	39
+#define __DRI_ATTRIB_SWAP_METHOD		40
+#define __DRI_ATTRIB_MAX_SWAP_INTERVAL		41
+#define __DRI_ATTRIB_MIN_SWAP_INTERVAL		42
+#define __DRI_ATTRIB_BIND_TO_TEXTURE_RGB	43
+#define __DRI_ATTRIB_BIND_TO_TEXTURE_RGBA	44
+#define __DRI_ATTRIB_BIND_TO_MIPMAP_TEXTURE	45
+#define __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS	46
+#define __DRI_ATTRIB_YINVERTED			47
+#define __DRI_ATTRIB_FRAMEBUFFER_SRGB_CAPABLE	48
+
+/* __DRI_ATTRIB_RENDER_TYPE */
+#define __DRI_ATTRIB_RGBA_BIT			0x01	
+#define __DRI_ATTRIB_COLOR_INDEX_BIT		0x02
+#define __DRI_ATTRIB_LUMINANCE_BIT		0x04
+#define __DRI_ATTRIB_FLOAT_BIT			0x08
+#define __DRI_ATTRIB_UNSIGNED_FLOAT_BIT		0x10
+
+/* __DRI_ATTRIB_CONFIG_CAVEAT */
+#define __DRI_ATTRIB_SLOW_BIT			0x01
+#define __DRI_ATTRIB_NON_CONFORMANT_CONFIG	0x02
+
+/* __DRI_ATTRIB_TRANSPARENT_TYPE */
+#define __DRI_ATTRIB_TRANSPARENT_RGB		0x00
+#define __DRI_ATTRIB_TRANSPARENT_INDEX		0x01
+
+/* __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS	 */
+#define __DRI_ATTRIB_TEXTURE_1D_BIT		0x01
+#define __DRI_ATTRIB_TEXTURE_2D_BIT		0x02
+#define __DRI_ATTRIB_TEXTURE_RECTANGLE_BIT	0x04
+
+/**
+ * This extension defines the core DRI functionality.
+ */
+#define __DRI_CORE "DRI_Core"
+#define __DRI_CORE_VERSION 1
+
+struct __DRIcoreExtensionRec {
+    __DRIextension base;
+
+    __DRIscreen *(*createNewScreen)(int screen, int fd,
+				    unsigned int sarea_handle,
+				    const __DRIextension **extensions,
+				    const __DRIconfig ***driverConfigs,
+				    void *loaderPrivate);
+
+    void (*destroyScreen)(__DRIscreen *screen);
+
+    const __DRIextension **(*getExtensions)(__DRIscreen *screen);
+
+    int (*getConfigAttrib)(const __DRIconfig *config,
+			   unsigned int attrib,
+			   unsigned int *value);
+
+    int (*indexConfigAttrib)(const __DRIconfig *config, int index,
+			     unsigned int *attrib, unsigned int *value);
+
+    __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen,
+					const __DRIconfig *config,
+					unsigned int drawable_id,
+					unsigned int head,
+					void *loaderPrivate);
+
+    void (*destroyDrawable)(__DRIdrawable *drawable);
+
+    void (*swapBuffers)(__DRIdrawable *drawable);
+
+    __DRIcontext *(*createNewContext)(__DRIscreen *screen,
+				      const __DRIconfig *config,
+				      __DRIcontext *shared,
+				      void *loaderPrivate);
+
+    int (*copyContext)(__DRIcontext *dest,
+		       __DRIcontext *src,
+		       unsigned long mask);
+
+    void (*destroyContext)(__DRIcontext *context);
+
+    int (*bindContext)(__DRIcontext *ctx,
+		       __DRIdrawable *pdraw,
+		       __DRIdrawable *pread);
+
+    int (*unbindContext)(__DRIcontext *ctx);
+};
+
+/**
+ * Stored version of some component (i.e., server-side DRI module, kernel-side
+ * DRM, etc.).
+ * 
+ * \todo
+ * There are several data structures that explicitly store a major version,
+ * minor version, and patch level.  These structures should be modified to
+ * have a \c __DRIversionRec instead.
+ */
+struct __DRIversionRec {
+    int    major;        /**< Major version number. */
+    int    minor;        /**< Minor version number. */
+    int    patch;        /**< Patch-level. */
+};
+
+/**
+ * Framebuffer information record.  Used by libGL to communicate information
+ * about the framebuffer to the driver's \c __driCreateNewScreen function.
+ * 
+ * In XFree86, most of this information is derrived from data returned by
+ * calling \c XF86DRIGetDeviceInfo.
+ *
+ * \sa XF86DRIGetDeviceInfo __DRIdisplayRec::createNewScreen
+ *     __driUtilCreateNewScreen CallCreateNewScreen
+ *
+ * \bug This structure could be better named.
+ */
+struct __DRIframebufferRec {
+    unsigned char *base;    /**< Framebuffer base address in the CPU's
+			     * address space.  This value is calculated by
+			     * calling \c drmMap on the framebuffer handle
+			     * returned by \c XF86DRIGetDeviceInfo (or a
+			     * similar function).
+			     */
+    int size;               /**< Framebuffer size, in bytes. */
+    int stride;             /**< Number of bytes from one line to the next. */
+    int width;              /**< Pixel width of the framebuffer. */
+    int height;             /**< Pixel height of the framebuffer. */
+    int dev_priv_size;      /**< Size of the driver's dev-priv structure. */
+    void *dev_priv;         /**< Pointer to the driver's dev-priv structure. */
+};
+
+
+/**
+ * This extension provides alternative screen, drawable and context
+ * constructors for legacy DRI functionality.  This is used in
+ * conjunction with the core extension.
+ */
+#define __DRI_LEGACY "DRI_Legacy"
+#define __DRI_LEGACY_VERSION 1
+
+struct __DRIlegacyExtensionRec {
+    __DRIextension base;
+
+    __DRIscreen *(*createNewScreen)(int screen,
+				    const __DRIversion *ddx_version,
+				    const __DRIversion *dri_version,
+				    const __DRIversion *drm_version,
+				    const __DRIframebuffer *frame_buffer,
+				    void *pSAREA, int fd, 
+				    const __DRIextension **extensions,
+				    const __DRIconfig ***driver_configs,
+				    void *loaderPrivate);
+
+    __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen,
+					const __DRIconfig *config,
+					drm_drawable_t hwDrawable,
+					int renderType, const int *attrs,
+					void *loaderPrivate);
+
+    __DRIcontext *(*createNewContext)(__DRIscreen *screen,
+				      const __DRIconfig *config,
+				      int render_type,
+				      __DRIcontext *shared,
+				      drm_context_t hwContext,
+				      void *loaderPrivate);
+};
+
+/**
+ * This extension provides alternative screen, drawable and context
+ * constructors for swrast DRI functionality.  This is used in
+ * conjunction with the core extension.
+ */
+#define __DRI_SWRAST "DRI_SWRast"
+#define __DRI_SWRAST_VERSION 4
+
+struct __DRIswrastExtensionRec {
+    __DRIextension base;
+
+    __DRIscreen *(*createNewScreen)(int screen,
+				    const __DRIextension **extensions,
+				    const __DRIconfig ***driver_configs,
+				    void *loaderPrivate);
+
+    __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen,
+					const __DRIconfig *config,
+					void *loaderPrivate);
+
+   /* Since version 2 */
+   __DRIcontext *(*createNewContextForAPI)(__DRIscreen *screen,
+                                           int api,
+                                           const __DRIconfig *config,
+                                           __DRIcontext *shared,
+                                           void *data);
+
+   /**
+    * Create a context for a particular API with a set of attributes
+    *
+    * \since version 3
+    *
+    * \sa __DRIdri2ExtensionRec::createContextAttribs
+    */
+   __DRIcontext *(*createContextAttribs)(__DRIscreen *screen,
+					 int api,
+					 const __DRIconfig *config,
+					 __DRIcontext *shared,
+					 unsigned num_attribs,
+					 const uint32_t *attribs,
+					 unsigned *error,
+					 void *loaderPrivate);
+
+   /**
+    * createNewScreen() with the driver extensions passed in.
+    *
+    * \since version 4
+    */
+   __DRIscreen *(*createNewScreen2)(int screen,
+                                    const __DRIextension **loader_extensions,
+                                    const __DRIextension **driver_extensions,
+                                    const __DRIconfig ***driver_configs,
+                                    void *loaderPrivate);
+
+};
+
+/** Common DRI function definitions, shared among DRI2 and Image extensions
+ */
+
+typedef __DRIscreen *
+(*__DRIcreateNewScreen2Func)(int screen, int fd,
+                             const __DRIextension **extensions,
+                             const __DRIextension **driver_extensions,
+                             const __DRIconfig ***driver_configs,
+                             void *loaderPrivate);
+
+typedef __DRIdrawable *
+(*__DRIcreateNewDrawableFunc)(__DRIscreen *screen,
+                              const __DRIconfig *config,
+                              void *loaderPrivate);
+
+typedef __DRIcontext *
+(*__DRIcreateContextAttribsFunc)(__DRIscreen *screen,
+                                 int api,
+                                 const __DRIconfig *config,
+                                 __DRIcontext *shared,
+                                 unsigned num_attribs,
+                                 const uint32_t *attribs,
+                                 unsigned *error,
+                                 void *loaderPrivate);
+
+typedef unsigned int
+(*__DRIgetAPIMaskFunc)(__DRIscreen *screen);
+
+/**
+ * DRI2 Loader extension.
+ */
+#define __DRI_BUFFER_FRONT_LEFT		0
+#define __DRI_BUFFER_BACK_LEFT		1
+#define __DRI_BUFFER_FRONT_RIGHT	2
+#define __DRI_BUFFER_BACK_RIGHT		3
+#define __DRI_BUFFER_DEPTH		4
+#define __DRI_BUFFER_STENCIL		5
+#define __DRI_BUFFER_ACCUM		6
+#define __DRI_BUFFER_FAKE_FRONT_LEFT	7
+#define __DRI_BUFFER_FAKE_FRONT_RIGHT	8
+#define __DRI_BUFFER_DEPTH_STENCIL	9  /**< Only available with DRI2 1.1 */
+#define __DRI_BUFFER_HIZ		10
+
+/* Inofficial and for internal use. Increase when adding a new buffer token. */
+#define __DRI_BUFFER_COUNT		11
+
+struct __DRIbufferRec {
+    unsigned int attachment;
+    unsigned int name;
+    unsigned int pitch;
+    unsigned int cpp;
+    unsigned int flags;
+};
+
+#define __DRI_DRI2_LOADER "DRI_DRI2Loader"
+#define __DRI_DRI2_LOADER_VERSION 3
+struct __DRIdri2LoaderExtensionRec {
+    __DRIextension base;
+
+    __DRIbuffer *(*getBuffers)(__DRIdrawable *driDrawable,
+			       int *width, int *height,
+			       unsigned int *attachments, int count,
+			       int *out_count, void *loaderPrivate);
+
+    /**
+     * Flush pending front-buffer rendering
+     *
+     * Any rendering that has been performed to the
+     * \c __DRI_BUFFER_FAKE_FRONT_LEFT will be flushed to the
+     * \c __DRI_BUFFER_FRONT_LEFT.
+     *
+     * \param driDrawable    Drawable whose front-buffer is to be flushed
+     * \param loaderPrivate  Loader's private data that was previously passed
+     *                       into __DRIdri2ExtensionRec::createNewDrawable
+     */
+    void (*flushFrontBuffer)(__DRIdrawable *driDrawable, void *loaderPrivate);
+
+
+    /**
+     * Get list of buffers from the server
+     *
+     * Gets a list of buffer for the specified set of attachments.  Unlike
+     * \c ::getBuffers, this function takes a list of attachments paired with
+     * opaque \c unsigned \c int value describing the format of the buffer.
+     * It is the responsibility of the caller to know what the service that
+     * allocates the buffers will expect to receive for the format.
+     *
+     * \param driDrawable    Drawable whose buffers are being queried.
+     * \param width          Output where the width of the buffers is stored.
+     * \param height         Output where the height of the buffers is stored.
+     * \param attachments    List of pairs of attachment ID and opaque format
+     *                       requested for the drawable.
+     * \param count          Number of attachment / format pairs stored in
+     *                       \c attachments.
+     * \param loaderPrivate  Loader's private data that was previously passed
+     *                       into __DRIdri2ExtensionRec::createNewDrawable.
+     */
+    __DRIbuffer *(*getBuffersWithFormat)(__DRIdrawable *driDrawable,
+					 int *width, int *height,
+					 unsigned int *attachments, int count,
+					 int *out_count, void *loaderPrivate);
+};
+
+/**
+ * This extension provides alternative screen, drawable and context
+ * constructors for DRI2.
+ */
+#define __DRI_DRI2 "DRI_DRI2"
+#define __DRI_DRI2_VERSION 4
+
+#define __DRI_API_OPENGL	0	/**< OpenGL compatibility profile */
+#define __DRI_API_GLES		1	/**< OpenGL ES 1.x */
+#define __DRI_API_GLES2		2	/**< OpenGL ES 2.x */
+#define __DRI_API_OPENGL_CORE	3	/**< OpenGL 3.2+ core profile */
+#define __DRI_API_GLES3		4	/**< OpenGL ES 3.x */
+
+#define __DRI_CTX_ATTRIB_MAJOR_VERSION		0
+#define __DRI_CTX_ATTRIB_MINOR_VERSION		1
+#define __DRI_CTX_ATTRIB_FLAGS			2
+
+/**
+ * \requires __DRI2_ROBUSTNESS.
+ */
+#define __DRI_CTX_ATTRIB_RESET_STRATEGY		3
+
+#define __DRI_CTX_FLAG_DEBUG			0x00000001
+#define __DRI_CTX_FLAG_FORWARD_COMPATIBLE	0x00000002
+
+/**
+ * \requires __DRI2_ROBUSTNESS.
+ */
+#define __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS	0x00000004
+
+/**
+ * \name Context reset strategies.
+ */
+/*@{*/
+#define __DRI_CTX_RESET_NO_NOTIFICATION		0
+#define __DRI_CTX_RESET_LOSE_CONTEXT		1
+/*@}*/
+
+/**
+ * \name Reasons that __DRIdri2Extension::createContextAttribs might fail
+ */
+/*@{*/
+/** Success! */
+#define __DRI_CTX_ERROR_SUCCESS			0
+
+/** Memory allocation failure */
+#define __DRI_CTX_ERROR_NO_MEMORY		1
+
+/** Client requested an API (e.g., OpenGL ES 2.0) that the driver can't do. */
+#define __DRI_CTX_ERROR_BAD_API			2
+
+/** Client requested an API version that the driver can't do. */
+#define __DRI_CTX_ERROR_BAD_VERSION		3
+
+/** Client requested a flag or combination of flags the driver can't do. */
+#define __DRI_CTX_ERROR_BAD_FLAG		4
+
+/** Client requested an attribute the driver doesn't understand. */
+#define __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE	5
+
+/** Client requested a flag the driver doesn't understand. */
+#define __DRI_CTX_ERROR_UNKNOWN_FLAG		6
+/*@}*/
+
+struct __DRIdri2ExtensionRec {
+    __DRIextension base;
+
+    __DRIscreen *(*createNewScreen)(int screen, int fd,
+				    const __DRIextension **extensions,
+				    const __DRIconfig ***driver_configs,
+				    void *loaderPrivate);
+
+   __DRIcreateNewDrawableFunc   createNewDrawable;
+   __DRIcontext *(*createNewContext)(__DRIscreen *screen,
+                                     const __DRIconfig *config,
+                                     __DRIcontext *shared,
+                                     void *loaderPrivate);
+
+   /* Since version 2 */
+   __DRIgetAPIMaskFunc          getAPIMask;
+
+   __DRIcontext *(*createNewContextForAPI)(__DRIscreen *screen,
+					   int api,
+					   const __DRIconfig *config,
+					   __DRIcontext *shared,
+					   void *data);
+
+   __DRIbuffer *(*allocateBuffer)(__DRIscreen *screen,
+				  unsigned int attachment,
+				  unsigned int format,
+				  int width,
+				  int height);
+   void (*releaseBuffer)(__DRIscreen *screen,
+			 __DRIbuffer *buffer);
+
+   /**
+    * Create a context for a particular API with a set of attributes
+    *
+    * \since version 3
+    *
+    * \sa __DRIswrastExtensionRec::createContextAttribs
+    */
+   __DRIcreateContextAttribsFunc        createContextAttribs;
+
+   /**
+    * createNewScreen with the driver's extension list passed in.
+    *
+    * \since version 4
+    */
+   __DRIcreateNewScreen2Func            createNewScreen2;
+};
+
+
+/**
+ * This extension provides functionality to enable various EGLImage
+ * extensions.
+ */
+#define __DRI_IMAGE "DRI_IMAGE"
+#define __DRI_IMAGE_VERSION 8
+
+/**
+ * These formats correspond to the similarly named MESA_FORMAT_*
+ * tokens, except in the native endian of the CPU.  For example, on
+ * little endian __DRI_IMAGE_FORMAT_XRGB8888 corresponds to
+ * MESA_FORMAT_XRGB8888, but MESA_FORMAT_XRGB8888_REV on big endian.
+ *
+ * __DRI_IMAGE_FORMAT_NONE is for images that aren't directly usable
+ * by the driver (YUV planar formats) but serve as a base image for
+ * creating sub-images for the different planes within the image.
+ *
+ * R8, GR88 and NONE should not be used with createImageFormName or
+ * createImage, and are returned by query from sub images created with
+ * createImageFromNames (NONE, see above) and fromPlane (R8 & GR88).
+ */
+#define __DRI_IMAGE_FORMAT_RGB565       0x1001
+#define __DRI_IMAGE_FORMAT_XRGB8888     0x1002
+#define __DRI_IMAGE_FORMAT_ARGB8888     0x1003
+#define __DRI_IMAGE_FORMAT_ABGR8888     0x1004
+#define __DRI_IMAGE_FORMAT_XBGR8888     0x1005
+#define __DRI_IMAGE_FORMAT_R8           0x1006 /* Since version 5 */
+#define __DRI_IMAGE_FORMAT_GR88         0x1007
+#define __DRI_IMAGE_FORMAT_NONE         0x1008
+#define __DRI_IMAGE_FORMAT_XRGB2101010  0x1009
+#define __DRI_IMAGE_FORMAT_ARGB2101010  0x100a
+#define __DRI_IMAGE_FORMAT_SARGB8       0x100b
+
+#define __DRI_IMAGE_USE_SHARE		0x0001
+#define __DRI_IMAGE_USE_SCANOUT		0x0002
+#define __DRI_IMAGE_USE_CURSOR		0x0004 /* Depricated */
+#define __DRI_IMAGE_USE_LINEAR		0x0008
+
+
+/**
+ * Four CC formats that matches with WL_DRM_FORMAT_* from wayland_drm.h
+ * and GBM_FORMAT_* from gbm.h, used with createImageFromNames.
+ *
+ * \since 5
+ */
+
+#define __DRI_IMAGE_FOURCC_RGB565	0x36314752
+#define __DRI_IMAGE_FOURCC_ARGB8888	0x34325241
+#define __DRI_IMAGE_FOURCC_XRGB8888	0x34325258
+#define __DRI_IMAGE_FOURCC_ABGR8888	0x34324241
+#define __DRI_IMAGE_FOURCC_XBGR8888	0x34324258
+#define __DRI_IMAGE_FOURCC_YUV410	0x39565559
+#define __DRI_IMAGE_FOURCC_YUV411	0x31315559
+#define __DRI_IMAGE_FOURCC_YUV420	0x32315559
+#define __DRI_IMAGE_FOURCC_YUV422	0x36315559
+#define __DRI_IMAGE_FOURCC_YUV444	0x34325559
+#define __DRI_IMAGE_FOURCC_NV12		0x3231564e
+#define __DRI_IMAGE_FOURCC_NV16		0x3631564e
+#define __DRI_IMAGE_FOURCC_YUYV		0x56595559
+
+
+/**
+ * Queryable on images created by createImageFromNames.
+ *
+ * RGB and RGBA are may be usable directly as images but its still
+ * recommended to call fromPlanar with plane == 0.
+ *
+ * Y_U_V, Y_UV and Y_XUXV all requires call to fromPlanar to create
+ * usable sub-images, sampling from images return raw YUV data and
+ * color conversion needs to be done in the shader.
+ *
+ * \since 5
+ */
+
+#define __DRI_IMAGE_COMPONENTS_RGB	0x3001
+#define __DRI_IMAGE_COMPONENTS_RGBA	0x3002
+#define __DRI_IMAGE_COMPONENTS_Y_U_V	0x3003
+#define __DRI_IMAGE_COMPONENTS_Y_UV	0x3004
+#define __DRI_IMAGE_COMPONENTS_Y_XUXV	0x3005
+
+
+/**
+ * queryImage attributes
+ */
+
+#define __DRI_IMAGE_ATTRIB_STRIDE	0x2000
+#define __DRI_IMAGE_ATTRIB_HANDLE	0x2001
+#define __DRI_IMAGE_ATTRIB_NAME		0x2002
+#define __DRI_IMAGE_ATTRIB_FORMAT	0x2003 /* available in versions 3+ */
+#define __DRI_IMAGE_ATTRIB_WIDTH	0x2004 /* available in versions 4+ */
+#define __DRI_IMAGE_ATTRIB_HEIGHT	0x2005
+#define __DRI_IMAGE_ATTRIB_COMPONENTS	0x2006 /* available in versions 5+ */
+#define __DRI_IMAGE_ATTRIB_FD           0x2007 /* available in versions
+                                                * 7+. Each query will return a
+                                                * new fd. */
+
+enum __DRIYUVColorSpace {
+   __DRI_YUV_COLOR_SPACE_UNDEFINED = 0,
+   __DRI_YUV_COLOR_SPACE_ITU_REC601 = 0x327F,
+   __DRI_YUV_COLOR_SPACE_ITU_REC709 = 0x3280,
+   __DRI_YUV_COLOR_SPACE_ITU_REC2020 = 0x3281
+};
+
+enum __DRISampleRange {
+   __DRI_YUV_RANGE_UNDEFINED = 0,
+   __DRI_YUV_FULL_RANGE = 0x3282,
+   __DRI_YUV_NARROW_RANGE = 0x3283
+};
+
+enum __DRIChromaSiting {
+   __DRI_YUV_CHROMA_SITING_UNDEFINED = 0,
+   __DRI_YUV_CHROMA_SITING_0 = 0x3284,
+   __DRI_YUV_CHROMA_SITING_0_5 = 0x3285
+};
+
+/**
+ * \name Reasons that __DRIimageExtensionRec::createImageFromTexture might fail
+ */
+/*@{*/
+/** Success! */
+#define __DRI_IMAGE_ERROR_SUCCESS       0
+
+/** Memory allocation failure */
+#define __DRI_IMAGE_ERROR_BAD_ALLOC     1
+
+/** Client requested an invalid attribute for a texture object  */
+#define __DRI_IMAGE_ERROR_BAD_MATCH     2
+
+/** Client requested an invalid texture object */
+#define __DRI_IMAGE_ERROR_BAD_PARAMETER 3
+/*@}*/
+
+typedef struct __DRIimageRec          __DRIimage;
+typedef struct __DRIimageExtensionRec __DRIimageExtension;
+struct __DRIimageExtensionRec {
+    __DRIextension base;
+
+    __DRIimage *(*createImageFromName)(__DRIscreen *screen,
+				       int width, int height, int format,
+				       int name, int pitch,
+				       void *loaderPrivate);
+
+    __DRIimage *(*createImageFromRenderbuffer)(__DRIcontext *context,
+					       int renderbuffer,
+					       void *loaderPrivate);
+
+    void (*destroyImage)(__DRIimage *image);
+
+    __DRIimage *(*createImage)(__DRIscreen *screen,
+			       int width, int height, int format,
+			       unsigned int use,
+			       void *loaderPrivate);
+
+   GLboolean (*queryImage)(__DRIimage *image, int attrib, int *value);
+
+   /**
+    * The new __DRIimage will share the content with the old one, see dup(2).
+    */
+   __DRIimage *(*dupImage)(__DRIimage *image, void *loaderPrivate);
+
+   /**
+    * Validate that a __DRIimage can be used a certain way.
+    *
+    * \since 2
+    */
+   GLboolean (*validateUsage)(__DRIimage *image, unsigned int use);
+
+   /**
+    * Unlike createImageFromName __DRI_IMAGE_FORMAT is not but instead
+    * __DRI_IMAGE_FOURCC and strides are in bytes not pixels. Stride is
+    * also per block and not per pixel (for non-RGB, see gallium blocks).
+    *
+    * \since 5
+    */
+   __DRIimage *(*createImageFromNames)(__DRIscreen *screen,
+                                       int width, int height, int fourcc,
+                                       int *names, int num_names,
+                                       int *strides, int *offsets,
+                                       void *loaderPrivate);
+
+   /**
+    * Create an image out of a sub-region of a parent image.  This
+    * entry point lets us create individual __DRIimages for different
+    * planes in a planar buffer (typically yuv), for example.  While a
+    * sub-image shares the underlying buffer object with the parent
+    * image and other sibling sub-images, the life times of parent and
+    * sub-images are not dependent.  Destroying the parent or a
+    * sub-image doesn't affect other images.  The underlying buffer
+    * object is free when no __DRIimage remains that references it.
+    *
+    * Sub-images may overlap, but rendering to overlapping sub-images
+    * is undefined.
+    *
+    * \since 5
+    */
+    __DRIimage *(*fromPlanar)(__DRIimage *image, int plane,
+                              void *loaderPrivate);
+
+    /**
+     * Create image from texture.
+     *
+     * \since 6
+     */
+   __DRIimage *(*createImageFromTexture)(__DRIcontext *context,
+                                         int target,
+                                         unsigned texture,
+                                         int depth,
+                                         int level,
+                                         unsigned *error,
+                                         void *loaderPrivate);
+   /**
+    * Like createImageFromNames, but takes a prime fd instead.
+    *
+    * \since 7
+    */
+   __DRIimage *(*createImageFromFds)(__DRIscreen *screen,
+                                     int width, int height, int fourcc,
+                                     int *fds, int num_fds,
+                                     int *strides, int *offsets,
+                                     void *loaderPrivate);
+
+   /**
+    * Like createImageFromFds, but takes additional attributes.
+    *
+    * For EGL_EXT_image_dma_buf_import.
+    *
+    * \since 8
+    */
+   __DRIimage *(*createImageFromDmaBufs)(__DRIscreen *screen,
+                                         int width, int height, int fourcc,
+                                         int *fds, int num_fds,
+                                         int *strides, int *offsets,
+                                         enum __DRIYUVColorSpace color_space,
+                                         enum __DRISampleRange sample_range,
+                                         enum __DRIChromaSiting horiz_siting,
+                                         enum __DRIChromaSiting vert_siting,
+                                         unsigned *error,
+                                         void *loaderPrivate);
+};
+
+
+/**
+ * This extension must be implemented by the loader and passed to the
+ * driver at screen creation time.  The EGLImage entry points in the
+ * various client APIs take opaque EGLImage handles and use this
+ * extension to map them to a __DRIimage.  At version 1, this
+ * extensions allows mapping EGLImage pointers to __DRIimage pointers,
+ * but future versions could support other EGLImage-like, opaque types
+ * with new lookup functions.
+ */
+#define __DRI_IMAGE_LOOKUP "DRI_IMAGE_LOOKUP"
+#define __DRI_IMAGE_LOOKUP_VERSION 1
+
+typedef struct __DRIimageLookupExtensionRec __DRIimageLookupExtension;
+struct __DRIimageLookupExtensionRec {
+    __DRIextension base;
+
+    __DRIimage *(*lookupEGLImage)(__DRIscreen *screen, void *image,
+				  void *loaderPrivate);
+};
+
+/**
+ * This extension allows for common DRI2 options
+ */
+#define __DRI2_CONFIG_QUERY "DRI_CONFIG_QUERY"
+#define __DRI2_CONFIG_QUERY_VERSION 1
+
+typedef struct __DRI2configQueryExtensionRec __DRI2configQueryExtension;
+struct __DRI2configQueryExtensionRec {
+   __DRIextension base;
+
+   int (*configQueryb)(__DRIscreen *screen, const char *var, GLboolean *val);
+   int (*configQueryi)(__DRIscreen *screen, const char *var, GLint *val);
+   int (*configQueryf)(__DRIscreen *screen, const char *var, GLfloat *val);
+};
+
+/**
+ * Robust context driver extension.
+ *
+ * Existence of this extension means the driver can accept the
+ * \c __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS flag and the
+ * \c __DRI_CTX_ATTRIB_RESET_STRATEGY attribute in
+ * \c __DRIdri2ExtensionRec::createContextAttribs.
+ */
+#define __DRI2_ROBUSTNESS "DRI_Robustness"
+#define __DRI2_ROBUSTNESS_VERSION 1
+
+typedef struct __DRIrobustnessExtensionRec __DRIrobustnessExtension;
+struct __DRIrobustnessExtensionRec {
+   __DRIextension base;
+};
+
+/**
+ * DRI config options extension.
+ *
+ * This extension provides the XML string containing driver options for use by
+ * the loader in supporting the driconf application.
+ */
+#define __DRI_CONFIG_OPTIONS "DRI_ConfigOptions"
+#define __DRI_CONFIG_OPTIONS_VERSION 1
+
+typedef struct __DRIconfigOptionsExtensionRec {
+   __DRIextension base;
+   const char *xml;
+} __DRIconfigOptionsExtension;
+
+/**
+ * This extension provides a driver vtable to a set of common driver helper
+ * functions (driCoreExtension, driDRI2Extension) within the driver
+ * implementation, as opposed to having to pass them through a global
+ * variable.
+ *
+ * It is not intended to be public API to the actual loader, and the vtable
+ * layout may change at any time.
+ */
+#define __DRI_DRIVER_VTABLE "DRI_DriverVtable"
+#define __DRI_DRIVER_VTABLE_VERSION 1
+
+typedef struct __DRIDriverVtableExtensionRec {
+    __DRIextension base;
+    const struct __DriverAPIRec *vtable;
+} __DRIDriverVtableExtension;
+
+/**
+ * Query renderer driver extension
+ *
+ * This allows the window system layer (either EGL or GLX) to query aspects of
+ * hardware and driver support without creating a context.
+ */
+#define __DRI2_RENDERER_QUERY "DRI_RENDERER_QUERY"
+#define __DRI2_RENDERER_QUERY_VERSION 1
+
+#define __DRI2_RENDERER_VENDOR_ID                             0x0000
+#define __DRI2_RENDERER_DEVICE_ID                             0x0001
+#define __DRI2_RENDERER_VERSION                               0x0002
+#define __DRI2_RENDERER_ACCELERATED                           0x0003
+#define __DRI2_RENDERER_VIDEO_MEMORY                          0x0004
+#define __DRI2_RENDERER_UNIFIED_MEMORY_ARCHITECTURE           0x0005
+#define __DRI2_RENDERER_PREFERRED_PROFILE                     0x0006
+#define __DRI2_RENDERER_OPENGL_CORE_PROFILE_VERSION           0x0007
+#define __DRI2_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION  0x0008
+#define __DRI2_RENDERER_OPENGL_ES_PROFILE_VERSION             0x0009
+#define __DRI2_RENDERER_OPENGL_ES2_PROFILE_VERSION            0x000a
+
+typedef struct __DRI2rendererQueryExtensionRec __DRI2rendererQueryExtension;
+struct __DRI2rendererQueryExtensionRec {
+   __DRIextension base;
+
+   int (*queryInteger)(__DRIscreen *screen, int attribute, unsigned int *val);
+   int (*queryString)(__DRIscreen *screen, int attribute, const char **val);
+};
+
+/**
+ * Image Loader extension. Drivers use this to allocate color buffers
+ */
+
+enum __DRIimageBufferMask {
+   __DRI_IMAGE_BUFFER_BACK = (1 << 0),
+   __DRI_IMAGE_BUFFER_FRONT = (1 << 1)
+};
+
+struct __DRIimageList {
+   uint32_t image_mask;
+   __DRIimage *back;
+   __DRIimage *front;
+};
+
+#define __DRI_IMAGE_LOADER "DRI_IMAGE_LOADER"
+#define __DRI_IMAGE_LOADER_VERSION 1
+
+struct __DRIimageLoaderExtensionRec {
+    __DRIextension base;
+
+   /**
+    * Allocate color buffers.
+    *
+    * \param driDrawable
+    * \param width              Width of allocated buffers
+    * \param height             Height of allocated buffers
+    * \param format             one of __DRI_IMAGE_FORMAT_*
+    * \param stamp              Address of variable to be updated when
+    *                           getBuffers must be called again
+    * \param loaderPrivate      The loaderPrivate for driDrawable
+    * \param buffer_mask        Set of buffers to allocate
+    * \param buffers            Returned buffers
+    */
+   int (*getBuffers)(__DRIdrawable *driDrawable,
+                     unsigned int format,
+                     uint32_t *stamp,
+                     void *loaderPrivate,
+                     uint32_t buffer_mask,
+                     struct __DRIimageList *buffers);
+
+    /**
+     * Flush pending front-buffer rendering
+     *
+     * Any rendering that has been performed to the
+     * fake front will be flushed to the front
+     *
+     * \param driDrawable    Drawable whose front-buffer is to be flushed
+     * \param loaderPrivate  Loader's private data that was previously passed
+     *                       into __DRIdri2ExtensionRec::createNewDrawable
+     */
+    void (*flushFrontBuffer)(__DRIdrawable *driDrawable, void *loaderPrivate);
+};
+
+/**
+ * DRI extension.
+ */
+
+#define __DRI_IMAGE_DRIVER           "DRI_IMAGE_DRIVER"
+#define __DRI_IMAGE_DRIVER_VERSION   1
+
+struct __DRIimageDriverExtensionRec {
+   __DRIextension               base;
+
+   /* Common DRI functions, shared with DRI2 */
+   __DRIcreateNewScreen2Func            createNewScreen2;
+   __DRIcreateNewDrawableFunc           createNewDrawable;
+   __DRIcreateContextAttribsFunc        createContextAttribs;
+   __DRIgetAPIMaskFunc                  getAPIMask;
+};
+
+#endif
diff --git a/nixpkgs/pkgs/servers/x11/xorg/default.nix b/nixpkgs/pkgs/servers/x11/xorg/default.nix
new file mode 100644
index 000000000000..1f953e89ec88
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/default.nix
@@ -0,0 +1,3032 @@
+# THIS IS A GENERATED FILE.  DO NOT EDIT!
+{ lib, newScope, pixman }:
+
+lib.makeScope newScope (self: with self; {
+
+  inherit pixman;
+
+  applewmproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "applewmproto-1.4.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/applewmproto-1.4.2.tar.bz2;
+      sha256 = "1zi4p07mp6jmk030p4gmglwxcwp0lzs5mi31y1b4rp8lsqxdxizw";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  appres = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xproto, libXt }: stdenv.mkDerivation {
+    name = "appres-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/appres-1.0.4.tar.bz2;
+      sha256 = "139yp08qy1w6dccamdy0fh343yhaf1am1v81m2j435nd4ya4wqcz";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xproto libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  bdftopcf = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "bdftopcf-1.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/bdftopcf-1.1.tar.bz2;
+      sha256 = "18hiscgljrz10zjcws25bis32nyrg3hzgmiq6scrh7izqmgz0kab";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  bigreqsproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "bigreqsproto-1.1.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/bigreqsproto-1.1.2.tar.bz2;
+      sha256 = "07hvfm84scz8zjw14riiln2v4w03jlhp756ypwhq27g48jmic8a6";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  bitmap = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXaw, xbitmaps, libXmu, xproto, libXt }: stdenv.mkDerivation {
+    name = "bitmap-1.0.8";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/bitmap-1.0.8.tar.gz;
+      sha256 = "1z06a1sn3iq72rmh73f11xgb7n46bdav1fvpgczxjp6al88bsbqs";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXaw xbitmaps libXmu xproto libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  compositeproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "compositeproto-0.4.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/compositeproto-0.4.2.tar.bz2;
+      sha256 = "1z0crmf669hirw4s7972mmp8xig80kfndja9h559haqbpvq5k4q4";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  damageproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "damageproto-1.2.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/damageproto-1.2.1.tar.bz2;
+      sha256 = "0nzwr5pv9hg7c21n995pdiv0zqhs91yz3r8rn3aska4ykcp12z2w";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  dmxproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "dmxproto-2.3.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/dmxproto-2.3.1.tar.bz2;
+      sha256 = "02b5x9dkgajizm8dqyx2w6hmqx3v25l67mgf35nj6sz0lgk52877";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  dri2proto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "dri2proto-2.8";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/proto/dri2proto-2.8.tar.bz2;
+      sha256 = "015az1vfdqmil1yay5nlsmpf6cf7vcbpslxjb72cfkzlvrv59dgr";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  dri3proto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "dri3proto-1.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/proto/dri3proto-1.0.tar.bz2;
+      sha256 = "0x609xvnl8jky5m8jdklw4nymx3irkv32w99dfd8nl800bblkgh1";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  encodings = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "encodings-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/encodings-1.0.4.tar.bz2;
+      sha256 = "0ffmaw80vmfwdgvdkp6495xgsqszb6s0iira5j0j6pd4i0lk3mnf";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fixesproto = callPackage ({ stdenv, pkgconfig, fetchurl, xextproto }: stdenv.mkDerivation {
+    name = "fixesproto-5.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/fixesproto-5.0.tar.bz2;
+      sha256 = "1ki4wiq2iivx5g4w5ckzbjbap759kfqd72yg18m3zpbb4hqkybxs";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ xextproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontadobe100dpi = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, fontutil, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-adobe-100dpi-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-adobe-100dpi-1.0.3.tar.bz2;
+      sha256 = "0m60f5bd0caambrk8ksknb5dks7wzsg7g7xaf0j21jxmx8rq9h5j";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf fontutil mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontadobe75dpi = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, fontutil, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-adobe-75dpi-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-adobe-75dpi-1.0.3.tar.bz2;
+      sha256 = "02advcv9lyxpvrjv8bjh1b797lzg6jvhipclz49z8r8y98g4l0n6";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf fontutil mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontadobeutopia100dpi = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, fontutil, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-adobe-utopia-100dpi-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-adobe-utopia-100dpi-1.0.4.tar.bz2;
+      sha256 = "19dd9znam1ah72jmdh7i6ny2ss2r6m21z9v0l43xvikw48zmwvyi";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf fontutil mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontadobeutopia75dpi = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, fontutil, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-adobe-utopia-75dpi-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-adobe-utopia-75dpi-1.0.4.tar.bz2;
+      sha256 = "152wigpph5wvl4k9m3l4mchxxisgsnzlx033mn5iqrpkc6f72cl7";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf fontutil mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontadobeutopiatype1 = callPackage ({ stdenv, pkgconfig, fetchurl, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-adobe-utopia-type1-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-adobe-utopia-type1-1.0.4.tar.bz2;
+      sha256 = "0xw0pdnzj5jljsbbhakc6q9ha2qnca1jr81zk7w70yl9bw83b54p";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontalias = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "font-alias-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-alias-1.0.3.tar.bz2;
+      sha256 = "16ic8wfwwr3jicaml7b5a0sk6plcgc1kg84w02881yhwmqm3nicb";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontarabicmisc = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-arabic-misc-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-arabic-misc-1.0.3.tar.bz2;
+      sha256 = "1x246dfnxnmflzf0qzy62k8jdpkb6jkgspcjgbk8jcq9lw99npah";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontbh100dpi = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, fontutil, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-bh-100dpi-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-bh-100dpi-1.0.3.tar.bz2;
+      sha256 = "10cl4gm38dw68jzln99ijix730y7cbx8np096gmpjjwff1i73h13";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf fontutil mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontbh75dpi = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, fontutil, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-bh-75dpi-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-bh-75dpi-1.0.3.tar.bz2;
+      sha256 = "073jmhf0sr2j1l8da97pzsqj805f7mf9r2gy92j4diljmi8sm1il";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf fontutil mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontbhlucidatypewriter100dpi = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, fontutil, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-bh-lucidatypewriter-100dpi-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-bh-lucidatypewriter-100dpi-1.0.3.tar.bz2;
+      sha256 = "1fqzckxdzjv4802iad2fdrkpaxl4w0hhs9lxlkyraq2kq9ik7a32";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf fontutil mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontbhlucidatypewriter75dpi = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, fontutil, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-bh-lucidatypewriter-75dpi-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-bh-lucidatypewriter-75dpi-1.0.3.tar.bz2;
+      sha256 = "0cfbxdp5m12cm7jsh3my0lym9328cgm7fa9faz2hqj05wbxnmhaa";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf fontutil mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontbhttf = callPackage ({ stdenv, pkgconfig, fetchurl, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-bh-ttf-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-bh-ttf-1.0.3.tar.bz2;
+      sha256 = "0pyjmc0ha288d4i4j0si4dh3ncf3jiwwjljvddrb0k8v4xiyljqv";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontbhtype1 = callPackage ({ stdenv, pkgconfig, fetchurl, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-bh-type1-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-bh-type1-1.0.3.tar.bz2;
+      sha256 = "1hb3iav089albp4sdgnlh50k47cdjif9p4axm0kkjvs8jyi5a53n";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontbitstream100dpi = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-bitstream-100dpi-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-bitstream-100dpi-1.0.3.tar.bz2;
+      sha256 = "1kmn9jbck3vghz6rj3bhc3h0w6gh0qiaqm90cjkqsz1x9r2dgq7b";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontbitstream75dpi = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-bitstream-75dpi-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-bitstream-75dpi-1.0.3.tar.bz2;
+      sha256 = "13plbifkvfvdfym6gjbgy9wx2xbdxi9hfrl1k22xayy02135wgxs";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontbitstreamtype1 = callPackage ({ stdenv, pkgconfig, fetchurl, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-bitstream-type1-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-bitstream-type1-1.0.3.tar.bz2;
+      sha256 = "1256z0jhcf5gbh1d03593qdwnag708rxqa032izmfb5dmmlhbsn6";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontcronyxcyrillic = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-cronyx-cyrillic-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-cronyx-cyrillic-1.0.3.tar.bz2;
+      sha256 = "0ai1v4n61k8j9x2a1knvfbl2xjxk3xxmqaq3p9vpqrspc69k31kf";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontcursormisc = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-cursor-misc-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-cursor-misc-1.0.3.tar.bz2;
+      sha256 = "0dd6vfiagjc4zmvlskrbjz85jfqhf060cpys8j0y1qpcbsrkwdhp";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontdaewoomisc = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-daewoo-misc-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-daewoo-misc-1.0.3.tar.bz2;
+      sha256 = "1s2bbhizzgbbbn5wqs3vw53n619cclxksljvm759h9p1prqdwrdw";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontdecmisc = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-dec-misc-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-dec-misc-1.0.3.tar.bz2;
+      sha256 = "0yzza0l4zwyy7accr1s8ab7fjqkpwggqydbm2vc19scdby5xz7g1";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontibmtype1 = callPackage ({ stdenv, pkgconfig, fetchurl, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-ibm-type1-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-ibm-type1-1.0.3.tar.bz2;
+      sha256 = "1pyjll4adch3z5cg663s6vhi02k8m6488f0mrasg81ssvg9jinzx";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontisasmisc = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-isas-misc-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-isas-misc-1.0.3.tar.bz2;
+      sha256 = "0rx8q02rkx673a7skkpnvfkg28i8gmqzgf25s9yi0lar915sn92q";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontjismisc = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-jis-misc-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-jis-misc-1.0.3.tar.bz2;
+      sha256 = "0rdc3xdz12pnv951538q6wilx8mrdndpkphpbblszsv7nc8cw61b";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontmicromisc = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-micro-misc-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-micro-misc-1.0.3.tar.bz2;
+      sha256 = "1dldxlh54zq1yzfnrh83j5vm0k4ijprrs5yl18gm3n9j1z0q2cws";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontmisccyrillic = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-misc-cyrillic-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-misc-cyrillic-1.0.3.tar.bz2;
+      sha256 = "0q2ybxs8wvylvw95j6x9i800rismsmx4b587alwbfqiw6biy63z4";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontmiscethiopic = callPackage ({ stdenv, pkgconfig, fetchurl, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-misc-ethiopic-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-misc-ethiopic-1.0.3.tar.bz2;
+      sha256 = "19cq7iq0pfad0nc2v28n681fdq3fcw1l1hzaq0wpkgpx7bc1zjsk";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontmiscmeltho = callPackage ({ stdenv, pkgconfig, fetchurl, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-misc-meltho-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-misc-meltho-1.0.3.tar.bz2;
+      sha256 = "148793fqwzrc3bmh2vlw5fdiwjc2n7vs25cic35gfp452czk489p";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontmiscmisc = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, fontutil, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-misc-misc-1.1.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-misc-misc-1.1.2.tar.bz2;
+      sha256 = "150pq6n8n984fah34n3k133kggn9v0c5k07igv29sxp1wi07krxq";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf fontutil mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontmuttmisc = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-mutt-misc-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-mutt-misc-1.0.3.tar.bz2;
+      sha256 = "13qghgr1zzpv64m0p42195k1kc77pksiv059fdvijz1n6kdplpxx";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontschumachermisc = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, fontutil, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-schumacher-misc-1.1.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-schumacher-misc-1.1.2.tar.bz2;
+      sha256 = "0nkym3n48b4v36y4s927bbkjnsmicajarnf6vlp7wxp0as304i74";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf fontutil mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontscreencyrillic = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-screen-cyrillic-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-screen-cyrillic-1.0.4.tar.bz2;
+      sha256 = "0yayf1qlv7irf58nngddz2f1q04qkpr5jwp4aja2j5gyvzl32hl2";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontsonymisc = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-sony-misc-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-sony-misc-1.0.3.tar.bz2;
+      sha256 = "1xfgcx4gsgik5mkgkca31fj3w72jw9iw76qyrajrsz1lp8ka6hr0";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontsproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "fontsproto-2.1.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/proto/fontsproto-2.1.3.tar.bz2;
+      sha256 = "1f2sdsd74y34nnaf4m1zlcbhyv8xb6irnisc99f84c4ivnq4d415";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontsunmisc = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-sun-misc-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-sun-misc-1.0.3.tar.bz2;
+      sha256 = "1q6jcqrffg9q5f5raivzwx9ffvf7r11g6g0b125na1bhpz5ly7s8";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontutil = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "font-util-1.3.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/font/font-util-1.3.1.tar.bz2;
+      sha256 = "08drjb6cf84pf5ysghjpb4i7xkd2p86k3wl2a0jxs1jif6qbszma";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontwinitzkicyrillic = callPackage ({ stdenv, pkgconfig, fetchurl, bdftopcf, mkfontdir }: stdenv.mkDerivation {
+    name = "font-winitzki-cyrillic-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-winitzki-cyrillic-1.0.3.tar.bz2;
+      sha256 = "181n1bgq8vxfxqicmy1jpm1hnr6gwn1kdhl6hr4frjigs1ikpldb";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ bdftopcf mkfontdir ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  fontxfree86type1 = callPackage ({ stdenv, pkgconfig, fetchurl, mkfontdir, mkfontscale }: stdenv.mkDerivation {
+    name = "font-xfree86-type1-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/font-xfree86-type1-1.0.4.tar.bz2;
+      sha256 = "0jp3zc0qfdaqfkgzrb44vi9vi0a8ygb35wp082yz7rvvxhmg9sya";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ mkfontdir mkfontscale ];
+    configureFlags = [ "--with-fontrootdir=$(out)/lib/X11/fonts" ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  gccmakedep = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "gccmakedep-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/util/gccmakedep-1.0.3.tar.bz2;
+      sha256 = "1r1fpy5ni8chbgx7j5sz0008fpb6vbazpy1nifgdhgijyzqxqxdj";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  glproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "glproto-1.4.17";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/proto/glproto-1.4.17.tar.bz2;
+      sha256 = "0h5ykmcddwid5qj6sbrszgkcypwn3mslvswxpgy2n2iixnyr9amd";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  iceauth = callPackage ({ stdenv, pkgconfig, fetchurl, libICE, xproto }: stdenv.mkDerivation {
+    name = "iceauth-1.0.7";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/iceauth-1.0.7.tar.bz2;
+      sha256 = "02izdyzhwpgiyjd8brzilwvwnfr72ncjb6mzz3y1icwrxqnsy5hj";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libICE xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  imake = callPackage ({ stdenv, pkgconfig, fetchurl, xproto }: stdenv.mkDerivation {
+    name = "imake-1.0.7";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/util/imake-1.0.7.tar.bz2;
+      sha256 = "0zpk8p044jh14bis838shbf4100bjg7mccd7bq54glpsq552q339";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  inputproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "inputproto-2.3.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/proto/inputproto-2.3.2.tar.bz2;
+      sha256 = "07gk7v006zqn3dcfh16l06gnccy7xnqywf3vl9c209ikazsnlfl9";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  kbproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "kbproto-1.0.7";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/proto/kbproto-1.0.7.tar.bz2;
+      sha256 = "0mxqj1pzhjpz9495vrjnpi10kv2n1s4vs7di0sh3yvipfq5j30pq";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libAppleWM = callPackage ({ stdenv, pkgconfig, fetchurl, applewmproto, libX11, libXext, xextproto }: stdenv.mkDerivation {
+    name = "libAppleWM-1.4.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/libAppleWM-1.4.1.tar.bz2;
+      sha256 = "0r8x28n45q89x91mz8mv0zkkcxi8wazkac886fyvflhiv2y8ap2y";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ applewmproto libX11 libXext xextproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libFS = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, xproto, xtrans }: stdenv.mkDerivation {
+    name = "libFS-1.0.7";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libFS-1.0.7.tar.bz2;
+      sha256 = "1wy4km3qwwajbyl8y9pka0zwizn7d9pfiyjgzba02x3a083lr79f";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto xproto xtrans ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libICE = callPackage ({ stdenv, pkgconfig, fetchurl, xproto, xtrans }: stdenv.mkDerivation {
+    name = "libICE-1.0.9";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libICE-1.0.9.tar.bz2;
+      sha256 = "00p2b6bsg6kcdbb39bv46339qcywxfl4hsrz8asm4hy6q7r34w4g";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ xproto xtrans ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libSM = callPackage ({ stdenv, pkgconfig, fetchurl, libICE, libuuid, xproto, xtrans }: stdenv.mkDerivation {
+    name = "libSM-1.2.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libSM-1.2.2.tar.bz2;
+      sha256 = "1gc7wavgs435g9qkp9jw4lhmaiq6ip9llv49f054ad6ryp4sib0b";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libICE libuuid xproto xtrans ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libWindowsWM = callPackage ({ stdenv, pkgconfig, fetchurl, windowswmproto, libX11, libXext, xextproto }: stdenv.mkDerivation {
+    name = "libWindowsWM-1.0.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/libWindowsWM-1.0.1.tar.bz2;
+      sha256 = "1p0flwb67xawyv6yhri9w17m1i4lji5qnd0gq8v1vsfb8zw7rw15";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ windowswmproto libX11 libXext xextproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libX11 = callPackage ({ stdenv, pkgconfig, fetchurl, inputproto, kbproto, libxcb, xextproto, xf86bigfontproto, xproto, xtrans }: stdenv.mkDerivation {
+    name = "libX11-1.6.7";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libX11-1.6.7.tar.bz2;
+      sha256 = "0j0k5bjz4kd7rx6z09n5ggxbzbi84wf78xx25ikx6jmsxwq9w3li";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ inputproto kbproto libxcb xextproto xf86bigfontproto xproto xtrans ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXScrnSaver = callPackage ({ stdenv, pkgconfig, fetchurl, scrnsaverproto, libX11, libXext, xextproto }: stdenv.mkDerivation {
+    name = "libXScrnSaver-1.2.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/libXScrnSaver-1.2.2.tar.bz2;
+      sha256 = "07ff4r20nkkrj7h08f9fwamds9b3imj8jz5iz6y38zqw6jkyzwcg";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ scrnsaverproto libX11 libXext xextproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXau = callPackage ({ stdenv, pkgconfig, fetchurl, xproto }: stdenv.mkDerivation {
+    name = "libXau-1.0.8";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXau-1.0.8.tar.bz2;
+      sha256 = "1wm4pv12f36cwzhldpp7vy3lhm3xdcnp4f184xkxsp7b18r7gm7x";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXaw = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXext, xextproto, libXmu, libXpm, xproto, libXt }: stdenv.mkDerivation {
+    name = "libXaw-1.0.13";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXaw-1.0.13.tar.bz2;
+      sha256 = "1kdhxplwrn43d9jp3v54llp05kwx210lrsdvqb6944jp29rhdy4f";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXext xextproto libXmu libXpm xproto libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXcomposite = callPackage ({ stdenv, pkgconfig, fetchurl, compositeproto, libX11, libXfixes, xproto }: stdenv.mkDerivation {
+    name = "libXcomposite-0.4.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXcomposite-0.4.4.tar.bz2;
+      sha256 = "0y21nfpa5s8qmx0srdlilyndas3sgl0c6rc26d5fx2vx436m1qpd";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ compositeproto libX11 libXfixes xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXcursor = callPackage ({ stdenv, pkgconfig, fetchurl, fixesproto, libX11, libXfixes, xproto, libXrender }: stdenv.mkDerivation {
+    name = "libXcursor-1.1.15";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXcursor-1.1.15.tar.bz2;
+      sha256 = "0syzlfvh29037p0vnlc8f3jxz8nl55k65blswsakklkwsc6nfki9";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fixesproto libX11 libXfixes xproto libXrender ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXdamage = callPackage ({ stdenv, pkgconfig, fetchurl, damageproto, fixesproto, libX11, xextproto, libXfixes, xproto }: stdenv.mkDerivation {
+    name = "libXdamage-1.1.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXdamage-1.1.4.tar.bz2;
+      sha256 = "1bamagq7g6s0d23l8rb3nppj8ifqj05f7z9bhbs4fdg8az3ffgvw";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ damageproto fixesproto libX11 xextproto libXfixes xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXdmcp = callPackage ({ stdenv, pkgconfig, fetchurl, xproto }: stdenv.mkDerivation {
+    name = "libXdmcp-1.1.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXdmcp-1.1.2.tar.bz2;
+      sha256 = "1qp4yhxbfnpj34swa0fj635kkihdkwaiw7kf55cg5zqqg630kzl1";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXext = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xextproto, xproto }: stdenv.mkDerivation {
+    name = "libXext-1.3.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXext-1.3.3.tar.bz2;
+      sha256 = "0dbfn5bznnrhqzvkrcmw4c44yvvpwdcsrvzxf4rk27r36b9x865m";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xextproto xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXfixes = callPackage ({ stdenv, pkgconfig, fetchurl, fixesproto, libX11, xextproto, xproto }: stdenv.mkDerivation {
+    name = "libXfixes-5.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXfixes-5.0.3.tar.bz2;
+      sha256 = "1miana3y4hwdqdparsccmygqr3ic3hs5jrqfzp70hvi2zwxd676y";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fixesproto libX11 xextproto xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXfont = callPackage ({ stdenv, pkgconfig, fetchurl, libfontenc, fontsproto, freetype, xproto, xtrans, zlib }: stdenv.mkDerivation {
+    name = "libXfont-1.5.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXfont-1.5.4.tar.bz2;
+      sha256 = "0hiji1bvpl78aj3a3141hkk353aich71wv8l5l2z51scfy878zqs";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libfontenc fontsproto freetype xproto xtrans zlib ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXfont2 = callPackage ({ stdenv, pkgconfig, fetchurl, libfontenc, fontsproto, freetype, xproto, xtrans, zlib }: stdenv.mkDerivation {
+    name = "libXfont2-2.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXfont2-2.0.3.tar.bz2;
+      sha256 = "0klwmimmhm3axpj8pwn5l41lbggh47r5aazhw63zxkbwfgyvg2hf";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libfontenc fontsproto freetype xproto xtrans zlib ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXft = callPackage ({ stdenv, pkgconfig, fetchurl, fontconfig, freetype, libX11, xproto, libXrender }: stdenv.mkDerivation {
+    name = "libXft-2.3.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXft-2.3.2.tar.bz2;
+      sha256 = "0k6wzi5rzs0d0n338ms8n8lfyhq914hw4yl2j7553wqxfqjci8zm";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontconfig freetype libX11 xproto libXrender ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXi = callPackage ({ stdenv, pkgconfig, fetchurl, inputproto, libX11, libXext, xextproto, libXfixes, xproto }: stdenv.mkDerivation {
+    name = "libXi-1.7.9";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXi-1.7.9.tar.bz2;
+      sha256 = "0idg1wc01hndvaa820fvfs7phvd1ymf0lldmq6386i7rhkzvirn2";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ inputproto libX11 libXext xextproto libXfixes xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXinerama = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXext, xextproto, xineramaproto }: stdenv.mkDerivation {
+    name = "libXinerama-1.1.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXinerama-1.1.4.tar.bz2;
+      sha256 = "086p0axqj57nvkaqa6r00dnr9kyrn1m8blgf0zjy25zpxkbxn200";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXext xextproto xineramaproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXmu = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXext, xextproto, xproto, libXt }: stdenv.mkDerivation {
+    name = "libXmu-1.1.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXmu-1.1.2.tar.bz2;
+      sha256 = "02wx6jw7i0q5qwx87yf94fsn3h0xpz1k7dz1nkwfwm1j71ydqvkm";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXext xextproto xproto libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXp = callPackage ({ stdenv, pkgconfig, fetchurl, printproto, libX11, libXau, libXext, xextproto }: stdenv.mkDerivation {
+    name = "libXp-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXp-1.0.3.tar.bz2;
+      sha256 = "0mwc2jwmq03b1m9ihax5c6gw2ln8rc70zz4fsj3kb7440nchqdkz";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ printproto libX11 libXau libXext xextproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXpm = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXext, xextproto, xproto, libXt }: stdenv.mkDerivation {
+    name = "libXpm-3.5.12";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXpm-3.5.12.tar.bz2;
+      sha256 = "1v5xaiw4zlhxspvx76y3hq4wpxv7mpj6parqnwdqvpj8vbinsspx";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXext xextproto xproto libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXpresent = callPackage ({ stdenv, pkgconfig, fetchurl, presentproto, libX11, xextproto, xproto }: stdenv.mkDerivation {
+    name = "libXpresent-1.0.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXpresent-1.0.0.tar.bz2;
+      sha256 = "12kvvar3ihf6sw49h6ywfdiwmb8i1gh8wasg1zhzp6hs2hay06n1";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ presentproto libX11 xextproto xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXrandr = callPackage ({ stdenv, pkgconfig, fetchurl, randrproto, renderproto, libX11, libXext, xextproto, xproto, libXrender }: stdenv.mkDerivation {
+    name = "libXrandr-1.5.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXrandr-1.5.1.tar.bz2;
+      sha256 = "06pmphx8lp3iywqnh88fvbfb0d8xgkx0qpvan49akpja1vxfgy8z";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ randrproto renderproto libX11 libXext xextproto xproto libXrender ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXrender = callPackage ({ stdenv, pkgconfig, fetchurl, renderproto, libX11, xproto }: stdenv.mkDerivation {
+    name = "libXrender-0.9.10";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXrender-0.9.10.tar.bz2;
+      sha256 = "0j89cnb06g8x79wmmnwzykgkkfdhin9j7hjpvsxwlr3fz1wmjvf0";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ renderproto libX11 xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXres = callPackage ({ stdenv, pkgconfig, fetchurl, resourceproto, libX11, libXext, xextproto, xproto }: stdenv.mkDerivation {
+    name = "libXres-1.2.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXres-1.2.0.tar.bz2;
+      sha256 = "1m0jr0lbz9ixpp9ihk68349q0i7ry2379lnfzdy4mrl86ijc2xgz";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ resourceproto libX11 libXext xextproto xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXt = callPackage ({ stdenv, pkgconfig, fetchurl, libICE, kbproto, libSM, libX11, xproto }: stdenv.mkDerivation {
+    name = "libXt-1.1.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXt-1.1.5.tar.bz2;
+      sha256 = "06lz6i7rbrp19kgikpaz4c97fw7n31k2h2aiikczs482g2zbdvj6";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libICE kbproto libSM libX11 xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXtst = callPackage ({ stdenv, pkgconfig, fetchurl, inputproto, recordproto, libX11, libXext, xextproto, libXi }: stdenv.mkDerivation {
+    name = "libXtst-1.2.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXtst-1.2.3.tar.bz2;
+      sha256 = "012jpyj7xfm653a9jcfqbzxyywdmwb2b5wr1dwylx14f3f54jma6";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ inputproto recordproto libX11 libXext xextproto libXi ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXv = callPackage ({ stdenv, pkgconfig, fetchurl, videoproto, libX11, libXext, xextproto, xproto }: stdenv.mkDerivation {
+    name = "libXv-1.0.11";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXv-1.0.11.tar.bz2;
+      sha256 = "125hn06bd3d8y97hm2pbf5j55gg4r2hpd3ifad651i4sr7m16v6j";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ videoproto libX11 libXext xextproto xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXvMC = callPackage ({ stdenv, pkgconfig, fetchurl, videoproto, libX11, libXext, xextproto, xproto, libXv }: stdenv.mkDerivation {
+    name = "libXvMC-1.0.10";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXvMC-1.0.10.tar.bz2;
+      sha256 = "0bpffxr5dal90a8miv2w0rif61byqxq2f5angj4z1bnznmws00g5";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ videoproto libX11 libXext xextproto xproto libXv ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXxf86dga = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXext, xextproto, xf86dgaproto, xproto }: stdenv.mkDerivation {
+    name = "libXxf86dga-1.1.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXxf86dga-1.1.4.tar.bz2;
+      sha256 = "0zn7aqj8x0951d8zb2h2andldvwkzbsc4cs7q023g6nzq6vd9v4f";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXext xextproto xf86dgaproto xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXxf86misc = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXext, xextproto, xf86miscproto, xproto }: stdenv.mkDerivation {
+    name = "libXxf86misc-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXxf86misc-1.0.3.tar.bz2;
+      sha256 = "0nvbq9y6k6m9hxdvg3crycqsnnxf1859wrisqcs37z9fhq044gsn";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXext xextproto xf86miscproto xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libXxf86vm = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXext, xextproto, xf86vidmodeproto, xproto }: stdenv.mkDerivation {
+    name = "libXxf86vm-1.1.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXxf86vm-1.1.4.tar.bz2;
+      sha256 = "0mydhlyn72i7brjwypsqrpkls3nm6vxw0li8b2nw0caz7kwjgvmg";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXext xextproto xf86vidmodeproto xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libdmx = callPackage ({ stdenv, pkgconfig, fetchurl, dmxproto, libX11, libXext, xextproto }: stdenv.mkDerivation {
+    name = "libdmx-1.1.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libdmx-1.1.3.tar.bz2;
+      sha256 = "00djlxas38kbsrglcmwmxfbmxjdchlbj95pqwjvdg8jn5rns6zf9";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ dmxproto libX11 libXext xextproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libfontenc = callPackage ({ stdenv, pkgconfig, fetchurl, xproto, zlib }: stdenv.mkDerivation {
+    name = "libfontenc-1.1.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libfontenc-1.1.3.tar.bz2;
+      sha256 = "08gxmrhgw97mv0pvkfmd46zzxrn6zdw4g27073zl55gwwqq8jn3h";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ xproto zlib ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libpciaccess = callPackage ({ stdenv, pkgconfig, fetchurl, zlib }: stdenv.mkDerivation {
+    name = "libpciaccess-0.14";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libpciaccess-0.14.tar.bz2;
+      sha256 = "197jbcpvp4z4x6j705mq2y4fsnnypy6f85y8xalgwhgx5bhl7x9x";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ zlib ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libpthreadstubs = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "libpthread-stubs-0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = http://xcb.freedesktop.org/dist/libpthread-stubs-0.4.tar.bz2;
+      sha256 = "0cz7s9w8lqgzinicd4g36rjg08zhsbyngh0w68c3np8nlc8mkl74";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libxcb = callPackage ({ stdenv, pkgconfig, fetchurl, libxslt, libpthreadstubs, libXau, xcbproto, libXdmcp, python }: stdenv.mkDerivation {
+    name = "libxcb-1.13.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = http://xcb.freedesktop.org/dist/libxcb-1.13.1.tar.bz2;
+      sha256 = "1i27lvrcsygims1pddpl5c4qqs6z715lm12ax0n3vx0igapvg7x8";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig python ];
+    buildInputs = [ libxslt libpthreadstubs libXau xcbproto libXdmcp ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libxkbfile = callPackage ({ stdenv, pkgconfig, fetchurl, kbproto, libX11 }: stdenv.mkDerivation {
+    name = "libxkbfile-1.0.9";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libxkbfile-1.0.9.tar.bz2;
+      sha256 = "0smimr14zvail7ar68n7spvpblpdnih3jxrva7cpa6cn602px0ai";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ kbproto libX11 ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  libxshmfence = callPackage ({ stdenv, pkgconfig, fetchurl, xproto }: stdenv.mkDerivation {
+    name = "libxshmfence-1.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libxshmfence-1.2.tar.bz2;
+      sha256 = "032b0nlkdrpbimdld4gqvhqx53rzn8fawvf1ybhzn7lcswgjs6yj";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  lndir = callPackage ({ stdenv, pkgconfig, fetchurl, xproto }: stdenv.mkDerivation {
+    name = "lndir-1.0.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/util/lndir-1.0.3.tar.bz2;
+      sha256 = "0pdngiy8zdhsiqx2am75yfcl36l7kd7d7nl0rss8shcdvsqgmx29";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  luit = callPackage ({ stdenv, pkgconfig, fetchurl, libfontenc }: stdenv.mkDerivation {
+    name = "luit-1.1.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/luit-1.1.1.tar.bz2;
+      sha256 = "0dn694mk56x6hdk6y9ylx4f128h5jcin278gnw2gb807rf3ygc1h";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libfontenc ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  makedepend = callPackage ({ stdenv, pkgconfig, fetchurl, xproto }: stdenv.mkDerivation {
+    name = "makedepend-1.0.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/util/makedepend-1.0.5.tar.bz2;
+      sha256 = "09alw99r6y2bbd1dc786n3jfgv4j520apblyn7cw6jkjydshba7p";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  mkfontdir = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "mkfontdir-1.0.7";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/mkfontdir-1.0.7.tar.bz2;
+      sha256 = "0c3563kw9fg15dpgx4dwvl12qz6sdqdns1pxa574hc7i5m42mman";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  mkfontscale = callPackage ({ stdenv, pkgconfig, fetchurl, libfontenc, freetype, xproto, zlib }: stdenv.mkDerivation {
+    name = "mkfontscale-1.1.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/mkfontscale-1.1.2.tar.bz2;
+      sha256 = "081z8lwh9c1gyrx3ad12whnpv3jpfbqsc366mswpfm48mwl54vcc";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libfontenc freetype xproto zlib ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  presentproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "presentproto-1.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/proto/presentproto-1.1.tar.bz2;
+      sha256 = "1f96dlgfwhsd0834z8ydjzjnb0cwha5r6lxgia4say4zhsl276zn";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  printproto = callPackage ({ stdenv, pkgconfig, fetchurl, libXau }: stdenv.mkDerivation {
+    name = "printproto-1.0.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/proto/printproto-1.0.5.tar.bz2;
+      sha256 = "06liap8n4s25sgp27d371cc7yg9a08dxcr3pmdjp761vyin3360j";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libXau ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  randrproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "randrproto-1.5.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/proto/randrproto-1.5.0.tar.bz2;
+      sha256 = "0s4496z61y5q45q20gldwpf788b9nsa8hb13gnck1mwwwwrmarsc";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  recordproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "recordproto-1.14.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/recordproto-1.14.2.tar.bz2;
+      sha256 = "0w3kgr1zabwf79bpc28dcnj0fpni6r53rpi82ngjbalj5s6m8xx7";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  renderproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "renderproto-0.11.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/renderproto-0.11.1.tar.bz2;
+      sha256 = "0dr5xw6s0qmqg0q5pdkb4jkdhaja0vbfqla79qh5j1xjj9dmlwq6";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  resourceproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "resourceproto-1.2.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/resourceproto-1.2.0.tar.bz2;
+      sha256 = "0638iyfiiyjw1hg3139pai0j6m65gkskrvd9684zgc6ydcx00riw";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  scrnsaverproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "scrnsaverproto-1.2.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/scrnsaverproto-1.2.2.tar.bz2;
+      sha256 = "0rfdbfwd35d761xkfifcscx56q0n56043ixlmv70r4v4l66hmdwb";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  sessreg = callPackage ({ stdenv, pkgconfig, fetchurl, xproto }: stdenv.mkDerivation {
+    name = "sessreg-1.1.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/sessreg-1.1.1.tar.bz2;
+      sha256 = "1qd66mg2bnppqz4xgdjzif2488zl82vx2c26ld3nb8pnyginm9vq";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  setxkbmap = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libxkbfile }: stdenv.mkDerivation {
+    name = "setxkbmap-1.3.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/setxkbmap-1.3.1.tar.bz2;
+      sha256 = "1qfk097vjysqb72pq89h0la3462kbb2dh1d11qzs2fr67ybb7pd9";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libxkbfile ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  smproxy = callPackage ({ stdenv, pkgconfig, fetchurl, libICE, libSM, libXmu, libXt }: stdenv.mkDerivation {
+    name = "smproxy-1.0.6";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/smproxy-1.0.6.tar.bz2;
+      sha256 = "0rkjyzmsdqmlrkx8gy2j4q6iksk58hcc92xzdprkf8kml9ar3wbc";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libICE libSM libXmu libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  twm = callPackage ({ stdenv, pkgconfig, fetchurl, libICE, libSM, libX11, libXext, libXmu, xproto, libXt }: stdenv.mkDerivation {
+    name = "twm-1.0.9";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/twm-1.0.9.tar.bz2;
+      sha256 = "02iicvhkp3i7q5rliyymiq9bppjr0pzfs6rgb78kppryqdx1cxf5";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libICE libSM libX11 libXext libXmu xproto libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  utilmacros = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "util-macros-1.19.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/util/util-macros-1.19.2.tar.bz2;
+      sha256 = "04p7ydqxgq37jklnfj18b70zsifiz4h50wvrk94i2112mmv37r6p";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  videoproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "videoproto-2.3.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/proto/videoproto-2.3.3.tar.bz2;
+      sha256 = "00m7rh3pwmsld4d5fpii3xfk5ciqn17kkk38gfpzrrh8zn4ki067";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  windowswmproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "windowswmproto-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/windowswmproto-1.0.4.tar.bz2;
+      sha256 = "0syjxgy4m8l94qrm03nvn5k6bkxc8knnlld1gbllym97nvnv0ny0";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  x11perf = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXext, libXft, libXmu, xproto, libXrender }: stdenv.mkDerivation {
+    name = "x11perf-1.6.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/x11perf-1.6.0.tar.bz2;
+      sha256 = "0lb716yfdb8f11h4cz93d1bapqdxf1xplsb21kbp4xclq7g9hw78";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXext libXft libXmu xproto libXrender ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xauth = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXau, libXext, libXmu, xproto }: stdenv.mkDerivation {
+    name = "xauth-1.0.10";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xauth-1.0.10.tar.bz2;
+      sha256 = "0kgwz9rmxjfdvi2syf8g0ms5rr5cgyqx4n0n1m960kyz7k745zjs";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXau libXext libXmu xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xbacklight = callPackage ({ stdenv, pkgconfig, fetchurl, libxcb, xcbutil }: stdenv.mkDerivation {
+    name = "xbacklight-1.2.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xbacklight-1.2.2.tar.bz2;
+      sha256 = "0pmzaz4kp38qv2lqiw5rnqhwzmwrq65m1x5j001mmv99wh9isnk1";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libxcb xcbutil ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xbitmaps = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "xbitmaps-1.1.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/xbitmaps-1.1.1.tar.bz2;
+      sha256 = "178ym90kwidia6nas4qr5n5yqh698vv8r02js0r4vg3b6lsb0w9n";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xcbproto = callPackage ({ stdenv, pkgconfig, fetchurl, python }: stdenv.mkDerivation {
+    name = "xcb-proto-1.13";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = http://xcb.freedesktop.org/dist/xcb-proto-1.13.tar.bz2;
+      sha256 = "1qdxw9syhbvswiqj5dvj278lrmfhs81apzmvx6205s4vcqg7563v";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig python ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xcbutil = callPackage ({ stdenv, pkgconfig, fetchurl, gperf, m4, libxcb, xproto }: stdenv.mkDerivation {
+    name = "xcb-util-0.4.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = http://xcb.freedesktop.org/dist/xcb-util-0.4.0.tar.bz2;
+      sha256 = "1sahmrgbpyki4bb72hxym0zvxwnycmswsxiisgqlln9vrdlr9r26";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ gperf m4 libxcb xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xcbutilcursor = callPackage ({ stdenv, pkgconfig, fetchurl, gperf, m4, libxcb, xcbutilimage, xcbutilrenderutil, xproto }: stdenv.mkDerivation {
+    name = "xcb-util-cursor-0.1.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = https://xcb.freedesktop.org/dist/xcb-util-cursor-0.1.3.tar.bz2;
+      sha256 = "0krr4rcw6r42cncinzvzzdqnmxk3nrgpnadyg2h8k9x10q3hm885";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ gperf m4 libxcb xcbutilimage xcbutilrenderutil xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xcbutilerrors = callPackage ({ stdenv, pkgconfig, fetchurl, gperf, m4, libxcb, xcbproto, xproto }: stdenv.mkDerivation {
+    name = "xcb-util-errors-1.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = http://xcb.freedesktop.org/dist/xcb-util-errors-1.0.tar.bz2;
+      sha256 = "158rm913dg3hxrrhyvvxr8bcm0pjy5jws70dhy2s12w1krv829k8";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ gperf m4 libxcb xcbproto xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xcbutilimage = callPackage ({ stdenv, pkgconfig, fetchurl, gperf, m4, libxcb, xcbutil, xproto }: stdenv.mkDerivation {
+    name = "xcb-util-image-0.4.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = http://xcb.freedesktop.org/dist/xcb-util-image-0.4.0.tar.bz2;
+      sha256 = "1z1gxacg7q4cw6jrd26gvi5y04npsyavblcdad1xccc8swvnmf9d";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ gperf m4 libxcb xcbutil xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xcbutilkeysyms = callPackage ({ stdenv, pkgconfig, fetchurl, gperf, m4, libxcb, xproto }: stdenv.mkDerivation {
+    name = "xcb-util-keysyms-0.4.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = http://xcb.freedesktop.org/dist/xcb-util-keysyms-0.4.0.tar.bz2;
+      sha256 = "1nbd45pzc1wm6v5drr5338j4nicbgxa5hcakvsvm5pnyy47lky0f";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ gperf m4 libxcb xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xcbutilrenderutil = callPackage ({ stdenv, pkgconfig, fetchurl, gperf, m4, libxcb, xproto }: stdenv.mkDerivation {
+    name = "xcb-util-renderutil-0.3.9";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = http://xcb.freedesktop.org/dist/xcb-util-renderutil-0.3.9.tar.bz2;
+      sha256 = "0nza1csdvvxbmk8vgv8vpmq7q8h05xrw3cfx9lwxd1hjzd47xsf6";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ gperf m4 libxcb xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xcbutilwm = callPackage ({ stdenv, pkgconfig, fetchurl, gperf, m4, libxcb, xproto }: stdenv.mkDerivation {
+    name = "xcb-util-wm-0.4.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = http://xcb.freedesktop.org/dist/xcb-util-wm-0.4.1.tar.bz2;
+      sha256 = "0gra7hfyxajic4mjd63cpqvd20si53j1q3rbdlkqkahfciwq3gr8";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ gperf m4 libxcb xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xclock = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXaw, libXft, libxkbfile, libXmu, xproto, libXrender, libXt }: stdenv.mkDerivation {
+    name = "xclock-1.0.7";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xclock-1.0.7.tar.bz2;
+      sha256 = "1l3xv4bsca6bwxx73jyjz0blav86i7vwffkhdb1ac81y9slyrki3";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXaw libXft libxkbfile libXmu xproto libXrender libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xcmiscproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "xcmiscproto-1.2.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/xcmiscproto-1.2.2.tar.bz2;
+      sha256 = "1pyjv45wivnwap2wvsbrzdvjc5ql8bakkbkrvcv6q9bjjf33ccmi";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xcmsdb = callPackage ({ stdenv, pkgconfig, fetchurl, libX11 }: stdenv.mkDerivation {
+    name = "xcmsdb-1.0.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xcmsdb-1.0.5.tar.bz2;
+      sha256 = "1ik7gzlp2igz183x70883000ygp99r20x3aah6xhaslbpdhm6n75";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xcompmgr = callPackage ({ stdenv, pkgconfig, fetchurl, libXcomposite, libXdamage, libXext, libXfixes, libXrender }: stdenv.mkDerivation {
+    name = "xcompmgr-1.1.7";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xcompmgr-1.1.7.tar.bz2;
+      sha256 = "14k89mz13jxgp4h2pz0yq0fbkw1lsfcb3acv8vkknc9i4ld9n168";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libXcomposite libXdamage libXext libXfixes libXrender ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xcursorgen = callPackage ({ stdenv, pkgconfig, fetchurl, libpng, libX11, libXcursor }: stdenv.mkDerivation {
+    name = "xcursorgen-1.0.6";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xcursorgen-1.0.6.tar.bz2;
+      sha256 = "0v7nncj3kaa8c0524j7ricdf4rvld5i7c3m6fj55l5zbah7r3j1i";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libpng libX11 libXcursor ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xcursorthemes = callPackage ({ stdenv, pkgconfig, fetchurl, libXcursor }: stdenv.mkDerivation {
+    name = "xcursor-themes-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/data/xcursor-themes-1.0.4.tar.bz2;
+      sha256 = "11mv661nj1p22sqkv87ryj2lcx4m68a04b0rs6iqh3fzp42jrzg3";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libXcursor ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xdm = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXau, libXaw, libXdmcp, libXext, libXft, libXinerama, libXmu, libXpm, libXt }: stdenv.mkDerivation {
+    name = "xdm-1.1.11";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xdm-1.1.11.tar.bz2;
+      sha256 = "0iqw11977lpr9nk1is4fca84d531vck0mq7jldwl44m0vrnl5nnl";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXau libXaw libXdmcp libXext libXft libXinerama libXmu libXpm libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xdpyinfo = callPackage ({ stdenv, pkgconfig, fetchurl, libdmx, libX11, libxcb, libXcomposite, libXext, libXi, libXinerama, xproto, libXrender, libXtst, libXxf86dga, libXxf86misc, libXxf86vm }: stdenv.mkDerivation {
+    name = "xdpyinfo-1.3.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xdpyinfo-1.3.2.tar.bz2;
+      sha256 = "0ldgrj4w2fa8jng4b3f3biaj0wyn8zvya88pnk70d7k12pcqw8rh";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libdmx libX11 libxcb libXcomposite libXext libXi libXinerama xproto libXrender libXtst libXxf86dga libXxf86misc libXxf86vm ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xdriinfo = callPackage ({ stdenv, pkgconfig, fetchurl, glproto, libX11 }: stdenv.mkDerivation {
+    name = "xdriinfo-1.0.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xdriinfo-1.0.5.tar.bz2;
+      sha256 = "0681d0y8liqakkpz7mmsf689jcxrvs5291r20qi78mc9xxk3gfjc";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ glproto libX11 ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xev = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xproto, libXrandr }: stdenv.mkDerivation {
+    name = "xev-1.2.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xev-1.2.2.tar.bz2;
+      sha256 = "0krivhrxpq6719103r541xpi3i3a0y15f7ypc4lnrx8sdhmfcjnr";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xproto libXrandr ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xextproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "xextproto-7.3.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/proto/xextproto-7.3.0.tar.bz2;
+      sha256 = "1c2vma9gqgc2v06rfxdiqgwhxmzk2cbmknwf1ng3m76vr0xb5x7k";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xeyes = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXext, libXmu, xproto, libXrender, libXt }: stdenv.mkDerivation {
+    name = "xeyes-1.1.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xeyes-1.1.2.tar.bz2;
+      sha256 = "0lq5j7fryx1wn998jq6h3icz1h6pqrsbs3adskjzjyhn5l6yrg2p";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXext libXmu xproto libXrender libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86bigfontproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "xf86bigfontproto-1.2.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/xf86bigfontproto-1.2.0.tar.bz2;
+      sha256 = "0j0n7sj5xfjpmmgx6n5x556rw21hdd18fwmavp95wps7qki214ms";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86dgaproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "xf86dgaproto-2.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/xf86dgaproto-2.1.tar.bz2;
+      sha256 = "0l4hx48207mx0hp09026r6gy9nl3asbq0c75hri19wp1118zcpmc";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86driproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "xf86driproto-2.1.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/xf86driproto-2.1.1.tar.bz2;
+      sha256 = "07v69m0g2dfzb653jni4x656jlr7l84c1k39j8qc8vfb45r8sjww";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86inputevdev = callPackage ({ stdenv, pkgconfig, fetchurl, inputproto, udev, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-input-evdev-2.10.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-input-evdev-2.10.5.tar.bz2;
+      sha256 = "03dphgwjaxxyys8axc1kyysp6xvy9bjxicsdrhi2jvdgbchadnly";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ inputproto udev xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86inputjoystick = callPackage ({ stdenv, pkgconfig, fetchurl, inputproto, kbproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-input-joystick-1.6.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-input-joystick-1.6.3.tar.bz2;
+      sha256 = "1awfq496d082brgjbr60lhm6jvr9537rflwxqdfqwfzjy3n6jxly";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ inputproto kbproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86inputkeyboard = callPackage ({ stdenv, pkgconfig, fetchurl, inputproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-input-keyboard-1.9.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-input-keyboard-1.9.0.tar.bz2;
+      sha256 = "12032yg412kyvnmc5fha1in7mpi651d8sa1bk4138s2j2zr01jgp";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ inputproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86inputlibinput = callPackage ({ stdenv, pkgconfig, fetchurl, inputproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-input-libinput-0.28.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-input-libinput-0.28.0.tar.bz2;
+      sha256 = "189h8vl0005yizwrs4d0sng6j8lwkd3xi1zwqg8qavn2bw34v691";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ inputproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86inputmouse = callPackage ({ stdenv, pkgconfig, fetchurl, inputproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-input-mouse-1.9.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-input-mouse-1.9.2.tar.bz2;
+      sha256 = "0bsbgww9421792zan43j60mndqprhfxhc48agsi15d3abjqda9gl";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ inputproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86inputsynaptics = callPackage ({ stdenv, pkgconfig, fetchurl, inputproto, randrproto, recordproto, libX11, libXi, xorgserver, xproto, libXtst }: stdenv.mkDerivation {
+    name = "xf86-input-synaptics-1.9.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-input-synaptics-1.9.0.tar.bz2;
+      sha256 = "0niv0w1czbxh4y3qkqbpdp5gjwhp3379inwhknhif0m4sy4k5fmg";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ inputproto randrproto recordproto libX11 libXi xorgserver xproto libXtst ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86inputvmmouse = callPackage ({ stdenv, pkgconfig, fetchurl, inputproto, udev, randrproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-input-vmmouse-13.1.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-input-vmmouse-13.1.0.tar.bz2;
+      sha256 = "06ckn4hlkpig5vnivl0zj8a7ykcgvrsj8b3iccl1pgn1gaamix8a";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ inputproto udev randrproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86inputvoid = callPackage ({ stdenv, pkgconfig, fetchurl, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-input-void-1.4.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-input-void-1.4.1.tar.bz2;
+      sha256 = "171k8b8s42s3w73l7ln9jqwk88w4l7r1km2blx1vy898c854yvpr";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86miscproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "xf86miscproto-0.9.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/proto/xf86miscproto-0.9.3.tar.bz2;
+      sha256 = "15dhcdpv61fyj6rhzrhnwri9hlw8rjfy05z1vik118lc99mfrf25";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videoamdgpu = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, mesa_noglu, libGL, libdrm, udev, randrproto, renderproto, videoproto, xextproto, xf86driproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-amdgpu-1.4.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-amdgpu-1.4.0.tar.bz2;
+      sha256 = "0z56ifw3xiq9dychv8chg1cny0hq4v3c1r9pqcybk5fp7nzw9jpq";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto mesa_noglu libGL libdrm udev randrproto renderproto videoproto xextproto xf86driproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videoark = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-ark-0.7.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-ark-0.7.5.tar.bz2;
+      sha256 = "07p5vdsj2ckxb6wh02s61akcv4qfg6s1d5ld3jn3lfaayd3f1466";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videoast = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, videoproto, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-ast-1.1.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-ast-1.1.5.tar.bz2;
+      sha256 = "1pm2cy81ma7ldsw0yfk28b33h9z2hcj5rccrxhfxfgvxsiavrnqy";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto videoproto xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videoati = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libdrm, udev, libpciaccess, randrproto, renderproto, videoproto, xextproto, xf86driproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-ati-18.0.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-ati-18.0.1.tar.bz2;
+      sha256 = "180l2yw8c63cbcs3zk729vx439aig1d7yicpyxj0nmfl4y0kpskj";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libdrm udev libpciaccess randrproto renderproto videoproto xextproto xf86driproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videochips = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, videoproto, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-chips-1.2.7";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-chips-1.2.7.tar.bz2;
+      sha256 = "0n4zypmbkjzkw36cjy2braaivhvj60np6w80lcs9mfpabs66ia3f";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto videoproto xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videocirrus = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, videoproto, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-cirrus-1.5.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-cirrus-1.5.3.tar.bz2;
+      sha256 = "1asifc6ld2g9kap15vfhvsvyl69lj7pw3d9ra9mi4najllh7pj7d";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto videoproto xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videodummy = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, randrproto, renderproto, videoproto, xf86dgaproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-dummy-0.3.8";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-dummy-0.3.8.tar.bz2;
+      sha256 = "1fcm9vwgv8wnffbvkzddk4yxrh3kc0np6w65wj8k88q7jf3bn4ip";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto randrproto renderproto videoproto xf86dgaproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videofbdev = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, videoproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-fbdev-0.4.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-fbdev-0.4.4.tar.bz2;
+      sha256 = "06ym7yy017lanj730hfkpfk4znx3dsj8jq3qvyzsn8w294kb7m4x";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto videoproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videogeode = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, videoproto, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-geode-2.11.17";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-geode-2.11.17.tar.bz2;
+      sha256 = "0h9w6cfj7s86rg72c6qci8f733hg4g7paan5fwmmj7p74ckd9d07";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto videoproto xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videoglide = callPackage ({ stdenv, pkgconfig, fetchurl, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-glide-1.2.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-glide-1.2.2.tar.bz2;
+      sha256 = "1vaav6kx4n00q4fawgqnjmbdkppl0dir2dkrj4ad372mxrvl9c4y";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videoglint = callPackage ({ stdenv, pkgconfig, fetchurl, libpciaccess, videoproto, xextproto, xf86dgaproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-glint-1.2.9";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-glint-1.2.9.tar.bz2;
+      sha256 = "1lkpspvrvrp9s539bhfdjfh4andaqyk63l6zjn8m3km95smk6a45";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libpciaccess videoproto xextproto xf86dgaproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videoi128 = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, videoproto, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-i128-1.3.6";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-i128-1.3.6.tar.bz2;
+      sha256 = "171b8lbxr56w3isph947dnw7x87hc46v6m3mcxdcz44gk167x0pq";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto videoproto xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videoi740 = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, videoproto, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-i740-1.3.6";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-i740-1.3.6.tar.bz2;
+      sha256 = "0c8nl0yyyw08n4zd6sgw9p3a858wpgf6raczjd70gf47lncms389";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto videoproto xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videointel = callPackage ({ stdenv, pkgconfig, fetchurl, dri2proto, dri3proto, fontsproto, libdrm, libpng, udev, libpciaccess, presentproto, randrproto, renderproto, libX11, xcbutil, libxcb, libXcursor, libXdamage, libXext, xextproto, xf86driproto, libXfixes, xorgserver, xproto, libXrandr, libXrender, libxshmfence, libXtst, libXvMC }: stdenv.mkDerivation {
+    name = "xf86-video-intel-2.99.917";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-intel-2.99.917.tar.bz2;
+      sha256 = "1jb7jspmzidfixbc0gghyjmnmpqv85i7pi13l4h2hn2ml3p83dq0";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ dri2proto dri3proto fontsproto libdrm libpng udev libpciaccess presentproto randrproto renderproto libX11 xcbutil libxcb libXcursor libXdamage libXext xextproto xf86driproto libXfixes xorgserver xproto libXrandr libXrender libxshmfence libXtst libXvMC ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videomach64 = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libdrm, libpciaccess, randrproto, renderproto, videoproto, xextproto, xf86driproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-mach64-6.9.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-mach64-6.9.5.tar.bz2;
+      sha256 = "07xlf5nsjm0x18ij5gyy4lf8hwpl10i8chi3skpqjh84drdri61y";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libdrm libpciaccess randrproto renderproto videoproto xextproto xf86driproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videomga = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libdrm, libpciaccess, randrproto, renderproto, videoproto, xextproto, xf86driproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-mga-1.6.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-mga-1.6.5.tar.bz2;
+      sha256 = "08ll52hlar9z446v0wwca5qkj3hxhswwm7vvcgic9xv4cf7csqxn";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libdrm libpciaccess randrproto renderproto videoproto xextproto xf86driproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videoneomagic = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-neomagic-1.2.9";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-neomagic-1.2.9.tar.bz2;
+      sha256 = "1whb2kgyqaxdjim27ya404acz50izgmafwnb6y9m89q5n6b97y3j";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videonewport = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, randrproto, renderproto, videoproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-newport-0.2.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/xf86-video-newport-0.2.4.tar.bz2;
+      sha256 = "1yafmp23jrfdmc094i6a4dsizapsc9v0pl65cpc8w1kvn7343k4i";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto randrproto renderproto videoproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videonouveau = callPackage ({ stdenv, pkgconfig, fetchurl, dri2proto, fontsproto, libdrm, udev, libpciaccess, randrproto, renderproto, videoproto, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-nouveau-1.0.15";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-nouveau-1.0.15.tar.bz2;
+      sha256 = "0k0xah72ryjwak4dc4crszxrlkmi9x1s7p3sd4la642n77yi1pmf";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ dri2proto fontsproto libdrm udev libpciaccess randrproto renderproto videoproto xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videonv = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, videoproto, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-nv-2.1.21";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-nv-2.1.21.tar.bz2;
+      sha256 = "0bdk3pc5y0n7p53q4gc2ff7bw16hy5hwdjjxkm5j3s7hdyg6960z";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto videoproto xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videoopenchrome = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, glproto, libdrm, udev, libpciaccess, randrproto, renderproto, videoproto, libX11, libXext, xextproto, xf86driproto, xorgserver, xproto, libXvMC }: stdenv.mkDerivation {
+    name = "xf86-video-openchrome-0.6.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-openchrome-0.6.0.tar.bz2;
+      sha256 = "0x9gq3hw6k661k82ikd1y2kkk4dmgv310xr5q59dwn4k6z37aafs";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto glproto libdrm udev libpciaccess randrproto renderproto videoproto libX11 libXext xextproto xf86driproto xorgserver xproto libXvMC ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videoqxl = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libdrm, udev, libpciaccess, randrproto, renderproto, videoproto, xf86dgaproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-qxl-0.1.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-qxl-0.1.5.tar.bz2;
+      sha256 = "14jc24znnahhmz4kqalafmllsg8awlz0y6gpgdpk5ih38ph851mi";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libdrm udev libpciaccess randrproto renderproto videoproto xf86dgaproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videor128 = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libdrm, libpciaccess, randrproto, renderproto, videoproto, xextproto, xf86driproto, xf86miscproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-r128-6.10.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-r128-6.10.2.tar.bz2;
+      sha256 = "1pkpka5m4cd6iy0f8iqnmg6xci14nb6887ilvxzn3xrsgx8j3nl4";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libdrm libpciaccess randrproto renderproto videoproto xextproto xf86driproto xf86miscproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videorendition = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-rendition-4.2.6";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-rendition-4.2.6.tar.bz2;
+      sha256 = "1a7rqafxzc2hd0s5pnq8s8j9d3jg64ndc0xnq4160kasyqhwy3k6";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videos3virge = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, videoproto, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-s3virge-1.10.7";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-s3virge-1.10.7.tar.bz2;
+      sha256 = "1nm4cngjbw226q63rdacw6nx5lgxv7l7rsa8vhpr0gs80pg6igjx";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto videoproto xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videosavage = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libdrm, libpciaccess, randrproto, renderproto, videoproto, xextproto, xf86driproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-savage-2.3.9";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-savage-2.3.9.tar.bz2;
+      sha256 = "11pcrsdpdrwk0mrgv83s5nsx8a9i4lhmivnal3fjbrvi3zdw94rc";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libdrm libpciaccess randrproto renderproto videoproto xextproto xf86driproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videosiliconmotion = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, videoproto, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-siliconmotion-1.7.9";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-siliconmotion-1.7.9.tar.bz2;
+      sha256 = "1g2r6gxqrmjdff95d42msxdw6vmkg2zn5sqv0rxd420iwy8wdwyh";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess videoproto xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videosis = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libdrm, libpciaccess, randrproto, renderproto, videoproto, xextproto, xf86dgaproto, xf86driproto, xineramaproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-sis-0.10.9";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-sis-0.10.9.tar.bz2;
+      sha256 = "03f1abjjf68y8y1iz768rn95va9d33wmbwfbsqrgl6k0gi0bf9jj";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libdrm libpciaccess randrproto renderproto videoproto xextproto xf86dgaproto xf86driproto xineramaproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videosisusb = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, videoproto, xextproto, xineramaproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-sisusb-0.9.7";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-sisusb-0.9.7.tar.bz2;
+      sha256 = "090lfs3hjz3cjd016v5dybmcsigj6ffvjdhdsqv13k90p4b08h7l";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto videoproto xextproto xineramaproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videosuncg6 = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, randrproto, renderproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-suncg6-1.1.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-suncg6-1.1.2.tar.bz2;
+      sha256 = "04fgwgk02m4nimlv67rrg1wnyahgymrn6rb2cjj1l8bmzkii4glr";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto randrproto renderproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videosunffb = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, randrproto, renderproto, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-sunffb-1.2.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-sunffb-1.2.2.tar.bz2;
+      sha256 = "07z3ngifwg2d4jgq8pms47n5lr2yn0ai72g86xxjnb3k20n5ym7s";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto randrproto renderproto xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videosunleo = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, randrproto, renderproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-sunleo-1.2.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-sunleo-1.2.2.tar.bz2;
+      sha256 = "1gacm0s6rii4x5sx9py5bhvs50jd4vs3nnbwjdjymyf31kpdirl3";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto randrproto renderproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videotdfx = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libdrm, libpciaccess, randrproto, renderproto, videoproto, xextproto, xf86driproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-tdfx-1.4.7";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-tdfx-1.4.7.tar.bz2;
+      sha256 = "0hia45z4jc472fxp00803nznizcn4h1ybp63jcsb4lmd9vhqxx2c";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libdrm libpciaccess randrproto renderproto videoproto xextproto xf86driproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videotga = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, videoproto, xextproto, xf86dgaproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-tga-1.2.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-tga-1.2.2.tar.bz2;
+      sha256 = "0cb161lvdgi6qnf1sfz722qn38q7kgakcvj7b45ba3i0020828r0";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto videoproto xextproto xf86dgaproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videotrident = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, videoproto, xextproto, xf86dgaproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-trident-1.3.8";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-trident-1.3.8.tar.bz2;
+      sha256 = "0gxcar434kx813fxdpb93126lhmkl3ikabaljhcj5qn3fkcijlcy";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto videoproto xextproto xf86dgaproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videov4l = callPackage ({ stdenv, pkgconfig, fetchurl, randrproto, videoproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-v4l-0.2.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/xf86-video-v4l-0.2.0.tar.bz2;
+      sha256 = "0pcjc75hgbih3qvhpsx8d4fljysfk025slxcqyyhr45dzch93zyb";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ randrproto videoproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videovboxvideo = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-vboxvideo-1.0.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-vboxvideo-1.0.0.tar.bz2;
+      sha256 = "195z1js3i51qgxvhfw4bxb4dw3jcrrx2ynpm2y3475dypjzs7dkz";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videovesa = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, xextproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-vesa-2.4.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-vesa-2.4.0.tar.bz2;
+      sha256 = "1373vsxn6qh00na0s9c09kf09gj78rzi98zq93id8v5zsya3qi5z";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto xextproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videovmware = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libdrm, udev, libpciaccess, randrproto, renderproto, videoproto, libX11, libXext, xextproto, xineramaproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-vmware-13.2.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-vmware-13.2.1.tar.bz2;
+      sha256 = "0azn3g0vcki47n5jddagk2rmbwdvp845k8p7d2r56zxs3w8ggxz2";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libdrm udev libpciaccess randrproto renderproto videoproto libX11 libXext xextproto xineramaproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videovoodoo = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, libpciaccess, randrproto, renderproto, xextproto, xf86dgaproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-voodoo-1.2.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-voodoo-1.2.5.tar.bz2;
+      sha256 = "1s6p7yxmi12q4y05va53rljwyzd6ry492r1pgi7wwq6cznivhgly";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto libpciaccess randrproto renderproto xextproto xf86dgaproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videowsfb = callPackage ({ stdenv, pkgconfig, fetchurl, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-wsfb-0.4.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/xf86-video-wsfb-0.4.0.tar.bz2;
+      sha256 = "0hr8397wpd0by1hc47fqqrnaw3qdqd8aqgwgzv38w5k3l3jy6p4p";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86videoxgi = callPackage ({ stdenv, pkgconfig, fetchurl, fontsproto, glproto, libdrm, libpciaccess, randrproto, renderproto, videoproto, xextproto, xf86driproto, xineramaproto, xorgserver, xproto }: stdenv.mkDerivation {
+    name = "xf86-video-xgi-1.6.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/driver/xf86-video-xgi-1.6.1.tar.bz2;
+      sha256 = "10xd2vah0pnpw5spn40n4p95mpmgvdkly4i1cz51imnlfsw7g8si";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ fontsproto glproto libdrm libpciaccess randrproto renderproto videoproto xextproto xf86driproto xineramaproto xorgserver xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xf86vidmodeproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "xf86vidmodeproto-2.3.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/xf86vidmodeproto-2.3.1.tar.bz2;
+      sha256 = "0w47d7gfa8zizh2bshdr2rffvbr4jqjv019mdgyh6cmplyd4kna5";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xfs = callPackage ({ stdenv, pkgconfig, fetchurl, libXfont, xproto, xtrans }: stdenv.mkDerivation {
+    name = "xfs-1.1.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xfs-1.1.4.tar.bz2;
+      sha256 = "1ylz4r7adf567rnlbb52yi9x3qi4pyv954kkhm7ld4f0fkk7a2x4";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libXfont xproto xtrans ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xgamma = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xproto, libXxf86vm }: stdenv.mkDerivation {
+    name = "xgamma-1.0.6";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xgamma-1.0.6.tar.bz2;
+      sha256 = "1lr2nb1fhg5fk2fchqxdxyl739602ggwhmgl2wiv5c8qbidw7w8f";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xproto libXxf86vm ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xgc = callPackage ({ stdenv, pkgconfig, fetchurl, libXaw, libXt }: stdenv.mkDerivation {
+    name = "xgc-1.0.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xgc-1.0.5.tar.bz2;
+      sha256 = "0pigvjd3i9fchmj1inqy151aafz3dr0vq1h2zizdb2imvadqv0hl";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libXaw libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xhost = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXau, libXmu, xproto }: stdenv.mkDerivation {
+    name = "xhost-1.0.7";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xhost-1.0.7.tar.bz2;
+      sha256 = "16n26xw6l01zq31d4qvsaz50misvizhn7iihzdn5f7s72pp1krlk";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXau libXmu xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xineramaproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "xineramaproto-1.2.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/xineramaproto-1.2.1.tar.bz2;
+      sha256 = "0ns8abd27x7gbp4r44z3wc5k9zqxxj8zjnazqpcyr4n17nxp8xcp";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xinit = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xproto }: stdenv.mkDerivation {
+    name = "xinit-1.4.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xinit-1.4.0.tar.bz2;
+      sha256 = "1vw2wlg74ig52naw0cha3pgzcwwk25l834j42cg8m5zmybp3a213";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xinput = callPackage ({ stdenv, pkgconfig, fetchurl, inputproto, libX11, libXext, libXi, libXinerama, libXrandr }: stdenv.mkDerivation {
+    name = "xinput-1.6.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xinput-1.6.2.tar.bz2;
+      sha256 = "1i75mviz9dyqyf7qigzmxq8vn31i86aybm662fzjz5c086dx551n";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ inputproto libX11 libXext libXi libXinerama libXrandr ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xkbcomp = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libxkbfile, xproto }: stdenv.mkDerivation {
+    name = "xkbcomp-1.4.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xkbcomp-1.4.2.tar.bz2;
+      sha256 = "0944rrkkf0dxp07vhh9yr4prslxhqyw63qmbjirbv1bypswvrn3d";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libxkbfile xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xkbevd = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libxkbfile }: stdenv.mkDerivation {
+    name = "xkbevd-1.1.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xkbevd-1.1.4.tar.bz2;
+      sha256 = "0sprjx8i86ljk0l7ldzbz2xlk8916z5zh78cafjv8k1a63js4c14";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libxkbfile ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xkbprint = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libxkbfile, xproto }: stdenv.mkDerivation {
+    name = "xkbprint-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xkbprint-1.0.4.tar.bz2;
+      sha256 = "04iyv5z8aqhabv7wcpvbvq0ji0jrz1666vw6gvxkvl7szswalgqb";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libxkbfile xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xkbutils = callPackage ({ stdenv, pkgconfig, fetchurl, inputproto, libX11, libXaw, xproto, libXt }: stdenv.mkDerivation {
+    name = "xkbutils-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xkbutils-1.0.4.tar.bz2;
+      sha256 = "0c412isxl65wplhl7nsk12vxlri29lk48g3p52hbrs3m0awqm8fj";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ inputproto libX11 libXaw xproto libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xkeyboardconfig = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xproto }: stdenv.mkDerivation {
+    name = "xkeyboard-config-2.24";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/data/xkeyboard-config/xkeyboard-config-2.24.tar.bz2;
+      sha256 = "1my4786pd7iv5x392r9skj3qclmbd26nqzvh2fllwkkbyj08bcci";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xkill = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXmu, xproto }: stdenv.mkDerivation {
+    name = "xkill-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xkill-1.0.4.tar.bz2;
+      sha256 = "0bl1ky8ps9jg842j4mnmf4zbx8nkvk0h77w7bqjlpwij9wq2mvw8";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXmu xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xlsatoms = callPackage ({ stdenv, pkgconfig, fetchurl, libxcb }: stdenv.mkDerivation {
+    name = "xlsatoms-1.1.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xlsatoms-1.1.2.tar.bz2;
+      sha256 = "196yjik910xsr7dwy8daa0amr0r22ynfs360z0ndp9mx7mydrra7";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libxcb ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xlsclients = callPackage ({ stdenv, pkgconfig, fetchurl, libxcb }: stdenv.mkDerivation {
+    name = "xlsclients-1.1.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xlsclients-1.1.3.tar.bz2;
+      sha256 = "0g9x7rrggs741x9xwvv1k9qayma980d88nhdqw7j3pn3qvy6d5jx";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libxcb ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xlsfonts = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xproto }: stdenv.mkDerivation {
+    name = "xlsfonts-1.0.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xlsfonts-1.0.5.tar.bz2;
+      sha256 = "1yi774g6r1kafsbnxbkrwyndd3i60362ck1fps9ywz076pn5naa0";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xmag = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXaw, libXmu, libXt }: stdenv.mkDerivation {
+    name = "xmag-1.0.6";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xmag-1.0.6.tar.bz2;
+      sha256 = "0qg12ifbbk9n8fh4jmyb625cknn8ssj86chd6zwdiqjin8ivr8l7";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXaw libXmu libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xmessage = callPackage ({ stdenv, pkgconfig, fetchurl, libXaw, libXt }: stdenv.mkDerivation {
+    name = "xmessage-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xmessage-1.0.4.tar.bz2;
+      sha256 = "0s5bjlpxnmh8sxx6nfg9m0nr32r1sr3irr71wsnv76s33i34ppxw";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libXaw libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xmodmap = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xproto }: stdenv.mkDerivation {
+    name = "xmodmap-1.0.9";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xmodmap-1.0.9.tar.bz2;
+      sha256 = "0y649an3jqfq9klkp9y5gj20xb78fw6g193f5mnzpl0hbz6fbc5p";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xorgcffiles = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "xorg-cf-files-1.0.6";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/util/xorg-cf-files-1.0.6.tar.bz2;
+      sha256 = "0kckng0zs1viz0nr84rdl6dswgip7ndn4pnh5nfwnviwpsfmmksd";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xorgdocs = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "xorg-docs-1.7.1";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/doc/xorg-docs-1.7.1.tar.bz2;
+      sha256 = "0jrc4jmb4raqawx0j9jmhgasr0k6sxv0bm2hrxjh9hb26iy6gf14";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xorgserver = callPackage ({ stdenv, pkgconfig, fetchurl, dri2proto, dri3proto, renderproto, openssl, libX11, libXau, libXaw, libxcb, xcbutil, xcbutilwm, xcbutilimage, xcbutilkeysyms, xcbutilrenderutil, libXdmcp, libXfixes, libxkbfile, libXmu, libXpm, libXrender, libXres, libXt }: stdenv.mkDerivation {
+    name = "xorg-server-1.19.6";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/xserver/xorg-server-1.19.6.tar.bz2;
+      sha256 = "15y13ihgkggmly5s07vzvpn35gzx1w0hrkbnlcvcy05h3lpm0cm7";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ dri2proto dri3proto renderproto openssl libX11 libXau libXaw libxcb xcbutil xcbutilwm xcbutilimage xcbutilkeysyms xcbutilrenderutil libXdmcp libXfixes libxkbfile libXmu libXpm libXrender libXres libXt ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xorgsgmldoctools = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "xorg-sgml-doctools-1.11";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/xorg-sgml-doctools-1.11.tar.bz2;
+      sha256 = "0k5pffyi5bx8dmfn033cyhgd3gf6viqj3x769fqixifwhbgy2777";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xpr = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXmu, xproto }: stdenv.mkDerivation {
+    name = "xpr-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/xpr-1.0.4.tar.bz2;
+      sha256 = "1dbcv26w2yand2qy7b3h5rbvw1mdmdd57jw88v53sgdr3vrqvngy";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXmu xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xprop = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xproto }: stdenv.mkDerivation {
+    name = "xprop-1.2.2";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xprop-1.2.2.tar.bz2;
+      sha256 = "1ilvhqfjcg6f1hqahjkp8qaay9rhvmv2blvj3w9asraq0aqqivlv";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xproto = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "xproto-7.0.31";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/proto/xproto-7.0.31.tar.bz2;
+      sha256 = "0ivpxz0rx2a7nahkpkhfgymz7j0pwzaqvyqpdgw9afmxl1yp9yf6";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xrandr = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xproto, libXrandr, libXrender }: stdenv.mkDerivation {
+    name = "xrandr-1.5.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xrandr-1.5.0.tar.bz2;
+      sha256 = "1kaih7rmzxr1vp5a5zzjhm5x7dn9mckya088sqqw026pskhx9ky1";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xproto libXrandr libXrender ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xrdb = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXmu, xproto }: stdenv.mkDerivation {
+    name = "xrdb-1.1.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xrdb-1.1.0.tar.bz2;
+      sha256 = "0nsnr90wazcdd50nc5dqswy0bmq6qcj14nnrhyi7rln9pxmpp0kk";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXmu xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xrefresh = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xproto }: stdenv.mkDerivation {
+    name = "xrefresh-1.0.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xrefresh-1.0.5.tar.bz2;
+      sha256 = "1mlinwgvql6s1rbf46yckbfr9j22d3c3z7jx3n6ix7ca18dnf4rj";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xset = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libXext, libXmu, xproto, libXxf86misc }: stdenv.mkDerivation {
+    name = "xset-1.2.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xset-1.2.3.tar.bz2;
+      sha256 = "0qw0iic27bz3yz2wynf1gxs70hhkcf9c4jrv7zhlg1mq57xz90j3";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libXext libXmu xproto libXxf86misc ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xsetroot = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xbitmaps, libXcursor, libXmu }: stdenv.mkDerivation {
+    name = "xsetroot-1.1.0";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/xsetroot-1.1.0.tar.bz2;
+      sha256 = "1bazzsf9sy0q2bj4lxvh1kvyrhmpggzb7jg575i15sksksa3xwc8";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xbitmaps libXcursor libXmu ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xtrans = callPackage ({ stdenv, pkgconfig, fetchurl }: stdenv.mkDerivation {
+    name = "xtrans-1.3.5";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/xtrans-1.3.5.tar.bz2;
+      sha256 = "00c3ph17acnsch3gbdmx33b9ifjnl5w7vx8hrmic1r1cjcv3pgdd";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xvinfo = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xproto, libXv }: stdenv.mkDerivation {
+    name = "xvinfo-1.1.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xvinfo-1.1.3.tar.bz2;
+      sha256 = "1sz5wqhxd1fqsfi1w5advdlwzkizf2fgl12hdpk66f7mv9l8pflz";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xproto libXv ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xwd = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xproto }: stdenv.mkDerivation {
+    name = "xwd-1.0.6";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xwd-1.0.6.tar.bz2;
+      sha256 = "0ybx48agdvjp9lgwvcw79r1x6jbqbyl3fliy3i5xwy4d4si9dcrv";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xwininfo = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, libxcb, xproto }: stdenv.mkDerivation {
+    name = "xwininfo-1.1.3";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/individual/app/xwininfo-1.1.3.tar.bz2;
+      sha256 = "1y1zn8ijqslb5lfpbq4bb78kllhch8in98ps7n8fg3dxjpmb13i1";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 libxcb xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+  xwud = callPackage ({ stdenv, pkgconfig, fetchurl, libX11, xproto }: stdenv.mkDerivation {
+    name = "xwud-1.0.4";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = mirror://xorg/X11R7.7/src/everything/xwud-1.0.4.tar.bz2;
+      sha256 = "1ggql6maivah58kwsh3z9x1hvzxm1a8888xx4s78cl77ryfa1cyn";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ libX11 xproto ];
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+})
diff --git a/nixpkgs/pkgs/servers/x11/xorg/extra.list b/nixpkgs/pkgs/servers/x11/xorg/extra.list
new file mode 100644
index 000000000000..107d5ce18b8c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/extra.list
@@ -0,0 +1,11 @@
+http://xcb.freedesktop.org/dist/libpthread-stubs-0.4.tar.bz2
+http://xcb.freedesktop.org/dist/libxcb-1.13.1.tar.bz2
+http://xcb.freedesktop.org/dist/xcb-proto-1.13.tar.bz2
+http://xcb.freedesktop.org/dist/xcb-util-0.4.0.tar.bz2
+https://xcb.freedesktop.org/dist/xcb-util-cursor-0.1.3.tar.bz2
+http://xcb.freedesktop.org/dist/xcb-util-image-0.4.0.tar.bz2
+http://xcb.freedesktop.org/dist/xcb-util-keysyms-0.4.0.tar.bz2
+http://xcb.freedesktop.org/dist/xcb-util-renderutil-0.3.9.tar.bz2
+http://xcb.freedesktop.org/dist/xcb-util-wm-0.4.1.tar.bz2
+http://xcb.freedesktop.org/dist/xcb-util-errors-1.0.tar.bz2
+mirror://xorg/individual/app/appres-1.0.4.tar.bz2
diff --git a/nixpkgs/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl b/nixpkgs/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl
new file mode 100755
index 000000000000..aba45a215349
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl
@@ -0,0 +1,323 @@
+#! /usr/bin/env perl
+
+# Typical command to generate the list of tarballs:
+
+# export i="mirror://xorg/X11R7.7/src/everything/"; cat $(PRINT_PATH=1 nix-prefetch-url $i | tail -n 1) | perl -e 'while (<>) { if (/(href|HREF)="([^"]*.bz2)"/) { print "$ENV{'i'}$2\n"; }; }' | sort > tarballs-7.7.list
+# manually update extra.list
+# then run: cat tarballs-7.7.list extra.list old.list | perl ./generate-expr-from-tarballs.pl
+# tarballs-x.y.list is generated + changes for individual packages
+# extra.list are packages not contained in the tarballs
+# old.list are packages that used to be part of the tarballs
+
+
+use strict;
+use warnings;
+
+use File::Basename;
+use File::Spec::Functions;
+
+my $tmpDir = "/tmp/xorg-unpack";
+
+
+my %pkgURLs;
+my %pkgHashes;
+my %pkgNames;
+my %pkgRequires;
+my %pkgNativeRequires;
+
+my %pcMap;
+
+my %extraAttrs;
+
+
+my @missingPCs = ("fontconfig", "libdrm", "libXaw", "zlib", "perl", "python", "mkfontscale", "mkfontdir", "bdftopcf", "libxslt", "openssl", "gperf", "m4");
+$pcMap{$_} = $_ foreach @missingPCs;
+$pcMap{"freetype2"} = "freetype";
+$pcMap{"libpng12"} = "libpng";
+$pcMap{"libpng"} = "libpng";
+$pcMap{"dbus-1"} = "dbus";
+$pcMap{"uuid"} = "libuuid";
+$pcMap{"libudev"} = "udev";
+$pcMap{"gl"} = "libGL";
+$pcMap{"gbm"} = "mesa_noglu";
+$pcMap{"\$PIXMAN"} = "pixman";
+$pcMap{"\$RENDERPROTO"} = "renderproto";
+$pcMap{"\$DRI3PROTO"} = "dri3proto";
+$pcMap{"\$DRI2PROTO"} = "dri2proto";
+
+
+my $downloadCache = "./download-cache";
+mkdir $downloadCache, 0755;
+
+
+while (<>) {
+    chomp;
+    my $tarball = "$_";
+    print "\nDOING TARBALL $tarball\n";
+
+    my $pkg;
+    if ($tarball =~ s/:([a-zA-Z0-9_]+)$//) {
+      $pkg = $1;
+    } else {
+      $tarball =~ /\/((?:(?:[A-Za-z0-9]|(?:-[^0-9])|(?:-[0-9]*[a-z]))+))[^\/]*$/;
+      die unless defined $1;
+      $pkg = $1;
+      $pkg =~ s/-//g;
+      #next unless $pkg eq "xcbutil";
+    }
+
+    $tarball =~ /\/([^\/]*)\.tar\.(bz2|gz|xz)$/;
+    my $pkgName = $1;
+
+    print "  $pkg $pkgName\n";
+
+    if (defined $pkgNames{$pkg}) {
+        print "  SKIPPING\n";
+        next;
+    }
+
+    $pkgURLs{$pkg} = $tarball;
+    $pkgNames{$pkg} = $pkgName;
+
+    my $cachePath = catdir($downloadCache, basename($tarball));
+    my $hash;
+    my $path;
+    if (-e $cachePath) {
+        $path = readlink($cachePath);
+        $hash = `nix-hash --type sha256 --base32 --flat $cachePath`;
+    }
+    else {
+        ($hash, $path) = `PRINT_PATH=1 QUIET=1 nix-prefetch-url '$tarball'`;
+        `nix-store --realise --add-root $cachePath --indirect $path`;
+    }
+    chomp $hash;
+    chomp $path;
+    $pkgHashes{$pkg} = $hash;
+
+    print "\nunpacking $path\n";
+    system "rm -rf '$tmpDir'";
+    mkdir $tmpDir, 0700;
+    system "cd '$tmpDir' && tar xf '$path'";
+    die "cannot unpack `$path'" if $? != 0;
+    print "\n";
+
+    my $pkgDir = `echo $tmpDir/*`;
+    chomp $pkgDir;
+
+    my $provides = `find $pkgDir -name "*.pc.in"`;
+    my @provides2 = split '\n', $provides;
+    my @requires = ();
+    my @nativeRequires = ();
+
+    foreach my $pcFile (@provides2) {
+        my $pc = $pcFile;
+        $pc =~ s/.*\///;
+        $pc =~ s/.pc.in//;
+        print "PROVIDES $pc\n";
+        die "collision with $pcMap{$pc}" if defined $pcMap{$pc};
+        $pcMap{$pc} = $pkg;
+
+        open FOO, "<$pcFile" or die;
+        while (<FOO>) {
+            if (/Requires:(.*)/) {
+                my @reqs = split ' ', $1;
+                foreach my $req (@reqs) {
+                    next unless $req =~ /^[a-z]+$/;
+                    print "REQUIRE (from $pc): $req\n";
+                    push @requires, $req;
+                }
+            }
+        }
+        close FOO;
+
+    }
+
+    my $file;
+    {
+        local $/;
+        open FOO, "cd '$tmpDir'/* && grep -v '^ *#' configure.ac |";
+        $file = <FOO>;
+        close FOO;
+    }
+
+    if ($file =~ /XAW_CHECK_XPRINT_SUPPORT/) {
+        push @requires, "libXaw";
+    }
+
+    if ($file =~ /zlib is required/ || $file =~ /AC_CHECK_LIB\(z\,/) {
+        push @requires, "zlib";
+    }
+
+    if ($file =~ /Perl is required/) {
+        push @requires, "perl";
+    }
+
+    if ($file =~ /AC_PATH_PROG\(BDFTOPCF/) {
+        push @requires, "bdftopcf";
+    }
+
+    if ($file =~ /AC_PATH_PROG\(MKFONTSCALE/) {
+        push @requires, "mkfontscale";
+    }
+
+    if ($file =~ /AC_PATH_PROG\(MKFONTDIR/) {
+        push @requires, "mkfontdir";
+    }
+
+    if ($file =~ /AM_PATH_PYTHON/) {
+        push @nativeRequires, "python";
+    }
+
+    if ($file =~ /AC_PATH_PROG\(FCCACHE/) {
+        # Don't run fc-cache.
+        die if defined $extraAttrs{$pkg};
+        push @{$extraAttrs{$pkg}}, "preInstall = \"installFlags=(FCCACHE=true)\";";
+    }
+
+    my $isFont;
+
+    if ($file =~ /XORG_FONT_BDF_UTILS/) {
+        push @requires, "bdftopcf", "mkfontdir";
+        $isFont = 1;
+    }
+
+    if ($file =~ /XORG_FONT_SCALED_UTILS/) {
+        push @requires, "mkfontscale", "mkfontdir";
+        $isFont = 1;
+    }
+
+    if ($file =~ /XORG_FONT_UCS2ANY/) {
+        push @requires, "fontutil", "mkfontscale";
+        $isFont = 1;
+    }
+
+    if ($isFont) {
+        push @{$extraAttrs{$pkg}}, "configureFlags = [ \"--with-fontrootdir=\$(out)/lib/X11/fonts\" ];";
+    }
+
+    sub process {
+        my $requires = shift;
+        my $s = shift;
+        $s =~ s/\[/\ /g;
+        $s =~ s/\]/\ /g;
+        $s =~ s/\,/\ /g;
+        foreach my $req (split / /, $s) {
+            next if $req eq ">=";
+            #next if $req =~ /^\$/;
+            next if $req =~ /^[0-9]/;
+            next if $req =~ /^\s*$/;
+            next if $req eq '$REQUIRED_MODULES';
+            next if $req eq '$REQUIRED_LIBS';
+            next if $req eq '$XDMCP_MODULES';
+            next if $req eq '$XORG_MODULES';
+            print "REQUIRE: $req\n";
+            push @{$requires}, $req;
+        }
+    }
+
+    #process \@requires, $1 while $file =~ /PKG_CHECK_MODULES\([^,]*,\s*[\[]?([^\)\[]*)/g;
+    process \@requires, $1 while $file =~ /PKG_CHECK_MODULES\([^,]*,([^\)\,]*)/g;
+    process \@requires, $1 while $file =~ /MODULES=\"(.*)\"/g;
+    process \@requires, $1 while $file =~ /REQUIRED_LIBS=\"(.*)\"/g;
+    process \@requires, $1 while $file =~ /REQUIRED_MODULES=\"(.*)\"/g;
+    process \@requires, $1 while $file =~ /REQUIRES=\"(.*)\"/g;
+    process \@requires, $1 while $file =~ /X11_REQUIRES=\'(.*)\'/g;
+    process \@requires, $1 while $file =~ /XDMCP_MODULES=\"(.*)\"/g;
+    process \@requires, $1 while $file =~ /XORG_MODULES=\"(.*)\"/g;
+    process \@requires, $1 while $file =~ /NEEDED=\"(.*)\"/g;
+    process \@requires, $1 while $file =~ /ivo_requires=\"(.*)\"/g;
+    process \@requires, $1 while $file =~ /XORG_DRIVER_CHECK_EXT\([^,]*,([^\)]*)\)/g;
+
+    push @requires, "libxslt" if $pkg =~ /libxcb/;
+    push @requires, "gperf", "m4", "xproto" if $pkg =~ /xcbutil/;
+
+    print "REQUIRES $pkg => @requires\n";
+    print "NATIVE_REQUIRES $pkg => @nativeRequires\n";
+    $pkgRequires{$pkg} = \@requires;
+    $pkgNativeRequires{$pkg} = \@nativeRequires;
+
+    print "done\n";
+}
+
+
+print "\nWRITE OUT\n";
+
+open OUT, ">default.nix";
+
+print OUT "";
+print OUT <<EOF;
+# THIS IS A GENERATED FILE.  DO NOT EDIT!
+{ lib, newScope, pixman }:
+
+lib.makeScope newScope (self: with self; {
+
+  inherit pixman;
+
+EOF
+
+
+foreach my $pkg (sort (keys %pkgURLs)) {
+    print "$pkg\n";
+
+    my %nativeRequires = ();
+    my @nativeBuildInputs;
+    foreach my $req (sort @{$pkgNativeRequires{$pkg}}) {
+        if (defined $pcMap{$req}) {
+            # Some packages have .pc that depends on itself.
+            next if $pcMap{$req} eq $pkg;
+            if (!defined $nativeRequires{$pcMap{$req}}) {
+                push @nativeBuildInputs, $pcMap{$req};
+                $nativeRequires{$pcMap{$req}} = 1;
+            }
+        } else {
+            print "  NOT FOUND: $req\n";
+        }
+    }
+    my %requires = ();
+    my @buildInputs;
+    foreach my $req (sort @{$pkgRequires{$pkg}}) {
+        if (defined $pcMap{$req}) {
+            # Some packages have .pc that depends on itself.
+            next if $pcMap{$req} eq $pkg;
+            if (!defined $requires{$pcMap{$req}}) {
+                push @buildInputs, $pcMap{$req};
+                $requires{$pcMap{$req}} = 1;
+            }
+        } else {
+            print "  NOT FOUND: $req\n";
+        }
+    }
+
+    my $nativeBuildInputsStr = join "", map { $_ . " " } @nativeBuildInputs;
+    my $buildInputsStr = join "", map { $_ . " " } @buildInputs;
+
+    my @arguments = @buildInputs;
+    push @arguments, @nativeBuildInputs;
+    unshift @arguments, "stdenv", "pkgconfig", "fetchurl";
+    my $argumentsStr = join ", ", @arguments;
+
+    my $extraAttrsStr = "";
+    if (defined $extraAttrs{$pkg}) {
+      $extraAttrsStr = join "", map { "\n    " . $_ } @{$extraAttrs{$pkg}};
+    }
+
+    print OUT <<EOF
+  $pkg = callPackage ({ $argumentsStr }: stdenv.mkDerivation {
+    name = "$pkgNames{$pkg}";
+    builder = ./builder.sh;
+    src = fetchurl {
+      url = $pkgURLs{$pkg};
+      sha256 = "$pkgHashes{$pkg}";
+    };
+    hardeningDisable = [ "bindnow" "relro" ];
+    nativeBuildInputs = [ pkgconfig $nativeBuildInputsStr];
+    buildInputs = [ $buildInputsStr];$extraAttrsStr
+    meta.platforms = stdenv.lib.platforms.unix;
+  }) {};
+
+EOF
+}
+
+print OUT "})\n";
+
+close OUT;
diff --git a/nixpkgs/pkgs/servers/x11/xorg/imake-cc-wrapper-uberhack.patch b/nixpkgs/pkgs/servers/x11/xorg/imake-cc-wrapper-uberhack.patch
new file mode 100644
index 000000000000..fe079eeb42a7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/imake-cc-wrapper-uberhack.patch
@@ -0,0 +1,13 @@
+diff --git a/imake.c b/imake.c
+index c20cd4a..ec2589b 100644
+--- a/imake.c
++++ b/imake.c
+@@ -959,7 +959,7 @@ get_libc_version(FILE *inFile)
+ {
+   char aout[4096], *tmpdir;
+   FILE *fp;
+-  const char *format = "%s -o %s -x c -";
++  const char *format = "f=$(mktemp imakeXXXXXX.c); cat > $f; %s $f -o %s";
+   char *cc;
+   int len;
+   char *command;
diff --git a/nixpkgs/pkgs/servers/x11/xorg/imake-setup-hook.sh b/nixpkgs/pkgs/servers/x11/xorg/imake-setup-hook.sh
new file mode 100644
index 000000000000..10f54198f7fb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/imake-setup-hook.sh
@@ -0,0 +1,19 @@
+export IMAKECPP="@tradcpp@/bin/tradcpp"
+
+imakeConfigurePhase() {
+    runHook preConfigure
+
+    echoCmd 'configuring with imake'
+
+    if [ -z "${imakefile:-}" -a ! -e Imakefile ]; then
+        echo "no Imakefile, doing nothing"
+    else
+        xmkmf -a
+    fi
+
+    runHook postConfigure
+}
+
+if [ -z "$dontUseImakeConfigure" -a -z "$configurePhase" ]; then
+    configurePhase=imakeConfigurePhase
+fi
diff --git a/nixpkgs/pkgs/servers/x11/xorg/imake.patch b/nixpkgs/pkgs/servers/x11/xorg/imake.patch
new file mode 100644
index 000000000000..1d0ec88761d4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/imake.patch
@@ -0,0 +1,37 @@
+diff -Naur imake-1.0.7-orig/imake.c imake-1.0.7/imake.c
+--- imake-1.0.7-orig/imake.c	2013-08-17 10:11:50.000000000 +0000
++++ imake-1.0.7/imake.c	2015-02-04 09:41:59.000000000 +0000
+@@ -1045,6 +1045,7 @@
+ static void
+ get_distrib(FILE *inFile)
+ {
++#if 0
+   struct stat sb;
+ 
+   static const char*   suse = "/etc/SuSE-release";
+@@ -1090,6 +1091,7 @@
+      * at the content of /etc/debian_version */
+     return;
+   }
++#endif  
+   /* what's the definitive way to tell what any particular distribution is? */
+ 
+   fprintf (inFile, "%s\n", "#define DefaultLinuxDistribution LinuxUnknown");
+@@ -1337,6 +1339,7 @@
+ static boolean
+ get_gcc(char *cmd)
+ {
++#if 0
+   struct stat sb;
+     static const char* gcc_path[] = {
+ #if defined(linux) || \
+@@ -1385,6 +1388,9 @@
+ 	}
+       }
+     return FALSE;
++#endif
++    strcpy (cmd, IMAKE_COMPILETIME_CPP);
++    return TRUE;
+ }
+ 
+ #ifdef CROSSCOMPILE
diff --git a/nixpkgs/pkgs/servers/x11/xorg/imake.sh b/nixpkgs/pkgs/servers/x11/xorg/imake.sh
new file mode 100644
index 000000000000..4ab5e2ae160b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/imake.sh
@@ -0,0 +1,6 @@
+preInstall() {
+    mkdir -p $out/lib/X11/config
+    ln -s $xorgcffiles/lib/X11/config/* $out/lib/X11/config
+    #touch $out/lib/X11/config/host.def # !!! hack
+    #touch $out/lib/X11/config/date.def # !!! hack
+}
diff --git a/nixpkgs/pkgs/servers/x11/xorg/old.list b/nixpkgs/pkgs/servers/x11/xorg/old.list
new file mode 100644
index 000000000000..fdd5a837d8be
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/old.list
@@ -0,0 +1,15 @@
+mirror://xorg/individual/app/twm-1.0.8.tar.bz2
+mirror://xorg/individual/app/xclock-1.0.7.tar.bz2
+mirror://xorg/individual/app/xdm-1.1.11.tar.bz2
+mirror://xorg/individual/app/xeyes-1.1.2.tar.bz2
+mirror://xorg/individual/app/xfs-1.1.4.tar.bz2
+mirror://xorg/individual/app/xinit-1.4.0.tar.bz2
+mirror://xorg/individual/app/xmessage-1.0.4.tar.bz2
+mirror://xorg/individual/lib/libXp-1.0.3.tar.bz2
+mirror://xorg/individual/lib/libXxf86misc-1.0.3.tar.bz2
+mirror://xorg/individual/proto/printproto-1.0.5.tar.bz2
+mirror://xorg/individual/proto/xf86miscproto-0.9.3.tar.bz2
+mirror://xorg/individual/util/gccmakedep-1.0.3.tar.bz2
+mirror://xorg/individual/util/imake-1.0.7.tar.bz2
+mirror://xorg/individual/util/lndir-1.0.3.tar.bz2
+mirror://xorg/individual/util/xorg-cf-files-1.0.6.tar.bz2
diff --git a/nixpkgs/pkgs/servers/x11/xorg/overrides.nix b/nixpkgs/pkgs/servers/x11/xorg/overrides.nix
new file mode 100644
index 000000000000..af5204320002
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/overrides.nix
@@ -0,0 +1,706 @@
+{ abiCompat ? null,
+  stdenv, makeWrapper, lib, fetchurl, fetchpatch, buildPackages,
+
+  automake, autoconf, libtool, intltool, mtdev, libevdev, libinput,
+  freetype, tradcpp, fontconfig,
+  libGL, spice-protocol, zlib, libGLU, dbus, libunwind, libdrm,
+  mesa_noglu, udev, bootstrap_cmds, bison, flex, clangStdenv, autoreconfHook,
+  mcpp, epoxy, openssl, pkgconfig, llvm_6,
+  cf-private, ApplicationServices, Carbon, Cocoa, Xplugin
+}:
+
+let
+  inherit (stdenv) lib isDarwin;
+  inherit (lib) overrideDerivation;
+
+  malloc0ReturnsNullCrossFlag = stdenv.lib.optional
+    (stdenv.hostPlatform != stdenv.buildPlatform)
+    "--enable-malloc0returnsnull";
+in
+self: super:
+{
+  bdftopcf = super.bdftopcf.overrideAttrs (attrs: {
+    buildInputs = attrs.buildInputs ++ [ self.xproto self.fontsproto ];
+  });
+
+  bitmap = super.bitmap.overrideAttrs (attrs: {
+    nativeBuildInputs = attrs.nativeBuildInputs ++ [ makeWrapper ];
+    postInstall = ''
+      paths=(
+        "$out/share/X11/%T/%N"
+        "$out/include/X11/%T/%N"
+        "${self.xbitmaps}/include/X11/%T/%N"
+      )
+      wrapProgram "$out/bin/bitmap" \
+        --suffix XFILESEARCHPATH : $(IFS=:; echo "''${paths[*]}")
+      makeWrapper "$out/bin/bitmap" "$out/bin/bitmap-color" \
+        --suffix XFILESEARCHPATH : "$out/share/X11/%T/%N-color"
+    '';
+  });
+
+  encodings = super.encodings.overrideAttrs (attrs: {
+    buildInputs = attrs.buildInputs ++ [ self.mkfontscale ];
+  });
+
+  fontbhttf = super.fontbhttf.overrideAttrs (attrs: {
+    meta = attrs.meta // { license = lib.licenses.unfreeRedistributable; };
+  });
+
+  fontcursormisc = super.fontcursormisc.overrideAttrs (attrs: {
+    buildInputs = attrs.buildInputs ++ [ self.mkfontscale ];
+  });
+
+  fontmiscmisc = super.fontmiscmisc.overrideAttrs (attrs: {
+    postInstall =
+      ''
+        ALIASFILE=${self.fontalias}/share/fonts/X11/misc/fonts.alias
+        test -f $ALIASFILE
+        cp $ALIASFILE $out/lib/X11/fonts/misc/fonts.alias
+      '';
+  });
+
+  imake = super.imake.overrideAttrs (attrs: {
+    inherit (self) xorgcffiles;
+    x11BuildHook = ./imake.sh;
+    patches = [./imake.patch ./imake-cc-wrapper-uberhack.patch];
+    setupHook = ./imake-setup-hook.sh;
+    CFLAGS = [ ''-DIMAKE_COMPILETIME_CPP='"${if stdenv.isDarwin
+      then "${tradcpp}/bin/cpp"
+      else "gcc"}"' ''
+    ];
+    inherit tradcpp;
+  });
+
+  mkfontdir = super.mkfontdir.overrideAttrs (attrs: {
+    preBuild = "substituteInPlace mkfontdir.in --replace @bindir@ ${self.mkfontscale}/bin";
+  });
+
+  mkfontscale = super.mkfontscale.overrideAttrs (attrs: {
+    patches = lib.singleton (fetchpatch {
+      name = "mkfontscale-fix-sig11.patch";
+      url = "https://bugs.freedesktop.org/attachment.cgi?id=113951";
+      sha256 = "0i2xf768mz8kvm7i514v0myna9m6jqw82f9a03idabdpamxvwnim";
+    });
+    patchFlags = [ "-p0" ];
+  });
+
+  libxcb = super.libxcb.overrideAttrs (attrs: {
+    configureFlags = [ "--enable-xkb" "--enable-xinput" ];
+    outputs = [ "out" "dev" "man" "doc" ];
+  });
+
+  libX11 = super.libX11.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" "man" ];
+    configureFlags = attrs.configureFlags or []
+      ++ malloc0ReturnsNullCrossFlag;
+    depsBuildBuild = [ buildPackages.stdenv.cc ];
+    preConfigure = ''
+      sed 's,^as_dummy.*,as_dummy="\$PATH",' -i configure
+    '';
+    postInstall =
+      ''
+        # Remove useless DocBook XML files.
+        rm -rf $out/share/doc
+      '';
+    CPP = stdenv.lib.optionalString stdenv.isDarwin "clang -E -";
+  });
+
+  libAppleWM = super.libAppleWM.overrideAttrs (attrs: {
+    buildInputs = attrs.buildInputs ++ [ ApplicationServices ];
+    preConfigure = ''
+      substituteInPlace src/Makefile.in --replace -F/System -F${ApplicationServices}
+    '';
+  });
+
+  libXau = super.libXau.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ];
+  });
+
+  libXdmcp = super.libXdmcp.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" "doc" ];
+  });
+
+  libXfont = super.libXfont.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ];
+    propagatedBuildInputs = [ freetype ]; # propagate link reqs. like bzip2
+    # prevents "misaligned_stack_error_entering_dyld_stub_binder"
+    configureFlags = lib.optionals isDarwin [
+      "CFLAGS=-O0"
+    ];
+  });
+
+  libXxf86vm = super.libXxf86vm.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ];
+    configureFlags = attrs.configureFlags or []
+      ++ malloc0ReturnsNullCrossFlag;
+  });
+
+  # Propagate some build inputs because of header file dependencies.
+  # Note: most of these are in Requires.private, so maybe builder.sh
+  # should propagate them automatically.
+  libXt = super.libXt.overrideAttrs (attrs: {
+    preConfigure = ''
+      sed 's,^as_dummy.*,as_dummy="\$PATH",' -i configure
+    '';
+    configureFlags = attrs.configureFlags or []
+      ++ malloc0ReturnsNullCrossFlag;
+    propagatedBuildInputs = [ self.libSM ];
+    CPP = stdenv.lib.optionalString stdenv.isDarwin "clang -E -";
+    outputs = [ "out" "dev" "devdoc" ];
+  });
+
+  # See https://bugs.freedesktop.org/show_bug.cgi?id=47792
+  # Once the bug is fixed upstream, this can be removed.
+  luit = super.luit.overrideAttrs (attrs: {
+    configureFlags = [ "--disable-selective-werror" ];
+  });
+
+  compositeproto = super.compositeproto.overrideAttrs (attrs: {
+    propagatedBuildInputs = [ self.fixesproto ];
+  });
+
+  libICE = super.libICE.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" "doc" ];
+  });
+
+  libXcomposite = super.libXcomposite.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ];
+    propagatedBuildInputs = [ self.libXfixes ];
+  });
+
+  libXaw = super.libXaw.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" "devdoc" ];
+    propagatedBuildInputs = [ self.libXmu ];
+  });
+
+  libXcursor = super.libXcursor.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ];
+  });
+
+  libXdamage = super.libXdamage.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ];
+  });
+
+  libXft = super.libXft.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ];
+    propagatedBuildInputs = [ self.libXrender freetype fontconfig ];
+    configureFlags = attrs.configureFlags or []
+      ++ malloc0ReturnsNullCrossFlag;
+    # the include files need ft2build.h, and Requires.private isn't enough for us
+    postInstall = ''
+      sed "/^Requires:/s/$/, freetype2/" -i "$dev/lib/pkgconfig/xft.pc"
+    '';
+    passthru = {
+      inherit freetype fontconfig;
+    };
+  });
+
+  libXext = super.libXext.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" "man" "doc" ];
+    propagatedBuildInputs = [ self.xproto self.libXau ];
+    configureFlags = attrs.configureFlags or []
+      ++ malloc0ReturnsNullCrossFlag;
+  });
+
+  libXfixes = super.libXfixes.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ];
+  });
+
+  libXi = super.libXi.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" "man" "doc" ];
+    propagatedBuildInputs = [ self.libXfixes ];
+  });
+
+  libXinerama = super.libXinerama.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ];
+  });
+
+  libXmu = super.libXmu.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" "doc" ];
+    buildFlags = ''BITMAP_DEFINES=-DBITMAPDIR=\"/no-such-path\"'';
+  });
+
+  libXrandr = super.libXrandr.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ];
+    configureFlags = attrs.configureFlags or []
+      ++ malloc0ReturnsNullCrossFlag;
+    propagatedBuildInputs = [self.libXrender];
+  });
+
+  libSM = super.libSM.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" "doc" ];
+    propagatedBuildInputs = [ self.libICE ];
+  });
+
+  libXrender = super.libXrender.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" "doc" ];
+    configureFlags = attrs.configureFlags or []
+      ++ malloc0ReturnsNullCrossFlag;
+    propagatedBuildInputs = [ self.renderproto ];
+  });
+
+  libXres = super.libXres.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" "devdoc" ];
+  });
+
+  libXv = super.libXv.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" "devdoc" ];
+    configureFlags = attrs.configureFlags or []
+      ++ malloc0ReturnsNullCrossFlag;
+  });
+
+  libXvMC = super.libXvMC.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" "doc" ];
+    buildInputs = attrs.buildInputs ++ [self.renderproto];
+  });
+
+  libXp = super.libXp.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ];
+  });
+
+  libXpm = super.libXpm.overrideAttrs (attrs: {
+    name = "libXpm-3.5.12";
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libXpm-3.5.12.tar.bz2;
+      sha256 = "1v5xaiw4zlhxspvx76y3hq4wpxv7mpj6parqnwdqvpj8vbinsspx";
+    };
+    outputs = [ "bin" "dev" "out" ]; # tiny man in $bin
+    patchPhase = "sed -i '/USE_GETTEXT_TRUE/d' sxpm/Makefile.in cxpm/Makefile.in";
+  });
+
+  libXpresent = super.libXpresent.overrideAttrs (attrs: {
+    buildInputs = with self; attrs.buildInputs ++ [ libXext libXfixes libXrandr ];
+  });
+
+  libxkbfile = super.libxkbfile.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ]; # mainly to avoid propagation
+  });
+
+  libxshmfence = super.libxshmfence.overrideAttrs (attrs: {
+    name = "libxshmfence-1.3";
+    src = fetchurl {
+      url = mirror://xorg/individual/lib/libxshmfence-1.3.tar.bz2;
+      sha256 = "1ir0j92mnd1nk37mrv9bz5swnccqldicgszvfsh62jd14q6k115q";
+    };
+    outputs = [ "out" "dev" ]; # mainly to avoid propagation
+  });
+
+  libpciaccess = super.libpciaccess.overrideAttrs (attrs: {
+    meta = attrs.meta // { platforms = stdenv.lib.platforms.linux; };
+  });
+
+  setxkbmap = super.setxkbmap.overrideAttrs (attrs: {
+    postInstall =
+      ''
+        mkdir -p $out/share
+        ln -sfn ${self.xkeyboardconfig}/etc/X11 $out/share/X11
+      '';
+  });
+
+  utilmacros = super.utilmacros.overrideAttrs (attrs: { # not needed for releases, we propagate the needed tools
+    propagatedBuildInputs = [ automake autoconf libtool ];
+  });
+
+  x11perf = super.x11perf.overrideAttrs (attrs: {
+    buildInputs = attrs.buildInputs ++ [ freetype fontconfig ];
+  });
+
+  xcbutil = super.xcbutil.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ];
+  });
+
+  xcbutilcursor = super.xcbutilcursor.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ];
+    meta = attrs.meta // { maintainers = [ stdenv.lib.maintainers.lovek323 ]; };
+  });
+
+  xcbutilimage = super.xcbutilimage.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ]; # mainly to get rid of propagating others
+  });
+
+  xcbutilkeysyms = super.xcbutilkeysyms.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ]; # mainly to get rid of propagating others
+  });
+
+  xcbutilrenderutil = super.xcbutilrenderutil.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ]; # mainly to get rid of propagating others
+  });
+
+  xcbutilwm = super.xcbutilwm.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ]; # mainly to get rid of propagating others
+  });
+
+  xf86inputevdev = super.xf86inputevdev.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ]; # to get rid of xorgserver.dev; man is tiny
+    preBuild = "sed -e '/motion_history_proc/d; /history_size/d;' -i src/*.c";
+    installFlags = "sdkdir=\${out}/include/xorg";
+    buildInputs = attrs.buildInputs ++ [ mtdev libevdev ];
+  });
+
+  xf86inputmouse = super.xf86inputmouse.overrideAttrs (attrs: {
+    installFlags = "sdkdir=\${out}/include/xorg";
+  });
+
+  xf86inputjoystick = super.xf86inputjoystick.overrideAttrs (attrs: {
+    installFlags = "sdkdir=\${out}/include/xorg";
+  });
+
+  xf86inputlibinput = super.xf86inputlibinput.overrideAttrs (attrs: rec {
+    name = "xf86-input-libinput-0.28.0";
+    src = fetchurl {
+      url = "mirror://xorg/individual/driver/${name}.tar.bz2";
+      sha256 = "189h8vl0005yizwrs4d0sng6j8lwkd3xi1zwqg8qavn2bw34v691";
+    };
+    outputs = [ "out" "dev" ];
+    buildInputs = attrs.buildInputs ++ [ libinput ];
+    installFlags = "sdkdir=\${dev}/include/xorg";
+  });
+
+  xf86inputsynaptics = super.xf86inputsynaptics.overrideAttrs (attrs: {
+    outputs = [ "out" "dev" ]; # *.pc pulls xorgserver.dev
+    buildInputs = attrs.buildInputs ++ [mtdev libevdev];
+    installFlags = "sdkdir=\${out}/include/xorg configdir=\${out}/share/X11/xorg.conf.d";
+  });
+
+  xf86inputvmmouse = super.xf86inputvmmouse.overrideAttrs (attrs: {
+    configureFlags = [
+      "--sysconfdir=$(out)/etc"
+      "--with-xorg-conf-dir=$(out)/share/X11/xorg.conf.d"
+      "--with-udev-rules-dir=$(out)/lib/udev/rules.d"
+    ];
+
+    meta = attrs.meta // {
+      platforms = ["i686-linux" "x86_64-linux"];
+    };
+  });
+
+  # Obsolete drivers that don't compile anymore.
+  xf86videoark     = super.xf86videoark.overrideAttrs     (attrs: { meta = attrs.meta // { broken = true; }; });
+  xf86videogeode   = super.xf86videogeode.overrideAttrs   (attrs: { meta = attrs.meta // { broken = true; }; });
+  xf86videoglide   = super.xf86videoglide.overrideAttrs   (attrs: { meta = attrs.meta // { broken = true; }; });
+  xf86videoi128    = super.xf86videoi128.overrideAttrs    (attrs: { meta = attrs.meta // { broken = true; }; });
+  xf86videonewport = super.xf86videonewport.overrideAttrs (attrs: { meta = attrs.meta // { broken = true; }; });
+  xf86videotga     = super.xf86videotga.overrideAttrs     (attrs: { meta = attrs.meta // { broken = true; }; });
+  xf86videov4l     = super.xf86videov4l.overrideAttrs     (attrs: { meta = attrs.meta // { broken = true; }; });
+  xf86videovoodoo  = super.xf86videovoodoo.overrideAttrs  (attrs: { meta = attrs.meta // { broken = true; }; });
+  xf86videowsfb    = super.xf86videowsfb.overrideAttrs    (attrs: { meta = attrs.meta // { broken = true; }; });
+
+  xf86videoamdgpu = super.xf86videoamdgpu.overrideAttrs (attrs: {
+    configureFlags = [ "--with-xorg-conf-dir=$(out)/share/X11/xorg.conf.d" ];
+  });
+
+  xf86videoati = super.xf86videoati.overrideAttrs (attrs: {
+    NIX_CFLAGS_COMPILE = "-I${self.xorgserver.dev or self.xorgserver}/include/xorg";
+  });
+
+  xf86videovmware = super.xf86videovmware.overrideAttrs (attrs: {
+    buildInputs =  attrs.buildInputs ++ [ mesa_noglu llvm_6 ]; # for libxatracker
+    meta = attrs.meta // {
+      platforms = ["i686-linux" "x86_64-linux"];
+    };
+  });
+
+  xf86videoqxl = super.xf86videoqxl.overrideAttrs (attrs: {
+    buildInputs =  attrs.buildInputs ++ [ spice-protocol ];
+  });
+
+  xf86videosiliconmotion = super.xf86videosiliconmotion.overrideAttrs (attrs: {
+    meta = attrs.meta // {
+      platforms = ["i686-linux" "x86_64-linux"];
+    };
+  });
+
+  xdriinfo = super.xdriinfo.overrideAttrs (attrs: {
+    buildInputs = attrs.buildInputs ++ [libGL];
+  });
+
+  xvinfo = super.xvinfo.overrideAttrs (attrs: {
+    buildInputs = attrs.buildInputs ++ [self.libXext];
+  });
+
+  xkbcomp = super.xkbcomp.overrideAttrs (attrs: {
+    configureFlags = [ "--with-xkb-config-root=${self.xkeyboardconfig}/share/X11/xkb" ];
+  });
+
+  xkeyboardconfig = super.xkeyboardconfig.overrideAttrs (attrs: {
+    buildInputs = attrs.buildInputs ++ [intltool];
+
+    #TODO: resurrect patches for US_intl?
+    patches = [ ./xkeyboard-config-eo.patch ];
+
+    configureFlags = [ "--with-xkb-rules-symlink=xorg" ];
+
+    # 1: compatibility for X11/xkb location
+    # 2: I think pkgconfig/ is supposed to be in /lib/
+    postInstall = ''
+      ln -s share "$out/etc"
+      mkdir -p "$out/lib" && ln -s ../share/pkgconfig "$out/lib/"
+    '';
+  });
+
+  xlsfonts = super.xlsfonts.overrideAttrs (attrs: {
+    meta = attrs.meta // { license = lib.licenses.mit; };
+  });
+
+  xorgserver = with self; super.xorgserver.overrideAttrs (attrs_passed:
+    # exchange attrs if abiCompat is set
+    let
+      version = (builtins.parseDrvName attrs_passed.name).version;
+      attrs =
+        if (abiCompat == null || lib.hasPrefix abiCompat version) then attrs_passed
+        else if (abiCompat == "1.17") then {
+          name = "xorg-server-1.17.4";
+          builder = ./builder.sh;
+          src = fetchurl {
+            url = mirror://xorg/individual/xserver/xorg-server-1.17.4.tar.bz2;
+            sha256 = "0mv4ilpqi5hpg182mzqn766frhi6rw48aba3xfbaj4m82v0lajqc";
+          };
+          nativeBuildInputs = [ pkgconfig ];
+          buildInputs = [ dri2proto dri3proto renderproto libdrm openssl libX11 libXau libXaw libxcb xcbutil xcbutilwm xcbutilimage xcbutilkeysyms xcbutilrenderutil libXdmcp libXfixes libxkbfile libXmu libXpm libXrender libXres libXt ];
+          meta.platforms = stdenv.lib.platforms.unix;
+        } else if (abiCompat == "1.18") then {
+            name = "xorg-server-1.18.4";
+            builder = ./builder.sh;
+            src = fetchurl {
+              url = mirror://xorg/individual/xserver/xorg-server-1.18.4.tar.bz2;
+              sha256 = "1j1i3n5xy1wawhk95kxqdc54h34kg7xp4nnramba2q8xqfr5k117";
+            };
+            nativeBuildInputs = [ pkgconfig ];
+            buildInputs = [ dri2proto dri3proto renderproto libdrm openssl libX11 libXau libXaw libxcb xcbutil xcbutilwm xcbutilimage xcbutilkeysyms xcbutilrenderutil libXdmcp libXfixes libxkbfile libXmu libXpm libXrender libXres libXt ]
+              ++ stdenv.lib.optionals stdenv.isDarwin [
+                # Needed for NSDefaultRunLoopMode symbols.
+                cf-private
+              ];
+            postPatch = stdenv.lib.optionalString stdenv.isLinux "sed '1i#include <malloc.h>' -i include/os.h";
+            meta.platforms = stdenv.lib.platforms.unix;
+        } else throw "unsupported xorg abiCompat ${abiCompat} for ${attrs_passed.name}";
+
+    in attrs //
+    (let
+      version = (builtins.parseDrvName attrs.name).version;
+      commonBuildInputs = attrs.buildInputs ++ [ xtrans ];
+      commonPropagatedBuildInputs = [
+        zlib libGL libGLU dbus
+        xf86bigfontproto glproto xf86driproto
+        compositeproto scrnsaverproto resourceproto
+        xf86dgaproto
+        dmxproto /*libdmx not used*/ xf86vidmodeproto
+        recordproto libXext pixman libXfont libxshmfence libunwind
+        damageproto xcmiscproto  bigreqsproto
+        inputproto xextproto randrproto renderproto presentproto
+        dri2proto dri3proto kbproto xineramaproto resourceproto scrnsaverproto videoproto
+        libXfont2
+      ];
+      # XQuartz requires two compilations: the first to get X / XQuartz,
+      # and the second to get Xvfb, Xnest, etc.
+      darwinOtherX = overrideDerivation xorgserver (oldAttrs: {
+        configureFlags = oldAttrs.configureFlags ++ [
+          "--disable-xquartz"
+          "--enable-xorg"
+          "--enable-xvfb"
+          "--enable-xnest"
+          "--enable-kdrive"
+        ];
+        postInstall = ":"; # prevent infinite recursion
+      });
+    in
+      if (!isDarwin)
+      then {
+        outputs = [ "out" "dev" ];
+        buildInputs = commonBuildInputs ++ [ libdrm mesa_noglu ];
+        propagatedBuildInputs = [ libpciaccess epoxy ] ++ commonPropagatedBuildInputs ++ lib.optionals stdenv.isLinux [
+          udev
+        ];
+        prePatch = stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
+          export CFLAGS+=" -D__uid_t=uid_t -D__gid_t=gid_t"
+        '';
+        configureFlags = [
+          "--enable-kdrive"             # not built by default
+          "--enable-xephyr"
+          "--enable-xcsecurity"         # enable SECURITY extension
+          "--with-default-font-path="   # there were only paths containing "${prefix}",
+                                        # and there are no fonts in this package anyway
+          "--with-xkb-bin-directory=${self.xkbcomp}/bin"
+          "--with-xkb-path=${self.xkeyboardconfig}/share/X11/xkb"
+          "--with-xkb-output=$out/share/X11/xkb/compiled"
+          "--enable-glamor"
+        ] ++ lib.optionals stdenv.hostPlatform.isMusl [
+          "--disable-tls"
+        ];
+
+        postInstall = ''
+          rm -fr $out/share/X11/xkb/compiled # otherwise X will try to write in it
+          ( # assert() keeps runtime reference xorgserver-dev in xf86-video-intel and others
+            cd "$dev"
+            for f in include/xorg/*.h; do
+              sed "1i#line 1 \"${attrs.name}/$f\"" -i "$f"
+            done
+          )
+        '';
+        passthru.version = version; # needed by virtualbox guest additions
+      } else {
+        nativeBuildInputs = attrs.nativeBuildInputs ++ [ autoreconfHook self.utilmacros self.fontutil ];
+        buildInputs = commonBuildInputs ++ [
+          bootstrap_cmds automake autoconf
+          Xplugin Carbon Cocoa
+        ];
+        propagatedBuildInputs = commonPropagatedBuildInputs ++ [
+          libAppleWM applewmproto
+        ];
+
+        # XQuartz patchset
+        patches = [
+          (fetchpatch {
+            url = "https://github.com/XQuartz/xorg-server/commit/e88fd6d785d5be477d5598e70d105ffb804771aa.patch";
+            sha256 = "1q0a30m1qj6ai924afz490xhack7rg4q3iig2gxsjjh98snikr1k";
+            name = "use-cppflags-not-cflags.patch";
+          })
+          (fetchpatch {
+            url = "https://github.com/XQuartz/xorg-server/commit/75ee9649bcfe937ac08e03e82fd45d9e18110ef4.patch";
+            sha256 = "1vlfylm011y00j8mig9zy6gk9bw2b4ilw2qlsc6la49zi3k0i9fg";
+            name = "use-old-mitrapezoids-and-mitriangles-routines.patch";
+          })
+          (fetchpatch {
+            url = "https://github.com/XQuartz/xorg-server/commit/c58f47415be79a6564a9b1b2a62c2bf866141e73.patch";
+            sha256 = "19sisqzw8x2ml4lfrwfvavc2jfyq2bj5xcf83z89jdxg8g1gdd1i";
+            name = "revert-fb-changes-1.patch";
+          })
+          (fetchpatch {
+            url = "https://github.com/XQuartz/xorg-server/commit/56e6f1f099d2821e5002b9b05b715e7b251c0c97.patch";
+            sha256 = "0zm9g0g1jvy79sgkvy0rjm6ywrdba2xjd1nsnjbxjccckbr6i396";
+            name = "revert-fb-changes-2.patch";
+          })
+        ];
+
+        configureFlags = [
+          # note: --enable-xquartz is auto
+          "CPPFLAGS=-I${./darwin/dri}"
+          "--with-default-font-path="
+          "--with-apple-application-name=XQuartz"
+          "--with-apple-applications-dir=\${out}/Applications"
+          "--with-bundle-id-prefix=org.nixos.xquartz"
+          "--with-sha1=CommonCrypto"
+        ];
+        preConfigure = ''
+          mkdir -p $out/Applications
+          export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -Wno-error"
+          substituteInPlace hw/xquartz/pbproxy/Makefile.in --replace -F/System -F${ApplicationServices}
+        '';
+        postInstall = ''
+          rm -fr $out/share/X11/xkb/compiled
+
+          cp -rT ${darwinOtherX}/bin $out/bin
+          rm -f $out/bin/X
+          ln -s Xquartz $out/bin/X
+
+          cp ${darwinOtherX}/share/man -rT $out/share/man
+        '' ;
+        passthru.version = version;
+      }));
+
+  lndir = super.lndir.overrideAttrs (attrs: {
+    preConfigure = ''
+      substituteInPlace lndir.c \
+        --replace 'n_dirs--;' ""
+    '';
+  });
+
+  twm = super.twm.overrideAttrs (attrs: {
+    nativeBuildInputs = attrs.nativeBuildInputs ++ [bison flex];
+  });
+
+  xauth = super.xauth.overrideAttrs (attrs: {
+    doCheck = false; # fails
+  });
+
+  xcursorthemes = super.xcursorthemes.overrideAttrs (attrs: {
+    buildInputs = attrs.buildInputs ++ [self.xcursorgen];
+    configureFlags = [ "--with-cursordir=$(out)/share/icons" ];
+  });
+
+  xinit = (super.xinit.override {
+    stdenv = if isDarwin then clangStdenv else stdenv;
+  }).overrideAttrs (attrs: {
+    buildInputs = attrs.buildInputs ++ lib.optional isDarwin bootstrap_cmds;
+    configureFlags = [
+      "--with-xserver=${self.xorgserver.out}/bin/X"
+    ] ++ lib.optionals isDarwin [
+      "--with-bundle-id-prefix=org.nixos.xquartz"
+      "--with-launchdaemons-dir=\${out}/LaunchDaemons"
+      "--with-launchagents-dir=\${out}/LaunchAgents"
+    ];
+    propagatedBuildInputs = [ self.xauth ]
+                         ++ lib.optionals isDarwin [ self.libX11 self.xproto ];
+    prePatch = ''
+      sed -i 's|^defaultserverargs="|&-logfile \"$HOME/.xorg.log\"|p' startx.cpp
+    '';
+  });
+
+  xf86videointel = super.xf86videointel.overrideAttrs (attrs: {
+    # the update script only works with released tarballs :-/
+    name = "xf86-video-intel-2018-12-03";
+    src = fetchurl {
+      url = "http://cgit.freedesktop.org/xorg/driver/xf86-video-intel/snapshot/"
+          + "e5ff8e1828f97891c819c919d7115c6e18b2eb1f.tar.gz";
+      sha256 = "01136zljk6liaqbk8j9m43xxzqj6xy4v50yjgi7l7g6pp8pw0gx6";
+    };
+    buildInputs = attrs.buildInputs ++ [self.libXfixes self.libXScrnSaver self.pixman];
+    nativeBuildInputs = attrs.nativeBuildInputs ++ [autoreconfHook self.utilmacros];
+    configureFlags = [ "--with-default-dri=3" "--enable-tools" ];
+
+    meta = attrs.meta // {
+      platforms = ["i686-linux" "x86_64-linux"];
+    };
+  });
+
+  xf86videoxgi = super.xf86videoxgi.overrideAttrs (attrs: {
+    patches = [
+      # fixes invalid open mode
+      # https://cgit.freedesktop.org/xorg/driver/xf86-video-xgi/commit/?id=bd94c475035739b42294477cff108e0c5f15ef67
+      (fetchpatch {
+        url = "https://cgit.freedesktop.org/xorg/driver/xf86-video-xgi/patch/?id=bd94c475035739b42294477cff108e0c5f15ef67";
+        sha256 = "0myfry07655adhrpypa9rqigd6rfx57pqagcwibxw7ab3wjay9f6";
+      })
+      (fetchpatch {
+        url = "https://cgit.freedesktop.org/xorg/driver/xf86-video-xgi/patch/?id=78d1138dd6e214a200ca66fa9e439ee3c9270ec8";
+        sha256 = "0z3643afgrync280zrp531ija0hqxc5mrwjif9nh9lcnzgnz2d6d";
+      })
+    ];
+  });
+
+  xorgcffiles = super.xorgcffiles.overrideAttrs (attrs: {
+    postInstall = stdenv.lib.optionalString stdenv.isDarwin ''
+      substituteInPlace $out/lib/X11/config/darwin.cf --replace "/usr/bin/" ""
+    '';
+  });
+
+  xwd = super.xwd.overrideAttrs (attrs: {
+    buildInputs = with self; attrs.buildInputs ++ [libXt libxkbfile];
+  });
+
+  kbproto = super.kbproto.overrideAttrs (attrs: {
+    outputs = [ "out" "doc" ];
+  });
+
+  xextproto = super.xextproto.overrideAttrs (attrs: {
+    outputs = [ "out" "doc" ];
+  });
+
+  xproto = super.xproto.overrideAttrs (attrs: {
+    outputs = [ "out" "doc" ];
+  });
+
+  xrdb = super.xrdb.overrideAttrs (attrs: {
+    configureFlags = [ "--with-cpp=${mcpp}/bin/mcpp" ];
+  });
+
+  sessreg = super.sessreg.overrideAttrs (attrs: {
+    preBuild = "sed -i 's|gcc -E|gcc -E -P|' man/Makefile";
+  });
+
+  xrandr = super.xrandr.overrideAttrs (attrs: {
+    postInstall = ''
+      rm $out/bin/xkeystone
+    '';
+  });
+}
diff --git a/nixpkgs/pkgs/servers/x11/xorg/tarballs-7.7.list b/nixpkgs/pkgs/servers/x11/xorg/tarballs-7.7.list
new file mode 100644
index 000000000000..30b553b93db1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/tarballs-7.7.list
@@ -0,0 +1,205 @@
+mirror://xorg/X11R7.7/src/everything/applewmproto-1.4.2.tar.bz2
+mirror://xorg/individual/app/bdftopcf-1.1.tar.bz2
+mirror://xorg/X11R7.7/src/everything/bigreqsproto-1.1.2.tar.bz2
+mirror://xorg/individual/app/bitmap-1.0.8.tar.gz
+mirror://xorg/X11R7.7/src/everything/compositeproto-0.4.2.tar.bz2
+mirror://xorg/X11R7.7/src/everything/damageproto-1.2.1.tar.bz2
+mirror://xorg/X11R7.7/src/everything/dmxproto-2.3.1.tar.bz2
+mirror://xorg/individual/proto/dri2proto-2.8.tar.bz2
+mirror://xorg/individual/proto/dri3proto-1.0.tar.bz2
+mirror://xorg/individual/proto/presentproto-1.1.tar.bz2
+mirror://xorg/X11R7.7/src/everything/encodings-1.0.4.tar.bz2
+mirror://xorg/X11R7.7/src/everything/fixesproto-5.0.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-adobe-100dpi-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-adobe-75dpi-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-adobe-utopia-100dpi-1.0.4.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-adobe-utopia-75dpi-1.0.4.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-adobe-utopia-type1-1.0.4.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-alias-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-arabic-misc-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-bh-100dpi-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-bh-75dpi-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-bh-lucidatypewriter-100dpi-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-bh-lucidatypewriter-75dpi-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-bh-ttf-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-bh-type1-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-bitstream-100dpi-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-bitstream-75dpi-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-bitstream-type1-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-cronyx-cyrillic-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-cursor-misc-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-daewoo-misc-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-dec-misc-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-ibm-type1-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-isas-misc-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-jis-misc-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-micro-misc-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-misc-cyrillic-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-misc-ethiopic-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-misc-meltho-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-misc-misc-1.1.2.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-mutt-misc-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-schumacher-misc-1.1.2.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-screen-cyrillic-1.0.4.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-sony-misc-1.0.3.tar.bz2
+mirror://xorg/individual/proto/fontsproto-2.1.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-sun-misc-1.0.3.tar.bz2
+mirror://xorg/individual/font/font-util-1.3.1.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-winitzki-cyrillic-1.0.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/font-xfree86-type1-1.0.4.tar.bz2
+mirror://xorg/individual/proto/glproto-1.4.17.tar.bz2
+mirror://xorg/individual/app/iceauth-1.0.7.tar.bz2
+mirror://xorg/individual/proto/inputproto-2.3.2.tar.bz2
+mirror://xorg/individual/proto/kbproto-1.0.7.tar.bz2
+mirror://xorg/X11R7.7/src/everything/libAppleWM-1.4.1.tar.bz2
+mirror://xorg/individual/lib/libdmx-1.1.3.tar.bz2
+mirror://xorg/individual/lib/libxshmfence-1.2.tar.bz2
+mirror://xorg/individual/lib/libfontenc-1.1.3.tar.bz2
+mirror://xorg/individual/lib/libFS-1.0.7.tar.bz2
+mirror://xorg/individual/lib/libICE-1.0.9.tar.bz2
+mirror://xorg/individual/lib/libpciaccess-0.14.tar.bz2
+mirror://xorg/individual/lib/libSM-1.2.2.tar.bz2
+mirror://xorg/X11R7.7/src/everything/libWindowsWM-1.0.1.tar.bz2
+mirror://xorg/individual/lib/libX11-1.6.7.tar.bz2
+mirror://xorg/individual/lib/libXau-1.0.8.tar.bz2
+mirror://xorg/individual/lib/libXaw-1.0.13.tar.bz2
+mirror://xorg/individual/lib/libXcomposite-0.4.4.tar.bz2
+mirror://xorg/individual/lib/libXcursor-1.1.15.tar.bz2
+mirror://xorg/individual/lib/libXdamage-1.1.4.tar.bz2
+mirror://xorg/individual/lib/libXdmcp-1.1.2.tar.bz2
+mirror://xorg/individual/lib/libXext-1.3.3.tar.bz2
+mirror://xorg/individual/lib/libXfixes-5.0.3.tar.bz2
+mirror://xorg/individual/lib/libXfont-1.5.4.tar.bz2
+mirror://xorg/individual/lib/libXfont2-2.0.3.tar.bz2
+mirror://xorg/individual/lib/libXft-2.3.2.tar.bz2
+mirror://xorg/individual/lib/libXi-1.7.9.tar.bz2
+mirror://xorg/individual/lib/libXinerama-1.1.4.tar.bz2
+mirror://xorg/individual/lib/libxkbfile-1.0.9.tar.bz2
+mirror://xorg/individual/lib/libXmu-1.1.2.tar.bz2
+mirror://xorg/individual/lib/libXpm-3.5.12.tar.bz2
+mirror://xorg/individual/lib/libXpresent-1.0.0.tar.bz2
+mirror://xorg/individual/lib/libXrandr-1.5.1.tar.bz2
+mirror://xorg/individual/lib/libXrender-0.9.10.tar.bz2
+mirror://xorg/individual/lib/libXres-1.2.0.tar.bz2
+mirror://xorg/X11R7.7/src/everything/libXScrnSaver-1.2.2.tar.bz2
+mirror://xorg/individual/lib/libXt-1.1.5.tar.bz2
+mirror://xorg/individual/lib/libXtst-1.2.3.tar.bz2
+mirror://xorg/individual/lib/libXv-1.0.11.tar.bz2
+mirror://xorg/individual/lib/libXvMC-1.0.10.tar.bz2
+mirror://xorg/individual/lib/libXxf86dga-1.1.4.tar.bz2
+mirror://xorg/individual/lib/libXxf86vm-1.1.4.tar.bz2
+mirror://xorg/X11R7.7/src/everything/luit-1.1.1.tar.bz2
+mirror://xorg/individual/util/makedepend-1.0.5.tar.bz2
+mirror://xorg/X11R7.7/src/everything/mkfontdir-1.0.7.tar.bz2
+mirror://xorg/individual/app/mkfontscale-1.1.2.tar.bz2
+mirror://xorg/individual/proto/randrproto-1.5.0.tar.bz2
+mirror://xorg/X11R7.7/src/everything/recordproto-1.14.2.tar.bz2
+mirror://xorg/X11R7.7/src/everything/renderproto-0.11.1.tar.bz2
+mirror://xorg/X11R7.7/src/everything/resourceproto-1.2.0.tar.bz2
+mirror://xorg/X11R7.7/src/everything/scrnsaverproto-1.2.2.tar.bz2
+mirror://xorg/individual/app/sessreg-1.1.1.tar.bz2
+mirror://xorg/individual/app/setxkbmap-1.3.1.tar.bz2
+mirror://xorg/individual/app/smproxy-1.0.6.tar.bz2
+mirror://xorg/individual/app/twm-1.0.9.tar.bz2
+mirror://xorg/individual/util/util-macros-1.19.2.tar.bz2
+mirror://xorg/individual/proto/videoproto-2.3.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/windowswmproto-1.0.4.tar.bz2
+mirror://xorg/individual/app/x11perf-1.6.0.tar.bz2
+mirror://xorg/individual/app/xauth-1.0.10.tar.bz2
+mirror://xorg/individual/app/xbacklight-1.2.2.tar.bz2
+mirror://xorg/X11R7.7/src/everything/xbitmaps-1.1.1.tar.bz2
+mirror://xorg/X11R7.7/src/everything/xcmiscproto-1.2.2.tar.bz2
+mirror://xorg/individual/app/xcmsdb-1.0.5.tar.bz2
+mirror://xorg/individual/app/xcompmgr-1.1.7.tar.bz2
+mirror://xorg/individual/app/xcursorgen-1.0.6.tar.bz2
+mirror://xorg/individual/data/xcursor-themes-1.0.4.tar.bz2
+mirror://xorg/individual/app/xdpyinfo-1.3.2.tar.bz2
+mirror://xorg/individual/app/xdriinfo-1.0.5.tar.bz2
+mirror://xorg/individual/app/xev-1.2.2.tar.bz2
+mirror://xorg/individual/proto/xextproto-7.3.0.tar.bz2
+mirror://xorg/X11R7.7/src/everything/xf86bigfontproto-1.2.0.tar.bz2
+mirror://xorg/X11R7.7/src/everything/xf86dgaproto-2.1.tar.bz2
+mirror://xorg/X11R7.7/src/everything/xf86driproto-2.1.1.tar.bz2
+mirror://xorg/individual/driver/xf86-input-evdev-2.10.5.tar.bz2
+mirror://xorg/individual/driver/xf86-input-joystick-1.6.3.tar.bz2
+mirror://xorg/individual/driver/xf86-input-keyboard-1.9.0.tar.bz2
+mirror://xorg/individual/driver/xf86-input-libinput-0.28.0.tar.bz2
+mirror://xorg/individual/driver/xf86-input-mouse-1.9.2.tar.bz2
+mirror://xorg/individual/driver/xf86-input-synaptics-1.9.0.tar.bz2
+mirror://xorg/individual/driver/xf86-input-vmmouse-13.1.0.tar.bz2
+mirror://xorg/individual/driver/xf86-input-void-1.4.1.tar.bz2
+mirror://xorg/individual/driver/xf86-video-amdgpu-1.4.0.tar.bz2
+mirror://xorg/individual/driver/xf86-video-ark-0.7.5.tar.bz2
+mirror://xorg/individual/driver/xf86-video-ast-1.1.5.tar.bz2
+mirror://xorg/individual/driver/xf86-video-ati-18.0.1.tar.bz2
+mirror://xorg/individual/driver/xf86-video-nouveau-1.0.15.tar.bz2
+mirror://xorg/individual/driver/xf86-video-chips-1.2.7.tar.bz2
+mirror://xorg/individual/driver/xf86-video-cirrus-1.5.3.tar.bz2
+mirror://xorg/individual/driver/xf86-video-dummy-0.3.8.tar.bz2
+mirror://xorg/individual/driver/xf86-video-fbdev-0.4.4.tar.bz2
+mirror://xorg/individual/driver/xf86-video-geode-2.11.17.tar.bz2
+mirror://xorg/individual/driver/xf86-video-glide-1.2.2.tar.bz2
+mirror://xorg/individual/driver/xf86-video-glint-1.2.9.tar.bz2
+mirror://xorg/individual/driver/xf86-video-i128-1.3.6.tar.bz2
+mirror://xorg/individual/driver/xf86-video-i740-1.3.6.tar.bz2
+mirror://xorg/individual/driver/xf86-video-intel-2.99.917.tar.bz2
+mirror://xorg/individual/driver/xf86-video-mach64-6.9.5.tar.bz2
+mirror://xorg/individual/driver/xf86-video-mga-1.6.5.tar.bz2
+mirror://xorg/individual/driver/xf86-video-qxl-0.1.5.tar.bz2
+mirror://xorg/individual/driver/xf86-video-neomagic-1.2.9.tar.bz2
+mirror://xorg/X11R7.7/src/everything/xf86-video-newport-0.2.4.tar.bz2
+mirror://xorg/individual/driver/xf86-video-nv-2.1.21.tar.bz2
+mirror://xorg/individual/driver/xf86-video-openchrome-0.6.0.tar.bz2
+mirror://xorg/individual/driver/xf86-video-r128-6.10.2.tar.bz2
+mirror://xorg/individual/driver/xf86-video-rendition-4.2.6.tar.bz2
+mirror://xorg/individual/driver/xf86-video-s3virge-1.10.7.tar.bz2
+mirror://xorg/individual/driver/xf86-video-savage-2.3.9.tar.bz2
+mirror://xorg/individual/driver/xf86-video-siliconmotion-1.7.9.tar.bz2
+mirror://xorg/individual/driver/xf86-video-sis-0.10.9.tar.bz2
+mirror://xorg/individual/driver/xf86-video-sisusb-0.9.7.tar.bz2
+mirror://xorg/individual/driver/xf86-video-suncg6-1.1.2.tar.bz2
+mirror://xorg/individual/driver/xf86-video-sunffb-1.2.2.tar.bz2
+mirror://xorg/individual/driver/xf86-video-sunleo-1.2.2.tar.bz2
+mirror://xorg/individual/driver/xf86-video-tdfx-1.4.7.tar.bz2
+mirror://xorg/individual/driver/xf86-video-tga-1.2.2.tar.bz2
+mirror://xorg/individual/driver/xf86-video-trident-1.3.8.tar.bz2
+mirror://xorg/X11R7.7/src/everything/xf86-video-v4l-0.2.0.tar.bz2
+mirror://xorg/individual/driver/xf86-video-vboxvideo-1.0.0.tar.bz2
+mirror://xorg/individual/driver/xf86-video-vesa-2.4.0.tar.bz2
+mirror://xorg/individual/driver/xf86-video-vmware-13.2.1.tar.bz2
+mirror://xorg/individual/driver/xf86-video-voodoo-1.2.5.tar.bz2
+mirror://xorg/X11R7.7/src/everything/xf86-video-wsfb-0.4.0.tar.bz2
+mirror://xorg/X11R7.7/src/everything/xf86vidmodeproto-2.3.1.tar.bz2
+mirror://xorg/individual/driver/xf86-video-xgi-1.6.1.tar.bz2
+mirror://xorg/individual/app/xgamma-1.0.6.tar.bz2
+mirror://xorg/individual/app/xgc-1.0.5.tar.bz2
+mirror://xorg/individual/app/xhost-1.0.7.tar.bz2
+mirror://xorg/X11R7.7/src/everything/xineramaproto-1.2.1.tar.bz2
+mirror://xorg/individual/app/xinput-1.6.2.tar.bz2
+mirror://xorg/individual/app/xkbcomp-1.4.2.tar.bz2
+mirror://xorg/individual/app/xkbevd-1.1.4.tar.bz2
+mirror://xorg/individual/app/xkbutils-1.0.4.tar.bz2
+mirror://xorg/individual/data/xkeyboard-config/xkeyboard-config-2.24.tar.bz2
+mirror://xorg/individual/app/xkill-1.0.4.tar.bz2
+mirror://xorg/individual/app/xlsatoms-1.1.2.tar.bz2
+mirror://xorg/individual/app/xlsclients-1.1.3.tar.bz2
+mirror://xorg/individual/app/xlsfonts-1.0.5.tar.bz2
+mirror://xorg/individual/app/xmag-1.0.6.tar.bz2
+mirror://xorg/individual/app/xmodmap-1.0.9.tar.bz2
+mirror://xorg/individual/doc/xorg-docs-1.7.1.tar.bz2
+mirror://xorg/individual/xserver/xorg-server-1.19.6.tar.bz2
+mirror://xorg/X11R7.7/src/everything/xorg-sgml-doctools-1.11.tar.bz2
+mirror://xorg/X11R7.7/src/everything/xpr-1.0.4.tar.bz2
+mirror://xorg/individual/app/xprop-1.2.2.tar.bz2
+mirror://xorg/individual/proto/xproto-7.0.31.tar.bz2
+mirror://xorg/individual/app/xrandr-1.5.0.tar.bz2
+mirror://xorg/individual/app/xrdb-1.1.0.tar.bz2
+mirror://xorg/individual/app/xrefresh-1.0.5.tar.bz2
+mirror://xorg/individual/app/xset-1.2.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/xsetroot-1.1.0.tar.bz2
+mirror://xorg/individual/lib/xtrans-1.3.5.tar.bz2
+mirror://xorg/individual/app/xvinfo-1.1.3.tar.bz2
+mirror://xorg/individual/app/xwd-1.0.6.tar.bz2
+mirror://xorg/individual/app/xwininfo-1.1.3.tar.bz2
+mirror://xorg/X11R7.7/src/everything/xwud-1.0.4.tar.bz2
+mirror://xorg/individual/app/xkbprint-1.0.4.tar.bz2
diff --git a/nixpkgs/pkgs/servers/x11/xorg/xcb-util-xrm.nix b/nixpkgs/pkgs/servers/x11/xorg/xcb-util-xrm.nix
new file mode 100644
index 000000000000..0a008227b9fb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/xcb-util-xrm.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, pkgconfig, m4, libxcb, xcbutil, libX11 }:
+
+stdenv.mkDerivation rec {
+  version = "1.3";
+  name = "xcb-util-xrm-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/Airblader/xcb-util-xrm/releases/download/v${version}/${name}.tar.bz2";
+    sha256 = "118cj1ybw86pgw0l5whn9vbg5n5b0ijcpx295mwahzi004vz671h";
+  };
+
+  nativeBuildInputs = [ pkgconfig m4 ];
+  doCheck = true;
+  buildInputs = [ libxcb xcbutil ];
+  checkInputs = [ libX11 ];
+
+  meta = with stdenv.lib; {
+    description = "XCB utility functions for the X resource manager";
+    homepage = https://github.com/Airblader/xcb-util-xrm;
+    license = licenses.mit; # X11 variant
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/x11/xorg/xkeyboard-config-eo.patch b/nixpkgs/pkgs/servers/x11/xorg/xkeyboard-config-eo.patch
new file mode 100644
index 000000000000..66f45a410f71
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/xkeyboard-config-eo.patch
@@ -0,0 +1,69 @@
+diff --git a/rules/base.xml.in b/rules/base.xml.in
+index ec321f8..e9c3546 100644
+--- a/rules/base.xml.in
++++ b/rules/base.xml.in
+@@ -1786,6 +1786,13 @@
+     </layout>
+     <layout>
+       <configItem>
++        <name>eo</name>
++        <_shortDescription>Esp</_shortDescription>
++        <_description>Esperanto</_description>
++      </configItem>
++    </layout>
++    <layout>
++      <configItem>
+         <name>ir</name>
+         <_shortDescription>Irn</_shortDescription>
+         <_description>Iran</_description>
+diff --git a/symbols/Makefile.am b/symbols/Makefile.am
+--- a/symbols/Makefile.am
++++ b/symbols/Makefile.am
+@@ -10,7 +10,7 @@ bt by braille \
+ ca cd ch \
+ ch cn cz \
+ de dk dz \
+-ee es et epo eu \
++ee eo es et epo eu \
+ fi fo fr \
+ gb ge gh gn \
+ gr hr hu \
+diff --git a/symbols/Makefile.in b/symbols/Makefile.in
+--- a/symbols/Makefile.in
++++ b/symbols/Makefile.in
+@@ -222,7 +222,7 @@ bt by braille \
+ ca cd ch \
+ ch cn cz \
+ de dk dz \
+-ee es et epo eu \
++ee eo es et epo eu \
+ fi fo fr \
+ gb ge gh gn \
+ gr hr hu \
+diff --git a/symbols/eo b/symbols/eo
+new file mode 100644
+index 0000000..d6358c9
+--- /dev/null
++++ b/symbols/eo
+@@ -0,0 +1,21 @@
++// $XFree86$
++
++partial alphanumeric_keys
++xkb_symbols "basic" {
++
++     // Describes the differences between a very simple en_US
++     // keyboard and a simple Esperanto keyboard
++     // Press AltGr or Windows Menu key together with C, H, J, S, U
++     // to get accented letters.
++     // 2001 by Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk>
++
++    key.type = "FOUR_LEVEL";
++
++    key <AD02>  { [w,W, ubreve,Ubreve ] };
++    key <AD07>  { [u,U, ubreve, Ubreve ] };
++    key <AC02>  { [s,S, scircumflex,    Scircumflex ] };
++    key <AC05>  { [g,G, gcircumflex,Gcircumflex ] };
++    key <AC06>  { [h,H, hcircumflex,Hcircumflex ] };
++    key <AC07>  { [j,J, jcircumflex,Jcircumflex ] };
++    key <AB03>  { [c,C, ccircumflex,Ccircumflex ] };
++};
diff --git a/nixpkgs/pkgs/servers/x11/xorg/xwayland.nix b/nixpkgs/pkgs/servers/x11/xorg/xwayland.nix
new file mode 100644
index 000000000000..06f54fd52073
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xorg/xwayland.nix
@@ -0,0 +1,36 @@
+{ stdenv, wayland, wayland-protocols, xorgserver, xkbcomp, xkeyboard_config, epoxy, libxslt, libunwind, makeWrapper }:
+
+with stdenv.lib;
+
+xorgserver.overrideAttrs (oldAttrs: {
+
+  name = "xwayland-${xorgserver.version}";
+  propagatedBuildInputs = oldAttrs.propagatedBuildInputs
+    ++ [wayland wayland-protocols epoxy libxslt makeWrapper libunwind];
+  configureFlags = [
+    "--disable-docs"
+    "--disable-devel-docs"
+    "--enable-xwayland"
+    "--disable-xorg"
+    "--disable-xvfb"
+    "--disable-xnest"
+    "--disable-xquartz"
+    "--disable-xwin"
+    "--enable-glamor"
+    "--with-default-font-path="
+    "--with-xkb-bin-directory=${xkbcomp}/bin"
+    "--with-xkb-path=${xkeyboard_config}/etc/X11/xkb"
+    "--with-xkb-output=$(out)/share/X11/xkb/compiled"
+  ];
+
+  postInstall = ''
+    rm -fr $out/share/X11/xkb/compiled
+  '';
+
+  meta = {
+    description = "An X server for interfacing X11 apps with the Wayland protocol";
+    homepage = https://wayland.freedesktop.org/xserver.html;
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/servers/x11/xquartz/X11 b/nixpkgs/pkgs/servers/x11/xquartz/X11
new file mode 100755
index 000000000000..e6bb87fab3fe
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xquartz/X11
@@ -0,0 +1,20 @@
+#!@shell@
+
+set "$(dirname "$0")"/X11.bin "${@}"
+
+export XQUARTZ_DEFAULT_CLIENT="@DEFAULT_CLIENT@"
+export XQUARTZ_DEFAULT_SHELL="@DEFAULT_SHELL@"
+export XQUARTZ_DEFAULT_STARTX="@DEFAULT_STARTX@"
+export FONTCONFIG_FILE="@FONTCONFIG_FILE@"
+
+if [ -x ~/.x11run ]; then
+    exec ~/.x11run "${@}"
+fi
+
+case $(basename "${SHELL}") in
+    bash)          exec -l "${SHELL}" --login -c 'exec "${@}"' - "${@}" ;;
+    ksh|sh|zsh)    exec -l "${SHELL}" -c 'exec "${@}"' - "${@}" ;;
+    csh|tcsh)      exec -l "${SHELL}" -c 'exec $argv:q' "${@}" ;;
+    es|rc)         exec -l "${SHELL}" -l -c 'exec $*' "${@}" ;;
+    *)             exec    "${@}" ;;
+esac
diff --git a/nixpkgs/pkgs/servers/x11/xquartz/default.nix b/nixpkgs/pkgs/servers/x11/xquartz/default.nix
new file mode 100644
index 000000000000..8cb96d0ae39f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xquartz/default.nix
@@ -0,0 +1,192 @@
+{ stdenv, buildEnv, makeFontsConf, gnused, writeScript, xorg, bashInteractive, xterm, makeWrapper, ruby
+, quartz-wm, fontconfig, xlsfonts, xfontsel
+, ttf_bitstream_vera, freefont_ttf, liberation_ttf
+, cf-private
+, shell ? "${bashInteractive}/bin/bash"
+}:
+
+# ------------
+# Installation
+# ------------
+#
+# First, assuming you've previously installed XQuartz from macosforge.com,
+# unload and remove the existing launch agents:
+#
+#   $ sudo launchctl unload /Library/LaunchAgents/org.macosforge.xquartz.startx.plist
+#   $ sudo launchctl unload /Library/LaunchDaemons/org.macosforge.xquartz.privileged_startx.plist
+#   $ sudo rm /Library/LaunchAgents/org.macosforge.xquartz.startx.plist
+#   $ sudo rm /Library/LaunchDaemons/org.macosforge.xquartz.privileged_startx.plist
+#
+# (You will need to log out for the above changes to take effect.)
+#
+# Then install xquartz from nixpkgs:
+#
+#   $ nix-env -i xquartz
+#   $ xquartz-install
+#
+# You'll also want to add the following to your shell's profile (after you
+# source nix.sh, so $NIX_LINK points to your user profile):
+#
+#   if [ "$(uname)" = "Darwin" -a -n "$NIX_LINK" -a -f $NIX_LINK/etc/X11/fonts.conf ]; then
+#     export FONTCONFIG_FILE=$NIX_LINK/etc/X11/fonts.conf
+#   fi
+
+# A note about dependencies:
+# Xquartz wants to exec XQuartz.app, XQuartz.app wants to exec xstart, and
+# xstart wants to exec Xquartz, so we must bundle all three to prevent a cycle.
+# Coincidentally, this also makes it trivial to install launch agents/daemons
+# that point into the user's profile.
+
+let
+  installer = writeScript "xquartz-install" ''
+    NIX_LINK=$HOME/.nix-profile
+
+    tmpdir=$(/usr/bin/mktemp -d $TMPDIR/xquartz-installer-XXXXXXXX)
+    agentName=org.nixos.xquartz.startx.plist
+    daemonName=org.nixos.xquartz.privileged_startx.plist
+    sed=${gnused}/bin/sed
+
+    cp ${./org.nixos.xquartz.startx.plist} $tmpdir/$agentName
+    $sed -i "s|@LAUNCHD_STARTX@|$NIX_LINK/etc/X11/xinit/launchd_startx|" $tmpdir/$agentName
+    $sed -i "s|@STARTX@|$NIX_LINK/bin/startx|" $tmpdir/$agentName
+    $sed -i "s|@XQUARTZ@|$NIX_LINK/bin/Xquartz|" $tmpdir/$agentName
+
+    cp ${./org.nixos.xquartz.privileged_startx.plist} $tmpdir/$daemonName
+    $sed -i "s|@PRIVILEGED_STARTX@|$NIX_LINK/lib/X11/xinit/privileged_startx|" $tmpdir/$daemonName
+    $sed -i "s|@PRIVILEGED_STARTX_D@|$NIX_LINK/lib/X11/xinit/privileged_startx.d|" $tmpdir/$daemonName
+
+    sudo cp $tmpdir/$agentName /Library/LaunchAgents/$agentName
+    sudo cp $tmpdir/$daemonName /Library/LaunchDaemons/$daemonName
+    sudo launchctl load -w /Library/LaunchAgents/$agentName
+    sudo launchctl load -w /Library/LaunchDaemons/$daemonName
+  '';
+  fontDirs = [
+    xorg.fontbhlucidatypewriter100dpi
+    xorg.fontbhlucidatypewriter75dpi
+    ttf_bitstream_vera
+    freefont_ttf
+    liberation_ttf
+    xorg.fontbh100dpi
+    xorg.fontmiscmisc
+    xorg.fontcursormisc
+  ];
+  fontsConf = makeFontsConf {
+    fontDirectories = fontDirs ++ [
+      "/Library/Fonts"
+      "~/Library/Fonts"
+    ];
+  };
+  fonts = import ./system-fonts.nix {
+    inherit stdenv xorg fontDirs;
+  };
+  # any X related programs expected to be available via $PATH
+  env = buildEnv {
+    name = "xquartz-env";
+    pathsToLink = [ "/bin" ];
+    paths = with xorg; [
+      # non-xorg
+      quartz-wm xterm fontconfig
+      # xorg
+      xlsfonts xfontsel
+      bdftopcf fontutil iceauth libXpm lndir luit makedepend mkfontdir
+      mkfontscale sessreg setxkbmap smproxy twm x11perf xauth xbacklight xclock
+      xcmsdb xcursorgen xdm xdpyinfo xdriinfo xev xeyes xfs xgamma xhost
+      xinput xkbcomp xkbevd xkbutils xkill xlsatoms xlsclients xmessage xmodmap
+      xpr xprop xrandr xrdb xrefresh xset xsetroot xvinfo xwd xwininfo xwud
+    ];
+  };
+in stdenv.mkDerivation {
+  name = "xquartz-${stdenv.lib.getVersion xorg.xorgserver}";
+
+  buildInputs = [
+    ruby makeWrapper
+    # Needed for NSDefaultRunLoopMode symbols.
+    cf-private
+  ];
+
+  unpackPhase = "sourceRoot=.";
+
+  dontBuild = true;
+
+  installPhase = ''
+    cp -rT ${xorg.xinit} $out
+    chmod -R u+w $out
+    cp -rT ${xorg.xorgserver} $out
+    chmod -R u+w $out
+
+    cp ${installer} $out/bin/xquartz-install
+
+    rm -rf $out/LaunchAgents $out/LaunchDaemons
+
+    fontsConfPath=$out/etc/X11/fonts.conf
+    cp ${fontsConf} $fontsConfPath
+
+    cp ${./startx} $out/bin/startx
+    substituteInPlace $out/bin/startx \
+      --replace "@PATH@"              "$out/bin:${env}" \
+      --replace "@XAUTH@"             "${xorg.xauth}/bin/xauth" \
+      --replace "@FONT_CACHE@"        "$out/bin/font_cache" \
+      --replace "@PRIVILEGED_STARTX@" "$out/lib/X11/xinit/privileged_startx" \
+      --replace "@DEFAULT_SERVER@"    "$out/bin/Xquartz" \
+      --replace "@DEFAULT_CLIENT@"    "${xterm}/bin/xterm" \
+      --replace "@XINIT@"             "$out/bin/xinit" \
+      --replace "@XINITRC@"           "$out/etc/X11/xinit/xinitrc" \
+      --replace "@FONTCONFIG_FILE@"   "$fontsConfPath"
+
+    wrapProgram $out/bin/Xquartz \
+      --set XQUARTZ_X11 $out/Applications/XQuartz.app/Contents/MacOS/X11
+
+    defaultStartX="$out/bin/startx -- $out/bin/Xquartz"
+
+    ruby ${./patch_plist.rb} \
+      ${stdenv.lib.escapeShellArg (builtins.toXML {
+        XQUARTZ_DEFAULT_CLIENT = "${xterm}/bin/xterm";
+        XQUARTZ_DEFAULT_SHELL  = "${shell}";
+        XQUARTZ_DEFAULT_STARTX = "@STARTX@";
+        FONTCONFIG_FILE        = "@FONTCONFIG_FILE@";
+      })} \
+      $out/Applications/XQuartz.app/Contents/Info.plist
+    substituteInPlace $out/Applications/XQuartz.app/Contents/Info.plist \
+      --replace "@STARTX@"          "$defaultStartX" \
+      --replace "@FONTCONFIG_FILE@" "$fontsConfPath"
+
+    mkdir -p $out/lib/X11/xinit/privileged_startx.d
+    cp ${./privileged} $out/lib/X11/xinit/privileged_startx.d/privileged
+    substituteInPlace $out/lib/X11/xinit/privileged_startx.d/privileged \
+      --replace "@PATH@"            "$out/bin:${env}" \
+      --replace "@FONTCONFIG_FILE@" "$fontsConfPath" \
+      --replace "@FONT_CACHE@"      "$out/bin/font_cache"
+
+    cp ${./font_cache} $out/bin/font_cache
+    substituteInPlace $out/bin/font_cache \
+      --replace "@PATH@"            "$out/bin:${env}" \
+      --replace "@ENCODINGSDIR@"    "${xorg.encodings}/share/fonts/X11/encodings" \
+      --replace "@MKFONTDIR@"       "${xorg.mkfontdir}/bin/mkfontdir" \
+      --replace "@MKFONTSCALE@"     "${xorg.mkfontscale}/bin/mkfontscale" \
+      --replace "@FC_CACHE@"        "${fontconfig.bin}/bin/fc-cache" \
+      --replace "@FONTCONFIG_FILE@" "$fontsConfPath"
+
+    cp ${./xinitrc} $out/etc/X11/xinit/xinitrc
+    substituteInPlace $out/etc/X11/xinit/xinitrc \
+      --replace "@PATH@"            "$out/bin:${env}" \
+      --replace "@XSET@"            "${xorg.xset}/bin/xset" \
+      --replace "@XMODMAP@"         "${xorg.xmodmap}/bin/xmodmap" \
+      --replace "@XRDB@"            "${xorg.xrdb}/bin/xrdb" \
+      --replace "@SYSTEM_FONTS@"    "${fonts}/share/X11-fonts/" \
+      --replace "@QUARTZ_WM@"       "${quartz-wm}/bin/quartz-wm" \
+      --replace "@FONTCONFIG_FILE@" "$fontsConfPath"
+
+    cp ${./X11} $out/Applications/XQuartz.app/Contents/MacOS/X11
+    substituteInPlace $out/Applications/XQuartz.app/Contents/MacOS/X11 \
+      --replace "@DEFAULT_SHELL@"   "${shell}" \
+      --replace "@DEFAULT_STARTX@"  "$defaultStartX" \
+      --replace "@DEFAULT_CLIENT@"  "${xterm}/bin/xterm" \
+      --replace "@FONTCONFIG_FILE@" "$fontsConfPath"
+  '';
+
+  meta = with stdenv.lib; {
+    platforms   = platforms.darwin;
+    maintainers = with maintainers; [ cstrahan ];
+    license     = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/x11/xquartz/font_cache b/nixpkgs/pkgs/servers/x11/xquartz/font_cache
new file mode 100755
index 000000000000..b1191980d77f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xquartz/font_cache
@@ -0,0 +1,240 @@
+#!@shell@
+
+export PATH=@PATH@:$PATH
+
+export FONTCONFIG_FILE="@FONTCONFIG_FILE@"
+ENCODINGSDIR="@ENCODINGSDIR@"
+FC_LOCKFILE=""
+
+# Are we caching system fonts or user fonts?
+system=0
+
+# Are we including OSX font dirs ({/,~/,/System/}Library/Fonts)
+osxfonts=1
+
+# Do we want to force a recache?
+force=0
+
+# How noisy are we?
+verbose=0
+
+# Check if the data in the given directory is newer than its cache
+check_dirty() {
+    local dir=$1
+    local fontfiles=""
+    local retval=1
+
+    # If the dir does not exist, we just exit
+    if [[ ! -d "${dir}" ]]; then
+        return 1
+    fi
+
+    # Create a list of all files in the dir
+    # Filter out config / cache files.  Ugly... counting down the day until
+    # xfs finally goes away
+    fontfiles="$(find ${dir}/ -maxdepth 1 -type f | awk '$0 !~ /fonts\..*$|^.*\.dir$/ {print}')"
+
+    # Fonts were deleted (or never there).  Kill off the caches
+    if [[ -z "${fontfiles}" ]] ; then
+        local f
+        for f in "${dir}"/fonts.* "${dir}"/encodings.dir; do
+            if [[ -f ${f} ]] ; then
+                rm -f "${f}"
+            fi
+        done
+        return 1
+    fi
+
+    # Force a recache
+    if [[ ${force} == 1 ]] ; then
+        retval=0
+    fi
+
+    # If we don't have our caches, we are dirty
+    if [[ ! -f "${dir}/fonts.list" || ! -f "${dir}/fonts.dir" || ! -f "${dir}/encodings.dir" ]]; then
+        retval=0
+    fi
+
+    # Check that no files were added or removed....
+    if [[ "${retval}" -ne 0 && "$(cat ${dir}/fonts.list)" != "${fontfiles}" ]] ; then
+        retval=0
+    fi
+
+    # Check that no files were updated....
+    if [[ "${retval}" -ne 0 ]] ; then
+        local changed="$(find ${dir}/ -type f -cnewer ${dir}/fonts.dir | awk '$0 !~ /fonts\..*$|^.*\.dir$/ {print}')"
+
+        if [[ -n "${changed}" ]] ; then
+            retval=0
+        fi
+    fi
+
+    # Recreate fonts.list since something changed
+    if [[ "${retval}" == 0 ]] ; then
+        echo "${fontfiles}" > "${dir}"/fonts.list
+    fi
+
+    return ${retval}
+}
+
+get_fontdirs() {
+    local d
+    if [[ $system == 1 ]] ; then
+        if [[ $osxfonts == 1 ]] ; then
+            find {/System/,/}Library/Fonts -type d
+        fi
+    else
+        if [[ $osxfonts == 1 && -d "${HOME}/Library/Fonts" ]] ; then
+            find "${HOME}/Library/Fonts" -type d
+        fi
+
+        if [[ -d "${HOME}/.fonts" ]] ; then
+            find "${HOME}/.fonts" -type d
+        fi
+    fi
+}
+
+setup_fontdirs() {
+    local x=""
+    local fontdirs=""
+    local changed="no"
+
+    umask 022
+
+    if [[ $system == 1 ]] ; then
+        echo "font_cache: Scanning system font directories to generate X11 font caches"
+    else
+        echo "font_cache: Scanning user font directories to generate X11 font caches"
+    fi
+
+    OIFS=$IFS
+    IFS='
+'
+    for x in $(get_fontdirs) ; do
+        if [[ -d "${x}" ]] && check_dirty "${x}" ; then
+            if [[ -z "${fontdirs}" ]] ; then
+                fontdirs="${x}"
+            else
+                fontdirs="${fontdirs}${IFS}${x}"
+            fi
+        fi
+    done
+
+    if [[ -n "${fontdirs}" ]] ; then
+        echo "font_cache: Making fonts.dir for updated directories."
+        for x in ${fontdirs} ; do
+            if [[ $verbose == 1 ]] ; then
+                echo "font_cache:    ${x}"
+            fi
+
+            # First, generate fonts.scale for scaleable fonts that might be there
+            @MKFONTSCALE@ \
+                -a $ENCODINGSDIR/encodings.dir \
+                -a $ENCODINGSDIR/large/encodings.dir \
+                -- ${x}
+
+            # Next, generate fonts.dir
+            if [[ $verbose == 1 ]] ; then
+                @MKFONTDIR@ \
+                    -e $ENCODINGSDIR \
+                    -e $ENCODINGSDIR/large \
+                    -- ${x}
+            else
+                @MKFONTDIR@ \
+                    -e $ENCODINGSDIR \
+                    -e $ENCODINGSDIR/large \
+                    -- ${x} > /dev/null
+            fi
+        done
+    fi
+    IFS=$OIFS
+
+    # Finally, update fontconfig's cache
+    echo "font_cache: Updating FC cache"
+    if [[ $system == 1 ]] ; then
+        @FC_CACHE@ -s \
+            $([[ $force == 1 ]] && echo "-f -r") \
+            $([[ $verbose == 1 ]] && echo "-v")
+    else
+        @FC_CACHE@ \
+            $([[ $force == 1 ]] && echo "-f -r") \
+            $([[ $verbose == 1 ]] && echo "-v")
+    fi
+    echo "font_cache: Done"
+}
+
+do_usage() {
+    echo "font_cache [options]"
+    echo "    -f, --force        : Force cache recreation"
+    echo "    -n, --no-osxfonts  : Just cache X11 font directories"
+    echo "                         (-n just pertains to XFont cache, not fontconfig)"
+    echo "    -s, --system       : Cache system font dirs instead of user dirs"
+    echo "    -v, --verbose      : Verbose Output"
+}
+
+cleanup() {
+    [[ -r "${FC_LOCKFILE}" ]] && rm -f "${FC_LOCKFILE}"
+    exit 1
+}
+
+while [[ $# -gt 0 ]] ; do
+    case $1 in
+        -s|--system) system=1 ;;
+        -f|--force) force=1 ;;
+        -v|--verbose) verbose=1 ;;
+        -n|--no-osxfonts) osxfonts=0 ;;
+        --help) do_usage ; exit 0 ;;
+        *) do_usage ; exit 1 ;;
+    esac
+    shift
+done
+
+if [[ $system == 1 ]] ; then
+    FC_LOCKFILE="/tmp/font_cache.$UID.lock"
+elif [[ -w "${TMPDIR}" ]] ; then
+    FC_LOCKFILE="${TMPDIR}/font_cache.lock"
+elif [[ -w "/tmp" ]] ; then
+    FC_LOCKFILE="/tmp/font_cache.$UID.lock"
+else
+    FC_LOCKFILE="${HOME}/.font_cache.lock"
+fi
+
+if [[ -x /usr/bin/lockfile ]] ; then
+    if /usr/bin/lockfile -r 0 -l 240 -s 4 -! "${FC_LOCKFILE}" ; then
+            echo "font_cache is already running." >&2
+            echo "If you believe this to be erroneous, please remove ${FC_LOCKFILE}." >&2
+            exit 1
+    fi
+else
+    if [[ -r "${FC_LOCKFILE}" ]] ; then
+        read OLD_PID < "${FC_LOCKFILE}"
+        if kill -0 ${OLD_PID} >& /dev/null ; then
+            echo "font_cache is already running with PID ${OLD_PID}." >&2
+            echo "If you believe this to be erroneous, please remove ${FC_LOCKFILE}." >&2
+            exit 1
+        fi
+
+        echo "Removing stale ${FC_LOCKFILE}" >&2
+        rm -f "${FC_LOCKFILE}"
+    fi
+
+    echo $$ > "${FC_LOCKFILE}"
+
+    if [[ ! -r "${FC_LOCKFILE}" ]] ; then
+        echo "Unable to write to ${FC_LOCKFILE}." >&2
+        exit 1
+    fi
+
+    # Now make sure we didn't collide mid-air
+    read OLD_PID < "${FC_LOCKFILE}"
+    if [[ $$ != ${OLD_PID} ]] ; then
+        echo "font_cache is already running with PID ${OLD_PID}." >&2
+        exit 1
+    fi
+fi
+
+trap cleanup SIGINT SIGQUIT SIGABRT SIGTERM
+
+setup_fontdirs
+
+rm -f "${FC_LOCKFILE}"
diff --git a/nixpkgs/pkgs/servers/x11/xquartz/org.nixos.xquartz.privileged_startx.plist b/nixpkgs/pkgs/servers/x11/xquartz/org.nixos.xquartz.privileged_startx.plist
new file mode 100644
index 000000000000..190b383676d4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xquartz/org.nixos.xquartz.privileged_startx.plist
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>Label</key>
+    <string>org.nixos.xquartz.privileged_startx</string>
+    <key>ProgramArguments</key>
+    <array>
+      <string>@PRIVILEGED_STARTX@</string>
+      <string>-d</string>
+      <string>@PRIVILEGED_STARTX_D@</string>
+    </array>
+    <key>MachServices</key>
+    <dict>
+      <key>org.nixos.xquartz.privileged_startx</key>
+      <true/>
+    </dict>
+    <key>TimeOut</key>
+    <integer>120</integer>
+    <key>EnableTransactions</key>
+    <true/>
+  </dict>
+</plist>
diff --git a/nixpkgs/pkgs/servers/x11/xquartz/org.nixos.xquartz.startx.plist b/nixpkgs/pkgs/servers/x11/xquartz/org.nixos.xquartz.startx.plist
new file mode 100644
index 000000000000..7a95916da165
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xquartz/org.nixos.xquartz.startx.plist
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>Label</key>
+    <string>org.nixos.xquartz.startx</string>
+    <key>ProgramArguments</key>
+    <array>
+      <string>@LAUNCHD_STARTX@</string>
+      <string>@STARTX@</string>
+      <string>--</string>
+      <string>@XQUARTZ@</string>
+    </array>
+    <key>Sockets</key>
+    <dict>
+      <key>org.nixos.xquartz:0</key>
+      <dict>
+        <key>SecureSocketWithKey</key>
+        <string>DISPLAY</string>
+      </dict>
+    </dict>
+    <key>ServiceIPC</key>
+    <true/>
+    <key>EnableTransactions</key>
+    <true/>
+  </dict>
+</plist>
diff --git a/nixpkgs/pkgs/servers/x11/xquartz/patch_plist.rb b/nixpkgs/pkgs/servers/x11/xquartz/patch_plist.rb
new file mode 100644
index 000000000000..9b0f778426ed
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xquartz/patch_plist.rb
@@ -0,0 +1,47 @@
+require 'rexml/document'
+
+# This script is for setting environment variables in OSX applications.
+# 
+# This script takes two arguments:
+# 1) A Nix attrset serialized via `builtins.toXML'
+# 2) The path to an OSX app's Info.plist file.
+
+def main(serialized_attrs, plist_path)
+  env          = attrs_to_hash(serialized_attrs)
+  doc          = REXML::Document.new(File.open(plist_path, &:read))
+  topmost_dict = doc.root.elements.detect { |e| e.name == "dict" }
+  topmost_dict.add_element("key").tap do |key|
+    key.text = "LSEnvironment"
+  end
+  topmost_dict.add_element(env_to_dict(env))
+
+  formatter = REXML::Formatters::Pretty.new(2)
+  formatter.compact = true
+  formatter.write(doc, File.open(plist_path, "w"))
+end
+
+# Convert a `builtins.toXML' serialized attrs to a hash.
+# This assumes the values are strings.
+def attrs_to_hash(serialized_attrs)
+  hash = {}
+  env_vars = REXML::Document.new(serialized_attrs)
+  env_vars.root.elements[1].elements.each do |attr|
+    name = attr.attribute("name")
+    value = attr.elements.first.attribute("value")
+    hash[name] = value
+  end
+  hash
+end
+
+def env_to_dict(env)
+  dict = REXML::Element.new("dict")
+  env.each do |k, v|
+    key = dict.add_element("key")
+    key.text = k
+    string = dict.add_element("string")
+    string.text = v
+  end
+  dict
+end
+
+main(ARGV[0], ARGV[1])
diff --git a/nixpkgs/pkgs/servers/x11/xquartz/privileged b/nixpkgs/pkgs/servers/x11/xquartz/privileged
new file mode 100755
index 000000000000..3eee9479411c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xquartz/privileged
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+export PATH=@PATH@:$PATH
+export FONTCONFIG_FILE="@FONTCONFIG_FILE@"
+
+# Our usage of mktemp fails with GNU, so prefer /usr/bin to hopefully
+# get BSD mktemp
+if [ -x /usr/bin/mktemp ] ; then
+    MKTEMP=/usr/bin/mktemp
+else
+    MKTEMP=mktemp
+fi
+
+STAT=/usr/bin/stat
+
+for dir in /tmp/.ICE-unix /tmp/.X11-unix /tmp/.font-unix ; do
+    success=0
+    for attempt in 1 2 3 4 5 ; do
+        check=`${STAT} -f '%#p %u %g' ${dir} 2> /dev/null`
+        if [ "${check}" = "041777 0 0" ] ; then
+            success=1
+            break
+        elif [ -n "${check}" ] ; then
+            saved=$(${MKTEMP} -d ${dir}-XXXXXXXX)
+            mv ${dir} ${saved}
+            echo "${dir} exists but is insecure.  It has been moved into ${saved}" >&2
+        fi
+
+        # if $dir exists and is a symlink (ie protect against a race)
+        if ${MKTEMP} -d ${dir} >& /dev/null ; then
+            chmod 1777 $dir
+            chown root:wheel $dir
+            success=1
+            break
+        fi
+    done
+
+    if [ "${success}" -eq 0 ] ; then
+        echo "Could not successfully create ${dir}" >&2
+    fi
+done
+
+@FONT_CACHE@ -s &
diff --git a/nixpkgs/pkgs/servers/x11/xquartz/startx b/nixpkgs/pkgs/servers/x11/xquartz/startx
new file mode 100755
index 000000000000..e908e1042d78
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xquartz/startx
@@ -0,0 +1,232 @@
+#!/bin/sh
+
+# vim :set ts=4 sw=4 sts=4 et :
+
+#
+# This is just a sample implementation of a slightly less primitive
+# interface than xinit.  It looks for user .xinitrc and .xserverrc
+# files, then system xinitrc and xserverrc files, else lets xinit choose
+# its default.  The system xinitrc should probably do things like check
+# for .Xresources files and merge them in, start up a window manager,
+# and pop a clock and several xterms.
+#
+# Site administrators are STRONGLY urged to write nicer versions.
+#
+
+unset DBUS_SESSION_BUS_ADDRESS
+unset SESSION_MANAGER
+
+
+# Bourne shell does not automatically export modified environment variables
+# so export the new PATH just in case the user changes the shell
+export PATH=@PATH@:$PATH
+
+export FONTCONFIG_FILE="@FONTCONFIG_FILE@"
+
+userclientrc=$HOME/.xinitrc
+sysclientrc=@XINITRC@
+
+userserverrc=$HOME/.xserverrc
+sysserverrc=@XINITRC@
+defaultclient=@DEFAULT_CLIENT@ # xterm
+defaultserver=@DEFAULT_SERVER@
+defaultclientargs=""
+defaultserverargs=""
+defaultdisplay=":0"
+clientargs=""
+serverargs=""
+
+export X11_PREFS_DOMAIN=org.nixos.xquartz".X11"
+
+# Initialize defaults (this will cut down on "safe" error messages)
+if ! /usr/bin/defaults read $X11_PREFS_DOMAIN cache_fonts > /dev/null 2>&1 ; then
+    /usr/bin/defaults write $X11_PREFS_DOMAIN cache_fonts -bool true
+fi
+
+if ! /usr/bin/defaults read $X11_PREFS_DOMAIN no_auth > /dev/null 2>&1 ; then
+    /usr/bin/defaults write $X11_PREFS_DOMAIN no_auth -bool false
+fi
+
+if ! /usr/bin/defaults read $X11_PREFS_DOMAIN nolisten_tcp > /dev/null 2>&1 ; then
+    /usr/bin/defaults write $X11_PREFS_DOMAIN nolisten_tcp -bool true
+fi
+
+# First, start caching fonts
+if [ x`/usr/bin/defaults read $X11_PREFS_DOMAIN cache_fonts` = x1 ] ; then
+    @FONT_CACHE@ &
+fi
+
+# a race to create /tmp/.X11-unix
+@PRIVILEGED_STARTX@
+
+if [ x`/usr/bin/defaults read $X11_PREFS_DOMAIN no_auth` = x0 ] ; then
+    enable_xauth=1
+else
+    enable_xauth=0
+fi
+
+if [ x`defaults read $X11_PREFS_DOMAIN nolisten_tcp` = x1 ] ; then
+    defaultserverargs="$defaultserverargs -nolisten tcp"
+fi
+
+# The second check is the real one.  The first is to hopefully avoid
+# needless syslog spamming.
+if /usr/bin/defaults read $X11_PREFS_DOMAIN 2> /dev/null | grep -q 'dpi' && /usr/bin/defaults read $X11_PREFS_DOMAIN dpi > /dev/null 2>&1 ; then
+    defaultserverargs="$defaultserverargs -dpi `/usr/bin/defaults read $X11_PREFS_DOMAIN dpi`"
+fi
+
+# Automatically determine an unused $DISPLAY
+d=0
+while true ; do
+    [ -e /tmp/.X$d-lock ] || break
+    d=$(($d + 1))
+done
+defaultdisplay=":$d"
+unset d
+
+whoseargs="client"
+while [ x"$1" != x ]; do
+    case "$1" in
+    # '' required to prevent cpp from treating "/*" as a C comment.
+    /''*|\./''*)
+    if [ "$whoseargs" = "client" ]; then
+        if [ x"$client" = x ] && [ x"$clientargs" = x ]; then
+        client="$1"
+        else
+        clientargs="$clientargs $1"
+        fi
+    else
+        if [ x"$server" = x ] && [ x"$serverargs" = x ]; then
+        server="$1"
+        else
+        serverargs="$serverargs $1"
+        fi
+    fi
+    ;;
+    --)
+    whoseargs="server"
+    ;;
+    *)
+    if [ "$whoseargs" = "client" ]; then
+        clientargs="$clientargs $1"
+    else
+        # display must be the FIRST server argument
+        if [ x"$serverargs" = x ] && \
+         expr "$1" : ':[0-9][0-9]*$' > /dev/null 2>&1; then
+        display="$1"
+        else
+        serverargs="$serverargs $1"
+        fi
+    fi
+    ;;
+    esac
+    shift
+done
+
+# process client arguments
+if [ x"$client" = x ]; then
+    client=$defaultclient
+
+    # For compatibility reasons, only use startxrc if there were no client command line arguments
+    if [ x"$clientargs" = x ]; then
+        if [ -f "$userclientrc" ]; then
+            client=$userclientrc
+        elif [ -f "$sysclientrc" ]; then
+            client=$sysclientrc
+        fi
+    fi
+fi
+
+# if no client arguments, use defaults
+if [ x"$clientargs" = x ]; then
+    clientargs=$defaultclientargs
+fi
+
+# process server arguments
+if [ x"$server" = x ]; then
+    server=$defaultserver
+
+    # For compatibility reasons, only use xserverrc if there were no server command line arguments
+    if [ x"$serverargs" = x -a x"$display" = x ]; then
+      if [ -f "$userserverrc" ]; then
+          server=$userserverrc
+      elif [ -f "$sysserverrc" ]; then
+          server=$sysserverrc
+      fi
+    fi
+fi
+
+# if no server arguments, use defaults
+if [ x"$serverargs" = x ]; then
+    serverargs=$defaultserverargs
+fi
+
+# if no display, use default
+if [ x"$display" = x ]; then
+    display=$defaultdisplay
+fi
+
+if [ x"$enable_xauth" = x1 ] ; then
+    if [ x"$XAUTHORITY" = x ]; then
+        XAUTHORITY=$HOME/.Xauthority
+        export XAUTHORITY
+    fi
+
+    removelist=
+
+    # set up default Xauth info for this machine
+    hostname=`/bin/hostname`
+
+    authdisplay=${display:-:0}
+
+    mcookie=`/usr/bin/openssl rand -hex 16`
+
+    if test x"$mcookie" = x; then
+        echo "Couldn't create cookie"
+        exit 1
+    fi
+    dummy=0
+
+    # create a file with auth information for the server. ':0' is a dummy.
+    xserverauthfile=$HOME/.serverauth.$$
+    trap "rm -f '$xserverauthfile'" HUP INT QUIT ILL TRAP KILL BUS TERM
+    @XAUTH@ -q -f "$xserverauthfile" << EOF
+add :$dummy . $mcookie
+EOF
+
+    xserverauthfilequoted=$(echo ${xserverauthfile} | sed "s/'/'\\\\''/g")
+    serverargs=${serverargs}" -auth '"${xserverauthfilequoted}"'"
+
+    # now add the same credentials to the client authority file
+    # if '$displayname' already exists do not overwrite it as another
+    # server man need it. Add them to the '$xserverauthfile' instead.
+    for displayname in $authdisplay $hostname$authdisplay; do
+        authcookie=`@XAUTH@ list "$displayname" \
+        | sed -n "s/.*$displayname[[:space:]*].*[[:space:]*]//p"` 2>/dev/null;
+        if [ "z${authcookie}" = "z" ] ; then
+            @XAUTH@ -q << EOF
+add $displayname . $mcookie
+EOF
+        removelist="$displayname $removelist"
+        else
+            dummy=$(($dummy+1));
+            @XAUTH@ -q -f "$xserverauthfile" << EOF
+add :$dummy . $authcookie
+EOF
+        fi
+    done
+fi
+
+eval @XINIT@ \"$client\" $clientargs -- \"$server\" $display $serverargs
+retval=$?
+
+if [ x"$enable_xauth" = x1 ] ; then
+    if [ x"$removelist" != x ]; then
+        @XAUTH@ remove $removelist
+    fi
+    if [ x"$xserverauthfile" != x ]; then
+        rm -f "$xserverauthfile"
+    fi
+fi
+
+exit $retval
diff --git a/nixpkgs/pkgs/servers/x11/xquartz/system-fonts.nix b/nixpkgs/pkgs/servers/x11/xquartz/system-fonts.nix
new file mode 100644
index 000000000000..db47f8afe015
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xquartz/system-fonts.nix
@@ -0,0 +1,34 @@
+{ stdenv, xorg, fontDirs }:
+
+stdenv.mkDerivation {
+  name = "xquartz-system-fonts";
+  buildInputs = [
+    xorg.mkfontdir xorg.mkfontscale
+  ];
+  buildCommand = ''
+    source $stdenv/setup
+
+    for i in ${toString fontDirs} ; do
+      if [ -d $i/ ]; then
+        list="$list $i";
+      fi;
+    done
+    list=$(find $list -name fonts.dir -o -name '*.ttf' -o -name '*.otf');
+    fontDirs=''';
+    for i in $list ; do
+      fontDirs="$fontDirs $(dirname $i)";
+    done;
+    mkdir -p $out/share/X11-fonts/;
+    find $fontDirs -type f -o -type l | while read i; do
+      j="''${i##*/}"
+      if ! test -e "$out/share/X11-fonts/''${j}"; then
+        ln -s "$i" "$out/share/X11-fonts/''${j}";
+      fi;
+    done;
+    cd $out/share/X11-fonts/
+    rm -f fonts.dir fonts.scale fonts.alias
+    mkfontdir
+    mkfontscale
+    cat $( find ${xorg.fontalias}/ -name fonts.alias) >fonts.alias
+  '';
+}
diff --git a/nixpkgs/pkgs/servers/x11/xquartz/xinitrc b/nixpkgs/pkgs/servers/x11/xquartz/xinitrc
new file mode 100755
index 000000000000..1a0c2ccf1c0e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/x11/xquartz/xinitrc
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+export PATH=@PATH@:$PATH
+
+userresources=$HOME/.Xresources
+usermodmap=$HOME/.Xmodmap
+
+# Fix ridiculously slow key repeat.
+@XSET@ r rate
+
+# merge in defaults and keymaps
+
+if [ -f "$userresources" ]; then
+    if [ -x /usr/bin/cpp ] ; then
+        @XRDB@ -merge "$userresources"
+    else
+        @XRDB@ -nocpp -merge "$userresources"
+    fi
+fi
+
+if [ -f "$usermodmap" ]; then
+    @XMODMAP@ "$usermodmap"
+fi
+
+fontpath="@SYSTEM_FONTS@"
+[ -e "$HOME"/.fonts/fonts.dir ] && fontpath="$fontpath,$HOME/.fonts"
+[ -e "$HOME"/Library/Fonts/fonts.dir ] && fontpath="$fontpath,$HOME/Library/Fonts"
+[ -e /Library/Fonts/fonts.dir ] && fontpath="$fontpath,/Library/Fonts"
+[ -e /System/Library/Fonts/fonts.dir ] && fontpath="$fontpath,/System/Library/Fonts"
+@XSET@ fp= "$fontpath"
+unset fontpath
+
+if [ -d "${HOME}/.xinitrc.d" ] ; then
+    for f in "${HOME}"/.xinitrc.d/*.sh ; do
+        [ -x "$f" ] && . "$f"
+    done
+    unset f
+fi
+
+exec @QUARTZ_WM@
diff --git a/nixpkgs/pkgs/servers/xinetd/default.nix b/nixpkgs/pkgs/servers/xinetd/default.nix
new file mode 100644
index 000000000000..445c6c57bbf1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/xinetd/default.nix
@@ -0,0 +1,25 @@
+{ fetchurl, fetchpatch, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "xinetd-2.3.15";
+
+  src = fetchurl {
+    url = "http://www.xinetd.org/${name}.tar.gz";
+    sha256 = "1qsv1al506x33gh92bqa8w21k7mxqrbsrwmxvkj0amn72420ckmz";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/sys-apps/xinetd/files/xinetd-2.3.15-creds.patch?id=426002bfe2789fb6213fba832c8bfee634d68d02";
+      name = "CVE-2013-4342.patch";
+      sha256 = "1iqcrqzgisz4b6vamprzg2y6chai7qpifqcihisrwbjwbc4wzj8v";
+    })
+  ];
+
+  meta = {
+    description = "Secure replacement for inetd";
+    platforms = stdenv.lib.platforms.linux;
+    homepage = http://xinetd.org;
+    license = stdenv.lib.licenses.free;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/xmpp/biboumi/catch.patch b/nixpkgs/pkgs/servers/xmpp/biboumi/catch.patch
new file mode 100644
index 000000000000..bbd0a66909fe
--- /dev/null
+++ b/nixpkgs/pkgs/servers/xmpp/biboumi/catch.patch
@@ -0,0 +1,30 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -303,27 +303,6 @@
+ endforeach()
+ 
+ #
+-## Add a rule to download the catch unit test framework
+-#
+-include(ExternalProject)
+-ExternalProject_Add(catch
+-  GIT_REPOSITORY "https://lab.louiz.org/louiz/Catch.git"
+-  PREFIX "external"
+-  UPDATE_COMMAND ""
+-  CONFIGURE_COMMAND ""
+-  BUILD_COMMAND ""
+-  INSTALL_COMMAND ""
+-  )
+-set_target_properties(catch PROPERTIES EXCLUDE_FROM_ALL TRUE)
+-ExternalProject_Get_Property(catch SOURCE_DIR)
+-if(NOT EXISTS ${CMAKE_SOURCE_DIR}/tests/catch.hpp)
+-  target_include_directories(test_suite
+-    PUBLIC "${SOURCE_DIR}/single_include/"
+-    )
+-  add_dependencies(test_suite catch)
+-endif()
+-
+-#
+ ## Add some custom rules to launch the tests
+ #
+ add_custom_target(check COMMAND "test_suite"
diff --git a/nixpkgs/pkgs/servers/xmpp/biboumi/default.nix b/nixpkgs/pkgs/servers/xmpp/biboumi/default.nix
new file mode 100644
index 000000000000..b0d3dccf30f2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/xmpp/biboumi/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, fetchgit, cmake, libuuid, expat, sqlite, libidn,
+  libiconv, botan2, systemd, pkgconfig, udns, pandoc, coreutils } :
+
+stdenv.mkDerivation rec {
+  name = "biboumi-${version}";
+  version = "8.3";
+
+  src = fetchurl {
+    url = "https://git.louiz.org/biboumi/snapshot/biboumi-${version}.tar.xz";
+    sha256 = "0896f52nh8vd0idkdznv3gj6wqh1nqhjbwv0m560f0h62f01vm7k";
+  };
+
+  louiz_catch = fetchgit {
+    url = https://lab.louiz.org/louiz/Catch.git;
+    rev = "0a34cc201ef28bf25c88b0062f331369596cb7b7"; # v2.2.1
+    sha256 = "0ad0sjhmzx61a763d2ali4vkj8aa1sbknnldks7xlf4gy83jfrbl";
+  };
+
+  patches = [ ./catch.patch ];
+
+  nativeBuildInputs = [ cmake pkgconfig pandoc ];
+  buildInputs = [ libuuid expat sqlite libiconv libidn botan2 systemd
+    udns ];
+
+  preConfigure = ''
+    substituteInPlace CMakeLists.txt --replace /etc/biboumi $out/etc/biboumi
+    substituteInPlace unit/biboumi.service.cmake --replace /bin/kill ${coreutils}/bin/kill
+    cp $louiz_catch/single_include/catch.hpp tests/
+    # echo "policy_directory=$out/etc/biboumi" >> conf/biboumi.cfg
+    # TODO include conf/biboumi.cfg as example somewhere
+  '';
+
+  enableParallelBuilding = true;
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Modern XMPP IRC gateway";
+    platforms = platforms.unix;
+    homepage = https://lab.louiz.org/louiz/biboumi;
+    license = licenses.zlib;
+    maintainers = [ maintainers.woffs ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/xmpp/ejabberd/default.nix b/nixpkgs/pkgs/servers/xmpp/ejabberd/default.nix
new file mode 100644
index 000000000000..1436af024cd7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/xmpp/ejabberd/default.nix
@@ -0,0 +1,120 @@
+{ stdenv, writeScriptBin, makeWrapper, lib, fetchurl, git, cacert, libpng, libjpeg, libwebp
+, erlang, openssl, expat, libyaml, bash, gnused, gnugrep, coreutils, utillinux, procps, gd
+, flock
+, withMysql ? false
+, withPgsql ? false
+, withSqlite ? false, sqlite
+, withPam ? false, pam
+, withZlib ? true, zlib
+, withRiak ? false
+, withElixir ? false, elixir
+, withIconv ? true
+, withTools ? false
+, withRedis ? false
+}:
+
+let
+  fakegit = writeScriptBin "git" ''
+    #! ${stdenv.shell} -e
+    if [ "$1" = "describe" ]; then
+      [ -r .rev ] && cat .rev || true
+    fi
+  '';
+
+  ctlpath = lib.makeBinPath [ bash gnused gnugrep coreutils utillinux procps ];
+
+in stdenv.mkDerivation rec {
+  version = "18.06";
+  name = "ejabberd-${version}";
+
+  src = fetchurl {
+    url = "https://www.process-one.net/downloads/ejabberd/${version}/${name}.tgz";
+    sha256 = "1c4h6qrckihm8v4vm52h31j5dxg7247vk374rwz41idfb25vx7dc";
+  };
+
+  nativeBuildInputs = [ fakegit ];
+
+  buildInputs = [ erlang openssl expat libyaml gd makeWrapper ]
+    ++ lib.optional withSqlite sqlite
+    ++ lib.optional withPam pam
+    ++ lib.optional withZlib zlib
+    ++ lib.optional withElixir elixir
+    ;
+
+  # Apparently needed for Elixir
+  LANG = "en_US.UTF-8";
+
+  deps = stdenv.mkDerivation {
+    name = "ejabberd-deps-${version}";
+
+    inherit src;
+
+    configureFlags = [ "--enable-all" "--with-sqlite3=${sqlite.dev}" ];
+
+    nativeBuildInputs = [ git erlang openssl expat libyaml sqlite pam zlib elixir ];
+
+    GIT_SSL_CAINFO = "${cacert}/etc/ssl/certs/ca-bundle.crt";
+
+    makeFlags = [ "deps" ];
+
+    phases = [ "unpackPhase" "configurePhase" "buildPhase" "installPhase" ];
+
+    installPhase = ''
+      for i in deps/*; do
+        ( cd $i
+          git reset --hard
+          git clean -ffdx
+          git describe --always --tags > .rev
+          rm -rf .git
+        )
+      done
+      rm deps/.got
+
+      cp -r deps $out
+    '';
+
+    outputHashMode = "recursive";
+    outputHashAlgo = "sha256";
+    outputHash = "1bk3yd10cq6vlgmh2qawl82m29yi5zcbsdlz17xyy76sg2ka622a";
+  };
+
+  configureFlags =
+    [ (lib.enableFeature withMysql "mysql")
+      (lib.enableFeature withPgsql "pgsql")
+      (lib.enableFeature withSqlite "sqlite")
+      (lib.enableFeature withPam "pam")
+      (lib.enableFeature withZlib "zlib")
+      (lib.enableFeature withRiak "riak")
+      (lib.enableFeature withElixir "elixir")
+      (lib.enableFeature withIconv "iconv")
+      (lib.enableFeature withTools "tools")
+      (lib.enableFeature withRedis "redis")
+    ] ++ lib.optional withSqlite "--with-sqlite3=${sqlite.dev}";
+
+  enableParallelBuilding = true;
+
+  preBuild = ''
+    cp -r $deps deps
+    chmod -R +w deps
+    patchShebangs deps
+  '';
+
+  postInstall = ''
+    sed -i \
+      -e '2iexport PATH=${ctlpath}:$PATH' \
+      -e 's,\(^ *FLOCK=\).*,\1${flock}/bin/flock,' \
+      -e 's,\(^ *JOT=\).*,\1,' \
+      -e 's,\(^ *CONNLOCKDIR=\).*,\1/var/lock/ejabberdctl,' \
+      $out/sbin/ejabberdctl
+    wrapProgram $out/lib/eimp-*/priv/bin/eimp --prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ libpng libjpeg libwebp ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Open-source XMPP application server written in Erlang";
+    license = licenses.gpl2;
+    homepage = https://www.ejabberd.im;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ sander abbradar ];
+    broken = withElixir;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/xmpp/openfire/default.nix b/nixpkgs/pkgs/servers/xmpp/openfire/default.nix
new file mode 100644
index 000000000000..0e6fcd5e9896
--- /dev/null
+++ b/nixpkgs/pkgs/servers/xmpp/openfire/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, jre }:
+
+stdenv.mkDerivation rec {
+  name = "openfire-${version}";
+  version  = "3_6_3";
+
+  src = fetchurl {
+    url = "http://www.igniterealtime.org/downloadServlet?filename=openfire/openfire_${version}.tar.gz";
+    sha256 = "0ibzhmh9qw4lmx45ir1i280p30npgwnj7vrkl432kj3zi7hp79q2";
+  };
+
+  buildInputs = [ jre ];
+
+  installPhase = ''
+    sed -e 's@\(common_jvm_locations=\).*@\1${jre}@' -i bin/openfire
+    cp -r . $out
+    rm -r $out/logs
+    mv $out/conf $out/conf.inst
+    ln -s /var/log/openfire $out/logs
+    ln -s /etc/openfire $out/conf
+  ''; 
+
+  meta = {
+    description = "XMPP server in Java";
+    platforms = stdenv.lib.platforms.unix;
+    # Some security advisories seem to apply, and each next version wants to
+    # write into larger parts of installation directory; installation is just
+    # unpacking, though
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/xmpp/prosody/default.nix b/nixpkgs/pkgs/servers/xmpp/prosody/default.nix
new file mode 100644
index 000000000000..228c074bf7ea
--- /dev/null
+++ b/nixpkgs/pkgs/servers/xmpp/prosody/default.nix
@@ -0,0 +1,73 @@
+{ stdenv, fetchurl, libidn, openssl, makeWrapper, fetchhg
+, lua5, luasocket, luasec, luaexpat, luafilesystem, luabitop
+, withLibevent ? true, luaevent ? null
+, withDBI ? true, luadbi ? null
+# use withExtraLibs to add additional dependencies of community modules
+, withExtraLibs ? [ ]
+, withOnlyInstalledCommunityModules ? [ ]
+, withCommunityModules ? [ ] }:
+
+assert withLibevent -> luaevent != null;
+assert withDBI -> luadbi != null;
+
+with stdenv.lib;
+
+let
+  libs        = [ luasocket luasec luaexpat luafilesystem luabitop ]
+                ++ optional withLibevent luaevent
+                ++ optional withDBI luadbi
+                ++ withExtraLibs;
+  getPath     = lib : type : "${lib}/lib/lua/${lua5.luaversion}/?.${type};${lib}/share/lua/${lua5.luaversion}/?.${type}";
+  getLuaPath  = lib : getPath lib "lua";
+  getLuaCPath = lib : getPath lib "so";
+  luaPath     = concatStringsSep ";" (map getLuaPath  libs);
+  luaCPath    = concatStringsSep ";" (map getLuaCPath libs);
+in
+
+stdenv.mkDerivation rec {
+  version = "0.11.1";
+  name = "prosody-${version}";
+
+  src = fetchurl {
+    url = "https://prosody.im/downloads/source/${name}.tar.gz";
+    sha256 = "1ak5bkx09kscyifxhzybgp5a73jr8nki6xi05c59wwlq0wzw9gli";
+  };
+
+  communityModules = fetchhg {
+    url = "https://hg.prosody.im/prosody-modules";
+    rev = "150a7bd59043";
+    sha256 = "0nfx3lngcy88nd81gb7v4kh3nz1bzsm67bxgpd2lprk54diqcrz1";
+  };
+
+  buildInputs = [ lua5 makeWrapper libidn openssl ]
+    ++ optional withDBI luadbi;
+
+  configureFlags = [
+    "--ostype=linux"
+    "--with-lua-include=${lua5}/include"
+    "--with-lua=${lua5}"
+  ];
+
+  postInstall = ''
+      ${concatMapStringsSep "\n" (module: ''
+        cp -r $communityModules/mod_${module} $out/lib/prosody/modules/
+      '') (withCommunityModules ++ withOnlyInstalledCommunityModules)}
+      wrapProgram $out/bin/prosody \
+        --set LUA_PATH '${luaPath};' \
+        --set LUA_CPATH '${luaCPath};'
+      wrapProgram $out/bin/prosodyctl \
+        --add-flags '--config "/etc/prosody/prosody.cfg.lua"' \
+        --set LUA_PATH '${luaPath};' \
+        --set LUA_CPATH '${luaCPath};'
+    '';
+
+  passthru.communityModules = withCommunityModules;
+
+  meta = {
+    description = "Open-source XMPP application server written in Lua";
+    license = licenses.mit;
+    homepage = https://prosody.im;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fpletz globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/xmpp/pyIRCt/default.nix b/nixpkgs/pkgs/servers/xmpp/pyIRCt/default.nix
new file mode 100644
index 000000000000..535fb061de9b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/xmpp/pyIRCt/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, xmpppy, pythonIRClib, python, pythonPackages } :
+
+stdenv.mkDerivation rec {
+  name = "pyIRCt-${version}";
+  version = "0.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/xmpppy/irc-transport-${version}.tar.gz";
+    sha256 = "0gbc0dvj1p3088b6x315yjrlwnc5vvzp0var36wlf9z60ghvk8yb";
+  };
+
+  buildInputs = [ pythonPackages.wrapPython ];
+
+  pythonPath = [
+    xmpppy pythonIRClib
+  ];
+
+  /* doConfigure should be removed if not needed */
+  # phaseNames = ["deploy" (a.makeManyWrappers "$out/share/${name}/irc.py" a.pythonWrapperArguments)];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/${name}
+    sed -e 's@/usr/bin/@${python}/bin/@' -i irc.py
+    sed -e '/configFiles/aconfigFiles += [os.getenv("HOME")+"/.pyIRCt.xml"]' -i config.py
+    sed -e '/configFiles/aconfigFiles += [os.getenv("HOME")+"/.python-irc-transport.xml"]' -i config.py
+    sed -e '/configFiles/iimport os' -i config.py
+    cp * $out/share/${name}
+    cat > $out/bin/pyIRCt <<EOF
+      #!${stdenv.shell}
+      cd $out/share/${name}
+      ./irc.py \"$@\"
+    EOF
+    chmod a+rx  $out/bin/pyIRCt $out/share/${name}/irc.py
+    wrapPythonPrograms
+  '';
+
+  meta = with stdenv.lib; {
+    description = "IRC transport module for XMPP";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/xmpp/pyMAILt/default.nix b/nixpkgs/pkgs/servers/xmpp/pyMAILt/default.nix
new file mode 100644
index 000000000000..b1c4d93f687e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/xmpp/pyMAILt/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, python, xmpppy, pythonPackages, fetchcvs } :
+
+stdenv.mkDerivation rec {
+  name = "pyMAILt-${version}";
+  version = "20090101";
+
+  src = fetchcvs {
+		cvsRoot = ":pserver:anonymous@xmpppy.cvs.sourceforge.net:/cvsroot/xmpppy";
+		module = "xmpppy/mail-transport";
+		date = "2009-01-01";
+		sha256 = "15301252e52b4ccb2156baefed8982a2a0cce3ae8eae3caf3cc28dfa615c8d6e";
+	};
+
+  pythonPath = [ xmpppy ];
+  buildInputs = [ pythonPackages.wrapPython ];
+
+  /* doConfigure should be removed if not needed */
+  installPhase = ''
+    cd mail-transport
+    mkdir -p $out/bin $out/share/${name}
+    sed -e 's@/usr/bin/@${python}/bin/@' -i mail.py
+    sed -e '/configFiles/aconfigFiles += [os.getenv("HOME")+"/.pyMAILt.xml"]' -i config.py
+    sed -e '/configFiles/aconfigFiles += [os.getenv("HOME")+"/.python-mail-transport.xml"]' -i config.py
+    sed -e '/configFiles/iimport os' -i config.py
+    cp * $out/share/$name
+    cat > $out/bin/pyMAILt <<EOF
+      #!${stdenv.shell}
+      cd $out/share/${name}
+      ./mail.py \"$@\"
+    EOF
+    chmod a+rx  $out/bin/pyMAILt $out/share/${name}/mail.py
+    wrapPythonPrograms
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Email transport module for XMPP";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/zookeeper/default.nix b/nixpkgs/pkgs/servers/zookeeper/default.nix
new file mode 100644
index 000000000000..780a77c5caaf
--- /dev/null
+++ b/nixpkgs/pkgs/servers/zookeeper/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, fetchurl, jre, makeWrapper, bash, coreutils }:
+
+stdenv.mkDerivation rec {
+  name = "zookeeper-${version}";
+  version = "3.4.13";
+
+  src = fetchurl {
+    url = "mirror://apache/zookeeper/${name}/${name}.tar.gz";
+    sha256 = "0karf13zks3ba2rdmma2lyabvmasc04cjmgxp227f0nj8677kvbw";
+  };
+
+  buildInputs = [ makeWrapper jre ];
+
+  phases = ["unpackPhase" "installPhase"];
+
+  installPhase = ''
+    mkdir -p $out
+    cp -R conf docs lib ${name}.jar $out
+    mkdir -p $out/bin
+    cp -R bin/{zkCli,zkCleanup,zkEnv,zkServer}.sh $out/bin
+    patchShebangs $out/bin
+    for i in $out/bin/{zkCli,zkCleanup,zkServer}.sh; do
+      wrapProgram $i \
+        --set JAVA_HOME "${jre}" \
+        --prefix PATH : "${bash}/bin"
+    done
+    substituteInPlace $out/bin/zkServer.sh \
+        --replace /bin/echo ${coreutils}/bin/echo \
+        --replace "/usr/bin/env bash" ${bash}/bin/bash
+    chmod -x $out/bin/zkEnv.sh
+
+    mkdir -p $out/share/zooinspector
+    cp -r contrib/ZooInspector/{${name}-ZooInspector.jar,icons,lib,config} $out/share/zooinspector
+
+    classpath="$out/${name}.jar:$out/share/zooinspector/${name}-ZooInspector.jar"
+    for jar in $out/lib/*.jar $out/share/zooinspector/lib/*.jar; do
+      classpath="$classpath:$jar"
+    done
+
+    cat << EOF > $out/bin/zooInspector.sh
+    #!${stdenv.shell}
+    cd $out/share/zooinspector
+    exec ${jre}/bin/java -cp $classpath org.apache.zookeeper.inspector.ZooInspector
+    EOF
+    chmod +x $out/bin/zooInspector.sh
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://zookeeper.apache.org;
+    description = "Apache Zookeeper";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nathan-gs cstrahan pradeepchhetri ];
+    platforms = platforms.unix;
+  };
+}