about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/tools
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/tools')
-rw-r--r--nixpkgs/pkgs/development/tools/alloy/default.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/alloy/icon.pngbin0 -> 17154 bytes
-rw-r--r--nixpkgs/pkgs/development/tools/ammonite/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/autoflake/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/brakeman/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cccc/cccc.patch24
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cccc/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/checkstyle/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/clang-analyzer/0001-Fix-scan-build-to-use-NIX_CFLAGS_COMPILE.patch33
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/clang-analyzer/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/coan/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cov-build/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cppcheck/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cpplint/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/egypt/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/emma/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/eresi/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/evmdis/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/findbugs/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/flow/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/frama-c/default.nix92
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/frama-c/dynamic.diff12
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/gcc7.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilesim/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/hopper/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/hotspot/default.nix66
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/ikos/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/include-what-you-use/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/jdepend/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/kcov/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/lcov/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/makefile2graph/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/massif-visualizer/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/panopticon/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/pev/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/pmd/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/qcachegrind/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/radare2/cutter.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/radare2/default.nix133
-rwxr-xr-xnixpkgs/pkgs/development/tools/analysis/radare2/update.py141
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/randoop/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/retdec/default.nix235
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/retdec/yaracpp.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rr/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/smatch/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/snowman/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/sparse/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/spin/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/splint/darwin.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/splint/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/splint/tmpdir.patch16
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/swarm/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/uefi-firmware-parser/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/valgrind/coregrind-makefile-race.patch41
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix92
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/valkyrie/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/apktool/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/asmfmt/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/asmfmt/deps.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/asn2quickder/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/aws-sam-cli/default.nix71
-rw-r--r--nixpkgs/pkgs/development/tools/azcopy/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/azcopy/deps.nix129
-rw-r--r--nixpkgs/pkgs/development/tools/backblaze-b2/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/bazel-watcher/default.nix75
-rw-r--r--nixpkgs/pkgs/development/tools/bazelisk/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/bloaty/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/boomerang/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/boost-build/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/alibuild/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/apache-ant/1.9.nix111
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/apache-ant/default.nix111
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/apache-maven/builder.sh17
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/apache-maven/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/arpa2cm/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bam/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/0.4.nix100
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bash-tools-test.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-deps/default.nix81
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/default.nix81
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/buildtools/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/buildtools/deps.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/default.nix346
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/nix-hacks-0.4.patch51
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/nix-hacks.patch37
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/python-bin-path-test.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/python-stub-path-fix.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bear/cmakepaths.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bear/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bear/ignore_wrapper.patch23
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bloop/default.nix63
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/boot/builder.sh13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/boot/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/buck/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/buck/pex-mtime.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/cmake/2.8.nix88
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/cmake/3.2.2-cygwin.patch274
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/cmake/application-services.patch49
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/cmake/default.nix118
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/cmake/libuv-application-services.patch83
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/cmake/search-path-2.8.patch92
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/cmake/search-path.patch62
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/cmake/setup-hook.sh141
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/colormake/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/conan/default.nix92
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/doit/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/drake/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/drake/gemset.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/dub/default.nix76
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gn/default.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gn/setup-hook.sh14
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/glibc-2.27-glob.patch32
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/impure-dirs.patch34
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/pselect.patch170
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix107
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gup/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/icmake/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/jam/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/kati/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/kati/version.patch19
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/leiningen/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/mage/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/allow-dirs-outside-of-prefix.patch25
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/default.nix104
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/fix-objc-linking.patch20
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/fix-rpath.patch43
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/gir-fallback-path.patch16
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/setup-hook.sh41
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/mill/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/mk/builder.sh4
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/mk/default.nix14
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/ninja/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/ninja/setup-hook.sh78
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/pants/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/qbs/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile.lock13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rake/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rake/gemset.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar3/default.nix141
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/rebar3/rebar3-nix-bootstrap300
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/redo-sh/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/redo/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/remake/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/remake/glibc-2.27-glob.patch34
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/sbt-extras/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/sbt/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/sbt/scala-native.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scons/common.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scons/default.nix14
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scons/print-statements.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scons/setup-hook.sh84
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/shards/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/tup/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/waf/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/waf/setup-hook.sh65
-rw-r--r--nixpkgs/pkgs/development/tools/buildah/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/cachix/default.nix3
-rw-r--r--nixpkgs/pkgs/development/tools/cadre/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/cadre/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/development/tools/cadre/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/cadre/gemset.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/cargo-web/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/cask/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/casperjs/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/castxml/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/cbor-diag/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/cbor-diag/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/development/tools/cbor-diag/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/cbor-diag/gemset.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/cddl/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/cddl/Gemfile.lock28
-rw-r--r--nixpkgs/pkgs/development/tools/cddl/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/cddl/gemset.nix69
-rw-r--r--nixpkgs/pkgs/development/tools/cdecl/cdecl-2.5-lex.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/cdecl/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/check/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/check/deps.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/chefdk/Gemfile17
-rw-r--r--nixpkgs/pkgs/development/tools/chefdk/Gemfile.lock400
-rw-r--r--nixpkgs/pkgs/development/tools/chefdk/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/chefdk/gemset.nix1132
-rw-r--r--nixpkgs/pkgs/development/tools/chit/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/clang-tools/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/clog-cli/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/cloudfoundry-cli/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/compass/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/compass/Gemfile.lock31
-rw-r--r--nixpkgs/pkgs/development/tools/compass/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/compass/gemset.nix96
-rw-r--r--nixpkgs/pkgs/development/tools/compile-daemon/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/compile-daemon/deps.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/container-linux-config-transpiler/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/2.x.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/3.x.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/generic.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/cide/Gemfile6
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/cide/Gemfile.lock40
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/cide/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/cide/gemset.nix103
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/deps.nix274
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone/deps.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/fix-shell-path.patch28
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gocd-agent/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gocd-server/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix24
-rwxr-xr-xnixpkgs/pkgs/development/tools/continuous-integration/jenkins/update.sh22
-rw-r--r--nixpkgs/pkgs/development/tools/corgi/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/corgi/deps.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/corundum/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/corundum/Gemfile.lock56
-rw-r--r--nixpkgs/pkgs/development/tools/corundum/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/corundum/gemset.nix154
-rw-r--r--nixpkgs/pkgs/development/tools/coursier/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/cppclean/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/cucumber/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/cucumber/Gemfile.lock34
-rw-r--r--nixpkgs/pkgs/development/tools/cucumber/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/cucumber/gemset.nix114
-rw-r--r--nixpkgs/pkgs/development/tools/dapper/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/database/cdb/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/database/dbmate/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/database/dbmate/deps.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/database/ephemeralpg/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/database/liquibase/default.nix83
-rw-r--r--nixpkgs/pkgs/development/tools/database/litecli/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/database/pgcli/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/database/pyrseas/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/database/schemaspy/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/database/shmig/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlcheck/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqldeveloper/18.2.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqldeveloper/default.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlite-web/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlitebrowser/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/database/squirrel-sql/default.nix78
-rw-r--r--nixpkgs/pkgs/development/tools/database/timescaledb-parallel-copy/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/database/timescaledb-parallel-copy/deps.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/database/timescaledb-tune/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/database/timescaledb-tune/deps.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/dcadec/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/deadcode/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/deis/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/deisctl/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/delve/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/dep/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/dep2nix/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/dep2nix/deps.nix145
-rw-r--r--nixpkgs/pkgs/development/tools/detect-secrets/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/devd/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/devd/deps.nix201
-rw-r--r--nixpkgs/pkgs/development/tools/devpi-client/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/devpi-server/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/devtodo/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/dive/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/doctl/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/doxygen/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/gnome-doc-utils/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/gtk-doc/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/gtk-doc/respect-xml-catalog-files-var.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/mdsh/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/mkdocs/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/drip/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/dtools/default.nix61
-rw-r--r--nixpkgs/pkgs/development/tools/easyjson/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/easyjson/deps.nix3
-rw-r--r--nixpkgs/pkgs/development/tools/ejson/Gemfile4
-rw-r--r--nixpkgs/pkgs/development/tools/ejson/Gemfile.lock54
-rw-r--r--nixpkgs/pkgs/development/tools/ejson/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/ejson/deps.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/ejson/gemset.nix188
-rw-r--r--nixpkgs/pkgs/development/tools/electron/3.x.nix77
-rw-r--r--nixpkgs/pkgs/development/tools/electron/5.x.nix77
-rw-r--r--nixpkgs/pkgs/development/tools/electron/default.nix77
-rwxr-xr-xnixpkgs/pkgs/development/tools/electron/print-hashes.sh29
-rw-r--r--nixpkgs/pkgs/development/tools/erlang/cuter/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/erlang/hex2nix/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/erlang/relx-exe/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/errcheck/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/errcheck/deps.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/fac/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/fac/deps.nix66
-rw-r--r--nixpkgs/pkgs/development/tools/fdroidserver/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/fedpkg/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/fedpkg/fix-paths.patch16
-rw-r--r--nixpkgs/pkgs/development/tools/flamegraph/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/flatpak-builder/default.nix107
-rw-r--r--nixpkgs/pkgs/development/tools/flatpak-builder/fix-paths.patch130
-rw-r--r--nixpkgs/pkgs/development/tools/flatpak-builder/respect-xml-catalog-files-var.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/flock/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/flootty/default.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/flyway/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/fmbt/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/fusee-launcher/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/galen/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/gamecube-tools/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/gauge/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/gdm/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/gdm/deps.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/geckodriver/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/ghp-import/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/git-ftp/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/git-quick-stats/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/git-repo-updater/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/git-series/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile4
-rw-r--r--nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile.lock49
-rw-r--r--nixpkgs/pkgs/development/tools/github-changelog-generator/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/github-changelog-generator/gemset.nix155
-rw-r--r--nixpkgs/pkgs/development/tools/github/cligh/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/github/github-release/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/glide/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/gllvm/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/global-platform-pro/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/glock/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/glock/deps.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/glslviewer/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/gnome-desktop-testing/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/gnulib/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/go-bindata-assetfs/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/go-bindata/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/go-junit-report/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/go-langserver/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/go-motion/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/go-outline/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/go-outline/deps.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/go-protobuf/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/go-repo-root/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/go-repo-root/deps.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/go-symbols/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/go-symbols/deps.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/go-tools/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/go-tools/deps.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/go2nix/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/go2nix/deps.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/goa/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/goa/deps.nix75
-rw-r--r--nixpkgs/pkgs/development/tools/gocode-gomod/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/gocode-gomod/deps.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/gocode/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/gocode/deps.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/goconst/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/goconvey/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/goconvey/deps.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/gocyclo/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/godef/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/godot/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/godot/dont_clobber_environment.patch17
-rw-r--r--nixpkgs/pkgs/development/tools/godot/pkg_config_additions.patch22
-rw-r--r--nixpkgs/pkgs/development/tools/gogetdoc/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/gogetdoc/deps.nix13
-rw-r--r--nixpkgs/pkgs/development/tools/golangci-lint/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/golint/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/golint/deps.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/gometalinter/default.nix70
-rw-r--r--nixpkgs/pkgs/development/tools/gomodifytags/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/google-app-engine-go-sdk/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/gopkgs/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/gopkgs/deps.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/gosec/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/gosec/deps.nix193
-rw-r--r--nixpkgs/pkgs/development/tools/gotags/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/gotests/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/gotests/deps.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/gotools/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/govendor/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/govers/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/gox/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/gox/deps.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/gpp/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/grabserial/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/gron/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/gron/deps.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/gtk-mac-bundler/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/guile/g-wrap/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/guile/guile-lint/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/hyper-haskell/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/hyper-haskell/server.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/ihaskell/wrapper.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/lambdabot/custom-config.patch49
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/lambdabot/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/mueval/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/multi-ghc-travis/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/vaultenv/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/hcloud/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/hcloud/deps.nix102
-rw-r--r--nixpkgs/pkgs/development/tools/heroku/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/hexio/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/iaca/2.1.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/iaca/3.0.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/icestorm/default.nix61
-rw-r--r--nixpkgs/pkgs/development/tools/icr/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/iferr/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/imatix_gsl/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/impl/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/impl/deps.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/ineffassign/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/interfacer/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/interfacer/deps.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/irony-server/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/java/cfr/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/java/fastjar/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/java/jhiccup/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/java/visualvm/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/jazzy/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/jazzy/Gemfile.lock102
-rw-r--r--nixpkgs/pkgs/development/tools/jazzy/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/jazzy/gemset.nix401
-rwxr-xr-xnixpkgs/pkgs/development/tools/jazzy/update8
-rw-r--r--nixpkgs/pkgs/development/tools/jbake/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/jd/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/jid/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/jid/deps.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/jira_cli/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/jl/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/jmespath/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/jo/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/jp/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/jq/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/jsduck/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/jsduck/Gemfile.lock23
-rw-r--r--nixpkgs/pkgs/development/tools/jsduck/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/jsduck/gemset.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/json2hcl/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/json2hcl/deps.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/just/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/k6/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/kafkacat/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/kexpand/default.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/kexpand/deps.nix63
-rw-r--r--nixpkgs/pkgs/development/tools/kind/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/kind/deps.nix507
-rw-r--r--nixpkgs/pkgs/development/tools/ktlint/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/kube-aws/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/kube-prompt/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/kube-prompt/deps.nix309
-rw-r--r--nixpkgs/pkgs/development/tools/kubectx/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/kubicorn/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/kustomize/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/kythe/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/lattice-diamond/default.nix115
-rw-r--r--nixpkgs/pkgs/development/tools/lazygit/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/leaps/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/leaps/deps.nix185
-rw-r--r--nixpkgs/pkgs/development/tools/librarian-puppet-go/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/librarian-puppet-go/deps.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/libsigrok/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/libsigrokdecode/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/Literate/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/eweb/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/funnelweb/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/noweb/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/noweb/no-FAQ.patch11
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/nuweb/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/makerpm/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/maligned/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/maligned/deps.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/manul/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/manul/deps.nix75
-rw-r--r--nixpkgs/pkgs/development/tools/mbed-cli/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/mdk/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/minizinc/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/minizinc/ide.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/misc/abi-compliance-checker/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/abi-dumper/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/arcanist/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/misc/astyle/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autobuild/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf-archive/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf/2.13.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf/2.64.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autogen/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/automake-1.11.x.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/automake-1.15.x.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/automake-1.16.x.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/builder.sh47
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/fix-perl-5.26.patch10
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/fix-test-autoconf-2.69.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/setup-hook.sh5
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automoc4/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/misc/avarice/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/avrdude/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/awf/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/misc/babeltrace/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/bashdb/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/bin_replace_string/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/0001-x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch517
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/0001-x86-Properly-add-X86_ISA_1_NEEDED-property.patch137
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/0001-x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch583
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/always-search-rpath.patch14
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/build-components-separately.patch178
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/default.nix156
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/deterministic.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/disambiguate-arm-targets.patch23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/gold-symbol-visibility.patch79
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/no-plugins.patch19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/support-ios.patch168
-rw-r--r--nixpkgs/pkgs/development/tools/misc/blackmagic/default.nix62
-rwxr-xr-xnixpkgs/pkgs/development/tools/misc/blackmagic/helper.sh49
-rw-r--r--nixpkgs/pkgs/development/tools/misc/bossa/bin2c.c122
-rw-r--r--nixpkgs/pkgs/development/tools/misc/bossa/bossa-no-applet-build.patch16
-rw-r--r--nixpkgs/pkgs/development/tools/misc/bossa/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/misc/bsdbuild/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cbrowser/backslashes-quotes.diff49
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cbrowser/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ccache/default.nix82
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ccache/fix-debug-prefix-map-suite.patch42
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ccache/skip-fs-dependent-test.patch26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ccls/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ccls/wrapper12
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cflow/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cgdb/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/checkbashisms/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/chrpath/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/chruby/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/misc/chruby/env.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/misc/circleci-cli/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cl-launch/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cl-launch/default.upstream2
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cli11/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/coccinelle/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/misc/complexity/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cppi/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cproto/cproto_patch11
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cproto/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cquery/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cquery/wrapper12
-rw-r--r--nixpkgs/pkgs/development/tools/misc/creduce/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cscope/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/misc/csmith/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ctags/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ctags/wrapped.nix78
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cwebbin/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/misc/d-feet/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dbench/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dbench/fix-missing-stdint.patch10
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ddd/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ddd/gcc44.patch11
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dejagnu/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dfu-programmer/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dfu-util/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dialog/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/misc/distcc/default.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/misc/distcc/masq.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/misc/doclifter/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/drush/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/misc/editorconfig-core-c/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/misc/eggdbus/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/misc/elfinfo/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/misc/elfkickers/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/elfutils/debug-info-from-env.patch27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/elfutils/default.nix80
-rw-r--r--nixpkgs/pkgs/development/tools/misc/epm/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/findnewest/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/fsatrace/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/fswatch/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gdb/darwin-target-match.patch11
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gdb/debug-info-from-env.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gdb/default.nix94
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gdbgui/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gede/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gengetopt/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/global/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gnum4/darwin-secure-format.patch15
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gnum4/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gnum4/s_isdir.patch14
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gob2/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gperf/3.0.x.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gperf/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gperf/gperf-ar-fix.patch46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gpshell/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gputils/default.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gtkdialog/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gtkperf/bench.patch60
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gtkperf/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/help2man/1.40.4-cygwin-nls.patch165
-rw-r--r--nixpkgs/pkgs/development/tools/misc/help2man/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/hound/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/hound/deps.nix1
-rw-r--r--nixpkgs/pkgs/development/tools/misc/hydra/default.nix147
-rw-r--r--nixpkgs/pkgs/development/tools/misc/icon-naming-utils/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/igprof/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/indent/darwin.patch15
-rw-r--r--nixpkgs/pkgs/development/tools/misc/indent/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/inotify-tools/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/intel-gpu-tools/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/misc/intltool/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/iozone/default.nix61
-rw-r--r--nixpkgs/pkgs/development/tools/misc/itstool/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/jscoverage/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/misc/jscoverage/jsfalse_to_null.patch26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/kconfig-frontends/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/misc/kdbg/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/kibana/5.x.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/misc/kibana/6.x.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/misc/kibana/7.x.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/misc/kibana/disable-nodejs-version-check.patch19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/libtool/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/libtool/libtool2.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/misc/libwhich/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/linuxkit/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lit/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/misc/loccount/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lsof/darwin-dfile.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lsof/default.nix66
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lsof/no-build-info.patch43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ltrace/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lttng-tools/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lttng-ust/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lttv/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/darwin.patch27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/default.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/default.upstream1
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/luarocks-nix.nix10
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/setup-hook.sh16
-rw-r--r--nixpkgs/pkgs/development/tools/misc/macdylibbundler/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/md2man/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdl/.bundle/config3
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdl/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdl/Gemfile.lock21
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdl/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdl/gemset.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mkcert/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/moby/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/msitools/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ninka/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/nixbang/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/misc/nrfutil/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/objconv/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile.lock17
-rw-r--r--nixpkgs/pkgs/development/tools/misc/one_gadget/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/misc/one_gadget/gemset.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/opengrok/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/openocd/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pahole/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/patchelf/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/patchelf/setup-hook.sh22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/patchelf/unstable.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pkg-config/2.36.3-not-win32.patch324
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pkg-config/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pkg-config/requires-private.patch17
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pkg-config/setup-hook.sh6
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pkgconf/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pmccabe/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pmccabe/getopt_on_darwin.patch15
-rw-r--r--nixpkgs/pkgs/development/tools/misc/prelink/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/premake/3.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/premake/5.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/premake/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/premake/setup-hook.sh19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pwndbg/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/misc/rman/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/rolespec/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/misc/saleae-logic/default.nix98
-rw-r--r--nixpkgs/pkgs/development/tools/misc/saleae-logic/preload.c341
-rw-r--r--nixpkgs/pkgs/development/tools/misc/semver-tool/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/sipp/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/sloccount/default.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/misc/sqitch/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/srecord/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/stlink/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/stm32flash/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/strace/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/swig/2.x.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/swig/3.x.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/swig/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/sysbench/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tcptrack/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/teensy-loader-cli/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tet/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texi2html/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/4.13a.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/5.2.nix4
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/6.5.nix4
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/common.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/perl.patch43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tie/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tokei/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/Gemfile.lock51
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/gemset.nix154
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/shell.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/misc/trv/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/misc/uisp/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/uncrustify/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/unifdef/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/universal-ctags/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/universal-ctags/sed-test.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/misc/usb-modeswitch/data.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/usb-modeswitch/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/vtable-dumper/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/development/tools/misc/watson-ruby/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/watson-ruby/gemset.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/misc/whatstyle/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/xc3sprog/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/xxdiff/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/xxdiff/tip.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ycmd/default.nix83
-rw-r--r--nixpkgs/pkgs/development/tools/misc/yodl/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/mod/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/modd/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/modd/deps.nix138
-rw-r--r--nixpkgs/pkgs/development/tools/mpfshell/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/msgpack-tools/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/mustache-go/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/nailgun/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/neoload/default.nix95
-rw-r--r--nixpkgs/pkgs/development/tools/node-webkit/nw12.nix61
-rw-r--r--nixpkgs/pkgs/development/tools/nrpl/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/nsis/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/nwjs/default.nix95
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/camlidl/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/camlp4/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/camlp5/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/cppo/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/dune/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/findlib/default.nix77
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/findlib/install_topfind.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/findlib/ldconf.patch8
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/3.0.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/Makefile.conf.diff10
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/camlp4.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/compiler.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/lwt.nix16
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ocamlbuild.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx.nix14
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx_deriving_json.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/tyxml.nix16
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/merlin/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/oasis/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/obelisk/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/obuild/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocaml-top/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlbuild/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlformat/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlify/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlmod/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlscript/Makefile.patch70
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlscript/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocp-build/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocp-indent/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocp-index/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocsigen-i18n/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/omake/0.9.8.6-rc1.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/omake/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/omake/warn.patch10
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/opaline/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/opam/1.2.2.nix92
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/opam/default.nix120
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/opam/opam-shebangs.patch128
-rwxr-xr-xnixpkgs/pkgs/development/tools/ocaml/opam/opam.nix.pl131
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/utop/default.nix77
-rw-r--r--nixpkgs/pkgs/development/tools/omniorb/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/omnisharp-roslyn/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/packer/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/packet/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/packet/deps.nix156
-rw-r--r--nixpkgs/pkgs/development/tools/parinfer-rust/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/parse-cli-bin/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7-fixes.patch26
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/3.4.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/3.5.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/4.7.nix81
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/builder.sh23
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/bison/2.x.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/bison/3.x.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/bison/darwin-vasnprintf.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/byacc/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/flex/2.5.35.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/flex/2.6.1.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/flex/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/flexc++/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/hammer/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/jikespg/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/jshon/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/lemon/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/peg/default.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/ragel/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/re2c/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/pax-rs/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/pet/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/pew/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/pgloader/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/phantomjs/default.nix70
-rw-r--r--nixpkgs/pkgs/development/tools/phantomjs2/default.nix114
-rw-r--r--nixpkgs/pkgs/development/tools/phantomjs2/system-qtbase.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/pipenv/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/postiats-utilities/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/EZTrace/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/heaptrack/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/oprofile/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/pprof/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/pprof/deps.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/pyflame/default.nix116
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/pyprof2calltree/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/sysprof/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/systemtap/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/proto-contrib/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/pup/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile5
-rw-r--r--nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile.lock13
-rw-r--r--nixpkgs/pkgs/development/tools/puppet/puppet-lint/default.nix7
-rw-r--r--nixpkgs/pkgs/development/tools/puppet/puppet-lint/gemset.nix10
-rw-r--r--nixpkgs/pkgs/development/tools/pydb/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/pypi2nix/default.nix106
-rw-r--r--nixpkgs/pkgs/development/tools/pyre/default.nix137
-rw-r--r--nixpkgs/pkgs/development/tools/pyre/pyre-bdist-wheel.patch43
-rw-r--r--nixpkgs/pkgs/development/tools/qtcreator/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/quicktemplate/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/quicktemplate/deps.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/quilt/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/rdocker/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/react-native-debugger/default.nix83
-rw-r--r--nixpkgs/pkgs/development/tools/redis-dump/.bundle/config3
-rw-r--r--nixpkgs/pkgs/development/tools/redis-dump/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/redis-dump/Gemfile.lock21
-rw-r--r--nixpkgs/pkgs/development/tools/redis-dump/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/redis-dump/gemset.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/reflex/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/reftools/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/remarshal/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/reno/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/repository-managers/nexus/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-bin.patch48
-rw-r--r--nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-vm-opts.patch14
-rw-r--r--nixpkgs/pkgs/development/tools/rhc/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/richgo/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/ronn/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/ronn/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/development/tools/ronn/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/ronn/gemset.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/rq/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/rshell/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/rtags/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/rubocop/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/rubocop/Gemfile.lock27
-rw-r--r--nixpkgs/pkgs/development/tools/rubocop/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/rubocop/gemset.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/rucksack/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/bindgen/default.nix63
-rwxr-xr-xnixpkgs/pkgs/development/tools/rust/bindgen/wrapper.sh36
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-asm/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-bloat/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-expand/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-fuzz/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-make/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-sweep/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-xbuild/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cbindgen/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rust/pyo3-pack/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/rust/racer/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/rust/racer/ignore-tests.patch22
-rw-r--r--nixpkgs/pkgs/development/tools/rust/racer/rust-src.patch10
-rw-r--r--nixpkgs/pkgs/development/tools/rust/racerd/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rainicorn/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rls/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustfmt/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustup/0001-dynamically-patchelf-binaries.patch41
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustup/default.nix71
-rw-r--r--nixpkgs/pkgs/development/tools/rust/svd2rust/cargo-lock.patch283
-rw-r--r--nixpkgs/pkgs/development/tools/rust/svd2rust/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/sass/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/sass/Gemfile.lock21
-rw-r--r--nixpkgs/pkgs/development/tools/sass/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/sass/gemset.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/sassc/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/sauce-connect/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/scalafix/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/scalafmt/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/scry/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/scss-lint/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/scss-lint/Gemfile.lock25
-rw-r--r--nixpkgs/pkgs/development/tools/scss-lint/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/scss-lint/gemset.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/selenium/chromedriver/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/selenium/htmlunit-driver/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/selenium/selendroid/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/selenium/server/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/setupcfg2nix/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/setupcfg2nix/info.nix7
-rw-r--r--nixpkgs/pkgs/development/tools/sigrok-cli/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/simavr/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/skaffold/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/skopeo/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/slimerjs/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/slimerjs/default.upstream2
-rw-r--r--nixpkgs/pkgs/development/tools/slimerjs/default.upstream.git3
-rw-r--r--nixpkgs/pkgs/development/tools/solarus-quest-editor/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/sourcetrail/default.nix75
-rw-r--r--nixpkgs/pkgs/development/tools/spirv-tools/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/sqlint/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/sqlint/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/development/tools/sqlint/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/sqlint/gemset.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/sqsh/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/sslmate/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/stagit/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/statik/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/statik/deps.nix3
-rw-r--r--nixpkgs/pkgs/development/tools/sunxi-tools/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/textql/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/textql/deps.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/thrust/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/toluapp/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/toluapp/environ-and-linux-is-kinda-posix.patch36
-rw-r--r--nixpkgs/pkgs/development/tools/toluapp/headers.patch15
-rw-r--r--nixpkgs/pkgs/development/tools/tora/default.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/toxiproxy/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/tradcpp/aarch64.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/tradcpp/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/tradcpp/tradcpp-configure.patch84
-rw-r--r--nixpkgs/pkgs/development/tools/trellis/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/tychus/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/tychus/deps.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/uftrace/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/unconvert/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/unconvert/deps.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/unity3d/default.nix140
-rw-r--r--nixpkgs/pkgs/development/tools/unity3d/unity-nosuid.c32
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/0004-Support-system-installed-plugins.patch97
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/default.nix98
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/gemset.nix491
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/gemset_libvirt.nix118
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/unofficial-installation-nowarn.patch16
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/use-system-bundler-version.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/vagrant-libvirt.json.in9
-rw-r--r--nixpkgs/pkgs/development/tools/valadoc/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/vcstool/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/vgo2nix/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/vgo2nix/deps.nix147
-rw-r--r--nixpkgs/pkgs/development/tools/vim-vint/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/vndr/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/vogl/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/vulkan-validation-layers/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/vultr/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/wabt/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/wasm-pack/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/watchman/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/wiggle/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/wiiload/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/winpdb/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/wllvm/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/wp-cli/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/ws/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/ws/deps.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/default.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/platforms.nix301
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/sdks.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/setup-hook.sh29
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/toolchains.nix73
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix138
-rw-r--r--nixpkgs/pkgs/development/tools/xcpretty/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/xcpretty/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/development/tools/xcpretty/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/xcpretty/gemset.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/xib2nib/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/xqilla/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/yaml2json/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/yaml2json/deps.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/yarn/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/ydiff/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/yq/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/yuicompressor/default.nix29
978 files changed, 43863 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/tools/alloy/default.nix b/nixpkgs/pkgs/development/tools/alloy/default.nix
new file mode 100644
index 000000000000..7ff5633072e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/alloy/default.nix
@@ -0,0 +1,72 @@
+{ stdenv, fetchurl, jre, makeWrapper, makeDesktopItem }:
+
+let generic = { major, version, src }:
+
+  stdenv.mkDerivation rec {
+    name = "${nameMajor}-${version}";
+    nameMajor = "alloy${major}";
+
+    desktopItem = makeDesktopItem rec {
+      name = "${nameMajor}";
+      exec = name;
+      icon = name;
+      desktopName = "Alloy ${major}";
+      genericName = "Relational modelling tool";
+      comment = meta.description;
+      categories = "Development;IDE;Education;";
+    };
+
+    nativeBuildInputs = [ makeWrapper ];
+
+    buildCommand = ''
+      jar=$out/share/alloy/${nameMajor}.jar
+      install -Dm644 ${src} $jar
+
+      mkdir -p $out/bin
+      makeWrapper ${jre}/bin/java $out/bin/${nameMajor} --add-flags \
+       "-jar $jar"
+
+      install -Dm644 ${./icon.png} $out/share/pixmaps/${nameMajor}.png
+      cp -r ${desktopItem}/share/applications $out/share
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Language & tool for relational models";
+      longDescription = ''
+        Alloy is a language for describing structures and a tool for exploring
+        them. An Alloy model is a collection of constraints that describes a set
+        of structures, e.g. all the possible security configurations of a web
+        application, or all the possible topologies of a switching network. The
+        Alloy Analyzer is a solver that takes the constraints of a model and
+        finds structures that satisfy them. Structures are displayed graphically,
+        and their appearance can be customized for the domain at hand.
+      '';
+      homepage = http://alloytools.org/;
+      downloadPage = http://alloytools.org/download.html;
+      license = licenses.mit;
+      platforms = platforms.linux;
+      maintainers = with maintainers; [ aminb ];
+    };
+  };
+
+in rec {
+  alloy4 = let version = "4.2_2015-02-22"; in generic {
+    major = "4";
+    inherit version;
+    src = fetchurl {
+      sha256 = "0p93v8jwx9prijpikkgmfdzb9qn8ljmvga5d9wvrkxddccjx9k28";
+      url = "http://alloytools.org/download/alloy${version}.jar";
+    };
+  };
+
+  alloy5 = let version = "5.0.0.1"; in generic {
+    major = "5";
+    inherit version;
+    src = fetchurl {
+      sha256 = "0kz6i9av9ksjk62lx0dxx8xr542iqvbqd14m1f9h8xpf72c25xw4";
+      url = "https://github.com/AlloyTools/org.alloytools.alloy/releases/download/v${version}/Alloy-${version}.jar";
+    };
+  };
+
+  alloy = alloy4;
+}
diff --git a/nixpkgs/pkgs/development/tools/alloy/icon.png b/nixpkgs/pkgs/development/tools/alloy/icon.png
new file mode 100644
index 000000000000..a76bd9480474
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/alloy/icon.png
Binary files differdiff --git a/nixpkgs/pkgs/development/tools/ammonite/default.nix b/nixpkgs/pkgs/development/tools/ammonite/default.nix
new file mode 100644
index 000000000000..a7c94601dd88
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ammonite/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, lib, fetchurl, makeWrapper, jre, gnused
+, disableRemoteLogging ? true
+}:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+  name = "ammonite-${version}";
+  version = "1.6.7";
+  scalaVersion = "2.12";
+
+  src = fetchurl {
+    url = "https://github.com/lihaoyi/Ammonite/releases/download/${version}/${scalaVersion}-${version}";
+    sha256 = "0d7iqgyvsyl8m02bwcsvp11q73xcsvzwwipjzlbqrgi0jivf34pw";
+  };
+
+  propagatedBuildInputs = [ jre ] ;
+  buildInputs = [ makeWrapper gnused ] ;
+
+  phases = "installPhase";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ${src} $out/bin/amm
+    chmod +x $out/bin/amm
+    ${gnused}/bin/sed -i '0,/java/{s|java|${jre}/bin/java|}' $out/bin/amm
+  '' + optionalString (disableRemoteLogging) ''
+    ${gnused}/bin/sed -i '0,/ammonite.Main/{s|ammonite.Main|ammonite.Main --no-remote-logging|}' $out/bin/amm
+  '';
+
+  meta = {
+    description = "Improved Scala REPL";
+    longDescription = ''
+        The Ammonite-REPL is an improved Scala REPL, re-implemented from first principles.
+        It is much more featureful than the default REPL and comes
+        with a lot of ergonomic improvements and configurability
+        that may be familiar to people coming from IDEs or other REPLs such as IPython or Zsh.
+    '';
+    homepage = http://www.lihaoyi.com/Ammonite/;
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
+    maintainers = [ lib.maintainers.nequissimus ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/autoflake/default.nix b/nixpkgs/pkgs/development/tools/analysis/autoflake/default.nix
new file mode 100644
index 000000000000..a8b8a965256f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/autoflake/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, python3Packages }:
+
+with python3Packages;
+buildPythonApplication rec {
+  pname = "autoflake";
+  version = "1.3";
+  name = "${pname}-${version}";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0wzrvrn6279fijg8jkqbs6313f7b5ll5d22pk5s0fc1fp2wyanbb";
+  };
+
+  propagatedBuildInputs = [ pyflakes ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/myint/autoflake;
+    description = "A simple program which removes unused imports and unused variables as reported by pyflakes";
+    license = licenses.mit;
+    maintainers = with maintainers; [ yuriaisaka ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/brakeman/default.nix b/nixpkgs/pkgs/development/tools/analysis/brakeman/default.nix
new file mode 100644
index 000000000000..78a4396698b6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/brakeman/default.nix
@@ -0,0 +1,17 @@
+{ lib, ruby, buildRubyGem }:
+
+buildRubyGem rec {
+  inherit ruby;
+  name = "${gemName}-${version}";
+  gemName = "brakeman";
+  version = "4.5.1";
+  source.sha256 = "0vqnhlswvrg5fpxszfkjmla85gdlvgspz0whlli730ydx648mi68";
+
+  meta = with lib; {
+    description = "Static analysis security scanner for Ruby on Rails";
+    homepage = https://brakemanscanner.org/;
+    license = [ licenses.cc-by-nc-sa-40 licenses.mit ];
+    platforms = ruby.meta.platforms;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/cccc/cccc.patch b/nixpkgs/pkgs/development/tools/analysis/cccc/cccc.patch
new file mode 100644
index 000000000000..9454e3b18ad1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cccc/cccc.patch
@@ -0,0 +1,24 @@
+diff --git a/cccc/cccc_tbl.cc b/cccc/cccc_tbl.cc
+index df98e2b..59f2572 100644
+--- a/cccc/cccc_tbl.cc
++++ b/cccc/cccc_tbl.cc
+@@ -96,7 +96,7 @@ bool CCCC_Table<T>::remove(T* old_item_ptr)
+   typename map_t::iterator value_iterator=map_t::find(old_item_ptr->key());
+   if(value_iterator!=map_t::end())
+     {
+-      erase(value_iterator);
++      map_t::erase(value_iterator);
+       retval=true;
+     }
+   return retval;
+diff --git a/makefile b/makefile
+index 23ad004..2cca469 100644
+--- a/makefile
++++ b/makefile
+@@ -20,5 +20,5 @@ test :
+ 	cd test ; make -f posix.mak
+ 
+ install : 
+-	cd install ; su root -c "make -f install.mak" 
++	cd install ; make -f install.mak
+ 
diff --git a/nixpkgs/pkgs/development/tools/analysis/cccc/default.nix b/nixpkgs/pkgs/development/tools/analysis/cccc/default.nix
new file mode 100644
index 000000000000..a46d7f9d9536
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cccc/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl }:
+
+let
+  name = "cccc";
+  version = "3.1.4";
+in
+stdenv.mkDerivation {
+  name = "${name}-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${name}/${version}/${name}-${version}.tar.gz";
+    sha256 = "1gsdzzisrk95kajs3gfxks3bjvfd9g680fin6a9pjrism2lyrcr7";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  patches = [ ./cccc.patch ];
+
+  preConfigure = ''
+    substituteInPlace install/install.mak --replace /usr/local/bin $out/bin
+    substituteInPlace install/install.mak --replace MKDIR=mkdir "MKDIR=mkdir -p"
+  '';
+  buildFlags = [ "CCC=c++" "LD=c++" ];
+
+  meta = {
+    description = "C and C++ Code Counter";
+    longDescription = ''
+      CCCC is a tool which analyzes C++ and Java files and generates a report
+      on various metrics of the code. Metrics supported include lines of code, McCabe's
+      complexity and metrics proposed by Chidamber&Kemerer and Henry&Kafura.
+    '';
+    homepage = http://cccc.sourceforge.net/;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.linquize ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/checkstyle/default.nix b/nixpkgs/pkgs/development/tools/analysis/checkstyle/default.nix
new file mode 100644
index 000000000000..5b80a5079b6e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/checkstyle/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  version = "8.21";
+  name = "checkstyle-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/checkstyle/checkstyle/releases/download/checkstyle-${version}/checkstyle-${version}-all.jar";
+    sha256 = "1jd6kbfmvgr3mr8kjhhr1fj1i3j36ysnfi14g5027ngwbq7klm7d";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  unpackPhase = ":";
+
+  installPhase = ''
+    runHook preInstall
+    install -D $src $out/checkstyle/checkstyle-all.jar
+    makeWrapper ${jre}/bin/java $out/bin/checkstyle \
+      --add-flags "-jar $out/checkstyle/checkstyle-all.jar"
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Checks Java source against a coding standard";
+    longDescription = ''
+      checkstyle is a development tool to help programmers write Java code that
+      adheres to a coding standard. By default it supports the Sun Code
+      Conventions, but is highly configurable.
+    '';
+    homepage = http://checkstyle.sourceforge.net/;
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ pSub ];
+    platforms = jre.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/clang-analyzer/0001-Fix-scan-build-to-use-NIX_CFLAGS_COMPILE.patch b/nixpkgs/pkgs/development/tools/analysis/clang-analyzer/0001-Fix-scan-build-to-use-NIX_CFLAGS_COMPILE.patch
new file mode 100644
index 000000000000..bcb3ac1d146a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/clang-analyzer/0001-Fix-scan-build-to-use-NIX_CFLAGS_COMPILE.patch
@@ -0,0 +1,33 @@
+From 6ab08bc1c889e4fb9a39432b1a654eaa19ee65eb Mon Sep 17 00:00:00 2001
+From: Austin Seipp <aseipp@pobox.com>
+Date: Fri, 2 May 2014 12:28:23 -0500
+Subject: [PATCH] Fix scan-build to use NIX_CFLAGS_COMPILE
+
+Signed-off-by: Austin Seipp <aseipp@pobox.com>
+---
+ tools/scan-build/ccc-analyzer | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/tools/scan-build/ccc-analyzer b/tools/scan-build/ccc-analyzer
+index b463ec0..9d39dd0 100755
+--- a/tools/scan-build/ccc-analyzer
++++ b/tools/scan-build/ccc-analyzer
+@@ -207,6 +207,15 @@ sub Analyze {
+       push @Args, "-Xclang", "-analyzer-viz-egraph-ubigraph";
+     }
+ 
++
++    # Add Nix flags to analysis
++    if (defined $ENV{'NIX_CFLAGS_COMPILE'}) {
++      my @nixArgs = split(/\s+/, $ENV{'NIX_CFLAGS_COMPILE'});
++      foreach my $nixArg (@nixArgs) {
++        push @Args, $nixArg;
++      }
++    }
++
+     my $AnalysisArgs = GetCCArgs("--analyze", \@Args);
+     @CmdArgs = @$AnalysisArgs;
+   }
+-- 
+1.8.3.2
+
diff --git a/nixpkgs/pkgs/development/tools/analysis/clang-analyzer/default.nix b/nixpkgs/pkgs/development/tools/analysis/clang-analyzer/default.nix
new file mode 100644
index 000000000000..2e01e4d8f28e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/clang-analyzer/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, clang, llvmPackages, perl, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name    = "clang-analyzer-${version}";
+  version = "3.4";
+
+  src = fetchurl {
+    url    = "http://llvm.org/releases/${version}/clang-${version}.src.tar.gz";
+    sha256 = "06rb4j1ifbznl3gfhl98s7ilj0ns01p7y7zap4p7ynmqnc6pia92";
+  };
+
+  patches = [ ./0001-Fix-scan-build-to-use-NIX_CFLAGS_COMPILE.patch ];
+  buildInputs = [ clang llvmPackages.clang perl makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/libexec
+    cp -R tools/scan-view  $out/libexec
+    cp -R tools/scan-build $out/libexec
+
+    makeWrapper $out/libexec/scan-view/scan-view $out/bin/scan-view
+    makeWrapper $out/libexec/scan-build/scan-build $out/bin/scan-build \
+      --add-flags "--use-cc=${clang}/bin/clang" \
+      --add-flags "--use-c++=${clang}/bin/clang++" \
+      --add-flags "--use-analyzer='${llvmPackages.clang}/bin/clang'"
+  '';
+
+  meta = {
+    description = "Clang Static Analyzer";
+    homepage    = "http://clang-analyzer.llvm.org";
+    license     = stdenv.lib.licenses.bsd3;
+    platforms   = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/coan/default.nix b/nixpkgs/pkgs/development/tools/analysis/coan/default.nix
new file mode 100644
index 000000000000..2b4a87ffcb8d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/coan/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  version = "6.0.1";
+  name = "coan-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/coan2/v${version}/${name}.tar.gz";
+    sha256 = "1d041j0nd1hc0562lbj269dydjm4rbzagdgzdnmwdxr98544yw44";
+  };
+
+  nativeBuildInputs = [ perl ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    mv -v $out/share/man/man1/coan.1.{1,gz}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "The C preprocessor chainsaw";
+    longDescription = ''
+      A software engineering tool for analysing preprocessor-based
+      configurations of C or C++ source code. Its principal use is to simplify
+      a body of source code by eliminating any parts that are redundant with
+      respect to a specified configuration. Dead code removal is an
+      application of this sort.
+    '';
+    homepage = http://coan2.sourceforge.net/;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/cov-build/default.nix b/nixpkgs/pkgs/development/tools/analysis/cov-build/default.nix
new file mode 100644
index 000000000000..bd0a4ee5e40a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cov-build/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, requireFile }:
+
+let
+  message = ''
+    Register an account at https://scan.coverity.com, download the
+    build tools, and add it to the nix store with nix-prefetch-url
+  '';
+in
+stdenv.mkDerivation rec {
+  name    = "cov-build-${version}";
+  version = "7.0.2";
+
+  src =
+    if stdenv.hostPlatform.system == "i686-linux"
+    then requireFile {
+      name = "cov-analysis-linux32-${version}.tar.gz";
+      sha256 = "0i06wbd7blgx9adh9w09by4i18vwmldfp9ix97a5dph2cjymsviy";
+      inherit message;
+    }
+    else requireFile {
+      name = "cov-analysis-linux64-${version}.tar.gz";
+      sha256 = "0iby75p0g8gv7b501xav47milr8m9781h0hcgm1ch6x3qj6irqd8";
+      inherit message;
+    };
+
+  dontStrip = true;
+  buildPhase = false;
+  installPhase = ''
+    mkdir -p $out/bin $out/libexec
+    mv * $out/libexec
+    for x in cov-build cov-capture cov-configure cov-emit cov-emit-java \
+      cov-export-cva cov-extract-scm cov-help cov-import-scm cov-link \
+      cov-internal-clang cov-internal-emit-clang cov-internal-nm \
+      cov-internal-emit-java-bytecode cov-internal-reduce cov-translate \
+      cov-preprocess cov-internal-pid-to-db cov-manage-emit \
+      cov-manage-history; do
+        ln -s $out/libexec/bin/$x $out/bin/$x;
+    done
+  '';
+
+  meta = {
+    description = "Coverity Scan build tools";
+    homepage    = "https://scan.coverity.com";
+    license     = stdenv.lib.licenses.unfreeRedistributable;
+    platforms   = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/cppcheck/default.nix b/nixpkgs/pkgs/development/tools/analysis/cppcheck/default.nix
new file mode 100644
index 000000000000..f228cf7774c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cppcheck/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, libxslt, docbook_xsl, docbook_xml_dtd_45, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "cppcheck";
+  version = "1.87";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${name}.tar.bz2";
+    sha256 = "1jl1qlr8la1rix1ffcvl6s4arv2n9fvx85sl4zgp29428xks9c73";
+  };
+
+  buildInputs = [ pcre ];
+  nativeBuildInputs = [ libxslt docbook_xsl docbook_xml_dtd_45 ];
+
+  makeFlags = ''PREFIX=$(out) CFGDIR=$(out)/cfg HAVE_RULES=yes'';
+
+  outputs = [ "out" "man" ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    make DB2MAN=${docbook_xsl}/xml/xsl/docbook/manpages/docbook.xsl man
+    mkdir -p $man/share/man/man1
+    cp cppcheck.1 $man/share/man/man1/cppcheck.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A static analysis tool for C/C++ code";
+    longDescription = ''
+      Check C/C++ code for memory leaks, mismatching allocation-deallocation,
+      buffer overruns and more.
+    '';
+    homepage = http://cppcheck.sourceforge.net/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ joachifm ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/cpplint/default.nix b/nixpkgs/pkgs/development/tools/analysis/cpplint/default.nix
new file mode 100644
index 000000000000..10ed99e3ffe6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cpplint/default.nix
@@ -0,0 +1,29 @@
+{ lib, pythonPackages, fetchFromGitHub }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "cpplint";
+  version = "1.3.0";
+
+  # Fetch from github instead of pypi, since the test cases are not in the pypi archive
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "107v7bp35kxbv9v7wl79h7115z1m4b48rhasp0cnivql1grd277i";
+  };
+
+  postPatch = ''
+    patchShebangs cpplint_unittest.py
+  '';
+
+  checkPhase = ''
+    ./cpplint_unittest.py
+  '';
+
+  meta = with lib; {
+    homepage = https://github.com/cpplint/cpplint;
+    description = "Static code checker for C++";
+    maintainers = [ maintainers.bhipple ];
+    license = [ licenses.bsd3 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/egypt/default.nix b/nixpkgs/pkgs/development/tools/analysis/egypt/default.nix
new file mode 100644
index 000000000000..7db46005f453
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/egypt/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, perlPackages }:
+
+perlPackages.buildPerlPackage rec {
+  name = "egypt-${version}";
+  version = "1.10";
+
+  src = fetchurl {
+    sha256 = "0r0wj6v8z9fzlh9pb5617kyjdf92ppmlbzajaarrq729bbb6ln5m";
+    url = "https://www.gson.org/egypt/download/${name}.tar.gz";
+  };
+
+  outputs = [ "out" ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Tool for making call graphs of C programmes";
+    longDescription = ''
+      Egypt is a simple tool for creating call graphs of C programs. It neither
+      analyzes source code nor lays out graphs. Instead, it leaves the source
+      code analysis to GCC and the graph layout to Graphviz, both of which are
+      better at their respective jobs than egypt itself could ever hope to be.
+      Egypt is simply a very small Perl script that glues these existing tools
+      together.
+    '';
+    homepage = http://www.gson.org/egypt/;
+    license = with licenses; [ artistic1 gpl1Plus ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/emma/default.nix b/nixpkgs/pkgs/development/tools/analysis/emma/default.nix
new file mode 100644
index 000000000000..1bd24b4785d0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/emma/default.nix
@@ -0,0 +1,24 @@
+{stdenv, fetchurl, unzip}:
+
+stdenv.mkDerivation {
+  name = "emma-2.0.5312";
+  
+  src = fetchurl {
+    url = mirror://sourceforge/emma/emma-2.0.5312.zip;
+    sha256 = "0xxy39s2lvgs56vicjzpcz936l1vjaplliwa0dm7v3iyvw6jn7vj";
+  };
+
+  buildInputs = [unzip];
+
+  installPhase = ''
+    mkdir -p $out/lib/jars
+    cp lib/*.jar $out/lib/jars/
+  '';
+
+  meta = {
+    homepage = http://emma.sourceforge.net/;
+    description = "A code coverage tool for Java";
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.cpl10;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/eresi/default.nix b/nixpkgs/pkgs/development/tools/analysis/eresi/default.nix
new file mode 100644
index 000000000000..00c020e3f404
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/eresi/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, lib, fetchFromGitHub, which, openssl, readline }:
+
+stdenv.mkDerivation rec {
+  name = "eresi-${version}";
+  version = "0.83-a3-phoenix";
+
+  src = fetchFromGitHub {
+    owner = "thorkill";
+    repo = "eresi";
+    rev = version;
+    sha256 = "0a5a7mh2zw9lcdrl8n1mqccrc0xcgj7743l7l4kslkh722fxv625";
+  };
+
+  postPatch = ''
+    # Two occurences of fprintf() with only two arguments, which should really
+    # be fputs().
+    #
+    # Upstream pull request: https://github.com/thorkill/eresi/pull/162
+    #
+    sed -i -e 's/fprintf(\(stderr\), *\([a-z0-9]\+\))/fputs(\2, \1)/g' \
+      libe2dbg/common/common.c libe2dbg/user/threads.c
+
+    # We need to patch out a few ifs here, because it tries to create a series
+    # of configuration files in ~/.something. However, our builds are sandboxed
+    # and also don't contain a valid home, so let's NOP it out :-)
+    #
+    # The second fix we need to make is that we need to pretend being Gentoo
+    # because otherwise the build process tries to link against libtermcap,
+    # which I think is solely for historic reasons (nowadays Terminfo should
+    # have largely superseded it).
+    sed -i -e '/^if \[ ! -e/c if false; then' \
+           -e 's/^GENTOO=.*/GENTOO=1/' configure
+  '';
+
+  configureFlags = [
+    (if stdenv.is64bit then "--enable-32-64" else "--enable-32")
+    "--enable-readline"
+  ];
+
+  # The configure script is not generated by autoconf but is hand-rolled, so it
+  # has --enable-static but no --disabled-static and also doesn't support the
+  # equals sign in --prefix.
+  prefixKey = "--prefix ";
+  dontDisableStatic = true;
+
+  nativeBuildInputs = [ which ];
+  buildInputs = [ openssl readline ];
+  enableParallelBuilding = true;
+
+  installTargets = lib.singleton "install"
+                ++ lib.optional stdenv.is64bit "install64";
+
+  meta = {
+    description = "The ERESI Reverse Engineering Software Interface";
+    license = lib.licenses.gpl2;
+    homepage = http://www.eresi-project.org/;
+    maintainers = [ lib.maintainers.aszlig ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/evmdis/default.nix b/nixpkgs/pkgs/development/tools/analysis/evmdis/default.nix
new file mode 100644
index 000000000000..77bfa548068c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/evmdis/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "evmdis-unstable-${version}";
+  version = "2018-03-23";
+  goPackagePath = "github.com/Arachnid/evmdis";
+
+  src = fetchFromGitHub {
+    owner = "Arachnid";
+    repo = "evmdis";
+    rev = "0d1406905c5fda6224651fa53260a21c907eb986";
+    sha256 = "09y4j7ipgv8yd99g3xk3f079w8fqfj7kl1y7ry81ainysn0qlqrg";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/Arachnid/evmdis;
+    description = "Ethereum EVM disassembler";
+    license = [ licenses.asl20 ];
+    maintainers = with maintainers; [ asymmetric ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/findbugs/default.nix b/nixpkgs/pkgs/development/tools/analysis/findbugs/default.nix
new file mode 100644
index 000000000000..7f2df62008f0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/findbugs/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "findbugs-3.0.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/findbugs/${name}.tar.gz";
+    sha256 = "06b46fz4nid7qvm36r66zw01fr87y4jyz21ixw27b8hkqah0s3p8";
+  };
+
+  buildPhase = ''
+    substituteInPlace bin/findbugs --replace /bin/pwd pwd
+  '';
+
+  installPhase = ''
+    d=$out/libexec/findbugs
+    mkdir -p $d $out/bin $out/nix-support
+
+    cp -prd bin lib plugin doc $d/
+    rm $d/bin/*.bat
+    for i in $d/bin/*; do
+      if [ -f $i ]; then ln -s $i $out/bin/; fi
+    done
+
+    # Get rid of unnecessary JARs.
+    rm $d/lib/ant.jar
+
+    # Make some JARs findable.
+    mkdir -p $out/share/java
+    ln -s $d/lib/{findbugs.jar,findbugs-ant.jar} $out/share/java/
+
+    cat <<EOF > $out/nix-support/setup-hook
+    export FINDBUGS_HOME=$d
+    EOF
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A static analysis tool to find bugs in Java programs automatically";
+    homepage = http://findbugs.sourceforge.net/;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; unix;
+    license = licenses.lgpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/flow/default.nix b/nixpkgs/pkgs/development/tools/analysis/flow/default.nix
new file mode 100644
index 000000000000..dfe1a6a10c77
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/flow/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, ocamlPackages, cf-private, CoreServices }:
+
+stdenv.mkDerivation rec {
+  pname = "flow";
+  version = "0.100.0";
+
+  src = fetchFromGitHub {
+    owner  = "facebook";
+    repo   = "flow";
+    rev    = "refs/tags/v${version}";
+    sha256 = "10i2r0w979lhqgkq25s1a7j5vxlnjmr2w7nknhc1cvfp3z17k9ay";
+  };
+
+  installPhase = ''
+    install -Dm755 bin/flow $out/bin/flow
+    install -Dm644 resources/shell/bash-completion $out/share/bash-completion/completions/flow
+  '';
+
+  buildInputs = (with ocamlPackages; [ ocaml findlib ocamlbuild dtoa core_kernel sedlex ocaml_lwt lwt_log lwt_ppx ppx_deriving ppx_gen_rec ppx_tools_versioned visitors wtf8 ])
+    ++ stdenv.lib.optionals stdenv.isDarwin [ cf-private CoreServices ];
+
+  meta = with stdenv.lib; {
+    description = "A static type checker for JavaScript";
+    homepage = https://flow.org/;
+    license = licenses.mit;
+    platforms = ocamlPackages.ocaml.meta.platforms;
+    maintainers = with maintainers; [ marsam puffnfresh globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/frama-c/default.nix b/nixpkgs/pkgs/development/tools/analysis/frama-c/default.nix
new file mode 100644
index 000000000000..29a190220944
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/frama-c/default.nix
@@ -0,0 +1,92 @@
+{ stdenv, fetchurl, makeWrapper, ncurses, ocamlPackages, graphviz
+, ltl2ba, coq, why3, autoconf
+}:
+
+let
+  mkocamlpath = p: "${p}/lib/ocaml/${ocamlPackages.ocaml.version}/site-lib";
+  ocamlpath = "${mkocamlpath ocamlPackages.apron}:${mkocamlpath ocamlPackages.mlgmpidl}";
+in
+
+stdenv.mkDerivation rec {
+  name    = "frama-c-${version}";
+  version = "18.0";
+  slang   = "Argon";
+
+  src = fetchurl {
+    url    = "http://frama-c.com/download/frama-c-${version}-${slang}.tar.gz";
+    sha256 = "0a88k2mhafj7pz3dzgsqkrc9digkxpnvr9jqq9nbzwq8qr02bca2";
+  };
+
+  why2 = fetchurl {
+    url    = "http://why.lri.fr/download/why-2.40.tar.gz";
+    sha256 = "0h1mbpxsgwvf3pbl0qbg22j6f4v1ffka24ap1ajbjk9b1yb3ali8";
+  };
+
+  nativeBuildInputs = [ autoconf makeWrapper ];
+
+  buildInputs = with ocamlPackages; [
+    ncurses ocaml findlib ltl2ba ocamlgraph
+    lablgtk coq graphviz zarith why3 apron
+  ];
+
+
+  # Experimentally, the build segfaults with high core counts
+  enableParallelBuilding = false;
+
+  unpackPhase = ''
+    tar xf $src
+    tar xf $why2
+  '';
+
+  buildPhase = ''
+    cd frama*
+    ./configure --prefix=$out
+    # It is not parallel safe
+    make
+    make install
+    cd ../why*
+    FRAMAC=$out/bin/frama-c ./configure --prefix=$out
+    make
+    make install
+    for p in $out/bin/frama-c{,-gui};
+    do
+      wrapProgram $p --prefix OCAMLPATH ':' ${ocamlpath}
+    done
+  '';
+
+  # Enter frama-c directory before patching
+  prePatch = ''cd frama*'';
+  patches = [ ./dynamic.diff ];
+  postPatch = ''
+    # strip absolute paths to /usr/bin
+    for file in ./configure ./share/Makefile.common ./src/*/configure; do #*/
+      substituteInPlace $file  --replace '/usr/bin/' ""
+    done
+
+    substituteInPlace ./src/plugins/aorai/aorai_register.ml --replace '"ltl2ba' '"${ltl2ba}/bin/ltl2ba'
+
+    cd ../why*
+
+    substituteInPlace ./Makefile.in --replace '-warn-error A' '-warn-error A-3'    
+    substituteInPlace ./frama-c-plugin/Makefile --replace 'shell frama-c' "shell $out/bin/frama-c"
+    substituteInPlace ./jc/jc_make.ml --replace ' why-dp '       " $out/bin/why-dp "
+    substituteInPlace ./jc/jc_make.ml --replace "?= why@\n"      "?= $out/bin/why@\n"
+    substituteInPlace ./jc/jc_make.ml --replace ' gwhy-bin@'     " $out/bin/gwhy-bin@"
+    substituteInPlace ./jc/jc_make.ml --replace ' why3 '         " ${why3}/bin/why3 "
+    substituteInPlace ./jc/jc_make.ml --replace ' why3ide '      " ${why3}/bin/why3ide "
+    substituteInPlace ./jc/jc_make.ml --replace ' why3replayer ' " ${why3}/bin/why3replayer "
+    substituteInPlace ./jc/jc_make.ml --replace ' why3ml '       " ${why3}/bin/why3ml "
+    substituteInPlace ./jc/jc_make.ml --replace ' coqdep@'       " ${coq}/bin/coqdep@"
+    substituteInPlace ./jc/jc_make.ml --replace 'coqc'           " ${coq}/bin/coqc"
+    substituteInPlace ./frama-c-plugin/register.ml --replace ' jessie ' " $out/bin/jessie "
+    cd ..
+  '';
+
+  meta = {
+    description = "An extensible and collaborative platform dedicated to source-code analysis of C software";
+    homepage    = http://frama-c.com/;
+    license     = stdenv.lib.licenses.lgpl21;
+    maintainers = with stdenv.lib.maintainers; [ thoughtpolice amiddelk ];
+    platforms   = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/frama-c/dynamic.diff b/nixpkgs/pkgs/development/tools/analysis/frama-c/dynamic.diff
new file mode 100644
index 000000000000..737cad0cda4f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/frama-c/dynamic.diff
@@ -0,0 +1,12 @@
+--- a/src/kernel_services/plugin_entry_points/dynamic.ml	2016-05-30 16:15:22.000000000 +0200
++++ b/src/kernel_services/plugin_entry_points/dynamic.ml	2016-10-13 18:25:31.000000000 +0200
+@@ -270,7 +270,8 @@
+   load_path :=
+     List.fold_right (add_dir ~user:true) path
+       (List.fold_right (add_dir ~user:false) Config.plugin_dir []);
+-  let findlib_path = String.concat ":" !load_path in
++  let findlib_path = String.concat ":" (!load_path @
++    try [Sys.getenv "OCAMLPATH"] with Not_found -> []) in
+   Klog.debug ~dkey "setting findlib path to %s" findlib_path;
+   Findlib.init ~env_ocamlpath:findlib_path ()
+ 
diff --git a/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/default.nix b/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/default.nix
new file mode 100644
index 000000000000..f96f7e9b66bd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+
+  name = "tracefilegen-2017-05-13";
+
+  src = fetchFromGitHub {
+    owner = "GarCoSim";
+    repo = "TraceFileGen";
+    rev = "0ebfd1fdb54079d4bdeaa81fc9267ecb9f016d60";
+    sha256 = "1gsx18ksgz5gwl3v62vgrmhxc0wc99i74qwhpn0h57zllk41drjc";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  patches = [ ./gcc7.patch ];
+
+  installPhase = ''
+    install -Dm755 TraceFileGen $out/bin/TraceFileGen
+    mkdir -p $out/share/doc/${name}/
+    cp -ar $src/Documentation/html $out/share/doc/${name}/.
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Automatically generate all types of basic memory management operations and write into trace files";
+    homepage = https://github.com/GarCoSim;
+    maintainers = [ maintainers.cmcdragonkai ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/gcc7.patch b/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/gcc7.patch
new file mode 100644
index 000000000000..48301bbf61ad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/gcc7.patch
@@ -0,0 +1,13 @@
+diff --git a/Utils/Logger.cpp b/Utils/Logger.cpp
+index 747cd63..e3efdf1 100644
+--- a/Utils/Logger.cpp
++++ b/Utils/Logger.cpp
+@@ -29,7 +29,7 @@ Logger::Logger(char* tracepath) {
+ 	trace = fopen(tracepath, "w");

+ 

+ 	// dot file is not used, set null as default value

+-	dot = '\0';

++	dot = nullptr;

+ 	//dot = fopen("gcKons.dot", "w");

+ 	//fprintf(dot,"digraph G {\n");

+ }

diff --git a/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilesim/default.nix b/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilesim/default.nix
new file mode 100644
index 000000000000..557fa8384746
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilesim/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchgit }:
+
+stdenv.mkDerivation {
+
+  name = "tracefilesim-2015-11-07";
+
+  src = fetchgit {
+    url = "https://github.com/GarCoSim/TraceFileSim.git";
+    rev = "368aa6b1d6560e7ecbd16fca47000c8f528f3da2";
+    sha256 = "156m92k38ap4bzidbr8dzl065rni8lrib71ih88myk9z5y1x5nxm";
+  };
+
+  hardeningDisable = [ "fortify" ];
+
+  installPhase = ''
+    mkdir --parents "$out/bin"
+    cp ./traceFileSim "$out/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Ease the analysis of existing memory management techniques, as well as the prototyping of new memory management techniques.";
+    homepage = https://github.com/GarCoSim;
+    maintainers = [ maintainers.cmcdragonkai ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/hopper/default.nix b/nixpkgs/pkgs/development/tools/analysis/hopper/default.nix
new file mode 100644
index 000000000000..7158ea38c04d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/hopper/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, pkgs, makeWrapper, lib }:
+
+stdenv.mkDerivation rec {
+  pname    = "hopper";
+  version = "4.5.7";
+  rev = "v${lib.versions.major version}";
+
+  src = fetchurl {
+    url = "https://d2ap6ypl1xbe4k.cloudfront.net/Hopper-${rev}-${version}-Linux.pkg.tar.xz";
+    sha256 = "1ce7a0f13126a940398aa8da4a74e250dff0401074f30446a8840ac3dbb902c0";
+  };
+
+  sourceRoot = ".";
+
+  ldLibraryPath = with pkgs; stdenv.lib.makeLibraryPath  [
+libbsd.out libffi.out gmpxx.out python27Full.out python27Packages.libxml2 qt5.qtbase zlib  xlibs.libX11.out xorg_sys_opengl.out xlibs.libXrender.out gcc-unwrapped.lib
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+     mkdir -p $out/bin
+     mkdir -p $out/lib
+     mkdir -p $out/share
+     cp $sourceRoot/opt/hopper-${rev}/bin/Hopper $out/bin/hopper
+     cp -r $sourceRoot/opt/hopper-${rev}/lib $out
+     cp -r $sourceRoot/usr/share $out/share
+    patchelf \
+    --set-interpreter ${stdenv.glibc}/lib/ld-linux-x86-64.so.2 \
+    $out/bin/hopper
+    # Details: https://nixos.wiki/wiki/Qt
+     wrapProgram $out/bin/hopper \
+    --suffix LD_LIBRARY_PATH : ${ldLibraryPath} \
+    --suffix QT_PLUGIN_PATH : ${pkgs.qt5.qtbase}/lib/qt-${pkgs.qt5.qtbase.qtCompatVersion}/plugins
+  '';
+
+  meta = {
+    homepage = "https://www.hopperapp.com/index.html";
+    description = "A macOS and Linux Disassembler";
+    license = stdenv.lib.licenses.unfree;
+    maintainers = [ stdenv.lib.maintainers.luis ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/hotspot/default.nix b/nixpkgs/pkgs/development/tools/analysis/hotspot/default.nix
new file mode 100644
index 000000000000..89ffbff3db71
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/hotspot/default.nix
@@ -0,0 +1,66 @@
+{ stdenv,
+  cmake,
+  elfutils,
+  extra-cmake-modules,
+  fetchFromGitHub,
+  kconfigwidgets,
+  ki18n,
+  kio,
+  kitemmodels,
+  kitemviews,
+  kwindowsystem,
+  libelf,
+  qtbase,
+  threadweaver,
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hotspot";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "KDAB";
+    repo = "hotspot";
+    rev = "v${version}";
+    sha256 = "05rkzrvak93z8mzcpm4mcjxb933l8pjsxr9a595wfn1gn2ihmada";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [
+    cmake
+    elfutils
+    extra-cmake-modules
+    kconfigwidgets
+    ki18n
+    kio
+    kitemmodels
+    kitemviews
+    kwindowsystem
+    libelf
+    qtbase
+    threadweaver
+  ];
+
+  # hotspot checks for the presence of third party libraries'
+  # git directory to give a nice warning when you forgot to clone
+  # submodules; but Nix clones them and removes .git (for reproducibility).
+  # So we need to fake their existence here.
+  postPatch = ''
+    mkdir -p 3rdparty/perfparser/.git
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "A GUI for Linux perf";
+    longDescription = ''
+      hotspot is a GUI replacement for `perf report`.
+      It takes a perf.data file, parses and evaluates its contents and
+      then displays the result in a graphical way.
+    '';
+    homepage = https://github.com/KDAB/hotspot;
+    license = with stdenv.lib.licenses; [ gpl2 gpl3 ];
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ nh2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/ikos/default.nix b/nixpkgs/pkgs/development/tools/analysis/ikos/default.nix
new file mode 100644
index 000000000000..6f3df32f3c04
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/ikos/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, lib, fetchFromGitHub, cmake, boost
+, gmp, llvm, clang, sqlite, python3
+, ocamlPackages, mpfr, ppl, doxygen, graphviz
+}:
+
+let
+  python = python3.withPackages (ps: with ps; [
+    pygments
+  ]);
+in
+
+stdenv.mkDerivation rec {
+  name = "ikos";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner = "NASA-SW-VnV";
+    repo = name;
+    rev = "v${version}";
+    sha256 = "09nf47hpk5w5az4c0hcr5hhwvpz8zg1byyg185542cpzbq1xj8cb";
+  };
+
+  buildInputs = [ cmake boost gmp clang llvm sqlite python
+                  ocamlPackages.apron mpfr ppl doxygen graphviz ];
+
+  cmakeFlags = "-DAPRON_ROOT=${ocamlPackages.apron}";
+
+  postBuild = "make doc";
+
+  meta = with lib; {
+    homepage = https://github.com/NASA-SW-VnV/ikos;
+    description = "Static analyzer for C/C++ based on the theory of Abstract Interpretation";
+    license = licenses.nasa13;
+    maintainers = with maintainers; [ atnnn ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/include-what-you-use/default.nix b/nixpkgs/pkgs/development/tools/analysis/include-what-you-use/default.nix
new file mode 100644
index 000000000000..4222f72248a8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/include-what-you-use/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, cmake, llvmPackages, python2 }:
+
+stdenv.mkDerivation rec {
+  name = "include-what-you-use-${version}";
+  # Also bump llvmPackages in all-packages.nix to the supported version!
+  version = "0.10";
+
+  src = fetchurl {
+    sha256 = "16alan9rwbhpyfxmlpc7gbfnbqd877wdqrkvgqrjb1jlqkzpg55s";
+    url = "${meta.homepage}/downloads/${name}.src.tar.gz";
+  };
+
+  buildInputs = with llvmPackages; [ clang-unwrapped llvm python2 ];
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = [ "-DIWYU_LLVM_ROOT_PATH=${llvmPackages.clang-unwrapped}" ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    substituteInPlace $out/bin/iwyu_tool.py \
+      --replace "['include-what-you-use']" "['$out/bin/include-what-you-use']"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Analyze #includes in C/C++ source files with clang";
+    longDescription = ''
+      For every symbol (type, function variable, or macro) that you use in
+      foo.cc, either foo.cc or foo.h should #include a .h file that exports the
+      declaration of that symbol.  The main goal of include-what-you-use is to
+      remove superfluous #includes, both by figuring out what #includes are not
+      actually needed for this file (for both .cc and .h files), and by
+      replacing #includes with forward-declares when possible.
+    '';
+    homepage = https://include-what-you-use.org;
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/jdepend/default.nix b/nixpkgs/pkgs/development/tools/analysis/jdepend/default.nix
new file mode 100644
index 000000000000..939ae10c089d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/jdepend/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, ant, jdk, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  name = "jdepend-${version}";
+  version = "2.9.1";
+
+  src = fetchFromGitHub {
+    owner = "clarkware";
+    repo = "jdepend";
+    rev = version;
+    sha256 = "1sxkgj4k4dhg8vb772pvisyzb8x0gwvlfqqir30ma4zvz3rfz60p";
+  };
+
+  nativeBuildInputs = [ ant jdk ];
+  buildPhase = "ant jar";
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share
+    install dist/${name}.jar $out/share
+
+    cat > "$out/bin/jdepend" <<EOF
+    #!${runtimeShell}
+    exec ${jdk.jre}/bin/java -classpath "$out/share/*" "\$@"
+    EOF
+    chmod a+x $out/bin/jdepend
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Traverses Java class file directories and generates design quality metrics for each Java package";
+    homepage = http://www.clarkware.com/software/JDepend.html;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/kcov/default.nix b/nixpkgs/pkgs/development/tools/analysis/kcov/default.nix
new file mode 100644
index 000000000000..af20165d155f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/kcov/default.nix
@@ -0,0 +1,38 @@
+{stdenv, fetchFromGitHub, cmake, pkgconfig, zlib, curl, elfutils, python, libiberty, libopcodes}:
+
+stdenv.mkDerivation rec {
+  name = "kcov-${version}";
+  version = "36";
+
+  src = fetchFromGitHub {
+    owner = "SimonKagstrom";
+    repo = "kcov";
+    rev = "v${version}";
+    sha256 = "1q1mw5mxz041lr6qc2v4280rmx13pg1bx5r3bxz9bzs941r405r3";
+  };
+
+  preConfigure = "patchShebangs src/bin-to-c-source.py";
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  buildInputs = [ zlib curl elfutils python libiberty libopcodes ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Code coverage tester for compiled programs, Python scripts and shell scripts";
+
+    longDescription = ''
+      Kcov is a code coverage tester for compiled programs, Python
+      scripts and shell scripts. It allows collecting code coverage
+      information from executables without special command-line
+      arguments, and continuosly produces output from long-running
+      applications.
+    '';
+
+    homepage = http://simonkagstrom.github.io/kcov/index.html;
+    license = licenses.gpl2;
+
+    maintainers = with maintainers; [ gal_bolle ekleog ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/lcov/default.nix b/nixpkgs/pkgs/development/tools/analysis/lcov/default.nix
new file mode 100644
index 000000000000..06c712588f8f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/lcov/default.nix
@@ -0,0 +1,36 @@
+{stdenv, fetchurl, perl}:
+
+stdenv.mkDerivation rec {
+  name = "lcov-1.14";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ltp/${name}.tar.gz";
+    sha256 = "06h7ixyznf6vz1qvksjgy5f3q2nw9akf6zx59npf0h3l32cmd68l";
+  };
+
+  buildInputs = [ perl ];
+
+  preBuild = ''
+    patchShebangs bin/
+    makeFlagsArray=(PREFIX=$out LCOV_PERL_PATH=$(command -v perl))
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Code coverage tool that enhances GNU gcov";
+
+    longDescription =
+      '' LCOV is an extension of GCOV, a GNU tool which provides information
+         about what parts of a program are actually executed (i.e.,
+         "covered") while running a particular test case.  The extension
+         consists of a set of PERL scripts which build on the textual GCOV
+         output to implement the following enhanced functionality such as
+         HTML output.
+      '';
+
+    homepage = http://ltp.sourceforge.net/coverage/lcov.php;
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    maintainers = with maintainers; [ dezgeg ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/makefile2graph/default.nix b/nixpkgs/pkgs/development/tools/analysis/makefile2graph/default.nix
new file mode 100644
index 000000000000..7afa71429a75
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/makefile2graph/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, makeWrapper, bash, gnumake }:
+
+stdenv.mkDerivation rec {
+  name = "makefile2graph-2018-01-03";
+
+  src = fetchFromGitHub {
+    owner = "lindenb";
+    repo = "makefile2graph";
+    rev = "61fb95a5ba91c20236f5e4deb11127c34b47091f";
+    sha256 = "07hq40bl48i8ka35fcciqcafpd8k9rby1wf4vl2p53v0665xaghr";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  fixupPhase = ''
+    substituteInPlace $out/bin/makefile2graph \
+      --replace '/bin/sh' ${bash}/bin/bash \
+      --replace 'make2graph' "$out/bin/make2graph"
+    wrapProgram $out/bin/makefile2graph \
+      --set PATH ${stdenv.lib.makeBinPath [ gnumake ]}
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/lindenb/makefile2graph";
+    description = "Creates a graph of dependencies from GNU-Make; Output is a graphiz-dot file or a Gexf-XML file";
+    maintainers = with maintainers; [ cmcdragonkai ];
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/massif-visualizer/default.nix b/nixpkgs/pkgs/development/tools/analysis/massif-visualizer/default.nix
new file mode 100644
index 000000000000..a9793e048839
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/massif-visualizer/default.nix
@@ -0,0 +1,30 @@
+{
+  mkDerivation, lib, fetchurl,
+  extra-cmake-modules, shared-mime-info,
+  qtsvg, qtxmlpatterns, karchive, kconfig, kcoreaddons, kparts, kio, ki18n,
+  kdiagram, kgraphviewer
+}:
+
+mkDerivation rec {
+  name = "massif-visualizer-${version}";
+  version = "0.7.0";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/massif-visualizer/${version}/src/${name}.tar.xz";
+    sha256 = "0v8z6r9gngzckvqyxjm9kp7hilwfqibyk2f9vag9l98ar0iwr97q";
+  };
+
+  nativeBuildInputs = [ extra-cmake-modules shared-mime-info ];
+
+  buildInputs = [
+    qtsvg qtxmlpatterns karchive kconfig kcoreaddons kparts kio ki18n
+    kdiagram kgraphviewer
+  ];
+
+  meta = with lib; {
+    description = "Tool that visualizes massif data generated by valgrind";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lethalman zraexy ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/panopticon/default.nix b/nixpkgs/pkgs/development/tools/analysis/panopticon/default.nix
new file mode 100644
index 000000000000..300feb9a41b5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/panopticon/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchFromGitHub, rustPlatform, qt5, git, cmake
+, pkgconfig, makeWrapper }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "panopticon";
+  version = "unstable-20171202";
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "das-labor";
+    repo = pname;
+    rev = "33ffec0d6d379d51b38d6ea00d040f54b1356ae4";
+    sha256 = "1zv87nqhrzsxx0m891df4vagzssj3kblfv9yp7j96dw0vn9950qa";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ makeWrapper ];
+  propagatedBuildInputs = with qt5; [
+     qt5.qtbase
+     qtdeclarative
+     qtsvg
+     qtquickcontrols2
+     qtgraphicaleffects
+     pkgconfig
+     git
+  ];
+
+  cargoSha256 = "1fsxd7yzb38h1d52yyz7kj1v0riycjydb1b1bn1zkhgwm5sm2kbs";
+  doCheck = false;
+
+  postInstall = ''
+    mkdir -p $out/share/${pname} $out/bin
+    cp -R qml $out/share/${pname}
+    mv $out/bin/${pname} $out/share/${pname}
+    chmod +x $out/share/${pname}
+    makeWrapper $out/share/${pname}/${pname} $out/bin/${pname}
+     '';
+
+  meta = with stdenv.lib; {
+    description = "A libre cross-platform disassembler";
+    longDescription = ''
+      Panopticon is a cross platform disassembler for reverse
+      engineering written in Rust. It can disassemble AMD64,
+      x86, AVR and MOS 6502 instruction sets and open ELF files.
+      Panopticon comes with Qt GUI for browsing and annotating
+      control flow graphs.
+    '';
+    license = with licenses; [ gpl3 ];
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/pev/default.nix b/nixpkgs/pkgs/development/tools/analysis/pev/default.nix
new file mode 100644
index 000000000000..8e8f438b5e1a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/pev/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, openssl, fetchFromGitHub }:
+stdenv.mkDerivation {
+  name = "pev-unstable-2018-07-22";
+  buildInputs = [ openssl ];
+  src = fetchFromGitHub {
+    owner = "merces";
+    repo = "pev";
+    rev = "aa4ef7f"; 
+    sha256 = "00a3g486343lhqcsf4vrdy5xif6v3cgcf2y8yp5b96x15c0wid36"; 
+    fetchSubmodules = true;
+  };
+
+  makeFlags = [ "prefix=$(out)" ];
+  installFlags = [ "prefix=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "pev is a full-featured, open source, multiplatform command line toolkit to work with PE (Portable Executables) binaries.";
+    homepage = "http://pev.sourceforge.net/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.jeschli ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/pmd/default.nix b/nixpkgs/pkgs/development/tools/analysis/pmd/default.nix
new file mode 100644
index 000000000000..2ab9f12c7796
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/pmd/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "pmd";
+  version = "6.15.0";
+
+  nativeBuildInputs = [ unzip ];
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pmd/pmd-bin-${version}.zip";
+    sha256 = "0im64lg18bv764i14g3p42dzd7kqq9j5an8dkz1vanypb1jf5j3s";
+  };
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out
+    cp -R {bin,lib} $out
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An extensible cross-language static code analyzer";
+    homepage = "https://pmd.github.io/";
+    changelog = "https://pmd.github.io/pmd-${version}/pmd_release_notes.html";
+    platforms = platforms.unix;
+    license = with licenses; [ bsdOriginal asl20 lgpl3Plus ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/qcachegrind/default.nix b/nixpkgs/pkgs/development/tools/analysis/qcachegrind/default.nix
new file mode 100644
index 000000000000..fb0f7414841c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/qcachegrind/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, qmake, qtbase, perl, python, php, kcachegrind }:
+
+let
+  name = stdenv.lib.replaceStrings ["kcachegrind"] ["qcachegrind"] kcachegrind.name;
+
+in stdenv.mkDerivation rec {
+  inherit name;
+
+  src = kcachegrind.src;
+
+  buildInputs = [ qtbase perl python php ];
+
+  nativeBuildInputs = [ qmake ];
+
+  postInstall = ''
+     mkdir -p $out/bin
+     cp -p converters/dprof2calltree $out/bin/dprof2calltree
+     cp -p converters/hotshot2calltree.cmake $out/bin/hotshot2calltree
+     cp -p converters/memprof2calltree $out/bin/memprof2calltree
+     cp -p converters/op2calltree $out/bin/op2calltree
+     cp -p converters/pprof2calltree $out/bin/pprof2calltree
+     chmod -R +x $out/bin/
+  '' + (if stdenv.isDarwin then ''
+    mkdir -p $out/Applications
+    cp cgview/cgview.app/Contents/MacOS/cgview $out/bin
+    cp -a qcachegrind/qcachegrind.app $out/Applications
+  '' else ''
+    install qcachegrind/qcachegrind cgview/cgview -t "$out/bin"
+    install -Dm644 qcachegrind/qcachegrind.desktop -t "$out/share/applications"
+    install -Dm644 kcachegrind/32-apps-kcachegrind.png "$out/share/icons/hicolor/32x32/apps/kcachegrind.png"
+    install -Dm644 kcachegrind/48-apps-kcachegrind.png "$out/share/icons/hicolor/48x48/apps/kcachegrind.png"
+  '');
+
+  meta = with stdenv.lib; {
+    description = "A Qt GUI to visualize profiling data";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ periklis ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/radare2/cutter.nix b/nixpkgs/pkgs/development/tools/analysis/radare2/cutter.nix
new file mode 100644
index 000000000000..c92cdb19ae28
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/radare2/cutter.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchFromGitHub
+# nativeBuildInputs
+, qmake, pkgconfig
+# Qt
+, qtbase, qtsvg, qtwebengine
+# buildInputs
+, r2-for-cutter
+, python3 }:
+
+let
+  version = "1.8.0";
+in
+stdenv.mkDerivation rec {
+  name = "radare2-cutter-${version}";
+
+  src = fetchFromGitHub {
+    owner = "radareorg";
+    repo = "cutter";
+    rev = "v${version}";
+    sha256 = "1z3lpzl7k3qn5xabi0qxl83rdbwi00h45blnljx8yfw0am5vfphc";
+  };
+
+  postUnpack = "export sourceRoot=$sourceRoot/src";
+
+  # Remove this "very helpful" helper file intended for discovering r2,
+  # as it's a doozy of harddcoded paths and unexpected behavior.
+  # Happily Nix has everything all set so we don't need it,
+  # other than as basis for the qmakeFlags set below.
+  postPatch = ''
+    substituteInPlace Cutter.pro \
+      --replace "include(lib_radare2.pri)" ""
+  '';
+
+  nativeBuildInputs = [ qmake pkgconfig ];
+  buildInputs = [ qtbase qtsvg qtwebengine r2-for-cutter python3 ];
+
+  qmakeFlags = [
+    "CONFIG+=link_pkgconfig"
+    "PKGCONFIG+=r_core"
+    # Leaving this enabled doesn't break build but generates errors
+    # at runtime (to console) about being unable to load needed bits.
+    # Disable until can be looked at.
+    "CUTTER_ENABLE_JUPYTER=false"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "A Qt and C++ GUI for radare2 reverse engineering framework";
+    homepage = src.meta.homepage;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ mic92 dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/radare2/default.nix b/nixpkgs/pkgs/development/tools/analysis/radare2/default.nix
new file mode 100644
index 000000000000..5a3ee3d8cbdd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/radare2/default.nix
@@ -0,0 +1,133 @@
+{stdenv, fetchFromGitHub
+, buildPackages
+, callPackage
+, pkgconfig
+, libusb, readline, libewf, perl, zlib, openssl
+, libuv, file, libzip, xxHash
+, gtk2 ? null, vte ? null, gtkdialog ? null
+, python3 ? null
+, ruby ? null
+, lua ? null
+, useX11 ? false
+, rubyBindings ? false
+, pythonBindings ? false
+, luaBindings ? false
+}:
+
+assert useX11 -> (gtk2 != null && vte != null && gtkdialog != null);
+assert rubyBindings -> ruby != null;
+assert pythonBindings -> python3 != null;
+
+
+let
+  inherit (stdenv.lib) optional;
+
+  generic = {
+    version_commit,
+    gittap,
+    gittip,
+    rev,
+    version,
+    sha256,
+    cs_ver,
+    cs_sha256
+  }:
+    stdenv.mkDerivation rec {
+      name = "radare2-${version}";
+
+      src = fetchFromGitHub {
+        owner = "radare";
+        repo = "radare2";
+        inherit rev sha256;
+      };
+
+      postPatch = let
+        capstone = fetchFromGitHub {
+          owner = "aquynh";
+          repo = "capstone";
+          # version from $sourceRoot/shlr/Makefile
+          rev = cs_ver;
+          sha256 = cs_sha256;
+        };
+      in ''
+        mkdir -p build/shlr
+        cp -r ${capstone} capstone-${cs_ver}
+        chmod -R +w capstone-${cs_ver}
+        # radare 3.3 compat for radare2-cutter
+        (cd shlr && ln -s ../capstone-${cs_ver} capstone)
+        tar -czvf shlr/capstone-${cs_ver}.tar.gz capstone-${cs_ver}
+        # necessary because they broke the offline-build:
+        # https://github.com/radare/radare2/commit/6290e4ff4cc167e1f2c28ab924e9b99783fb1b38#diff-a44d840c10f1f1feaf401917ae4ccd54R258
+        # https://github.com/radare/radare2/issues/13087#issuecomment-465159716
+        curl() { true; }
+        export -f curl
+      '';
+
+      postInstall = ''
+        install -D -m755 $src/binr/r2pm/r2pm $out/bin/r2pm
+      '';
+
+      WITHOUT_PULL="1";
+      makeFlags = [
+        "GITTAP=${gittap}"
+        "GITTIP=${gittip}"
+        "RANLIB=${stdenv.cc.bintools.bintools}/bin/${stdenv.cc.bintools.targetPrefix}ranlib"
+      ];
+      configureFlags = [
+        "--with-sysmagic"
+        "--with-syszip"
+        "--with-sysxxhash"
+        "--with-openssl"
+      ];
+
+      enableParallelBuilding = true;
+      depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+      nativeBuildInputs = [ pkgconfig ];
+      buildInputs = [ file readline libusb libewf perl zlib openssl libuv ]
+        ++ optional useX11 [ gtkdialog vte gtk2 ]
+        ++ optional rubyBindings [ ruby ]
+        ++ optional pythonBindings [ python3 ]
+        ++ optional luaBindings [ lua ];
+
+      propagatedBuildInputs = [
+        # radare2 exposes r_lib which depends on these libraries
+        file # for its list of magic numbers (`libmagic`)
+        libzip
+        xxHash
+      ];
+
+      meta = {
+        description = "unix-like reverse engineering framework and commandline tools";
+        homepage = http://radare.org/;
+        license = stdenv.lib.licenses.gpl2Plus;
+        maintainers = with stdenv.lib.maintainers; [ raskin makefu mic92 ];
+        platforms = with stdenv.lib.platforms; linux;
+        inherit version;
+      };
+  };
+in {
+  #<generated>
+  # DO NOT EDIT! Automatically generated by ./update.py
+  radare2 = generic {
+    version_commit = "21707";
+    gittap = "3.5.0";
+    gittip = "75cfab37c6cfd0caffb9a90a949f5e60282bbd6c";
+    rev = "3.5.0";
+    version = "3.5.0";
+    sha256 = "03zm74a4vpip4pzj1s3gm2bdihw0iz47w8sxbhjf74074x1ylpzv";
+    cs_ver = "4.0.1";
+    cs_sha256 = "0ijwxxk71nr9z91yxw20zfj4bbsbrgvixps5c7cpj163xlzlwba6";
+  };
+  r2-for-cutter = generic {
+    version_commit = "21276";
+    gittap = "3.3.0";
+    gittip = "5a9127d2599c8ff61d8544be7d4c9384402e94a3";
+    rev = "5a9127d2599c8ff61d8544be7d4c9384402e94a3";
+    version = "2019-02-19";
+    sha256 = "11ap3icr8w0y49lq5dxch2h589qdmwf3qv9lsdyfsz4l0mjm49ri";
+    cs_ver = "4.0.1";
+    cs_sha256 = "0ijwxxk71nr9z91yxw20zfj4bbsbrgvixps5c7cpj163xlzlwba6";
+  };
+  #</generated>
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/radare2/update.py b/nixpkgs/pkgs/development/tools/analysis/radare2/update.py
new file mode 100755
index 000000000000..794581bca7ad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/radare2/update.py
@@ -0,0 +1,141 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -p nix -p python3 -p git -i python
+# USAGE - just run the script: ./update.py
+# When editing this file, make also sure it passes the mypy typecheck
+# and is formatted with black.
+import fileinput
+import json
+import re
+import subprocess
+import tempfile
+import urllib.request
+from datetime import datetime
+from pathlib import Path
+from typing import Dict
+
+SCRIPT_DIR = Path(__file__).parent.resolve()
+
+
+def sh(*args: str) -> str:
+    out = subprocess.check_output(list(args))
+    return out.strip().decode("utf-8")
+
+
+def prefetch_github(owner: str, repo: str, ref: str) -> str:
+    return sh(
+        "nix-prefetch-url",
+        "--unpack",
+        f"https://github.com/{owner}/{repo}/archive/{ref}.tar.gz",
+    )
+
+
+def get_radare2_rev() -> str:
+    url = "https://api.github.com/repos/radare/radare2/releases/latest"
+    with urllib.request.urlopen(url) as response:
+        release = json.load(response)  # type: ignore
+    return release["tag_name"]
+
+
+def get_cutter_version() -> str:
+    version_expr = """
+(with import <nixpkgs> {}; (builtins.parseDrvName (qt5.callPackage <radare2/cutter.nix> {}).name).version)
+"""
+    return sh("nix", "eval", "--raw", version_expr.strip(), "-I", "radare2={0}".format(SCRIPT_DIR))
+
+
+def get_r2_cutter_rev() -> str:
+    version = get_cutter_version()
+    url = f"https://api.github.com/repos/radareorg/cutter/contents?ref=v{version}"
+    with urllib.request.urlopen(url) as response:
+        data = json.load(response)  # type: ignore
+    for entry in data:
+        if entry["name"] == "radare2":
+            return entry["sha"]
+    raise Exception("no radare2 submodule found in github.com/radareorg/cutter")
+
+
+def git(dirname: str, *args: str) -> str:
+    return sh("git", "-C", dirname, *args)
+
+
+def get_repo_info(dirname: str, rev: str) -> Dict[str, str]:
+    sha256 = prefetch_github("radare", "radare2", rev)
+
+    cs_ver = None
+    with open(Path(dirname).joinpath("shlr", "Makefile")) as makefile:
+        for l in makefile:
+            match = re.match("CS_VER=(\S+)", l)
+            if match:
+                cs_ver = match.group(1)
+    assert cs_ver is not None
+
+    cs_sha256 = prefetch_github("aquynh", "capstone", cs_ver)
+
+    return dict(
+        rev=rev,
+        sha256=sha256,
+        version_commit=git(dirname, "rev-list", "--all", "--count"),
+        gittap=git(dirname, "describe", "--tags", "--match", "[0-9]*"),
+        gittip=git(dirname, "rev-parse", "HEAD"),
+        cs_ver=cs_ver,
+        cs_sha256=cs_sha256,
+    )
+
+
+def write_package_expr(version: str, info: Dict[str, str]) -> str:
+    return f"""generic {{
+    version_commit = "{info["version_commit"]}";
+    gittap = "{info["gittap"]}";
+    gittip = "{info["gittip"]}";
+    rev = "{info["rev"]}";
+    version = "{version}";
+    sha256 = "{info["sha256"]}";
+    cs_ver = "{info["cs_ver"]}";
+    cs_sha256 = "{info["cs_sha256"]}";
+  }}"""
+
+
+def main() -> None:
+    radare2_rev = get_radare2_rev()
+    r2_cutter_rev = get_r2_cutter_rev()
+
+    with tempfile.TemporaryDirectory() as dirname:
+        git(
+            dirname,
+            "clone",
+            "--branch",
+            radare2_rev,
+            "https://github.com/radare/radare2",
+            ".",
+        )
+        nix_file = str(SCRIPT_DIR.joinpath("default.nix"))
+
+        radare2_info = get_repo_info(dirname, radare2_rev)
+
+        git(dirname, "checkout", r2_cutter_rev)
+
+        timestamp = git(dirname, "log", "-n1", "--format=%at")
+        r2_cutter_version = datetime.fromtimestamp(int(timestamp)).strftime("%Y-%m-%d")
+
+        r2_cutter_info = get_repo_info(dirname, r2_cutter_rev)
+
+        in_block = False
+        with fileinput.FileInput(nix_file, inplace=True) as f:
+            for l in f:
+                if "#<generated>" in l:
+                    in_block = True
+                    print(
+                        f"""  #<generated>
+  # DO NOT EDIT! Automatically generated by ./update.py
+  radare2 = {write_package_expr(radare2_rev, radare2_info)};
+  r2-for-cutter = {write_package_expr(r2_cutter_version, r2_cutter_info)};
+  #</generated>"""
+                    )
+                elif "#</generated>" in l:
+                    in_block = False
+                elif not in_block:
+                    print(l, end="")
+
+
+if __name__ == "__main__":
+    main()
diff --git a/nixpkgs/pkgs/development/tools/analysis/randoop/default.nix b/nixpkgs/pkgs/development/tools/analysis/randoop/default.nix
new file mode 100644
index 000000000000..4fc85c301665
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/randoop/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  version = "3.1.5";
+  name = "randoop-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/randoop/randoop/releases/download/v${version}/${name}.zip";
+    sha256 = "13zspyi9fgnqc90qfqqnj0hb7869l0aixv0vwgj8m4m1hggpadlx";
+  };
+
+  buildInputs = [ unzip ];
+
+  installPhase = ''
+    mkdir -p $out/lib $out/doc
+
+    cp -R *.jar $out/lib
+    cp README.txt $out/doc
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Automatic test generation for Java";
+    homepage = https://randoop.github.io/randoop/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/retdec/default.nix b/nixpkgs/pkgs/development/tools/analysis/retdec/default.nix
new file mode 100644
index 000000000000..fec127178f9e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/retdec/default.nix
@@ -0,0 +1,235 @@
+{ stdenv
+, fetchFromGitHub
+, fetchpatch
+, fetchzip
+, lib
+, callPackage
+, openssl
+, cmake
+, autoconf
+, automake
+, libtool
+, pkgconfig
+, bison
+, flex
+, groff
+, perl
+, python3
+, time
+, upx
+, ncurses
+, libffi
+, libxml2
+, zlib
+, withPEPatterns ? false
+}:
+
+let
+  capstone = fetchFromGitHub {
+    owner = "avast-tl";
+    repo = "capstone";
+    rev = "27c713fe4f6eaf9721785932d850b6291a6073fe";
+    sha256 = "105z1g9q7s6n15qpln9vzhlij7vj6cyc5dqdr05n7wzjvlagwgxc";
+  };
+  elfio = fetchFromGitHub {
+    owner = "avast-tl";
+    repo = "elfio";
+    rev = "998374baace397ea98f3b1d768e81c978b4fba41";
+    sha256 = "09n34rdp0wpm8zy30zx40wkkc4gbv2k3cv181y6c1260rllwk5d1";
+  };
+  keystone = fetchFromGitHub { # only for tests
+    owner = "keystone-engine";
+    repo = "keystone";
+    rev = "d7ba8e378e5284e6384fc9ecd660ed5f6532e922";
+    sha256 = "1yzw3v8xvxh1rysh97y0i8y9svzbglx2zbsqjhrfx18vngh0x58f";
+  };
+  libdwarf = fetchFromGitHub {
+    owner = "avast-tl";
+    repo = "libdwarf";
+    rev = "85465d5e235cc2d2f90d04016d6aca1a452d0e73";
+    sha256 = "11y62r65py8yp57i57a4cymxispimn62by9z4j2g19hngrpsgbki";
+  };
+  llvm = fetchFromGitHub {
+    owner = "avast-tl";
+    repo = "llvm";
+    rev = "725d0cee133c6ab9b95c493f05de3b08016f5c3c";
+    sha256 = "0dzvafmn4qs62w1y9vh0a11clpj6q3hb41aym4izpcyybjndf9bq";
+  };
+  pelib = fetchFromGitHub {
+    owner = "avast-tl";
+    repo = "pelib";
+    rev = "a7004b2e80e4f6dc984f78b821e7b585a586050d";
+    sha256 = "0nyrb3g749lxgcymz1j584xbb1x6rvy1mc700lyn0brznvqsm81n";
+  };
+  rapidjson = fetchFromGitHub {
+    owner = "Tencent";
+    repo = "rapidjson";
+    rev = "v1.1.0";
+    sha256 = "1jixgb8w97l9gdh3inihz7avz7i770gy2j2irvvlyrq3wi41f5ab";
+  };
+  yaracpp = callPackage ./yaracpp.nix {}; # is its own package because it needs a patch
+  yaramod = fetchFromGitHub {
+    owner = "avast-tl";
+    repo = "yaramod";
+    rev = "v2.2.2";
+    sha256 = "0cq9h4h686q9ybamisbl797g6xjy211s3cq83nixkwkigmz48ccp";
+  };
+  jsoncpp = fetchFromGitHub {
+    owner = "open-source-parsers";
+    repo = "jsoncpp";
+    rev = "1.8.4";
+    sha256 = "1z0gj7a6jypkijmpknis04qybs1hkd04d1arr3gy89lnxmp6qzlm";
+  };
+  googletest = fetchFromGitHub { # only for tests
+    owner = "google";
+    repo = "googletest";
+    rev = "83fa0cb17dad47a1d905526dcdddb5b96ed189d2";
+    sha256 = "1c2r0p9v7vz2vasy8bknfb448l6wsvzw35s8hmc5z013z5502mpk";
+  };
+  tinyxml2 = fetchFromGitHub {
+    owner = "leethomason";
+    repo = "tinyxml2";
+    rev = "cc1745b552dd12bb1297a99f82044f83b06729e0";
+    sha256 = "015g8520a0c55gwmv7pfdsgfz2rpdmh3d1nq5n9bd65n35492s3q";
+  };
+
+  retdec-support = let
+    version = "2018-02-08"; # make sure to adjust both hashes (once with withPEPatterns=true and once withPEPatterns=false)
+  in fetchzip {
+    url = "https://github.com/avast-tl/retdec-support/releases/download/${version}/retdec-support_${version}.tar.xz";
+    sha256 = if withPEPatterns then "148i8flbyj1y4kfdyzsz7jsj38k4h97npjxj18h6v4wksd4m4jm7"
+                               else "0ixv9qyqq40pzyqy6v9jf5rxrvivjb0z0zn260nbmb9gk765bacy";
+    stripRoot = false;
+    # Removing PE signatures reduces this from 3.8GB -> 642MB (uncompressed)
+    extraPostFetch = lib.optionalString (!withPEPatterns) ''
+      rm -r "$out/generic/yara_patterns/static-code/pe"
+    '';
+  } // {
+    inherit version; # necessary to check the version against the expected version
+  };
+
+  # patch CMakeLists.txt for a dependency and compare the versions to the ones expected by upstream
+  # this has to be applied for every dependency (which it is in postPatch)
+  patchDep = dep: ''
+    # check if our version of dep is the same version that upstream expects
+    echo "Checking version of ${dep.dep_name}"
+    expected_rev="$( sed -n -e 's|.*URL https://github.com/.*/archive/\(.*\)\.zip.*|\1|p' "deps/${dep.dep_name}/CMakeLists.txt" )"
+    if [ "$expected_rev" != '${dep.rev}' ]; then
+      echo "The ${dep.dep_name} dependency has the wrong version: ${dep.rev} while $expected_rev is expected."
+      exit 1
+    fi
+
+    # patch the CMakeLists.txt file to use our local copy of the dependency instead of fetching it at build time
+    sed -i -e 's|URL .*|URL ${dep}|' "deps/${dep.dep_name}/CMakeLists.txt"
+  '';
+
+in stdenv.mkDerivation rec {
+  name = "retdec-${version}";
+
+  # If you update this you will also need to adjust the versions of the updated dependencies. You can do this by first just updating retdec
+  # itself and trying to build it. The build should fail and tell you which dependencies you have to upgrade to which versions.
+  # I've notified upstream about this problem here:
+  # https://github.com/avast-tl/retdec/issues/412
+  version = "3.2";
+
+  src = fetchFromGitHub {
+    owner = "avast-tl";
+    repo = "retdec";
+    name = "retdec-${version}";
+    rev = "refs/tags/v${version}";
+    sha256 = "0chky656lsddn20bnm3pmz6ix20y4a0y8swwr42hrhi01vkhmzrp";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    autoconf
+    automake
+    libtool
+    pkgconfig
+    bison
+    flex
+    groff
+    perl
+    python3
+  ];
+
+  buildInputs = [
+    openssl
+    ncurses
+    libffi
+    libxml2
+    zlib
+  ];
+
+  cmakeFlags = [
+    "-DRETDEC_TESTS=ON" # build tests
+  ];
+
+  # all dependencies that are normally fetched during build time (the subdirectories of `deps`)
+  # all of these need to be fetched through nix and the CMakeLists files need to be patched not to fetch them themselves
+  external_deps = [
+    (capstone // { dep_name = "capstone"; })
+    (elfio // { dep_name = "elfio"; })
+    (googletest // { dep_name = "googletest"; })
+    (jsoncpp // { dep_name = "jsoncpp"; })
+    (keystone // { dep_name = "keystone"; })
+    (libdwarf // { dep_name = "libdwarf"; })
+    (llvm // { dep_name = "llvm"; })
+    (pelib // { dep_name = "pelib"; })
+    (rapidjson // { dep_name = "rapidjson"; })
+    (tinyxml2 // { dep_name = "tinyxml2"; })
+    (yaracpp // { dep_name = "yaracpp"; })
+    (yaramod // { dep_name = "yaramod"; })
+  ];
+
+  # Use newer yaramod to fix w/bison 3.2+
+  patches = [
+    # 2.1.2 -> 2.2.1
+    (fetchpatch {
+      url = https://github.com/avast-tl/retdec/commit/c9d23da1c6e23c149ed684c6becd3f3828fb4a55.patch;
+      sha256 = "0hdq634f72fihdy10nx2ajbps561w03dfdsy5r35afv9fapla6mv";
+    })
+    # 2.2.1 -> 2.2.2
+    (fetchpatch {
+      url = https://github.com/avast-tl/retdec/commit/fb85f00754b5d13b781385651db557741679721e.patch;
+      sha256 = "0a8mwmwb39pr5ag3q11nv81ncdk51shndqrkm92shqrmdq14va52";
+    })
+  ];
+
+  postPatch = (lib.concatMapStrings patchDep external_deps) + ''
+    # install retdec-support
+    echo "Checking version of retdec-support"
+    expected_version="$( sed -n -e "s|^version = '\(.*\)'$|\1|p" 'cmake/install-share.py' )"
+    if [ "$expected_version" != '${retdec-support.version}' ]; then
+      echo "The retdec-support dependency has the wrong version: ${retdec-support.version} while $expected_version is expected."
+      exit 1
+    fi
+    mkdir -p "$out/share/retdec"
+    cp -r ${retdec-support} "$out/share/retdec/support" # write permission needed during install
+    chmod -R u+w "$out/share/retdec/support"
+    # python file originally responsible for fetching the retdec-support archive to $out/share/retdec
+    # that is not necessary anymore, so empty the file
+    echo > cmake/install-share.py
+
+    # call correct `time` and `upx` programs
+    substituteInPlace scripts/retdec-config.py --replace /usr/bin/time ${time}/bin/time
+    substituteInPlace scripts/retdec-unpacker.py --replace "'upx'" "'${upx}/bin/upx'"
+  '';
+
+  enableParallelBuilding = true;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    ${python3.interpreter} "$out/bin/retdec-tests-runner.py"
+
+    rm -rf $out/bin/__pycache__
+  '';
+
+  meta = with lib; {
+    description = "A retargetable machine-code decompiler based on LLVM";
+    homepage = https://retdec.com;
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill timokau ];
+    platforms = ["x86_64-linux" "i686-linux"];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/retdec/yaracpp.nix b/nixpkgs/pkgs/development/tools/analysis/retdec/yaracpp.nix
new file mode 100644
index 000000000000..cc857b86145f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/retdec/yaracpp.nix
@@ -0,0 +1,49 @@
+{ stdenv
+, fetchFromGitHub
+, coreutils
+}:
+
+let
+  yara = fetchFromGitHub {
+    owner = "avast-tl";
+    repo = "yara";
+    rev = "ea101c5856941f39cad2db3012f2660d1d5c8b65";
+    sha256 = "033ssx2hql5k4pv9si043s3mjq2b748ymjzif8pg6rdwh260faky";
+  };
+in stdenv.mkDerivation rec {
+  # only fetches the yaracpp source patched to work with a local yara clone,
+  # does not build anything
+  name = "yaracpp-src-${version}";
+  version = "2018-10-09";
+  rev = "b92bde0e59e3b75bc445227e04b71105771dee8b"; # as specified in retdec/deps/yaracpp/CMakeLists.txt
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "avast-tl";
+    repo = "yaracpp";
+    sha256 = "0fan7q79j7s3bjmhsd2nw6sqyi14xgikn7mr2p4nj87lick5l4a2";
+  };
+
+  postPatch = ''
+      # check if our version of yara is the same version that upstream expects
+      echo "Checking version of yara"
+      expected_rev="$( sed -n -e 's|.*URL https://github.com/.*/archive/\(.*\)\.zip.*|\1|p' "deps/CMakeLists.txt" )"
+      if [ "$expected_rev" != '${yara.rev}' ]; then
+        echo "The yara dependency has the wrong version: ${yara.rev} while $expected_rev is expected."
+        exit 1
+      fi
+
+      # patch the CMakeLists.txt file to use our local copy of the dependency instead of fetching it at build time
+      sed -i -e "s|URL .*|URL ${yara}|" "deps/CMakeLists.txt"
+
+      # abuse the CONFIGURE_COMMAND to make the source writeable after copying it to the build locatoin (necessary for the build)
+      sed -i -e 's|CONFIGURE_COMMAND ""|CONFIGURE_COMMAND COMMAND ${coreutils}/bin/chmod -R u+w .|' "deps/CMakeLists.txt"
+    '';
+
+  buildPhase = "# do nothing";
+  configurePhase = "# do nothing";
+  installPhase = ''
+    mkdir -p "$out"
+    cp -r * "$out"
+  '';
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/rr/default.nix b/nixpkgs/pkgs/development/tools/analysis/rr/default.nix
new file mode 100644
index 000000000000..cd2fb21209c4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rr/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, fetchFromGitHub, cmake, libpfm, zlib, pkgconfig, python2Packages, which, procps, gdb, capnproto }:
+
+stdenv.mkDerivation rec {
+  version = "5.2.0";
+  name = "rr-${version}";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = "rr";
+    rev = version;
+    sha256 = "19jsnm8n2smalx2z60x9d8f6g4kdm7zghwyjfvwcxnslk1vn9dkc";
+  };
+
+  postPatch = ''
+    substituteInPlace src/Command.cc --replace '_BSD_SOURCE' '_DEFAULT_SOURCE'
+    sed '7i#include <math.h>' -i src/Scheduler.cc
+    patchShebangs .
+  '';
+
+  # TODO: remove this preConfigure hook after 5.2.0 since it is fixed upstream
+  # see https://github.com/mozilla/rr/issues/2269
+  preConfigure = ''substituteInPlace CMakeLists.txt --replace "std=c++11" "std=c++14"'';
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    cmake libpfm zlib python2Packages.python python2Packages.pexpect which procps gdb capnproto
+  ];
+  cmakeFlags = [
+    "-DCMAKE_C_FLAGS_RELEASE:STRING="
+    "-DCMAKE_CXX_FLAGS_RELEASE:STRING="
+    "-Ddisable32bit=ON"
+  ];
+
+  # we turn on additional warnings due to hardening
+  NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  hardeningDisable = [ "fortify" ];
+
+  enableParallelBuilding = true;
+
+  # FIXME
+  #doCheck = true;
+
+  preCheck = "export HOME=$TMPDIR";
+
+  meta = {
+    homepage = https://rr-project.org/;
+    description = "Records nondeterministic executions and debugs them deterministically";
+    longDescription = ''
+      rr aspires to be your primary debugging tool, replacing -- well,
+      enhancing -- gdb. You record a failure once, then debug the
+      recording, deterministically, as many times as you want. Every
+      time the same execution is replayed.
+    '';
+
+    license = with stdenv.lib.licenses; [ mit bsd2 ];
+    maintainers = with stdenv.lib.maintainers; [ pierron thoughtpolice ];
+    platforms = stdenv.lib.platforms.x86;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/smatch/default.nix b/nixpkgs/pkgs/development/tools/analysis/smatch/default.nix
new file mode 100644
index 000000000000..9dc1e2db8c09
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/smatch/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchgit, sqlite, pkgconfig, perl
+, buildllvmsparse ? true
+, buildc2xml ? true
+, llvm ? null, libxml2 ? null
+}:
+
+assert buildllvmsparse -> llvm != null;
+assert buildc2xml -> libxml2 != null;
+
+stdenv.mkDerivation {
+  name = "smatch-20120924";
+
+  src = fetchgit {
+    url = git://repo.or.cz/smatch.git;
+    rev = "23656e3e578b700cbf96d043f039e6341a3ba5b9";
+    sha256 = "0r43qi6vryqg450fj73yjwbb7gzcgx64rhrhb3r1m6a252srijiy";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [sqlite perl]
+   ++ stdenv.lib.optional buildllvmsparse llvm
+   ++ stdenv.lib.optional buildc2xml libxml2;
+
+  preBuild =
+    '' sed -i Makefile \
+           -e "s|^PREFIX=.*|PREFIX = $out|g"
+    '';
+
+  meta = {
+    description = "A semantic analysis tool for C";
+    homepage = http://smatch.sourceforge.net/;
+    license = stdenv.lib.licenses.free; /* OSL, see http://www.opensource.org */
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/snowman/default.nix b/nixpkgs/pkgs/development/tools/analysis/snowman/default.nix
new file mode 100644
index 000000000000..e965acc746cc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/snowman/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, cmake, boost, qtbase }:
+
+stdenv.mkDerivation rec {
+  name = "snowman-${version}";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "yegord";
+    repo = "snowman";
+    rev = "v${version}";
+    sha256 = "1mrmhj2nddi0d47c266vsg5vbapbqbcpj5ld4v1qcwnnk6z2zn0j";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ boost qtbase ];
+
+  postUnpack = ''
+    export sourceRoot=$sourceRoot/src
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Native code to C/C++ decompiler";
+    homepage = "http://derevenets.com/";
+
+    # https://github.com/yegord/snowman/blob/master/doc/licenses.asciidoc
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dtzWill ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/sparse/default.nix b/nixpkgs/pkgs/development/tools/analysis/sparse/default.nix
new file mode 100644
index 000000000000..945f6c80af52
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/sparse/default.nix
@@ -0,0 +1,26 @@
+{ fetchurl, stdenv, pkgconfig, libxml2, llvm }:
+
+stdenv.mkDerivation rec {
+  name = "sparse-0.5.0";
+
+  src = fetchurl {
+    url = "mirror://kernel/software/devel/sparse/dist/${name}.tar.xz";
+    sha256 = "1mc86jc5xdrdmv17nqj2cam2yqygnj6ar1iqkwsx2y37ij8wy7wj";
+  };
+
+  preConfigure = ''
+    sed -i Makefile -e "s|^PREFIX=.*$|PREFIX=$out|g"
+  '';
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libxml2 llvm ];
+  doCheck = true;
+
+  meta = {
+    description = "Semantic parser for C";
+    homepage    = "https://git.kernel.org/cgit/devel/sparse/sparse.git/";
+    license     = stdenv.lib.licenses.mit;
+    platforms   = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/spin/default.nix b/nixpkgs/pkgs/development/tools/analysis/spin/default.nix
new file mode 100644
index 000000000000..fbb7eca0ef51
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/spin/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, lib, fetchurl, makeWrapper, yacc, gcc
+, withISpin ? true, tk, swarm, graphviz }:
+
+let
+  binPath = stdenv.lib.makeBinPath [ gcc ];
+  ibinPath = stdenv.lib.makeBinPath [ gcc tk swarm graphviz tk ];
+
+in stdenv.mkDerivation rec {
+  name = "spin-${version}";
+  version = "6.4.9";
+  url-version = stdenv.lib.replaceChars ["."] [""] version;
+
+  src = fetchurl {
+    # The homepage is behind CloudFlare anti-DDoS protection, which blocks cURL.
+    # Dropbox mirror from developers:
+    # https://www.dropbox.com/sh/fgzipzp4wpo3qc1/AADZPqS4aoR-pjNF6OQXRLQHa
+    # (note that this URL doesn't work aross versions and hash should come from official site)
+    url = "https://www.dropbox.com/sh/fgzipzp4wpo3qc1/AABtxFePMJmPxsxSvU5cpxh8a/spin${url-version}.tar.gz?raw=1";
+    sha256 = "07b7wk3qyfnp4pgwicqd33l7i1krzyihx0cf9zkv81ywaklf5vll";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ yacc ];
+
+  sourceRoot = "Spin/Src${version}";
+
+  installPhase = ''
+    install -Dm644 ../Man/spin.1 $out/share/man/man1/spin.1
+
+    install -Dm755 spin $out/bin/spin
+    wrapProgram $out/bin/spin \
+      --prefix PATH : ${binPath}
+  '' + lib.optionalString withISpin ''
+    install -Dm755 ../iSpin/ispin.tcl $out/bin/ispin
+    wrapProgram $out/bin/ispin \
+      --prefix PATH ':' "$out/bin:${ibinPath}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Formal verification tool for distributed software systems";
+    homepage = http://spinroot.com/;
+    license = licenses.free;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/splint/darwin.patch b/nixpkgs/pkgs/development/tools/analysis/splint/darwin.patch
new file mode 100644
index 000000000000..8c435707571d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/splint/darwin.patch
@@ -0,0 +1,13 @@
+diff --git a/src/osd.c b/src/osd.c
+index ebe214a..4ba81d5 100644
+--- a/src/osd.c
++++ b/src/osd.c
+@@ -516,7 +516,7 @@ osd_getPid ()
+ # if defined (WIN32) || defined (OS2) && defined (__IBMC__)
+   int pid = _getpid ();
+ # else
+-  __pid_t pid = getpid ();
++  pid_t pid = getpid ();
+ # endif
+ 
+   return (int) pid;
diff --git a/nixpkgs/pkgs/development/tools/analysis/splint/default.nix b/nixpkgs/pkgs/development/tools/analysis/splint/default.nix
new file mode 100644
index 000000000000..57a83e54d705
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/splint/default.nix
@@ -0,0 +1,32 @@
+{ fetchurl, stdenv, flex }:
+
+stdenv.mkDerivation rec {
+  name = "splint-3.1.2";
+
+  src = fetchurl {
+    url = "http://www.splint.org/downloads/${name}.src.tgz";
+    sha256 = "02pv8kscsrkrzip9r08pfs9xs98q74c52mlxzbii6cv6vx1vd3f7";
+  };
+
+  patches = [ ./tmpdir.patch ] ++ stdenv.lib.optional stdenv.isDarwin ./darwin.patch;
+
+  buildInputs = [ flex ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://www.splint.org/;
+    description = "Annotation-assisted lightweight static analyzer for C";
+
+    longDescription = ''
+      Splint is a tool for statically checking C programs for security
+      vulnerabilities and coding mistakes.  With minimal effort, Splint
+      can be used as a better lint.  If additional effort is invested
+      adding annotations to programs, Splint can perform stronger
+      checking than can be done by any standard lint.
+    '';
+
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/splint/tmpdir.patch b/nixpkgs/pkgs/development/tools/analysis/splint/tmpdir.patch
new file mode 100644
index 000000000000..01402ce943bc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/splint/tmpdir.patch
@@ -0,0 +1,16 @@
+Have Splint honor $TMPDIR.
+
+--- splint-3.1.2/src/context.c	2004-07-31 21:04:26.000000000 +0200
++++ splint-3.1.2/src/context.c	2008-07-11 10:55:16.000000000 +0200
+@@ -801,7 +801,10 @@ context_resetAllFlags (void) 
+                 val = cstring_makeLiteral (env != NULL ? env : DEFAULT_TMPDIR);
+ 	      }
+ # else
+-	      val = cstring_makeLiteral (DEFAULT_TMPDIR);
++	      {
++		char *env = getenv ("TMPDIR");
++		val = cstring_makeLiteral (env != NULL ? env : DEFAULT_TMPDIR);
++	      }
+ # endif /* !defined(OS2) && !defined(MSDOS) */
+ 
+ 	      break;
diff --git a/nixpkgs/pkgs/development/tools/analysis/swarm/default.nix b/nixpkgs/pkgs/development/tools/analysis/swarm/default.nix
new file mode 100644
index 000000000000..86e4d6ef5f69
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/swarm/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "swarm-2019-03-11";
+
+  src = fetchFromGitHub {
+    owner = "nimble-code";
+    repo = "swarm";
+    rev = "4b36ed83c8fbb074f2dc5777fe1c0ab4d73cc7d9";
+    sha256 = "18zwlwsiiksivjpg6agmbmg0zsw2fl9475ss66b6pgcsya2q4afs";
+  };
+
+  installPhase = ''
+    install -Dm755 Src/swarm $out/bin/swarm
+    install -Dm644 Doc/swarm.1 $out/share/man/man1/swarm.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Verification script generator for Spin";
+    homepage = http://spinroot.com/;
+    license = licenses.free;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/uefi-firmware-parser/default.nix b/nixpkgs/pkgs/development/tools/analysis/uefi-firmware-parser/default.nix
new file mode 100644
index 000000000000..0ad042d74def
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/uefi-firmware-parser/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, python3, fetchFromGitHub }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "uefi-firmware-parser";
+  version = "1.8";
+
+  # Version 1.8 is not published on pypi
+  src = fetchFromGitHub {
+    owner = "theopolis";
+    repo = "uefi-firmware-parser";
+    rev = "v${version}";
+    sha256 = "1yn9vi91j1yxkn0icdnjhgl0qrqqkzyhccj39af4f19q1gdw995l";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/theopolis/uefi-firmware-parser/";
+    description = "Parse BIOS/Intel ME/UEFI firmware related structures: Volumes, FileSystems, Files, etc";
+    # MIT + license headers in some files
+    license = with licenses; [
+      mit
+      zlib         # uefi_firmware/me.py
+      bsd2         # uefi_firmware/compression/Tiano/**/*
+      publicDomain # uefi_firmware/compression/LZMA/SDK/C/*
+    ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    maintainers = [ maintainers.samueldr ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/valgrind/coregrind-makefile-race.patch b/nixpkgs/pkgs/development/tools/analysis/valgrind/coregrind-makefile-race.patch
new file mode 100644
index 000000000000..cd09f0edff37
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/valgrind/coregrind-makefile-race.patch
@@ -0,0 +1,41 @@
+From 7820fc268fae4353118b6355f1d4b9e1b7eeebec Mon Sep 17 00:00:00 2001
+From: Philippe Waroquiers <philippe.waroquiers@skynet.be>
+Date: Sun, 28 Oct 2018 18:35:11 +0100
+Subject: [PATCH 1/1] Fix dependencies between libcoregrind*.a and
+ *m_main.o/*m_libcsetjmp.o
+
+The primary and secondary coregrind libraries must be updated
+when m_main.c or m_libcsetjmp.c are changed.
+
+A dependency was missing between libcoregrind*.a and libnolto_coregrind*.a,
+and so tools were not relinked when m_main.c or m_libcsetjmp.c were
+changed.
+---
+ coregrind/Makefile.am | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/coregrind/Makefile.am b/coregrind/Makefile.am
+index 914a270..8de1996 100644
+--- a/coregrind/Makefile.am
++++ b/coregrind/Makefile.am
+@@ -511,6 +511,8 @@ libcoregrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_CFLAGS += \
+ endif
+ libcoregrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_LIBADD = \
+     $(libnolto_coregrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_OBJECTS)
++libcoregrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_DEPENDENCIES = \
++    libnolto_coregrind-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a
+ 
+ if VGCONF_HAVE_PLATFORM_SEC
+ libcoregrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_SOURCES = \
+@@ -531,6 +533,8 @@ libcoregrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_CFLAGS += \
+ endif
+ libcoregrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_LIBADD = \
+     $(libnolto_coregrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_OBJECTS)
++libcoregrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_DEPENDENCIES = \
++    libnolto_coregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
+ endif
+ 
+ #----------------------------------------------------------------------------
+-- 
+2.9.3
+
diff --git a/nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix b/nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix
new file mode 100644
index 000000000000..4def201952a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix
@@ -0,0 +1,92 @@
+{ stdenv, fetchurl, perl, gdb, llvm, cctools, xnu, bootstrap_cmds }:
+
+stdenv.mkDerivation rec {
+  name = "valgrind-3.15.0";
+
+  src = fetchurl {
+    url = "https://sourceware.org/pub/valgrind/${name}.tar.bz2";
+    sha256 = "1ccawxrni8brcvwhygy12iprkvz409hbr9xkk1bd03gnm2fplz21";
+  };
+
+  # Perl is needed for `cg_annotate'.
+  nativeBuildInputs = [ perl ];
+
+  outputs = [ "out" "dev" "man" "doc" ];
+
+  hardeningDisable = [ "stackprotector" ];
+
+  # GDB is needed to provide a sane default for `--db-command'.
+  buildInputs = [ gdb ]  ++ stdenv.lib.optionals (stdenv.isDarwin) [ bootstrap_cmds xnu ];
+
+  enableParallelBuilding = true;
+  separateDebugInfo = stdenv.isLinux;
+
+  preConfigure = stdenv.lib.optionalString stdenv.isDarwin (
+    let OSRELEASE = ''
+      $(awk -F '"' '/#define OSRELEASE/{ print $2 }' \
+      <${xnu}/Library/Frameworks/Kernel.framework/Headers/libkern/version.h)'';
+    in ''
+      echo "Don't derive our xnu version using uname -r."
+      substituteInPlace configure --replace "uname -r" "echo ${OSRELEASE}"
+
+      # Apple's GCC doesn't recognize `-arch' (as of version 4.2.1, build 5666).
+      echo "getting rid of the \`-arch' GCC option..."
+      find -name Makefile\* -exec \
+        sed -i {} -e's/DARWIN\(.*\)-arch [^ ]\+/DARWIN\1/g' \;
+
+      sed -i coregrind/link_tool_exe_darwin.in \
+          -e 's/^my \$archstr = .*/my $archstr = "x86_64";/g'
+
+      echo "substitute hardcoded /usr/include/mach with ${xnu}/include/mach"
+      substituteInPlace coregrind/Makefile.in \
+         --replace /usr/include/mach ${xnu}/include/mach
+
+      substituteInPlace coregrind/m_debuginfo/readmacho.c \
+         --replace /usr/bin/dsymutil ${stdenv.cc.bintools.bintools}/bin/dsymutil
+
+      echo "substitute hardcoded /usr/bin/ld with ${cctools}/bin/ld"
+      substituteInPlace coregrind/link_tool_exe_darwin.in \
+        --replace /usr/bin/ld ${cctools}/bin/ld
+    '');
+
+  # To prevent rebuild on linux when moving darwin's postPatch fixes to preConfigure
+  postPatch = "";
+
+  configureFlags =
+    stdenv.lib.optional (stdenv.hostPlatform.system == "x86_64-linux" || stdenv.hostPlatform.system == "x86_64-darwin") "--enable-only64bit";
+
+  doCheck = false; # fails
+
+  postInstall = ''
+    for i in $out/lib/valgrind/*.supp; do
+      substituteInPlace $i \
+        --replace 'obj:/lib' 'obj:*/lib' \
+        --replace 'obj:/usr/X11R6/lib' 'obj:*/lib' \
+        --replace 'obj:/usr/lib' 'obj:*/lib'
+    done
+  '';
+
+  meta = {
+    homepage = http://www.valgrind.org/;
+    description = "Debugging and profiling tool suite";
+
+    longDescription = ''
+      Valgrind is an award-winning instrumentation framework for
+      building dynamic analysis tools.  There are Valgrind tools that
+      can automatically detect many memory management and threading
+      bugs, and profile your programs in detail.  You can also use
+      Valgrind to build new tools.
+    '';
+
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+    platforms = stdenv.lib.platforms.unix;
+    badPlatforms = [
+      "armv5tel-linux" "armv6l-linux" "armv6m-linux"
+      "sparc-linux" "sparc64-linux"
+      "riscv32-linux" "riscv64-linux"
+      "alpha-linux"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/valkyrie/default.nix b/nixpkgs/pkgs/development/tools/analysis/valkyrie/default.nix
new file mode 100644
index 000000000000..1ecdd9f32ce5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/valkyrie/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, qt4, qmake4Hook }:
+
+stdenv.mkDerivation rec {
+  name = "valkyrie-2.0.0";
+
+  src = fetchurl {
+    url = "http://valgrind.org/downloads/${name}.tar.bz2";
+    sha256 = "0hwvsncf62mdkahwj9c8hpmm94c1wr5jn89370k6rj894kxry2x7";
+  };
+
+  patchPhase = ''
+    sed -i '1s;^;#include <unistd.h>\n;' src/objects/tool_object.cpp
+    sed -i '1s;^;#include <unistd.h>\n;' src/utils/vk_config.cpp
+    sed -i '1s;^;#include <sys/types.h>\n;' src/utils/vk_config.cpp
+    sed -i '1s;^;#include <unistd.h>\n;' src/utils/vk_utils.cpp
+    sed -i '1s;^;#include <sys/types.h>\n;' src/utils/vk_utils.cpp
+  '';
+
+  buildInputs = [ qt4 ];
+
+  nativeBuildInputs = [ qmake4Hook ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.valgrind.org/;
+    description = "Qt4-based GUI for the Valgrind 3.6.x series";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/apktool/default.nix b/nixpkgs/pkgs/development/tools/apktool/default.nix
new file mode 100644
index 000000000000..d9d70f64d73e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/apktool/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, makeWrapper, jre, build-tools }:
+
+stdenv.mkDerivation rec {
+  name = "apktool-${version}";
+  version = "2.4.0";
+
+  src = fetchurl {
+    urls = [
+      "https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_${version}.jar"
+      "https://github.com/iBotPeaches/Apktool/releases/download/v${version}/apktool_${version}.jar"
+    ];
+    sha256 = "1hdwgsw3ggmdzv523wq037kjxhxqp1xq8n8m1qb22vvdj7l1dwd0";
+  };
+
+  phases = [ "installPhase" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  sourceRoot = ".";
+
+  installPhase = ''
+    install -D ${src} "$out/libexec/apktool/apktool.jar"
+    mkdir -p "$out/bin"
+    makeWrapper "${jre}/bin/java" "$out/bin/apktool" \
+        --add-flags "-jar $out/libexec/apktool/apktool.jar" \
+        --prefix PATH : "${builtins.head build-tools}/libexec/android-sdk/build-tools/28.0.3"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A tool for reverse engineering Android apk files";
+    homepage    = https://ibotpeaches.github.io/Apktool/;
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ offline ];
+    platforms   = with platforms; unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/asmfmt/default.nix b/nixpkgs/pkgs/development/tools/asmfmt/default.nix
new file mode 100644
index 000000000000..d2cb7e807b58
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/asmfmt/default.nix
@@ -0,0 +1,37 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+, fetchpatch
+}:
+
+buildGoPackage rec {
+  name = "asmfmt-${version}";
+  version = "1.1";
+
+  goPackagePath = "github.com/klauspost/asmfmt";
+
+  src = fetchFromGitHub {
+    owner = "klauspost";
+    repo = "asmfmt";
+    rev = "v${version}";
+    sha256 = "08mybfizcvck460axakycz9ndzcgwqilp5mmgm4bl8hfrn36mskw";
+  };
+
+  patches = [
+    (fetchpatch {
+      excludes = ["README.md"];
+      url = "https://github.com/klauspost/asmfmt/commit/39a37c8aed8095e0fdfb07f78fc8acbd465d9627.patch";
+      sha256 = "18bc77l87mf0yvqc3adlakxz6wflyqfsc2wrmh9q0nlqghlmnw5k";
+    })
+  ];
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "Go Assembler Formatter";
+    homepage = https://github.com/klauspost/asmfmt;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/asmfmt/deps.nix b/nixpkgs/pkgs/development/tools/asmfmt/deps.nix
new file mode 100644
index 000000000000..0288fc206d49
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/asmfmt/deps.nix
@@ -0,0 +1,20 @@
+[
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "3a10b9bf0a52df7e992a8c3eb712a86d3c896c75";
+      sha256 = "19f3dijcc54jnd7458jab2dgpd0gzccmv2qympd9wi8cc8jpnhws";
+    };
+  }
+  {
+    goPackagePath = "sourcegraph.com/sqs/goreturns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sqs/goreturns";
+      rev = "538ac601451833c7c4449f8431d65d53c1c60e41";
+      sha256 = "0gcplch8zmcgwl6xvcffxg50g3xnf60n7dlqxgn51179qcjr354p";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/asn2quickder/default.nix b/nixpkgs/pkgs/development/tools/asn2quickder/default.nix
new file mode 100644
index 000000000000..e0b9aec9ee15
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/asn2quickder/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, buildPythonApplication, fetchFromGitHub, makeWrapper, cmake
+, pytestrunner, pytest, six, pyparsing, asn1ate }:
+
+buildPythonApplication rec {
+  pname = "asn2quickder";
+  version = "1.2-6";
+
+  src = fetchFromGitHub {
+    sha256 = "00wifjydgmqw2i5vmr049visc3shjqccgzqynkmmhkjhs86ghzr6";
+    rev = "version-${version}";
+    owner = "vanrein";
+    repo = "quick-der";
+  };
+
+  patchPhase = ''
+    patchShebangs ./python/scripts/*
+  '';
+
+  buildInputs = [ makeWrapper cmake ];
+  checkInputs = [ pytestrunner pytest ];
+
+  propagatedBuildInputs = [ pyparsing asn1ate six ];
+
+  meta = with stdenv.lib; {
+    description = "An ASN.1 compiler with a backend for Quick DER";
+    homepage = https://github.com/vanrein/asn2quickder;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ leenaars ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/aws-sam-cli/default.nix b/nixpkgs/pkgs/development/tools/aws-sam-cli/default.nix
new file mode 100644
index 000000000000..c4095a6f9b3c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/aws-sam-cli/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, python
+, fetchFromGitHub
+}:
+
+let
+  py = python.override {
+    packageOverrides = self: super: {
+      click = super.click.overridePythonAttrs (oldAttrs: rec {
+        version = "6.7";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b";
+        };
+      });
+
+      aws-sam-translator = super.aws-sam-translator.overridePythonAttrs (oldAttrs: rec {
+        version = "1.10.0";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "0e1fa094c6791b233f5e73f2f0803ec6e0622f2320ec5a969f0986855221b92b";
+        };
+      });
+    };
+  };
+
+in
+
+with py.pkgs;
+
+buildPythonApplication rec {
+  pname = "aws-sam-cli";
+  version = "0.16.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "2dd68800723c76f52980141ba704e105d77469b6ba465781fbc9120e8121e76c";
+  };
+
+  # Tests are not included in the PyPI package
+  doCheck = false;
+
+  propagatedBuildInputs = [
+    aws-lambda-builders
+    aws-sam-translator
+    chevron
+    click
+    cookiecutter
+    dateparser
+    docker
+    flask
+    idna
+    pathlib2
+    requests
+    serverlessrepo
+    six
+  ];
+
+  postPatch = ''
+    substituteInPlace requirements/base.txt --replace "requests==2.20.1" "requests==2.21.0"
+    substituteInPlace requirements/base.txt --replace "six~=1.11.0" "six~=1.12.0"
+    substituteInPlace requirements/base.txt --replace "PyYAML~=3.12" "PyYAML~=5.1"
+  '';
+
+  meta = with lib; {
+    homepage = https://github.com/awslabs/aws-sam-cli;
+    description = "CLI tool for local development and testing of Serverless applications";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ andreabedini dhkl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/azcopy/default.nix b/nixpkgs/pkgs/development/tools/azcopy/default.nix
new file mode 100644
index 000000000000..2089142a1deb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/azcopy/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, buildGoPackage }:
+
+buildGoPackage rec {
+  name = "azure-storage-azcopy-${version}";
+  version = "10.0.1-pre";
+  revision = "10.0.1";
+  goPackagePath = "github.com/Azure/azure-storage-azcopy";
+
+  goDeps= ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "Azure";
+    repo = "azure-storage-azcopy";
+    rev = revision;
+    sha256 = "0v1qli01nnx81186q1d2556w457qkbwypq6yy89ns52pqg941arp";
+  };
+
+  meta = with stdenv.lib; {
+    maintainers = with maintainers; [ colemickens ];
+    license = licenses.mit;
+    description = "The new Azure Storage data transfer utility - AzCopy v10";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/azcopy/deps.nix b/nixpkgs/pkgs/development/tools/azcopy/deps.nix
new file mode 100644
index 000000000000..cef400200d06
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/azcopy/deps.nix
@@ -0,0 +1,129 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/Azure/azure-pipeline-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/azure-pipeline-go";
+      rev =  "7571e8eb0876932ab505918ff7ed5107773e5ee2";
+      sha256 = "0i8n7jna9prq3zdbj0bsr1ha271lgg9233n71dw8li5qsiyg8bs2";
+    };
+  }
+  {
+    goPackagePath  = "github.com/Azure/azure-storage-blob-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/azure-storage-blob-go";
+      rev =  "197d1c0aea1b9eedbbaee0a1a32bf81e879bde80";
+      sha256 = "0wslfah8x1i5l98ss4wxv47ddxfp8mbc90cnfi81v7qnf0bpjp2g";
+    };
+  }
+  {
+    goPackagePath  = "github.com/Azure/azure-storage-file-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/azure-storage-file-go";
+      rev =  "9227fd295d972e4395fd601e6f48cee2f5cda02b";
+      sha256 = "0sr5iqiddjs2lnma5ixrrdik9zciqqd74priivvpycgi3cyxyxyn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/Azure/go-autorest";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/go-autorest";
+      rev =  "39013ecb48eaf6ced3f4e3e1d95515140ce6b3cf";
+      sha256 = "1cbf1ay68lghr4swy2a0asfcjpzkamvz1cqxpdm6691b76j2x6cm";
+    };
+  }
+  {
+    goPackagePath  = "github.com/JeffreyRichter/enum";
+    fetch = {
+      type = "git";
+      url = "https://github.com/JeffreyRichter/enum";
+      rev =  "2567042f9cda26772f0afe08bab6e5105745f298";
+      sha256 = "1d2sjjlp0r2ynk1fb3sb7dgbqzbq4czipb7ffm9zdmjbz0gp6crr";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dgrijalva/jwt-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgrijalva/jwt-go";
+      rev =  "06ea1031745cb8b3dab3f6a236daf2b0aa468b7e";
+      sha256 = "08m27vlms74pfy5z79w67f9lk9zkx6a9jd68k3c4msxy75ry36mp";
+    };
+  }
+  {
+    goPackagePath  = "github.com/inconshreveable/mousetrap";
+    fetch = {
+      type = "git";
+      url = "https://github.com/inconshreveable/mousetrap";
+      rev =  "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75";
+      sha256 = "1mn0kg48xkd74brf48qf5hzp0bc6g8cf5a77w895rl3qnlpfw152";
+    };
+  }
+  {
+    goPackagePath  = "github.com/jiacfan/keychain";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jiacfan/keychain";
+      rev =  "55285221316b0547171a4258015906e3a4da4721";
+      sha256 = "0nfpmqmj33953awysp1948y6k28cmh4770q0i60jv88k35p10s56";
+    };
+  }
+  {
+    goPackagePath  = "github.com/jiacfan/keyctl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jiacfan/keyctl";
+      rev =  "988d05162bc59cf7789c35af405be8f1599a87a3";
+      sha256 = "1q4svv9z3s3n2x4ff8cyr53g5ln1yfrcmc3bvznhhwq190dhm94c";
+    };
+  }
+  {
+    goPackagePath  = "github.com/kr/pretty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/pretty";
+      rev =  "73f6ac0b30a98e433b289500d779f50c1a6f0712";
+      sha256 = "18m4pwg2abd0j9cn5v3k2ksk9ig4vlwxmlw9rrglanziv9l967qp";
+    };
+  }
+  {
+    goPackagePath  = "github.com/kr/text";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/text";
+      rev =  "e2ffdb16a802fe2bb95e2e35ff34f0e53aeef34f";
+      sha256 = "1gm5bsl01apvc84bw06hasawyqm4q84vx1pm32wr9jnd7a8vjgj1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/cobra";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cobra";
+      rev =  "ef82de70bb3f60c65fb8eebacbb2d122ef517385";
+      sha256 = "1q1nsx05svyv9fv3fy6xv6gs9ffimkyzsfm49flvl3wnvf1ncrkd";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev =  "9a97c102cda95a86cec2345a6f09f55a939babf5";
+      sha256 = "005598piihl3l83a71ahj10cpq9pbhjck4xishx1b4dzc02r9xr2";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/check.v1";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-check/check";
+      rev =  "788fd78401277ebd861206a03c884797c6ec5541";
+      sha256 = "0v3bim0j375z81zrpr5qv42knqs0y2qv2vkjiqi5axvb78slki1a";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/backblaze-b2/default.nix b/nixpkgs/pkgs/development/tools/backblaze-b2/default.nix
new file mode 100644
index 000000000000..831ed1e97ace
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/backblaze-b2/default.nix
@@ -0,0 +1,50 @@
+{ lib, buildPythonApplication, fetchFromGitHub
+, arrow, futures, logfury, requests, six, tqdm
+}:
+
+buildPythonApplication rec {
+  pname = "backblaze-b2";
+  version = "1.3.8";
+
+  src = fetchFromGitHub {
+    owner = "Backblaze";
+    repo = "B2_Command_Line_Tool";
+    rev = "v${version}";
+    sha256 = "1y4z4w6fj92rh9mrjsi0nmnzcmrj5jikarq2vs5qznvjdjm62igw";
+  };
+
+  propagatedBuildInputs = [ arrow futures logfury requests six tqdm ];
+
+  checkPhase = ''
+    python test_b2_command_line.py test
+  '';
+
+  postPatch = ''
+    # b2 uses an upper bound on arrow, because arrow 0.12.1 is not
+    # compatible with Python 2.6:
+    #
+    # https://github.com/crsmithdev/arrow/issues/517
+    #
+    # However, since we use Python 2.7, newer versions of arrow are fine.
+
+    sed -i 's/,<0.12.1//g' requirements.txt
+  '';
+
+  postInstall = ''
+    mv "$out/bin/b2" "$out/bin/backblaze-b2"
+
+    sed 's/^_have b2 \&\&$/_have backblaze-b2 \&\&/'  -i contrib/bash_completion/b2
+    sed 's/^\(complete -F _b2\) b2/\1 backblaze-b2/' -i contrib/bash_completion/b2
+
+    mkdir -p "$out/etc/bash_completion.d"
+    cp contrib/bash_completion/b2 "$out/etc/bash_completion.d/backblaze-b2"
+  '';
+
+  meta = with lib; {
+    description = "Command-line tool for accessing the Backblaze B2 storage service";
+    homepage = https://github.com/Backblaze/B2_Command_Line_Tool;
+    license = licenses.mit;
+    maintainers = with maintainers; [ hrdinka kevincox ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bazel-watcher/default.nix b/nixpkgs/pkgs/development/tools/bazel-watcher/default.nix
new file mode 100644
index 000000000000..c75a053acb27
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bazel-watcher/default.nix
@@ -0,0 +1,75 @@
+{ buildBazelPackage
+, cacert
+, fetchFromGitHub
+, fetchpatch
+, git
+, go
+, python
+, stdenv
+}:
+
+buildBazelPackage rec {
+  name = "bazel-watcher-${version}";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = "bazel-watcher";
+    rev = "v${version}";
+    sha256 = "1gjbv67ydyb0mafpp59qr9n8f8vva2mwhgan6lxxl0i9yfx7qc6p";
+  };
+
+  nativeBuildInputs = [ go git python ];
+
+  bazelTarget = "//ibazel";
+
+  fetchAttrs = {
+    preBuild = ''
+      patchShebangs .
+
+      # tell rules_go to use the Go binary found in the PATH
+      sed -e 's:go_register_toolchains():go_register_toolchains(go_version = "host"):g' -i WORKSPACE
+    '';
+
+    preInstall = ''
+      # Remove the go_sdk (it's just a copy of the go derivation) and all
+      # references to it from the marker files. Bazel does not need to download
+      # this sdk because we have patched the WORKSPACE file to point to the one
+      # currently present in PATH. Without removing the go_sdk from the marker
+      # file, the hash of it will change anytime the Go derivation changes and
+      # that would lead to impurities in the marker files which would result in
+      # a different sha256 for the fetch phase.
+      rm -rf $bazelOut/external/{go_sdk,\@go_sdk.marker}
+      sed -e '/^FILE:@go_sdk.*/d' -i $bazelOut/external/\@*.marker
+
+      # Remove the gazelle tools, they contain go binaries that are built
+      # non-deterministically. As long as the gazelle version matches the tools
+      # should be equivalent.
+      rm -rf $bazelOut/external/{bazel_gazelle_go_repository_tools,\@bazel_gazelle_go_repository_tools.marker}
+      sed -e '/^FILE:@bazel_gazelle_go_repository_tools.*/d' -i $bazelOut/external/\@*.marker
+    '';
+
+    sha256 = "0p6yarz4wlb6h33n4slkczkdkaa93zc9jx55h8wl9vv81ahp0md5";
+  };
+
+  buildAttrs = {
+    preBuild = ''
+      patchShebangs .
+
+      # tell rules_go to use the Go binary found in the PATH
+      sed -e 's:go_register_toolchains():go_register_toolchains(go_version = "host"):g' -i WORKSPACE
+    '';
+
+    installPhase = ''
+      install -Dm755 bazel-bin/ibazel/*_pure_stripped/ibazel $out/bin/ibazel
+    '';
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/bazelbuild/bazel-watcher;
+    description = "Tools for building Bazel targets when source files change.";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bazelisk/default.nix b/nixpkgs/pkgs/development/tools/bazelisk/default.nix
new file mode 100644
index 000000000000..3b4869636399
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bazelisk/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "bazelisk";
+  version = "0.0.4";
+
+  src = fetchFromGitHub {
+    owner = "philwo";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1hi4jmkqy1fjn91q72qlfvm63plz5jqb4hw4c1qv9ddqjgwrmxr3";
+  };
+
+  modSha256 = "1f73j6ryidzi3kfy3rhsqx047vzwvzaqcsl7ykhg87rn2l2s7fdl";
+
+  meta = with stdenv.lib; {
+    description = "A user-friendly launcher for Bazel";
+    homepage = https://github.com/philwo/bazelisk;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ elasticdog ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bloaty/default.nix b/nixpkgs/pkgs/development/tools/bloaty/default.nix
new file mode 100644
index 000000000000..f66c84142648
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bloaty/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, cmake, zlib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  version = "1.0";
+  name = "bloaty-${version}";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "bloaty";
+    rev = "v${version}";
+    sha256 = "0fck83zyh9bwlwdk3fkhv3337g9nii6rzf96gyghmnrsp9rzxs3l";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ zlib ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  installPhase = ''
+    install -Dm755 {.,$out/bin}/bloaty
+  '';
+
+  meta = with stdenv.lib; {
+    description = "a size profiler for binaries";
+    homepage = https://github.com/google/bloaty;
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/boomerang/default.nix b/nixpkgs/pkgs/development/tools/boomerang/default.nix
new file mode 100644
index 000000000000..7b5391725423
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/boomerang/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, cmake, qtbase }:
+
+stdenv.mkDerivation rec {
+  name = "boomerang-${version}";
+  version = "0.4.0-alpha-2018-07-03";
+
+  src = fetchFromGitHub {
+    owner = "ceeac";
+    repo = "boomerang";
+    rev = "377ff2d7db93d892c925e2d3e61aef818371ce7d";
+    sha256 = "1ljbyj3b8xckr1wihyii3h576zgq0q88vli0ylpr3p4jxy5sm57j";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ qtbase ];
+
+  postPatch =
+  # Look in installation directory for required files, not relative to working directory
+  ''
+    substituteInPlace src/boomerang/core/Settings.cpp \
+      --replace "setDataDirectory(\"../share/boomerang\");" \
+                "setDataDirectory(\"$out/share/boomerang\");" \
+      --replace "setPluginDirectory(\"../lib/boomerang/plugins\");" \
+                "setPluginDirectory(\"$out/lib/boomerang/plugins\");"
+  ''
+  # Fixup version:
+  # * don't try to inspect with git
+  #   (even if we kept .git and such it would be "dirty" because of patching)
+  # * use date so version is monotonically increasing moving forward
+  + ''
+    sed -i cmake-scripts/boomerang-version.cmake \
+      -e 's/set(\(PROJECT\|BOOMERANG\)_VERSION ".*")/set(\1_VERSION "${version}")/'
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://boomerang.sourceforge.net/;
+    license = licenses.bsd3;
+    description = "A general, open source, retargetable decompiler";
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/boost-build/default.nix b/nixpkgs/pkgs/development/tools/boost-build/default.nix
new file mode 100644
index 000000000000..89c1b560eaca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/boost-build/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "boost-build-${version}";
+  version = "2016.03";
+
+  src = fetchFromGitHub {
+    owner = "boostorg";
+    repo = "build";
+    rev = version;
+    sha256 = "1qw5marmp7z09nwcjlqrmqdg9b6myfqj3zvfz888x9mbidrmhn6p";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  patchPhase = ''
+    grep -r '/usr/share/boost-build' \
+      | awk '{split($0,a,":"); print a[1];}' \
+      | xargs sed -i "s,/usr/share/boost-build,$out/share/boost-build,"
+  '';
+
+  buildPhase = ''
+    ./bootstrap.sh
+  '';
+
+  installPhase = ''
+    ./b2 install --prefix=$out
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.boost.org/boost-build2/;
+    license = stdenv.lib.licenses.boost;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ivan-tkatchev ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/alibuild/default.nix b/nixpkgs/pkgs/development/tools/build-managers/alibuild/default.nix
new file mode 100644
index 000000000000..68f00be342c3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/alibuild/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, python}:
+
+python.pkgs.buildPythonApplication rec {
+  pname = "alibuild";
+  version = "1.5.4rc3";
+
+  src = python.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "1mnh0h9m96p78b9ln1gbl4lw1mgl16qbyfi9fj2l13p3nxaq1sib";
+  };
+
+  doCheck = false;
+  propagatedBuildInputs = [
+    python.pkgs.requests
+    python.pkgs.pyyaml
+  ];
+
+  meta = with lib; {
+    homepage = "https://alisw.github.io/alibuild/";
+    description = "Build tool for ALICE experiment software";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ktf ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/apache-ant/1.9.nix b/nixpkgs/pkgs/development/tools/build-managers/apache-ant/1.9.nix
new file mode 100644
index 000000000000..8816a005ca0f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/apache-ant/1.9.nix
@@ -0,0 +1,111 @@
+{ fetchurl, stdenv, coreutils, makeWrapper }:
+
+let version = "1.9.6"; in
+
+stdenv.mkDerivation {
+  name = "ant-${version}";
+
+  buildInputs = [ makeWrapper ];
+
+  src = fetchurl {
+    url = "mirror://apache/ant/binaries/apache-ant-${version}-bin.tar.bz2";
+    sha256 = "1cwd5vq175gyicw0hkm8idwa33zxwhf7xlxywaqxcqqdjql0jfx4";
+  };
+
+  contrib = fetchurl {
+    url = mirror://sourceforge/ant-contrib/ant-contrib-1.0b3-bin.tar.bz2;
+    sha256 = "96effcca2581c1ab42a4828c770b48d54852edf9e71cefc9ed2ffd6590571ad1";
+  };
+
+  installPhase =
+    ''
+      mkdir -p $out/bin $out/lib/ant
+      mv * $out/lib/ant/
+
+      # Get rid of the manual (35 MiB).  Maybe we should put this in a
+      # separate output.  Keep the antRun script since it's vanilla sh
+      # and needed for the <exec/> task (but since we set ANT_HOME to
+      # a weird value, we have to move antRun to a weird location).
+      # Get rid of the other Ant scripts since we provide our own.
+      mv $out/lib/ant/bin/antRun $out/bin/
+      rm -rf $out/lib/ant/{manual,bin,WHATSNEW}
+      mkdir $out/lib/ant/bin
+      mv $out/bin/antRun $out/lib/ant/bin/
+
+      # Install ant-contrib.
+      unpackFile $contrib
+      cp -p ant-contrib/ant-contrib-*.jar $out/lib/ant/lib/
+
+      cat >> $out/bin/ant <<EOF
+      #! ${stdenv.shell} -e
+
+      ANT_HOME=$out/lib/ant
+
+      # Find the JDK by looking for javac.  As a fall-back, find the
+      # JRE by looking for java.  The latter allows just the JRE to be
+      # used with (say) ECJ as the compiler.  Finally, allow the GNU
+      # JVM.
+      if [ -z "\$JAVA_HOME" ]; then
+          for i in javac java gij; do
+              if p="\$(type -p \$i)"; then
+                  export JAVA_HOME="\$(${coreutils}/bin/dirname \$(${coreutils}/bin/dirname \$(${coreutils}/bin/readlink -f \$p)))"
+                  break
+              fi
+          done
+          if [ -z "\$JAVA_HOME" ]; then
+              echo "\$0: cannot find the JDK or JRE" >&2
+              exit 1
+          fi
+      fi
+
+      if [ -z \$NIX_JVM ]; then
+          if [ -e \$JAVA_HOME/bin/java ]; then
+              NIX_JVM=\$JAVA_HOME/bin/java
+          elif [ -e \$JAVA_HOME/bin/gij ]; then
+              NIX_JVM=\$JAVA_HOME/bin/gij
+          else
+              NIX_JVM=java
+          fi
+      fi
+
+      LOCALCLASSPATH="\$ANT_HOME/lib/ant-launcher.jar\''${LOCALCLASSPATH:+:}\$LOCALCLASSPATH"
+
+      exec \$NIX_JVM \$NIX_ANT_OPTS \$ANT_OPTS -classpath "\$LOCALCLASSPATH" \
+          -Dant.home=\$ANT_HOME -Dant.library.dir="\$ANT_LIB" \
+          org.apache.tools.ant.launch.Launcher \$NIX_ANT_ARGS \$ANT_ARGS \
+          -cp "\$CLASSPATH" "\$@"
+      EOF
+
+      chmod +x $out/bin/ant
+    ''; # */
+
+  meta = {
+    homepage = http://ant.apache.org/;
+    description = "A Java-based build tool";
+
+    longDescription = ''
+      Apache Ant is a Java-based build tool.  In theory, it is kind of like
+      Make, but without Make's wrinkles.
+
+      Why another build tool when there is already make, gnumake, nmake, jam,
+      and others? Because all those tools have limitations that Ant's
+      original author couldn't live with when developing software across
+      multiple platforms.  Make-like tools are inherently shell-based -- they
+      evaluate a set of dependencies, then execute commands not unlike what
+      you would issue in a shell.  This means that you can easily extend
+      these tools by using or writing any program for the OS that you are
+      working on.  However, this also means that you limit yourself to the
+      OS, or at least the OS type such as Unix, that you are working on.
+
+      Ant is different.  Instead of a model where it is extended with
+      shell-based commands, Ant is extended using Java classes.  Instead of
+      writing shell commands, the configuration files are XML-based, calling
+      out a target tree where various tasks get executed.  Each task is run
+      by an object that implements a particular Task interface.
+    '';
+
+    license = stdenv.lib.licenses.asl20;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/apache-ant/default.nix b/nixpkgs/pkgs/development/tools/build-managers/apache-ant/default.nix
new file mode 100644
index 000000000000..b6c2702485b1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/apache-ant/default.nix
@@ -0,0 +1,111 @@
+{ fetchurl, stdenv, coreutils, makeWrapper }:
+
+let version = "1.10.2"; in
+
+stdenv.mkDerivation {
+  name = "ant-${version}";
+
+  buildInputs = [ makeWrapper ];
+
+  src = fetchurl {
+    url = "mirror://apache/ant/binaries/apache-ant-${version}-bin.tar.bz2";
+    sha256 = "0662qammjvibh9kgkxzadkayfn2r7iwnagbwaw28crqqclrb2rp1";
+  };
+
+  contrib = fetchurl {
+    url = mirror://sourceforge/ant-contrib/ant-contrib-1.0b3-bin.tar.bz2;
+    sha256 = "96effcca2581c1ab42a4828c770b48d54852edf9e71cefc9ed2ffd6590571ad1";
+  };
+
+  installPhase =
+    ''
+      mkdir -p $out/bin $out/lib/ant
+      mv * $out/lib/ant/
+
+      # Get rid of the manual (35 MiB).  Maybe we should put this in a
+      # separate output.  Keep the antRun script since it's vanilla sh
+      # and needed for the <exec/> task (but since we set ANT_HOME to
+      # a weird value, we have to move antRun to a weird location).
+      # Get rid of the other Ant scripts since we provide our own.
+      mv $out/lib/ant/bin/antRun $out/bin/
+      rm -rf $out/lib/ant/{manual,bin,WHATSNEW}
+      mkdir $out/lib/ant/bin
+      mv $out/bin/antRun $out/lib/ant/bin/
+
+      # Install ant-contrib.
+      unpackFile $contrib
+      cp -p ant-contrib/ant-contrib-*.jar $out/lib/ant/lib/
+
+      cat >> $out/bin/ant <<EOF
+      #! ${stdenv.shell} -e
+
+      ANT_HOME=$out/lib/ant
+
+      # Find the JDK by looking for javac.  As a fall-back, find the
+      # JRE by looking for java.  The latter allows just the JRE to be
+      # used with (say) ECJ as the compiler.  Finally, allow the GNU
+      # JVM.
+      if [ -z "\$JAVA_HOME" ]; then
+          for i in javac java gij; do
+              if p="\$(type -p \$i)"; then
+                  export JAVA_HOME="\$(${coreutils}/bin/dirname \$(${coreutils}/bin/dirname \$(${coreutils}/bin/readlink -f \$p)))"
+                  break
+              fi
+          done
+          if [ -z "\$JAVA_HOME" ]; then
+              echo "\$0: cannot find the JDK or JRE" >&2
+              exit 1
+          fi
+      fi
+
+      if [ -z \$NIX_JVM ]; then
+          if [ -e \$JAVA_HOME/bin/java ]; then
+              NIX_JVM=\$JAVA_HOME/bin/java
+          elif [ -e \$JAVA_HOME/bin/gij ]; then
+              NIX_JVM=\$JAVA_HOME/bin/gij
+          else
+              NIX_JVM=java
+          fi
+      fi
+
+      LOCALCLASSPATH="\$ANT_HOME/lib/ant-launcher.jar\''${LOCALCLASSPATH:+:}\$LOCALCLASSPATH"
+
+      exec \$NIX_JVM \$NIX_ANT_OPTS \$ANT_OPTS -classpath "\$LOCALCLASSPATH" \
+          -Dant.home=\$ANT_HOME -Dant.library.dir="\$ANT_LIB" \
+          org.apache.tools.ant.launch.Launcher \$NIX_ANT_ARGS \$ANT_ARGS \
+          -cp "\$CLASSPATH" "\$@"
+      EOF
+
+      chmod +x $out/bin/ant
+    ''; # */
+
+  meta = {
+    homepage = http://ant.apache.org/;
+    description = "A Java-based build tool";
+
+    longDescription = ''
+      Apache Ant is a Java-based build tool.  In theory, it is kind of like
+      Make, but without Make's wrinkles.
+
+      Why another build tool when there is already make, gnumake, nmake, jam,
+      and others? Because all those tools have limitations that Ant's
+      original author couldn't live with when developing software across
+      multiple platforms.  Make-like tools are inherently shell-based -- they
+      evaluate a set of dependencies, then execute commands not unlike what
+      you would issue in a shell.  This means that you can easily extend
+      these tools by using or writing any program for the OS that you are
+      working on.  However, this also means that you limit yourself to the
+      OS, or at least the OS type such as Unix, that you are working on.
+
+      Ant is different.  Instead of a model where it is extended with
+      shell-based commands, Ant is extended using Java classes.  Instead of
+      writing shell commands, the configuration files are XML-based, calling
+      out a target tree where various tasks get executed.  Each task is run
+      by an object that implements a particular Task interface.
+    '';
+
+    license = stdenv.lib.licenses.asl20;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/apache-maven/builder.sh b/nixpkgs/pkgs/development/tools/build-managers/apache-maven/builder.sh
new file mode 100644
index 000000000000..8d06352b1356
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/apache-maven/builder.sh
@@ -0,0 +1,17 @@
+source $stdenv/setup
+
+unpackPhase
+
+mkdir -p $out/maven
+cp -r $name/* $out/maven
+
+makeWrapper $out/maven/bin/mvn $out/bin/mvn --set JAVA_HOME "$jdk"
+
+# Add the maven-axis and JIRA plugin by default when using maven 1.x
+if [ -e $out/maven/bin/maven ]
+then
+  export OLD_HOME=$HOME
+  export HOME=.
+  $out/maven/bin/maven plugin:download -DgroupId=maven-plugins -DartifactId=maven-axis-plugin -Dversion=0.7
+  export HOME=OLD_HOME
+fi
diff --git a/nixpkgs/pkgs/development/tools/build-managers/apache-maven/default.nix b/nixpkgs/pkgs/development/tools/build-managers/apache-maven/default.nix
new file mode 100644
index 000000000000..cde6ea2f7a87
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/apache-maven/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, jdk, makeWrapper }:
+
+assert jdk != null;
+
+let version = "3.6.1"; in
+stdenv.mkDerivation rec {
+  name = "apache-maven-${version}";
+
+  builder = ./builder.sh;
+
+  src = fetchurl {
+    url = "mirror://apache/maven/maven-3/${version}/binaries/${name}-bin.tar.gz";
+    sha256 = "1rv97g9qr6sifl88rxbsqnz5i79m6ifs36srri08j3y3k5dc6a15";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  inherit jdk;
+
+  meta = with stdenv.lib; {
+    description = "Build automation tool (used primarily for Java projects)";
+    homepage = http://maven.apache.org/;
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ cko ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/arpa2cm/default.nix b/nixpkgs/pkgs/development/tools/build-managers/arpa2cm/default.nix
new file mode 100644
index 000000000000..0aec7491e4ad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/arpa2cm/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "arpa2cm";
+  version = "0.5";
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    sha256 = "093h7njj8d8iiwnw5byfxkkzlbny60fwv1w57j8f1lsd4yn6rih4";
+    rev = "version-${version}";
+    repo = "${pname}";
+    owner = "arpa2";
+  };
+
+  buildInputs = [ cmake ];
+
+  meta = with stdenv.lib; {
+    description = "CMake Module library for the ARPA2 project";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ leenaars ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bam/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bam/default.nix
new file mode 100644
index 000000000000..624821613465
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bam/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, lua5_3, python }:
+
+stdenv.mkDerivation rec {
+  name = "bam-${version}";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "matricks";
+    repo = "bam";
+    rev = "v${version}";
+    sha256 = "13br735ig7lygvzyfd15fc2rdygrqm503j6xj5xkrl1r7w2wipq6";
+  };
+
+  buildInputs = [ lua5_3 python ];
+
+  buildPhase = ''${stdenv.shell} make_unix.sh'';
+
+  checkPhase = ''${python.interpreter} scripts/test.py'';
+
+  installPhase = ''
+    mkdir -p "$out/share/bam"
+    cp -r docs examples tests  "$out/share/bam"
+    mkdir -p "$out/bin"
+    cp bam "$out/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Yet another build manager";
+    maintainers = with maintainers;
+    [
+      raskin
+    ];
+    platforms = platforms.linux;
+    license = licenses.zlib;
+    downloadPage = "http://matricks.github.com/bam/";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/0.4.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/0.4.nix
new file mode 100644
index 000000000000..1018abd6ee9c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/0.4.nix
@@ -0,0 +1,100 @@
+{ stdenv, lib, fetchurl, jdk, zip, unzip, bash, makeWrapper, which, coreutils
+# Always assume all markers valid (don't redownload dependencies).
+# Also, don't clean up environment variables.
+, enableNixHacks ? false
+}:
+
+stdenv.mkDerivation rec {
+
+  version = "0.4.5";
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/bazelbuild/bazel/;
+    description = "Build tool that builds code quickly and reliably";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ cstrahan philandstuff ];
+    platforms = platforms.linux;
+    broken = true; # 2018-08-07
+  };
+
+  name = "bazel-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/bazelbuild/bazel/releases/download/${version}/bazel-${version}-dist.zip";
+    sha256 = "0asmq3kxnl4326zhgh13mvcrc8jvmiswjj4ymrq0943q4vj7nwrb";
+  };
+
+  preUnpack = ''
+    mkdir bazel
+    cd bazel
+  '';
+  sourceRoot = ".";
+
+  patches = lib.optional enableNixHacks ./nix-hacks-0.4.patch;
+
+  postPatch = ''
+    for f in $(grep -l -r '/bin/bash'); do
+      substituteInPlace "$f" --replace '/bin/bash' '${bash}/bin/bash'
+    done
+    for f in $(grep -l -r '/usr/bin/env'); do
+      substituteInPlace "$f" --replace '/usr/bin/env' '${coreutils}/bin/env'
+    done
+  '' + lib.optionalString stdenv.isDarwin ''
+    sed -i 's,/usr/bin/xcrun clang,clang,g' \
+      scripts/bootstrap/compile.sh \
+      src/tools/xcode/realpath/BUILD \
+      src/tools/xcode/stdredirect/BUILD \
+      src/tools/xcode/xcrunwrapper/xcrunwrapper.sh
+    sed -i 's,/usr/bin/xcrun "''${TOOLNAME}","''${TOOLNAME}",g' \
+      src/tools/xcode/xcrunwrapper/xcrunwrapper.sh
+    sed -i 's/"xcrun", "clang"/"clang"/g' tools/osx/xcode_configure.bzl
+  '';
+
+  buildInputs = [
+    jdk
+    zip
+    unzip
+    makeWrapper
+    which
+  ];
+
+  # These must be propagated since the dependency is hidden in a compressed
+  # archive.
+
+  propagatedBuildInputs = [
+    bash
+  ];
+
+  buildPhase = ''
+    export TMPDIR=/tmp/.bazel-$UID
+    ./compile.sh
+    ./output/bazel --output_user_root=$TMPDIR/.bazel build //scripts:bash_completion \
+      --spawn_strategy=standalone \
+      --genrule_strategy=standalone
+    cp bazel-bin/scripts/bazel-complete.bash output/
+  '';
+
+  # Build the CPP and Java examples to verify that Bazel works.
+
+  doCheck = true;
+  checkPhase = ''
+    export TEST_TMPDIR=$(pwd)
+    ./output/bazel test --test_output=errors \
+        examples/cpp:hello-success_test \
+        examples/java-native/src/test/java/com/example/myproject:hello
+  '';
+
+  # Bazel expects gcc and java to be in the path.
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv output/bazel $out/bin
+    wrapProgram "$out/bin/bazel" --prefix PATH : "${stdenv.cc}/bin:${jdk}/bin"
+    mkdir -p $out/share/bash-completion/completions $out/share/zsh/site-functions
+    mv output/bazel-complete.bash $out/share/bash-completion/completions/
+    cp scripts/zsh_completion/_bazel $out/share/zsh/site-functions/
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bash-tools-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bash-tools-test.nix
new file mode 100644
index 000000000000..3bbab475c573
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bash-tools-test.nix
@@ -0,0 +1,42 @@
+{ stdenv, writeText, runCommandCC, bazel }:
+
+# Tests that certain executables are available in bazel-executed bash shells.
+
+let
+  WORKSPACE = writeText "WORKSPACE" ''
+    workspace(name = "our_workspace")
+  '';
+
+  fileIn = writeText "input.txt" ''
+  one
+  two
+  three
+  '';
+
+  fileBUILD = writeText "BUILD" ''
+    genrule(
+      name = "tool_usage",
+      srcs = [ ":input.txt" ],
+      outs = [ "output.txt" ],
+      cmd = "cat $(location :input.txt) | gzip - | gunzip - | awk '/t/' > $@",
+    )
+  '';
+
+  runLocal = name: script: runCommandCC name { preferLocalBuild = true; } script;
+
+  workspaceDir = runLocal "our_workspace" ''
+    mkdir $out
+    cp ${WORKSPACE} $out/WORKSPACE
+    cp ${fileIn} $out/input.txt
+    cp ${fileBUILD} $out/BUILD
+  '';
+
+  testBazel = runLocal "bazel-test-bash-tools" ''
+    export HOME=$(mktemp -d)
+    cp -r ${workspaceDir} wd && chmod +w wd && cd wd
+    ${bazel}/bin/bazel build :tool_usage
+    cp bazel-genfiles/output.txt $out
+    echo "Testing content" && [ "$(cat $out | wc -l)" == "2" ] && echo "OK"
+  '';
+
+in testBazel
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-deps/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-deps/default.nix
new file mode 100644
index 000000000000..6fdb57345072
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-deps/default.nix
@@ -0,0 +1,81 @@
+{ stdenv, buildBazelPackage, lib, fetchFromGitHub, git, jre, makeWrapper }:
+
+buildBazelPackage rec {
+  name = "bazel-deps-${version}";
+  version = "2019-02-01";
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/johnynek/bazel-deps";
+    description = "Generate bazel dependencies for maven artifacts";
+    license = licenses.mit;
+    maintainers = [ maintainers.uri-canva ];
+    platforms = platforms.all;
+  };
+
+  src = fetchFromGitHub {
+    owner = "johnynek";
+    repo = "bazel-deps";
+    rev = "6585033409e09028852403ec15ec0c77851234be";
+    sha256 = "0hypf7mcbpx2djqm92k82vn1k6pbnv564xbnazx8nw60f6ns0x87";
+  };
+
+  bazelTarget = "//src/scala/com/github/johnynek/bazel_deps:parseproject_deploy.jar";
+
+  buildInputs = [ git makeWrapper ];
+
+  fetchAttrs = {
+    preInstall = ''
+      # Remove all built in external workspaces, Bazel will recreate them when building
+      rm -rf $bazelOut/external/{bazel_tools,\@bazel_tools.marker,embedded_jdk,\@embedded_jdk.marker,local_*,\@local_*}
+      # For each external workspace, remove all files that aren't referenced by Bazel
+      # Many of these files are non-hermetic (for example .git/refs/remotes/origin/HEAD)
+      files_to_delete=()
+      for workspace in $(find $bazelOut/external -maxdepth 2 -name "WORKSPACE" -print0 | xargs -0L1 dirname); do
+        workspaceOut="$NIX_BUILD_TOP/workspaces/$(basename workspace)/output"
+        workspaceUserRoot="$NIX_BUILD_TOP/workspaces/$(basename workspace)/tmp"
+        rm -rf $workspace/.git
+        if ! targets_and_files=$(cd "$workspace" && bazel --output_base="$workspaceOut" --output_user_root="$workspaceUserRoot" query '//...:*' 2> /dev/null | sort -u); then
+          continue
+        fi
+        if ! targets=$(cd "$workspace" && bazel --output_base="$workspaceOut" --output_user_root="$workspaceUserRoot" query '//...:all' 2> /dev/null | sort -u); then
+          continue
+        fi
+        mapfile -t referenced_files < <(comm -23 <(printf '%s' "$targets_and_files") <(printf '%s' "$targets") | sed -e 's,^//:,,g' | sed -e 's,^//,,g' | sed -e 's,:,/,g')
+        referenced_files+=( "WORKSPACE" )
+        for referenced_file in "''${referenced_files[@]}"; do
+          # Some of the referenced files are symlinks to non-referenced files.
+          # The symlink targets have deterministic contents, but non-deterministic
+          # paths. Copy them to the referenced path, which is deterministic.
+          if target=$(readlink "$workspace/$referenced_file"); then
+            rm "$workspace/$referenced_file"
+            cp -a "$target" "$workspace/$referenced_file"
+          fi
+        done
+        mapfile -t workspace_files_to_delete < <(find "$workspace" -type f -or -type l | sort -u | comm -23 - <(printf "$workspace/%s\n" "''${referenced_files[@]}" | sort -u))
+        for workspace_file_to_delete in "''${workspace_files_to_delete[@]}"; do
+          files_to_delete+=("$workspace_file_to_delete")
+        done
+        # We're running bazel in many different workspaces in a loop. Letting the
+        # daemon shut down on its own would leave several daemons alive at the
+        # same time, using up a lot of memory. Shut them down explicitly instead.
+        bazel --output_base="$workspaceOut" --output_user_root="$workspaceUserRoot" shutdown 2> /dev/null
+      done
+      for file_to_delete in "''${files_to_delete[@]}"; do
+        rm "$file_to_delete"
+      done
+      find . -type d -empty -delete
+    '';
+
+    sha256 = "1yirrzhhrsmbgd27fg709plhrhyi8pzwqv84yg72sd3799kswh9m";
+  };
+
+  buildAttrs = {
+    installPhase = ''
+      mkdir -p $out/bin/bazel-bin/src/scala/com/github/johnynek/bazel_deps
+
+      cp gen_maven_deps.sh $out/bin
+      wrapProgram "$out/bin/gen_maven_deps.sh" --set JAVA_HOME "${jre}" --prefix PATH : ${lib.makeBinPath [ jre ]}
+      cp bazel-bin/src/scala/com/github/johnynek/bazel_deps/parseproject_deploy.jar $out/bin/bazel-bin/src/scala/com/github/johnynek/bazel_deps
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/default.nix
new file mode 100644
index 000000000000..dbbc0d11ff1a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/default.nix
@@ -0,0 +1,81 @@
+{ buildBazelPackage
+, cacert
+, fetchFromGitHub
+, fetchpatch
+, git
+, go
+, stdenv
+}:
+
+buildBazelPackage rec {
+  name = "bazel-remote-${version}";
+  version = "2019-01-12";
+
+  src = fetchFromGitHub {
+    owner = "buchgr";
+    repo = "bazel-remote";
+    rev = "3f65b6ccf69e223950c77275a743d0d3a04a8583";
+    sha256 = "0fklrlylmc55yzhm3m1f211x5gmk7hpqjb7k5kml7n3gw3npbjda";
+  };
+
+  nativeBuildInputs = [ go git ];
+
+  bazelTarget = "//:bazel-remote";
+
+  fetchAttrs = {
+    preBuild = ''
+      patchShebangs .
+
+      # tell rules_go to use the Go binary found in the PATH
+      sed -e 's:go_register_toolchains():go_register_toolchains(go_version = "host"):g' -i WORKSPACE
+
+      # update gazelle to work around https://github.com/golang/go/issues/29850
+      sed -e 's,https://github.com/bazelbuild/bazel-gazelle/releases/download/0.15.0/bazel-gazelle-0.15.0.tar.gz,https://github.com/bazelbuild/bazel-gazelle/releases/download/0.16.0/bazel-gazelle-0.16.0.tar.gz,g' -i WORKSPACE
+      sed -e 's,6e875ab4b6bf64a38c352887760f21203ab054676d9c1b274963907e0768740d,7949fc6cc17b5b191103e97481cf8889217263acf52e00b560683413af204fcb,g' -i WORKSPACE
+
+      # tell rules_go to invoke GIT with custom CAINFO path
+      export GIT_SSL_CAINFO="${cacert}/etc/ssl/certs/ca-bundle.crt"
+    '';
+
+    preInstall = ''
+      # Remove the go_sdk (it's just a copy of the go derivation) and all
+      # references to it from the marker files. Bazel does not need to download
+      # this sdk because we have patched the WORKSPACE file to point to the one
+      # currently present in PATH. Without removing the go_sdk from the marker
+      # file, the hash of it will change anytime the Go derivation changes and
+      # that would lead to impurities in the marker files which would result in
+      # a different sha256 for the fetch phase.
+      rm -rf $bazelOut/external/{go_sdk,\@go_sdk.marker}
+      sed -e '/^FILE:@go_sdk.*/d' -i $bazelOut/external/\@*.marker
+
+      # Remove the gazelle tools, they contain go binaries that are built
+      # non-deterministically. As long as the gazelle version matches the tools
+      # should be equivalent.
+      rm -rf $bazelOut/external/{bazel_gazelle_go_repository_tools,\@bazel_gazelle_go_repository_tools.marker}
+      sed -e '/^FILE:@bazel_gazelle_go_repository_tools.*/d' -i $bazelOut/external/\@*.marker
+    '';
+
+    sha256 = "1wvyv3w5y6vj6qs6v5qyd356j1lxc3mf7n3j2pcib1bqmx3igw35";
+  };
+
+  buildAttrs = {
+    preBuild = ''
+      patchShebangs .
+
+      # tell rules_go to use the Go binary found in the PATH
+      sed -e 's:go_register_toolchains():go_register_toolchains(go_version = "host"):g' -i WORKSPACE
+    '';
+
+    installPhase = ''
+      install -Dm755 bazel-bin/*_pure_stripped/bazel-remote $out/bin/bazel-remote
+    '';
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/buchgr/bazel-remote;
+    description = "A remote HTTP/1.1 cache for Bazel.";
+    license = licenses.asl20;
+    maintainers = [ maintainers.uri-canva ];
+    platforms = platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/buildtools/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/buildtools/default.nix
new file mode 100644
index 000000000000..2e8f806d53aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/buildtools/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "bazel-buildtools-${version}";
+  version = "0.22.0";
+
+  goPackagePath = "github.com/bazelbuild/buildtools";
+
+  src = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = "buildtools";
+    rev = "55b64c3d2ddfb57f06477c1d94ef477419c96bd6";
+    sha256 = "0n6q8pkgy3vvmwyrxvkmjfbcxc31i31czg2bjdzq7awwrr4fdbwy";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Tools for working with Google's bazel buildtool. Includes buildifier, buildozer, and unused_deps.";
+    homepage = https://github.com/bazelbuild/buildtools;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ elasticdog uri-canva ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/buildtools/deps.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/buildtools/deps.nix
new file mode 100644
index 000000000000..d7cd02c12b8b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/buildtools/deps.nix
@@ -0,0 +1,21 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "b5d812f8a3706043e23a9cd5babf2e5423744d30";
+      sha256 = "15am4s4646qy6iv0g3kkqq52rzykqjhm4bf08dk0fy2r58knpsyl";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/skylark";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/skylark";
+      rev = "a5f7082aabed29c0e429c722292c66ec8ecf9591";
+      sha256 = "16vsa6ngsby27n6indj441r1glcdfgipjcwcb0rs6zl2dqlqr286";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/default.nix
new file mode 100644
index 000000000000..e106c6962dc3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/default.nix
@@ -0,0 +1,346 @@
+{ stdenv, callPackage, lib, fetchurl, fetchpatch, runCommand, makeWrapper
+, zip, unzip, bash, writeCBin, coreutils
+, which, python, perl, gawk, gnused, gnutar, gnugrep, gzip, findutils
+# Apple dependencies
+, cctools, clang, libcxx, CoreFoundation, CoreServices, Foundation
+# Allow to independently override the jdks used to build and run respectively
+, buildJdk, runJdk
+, buildJdkName
+, runtimeShell
+# Always assume all markers valid (don't redownload dependencies).
+# Also, don't clean up environment variables.
+, enableNixHacks ? false
+}:
+
+let
+  srcDeps = [
+    (fetchurl {
+      url = "https://github.com/google/desugar_jdk_libs/archive/915f566d1dc23bc5a8975320cd2ff71be108eb9c.zip";
+      sha256 = "0b926df7yxyyyiwm9cmdijy6kplf0sghm23sf163zh8wrk87wfi7";
+    })
+
+    (fetchurl {
+        url = "https://mirror.bazel.build/bazel_java_tools/java_tools_pkg-0.5.1.tar.gz";
+        sha256 = "1ld8m5cj9j0r474f56pixcfi0xvx3w7pzwahxngs8f6ns0yimz5w";
+    })
+  ];
+
+  distDir = runCommand "bazel-deps" {} ''
+    mkdir -p $out
+    for i in ${builtins.toString srcDeps}; do cp $i $out/$(stripHash $i); done
+  '';
+
+  defaultShellPath = lib.makeBinPath
+    # Keep this list conservative. For more exotic tools, prefer to use
+    # @rules_nixpkgs to pull in tools from the nix repository. Example:
+    #
+    # WORKSPACE:
+    #
+    #     nixpkgs_git_repository(
+    #         name = "nixpkgs",
+    #         revision = "def5124ec8367efdba95a99523dd06d918cb0ae8",
+    #     )
+    #
+    #     # This defines an external Bazel workspace.
+    #     nixpkgs_package(
+    #         name = "bison",
+    #         repositories = { "nixpkgs": "@nixpkgs//:default.nix" },
+    #     )
+    #
+    # some/BUILD.bazel:
+    #
+    #     genrule(
+    #        ...
+    #        cmd = "$(location @bison//:bin/bison) -other -args",
+    #        tools = [
+    #            ...
+    #            "@bison//:bin/bison",
+    #        ],
+    #     )
+    #
+    [ bash coreutils findutils gawk gnugrep gnutar gnused gzip which unzip ];
+
+  # Java toolchain used for the build and tests
+  javaToolchain = "@bazel_tools//tools/jdk:toolchain_host${buildJdkName}";
+
+in
+stdenv.mkDerivation rec {
+
+  version = "0.24.0";
+
+  meta = with lib; {
+    homepage = "https://github.com/bazelbuild/bazel/";
+    description = "Build tool that builds code quickly and reliably";
+    license = licenses.asl20;
+    maintainers = [ maintainers.mboes ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+
+  # Additional tests that check bazel’s functionality. Execute
+  #
+  #     nix-build . -A bazel.tests
+  #
+  # in the nixpkgs checkout root to exercise them locally.
+  passthru.tests = {
+    pythonBinPath = callPackage ./python-bin-path-test.nix {};
+    bashTools = callPackage ./bash-tools-test.nix {};
+  };
+
+  name = "bazel-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/bazelbuild/bazel/releases/download/${version}/${name}-dist.zip";
+    sha256 = "11gsc00ghxqkbci8nrflkwq1lcvqawlgkaryj458b24si6bjl7b2";
+  };
+
+  # Necessary for the tests to pass on Darwin with sandbox enabled.
+  # Bazel starts a local server and needs to bind a local address.
+  __darwinAllowLocalNetworking = true;
+
+  sourceRoot = ".";
+
+  patches = [
+    ./python-stub-path-fix.patch
+  ] ++ lib.optional enableNixHacks ./nix-hacks.patch;
+
+  # Bazel expects several utils to be available in Bash even without PATH. Hence this hack.
+
+  customBash = writeCBin "bash" ''
+    #include <stdio.h>
+    #include <stdlib.h>
+    #include <string.h>
+    #include <unistd.h>
+
+    extern char **environ;
+
+    int main(int argc, char *argv[]) {
+      char *path = getenv("PATH");
+      char *pathToAppend = "${defaultShellPath}";
+      char *newPath;
+      if (path != NULL) {
+        int length = strlen(path) + 1 + strlen(pathToAppend) + 1;
+        newPath = malloc(length * sizeof(char));
+        snprintf(newPath, length, "%s:%s", path, pathToAppend);
+      } else {
+        newPath = pathToAppend;
+      }
+      setenv("PATH", newPath, 1);
+      execve("${bash}/bin/bash", argv, environ);
+      return 0;
+    }
+  '';
+
+  postPatch = let
+
+    darwinPatches = ''
+      # Disable Bazel's Xcode toolchain detection which would configure compilers
+      # and linkers from Xcode instead of from PATH
+      export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
+
+      # Explicitly configure gcov since we don't have it on Darwin, so autodetection fails
+      export GCOV=${coreutils}/bin/false
+
+      # Framework search paths aren't added by bintools hook
+      # https://github.com/NixOS/nixpkgs/pull/41914
+      export NIX_LDFLAGS="$NIX_LDFLAGS -F${CoreFoundation}/Library/Frameworks -F${CoreServices}/Library/Frameworks -F${Foundation}/Library/Frameworks"
+
+      # libcxx includes aren't added by libcxx hook
+      # https://github.com/NixOS/nixpkgs/pull/41589
+      export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -isystem ${libcxx}/include/c++/v1"
+
+      # 10.10 apple_sdk Foundation doesn't have type arguments on classes
+      # Remove this when we update apple_sdk
+      sed -i -e 's/<.*\*>//g' tools/osx/xcode_locator.m
+
+      # don't use system installed Xcode to run clang, use Nix clang instead
+      sed -i -e "s;/usr/bin/xcrun clang;${stdenv.cc}/bin/clang $NIX_CFLAGS_COMPILE $NIX_LDFLAGS -framework CoreFoundation;g" \
+        scripts/bootstrap/compile.sh \
+        src/tools/xcode/realpath/BUILD \
+        src/tools/xcode/stdredirect/BUILD \
+        tools/osx/BUILD
+
+      # clang installed from Xcode has a compatibility wrapper that forwards
+      # invocations of gcc to clang, but vanilla clang doesn't
+      sed -i -e 's;_find_generic(repository_ctx, "gcc", "CC", overriden_tools);_find_generic(repository_ctx, "clang", "CC", overriden_tools);g' tools/cpp/unix_cc_configure.bzl
+
+      sed -i -e 's;/usr/bin/libtool;${cctools}/bin/libtool;g' tools/cpp/unix_cc_configure.bzl
+      wrappers=( tools/cpp/osx_cc_wrapper.sh tools/cpp/osx_cc_wrapper.sh.tpl )
+      for wrapper in "''${wrappers[@]}"; do
+        sed -i -e "s,/usr/bin/install_name_tool,${cctools}/bin/install_name_tool,g" $wrapper
+      done
+    '';
+
+    genericPatches = ''
+      # Substitute python's stub shebang to plain python path. (see TODO add pr URL)
+      # See also `postFixup` where python is added to $out/nix-support
+      substituteInPlace src/main/java/com/google/devtools/build/lib/bazel/rules/python/python_stub_template.txt\
+          --replace "/usr/bin/env python" "${python}/bin/python" \
+          --replace "NIX_STORE_PYTHON_PATH" "${python}/bin/python" \
+
+      # md5sum is part of coreutils
+      sed -i 's|/sbin/md5|md5sum|' \
+        src/BUILD
+
+      # substituteInPlace is rather slow, so prefilter the files with grep
+      grep -rlZ /bin src/main/java/com/google/devtools | while IFS="" read -r -d "" path; do
+        # If you add more replacements here, you must change the grep above!
+        # Only files containing /bin are taken into account.
+        substituteInPlace "$path" \
+          --replace /bin/bash ${customBash}/bin/bash \
+          --replace /usr/bin/env ${coreutils}/bin/env \
+          --replace /bin/true ${coreutils}/bin/true
+      done
+
+      # Fixup scripts that generate scripts. Not fixed up by patchShebangs below.
+      substituteInPlace scripts/bootstrap/compile.sh \
+          --replace /bin/sh ${customBash}/bin/bash
+
+      # add nix environment vars to .bazelrc
+      cat >> .bazelrc <<EOF
+      build --experimental_distdir=${distDir}
+      fetch --experimental_distdir=${distDir}
+      build --copt="$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --copt="/g')"
+      build --host_copt="$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --host_copt="/g')"
+      build --linkopt="-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --linkopt="-Wl,/g')"
+      build --host_linkopt="-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --host_linkopt="-Wl,/g')"
+      build --host_javabase='@local_jdk//:jdk'
+      build --host_java_toolchain='${javaToolchain}'
+      EOF
+
+      # add the same environment vars to compile.sh
+      sed -e "/\$command \\\\$/a --copt=\"$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --copt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_copt=\"$(echo $NIX_CFLAGS_COMPILE | sed -e 's/ /" --host_copt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --linkopt=\"-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --linkopt=\"-Wl,/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_linkopt=\"-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --host_linkopt=\"-Wl,/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_javabase='@local_jdk//:jdk' \\\\" \
+          -e "/\$command \\\\$/a --host_java_toolchain='${javaToolchain}' \\\\" \
+          -i scripts/bootstrap/compile.sh
+
+      # --experimental_strict_action_env (which will soon become the
+      # default, see bazelbuild/bazel#2574) hardcodes the default
+      # action environment to a value that on NixOS at least is bogus.
+      # So we hardcode it to something useful.
+      substituteInPlace \
+        src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java \
+        --replace /bin:/usr/bin ${defaultShellPath}
+
+      # This is necessary to avoid:
+      # "error: no visible @interface for 'NSDictionary' declares the selector
+      # 'initWithContentsOfURL:error:'"
+      # This can be removed when the apple_sdk is upgraded beyond 10.13+
+      sed -i '/initWithContentsOfURL:versionPlistUrl/ {
+        N
+        s/error:nil\];/\];/
+      }' tools/osx/xcode_locator.m
+
+      # append the PATH with defaultShellPath in tools/bash/runfiles/runfiles.bash
+      echo "PATH=\$PATH:${defaultShellPath}" >> runfiles.bash.tmp
+      cat tools/bash/runfiles/runfiles.bash >> runfiles.bash.tmp
+      mv runfiles.bash.tmp tools/bash/runfiles/runfiles.bash
+
+      patchShebangs .
+    '';
+    in lib.optionalString stdenv.hostPlatform.isDarwin darwinPatches
+     + genericPatches;
+
+  buildInputs = [
+    buildJdk
+  ];
+
+  # when a command can’t be found in a bazel build, you might also
+  # need to add it to `defaultShellPath`.
+  nativeBuildInputs = [
+    zip
+    python
+    unzip
+    makeWrapper
+    which
+    customBash
+  ] ++ lib.optionals (stdenv.isDarwin) [ cctools libcxx CoreFoundation CoreServices Foundation ];
+
+  # Bazel makes extensive use of symlinks in the WORKSPACE.
+  # This causes problems with infinite symlinks if the build output is in the same location as the
+  # Bazel WORKSPACE. This is why before executing the build, the source code is moved into a
+  # subdirectory.
+  # Failing to do this causes "infinite symlink expansion detected"
+  preBuildPhases = ["preBuildPhase"];
+  preBuildPhase = ''
+    mkdir bazel_src
+    shopt -s dotglob extglob
+    mv !(bazel_src) bazel_src
+  '';
+
+  buildPhase = ''
+    # Increasing memory during compilation might be necessary.
+    # export BAZEL_JAVAC_OPTS="-J-Xmx2g -J-Xms200m"
+    ./bazel_src/compile.sh
+    ./bazel_src/scripts/generate_bash_completion.sh \
+        --bazel=./bazel_src/output/bazel \
+        --output=./bazel_src/output/bazel-complete.bash \
+        --prepend=./bazel_src/scripts/bazel-complete-header.bash \
+        --prepend=./bazel_src/scripts/bazel-complete-template.bash
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+
+    # official wrapper scripts that searches for $WORKSPACE_ROOT/tools/bazel
+    # if it can’t find something in tools, it calls $out/bin/bazel-real
+    cp ./bazel_src/scripts/packages/bazel.sh $out/bin/bazel
+    mv ./bazel_src/output/bazel $out/bin/bazel-real
+
+    wrapProgram "$out/bin/bazel" --add-flags --server_javabase="${runJdk}"
+
+    # shell completion files
+    mkdir -p $out/share/bash-completion/completions $out/share/zsh/site-functions
+    mv ./bazel_src/output/bazel-complete.bash $out/share/bash-completion/completions/bazel
+    cp ./bazel_src/scripts/zsh_completion/_bazel $out/share/zsh/site-functions/
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    export TEST_TMPDIR=$(pwd)
+
+    hello_test () {
+      $out/bin/bazel test \
+        --test_output=errors \
+        --java_toolchain='${javaToolchain}' \
+        examples/cpp:hello-success_test \
+        examples/java-native/src/test/java/com/example/myproject:hello
+    }
+
+    cd ./bazel_src
+
+    # test whether $WORKSPACE_ROOT/tools/bazel works
+
+    mkdir -p tools
+    cat > tools/bazel <<"EOF"
+    #!${runtimeShell} -e
+    exit 1
+    EOF
+    chmod +x tools/bazel
+
+    # first call should fail if tools/bazel is used
+    ! hello_test
+
+    cat > tools/bazel <<"EOF"
+    #!${runtimeShell} -e
+    exec "$BAZEL_REAL" "$@"
+    EOF
+
+    # second call succeeds because it defers to $out/bin/bazel-real
+    hello_test
+  '';
+
+  # Save paths to hardcoded dependencies so Nix can detect them.
+  postFixup = ''
+    mkdir -p $out/nix-support
+    echo "${customBash} ${defaultShellPath}" >> $out/nix-support/depends
+    # The templates get tar’d up into a .jar,
+    # so nix can’t detect python is needed in the runtime closure
+    echo "${python}" >> $out/nix-support/depends
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/nix-hacks-0.4.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/nix-hacks-0.4.patch
new file mode 100644
index 000000000000..563fe635e6b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/nix-hacks-0.4.patch
@@ -0,0 +1,51 @@
+diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
+index eafa09fb5..d2d5e40e8 100644
+--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
++++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
+@@ -287,21 +287,8 @@ public final class RepositoryDelegatorFunction implements SkyFunction {
+           markerData.put(key, value);
+         }
+       }
+-      boolean result = false;
+-      if (markerRuleKey.equals(ruleKey)) {
+-        result = handler.verifyMarkerData(rule, markerData, env);
+-        if (env.valuesMissing()) {
+-          return null;
+-        }
+-      }
+ 
+-      if (result) {
+-        return new Fingerprint().addString(content).digestAndReset();
+-      } else {
+-        // So that we are in a consistent state if something happens while fetching the repository
+-        markerPath.delete();
+-        return null;
+-      }
++      return new Fingerprint().addString(content).digestAndReset();
+ 
+     } catch (IOException e) {
+       throw new RepositoryFunctionException(e, Transience.TRANSIENT);
+diff --git a/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java b/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java
+index a7ebc8f7a..40f2049fa 100644
+--- a/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java
++++ b/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java
+@@ -129,7 +129,6 @@ public class JavaSubprocessFactory implements SubprocessFactory {
+     ProcessBuilder builder = new ProcessBuilder();
+     builder.command(params.getArgv());
+     if (params.getEnv() != null) {
+-      builder.environment().clear();
+       builder.environment().putAll(params.getEnv());
+     }
+ 
+diff --git a/src/main/java/com/google/devtools/build/lib/worker/Worker.java b/src/main/java/com/google/devtools/build/lib/worker/Worker.java
+index 0268d1b2b..637364657 100644
+--- a/src/main/java/com/google/devtools/build/lib/worker/Worker.java
++++ b/src/main/java/com/google/devtools/build/lib/worker/Worker.java
+@@ -77,7 +77,6 @@ class Worker {
+         new ProcessBuilder(command)
+             .directory(workDir.getPathFile())
+             .redirectError(Redirect.appendTo(logFile.getPathFile()));
+-    processBuilder.environment().clear();
+     processBuilder.environment().putAll(workerKey.getEnv());
+ 
+     this.process = processBuilder.start();
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/nix-hacks.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/nix-hacks.patch
new file mode 100644
index 000000000000..da3f6248f220
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/nix-hacks.patch
@@ -0,0 +1,37 @@
+diff -Naur a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
+--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java	1980-01-01 00:00:00.000000000 -0500
++++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java	2018-01-18 08:17:22.420459162 -0500
+@@ -287,21 +287,8 @@
+           markerData.put(key, value);
+         }
+       }
+-      boolean result = false;
+-      if (markerRuleKey.equals(ruleKey)) {
+-        result = handler.verifyMarkerData(rule, markerData, env);
+-        if (env.valuesMissing()) {
+-          return null;
+-        }
+-      }
+ 
+-      if (result) {
+-        return new Fingerprint().addString(content).digestAndReset();
+-      } else {
+-        // So that we are in a consistent state if something happens while fetching the repository
+-        markerPath.delete();
+-        return null;
+-      }
++      return new Fingerprint().addString(content).digestAndReset();
+ 
+     } catch (IOException e) {
+       throw new RepositoryFunctionException(e, Transience.TRANSIENT);
+diff -Naur a/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java b/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java
+--- a/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java	1980-01-01 00:00:00.000000000 -0500
++++ b/src/main/java/com/google/devtools/build/lib/shell/JavaSubprocessFactory.java	2018-01-18 08:17:53.274877980 -0500
+@@ -129,7 +129,6 @@
+     ProcessBuilder builder = new ProcessBuilder();
+     builder.command(params.getArgv());
+     if (params.getEnv() != null) {
+-      builder.environment().clear();
+       builder.environment().putAll(params.getEnv());
+     }
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/python-bin-path-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/python-bin-path-test.nix
new file mode 100644
index 000000000000..54ae154a6207
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/python-bin-path-test.nix
@@ -0,0 +1,57 @@
+{ stdenv, lib, writeText, runCommandCC, bazel }:
+
+let
+  WORKSPACE = writeText "WORKSPACE" ''
+    workspace(name = "our_workspace")
+  '';
+
+  pythonLib = writeText "lib.py" ''
+    def foo():
+      return 43
+  '';
+
+  pythonBin = writeText "bin.py" ''
+    from lib import foo
+
+    assert foo() == 43
+  '';
+
+  pythonBUILD = writeText "BUILD" ''
+    py_library(
+      name = "lib",
+      srcs = [ "lib.py" ],
+    )
+
+    py_test(
+      name = "bin",
+      srcs = [ "bin.py" ],
+      deps = [ ":lib" ],
+    )
+  '';
+
+  runLocal = name: script: runCommandCC name { preferLocalBuild = true; } script;
+
+  workspaceDir = runLocal "our_workspace" ''
+    mkdir $out
+    cp ${WORKSPACE} $out/WORKSPACE
+    mkdir $out/python
+    cp ${pythonLib} $out/python/lib.py
+    cp ${pythonBin} $out/python/bin.py
+    cp ${pythonBUILD} $out/python/BUILD.bazel
+  '';
+
+  testBazel = runLocal "bazel-test-builtin-rules" ''
+    export HOME=$(mktemp -d)
+    # Note https://github.com/bazelbuild/bazel/issues/5763#issuecomment-456374609
+    # about why to create a subdir for the workspace.
+    cp -r ${workspaceDir} wd && chmod u+w wd && cd wd
+    ${bazel}/bin/bazel \
+      test \
+        --test_output=errors \
+        --host_javabase='@local_jdk//:jdk' \
+        //...
+
+    touch $out
+  '';
+
+in testBazel
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/python-stub-path-fix.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/python-stub-path-fix.patch
new file mode 100644
index 000000000000..cbc4192d2d9b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/python-stub-path-fix.patch
@@ -0,0 +1,13 @@
+diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/python_stub_template.txt b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/python_stub_template.txt
+index dac21c9a83..69b11c283f 100644
+--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/python_stub_template.txt
++++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/python_stub_template.txt
+@@ -67,7 +67,7 @@ def FindPythonBinary(module_space):
+     return os.path.join(module_space, PYTHON_BINARY)
+   else:
+     # Case 4: Path has to be looked up in the search path.
+-    return SearchPath(PYTHON_BINARY)
++    return "NIX_STORE_PYTHON_PATH"
+ 
+ def CreatePythonPathEntries(python_imports, module_space):
+   parts = python_imports.split(':');
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bear/cmakepaths.patch b/nixpkgs/pkgs/development/tools/build-managers/bear/cmakepaths.patch
new file mode 100644
index 000000000000..d237267078e6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bear/cmakepaths.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 04c5c58..429ca47 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -24,7 +24,7 @@ set(CMAKE_OSX_ARCHITECTURES "i386;x86_64" CACHE STRING  "Rogue")
+ 
+ set(EAR_LIB_FILE ${CMAKE_SHARED_LIBRARY_PREFIX}ear${CMAKE_SHARED_LIBRARY_SUFFIX})
+ set(EAR_LIB_PATH "${CMAKE_INSTALL_LIBDIR}/bear")
+-set(DEFAULT_PRELOAD_FILE ${CMAKE_INSTALL_PREFIX}/${EAR_LIB_PATH}/${EAR_LIB_FILE} CACHE STRING "Default path to libear.")
++set(DEFAULT_PRELOAD_FILE ${EAR_LIB_PATH}/${EAR_LIB_FILE} CACHE STRING "Default path to libear.")
+ 
+ add_subdirectory(libear)
+ add_subdirectory(bear)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bear/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bear/default.nix
new file mode 100644
index 000000000000..5999525def08
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bear/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, cmake, python }:
+
+stdenv.mkDerivation rec {
+  name = "bear-${version}";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "rizsotto";
+    repo = "Bear";
+    rev = version;
+    sha256 = "0r5mhacn8v4b2kjni91nxh3b6g86cbkrnlk4f6sj4mdrvx25dp39";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ python ]; # just for shebang of bin/bear
+
+  doCheck = false; # all fail
+
+  patches = [ ./ignore_wrapper.patch ./cmakepaths.patch ];
+
+  meta = with stdenv.lib; {
+    description = "Tool that generates a compilation database for clang tooling";
+    longDescription = ''
+      Note: the bear command is very useful to generate compilation commands
+      e.g. for YouCompleteMe.  You just enter your development nix-shell
+      and run `bear make`.  It's not perfect, but it gets a long way.
+    '';
+    homepage = https://github.com/rizsotto/Bear;
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.babariviere ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bear/ignore_wrapper.patch b/nixpkgs/pkgs/development/tools/build-managers/bear/ignore_wrapper.patch
new file mode 100644
index 000000000000..f70e3811f654
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bear/ignore_wrapper.patch
@@ -0,0 +1,23 @@
+--- Bear-2.3.11-src/bear/main.py.in	1970-01-01 01:00:01.000000000 +0100
++++ Bear-2.3.11-src-patch/bear/main.py.in	1970-01-01 01:00:01.000000000 +0100
+@@ -49,6 +49,7 @@
+ import shutil
+ import contextlib
+ import logging
++from distutils.spawn import find_executable
+ 
+ # Map of ignored compiler option for the creation of a compilation database.
+ # This map is used in _split_command method, which classifies the parameters
+@@ -540,7 +541,11 @@
+                 any(pattern.match(cmd) for pattern in COMPILER_PATTERNS_CXX)
+ 
+         if command:  # not empty list will allow to index '0' and '1:'
+-            executable = os.path.basename(command[0])  # type: str
++            absolute_executable = os.path.realpath(find_executable(command[0]))
++            if 'wrapper' in absolute_executable:
++                return None
++
++            executable = os.path.basename(absolute_executable) # type: str
+             parameters = command[1:]  # type: List[str]
+             # 'wrapper' 'parameters' and
+             # 'wrapper' 'compiler' 'parameters' are valid.
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bloop/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bloop/default.nix
new file mode 100644
index 000000000000..c20985f31dc4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bloop/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, lib, fetchurl, coursier, jdk, jre, python, makeWrapper }:
+
+let
+  baseName = "bloop";
+  version = "1.2.5";
+  deps = stdenv.mkDerivation {
+    name = "${baseName}-deps-${version}";
+    buildCommand = ''
+      export COURSIER_CACHE=$(pwd)
+      ${coursier}/bin/coursier fetch ch.epfl.scala:bloop-frontend_2.12:${version} \
+        -r "bintray:scalameta/maven" \
+        -r "bintray:scalacenter/releases" \
+        -r "https://oss.sonatype.org/content/repositories/staging" > deps
+      mkdir -p $out/share/java
+      cp $(< deps) $out/share/java/
+    '';
+    outputHashMode = "recursive";
+    outputHashAlgo = "sha256";
+    outputHash     = "19373fyb0g7irrdzb1vsjmyv5xj84qwbcfb6lm076px7wfyn0w1c";
+  };
+in
+stdenv.mkDerivation rec {
+  name = "${baseName}-${version}";
+
+  # Fetched from https://github.com/scalacenter/bloop/releases/download/v${version}/install.py
+  nailgunCommit = "0c325237";
+
+  buildInputs = [ jdk makeWrapper deps ];
+
+  phases = [ "installPhase" ];
+
+  client = fetchurl {
+    url = "https://raw.githubusercontent.com/scalacenter/nailgun/${nailgunCommit}/pynailgun/ng.py";
+    sha256 = "0qjw4nsyb4cxg96jj1yv5c0ivcxvmscxxqfzll5w9p1pjb30bq0n";
+  };
+
+  zshCompletion = fetchurl {
+    url = "https://raw.githubusercontent.com/scalacenter/bloop/v${version}/etc/zsh/_bloop";
+    sha256 = "1id6f1fgy2rk0q5aad6ffivhbxa94fallzsc04l9n0y1s2xdhqpm";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/zsh/site-functions
+
+    cp ${client} $out/bin/blp-client
+    cp ${zshCompletion} $out/share/zsh/site-functions/_bloop
+    chmod +x $out/bin/blp-client
+
+    makeWrapper ${jre}/bin/java $out/bin/blp-server \
+      --prefix PATH : ${lib.makeBinPath [ jdk ]} \
+      --add-flags "-cp $CLASSPATH bloop.Server"
+    makeWrapper $out/bin/blp-client $out/bin/bloop \
+      --prefix PATH : ${lib.makeBinPath [ python ]}
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://scalacenter.github.io/bloop/;
+    license = licenses.asl20;
+    description = "Bloop is a Scala build server and command-line tool to make the compile and test developer workflows fast and productive in a build-tool-agnostic way.";
+    maintainers = with maintainers; [ tomahna ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/boot/builder.sh b/nixpkgs/pkgs/development/tools/build-managers/boot/builder.sh
new file mode 100644
index 000000000000..c1481dc6a144
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/boot/builder.sh
@@ -0,0 +1,13 @@
+source $stdenv/setup
+
+boot_bin=$out/bin/boot
+
+mkdir -pv $(dirname $boot_bin)
+cp -v $src $boot_bin
+chmod -v 755 $boot_bin
+
+patchShebangs $boot_bin
+
+sed -i \
+    -e "s;\${BOOT_JAVA_COMMAND:-java};\${BOOT_JAVA_COMMAND:-${jdk}/bin/java};g" \
+    $boot_bin
diff --git a/nixpkgs/pkgs/development/tools/build-managers/boot/default.nix b/nixpkgs/pkgs/development/tools/build-managers/boot/default.nix
new file mode 100644
index 000000000000..380ba4803bd5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/boot/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, jdk }:
+
+stdenv.mkDerivation rec {
+  version = "2.7.2";
+  name = "boot-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/boot-clj/boot-bin/releases/download/${version}/boot.sh";
+    sha256 = "1hqp3xxmsj5vkym0l3blhlaq9g3w0lhjgmp37g6y3rr741znkk8c";
+  };
+
+  inherit jdk;
+
+  builder = ./builder.sh;
+
+  propagatedBuildInputs = [ jdk ];
+
+  meta = with stdenv.lib; {
+    description = "Build tooling for Clojure";
+    homepage = https://boot-clj.com/;
+    license = licenses.epl10;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ ragge ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/buck/default.nix b/nixpkgs/pkgs/development/tools/build-managers/buck/default.nix
new file mode 100644
index 000000000000..6963ccd161a1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/buck/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, jdk, ant, python2, python2Packages, watchman, bash, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "buck";
+  version = "2019.05.22.01";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1fxprw18kd3cw1lzv4xi1lnbdni06hs4vm9yh0w548rsfn3wnmxq";
+  };
+
+  patches = [ ./pex-mtime.patch ];
+
+  postPatch = ''
+    grep -l -r '/bin/bash' --null | xargs -0 sed -i -e "s!/bin/bash!${bash}/bin/bash!g"
+  '';
+
+  buildInputs = [ jdk ant python2 watchman python2Packages.pywatchman ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildPhase = ''
+    ant
+
+    PYTHONDONTWRITEBYTECODE=true ./bin/buck build -c buck.release_version=${version} buck
+  '';
+
+  installPhase = ''
+    install -D -m755 buck-out/gen/programs/buck.pex $out/bin/buck
+    wrapProgram $out/bin/buck \
+      --prefix PYTHONPATH : $PYTHONPATH \
+      --prefix PATH : "${stdenv.lib.makeBinPath [jdk watchman]}"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://buckbuild.com/;
+    description = "A high-performance build tool";
+    maintainers = [ maintainers.jgertm ];
+    license = licenses.asl20;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/buck/pex-mtime.patch b/nixpkgs/pkgs/development/tools/build-managers/buck/pex-mtime.patch
new file mode 100644
index 000000000000..b8726e64a604
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/buck/pex-mtime.patch
@@ -0,0 +1,13 @@
+diff --git a/third-party/py/pex/pex/common.py b/third-party/py/pex/pex/common.py
+index 76459ce23..eff411b20 100644
+--- a/third-party/py/pex/pex/common.py
++++ b/third-party/py/pex/pex/common.py
+@@ -328,4 +328,7 @@ class Chroot(object):
+   def zip(self, filename, mode='wb'):
+     with contextlib.closing(zipfile.ZipFile(filename, mode)) as zf:
+       for f in sorted(self.files()):
+-        zf.write(os.path.join(self.chroot, f), arcname=f, compress_type=zipfile.ZIP_DEFLATED)
++        path = os.path.join(self.chroot, f)
++        instant = 615532801
++        os.utime(path, (instant, instant))
++        zf.write(path, arcname=f, compress_type=zipfile.ZIP_DEFLATED)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/cmake/2.8.nix b/nixpkgs/pkgs/development/tools/build-managers/cmake/2.8.nix
new file mode 100644
index 000000000000..ac438080b9ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/2.8.nix
@@ -0,0 +1,88 @@
+{ stdenv, fetchurl, fetchpatch, curl, expat, zlib, bzip2
+, useNcurses ? false, ncurses, useQt4 ? false, qt4, ps
+}:
+
+with stdenv.lib;
+
+assert stdenv ? cc;
+assert stdenv.cc ? libc;
+
+let
+  os = stdenv.lib.optionalString;
+  majorVersion = "2.8";
+  minorVersion = "12.2";
+  version = "${majorVersion}.${minorVersion}";
+in
+
+stdenv.mkDerivation rec {
+  name = "cmake-${os useNcurses "cursesUI-"}${os useQt4 "qt4UI-"}${version}";
+
+  inherit majorVersion;
+
+  src = fetchurl {
+    url = "${meta.homepage}files/v${majorVersion}/cmake-${version}.tar.gz";
+    sha256 = "0phf295a9cby0v7zqdswr238v5aiy3rb2fs6dz39zjxbmzlp8rcc";
+  };
+
+  enableParallelBuilding = true;
+
+  patches =
+    [(fetchpatch { # see https://www.cmake.org/Bug/view.php?id=13959
+      name = "FindFreetype-2.5.patch";
+      url = "https://public.kitware.com/Bug/file/4660/0001-Support-finding-freetype2-using-pkg-config.patch";
+      sha256 = "136z63ff83hnwd247cq4m8m8164pklzyl5i2csf5h6wd8p01pdkj";
+    })] ++
+    # Don't search in non-Nix locations such as /usr, but do search in our libc.
+    [ ./search-path-2.8.patch ] ++
+    optional (stdenv.hostPlatform != stdenv.buildPlatform) (fetchurl {
+      name = "fix-darwin-cross-compile.patch";
+      url = "https://public.kitware.com/Bug/file_download.php?"
+          + "file_id=4981&type=bug";
+      sha256 = "16acmdr27adma7gs9rs0dxdiqppm15vl3vv3agy7y8s94wyh4ybv";
+    });
+
+  postPatch = ''
+    substituteInPlace Utilities/cmlibarchive/CMakeLists.txt \
+      --replace '"-framework CoreServices"' '""'
+  '';
+
+  buildInputs = [ curl expat zlib bzip2 ]
+    ++ optional useNcurses ncurses
+    ++ optional useQt4 qt4;
+
+  propagatedBuildInputs = [ ps ];
+
+  CMAKE_PREFIX_PATH = concatStringsSep ":"
+    (concatMap (p: [ (p.dev or p) (p.out or p) ]) buildInputs);
+
+  configureFlags = [
+    "--docdir=/share/doc/${name}"
+    "--mandir=/share/man"
+    "--system-libs"
+    "--no-system-libarchive"
+   ] ++ stdenv.lib.optional useQt4 "--qt-gui";
+
+  setupHook = ./setup-hook.sh;
+
+  dontUseCmakeConfigure = true;
+
+  preConfigure = with stdenv; ''
+      source $setupHook
+      fixCmakeFiles .
+      substituteInPlace Modules/Platform/UnixPaths.cmake \
+        --subst-var-by libc_bin ${getBin cc.libc} \
+        --subst-var-by libc_dev ${getDev cc.libc} \
+        --subst-var-by libc_lib ${getLib cc.libc}
+      configureFlags="--parallel=''${NIX_BUILD_CORES:-1} $configureFlags"
+    '';
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    homepage = https://cmake.org;
+    description = "Cross-Platform Makefile Generator";
+    platforms = if useQt4 then qt4.meta.platforms else stdenv.lib.platforms.unix;
+    maintainers = with stdenv.lib.maintainers; [ ];
+    license = stdenv.lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/cmake/3.2.2-cygwin.patch b/nixpkgs/pkgs/development/tools/build-managers/cmake/3.2.2-cygwin.patch
new file mode 100644
index 000000000000..982aba17e874
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/3.2.2-cygwin.patch
@@ -0,0 +1,274 @@
+--- cmake-3.2.2/Source/cmFileCommand.cxx	2015-04-13 19:09:00.000000000 +0200
++++ cmake-3.2.2/Source/ccmFileCommand.cxx	2015-06-10 11:02:27.345598700 +0200
+@@ -1179,7 +1179,7 @@
+   MatchProperties CollectMatchProperties(const char* file)
+     {
+     // Match rules are case-insensitive on some platforms.
+-#if defined(_WIN32) || defined(__APPLE__) || defined(__CYGWIN__)
++#if defined(_WIN32) || defined(__APPLE__)
+     std::string lower = cmSystemTools::LowerCase(file);
+     const char* file_to_match = lower.c_str();
+ #else
+--- cmake-3.2.2/Source/cmInstallCommand.cxx	2015-04-13 19:09:00.000000000 +0200
++++ cmake-3.2.2/Source/cmInstallCommand.cxx	2015-06-10 11:04:19.257935200 +0200
+@@ -1138,7 +1138,7 @@
+       {
+       literal_args += " REGEX \"";
+     // Match rules are case-insensitive on some platforms.
+-#if defined(_WIN32) || defined(__APPLE__) || defined(__CYGWIN__)
++#if defined(_WIN32) || defined(__APPLE__)
+       std::string regex = cmSystemTools::LowerCase(args[i]);
+ #else
+       std::string regex = args[i];
+--- cmake-3.2.2/Source/kwsys/Glob.cxx	2015-04-13 19:09:00.000000000 +0200
++++ cmake-3.2.2/Source/kwsys/Glob.cxx	2015-06-10 11:05:51.602674000 +0200
+@@ -37,7 +37,7 @@
+ #include <string.h>
+ namespace KWSYS_NAMESPACE
+ {
+-#if defined(_WIN32) || defined(__APPLE__) || defined(__CYGWIN__)
++#if defined(_WIN32) || defined(__APPLE__)
+ // On Windows and apple, no difference between lower and upper case
+ # define KWSYS_GLOB_CASE_INDEPENDENT
+ #endif
+--- cmake-3.2.2/Source/kwsys/SystemInformation.cxx	2015-04-13 19:09:00.000000000 +0200
++++ cmake-3.2.2/Source/kwsys/SystemInformation.cxx	2015-06-10 11:13:00.308303500 +0200
+@@ -911,7 +911,7 @@
+ // Hide implementation details in an anonymous namespace.
+ namespace {
+ // *****************************************************************************
+-#if defined(__linux) || defined(__APPLE__)
++#if defined(__linux) || defined(__APPLE__) || defined(__CYGWIN__)
+ int LoadLines(
+       FILE *file,
+       kwsys_stl::vector<kwsys_stl::string> &lines)
+@@ -947,7 +947,7 @@
+   return nRead;
+ }
+ 
+-# if defined(__linux)
++# if defined(__linux) || defined(__CYGWIN__)
+ // *****************************************************************************
+ int LoadLines(
+       const char *fileName,
+@@ -986,7 +986,7 @@
+ }
+ #endif
+ 
+-#if defined(__linux)
++#if defined(__linux) || defined(__CYGWIN__)
+ // ****************************************************************************
+ template<typename T>
+ int GetFieldsFromFile(
+@@ -3132,7 +3132,6 @@
+     pos = buffer.find("processor\t",pos+1);
+     }
+ 
+-#ifdef __linux
+   // Find the largest physical id.
+   int maxId = -1;
+   kwsys_stl::string idc =
+@@ -3165,14 +3164,6 @@
+             atoi(this->ExtractValueFromCpuInfoFile(buffer,"ncpus active").c_str());
+     }
+ 
+-#else // __CYGWIN__
+-  // does not have "physical id" entries, neither "cpu cores"
+-  // this has to be fixed for hyper-threading.
+-  kwsys_stl::string cpucount =
+-    this->ExtractValueFromCpuInfoFile(buffer,"cpu count");
+-  this->NumberOfPhysicalCPU=
+-    this->NumberOfLogicalCPU = atoi(cpucount.c_str());
+-#endif
+   // gotta have one, and if this is 0 then we get a / by 0n
+   // better to have a bad answer than a crash
+   if(this->NumberOfPhysicalCPU <= 0)
+@@ -3370,7 +3361,7 @@
+   GlobalMemoryStatusEx(&statex);
+   return statex.ullTotalPhys/1024;
+ # endif
+-#elif defined(__linux)
++#elif defined(__linux) || defined(__CYGWIN__)
+   SystemInformation::LongLong memTotal=0;
+   int ierr=GetFieldFromFile("/proc/meminfo","MemTotal:",memTotal);
+   if (ierr)
+@@ -3501,7 +3492,7 @@
+   GlobalMemoryStatusEx(&statex);
+   return (statex.ullTotalPhys - statex.ullAvailPhys)/1024;
+ # endif
+-#elif defined(__linux)
++#elif defined(__linux) || defined(__CYGWIN__)
+   const char *names[3]={"MemTotal:","MemFree:",NULL};
+   SystemInformation::LongLong values[2]={SystemInformation::LongLong(0)};
+   int ierr=GetFieldsFromFile("/proc/meminfo",names,values);
+@@ -3560,7 +3551,7 @@
+     return -2;
+     }
+   return pmc.WorkingSetSize/1024;
+-#elif defined(__linux)
++#elif defined(__linux) || defined(__CYGWIN__)
+   SystemInformation::LongLong memUsed=0;
+   int ierr=GetFieldFromFile("/proc/self/status","VmRSS:",memUsed);
+   if (ierr)
+@@ -3612,7 +3603,7 @@
+ {
+ #if defined(_WIN32)
+   return GetCurrentProcessId();
+-#elif defined(__linux) || defined(__APPLE__)
++#elif defined(__linux) || defined(__APPLE__) || defined(__CYGWIN__)
+   return getpid();
+ #else
+   return -1;
+--- cmake-3.2.2/Source/kwsys/SystemTools.cxx	2015-04-13 19:09:00.000000000 +0200
++++ cmake-3.2.2/Source/kwsys/SystemTools.cxx	2015-06-10 11:21:58.980443200 +0200
+@@ -93,19 +93,12 @@
+ # if defined(_MSC_VER) && _MSC_VER >= 1800
+ #  define KWSYS_WINDOWS_DEPRECATED_GetVersionEx
+ # endif
+-#elif defined (__CYGWIN__)
+-# include <windows.h>
+-# undef _WIN32
+ #endif
+ 
+ #if !KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H
+ extern char **environ;
+ #endif
+ 
+-#ifdef __CYGWIN__
+-# include <sys/cygwin.h>
+-#endif
+-
+ // getpwnam doesn't exist on Windows and Cray Xt3/Catamount
+ // same for TIOCGWINSZ
+ #if defined(_WIN32) || defined (__LIBCATAMOUNT__)
+@@ -1148,15 +1141,7 @@
+     {
+     return false;
+     }
+-#if defined(__CYGWIN__)
+-  // Convert filename to native windows path if possible.
+-  char winpath[MAX_PATH];
+-  if(SystemTools::PathCygwinToWin32(filename.c_str(), winpath))
+-    {
+-    return (GetFileAttributesA(winpath) != INVALID_FILE_ATTRIBUTES);
+-    }
+-  return access(filename.c_str(), R_OK) == 0;
+-#elif defined(_WIN32)
++#if defined(_WIN32)
+   return (GetFileAttributesW(
+             SystemTools::ConvertToWindowsExtendedPath(filename).c_str())
+           != INVALID_FILE_ATTRIBUTES);
+@@ -1190,28 +1175,6 @@
+ }
+ 
+ //----------------------------------------------------------------------------
+-#ifdef __CYGWIN__
+-bool SystemTools::PathCygwinToWin32(const char *path, char *win32_path)
+-{
+-  SystemToolsTranslationMap::iterator i =
+-    SystemTools::Cyg2Win32Map->find(path);
+-
+-  if (i != SystemTools::Cyg2Win32Map->end())
+-    {
+-    strncpy(win32_path, i->second.c_str(), MAX_PATH);
+-    }
+-  else
+-    {
+-    if(cygwin_conv_path(CCP_POSIX_TO_WIN_A, path, win32_path, MAX_PATH) != 0)
+-      {
+-      win32_path[0] = 0;
+-      }
+-    SystemToolsTranslationMap::value_type entry(path, win32_path);
+-    SystemTools::Cyg2Win32Map->insert(entry);
+-    }
+-  return win32_path[0] != 0;
+-}
+-#endif
+ 
+ bool SystemTools::Touch(const kwsys_stl::string& filename, bool create)
+ {
+@@ -4307,7 +4270,7 @@
+ 
+ bool SystemTools::FileIsFullPath(const char* in_name, size_t len)
+ {
+-#if defined(_WIN32) || defined(__CYGWIN__)
++#if defined(_WIN32)
+   // On Windows, the name must be at least two characters long.
+   if(len < 2)
+     {
+@@ -5078,9 +5041,6 @@
+ static unsigned int SystemToolsManagerCount;
+ SystemToolsTranslationMap *SystemTools::TranslationMap;
+ SystemToolsTranslationMap *SystemTools::LongPathMap;
+-#ifdef __CYGWIN__
+-SystemToolsTranslationMap *SystemTools::Cyg2Win32Map;
+-#endif
+ 
+ // SystemToolsManager manages the SystemTools singleton.
+ // SystemToolsManager should be included in any translation unit
+@@ -5126,9 +5086,6 @@
+   // Allocate the translation map first.
+   SystemTools::TranslationMap = new SystemToolsTranslationMap;
+   SystemTools::LongPathMap = new SystemToolsTranslationMap;
+-#ifdef __CYGWIN__
+-  SystemTools::Cyg2Win32Map = new SystemToolsTranslationMap;
+-#endif
+ 
+   // Add some special translation paths for unix.  These are not added
+   // for windows because drive letters need to be maintained.  Also,
+@@ -5183,9 +5140,6 @@
+ {
+   delete SystemTools::TranslationMap;
+   delete SystemTools::LongPathMap;
+-#ifdef __CYGWIN__
+-  delete SystemTools::Cyg2Win32Map;
+-#endif
+ }
+ 
+ 
+--- cmake-3.2.2/Source/kwsys/SystemTools.hxx.in	2015-04-13 19:09:00.000000000 +0200
++++ cmake-3.2.2/Source/kwsys/SystemTools.hxx.in	2015-06-10 11:24:24.271286600 +0200
+@@ -298,15 +298,6 @@
+   static bool FileExists(const kwsys_stl::string& filename);
+ 
+   /**
+-   * Converts Cygwin path to Win32 path. Uses dictionary container for
+-   * caching and calls to cygwin_conv_to_win32_path from Cygwin dll
+-   * for actual translation.  Returns true on success, else false.
+-   */
+-#ifdef __CYGWIN__
+-  static bool PathCygwinToWin32(const char *path, char *win32_path);
+-#endif
+-
+-  /**
+    * Return file length
+    */
+   static unsigned long FileLength(const kwsys_stl::string& filename);
+@@ -942,9 +933,6 @@
+    */
+   static SystemToolsTranslationMap *TranslationMap;
+   static SystemToolsTranslationMap *LongPathMap;
+-#ifdef __CYGWIN__
+-  static SystemToolsTranslationMap *Cyg2Win32Map;
+-#endif
+   friend class SystemToolsManager;
+ };
+ 
+--- cmake-3.2.2/Modules/FindCurses.cmake	2015-04-13 19:09:00.000000000 +0200
++++ cmake-3.2.2/Modules/FindCurses.cmake	2015-06-10 12:10:19.682030300 +0200
+@@ -60,15 +60,6 @@
+ if(CURSES_NCURSES_LIBRARY  AND ((NOT CURSES_CURSES_LIBRARY) OR CURSES_NEED_NCURSES))
+   set(CURSES_USE_NCURSES TRUE)
+ endif()
+-# http://cygwin.com/ml/cygwin-announce/2010-01/msg00002.html
+-# cygwin ncurses stopped providing curses.h symlinks see above
+-# message.  Cygwin is an ncurses package, so force ncurses on
+-# cygwin if the curses.h is missing
+-if(CYGWIN)
+-  if(NOT EXISTS /usr/include/curses.h)
+-    set(CURSES_USE_NCURSES TRUE)
+-  endif()
+-endif()
+ 
+ 
+ # Not sure the logic is correct here.
diff --git a/nixpkgs/pkgs/development/tools/build-managers/cmake/application-services.patch b/nixpkgs/pkgs/development/tools/build-managers/cmake/application-services.patch
new file mode 100644
index 000000000000..2107dcdfbc66
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/application-services.patch
@@ -0,0 +1,49 @@
+diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
+index 8aff8f6..af1852d 100644
+--- a/Source/CMakeLists.txt
++++ b/Source/CMakeLists.txt
+@@ -791,12 +791,11 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR MATCHES "sparc"
+   endif()
+ endif()
+ 
+ # On Apple we need CoreFoundation and CoreServices
+ if(APPLE)
+   target_link_libraries(CMakeLib "-framework CoreFoundation")
+-  target_link_libraries(CMakeLib "-framework CoreServices")
+ endif()
+ 
+ if(WIN32 AND NOT UNIX)
+   # We need the rpcrt4 library on Windows.
+   # We need the crypt32 library on Windows for crypto/cert APIs.
+diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
+index e353a37..b06f842 100644
+--- a/Source/cmGlobalXCodeGenerator.cxx
++++ b/Source/cmGlobalXCodeGenerator.cxx
+@@ -35,11 +35,6 @@
+ 
+ struct cmLinkImplementation;
+ 
+-#if defined(CMAKE_BUILD_WITH_CMAKE) && defined(__APPLE__)
+-#  define HAVE_APPLICATION_SERVICES
+-#  include <ApplicationServices/ApplicationServices.h>
+-#endif
+-
+ #if defined(CMAKE_BUILD_WITH_CMAKE)
+ #  include "cmXMLParser.h"
+ 
+diff --git a/Utilities/cmlibarchive/CMakeLists.txt b/Utilities/cmlibarchive/CMakeLists.txt
+index d7af6e2..d4808fc 100644
+--- a/Utilities/cmlibarchive/CMakeLists.txt
++++ b/Utilities/cmlibarchive/CMakeLists.txt
+@@ -1662,11 +1662,6 @@ IF(MSVC)
+   ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE)
+ ENDIF(MSVC)
+ 
+-# We need CoreServices on Mac OS.
+-IF(APPLE)
+-  LIST(APPEND ADDITIONAL_LIBS "-framework CoreServices")
+-ENDIF(APPLE)
+-
+ add_subdirectory(libarchive)
+ 
+ install(FILES COPYING DESTINATION ${CMAKE_DOC_DIR}/cmlibarchive)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/cmake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/cmake/default.nix
new file mode 100644
index 000000000000..721015f0c7c4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/default.nix
@@ -0,0 +1,118 @@
+{ stdenv, fetchurl, fetchpatch, pkgconfig
+, bzip2, curl, expat, libarchive, xz, zlib, libuv, rhash
+, buildPackages
+# darwin attributes
+, ps
+, isBootstrap ? false
+, useSharedLibraries ? (!isBootstrap && !stdenv.isCygwin)
+, useNcurses ? false, ncurses
+, useQt4 ? false, qt4
+, withQt5 ? false, qtbase
+}:
+
+assert withQt5 -> useQt4 == false;
+assert useQt4 -> withQt5 == false;
+
+with stdenv.lib;
+
+let
+  os = stdenv.lib.optionalString;
+  majorVersion = "3.13";
+  minorVersion = "4";
+  # from https://cmake.org/files/v3.13/cmake-3.13.4-SHA-256.txt for cmake-3.13.4.tar.gz
+  sha256 = "fdd928fee35f472920071d1c7f1a6a2b72c9b25e04f7a37b409349aef3f20e9b";
+  version = "${majorVersion}.${minorVersion}";
+in
+
+stdenv.mkDerivation rec {
+  name = "cmake-${os isBootstrap "boot-"}${os useNcurses "cursesUI-"}${os withQt5 "qt5UI-"}${os useQt4 "qt4UI-"}${version}";
+
+  inherit majorVersion;
+
+  src = fetchurl {
+    url = "${meta.homepage}files/v${majorVersion}/cmake-${version}.tar.gz";
+    inherit sha256;
+  };
+
+  patches = [
+    # Don't search in non-Nix locations such as /usr, but do search in our libc.
+    ./search-path.patch
+
+    # Don't depend on frameworks.
+    ./application-services.patch
+
+    # Derived from https://github.com/libuv/libuv/commit/1a5d4f08238dd532c3718e210078de1186a5920d
+    ./libuv-application-services.patch
+  ] ++ optional stdenv.isCygwin ./3.2.2-cygwin.patch;
+
+  outputs = [ "out" ];
+  setOutputFlags = false;
+
+  setupHook = ./setup-hook.sh;
+
+  buildInputs =
+    [ setupHook pkgconfig ]
+    ++ optionals useSharedLibraries [ bzip2 curl expat libarchive xz zlib libuv rhash ]
+    ++ optional useNcurses ncurses
+    ++ optional useQt4 qt4
+    ++ optional withQt5 qtbase;
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  propagatedBuildInputs = optional stdenv.isDarwin ps;
+
+  preConfigure = ''
+    fixCmakeFiles .
+    substituteInPlace Modules/Platform/UnixPaths.cmake \
+      --subst-var-by libc_bin ${getBin stdenv.cc.libc} \
+      --subst-var-by libc_dev ${getDev stdenv.cc.libc} \
+      --subst-var-by libc_lib ${getLib stdenv.cc.libc}
+    substituteInPlace Modules/FindCxxTest.cmake \
+      --replace "$""{PYTHON_EXECUTABLE}" ${stdenv.shell}
+    # BUILD_CC and BUILD_CXX are used to bootstrap cmake
+    configureFlags="--parallel=''${NIX_BUILD_CORES:-1} CC=$BUILD_CC CXX=$BUILD_CXX $configureFlags"
+  '';
+
+  configureFlags = [
+    "--docdir=share/doc/${name}"
+  ] ++ (if useSharedLibraries then [ "--no-system-jsoncpp" "--system-libs" ] else [ "--no-system-libs" ]) # FIXME: cleanup
+    ++ optional (useQt4 || withQt5) "--qt-gui"
+    ++ [
+    "--"
+    # We should set the proper `CMAKE_SYSTEM_NAME`.
+    # http://www.cmake.org/Wiki/CMake_Cross_Compiling
+    #
+    # Unfortunately cmake seems to expect absolute paths for ar, ranlib, and
+    # strip. Otherwise they are taken to be relative to the source root of the
+    # package being built.
+    "-DCMAKE_CXX_COMPILER=${stdenv.cc.targetPrefix}c++"
+    "-DCMAKE_C_COMPILER=${stdenv.cc.targetPrefix}cc"
+    "-DCMAKE_AR=${getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ar"
+    "-DCMAKE_RANLIB=${getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ranlib"
+    "-DCMAKE_STRIP=${getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}strip"
+  ]
+    # Avoid depending on frameworks.
+    ++ optional (!useNcurses) "-DBUILD_CursesDialog=OFF";
+
+  # make install attempts to use the just-built cmake
+  preInstall = optional (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    sed -i 's|bin/cmake|${buildPackages.cmake}/bin/cmake|g' Makefile
+  '';
+
+  dontUseCmakeConfigure = true;
+  enableParallelBuilding = true;
+
+  # This isn't an autoconf configure script; triples are passed via
+  # CMAKE_SYSTEM_NAME, etc.
+  configurePlatforms = [ ];
+
+  doCheck = false; # fails
+
+  meta = with stdenv.lib; {
+    homepage = http://www.cmake.org/;
+    description = "Cross-Platform Makefile Generator";
+    platforms = if useQt4 then qt4.meta.platforms else platforms.all;
+    maintainers = with maintainers; [ ttuegel lnl7 ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/cmake/libuv-application-services.patch b/nixpkgs/pkgs/development/tools/build-managers/cmake/libuv-application-services.patch
new file mode 100644
index 000000000000..08899f5c241f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/libuv-application-services.patch
@@ -0,0 +1,83 @@
+diff -ur cmake-3.12.1/Utilities/cmlibuv/CMakeLists.txt cmake-3.12.1-patched/Utilities/cmlibuv/CMakeLists.txt
+--- cmake-3.12.1/Utilities/cmlibuv/CMakeLists.txt	2018-08-09 21:14:08.000000000 +0900
++++ cmake-3.12.1-patched/Utilities/cmlibuv/CMakeLists.txt	2018-08-13 10:14:53.000000000 +0900
+@@ -173,6 +173,22 @@
+     src/unix/kqueue.c
+     src/unix/proctitle.c
+     )
++
++  include(CheckIncludeFile)
++
++  check_include_file("ApplicationServices/ApplicationServices.h" HAVE_ApplicationServices)
++  if (HAVE_ApplicationServices)
++    list(APPEND uv_defines
++      HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H=1
++      )
++  endif()
++
++  check_include_file("CoreServices/CoreServices.h" HAVE_CoreServices)
++  if (HAVE_CoreServices)
++    list(APPEND uv_defines
++      HAVE_CORESERVICES_CORESERVICES_H=1
++      )
++  endif()
+ endif()
+ 
+ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+diff -ur cmake-3.12.1/Utilities/cmlibuv/src/unix/darwin-proctitle.c cmake-3.12.1-patched/Utilities/cmlibuv/src/unix/darwin-proctitle.c
+--- cmake-3.12.1/Utilities/cmlibuv/src/unix/darwin-proctitle.c	2018-08-09 21:14:08.000000000 +0900
++++ cmake-3.12.1-patched/Utilities/cmlibuv/src/unix/darwin-proctitle.c	2018-08-13 10:01:29.000000000 +0900
+@@ -26,9 +26,7 @@
+ #include <stdlib.h>
+ #include <string.h>
+ 
+-#include <TargetConditionals.h>
+-
+-#if !TARGET_OS_IPHONE
++#if HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H
+ # include <CoreFoundation/CoreFoundation.h>
+ # include <ApplicationServices/ApplicationServices.h>
+ #endif
+@@ -58,7 +56,7 @@
+ 
+ 
+ int uv__set_process_title(const char* title) {
+-#if TARGET_OS_IPHONE
++#if !HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H
+   return uv__pthread_setname_np(title);
+ #else
+   CFStringRef (*pCFStringCreateWithCString)(CFAllocatorRef,
+@@ -205,5 +203,5 @@
+     dlclose(application_services_handle);
+ 
+   return err;
+-#endif  /* !TARGET_OS_IPHONE */
++#endif  /* HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H */
+ }
+diff -ur cmake-3.12.1/Utilities/cmlibuv/src/unix/fsevents.c cmake-3.12.1-patched/Utilities/cmlibuv/src/unix/fsevents.c
+--- cmake-3.12.1/Utilities/cmlibuv/src/unix/fsevents.c	2018-08-09 21:14:08.000000000 +0900
++++ cmake-3.12.1-patched/Utilities/cmlibuv/src/unix/fsevents.c	2018-08-13 10:01:29.000000000 +0900
+@@ -21,7 +21,7 @@
+ #include "uv.h"
+ #include "internal.h"
+ 
+-#if TARGET_OS_IPHONE
++#if !HAVE_CORESERVICES_CORESERVICES_H
+ 
+ /* iOS (currently) doesn't provide the FSEvents-API (nor CoreServices) */
+ 
+@@ -38,7 +38,7 @@
+ void uv__fsevents_loop_delete(uv_loop_t* loop) {
+ }
+ 
+-#else /* TARGET_OS_IPHONE */
++#else /* !HAVE_CORESERVICES_CORESERVICES_H */
+ 
+ #include <dlfcn.h>
+ #include <assert.h>
+@@ -916,4 +916,4 @@
+   return 0;
+ }
+ 
+-#endif /* TARGET_OS_IPHONE */
++#endif /* !HAVE_CORESERVICES_CORESERVICES_H */
diff --git a/nixpkgs/pkgs/development/tools/build-managers/cmake/search-path-2.8.patch b/nixpkgs/pkgs/development/tools/build-managers/cmake/search-path-2.8.patch
new file mode 100644
index 000000000000..9fc949661686
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/search-path-2.8.patch
@@ -0,0 +1,92 @@
+diff -ru3 cmake-2.8.12.2/Modules/Platform/Linux.cmake cmake-2.8.12.2-new/Modules/Platform/Linux.cmake
+--- cmake-2.8.12.2/Modules/Platform/Linux.cmake	2014-01-16 21:15:08.000000000 +0400
++++ cmake-2.8.12.2-new/Modules/Platform/Linux.cmake	2016-04-13 22:00:32.928575740 +0300
+@@ -36,22 +36,11 @@
+   # checking the platform every time.  This option is advanced enough
+   # that only package maintainers should need to adjust it.  They are
+   # capable of providing a setting on the command line.
+-  if(EXISTS "/etc/debian_version")
+-    set(CMAKE_INSTALL_SO_NO_EXE 1 CACHE INTERNAL
+-      "Install .so files without execute permission.")
+-  else()
+-    set(CMAKE_INSTALL_SO_NO_EXE 0 CACHE INTERNAL
+-      "Install .so files without execute permission.")
+-  endif()
++  set(CMAKE_INSTALL_SO_NO_EXE 0 CACHE INTERNAL
++    "Install .so files without execute permission.")
+ endif()
+ 
+ # Match multiarch library directory names.
+ set(CMAKE_LIBRARY_ARCHITECTURE_REGEX "[a-z0-9_]+(-[a-z0-9_]+)?-linux-gnu[a-z0-9_]*")
+ 
+ include(Platform/UnixPaths)
+-
+-# Debian has lib64 paths only for compatibility so they should not be
+-# searched.
+-if(EXISTS "/etc/debian_version")
+-  set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS FALSE)
+-endif()
+diff -ru3 cmake-2.8.12.2/Modules/Platform/UnixPaths.cmake cmake-2.8.12.2-new/Modules/Platform/UnixPaths.cmake
+--- cmake-2.8.12.2/Modules/Platform/UnixPaths.cmake	2014-01-16 21:15:08.000000000 +0400
++++ cmake-2.8.12.2-new/Modules/Platform/UnixPaths.cmake	2016-04-14 00:09:10.106362636 +0300
+@@ -32,9 +32,6 @@
+ # List common installation prefixes.  These will be used for all
+ # search types.
+ list(APPEND CMAKE_SYSTEM_PREFIX_PATH
+-  # Standard
+-  /usr/local /usr /
+-
+   # CMake install location
+   "${_CMAKE_INSTALL_DIR}"
+ 
+@@ -44,44 +41,26 @@
+ 
+ # List common include file locations not under the common prefixes.
+ list(APPEND CMAKE_SYSTEM_INCLUDE_PATH
+-  # Windows API on Cygwin
+-  /usr/include/w32api
+-
+-  # X11
+-  /usr/X11R6/include /usr/include/X11
+-
+-  # Other
+-  /usr/pkg/include
+-  /opt/csw/include /opt/include
+-  /usr/openwin/include
++  @libc_dev@/include
+   )
+ 
+ list(APPEND CMAKE_SYSTEM_LIBRARY_PATH
+-  # Windows API on Cygwin
+-  /usr/lib/w32api
+-
+-  # X11
+-  /usr/X11R6/lib /usr/lib/X11
+-
+-  # Other
+-  /usr/pkg/lib
+-  /opt/csw/lib /opt/lib
+-  /usr/openwin/lib
++  @libc_lib@/lib
+   )
+ 
+ list(APPEND CMAKE_SYSTEM_PROGRAM_PATH
+-  /usr/pkg/bin
++  @libc_bin@/bin
+   )
+ 
+ list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
+-  /lib /usr/lib /usr/lib32 /usr/lib64
++  @libc_lib@/lib
+   )
+ 
+ list(APPEND CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES
+-  /usr/include
++  @libc_dev@/include
+   )
+ list(APPEND CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES
+-  /usr/include
++  @libc_dev@/include
+   )
+ 
+ # Enable use of lib64 search path variants by default.
diff --git a/nixpkgs/pkgs/development/tools/build-managers/cmake/search-path.patch b/nixpkgs/pkgs/development/tools/build-managers/cmake/search-path.patch
new file mode 100644
index 000000000000..6213138402b1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/search-path.patch
@@ -0,0 +1,62 @@
+diff -ur cmake-3.9.1/Modules/Platform/UnixPaths.cmake cmake-3.9.1-mod/Modules/Platform/UnixPaths.cmake
+--- cmake-3.9.1/Modules/Platform/UnixPaths.cmake	2017-08-10 13:36:32.000000000 +0000
++++ cmake-3.9.1-mod/Modules/Platform/UnixPaths.cmake	2017-09-03 01:24:31.901473539 +0000
+@@ -22,9 +22,6 @@
+ # List common installation prefixes.  These will be used for all
+ # search types.
+ list(APPEND CMAKE_SYSTEM_PREFIX_PATH
+-  # Standard
+-  /usr/local /usr /
+-
+   # CMake install location
+   "${_CMAKE_INSTALL_DIR}"
+   )
+@@ -43,31 +40,26 @@
+ 
+ # Non "standard" but common install prefixes
+ list(APPEND CMAKE_SYSTEM_PREFIX_PATH
+-  /usr/X11R6
+-  /usr/pkg
+-  /opt
+   )
+ 
+ # List common include file locations not under the common prefixes.
+ list(APPEND CMAKE_SYSTEM_INCLUDE_PATH
+-  # X11
+-  /usr/include/X11
++  @libc_dev@/include
+   )
+ 
+ list(APPEND CMAKE_SYSTEM_LIBRARY_PATH
+-  # X11
+-  /usr/lib/X11
++  @libc_lib@/lib
+   )
+ 
+ list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
+-  /lib /lib32 /lib64 /usr/lib /usr/lib32 /usr/lib64
++  @libc_lib@/lib
+   )
+ 
+ list(APPEND CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES
+-  /usr/include
++  @libc_dev@/include
+   )
+ list(APPEND CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES
+-  /usr/include
++  @libc_dev@/include
+   )
+ 
+ # Enable use of lib32 and lib64 search path variants by default.
+diff -ur cmake-3.9.1/Modules/Platform/WindowsPaths.cmake cmake-3.9.1-mod/Modules/Platform/WindowsPaths.cmake
+--- cmake-3.9.1/Modules/Platform/WindowsPaths.cmake	2017-08-10 13:36:32.000000000 +0000
++++ cmake-3.9.1-mod/Modules/Platform/WindowsPaths.cmake	2017-09-03 01:19:32.808355986 +0000
+@@ -66,7 +66,7 @@
+ 
+ if(CMAKE_CROSSCOMPILING AND NOT CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
+   # MinGW (useful when cross compiling from linux with CMAKE_FIND_ROOT_PATH set)
+-  list(APPEND CMAKE_SYSTEM_PREFIX_PATH /)
++  # list(APPEND CMAKE_SYSTEM_PREFIX_PATH /)
+ endif()
+ 
+ list(APPEND CMAKE_SYSTEM_INCLUDE_PATH
diff --git a/nixpkgs/pkgs/development/tools/build-managers/cmake/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/cmake/setup-hook.sh
new file mode 100755
index 000000000000..8c6b11bd73e7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/setup-hook.sh
@@ -0,0 +1,141 @@
+addCMakeParams() {
+    addToSearchPath CMAKE_PREFIX_PATH $1
+}
+
+fixCmakeFiles() {
+    # Replace occurences of /usr and /opt by /var/empty.
+    echo "fixing cmake files..."
+    find "$1" \( -type f -name "*.cmake" -o -name "*.cmake.in" -o -name CMakeLists.txt \) -print |
+        while read fn; do
+            sed -e 's^/usr\([ /]\|$\)^/var/empty\1^g' -e 's^/opt\([ /]\|$\)^/var/empty\1^g' < "$fn" > "$fn.tmp"
+            mv "$fn.tmp" "$fn"
+        done
+}
+
+cmakeConfigurePhase() {
+    runHook preConfigure
+
+    export CTEST_OUTPUT_ON_FAILURE=1
+    if [ -n "${enableParallelChecking-1}" ]; then
+        export CTEST_PARALLEL_LEVEL=$NIX_BUILD_CORES
+    fi
+
+    if [ -z "$dontFixCmake" ]; then
+        fixCmakeFiles .
+    fi
+
+    if [ -z "$dontUseCmakeBuildDir" ]; then
+        mkdir -p build
+        cd build
+        cmakeDir=${cmakeDir:-..}
+    fi
+
+    if [ -z "$dontAddPrefix" ]; then
+        cmakeFlags="-DCMAKE_INSTALL_PREFIX=$prefix $cmakeFlags"
+    fi
+
+    # We should set the proper `CMAKE_SYSTEM_NAME`.
+    # http://www.cmake.org/Wiki/CMake_Cross_Compiling
+    #
+    # Unfortunately cmake seems to expect absolute paths for ar, ranlib, and
+    # strip. Otherwise they are taken to be relative to the source root of the
+    # package being built.
+    cmakeFlags="-DCMAKE_CXX_COMPILER=$CXX $cmakeFlags"
+    cmakeFlags="-DCMAKE_C_COMPILER=$CC $cmakeFlags"
+    cmakeFlags="-DCMAKE_AR=$(command -v $AR) $cmakeFlags"
+    cmakeFlags="-DCMAKE_RANLIB=$(command -v $RANLIB) $cmakeFlags"
+    cmakeFlags="-DCMAKE_STRIP=$(command -v $STRIP) $cmakeFlags"
+
+    # on macOS we want to prefer Unix-style headers to Frameworks
+    # because we usually do not package the framework
+    cmakeFlags="-DCMAKE_FIND_FRAMEWORK=last $cmakeFlags"
+
+    # we never want to use the global macOS SDK
+    cmakeFlags="-DCMAKE_OSX_SYSROOT= $cmakeFlags"
+
+    # disable OSX deployment target
+    # we don't want our binaries to have a "minimum" OSX version
+    cmakeFlags="-DCMAKE_OSX_DEPLOYMENT_TARGET= $cmakeFlags"
+
+    # correctly detect our clang compiler
+    cmakeFlags="-DCMAKE_POLICY_DEFAULT_CMP0025=NEW $cmakeFlags"
+
+    # This installs shared libraries with a fully-specified install
+    # name. By default, cmake installs shared libraries with just the
+    # basename as the install name, which means that, on Darwin, they
+    # can only be found by an executable at runtime if the shared
+    # libraries are in a system path or in the same directory as the
+    # executable. This flag makes the shared library accessible from its
+    # nix/store directory.
+    cmakeFlags="-DCMAKE_INSTALL_NAME_DIR=${!outputLib}/lib $cmakeFlags"
+    cmakeFlags="-DCMAKE_INSTALL_LIBDIR=${!outputLib}/lib $cmakeFlags"
+    cmakeFlags="-DCMAKE_INSTALL_INCLUDEDIR=${!outputDev}/include $cmakeFlags"
+
+    # Don’t build tests when doCheck = false
+    if [ -z "$doCheck" ]; then
+        cmakeFlags="-DBUILD_TESTING=OFF $cmakeFlags"
+    fi
+
+    # Avoid cmake resetting the rpath of binaries, on make install
+    # And build always Release, to ensure optimisation flags
+    cmakeFlags="-DCMAKE_BUILD_TYPE=${cmakeBuildType:-Release} -DCMAKE_SKIP_BUILD_RPATH=ON $cmakeFlags"
+
+    # Disable user package registry to avoid potential side effects
+    # and unecessary attempts to access non-existent home folder
+    # https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#disabling-the-package-registry
+    cmakeFlags="-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON $cmakeFlags"
+    cmakeFlags="-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON $cmakeFlags"
+    cmakeFlags="-DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON $cmakeFlags"
+
+    if [ "$buildPhase" = ninjaBuildPhase ]; then
+        cmakeFlags="-GNinja $cmakeFlags"
+    fi
+
+    echo "cmake flags: $cmakeFlags ${cmakeFlagsArray[@]}"
+
+    cmake ${cmakeDir:-.} $cmakeFlags "${cmakeFlagsArray[@]}"
+
+    if ! [[ -v enableParallelBuilding ]]; then
+        enableParallelBuilding=1
+        echo "cmake: enabled parallel building"
+    fi
+
+    runHook postConfigure
+}
+
+if [ -z "$dontUseCmakeConfigure" -a -z "$configurePhase" ]; then
+    setOutputFlags=
+    configurePhase=cmakeConfigurePhase
+fi
+
+addEnvHooks "$targetOffset" addCMakeParams
+
+makeCmakeFindLibs(){
+  isystem_seen=
+  for flag in $NIX_CFLAGS_COMPILE $NIX_LDFLAGS; do
+    if test -n "$isystem_seen" && test -d "$flag"; then
+      isystem_seen=
+      export CMAKE_INCLUDE_PATH="$CMAKE_INCLUDE_PATH${CMAKE_INCLUDE_PATH:+:}${flag}"
+    else
+      isystem_seen=
+      case $flag in
+        -I*)
+          export CMAKE_INCLUDE_PATH="$CMAKE_INCLUDE_PATH${CMAKE_INCLUDE_PATH:+:}${flag:2}"
+          ;;
+        -L*)
+          export CMAKE_LIBRARY_PATH="$CMAKE_LIBRARY_PATH${CMAKE_LIBRARY_PATH:+:}${flag:2}"
+          ;;
+        -F*)
+          export CMAKE_FRAMEWORK_PATH="$CMAKE_FRAMEWORK_PATH${CMAKE_FRAMEWORK_PATH:+:}${flag:2}"
+          ;;
+        -isystem)
+          isystem_seen=1
+          ;;
+      esac
+    fi
+  done
+}
+
+# not using setupHook, because it could be a setupHook adding additional
+# include flags to NIX_CFLAGS_COMPILE
+postHooks+=(makeCmakeFindLibs)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/colormake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/colormake/default.nix
new file mode 100644
index 000000000000..9f4cb366e239
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/colormake/default.nix
@@ -0,0 +1,25 @@
+{stdenv, fetchgit, perl}:
+
+stdenv.mkDerivation rec {
+  name = "colormake-${version}";
+  version = "2.1.0";
+
+  buildInputs = [perl];
+
+  src = fetchgit {
+    url = https://github.com/pagekite/Colormake.git;
+    rev = "66544f40d";
+    sha256 = "8e714c5540305d169989d9387dbac47b8b9fb2cfb424af7bcd412bfe684dc6d7";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -fa colormake.pl colormake colormake-short clmake clmake-short $out/bin
+  '';
+
+  meta = {
+    description = "Simple wrapper around make to colorize the output";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/conan/default.nix b/nixpkgs/pkgs/development/tools/build-managers/conan/default.nix
new file mode 100644
index 000000000000..9c5d22ee07b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/conan/default.nix
@@ -0,0 +1,92 @@
+{ lib, python3, git }:
+
+let newPython = python3.override {
+  packageOverrides = self: super: {
+    distro = super.distro.overridePythonAttrs (oldAttrs: rec {
+      version = "1.1.0";
+      src = oldAttrs.src.override {
+        inherit version;
+        sha256 = "1vn1db2akw98ybnpns92qi11v94hydwp130s8753k6ikby95883j";
+      };
+    });
+    node-semver = super.node-semver.overridePythonAttrs (oldAttrs: rec {
+      version = "0.6.1";
+      src = oldAttrs.src.override {
+        inherit version;
+        sha256 = "1dv6mjsm67l1razcgmq66riqmsb36wns17mnipqr610v0z0zf5j0";
+      };
+    });
+    future = super.future.overridePythonAttrs (oldAttrs: rec {
+      version = "0.16.0";
+      src = oldAttrs.src.override {
+        inherit version;
+        sha256 = "1nzy1k4m9966sikp0qka7lirh8sqrsyainyf8rk97db7nwdfv773";
+      };
+    });
+    tqdm = super.tqdm.overridePythonAttrs (oldAttrs: rec {
+      version = "4.28.1";
+      src = oldAttrs.src.override {
+        inherit version;
+        sha256 = "1fyybgbmlr8ms32j7h76hz5g9xc6nf0644mwhc40a0s5k14makav";
+      };
+    });
+    pluginbase = super.pluginbase.overridePythonAttrs (oldAttrs: rec {
+      version = "0.7";
+      src = oldAttrs.src.override {
+        inherit version;
+        sha256 = "c0abe3218b86533cca287e7057a37481883c07acef7814b70583406938214cc8";
+      };
+    });
+    pyyaml = super.pyyaml.overridePythonAttrs (oldAttrs: rec {
+      version = "3.13";
+      src = oldAttrs.src.override {
+        inherit version;
+        sha256 = "3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf";
+      };
+    });
+  };
+};
+
+in newPython.pkgs.buildPythonApplication rec {
+  version = "1.12.0";
+  pname = "conan";
+
+  src = newPython.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "0hgy3wfy96likdchz42h9mawfjw4dxx7k2iinrrlhph7128kji1j";
+  };
+  checkInputs = [
+    git
+  ] ++ (with newPython.pkgs; [
+    codecov
+    mock
+    node-semver
+    nose
+    parameterized
+    webtest
+  ]);
+
+  propagatedBuildInputs = with newPython.pkgs; [
+    colorama deprecation distro fasteners bottle
+    future node-semver patch pygments pluginbase
+    pyjwt pylint pyyaml requests six tqdm
+  ];
+
+  checkPhase = ''
+    export HOME="$TMP/conan-home"
+    mkdir -p "$HOME"
+  '';
+
+  postPatch = ''
+    substituteInPlace conans/requirements_server.txt \
+      --replace "pluginbase>=0.5, < 1.0" "pluginbase>=0.5"
+  '';
+
+  meta = with lib; {
+    homepage = https://conan.io;
+    description = "Decentralized and portable C/C++ package manager";
+    license = licenses.mit;
+    maintainers = with maintainers; [ HaoZeke ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/doit/default.nix b/nixpkgs/pkgs/development/tools/build-managers/doit/default.nix
new file mode 100644
index 000000000000..e2689f2c2652
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/doit/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, python3Packages }:
+
+let
+
+  name = "doit";
+  version = "0.31.1";
+
+in python3Packages.buildPythonApplication {
+  name = "${name}-${version}";
+
+  src = fetchurl {
+    url = "mirror://pypi/d/${name}/${name}-${version}.tar.gz";
+    sha256 = "1spm8vfjh4kvalaj0i2ggbdln1yy5k68d8mfwfnpqlzxxx4ikl5s";
+  };
+
+  buildInputs = with python3Packages; [ mock pytest ];
+
+  propagatedBuildInputs = with python3Packages; [ cloudpickle ]
+    ++ stdenv.lib.optional stdenv.isLinux pyinotify
+    ++ stdenv.lib.optional stdenv.isDarwin macfsevents;
+
+  # Tests fail due to mysterious gdbm.open() resource temporarily
+  # unavailable errors.
+  doCheck = false;
+  checkPhase = "py.test";
+
+  meta = with stdenv.lib; {
+    homepage = http://pydoit.org/;
+    description = "A task management & automation tool";
+    license = licenses.mit;
+    longDescription = ''
+      doit is a modern open-source build-tool written in python
+      designed to be simple to use and flexible to deal with complex
+      work-flows. It is specially suitable for building and managing
+      custom work-flows where there is no out-of-the-box solution
+      available.
+    '';
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile b/nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile
new file mode 100644
index 000000000000..ddb13a65c165
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'drake'
diff --git a/nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile.lock b/nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile.lock
new file mode 100644
index 000000000000..52060a0e6254
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/drake/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    comp_tree (1.1.3)
+    drake (0.9.2.0.3.1)
+      comp_tree (>= 1.1.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  drake
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/development/tools/build-managers/drake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/drake/default.nix
new file mode 100644
index 000000000000..a7bb93d52ed1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/drake/default.nix
@@ -0,0 +1,15 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "drake";
+  gemdir = ./.;
+  exes = [ "drake" ];
+
+  meta = with lib; {
+    description = "A branch of Rake supporting automatic parallelizing of tasks";
+    homepage = http://quix.github.io/rake/;
+    maintainers = with maintainers; [ romildo manveru ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/drake/gemset.nix b/nixpkgs/pkgs/development/tools/build-managers/drake/gemset.nix
new file mode 100644
index 000000000000..061ed5d973ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/drake/gemset.nix
@@ -0,0 +1,23 @@
+{
+  comp_tree = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dj9lkfxcczn67l1j12dcxswrfxxd1zgxa344zk6vqs2gwwhy9m9";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  drake = {
+    dependencies = ["comp_tree"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09gkmdshwdmdnkdxi03dv4rk1dip0wdv6dx14wscrmi0jyk86yag";
+      type = "gem";
+    };
+    version = "0.9.2.0.3.1";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/build-managers/dub/default.nix b/nixpkgs/pkgs/development/tools/build-managers/dub/default.nix
new file mode 100644
index 000000000000..7b882926e1f5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/dub/default.nix
@@ -0,0 +1,76 @@
+{ stdenv, fetchFromGitHub, curl, dmd, libevent, rsync }:
+
+stdenv.mkDerivation rec {
+  name = "dub-${version}";
+  version = "1.14.0";
+
+  enableParallelBuilding = true;
+
+  src = fetchFromGitHub {
+    owner = "dlang";
+    repo = "dub";
+    rev = "v${version}";
+    sha256 = "070kfkyrkr98y1hbhcf85842c0x7l95w1ambrkdgajpb6kcmpf84";
+  };
+
+  postUnpack = ''
+      patchShebangs .
+  '';
+
+  # Can be removed with https://github.com/dlang/dub/pull/1368
+  dubvar = "\\$DUB";
+  postPatch = ''
+      substituteInPlace test/fetchzip.sh \
+          --replace "dub remove" "\"${dubvar}\" remove"
+  '';
+
+  nativeBuildInputs = [ dmd libevent rsync ];
+  buildInputs = [ curl ];
+
+  buildPhase = ''
+    export DMD=${dmd.out}/bin/dmd
+    ./build.sh
+  '';
+
+  doCheck = !stdenv.isDarwin;
+
+  checkPhase = ''
+    export DUB=$NIX_BUILD_TOP/source/bin/dub
+    export PATH=$PATH:$NIX_BUILD_TOP/source/bin/
+    export DC=${dmd.out}/bin/dmd
+    export HOME=$TMP
+
+    rm -rf test/issue502-root-import
+    rm test/issue990-download-optional-selected.sh
+    rm test/timeout.sh
+    rm test/issue674-concurrent-dub.sh
+    rm test/issue672-upgrade-optional.sh
+    rm test/issue1574-addcommand.sh
+    rm test/issue1524-maven-upgrade-dependency-tree.sh
+    rm test/issue1416-maven-repo-pkg-supplier.sh
+    rm test/issue1037-better-dependency-messages.sh
+    rm test/interactive-remove.sh
+    rm test/fetchzip.sh
+    rm test/feat663-search.sh
+    rm test/ddox.sh
+    rm test/0-init-multi.sh
+    rm test/0-init-multi-json.sh
+
+    ./test/run-unittest.sh
+  '';
+
+  installPhase = ''
+    mkdir $out
+    mkdir $out/bin
+    cp bin/dub $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Package and build manager for D applications and libraries";
+    homepage = http://code.dlang.org/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ ThomasMader ];
+    platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gn/default.nix b/nixpkgs/pkgs/development/tools/build-managers/gn/default.nix
new file mode 100644
index 000000000000..7ee4c4ee2580
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gn/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, lib, fetchgit, fetchzip, fetchpatch, darwin, writeText
+, git, ninja, python2 }:
+
+let
+  rev = "96ff462cddf35f98e25fd5d098fc27bc81eab94a";
+  sha256 = "1ny23sprl7ygb2lpdnqxv60m8kaf4h2dmpqjp61l5vc2s7f32g97";
+
+  shortRev = builtins.substring 0 7 rev;
+  lastCommitPosition = writeText "last_commit_position.h" ''
+    #ifndef OUT_LAST_COMMIT_POSITION_H_
+    #define OUT_LAST_COMMIT_POSITION_H_
+
+    #define LAST_COMMIT_POSITION "(${shortRev})"
+
+    #endif  // OUT_LAST_COMMIT_POSITION_H_
+  '';
+
+in
+stdenv.mkDerivation rec {
+  name = "gn-${version}";
+  version = "20181031";
+
+  src = fetchgit {
+    url = "https://gn.googlesource.com/gn";
+    inherit rev sha256;
+  };
+
+  postPatch = ''
+    # FIXME Needed with old Apple SDKs
+    substituteInPlace base/mac/foundation_util.mm \
+      --replace "NSArray<NSString*>*" "NSArray*"
+  '';
+
+  nativeBuildInputs = [ ninja python2 git ];
+  buildInputs = lib.optionals stdenv.isDarwin (with darwin; with apple_sdk.frameworks; [
+    libobjc
+    cctools
+
+    # frameworks
+    ApplicationServices
+    Foundation
+    AppKit
+  ]);
+
+  buildPhase = ''
+    python build/gen.py --no-sysroot --no-last-commit-position
+    ln -s ${lastCommitPosition} out/last_commit_position.h
+    ninja -j $NIX_BUILD_CORES -C out gn
+  '';
+
+  installPhase = ''
+    install -vD out/gn "$out/bin/gn"
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  meta = with lib; {
+    description = "A meta-build system that generates NinjaBuild files";
+    homepage = https://gn.googlesource.com/gn;
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ stesie matthewbauer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gn/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/gn/setup-hook.sh
new file mode 100644
index 000000000000..75d2edcaf1c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gn/setup-hook.sh
@@ -0,0 +1,14 @@
+gnConfigurePhase() {
+    runHook preConfigure
+
+    echo "gn flags: $gnFlags ${gnFlagsArray[@]}"
+
+    gn gen out/Release --args="$gnFlags ${gnFlagsArray[@]}"
+    cd out/Release/
+
+    runHook postConfigure
+}
+
+if [ -z "$dontUseGnConfigure" -a -z "$configurePhase" ]; then
+    configurePhase=gnConfigurePhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/default.nix b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/default.nix
new file mode 100644
index 000000000000..47f800c67be5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, fetchurl, guileSupport ? false, pkgconfig ? null , guile ? null }:
+
+assert guileSupport -> ( pkgconfig != null && guile != null );
+
+let
+  version = "4.2.1";
+in
+stdenv.mkDerivation {
+  name = "gnumake-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnu/make/make-${version}.tar.bz2";
+    sha256 = "12f5zzyq2w56g95nni65hc0g5p7154033y2f3qmjvd016szn5qnn";
+  };
+
+  patchFlags = "-p0";
+  patches = [
+    # Purity: don't look for library dependencies (of the form `-lfoo') in /lib
+    # and /usr/lib. It's a stupid feature anyway. Likewise, when searching for
+    # included Makefiles, don't look in /usr/include and friends.
+    ./impure-dirs.patch
+    ./pselect.patch
+    # Fix support for glibc 2.27's glob, inspired by http://www.linuxfromscratch.org/lfs/view/8.2/chapter05/make.html
+    ./glibc-2.27-glob.patch
+  ];
+
+  nativeBuildInputs = stdenv.lib.optionals guileSupport [ pkgconfig ];
+  buildInputs = stdenv.lib.optionals guileSupport [ guile ];
+
+  configureFlags = stdenv.lib.optional guileSupport "--with-guile"
+
+    # Make uses this test to decide whether it should keep track of
+    # subseconds. Apple made this possible with APFS and macOS 10.13.
+    # However, we still support macOS 10.11 and 10.12. Binaries built
+    # in Nixpkgs will be unable to use futimens to set mtime less than
+    # a second. So, tell Make to ignore nanoseconds in mtime here by
+    # overriding the autoconf test for the struct.
+    # See https://github.com/NixOS/nixpkgs/issues/51221 for discussion.
+    ++ stdenv.lib.optional stdenv.isDarwin "ac_cv_struct_st_mtim_nsec=no";
+
+  outputs = [ "out" "man" "info" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.gnu.org/software/make/;
+    description = "A tool to control the generation of non-source files from sources";
+    license = licenses.gpl3Plus;
+
+    longDescription = ''
+      Make is a tool which controls the generation of executables and
+      other non-source files of a program from the program's source files.
+
+      Make gets its knowledge of how to build your program from a file
+      called the makefile, which lists each of the non-source files and
+      how to compute it from other files. When you write a program, you
+      should write a makefile for it, so that it is possible to use Make
+      to build and install the program.
+    '';
+
+    platforms = platforms.all;
+    maintainers = [ maintainers.vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/glibc-2.27-glob.patch b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/glibc-2.27-glob.patch
new file mode 100644
index 000000000000..186212d0d298
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/glibc-2.27-glob.patch
@@ -0,0 +1,32 @@
+diff -Naur glob/glob.c glob/glob.c
+--- glob/glob.c	2013-10-20 13:14:38.000000000 -0400
++++ glob/glob.c	2018-03-16 14:32:38.483496170 -0400
+@@ -208,28 +208,9 @@
+ #endif /* __GNU_LIBRARY__ || __DJGPP__ */
+ 
+ 
+-#if !defined __alloca && !defined __GNU_LIBRARY__
+-
+-# ifdef	__GNUC__
+-#  undef alloca
+-#  define alloca(n)	__builtin_alloca (n)
+-# else	/* Not GCC.  */
+-#  ifdef HAVE_ALLOCA_H
+ #   include <alloca.h>
+-#  else	/* Not HAVE_ALLOCA_H.  */
+-#   ifndef _AIX
+-#    ifdef WINDOWS32
+-#     include <malloc.h>
+-#    else
+-extern char *alloca ();
+-#    endif /* WINDOWS32 */
+-#   endif /* Not _AIX.  */
+-#  endif /* sparc or HAVE_ALLOCA_H.  */
+-# endif	/* GCC.  */
+-
+ # define __alloca	alloca
+ 
+-#endif
+ 
+ #ifndef __GNU_LIBRARY__
+ # define __stat stat
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/impure-dirs.patch b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/impure-dirs.patch
new file mode 100644
index 000000000000..f6646f1d0126
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/impure-dirs.patch
@@ -0,0 +1,34 @@
+diff -rc read.c read.c
+*** read.c	2006-03-17 15:24:20.000000000 +0100
+--- read.c	2007-05-24 17:16:31.000000000 +0200
+***************
+*** 99,107 ****
+--- 99,109 ----
+  #endif
+      INCLUDEDIR,
+  #ifndef _AMIGA
++ #if 0    
+      "/usr/gnu/include",
+      "/usr/local/include",
+      "/usr/include",
++ #endif    
+  #endif
+      0
+    };
+diff -rc reremake.c
+*** remake.c	2006-03-20 03:36:37.000000000 +0100
+--- remake.c	2007-05-24 17:06:54.000000000 +0200
+***************
+*** 1452,1460 ****
+--- 1452,1462 ----
+    static char *dirs[] =
+      {
+  #ifndef _AMIGA
++ #if 0
+        "/lib",
+        "/usr/lib",
+  #endif
++ #endif
+  #if defined(WINDOWS32) && !defined(LIBDIR)
+  /*
+   * This is completely up to the user at product install time. Just define
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/pselect.patch b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/pselect.patch
new file mode 100644
index 000000000000..5a03acb2f7ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/pselect.patch
@@ -0,0 +1,170 @@
+From b552b05251980f693c729e251f93f5225b400714 Mon Sep 17 00:00:00 2001
+From: Paul Smith <psmith@gnu.org>
+Date: Sat, 3 Jun 2017 16:20:51 -0400
+Subject: [SV 51159] Use a non-blocking read with pselect to avoid hangs.
+
+* posixos.c (set_blocking): Set blocking on a file descriptor.
+(jobserver_setup): Set non-blocking on the jobserver read side.
+(jobserver_parse_auth): Ditto.
+(jobserver_acquire_all): Set blocking to avoid a busy-wait loop.
+(jobserver_acquire): If the non-blocking read() returns without
+taking a token then try again.
+---
+ posixos.c | 97 ++++++++++++++++++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 71 insertions(+), 26 deletions(-)
+
+diff --git posixos.c posixos.c
+index e642d7f..dbafa51 100644
+--- posixos.c
++++ posixos.c
+@@ -62,6 +62,24 @@ make_job_rfd (void)
+ #endif
+ }
+ 
++static void
++set_blocking (int fd, int blocking)
++{
++  // If we're not using pselect() don't change the blocking
++#ifdef HAVE_PSELECT
++  int flags;
++  EINTRLOOP (flags, fcntl (fd, F_GETFL));
++  if (flags >= 0)
++    {
++      int r;
++      flags = blocking ? (flags & ~O_NONBLOCK) : (flags | O_NONBLOCK);
++      EINTRLOOP (r, fcntl (fd, F_SETFL, flags));
++      if (r < 0)
++        pfatal_with_name ("fcntl(O_NONBLOCK)");
++    }
++#endif
++}
++
+ unsigned int
+ jobserver_setup (int slots)
+ {
+@@ -86,6 +104,9 @@ jobserver_setup (int slots)
+         pfatal_with_name (_("init jobserver pipe"));
+     }
+ 
++  /* When using pselect() we want the read to be non-blocking.  */
++  set_blocking (job_fds[0], 0);
++
+   return 1;
+ }
+ 
+@@ -121,6 +142,9 @@ jobserver_parse_auth (const char *auth)
+       return 0;
+     }
+ 
++  /* When using pselect() we want the read to be non-blocking.  */
++  set_blocking (job_fds[0], 0);
++
+   return 1;
+ }
+ 
+@@ -169,7 +193,10 @@ jobserver_acquire_all (void)
+ {
+   unsigned int tokens = 0;
+ 
+-  /* Close the write side, so the read() won't hang.  */
++  /* Use blocking reads to wait for all outstanding jobs.  */
++  set_blocking (job_fds[0], 1);
++
++  /* Close the write side, so the read() won't hang forever.  */
+   close (job_fds[1]);
+   job_fds[1] = -1;
+ 
+@@ -236,18 +263,12 @@ jobserver_pre_acquire (void)
+ unsigned int
+ jobserver_acquire (int timeout)
+ {
+-  sigset_t empty;
+-  fd_set readfds;
+   struct timespec spec;
+   struct timespec *specp = NULL;
+-  int r;
+-  char intake;
++  sigset_t empty;
+ 
+   sigemptyset (&empty);
+ 
+-  FD_ZERO (&readfds);
+-  FD_SET (job_fds[0], &readfds);
+-
+   if (timeout)
+     {
+       /* Alarm after one second (is this too granular?)  */
+@@ -256,28 +277,52 @@ jobserver_acquire (int timeout)
+       specp = &spec;
+     }
+ 
+-  r = pselect (job_fds[0]+1, &readfds, NULL, NULL, specp, &empty);
+-
+-  if (r == -1)
++  while (1)
+     {
+-      /* Better be SIGCHLD.  */
+-      if (errno != EINTR)
+-        pfatal_with_name (_("pselect jobs pipe"));
+-      return 0;
+-    }
++      fd_set readfds;
++      int r;
++      char intake;
+ 
+-  if (r == 0)
+-    /* Timeout.  */
+-    return 0;
++      FD_ZERO (&readfds);
++      FD_SET (job_fds[0], &readfds);
+ 
+-  /* The read FD is ready: read it!  */
+-  EINTRLOOP (r, read (job_fds[0], &intake, 1));
+-  if (r < 0)
+-    pfatal_with_name (_("read jobs pipe"));
++      r = pselect (job_fds[0]+1, &readfds, NULL, NULL, specp, &empty);
++      if (r < 0)
++        switch (errno)
++          {
++          case EINTR:
++            /* SIGCHLD will show up as an EINTR.  */
++            return 0;
++
++          case EBADF:
++            /* Someone closed the jobs pipe.
++               That shouldn't happen but if it does we're done.  */
++              O (fatal, NILF, _("job server shut down"));
+ 
+-  /* What does it mean if read() returns 0?  It shouldn't happen because only
+-     the master make can reap all the tokens and close the write side...??  */
+-  return r > 0;
++          default:
++            pfatal_with_name (_("pselect jobs pipe"));
++          }
++
++      if (r == 0)
++        /* Timeout.  */
++        return 0;
++
++      /* The read FD is ready: read it!  This is non-blocking.  */
++      EINTRLOOP (r, read (job_fds[0], &intake, 1));
++
++      if (r < 0)
++        {
++          /* Someone sniped our token!  Try again.  */
++          if (errno == EAGAIN)
++            continue;
++
++          pfatal_with_name (_("read jobs pipe"));
++        }
++
++      /* read() should never return 0: only the master make can reap all the
++         tokens and close the write side...??  */
++      return r > 0;
++    }
+ }
+ 
+ #else
+-- 
+cgit v1.0-41-gc330
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix b/nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix
new file mode 100644
index 000000000000..25ff6d09d420
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix
@@ -0,0 +1,107 @@
+{ stdenv, fetchurl, unzip, jdk, makeWrapper }:
+
+rec {
+  gradleGen = {name, src, nativeVersion} : stdenv.mkDerivation rec {
+    inherit name src nativeVersion;
+
+    dontBuild = true;
+
+    installPhase = ''
+      mkdir -pv $out/lib/gradle/
+      cp -rv lib/ $out/lib/gradle/
+
+      gradle_launcher_jar=$(echo $out/lib/gradle/lib/gradle-launcher-*.jar)
+      test -f $gradle_launcher_jar
+      makeWrapper ${jdk}/bin/java $out/bin/gradle \
+        --set JAVA_HOME ${jdk} \
+        --add-flags "-classpath $gradle_launcher_jar org.gradle.launcher.GradleMain"
+    '';
+
+    fixupPhase = if (!stdenv.isLinux) then ":" else
+      let arch = if stdenv.is64bit then "amd64" else "i386"; in ''
+        mkdir patching
+        pushd patching
+        jar xf $out/lib/gradle/lib/native-platform-linux-${arch}-${nativeVersion}.jar
+        patchelf --set-rpath "${stdenv.cc.cc.lib}/lib:${stdenv.cc.cc.lib}/lib64" net/rubygrapefruit/platform/linux-${arch}/libnative-platform.so
+        jar cf native-platform-linux-${arch}-${nativeVersion}.jar .
+        mv native-platform-linux-${arch}-${nativeVersion}.jar $out/lib/gradle/lib/
+        popd
+
+        # The scanner doesn't pick up the runtime dependency in the jar.
+        # Manually add a reference where it will be found.
+        mkdir $out/nix-support
+        echo ${stdenv.cc.cc} > $out/nix-support/manual-runtime-dependencies
+      '';
+
+    buildInputs = [ unzip jdk makeWrapper ];
+
+    meta = {
+      description = "Enterprise-grade build system";
+      longDescription = ''
+        Gradle is a build system which offers you ease, power and freedom.
+        You can choose the balance for yourself. It has powerful multi-project
+        build support. It has a layer on top of Ivy that provides a
+        build-by-convention integration for Ivy. It gives you always the choice
+        between the flexibility of Ant and the convenience of a
+        build-by-convention behavior.
+      '';
+      homepage = http://www.gradle.org/;
+      license = stdenv.lib.licenses.asl20;
+      platforms = stdenv.lib.platforms.unix;
+    };
+  };
+
+  gradle_latest = gradleGen rec {
+    name = "gradle-5.3.1";
+    nativeVersion = "0.17";
+
+    src = fetchurl {
+      url = "http://services.gradle.org/distributions/${name}-bin.zip";
+      sha256 = "0dkl6f17zl9pc6y2xm8xqz23x53fck4p2648vpq8572f0mxa2n8w";
+    };
+  };
+
+  gradle_4_10 = gradleGen rec {
+    name = "gradle-4.10.3";
+    nativeVersion = "0.14";
+
+    src = fetchurl {
+      url = "http://services.gradle.org/distributions/${name}-bin.zip";
+      sha256 = "0vhqxnk0yj3q9jam5w4kpia70i4h0q4pjxxqwynh3qml0vrcn9l6";
+    };
+  };
+
+  gradle_3_5 = gradleGen rec {
+    name = "gradle-3.5.1";
+    nativeVersion = "0.14";
+
+    src = fetchurl {
+      url = "http://services.gradle.org/distributions/${name}-bin.zip";
+      sha256 = "1y7fbhrdriclbs5ksxahi0aafsz760lalwyz8r4llysc5pskbkld";
+    };
+  };
+
+  gradle_2_14 = gradleGen rec {
+    name = "gradle-2.14.1";
+    nativeVersion = "0.10";
+
+    src = fetchurl {
+      url = "http://services.gradle.org/distributions/${name}-bin.zip";
+      sha256 = "0fggjxpsnakdaviw7bn2jmsl06997phlqr1251bjmlgjf7d1xing";
+    };
+  };
+
+  # Nix pkgs that depend on this old version:
+  # pkgs/tools/security/jd-gui/default.nix
+  # pkgs/servers/mxisd/default.nix
+  # If these packages are updated, this old version can probably be removed
+  gradle_2_5 = gradleGen rec {
+    name = "gradle-2.5";
+    nativeVersion = "0.10";
+
+    src = fetchurl {
+      url = "http://services.gradle.org/distributions/${name}-bin.zip";
+      sha256 = "0mc5lf6phkncx77r0papzmfvyiqm0y26x50ipvmzkcsbn463x59z";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gup/default.nix b/nixpkgs/pkgs/development/tools/build-managers/gup/default.nix
new file mode 100644
index 000000000000..baa658b522a3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gup/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, nix-update-source, lib, python
+, which, runtimeShell, pychecker ? null }:
+stdenv.mkDerivation rec {
+  version = "0.7.0";
+  src = fetchFromGitHub {
+    owner = "timbertson";
+    repo = "gup";
+    rev = "version-0.7.0";
+    sha256 = "1pwnmlq2pgkkln9sgz4wlb9dqlqw83bkf105qljnlvggc21zm3pv";
+  };
+  name = "gup-${version}";
+  buildInputs = lib.remove null [ python which pychecker ];
+  SKIP_PYCHECKER = pychecker == null;
+  buildPhase = "make python";
+  installPhase = ''
+    mkdir $out
+    cp -r python/bin $out/bin
+  '';
+  passthru.updateScript = ''
+    #!${runtimeShell}
+    set -e
+    echo
+    cd ${toString ./.}
+    ${nix-update-source}/bin/nix-update-source \
+      --prompt version \
+      --replace-attr version \
+      --set owner timbertson \
+      --set repo gup \
+      --set type fetchFromGitHub \
+      --set rev 'version-{version}' \
+      --modify-nix default.nix
+  '';
+  meta = {
+    inherit (src.meta) homepage;
+    description = "A better make, inspired by djb's redo";
+    license = stdenv.lib.licenses.lgpl2Plus;
+    maintainers = [ stdenv.lib.maintainers.timbertson ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/icmake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/icmake/default.nix
new file mode 100644
index 000000000000..c5ab3fafc5e6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/icmake/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchFromGitLab, makeWrapper, gcc, ncurses }:
+
+stdenv.mkDerivation rec {
+  name = "icmake-${version}";
+  version = "9.02.08";
+
+  src = fetchFromGitLab {
+    sha256 = "1pr5lagmdls3clzwa2xwcfa3k5750rf7i0j3zld0xirb41zx07q2";
+    rev = version;
+    repo = "icmake";
+    owner = "fbb-git";
+  };
+
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */icmake)
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ gcc ];
+
+  preConfigure = ''
+    patchShebangs ./
+    substituteInPlace INSTALL.im --replace "usr/" ""
+  '';
+
+  buildPhase = ''
+    ./icm_prepare $out
+    ./icm_bootstrap x
+  '';
+
+  installPhase = ''
+    ./icm_install all /
+
+    wrapProgram $out/bin/icmbuild \
+     --prefix PATH : ${ncurses}/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A program maintenance (make) utility using a C-like grammar";
+    homepage = https://fbb-git.gitlab.io/icmake/;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/jam/default.nix b/nixpkgs/pkgs/development/tools/build-managers/jam/default.nix
new file mode 100644
index 000000000000..7314643530e8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/jam/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, yacc }:
+
+stdenv.mkDerivation rec {
+  name = "jam-2.6";
+
+  src = fetchurl {
+    url = "https://swarm.workshop.perforce.com/projects/perforce_software-jam/download/main/${name}.tar";
+    sha256 = "0j4r7xcjz15ksnnpjw56qi99q4lpjmx097pkwwkl1hq3hqml1zhn";
+  };
+
+  nativeBuildInputs = [ yacc ];
+
+  preConfigure = ''
+    unset AR
+  '';
+
+  buildPhase = ''
+    make jam0
+    ./jam0 -j$NIX_BUILD_CORES -sBINDIR=$out/bin install
+  '';
+
+  installPhase = ''
+    mkdir -p $out/doc/jam
+    cp *.html $out/doc/jam
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://www.perforce.com/resources/documentation/jam;
+    license = licenses.free;
+    description = "Just Another Make";
+    maintainers = with maintainers; [ orivej ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/kati/default.nix b/nixpkgs/pkgs/development/tools/build-managers/kati/default.nix
new file mode 100644
index 000000000000..8a72847be772
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/kati/default.nix
@@ -0,0 +1,26 @@
+{ fetchgit, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "kati-unstable-${version}";
+  version = "2017-05-23";
+  rev = "2dde61e46ab789f18956ff3b7c257dd8eb97993f";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/google/kati.git";
+    sha256 = "1das1fvycra546lmh72cr5qpgblhbzqqy7gfywiijjgx160l75vq";
+  };
+
+  patches = [ ./version.patch ];
+
+  installPhase = ''
+    install -D ckati $out/bin/ckati
+  '';
+
+  meta = {
+    description = "An experimental GNU make clone";
+    homepage = https://github.com/google/kati;
+    platforms = stdenv.lib.platforms.all;
+    license = stdenv.lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/kati/version.patch b/nixpkgs/pkgs/development/tools/build-managers/kati/version.patch
new file mode 100644
index 000000000000..1821ac6bbb73
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/kati/version.patch
@@ -0,0 +1,19 @@
+diff --git a/Makefile.ckati b/Makefile.ckati
+index e4067bb..15518f3 100644
+--- a/Makefile.ckati
++++ b/Makefile.ckati
+@@ -102,14 +102,8 @@ $(KATI_CXX_TEST_EXES): $(KATI_BIN_PATH)/%: $(KATI_INTERMEDIATES_PATH)/%.o
+ 	$(KATI_LD) $^ -o $@ $(KATI_LIBS)
+ 
+ # Rule to generate version.cc
+-KATI_GIT_DIR := $(shell git -C $(KATI_SRC_PATH) rev-parse --show-toplevel)
+-ifneq ($(KATI_GIT_DIR),)
+-KATI_VERSION_DEPS := $(KATI_GIT_DIR)/.git/HEAD $(KATI_GIT_DIR)/.git/index
+-KATI_VERSION := $(shell git -C $(KATI_GIT_DIR) rev-parse HEAD)
+-else
+ KATI_VERSION_DEPS :=
+ KATI_VERSION := unknown
+-endif
+ $(KATI_INTERMEDIATES_PATH)/version.cc: $(KATI_VERSION_DEPS)
+ 	@mkdir -p $(dir $@)
+ 	echo '// +build ignore' > $@
diff --git a/nixpkgs/pkgs/development/tools/build-managers/leiningen/default.nix b/nixpkgs/pkgs/development/tools/build-managers/leiningen/default.nix
new file mode 100644
index 000000000000..99692d1ef50c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/leiningen/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchurl, makeWrapper
+, coreutils, jdk, rlwrap, gnupg }:
+
+stdenv.mkDerivation rec {
+  pname = "leiningen";
+  version = "2.9.1";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://raw.github.com/technomancy/leiningen/${version}/bin/lein-pkg";
+    sha256 = "1h0gpzpr7xk6hvmrrq41bcp2k9aai348baf8ad9bxvci01n4zb12";
+  };
+
+  jarsrc = fetchurl {
+    # NOTE: This is actually a .jar, Github has issues
+    url = "https://github.com/technomancy/leiningen/releases/download/${version}/${name}-standalone.zip";
+    sha256 = "1y2mva5s2w2szzn1b9rhz0dvkffls4ravii677ybcf2w9wd86z7a";
+  };
+
+  JARNAME = "${name}-standalone.jar";
+
+  unpackPhase = "true";
+
+  buildInputs = [ makeWrapper ];
+  propagatedBuildInputs = [ jdk ];
+
+  # the jar is not in share/java, because it's a standalone jar and should
+  # never be picked up by set-java-classpath.sh
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share
+    cp -v $src $out/bin/lein
+    cp -v $jarsrc $out/share/$JARNAME
+  '';
+
+  fixupPhase = ''
+    chmod +x $out/bin/lein
+    patchShebangs $out/bin/lein
+    substituteInPlace $out/bin/lein \
+      --replace 'LEIN_JAR=/usr/share/java/leiningen-$LEIN_VERSION-standalone.jar' "LEIN_JAR=$out/share/$JARNAME"
+    wrapProgram $out/bin/lein \
+      --prefix PATH ":" "${stdenv.lib.makeBinPath [ rlwrap coreutils ]}" \
+      --set LEIN_GPG ${gnupg}/bin/gpg \
+      --set JAVA_CMD ${jdk}/bin/java
+  '';
+
+  meta = {
+    homepage = https://leiningen.org/;
+    description = "Project automation for Clojure";
+    license = stdenv.lib.licenses.epl10;
+    platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+    maintainers = with stdenv.lib.maintainers; [ the-kenny ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/mage/default.nix b/nixpkgs/pkgs/development/tools/build-managers/mage/default.nix
new file mode 100644
index 000000000000..bce8dedbf58a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/mage/default.nix
@@ -0,0 +1,32 @@
+{ buildGoPackage, fetchFromGitHub, lib }:
+
+with lib;
+
+buildGoPackage rec {
+  name = "mage-${version}";
+  version = "1.7.1";
+
+  goPackagePath = "github.com/magefile/mage";
+  subPackages = [ "." ];
+
+  src = fetchFromGitHub {
+    owner = "magefile";
+    repo = "mage";
+    rev = "v${version}";
+    sha256 = "0n4k5dy338rxwzj654smxzlanmd0zws6mdzv0wc4byqjhr7mqhg2";
+  };
+
+  buildFlagsArray = [ 
+    "-ldflags="
+    "-X github.com/magefile/mage/mage.commitHash=v${version}"
+    "-X github.com/magefile/mage/mage.gitTag=v${version}"
+  ];
+
+  meta = {
+    description = "A Make/Rake-like Build Tool Using Go";
+    license = licenses.asl20;
+    maintainers = [ maintainers.swdunlop ];
+    homepage = https://magefile.org/;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/meson/allow-dirs-outside-of-prefix.patch b/nixpkgs/pkgs/development/tools/build-managers/meson/allow-dirs-outside-of-prefix.patch
new file mode 100644
index 000000000000..591927c15285
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/allow-dirs-outside-of-prefix.patch
@@ -0,0 +1,25 @@
+--- a/mesonbuild/coredata.py
++++ b/mesonbuild/coredata.py
+@@ -375,18 +375,13 @@
+         '''
+         if option.endswith('dir') and os.path.isabs(value) and \
+            option not in builtin_dir_noprefix_options:
+-            # Value must be a subdir of the prefix
+             # commonpath will always return a path in the native format, so we
+             # must use pathlib.PurePath to do the same conversion before
+             # comparing.
+-            if os.path.commonpath([value, prefix]) != str(PurePath(prefix)):
+-                m = 'The value of the {!r} option is {!r} which must be a ' \
+-                    'subdir of the prefix {!r}.\nNote that if you pass a ' \
+-                    'relative path, it is assumed to be a subdir of prefix.'
+-                raise MesonException(m.format(option, value, prefix))
+-            # Convert path to be relative to prefix
+-            skip = len(prefix) + 1
+-            value = value[skip:]
++            if os.path.commonpath([value, prefix]) == str(PurePath(prefix)):
++                # Convert path to be relative to prefix
++                skip = len(prefix) + 1
++                value = value[skip:]
+         return value
+ 
+     def init_builtins(self):
diff --git a/nixpkgs/pkgs/development/tools/build-managers/meson/default.nix b/nixpkgs/pkgs/development/tools/build-managers/meson/default.nix
new file mode 100644
index 000000000000..638fd2eaa43f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/default.nix
@@ -0,0 +1,104 @@
+{ lib, python3Packages, stdenv, writeTextDir, substituteAll, targetPackages }:
+
+let
+  # See https://mesonbuild.com/Reference-tables.html#cpu-families
+  cpuFamilies = {
+    "aarch64" = "aarch64";
+    "armv6l"  = "arm";
+    "armv7l"  = "arm";
+    "i686"    = "x86";
+    "x86_64"  = "x86_64";
+  };
+in
+python3Packages.buildPythonApplication rec {
+  version = "0.49.2";
+  pname = "meson";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "0ckkzq0kbnnk4rwv20lggm9a4fb5054jbv99i9pwjhid23qy7059";
+  };
+
+  postFixup = ''
+    pushd $out/bin
+    # undo shell wrapper as meson tools are called with python
+    for i in *; do
+      mv ".$i-wrapped" "$i"
+    done
+    popd
+
+    # Do not propagate Python
+    rm $out/nix-support/propagated-build-inputs
+  '';
+
+  patches = [
+    # Upstream insists on not allowing bindir and other dir options
+    # outside of prefix for some reason:
+    # https://github.com/mesonbuild/meson/issues/2561
+    # We remove the check so multiple outputs can work sanely.
+    ./allow-dirs-outside-of-prefix.patch
+
+    # Unlike libtool, vanilla Meson does not pass any information
+    # about the path library will be installed to to g-ir-scanner,
+    # breaking the GIR when path other than ${!outputLib}/lib is used.
+    # We patch Meson to add a --fallback-library-path argument with
+    # library install_dir to g-ir-scanner.
+    ./gir-fallback-path.patch
+
+    # In common distributions, RPATH is only needed for internal libraries so
+    # meson removes everything else. With Nix, the locations of libraries
+    # are not as predictable, therefore we need to keep them in the RPATH.
+    # At the moment we are keeping the paths starting with /nix/store.
+    # https://github.com/NixOS/nixpkgs/issues/31222#issuecomment-365811634
+    (substituteAll {
+      src = ./fix-rpath.patch;
+      inherit (builtins) storeDir;
+    })
+  ] ++ lib.optionals stdenv.isDarwin [
+    # We use custom Clang, which makes Meson think *not Apple*, while still
+    # relying on system linker. When it detects standard Clang, Meson will
+    # pass it `-Wl,-O1` flag but optimizations are not recognized by
+    # Mac linker.
+    # https://github.com/mesonbuild/meson/issues/4784
+    ./fix-objc-linking.patch
+  ];
+
+  setupHook = ./setup-hook.sh;
+
+  crossFile = writeTextDir "cross-file.conf" ''
+    [binaries]
+    c = '${targetPackages.stdenv.cc.targetPrefix}cc'
+    cpp = '${targetPackages.stdenv.cc.targetPrefix}c++'
+    ar = '${targetPackages.stdenv.cc.bintools.targetPrefix}ar'
+    strip = '${targetPackages.stdenv.cc.bintools.targetPrefix}strip'
+    pkgconfig = 'pkg-config'
+    ld = '${targetPackages.stdenv.cc.targetPrefix}ld'
+    objcopy = '${targetPackages.stdenv.cc.targetPrefix}objcopy'
+
+    [properties]
+    needs_exe_wrapper = true
+
+    [host_machine]
+    system = '${targetPackages.stdenv.targetPlatform.parsed.kernel.name}'
+    cpu_family = '${cpuFamilies.${targetPackages.stdenv.targetPlatform.parsed.cpu.name}}'
+    cpu = '${targetPackages.stdenv.targetPlatform.parsed.cpu.name}'
+    endian = ${if targetPackages.stdenv.targetPlatform.isLittleEndian then "'little'" else "'big'"}
+  '';
+
+  # 0.45 update enabled tests but they are failing
+  doCheck = false;
+  # checkInputs = [ ninja pkgconfig ];
+  # checkPhase = "python ./run_project_tests.py";
+
+  inherit (stdenv) cc;
+
+  isCross = stdenv.targetPlatform != stdenv.hostPlatform;
+
+  meta = with lib; {
+    homepage = http://mesonbuild.com;
+    description = "SCons-like build system that use python as a front-end language and Ninja as a building backend";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mbe rasendubi ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/meson/fix-objc-linking.patch b/nixpkgs/pkgs/development/tools/build-managers/meson/fix-objc-linking.patch
new file mode 100644
index 000000000000..60a205828f5d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/fix-objc-linking.patch
@@ -0,0 +1,20 @@
+--- a/mesonbuild/environment.py
++++ b/mesonbuild/environment.py
+@@ -795,7 +795,7 @@
+                 compiler_type = self.get_gnu_compiler_type(defines)
+                 version = self.get_gnu_version_from_defines(defines)
+                 return GnuObjCCompiler(ccache + compiler, version, compiler_type, is_cross, exe_wrap, defines)
+-            if out.startswith('Apple LLVM'):
++            if out.startswith('Apple LLVM') or mesonlib.for_darwin(want_cross, self):
+                 return ClangObjCCompiler(ccache + compiler, version, CompilerType.CLANG_OSX, is_cross, exe_wrap)
+             if out.startswith('clang'):
+                 return ClangObjCCompiler(ccache + compiler, version, CompilerType.CLANG_STANDARD, is_cross, exe_wrap)
+@@ -822,7 +822,7 @@
+                 compiler_type = self.get_gnu_compiler_type(defines)
+                 version = self.get_gnu_version_from_defines(defines)
+                 return GnuObjCPPCompiler(ccache + compiler, version, compiler_type, is_cross, exe_wrap, defines)
+-            if out.startswith('Apple LLVM'):
++            if out.startswith('Apple LLVM') or mesonlib.for_darwin(want_cross, self):
+                 return ClangObjCPPCompiler(ccache + compiler, version, CompilerType.CLANG_OSX, is_cross, exe_wrap)
+             if out.startswith('clang'):
+                 return ClangObjCPPCompiler(ccache + compiler, version, CompilerType.CLANG_STANDARD, is_cross, exe_wrap)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/meson/fix-rpath.patch b/nixpkgs/pkgs/development/tools/build-managers/meson/fix-rpath.patch
new file mode 100644
index 000000000000..1a5f8cb89dce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/fix-rpath.patch
@@ -0,0 +1,43 @@
+--- a/mesonbuild/compilers/compilers.py
++++ b/mesonbuild/compilers/compilers.py
+@@ -1202,8 +1202,10 @@
+             # In order to avoid relinking for RPATH removal, the binary needs to contain just
+             # enough space in the ELF header to hold the final installation RPATH.
+             paths = ':'.join(all_paths)
+-            if len(paths) < len(install_rpath):
+-                padding = 'X' * (len(install_rpath) - len(paths))
++            store_paths = ':'.join(filter(lambda path: path.startswith('@storeDir@'), all_paths))
++            extra_space_needed = len(install_rpath + (':' if install_rpath and store_paths else '') + store_paths) - len(paths)
++            if extra_space_needed > 0:
++                padding = 'X' * extra_space_needed
+                 if not paths:
+                     paths = padding
+                 else:
+--- a/mesonbuild/scripts/depfixer.py
++++ b/mesonbuild/scripts/depfixer.py
+@@ -303,6 +303,14 @@
+             return
+         self.bf.seek(rp_off)
+         old_rpath = self.read_str()
++
++        if new_rpath:
++            new_rpath += b':'
++        else:
++            new_rpath = b''
++
++        new_rpath += b':'.join(filter(lambda path: path.startswith(b'@storeDir@'), old_rpath.split(b':')))
++
+         if len(old_rpath) < len(new_rpath):
+             sys.exit("New rpath must not be longer than the old one.")
+         # The linker does read-only string deduplication. If there is a
+@@ -316,6 +324,10 @@
+         if not new_rpath:
+             self.remove_rpath_entry(entrynum)
+         else:
++            # clean old rpath to avoid stale references
++            # (see https://github.com/NixOS/nixpkgs/pull/46020)
++            self.bf.seek(rp_off)
++            self.bf.write(b'\0'*len(old_rpath))
+             self.bf.seek(rp_off)
+             self.bf.write(new_rpath)
+             self.bf.write(b'\0')
diff --git a/nixpkgs/pkgs/development/tools/build-managers/meson/gir-fallback-path.patch b/nixpkgs/pkgs/development/tools/build-managers/meson/gir-fallback-path.patch
new file mode 100644
index 000000000000..7a33d4127fae
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/gir-fallback-path.patch
@@ -0,0 +1,16 @@
+--- a/mesonbuild/modules/gnome.py
++++ b/mesonbuild/modules/gnome.py
+@@ -805,6 +805,13 @@
+         scan_command += self._scan_langs(state, [lc[0] for lc in langs_compilers])
+         scan_command += list(external_ldflags)
+ 
++        if len(set([girtarget.get_custom_install_dir()[0] for girtarget in girtargets])) > 1:
++            raise MesonException('generate_gir tries to build multiple libraries with different install_dir at once: {}'.format(','.join([str(girtarget) for girtarget in girtargets])))
++
++        fallback_libpath = girtargets[0].get_custom_install_dir()[0]
++        if fallback_libpath is not None and isinstance(fallback_libpath, str) and len(fallback_libpath) > 0 and fallback_libpath[0] == "/":
++            scan_command += ['--fallback-library-path=' + fallback_libpath]
++
+         scan_target = self._make_gir_target(state, girfile, scan_command, depends, kwargs)
+ 
+         typelib_output = '%s-%s.typelib' % (ns, nsversion)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/meson/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/meson/setup-hook.sh
new file mode 100644
index 000000000000..06375c1528e0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/setup-hook.sh
@@ -0,0 +1,41 @@
+mesonConfigurePhase() {
+    runHook preConfigure
+
+    if [ -z "$dontAddPrefix" ]; then
+        mesonFlags="--prefix=$prefix $mesonFlags"
+    fi
+
+    # Build release by default.
+    if [ -n "@isCross@" ]; then
+      crossMesonFlags="--cross-file=@crossFile@/cross-file.conf"
+    fi
+
+    # See multiple-outputs.sh and meson’s coredata.py
+    mesonFlags="\
+        --libdir=${!outputLib}/lib --libexecdir=${!outputLib}/libexec \
+        --bindir=${!outputBin}/bin --sbindir=${!outputBin}/sbin \
+        --includedir=${!outputInclude}/include \
+        --mandir=${!outputMan}/share/man --infodir=${!outputInfo}/share/info \
+        --localedir=${!outputLib}/share/locale \
+        -Dauto_features=disabled \
+        $mesonFlags"
+
+    mesonFlags="${crossMesonFlags+$crossMesonFlags }--buildtype=${mesonBuildType:-release} $mesonFlags"
+
+    echo "meson flags: $mesonFlags ${mesonFlagsArray[@]}"
+
+    CC=@cc@/bin/cc CXX=@cc@/bin/c++ meson build $mesonFlags "${mesonFlagsArray[@]}"
+    cd build
+
+    if ! [[ -v enableParallelBuilding ]]; then
+        enableParallelBuilding=1
+        echo "meson: enabled parallel building"
+    fi
+
+    runHook postConfigure
+}
+
+if [ -z "$dontUseMesonConfigure" -a -z "$configurePhase" ]; then
+    setOutputFlags=
+    configurePhase=mesonConfigurePhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/build-managers/mill/default.nix b/nixpkgs/pkgs/development/tools/build-managers/mill/default.nix
new file mode 100644
index 000000000000..4206aaa7cfa9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/mill/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "mill-${version}";
+  version = "0.4.0";
+
+  src = fetchurl {
+    url = "https://github.com/lihaoyi/mill/releases/download/${version}/${version}";
+    sha256 = "745756498e5a67c55277534c62959c6fdfa382cda2c1a6e34ef0ea6b49c90880";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  unpackPhase = "true";
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 "$src" "$out/bin/.mill-wrapped"
+    # can't use wrapProgram because it sets --argv0
+    makeWrapper "$out/bin/.mill-wrapped" "$out/bin/mill" --set JAVA_HOME "${jre}"
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.lihaoyi.com/mill;
+    license = licenses.mit;
+    description = "A build tool for Scala, Java and more";
+    longDescription = ''
+      Mill is a build tool borrowing ideas from modern tools like Bazel, to let you build
+      your projects in a way that's simple, fast, and predictable. Mill has built in
+      support for the Scala programming language, and can serve as a replacement for
+      SBT, but can also be extended to support any other language or platform via
+      modules (written in Java or Scala) or through an external subprocesses.
+    '';
+    maintainers = with maintainers; [ scalavision ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/mk/builder.sh b/nixpkgs/pkgs/development/tools/build-managers/mk/builder.sh
new file mode 100644
index 000000000000..73678ae9f5cc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/mk/builder.sh
@@ -0,0 +1,4 @@
+source $stdenv/setup
+installFlags="PREFIX=$out"
+preInstall="mkdir -p $out/man/man1 $out/bin"
+genericBuild
diff --git a/nixpkgs/pkgs/development/tools/build-managers/mk/default.nix b/nixpkgs/pkgs/development/tools/build-managers/mk/default.nix
new file mode 100644
index 000000000000..f510752d385a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/mk/default.nix
@@ -0,0 +1,14 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "mk-2006-01-31";
+  src = fetchurl {
+    url = http://tarballs.nixos.org/mk-20060131.tar.gz;
+    sha256 = "0za8dp1211bdp4584xb59liqpww7w1ql0cmlv34p9y928nibcxsr";
+  };
+  builder = ./builder.sh;
+
+  meta = {
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/ninja/default.nix b/nixpkgs/pkgs/development/tools/build-managers/ninja/default.nix
new file mode 100644
index 000000000000..796747bf6e9c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/ninja/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, fetchFromGitHub, fetchpatch, python, buildDocs ? true, asciidoc, docbook_xml_dtd_45, docbook_xsl, libxslt, re2c }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  name = "ninja-${version}";
+  version = "1.9.0";
+
+  src = fetchFromGitHub {
+    owner = "ninja-build";
+    repo = "ninja";
+    rev = "v${version}";
+    sha256 = "1q0nld3g0d210zmdjyjzjz2xb2bw1s58gj6zsx7p8q30yh0wg610";
+  };
+
+  patches = [
+    # Make builds reproducible by generating the same IDs from the same inputs.
+    (fetchpatch {
+      name = "consistent-doc-ids";
+      url = "https://github.com/ninja-build/ninja/commit/9aa947471fcfc607bec6d92a1a6eed5c692edbaf.patch";
+      sha256 = "0zsg46jflsh644jccrcgyfalr7fkzrv041kyi8644nyk923gcrl9";
+    })
+    # https://github.com/ninja-build/ninja/issues/1510 - fix w/musl, possibly BSDs?
+    # 
+    (fetchpatch {
+      name = "fix-issue-1510.patch";
+      url = https://github.com/makepost/ninja/commit/567815df38a2ff54ad7478a90bd75c91e434236a.patch;
+      sha256 = "0zd0xyi7h2066nw1dsk76c7yf71b0f7v4p5nljda7jxi01vpdh69";
+    })
+  ];
+
+  nativeBuildInputs = [ python re2c ] ++ optionals buildDocs [ asciidoc docbook_xml_dtd_45 docbook_xsl libxslt.bin ];
+
+  buildPhase = ''
+    python configure.py --bootstrap
+  '' + optionalString buildDocs ''
+    # "./ninja -vn manual" output copied here to support cross compilation.
+    asciidoc -b docbook -d book -o build/manual.xml doc/manual.asciidoc
+    xsltproc --nonet doc/docbook.xsl build/manual.xml > doc/manual.html
+  '';
+
+  installPhase = ''
+    install -Dm555 -t $out/bin ninja
+    install -Dm444 misc/bash-completion $out/share/bash-completion/completions/ninja
+    install -Dm444 misc/zsh-completion $out/share/zsh/site-functions/_ninja
+  '' + optionalString buildDocs ''
+    install -Dm444 -t $out/share/doc/ninja doc/manual.asciidoc doc/manual.html
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  meta = {
+    description = "Small build system with a focus on speed";
+    longDescription = ''
+      Ninja is a small build system with a focus on speed. It differs from
+      other build systems in two major respects: it is designed to have its
+      input files generated by a higher-level build system, and it is designed
+      to run builds as fast as possible.
+    '';
+    homepage = https://ninja-build.org/;
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ thoughtpolice bjornfor orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/ninja/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/ninja/setup-hook.sh
new file mode 100644
index 000000000000..e3c67bd139dd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/ninja/setup-hook.sh
@@ -0,0 +1,78 @@
+ninjaBuildPhase() {
+    runHook preBuild
+
+    local buildCores=1
+
+    # Parallel building is enabled by default.
+    if [ "${enableParallelBuilding-1}" ]; then
+        buildCores="$NIX_BUILD_CORES"
+    fi
+
+    local flagsArray=(
+        -j$buildCores -l$NIX_BUILD_CORES
+        $ninjaFlags "${ninjaFlagsArray[@]}"
+    )
+
+    echoCmd 'build flags' "${flagsArray[@]}"
+    ninja "${flagsArray[@]}"
+
+    runHook postBuild
+}
+
+if [ -z "$dontUseNinjaBuild" -a -z "$buildPhase" ]; then
+    buildPhase=ninjaBuildPhase
+fi
+
+ninjaInstallPhase() {
+    runHook preInstall
+
+    # shellcheck disable=SC2086
+    local flagsArray=(
+        $ninjaFlags "${ninjaFlagsArray[@]}"
+        ${installTargets:-install}
+    )
+
+    echoCmd 'install flags' "${flagsArray[@]}"
+    ninja "${flagsArray[@]}"
+
+    runHook postInstall
+}
+
+if [ -z "$dontUseNinjaInstall" -a -z "$installPhase" ]; then
+    installPhase=ninjaInstallPhase
+fi
+
+ninjaCheckPhase() {
+    runHook preCheck
+
+    if [ -z "${checkTarget:-}" ]; then
+        if ninja -t query test >/dev/null 2>&1; then
+            checkTarget=test
+        fi
+    fi
+
+    if [ -z "${checkTarget:-}" ]; then
+        echo "no test target found in ninja, doing nothing"
+    else
+        local buildCores=1
+
+        if [ "${enableParallelChecking-1}" ]; then
+            buildCores="$NIX_BUILD_CORES"
+        fi
+
+        local flagsArray=(
+            -j$buildCores -l$NIX_BUILD_CORES
+            $ninjaFlags "${ninjaFlagsArray[@]}"
+            $checkTarget
+        )
+
+        echoCmd 'check flags' "${flagsArray[@]}"
+        ninja "${flagsArray[@]}"
+    fi
+
+    runHook postCheck
+}
+
+if [ -z "$dontUseNinjaCheck" -a -z "$checkPhase" ]; then
+    checkPhase=ninjaCheckPhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/build-managers/pants/default.nix b/nixpkgs/pkgs/development/tools/build-managers/pants/default.nix
new file mode 100644
index 000000000000..9757d8cda8d1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/pants/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, pythonPackages }:
+
+with stdenv.lib;
+with pythonPackages;
+
+buildPythonApplication rec {
+  pname = "pantsbuild.pants";
+  version = "1.7.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1d7ff1383287c8e72f2c9855cfef982d362274a64e2707a93c070f988ba80a37";
+  };
+
+  # No tests
+  doCheck = false;
+
+  prePatch = ''
+    sed -E -i "s/'([[:alnum:].-]+)[=><][[:digit:]=><.,]*'/'\\1'/g" setup.py
+    substituteInPlace setup.py --replace "requests[security]<2.19,>=2.5.0" "requests[security]<2.22,>=2.5.0"
+  '';
+
+  # Unnecessary, and causes some really weird behavior around .class files, which
+  # this package bundles. See https://github.com/NixOS/nixpkgs/issues/22520.
+  dontStrip = true;
+
+  propagatedBuildInputs = [
+    twitter-common-collections setproctitle ansicolors packaging pathspec
+    scandir twitter-common-dirutil psutil requests pystache pex docutils
+    markdown pygments twitter-common-confluence fasteners pywatchman
+    futures cffi subprocess32 contextlib2 faulthandler pyopenssl wheel
+  ];
+
+  meta = {
+    description = "A build system for software projects in a variety of languages";
+    homepage    = "https://www.pantsbuild.org/";
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ copumpkin ];
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/qbs/default.nix b/nixpkgs/pkgs/development/tools/build-managers/qbs/default.nix
new file mode 100644
index 000000000000..266dff8cf6ce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/qbs/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, qmake, qtbase, qtscript }:
+
+stdenv.mkDerivation rec {
+  name = "qbs-${version}";
+
+  version = "1.13.1";
+
+  src = fetchFromGitHub {
+    owner = "qbs";
+    repo = "qbs";
+    rev = "v${version}";
+    sha256 = "1a9mydfsax5pzbnx8g8f9blc4xpk5rdjq8fvkdaiwapdczban1ya";
+  };
+
+  nativeBuildInputs = [ qmake ];
+
+  qmakeFlags = [ "QBS_INSTALL_PREFIX=$(out)" "qbs.pro" ];
+
+  buildInputs = [ qtbase qtscript ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "A tool that helps simplify the build process for developing projects across multiple platforms";
+    homepage = "https://wiki.qt.io/Qbs";
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ expipiplus1 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile b/nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile
new file mode 100644
index 000000000000..bd1ff6faa65c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'rake'
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile.lock b/nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile.lock
new file mode 100644
index 000000000000..992a0bc8929f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rake/Gemfile.lock
@@ -0,0 +1,13 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    rake (12.3.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  rake
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/rake/default.nix
new file mode 100644
index 000000000000..8de0130d31bd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rake/default.nix
@@ -0,0 +1,15 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "rake";
+  gemdir = ./.;
+  exes = [ "rake" ];
+
+  meta = with lib; {
+    description = "A software task management and build automation tool";
+    homepage = https://github.com/ruby/rake;
+    license  = with licenses; mit;
+    maintainers = with maintainers; [ manveru ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rake/gemset.nix b/nixpkgs/pkgs/development/tools/build-managers/rake/gemset.nix
new file mode 100644
index 000000000000..05a59cff850f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rake/gemset.nix
@@ -0,0 +1,12 @@
+{
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sy5a7nh6xjdc9yhcw31jji7ssrf9v5806hn95gbrzr998a2ydjn";
+      type = "gem";
+    };
+    version = "12.3.2";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rebar/default.nix b/nixpkgs/pkgs/development/tools/build-managers/rebar/default.nix
new file mode 100644
index 000000000000..98cd7e136d22
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, erlang }:
+
+
+let
+  version = "2.5.1";
+in
+stdenv.mkDerivation {
+  name = "rebar-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/rebar/rebar/archive/${version}.tar.gz";
+    sha256 = "1y9b0smw0g5q197xf4iklzmcf8ad6w52p6mwzpf7b0ib1nd89jw6";
+  };
+
+  buildInputs = [ erlang ];
+
+  buildPhase = "escript bootstrap";
+  installPhase = ''
+    mkdir -p $out/bin
+    cp rebar $out/bin/rebar
+  '';
+
+  meta = {
+    homepage = https://github.com/rebar/rebar;
+    description = "Erlang build tool that makes it easy to compile and test Erlang applications, port drivers and releases";
+
+    longDescription = ''
+      rebar is a self-contained Erlang script, so it's easy to
+      distribute or even embed directly in a project. Where possible,
+      rebar uses standard Erlang/OTP conventions for project
+      structures, thus minimizing the amount of build configuration
+      work. rebar also provides dependency management, enabling
+      application writers to easily re-use common libraries from a
+      variety of locations (git, hg, etc).
+      '';
+
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.the-kenny ];
+    license = stdenv.lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rebar3/default.nix b/nixpkgs/pkgs/development/tools/build-managers/rebar3/default.nix
new file mode 100644
index 000000000000..60b6fd1953ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar3/default.nix
@@ -0,0 +1,141 @@
+{ stdenv, fetchFromGitHub,
+  fetchHex, erlang,
+  tree, hexRegistrySnapshot }:
+
+let
+  version = "3.10.0";
+
+  bootstrapper = ./rebar3-nix-bootstrap;
+
+  erlware_commons = fetchHex {
+    pkg = "erlware_commons";
+    version = "1.3.1";
+    sha256 = "7aada93f368d0a0430122e39931b7fb4ac9e94dbf043cdc980ad4330fd9cd166";
+  };
+  ssl_verify_fun = fetchHex {
+    pkg = "ssl_verify_fun";
+    version = "1.1.3";
+    sha256 = "2e120e6505d6e9ededb2836611dfe2f7028432dc280957998e154307b5ea92fe";
+  };
+  certifi = fetchHex {
+    pkg = "certifi";
+    version = "2.3.1";
+    sha256 = "e12d667d042c11d130594bae2b0097e63836fe8b1e6d6b2cc48f8bb7a2cf7d68";
+  };
+  providers = fetchHex {
+    pkg = "providers";
+    version = "1.7.0";
+    sha256 = "8be66129ca85c2fa74efd8737cdaedd31c1c1af51dd2fd601495a6def4cae4a6";
+  };
+  getopt = fetchHex {
+    pkg = "getopt";
+    version = "1.0.1";
+    sha256 = "53e1ab83b9ceb65c9672d3e7a35b8092e9bdc9b3ee80721471a161c10c59959c";
+  };
+  bbmustache = fetchHex {
+    pkg = "bbmustache";
+    version = "1.6.0";
+    sha256 = "53e02d296512a57be03a98c91541b34d2ca64930268030b2d12364a0332015df";
+  };
+  relx = fetchHex {
+    pkg = "relx";
+    version = "3.28.0";
+    sha256 = "8afb871c0a2a27f0063d973903fc64d2207bc705ecc3607462920683d24ac7b5";
+  };
+  cf = fetchHex {
+    pkg = "cf";
+    version = "0.2.2";
+    sha256 = "08cvy7skn5d2k4manlx5k3anqgjdvajjhc5jwxbaszxw34q3na28";
+  };
+  cth_readable = fetchHex {
+    pkg = "cth_readable";
+    version = "1.4.3";
+    sha256 = "0wr0hba6ka74s3628jrrd7ynjdh7syxigkh7ildg8fgi20ab88fd";
+  };
+  eunit_formatters = fetchHex {
+    pkg = "eunit_formatters";
+    version = "0.5.0";
+    sha256 = "1jb3hzb216r29x2h4pcjwfmx1k81431rgh5v0mp4x5146hhvmj6n";
+  };
+  hex_core = fetchHex {
+    pkg = "hex_core";
+    version = "0.4.0";
+    sha256 = "8ace8c6cfa10df4cb8be876f42f7446890e124203c094cc7b4e7616fb8de5d7f";
+  };
+  parse_trans = fetchHex {
+    pkg = "parse_trans";
+    version = "3.3.0";
+    sha256 = "0q5r871bzx1a8fa06yyxdi3xkkp7v5yqazzah03d6yl3vsmn7vqp";
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "rebar3";
+  inherit version erlang;
+
+  src = fetchFromGitHub {
+    owner = "rebar";
+    repo = pname;
+    rev = version;
+    sha256 = "1p34kfkrdmsixg95ad76rifjwfh484vp688lxsjaxg0kf2xjr2d2";
+  };
+
+  inherit bootstrapper;
+
+  buildInputs = [ erlang tree ];
+
+  # TODO: Remove registry snapshot
+  propagatedBuildInputs = [ hexRegistrySnapshot ];
+
+  postPatch = ''
+    ${erlang}/bin/escript ${bootstrapper} registry-only
+    mkdir -p _checkouts
+    mkdir -p _build/default/lib/
+
+    cp --no-preserve=mode -R ${erlware_commons} _checkouts/erlware_commons
+    cp --no-preserve=mode -R ${providers} _checkouts/providers
+    cp --no-preserve=mode -R ${getopt} _checkouts/getopt
+    cp --no-preserve=mode -R ${bbmustache} _checkouts/bbmustache
+    cp --no-preserve=mode -R ${certifi} _checkouts/certifi
+    cp --no-preserve=mode -R ${cf} _checkouts/cf
+    cp --no-preserve=mode -R ${cth_readable} _checkouts/cth_readable
+    cp --no-preserve=mode -R ${eunit_formatters} _checkouts/eunit_formatters
+    cp --no-preserve=mode -R ${relx} _checkouts/relx
+    cp --no-preserve=mode -R ${ssl_verify_fun} _checkouts/ssl_verify_fun
+    cp --no-preserve=mode -R ${hex_core} _checkouts/hex_core
+    cp --no-preserve=mode -R ${parse_trans} _checkouts/parse_trans
+
+    # Bootstrap script expects the dependencies in _build/default/lib
+    # TODO: Make it accept checkouts?
+    for i in _checkouts/* ; do
+        ln -s $(pwd)/$i $(pwd)/_build/default/lib/
+    done
+  '';
+
+  buildPhase = ''
+    HOME=. escript bootstrap
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp rebar3 $out/bin/rebar3
+  '';
+
+  meta = {
+    homepage = https://github.com/rebar/rebar3;
+    description = "Erlang build tool that makes it easy to compile and test Erlang applications, port drivers and releases";
+
+    longDescription = ''
+      rebar is a self-contained Erlang script, so it's easy to distribute or
+      even embed directly in a project. Where possible, rebar uses standard
+      Erlang/OTP conventions for project structures, thus minimizing the amount
+      of build configuration work. rebar also provides dependency management,
+      enabling application writers to easily re-use common libraries from a
+      variety of locations (hex.pm, git, hg, and so on).
+      '';
+
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = with stdenv.lib.maintainers; [ gleber tazjin ];
+    license = stdenv.lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar3-nix-bootstrap b/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar3-nix-bootstrap
new file mode 100755
index 000000000000..802f47af6adf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar3-nix-bootstrap
@@ -0,0 +1,300 @@
+#!/usr/bin/env escript
+%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*-
+%%! -smp enable
+%%% ---------------------------------------------------------------------------
+%%% @doc
+%%% The purpose of this command is to prepare a rebar3 project so that
+%%% rebar3 understands that the dependencies are all already
+%%% installed. If you want a hygienic build on nix then you must run
+%%% this command before running rebar3. I suggest that you add a
+%%% `Makefile` to your project and have the bootstrap command be a
+%%% dependency of the build commands. See the nix documentation for
+%%% more information.
+%%%
+%%% This command designed to have as few dependencies as possible so
+%%% that it can be a dependency of root level packages like rebar3. To
+%%% that end it does many things in a fairly simplistic way. That is
+%%% by design.
+%%%
+%%% ### Assumptions
+%%%
+%%% This command makes the following assumptions:
+%%%
+%%% * It is run in a nix-shell or nix-build environment
+%%% * that all dependencies have been added to the ERL_LIBS
+%%%   Environment Variable
+
+-record(data, {version
+              , registry_only = false
+              , debug_info = false
+              , compile_ports
+              , erl_libs
+              , plugins
+              , root
+              , name
+              , registry_snapshot}).
+
+-define(HEX_REGISTRY_PATH, ".cache/rebar3/hex/default/registry").
+
+main(Args) ->
+    {ok, ArgData} = parse_args(Args),
+    {ok, RequiredData} = gather_required_data_from_the_environment(ArgData),
+    do_the_bootstrap(RequiredData).
+
+%% @doc There are two modes 'registry_only' where the register is
+%% created from hex and everything else.
+-spec do_the_bootstrap(#data{}) -> ok.
+do_the_bootstrap(RequiredData = #data{registry_only = true}) ->
+    ok = bootstrap_registry(RequiredData);
+do_the_bootstrap(RequiredData) ->
+    ok = bootstrap_registry(RequiredData),
+    ok = bootstrap_configs(RequiredData),
+    ok = bootstrap_plugins(RequiredData),
+    ok = bootstrap_libs(RequiredData).
+
+%% @doc
+%% Argument parsing is super simple only because we want to keep the
+%% dependencies minimal. For now there can be two entries on the
+%% command line, "registry-only" and "debug-info"
+-spec parse_args([string()]) -> #data{}.
+parse_args(Args0) ->
+    PossibleArgs = sets:from_list(["registry-only", "debug-info"]),
+    Args1 = sets:from_list(Args0),
+    Result = sets:subtract(Args1, PossibleArgs),
+    case sets:to_list(Result) of
+        [] ->
+            {ok, #data{registry_only = sets:is_element("registry-only", Args1),
+                       debug_info = sets:is_element("debug-info", Args1)}};
+        UnknownArgs ->
+            io:format("Unexpected command line arguments passed in: ~p~n",
+                      [UnknownArgs]),
+            erlang:halt(120)
+    end.
+
+
+-spec bootstrap_configs(#data{}) -> ok.
+bootstrap_configs(RequiredData)->
+    io:format("Boostrapping app and rebar configurations~n"),
+    ok = if_single_app_project_update_app_src_version(RequiredData),
+    ok = if_compile_ports_add_pc_plugin(RequiredData),
+    ok = if_debug_info_add(RequiredData).
+
+-spec bootstrap_plugins(#data{}) -> ok.
+bootstrap_plugins(#data{plugins = Plugins}) ->
+    io:format("Bootstrapping rebar3 plugins~n"),
+    Target = "_build/default/plugins/",
+    Paths = string:tokens(Plugins, " "),
+    CopiableFiles =
+        lists:foldl(fun(Path, Acc) ->
+                            gather_dependency(Path) ++ Acc
+                    end, [], Paths),
+    lists:foreach(fun (Path) ->
+                          ok = link_app(Path, Target)
+                  end, CopiableFiles).
+
+-spec bootstrap_libs(#data{}) -> ok.
+bootstrap_libs(#data{erl_libs = ErlLibs}) ->
+    io:format("Bootstrapping dependent libraries~n"),
+    Target = "_build/default/lib/",
+    Paths = string:tokens(ErlLibs, ":"),
+    CopiableFiles =
+        lists:foldl(fun(Path, Acc) ->
+                            gather_directory_contents(Path) ++ Acc
+                    end, [], Paths),
+    lists:foreach(fun (Path) ->
+                          ok = link_app(Path, Target)
+                  end, CopiableFiles).
+
+-spec gather_dependency(string()) -> [{string(), string()}].
+gather_dependency(Path) ->
+    FullLibrary = filename:join(Path, "lib/erlang/lib/"),
+    case filelib:is_dir(FullLibrary) of
+        true ->
+            gather_directory_contents(FullLibrary);
+        false ->
+            [raw_hex(Path)]
+    end.
+
+-spec raw_hex(string()) -> {string(), string()}.
+raw_hex(Path) ->
+    [_, Name] = re:split(Path, "-hex-source-"),
+    {Path, erlang:binary_to_list(Name)}.
+
+-spec gather_directory_contents(string()) -> [{string(), string()}].
+gather_directory_contents(Path) ->
+    {ok, Names} = file:list_dir(Path),
+    lists:map(fun(AppName) ->
+                 {filename:join(Path, AppName), fixup_app_name(AppName)}
+              end, Names).
+
+%% @doc
+%% Makes a symlink from the directory pointed at by Path to a
+%% directory of the same name in Target. So if we had a Path of
+%% {`foo/bar/baz/bash`, `baz`} and a Target of `faz/foo/foos`, the symlink
+%% would be `faz/foo/foos/baz`.
+-spec link_app({string(), string()}, string()) -> ok.
+link_app({Path, TargetFile}, TargetDir) ->
+    Target = filename:join(TargetDir, TargetFile),
+    make_symlink(Path, Target).
+
+-spec make_symlink(string(), string()) -> ok.
+make_symlink(Path, TargetFile) ->
+    file:delete(TargetFile),
+    ok = filelib:ensure_dir(TargetFile),
+    io:format("Making symlink from ~s to ~s~n", [Path, TargetFile]),
+    ok = file:make_symlink(Path, TargetFile).
+
+%% @doc
+%% This takes an app name in the standard OTP <name>-<version> format
+%% and returns just the app name. Why? Because rebar doesn't
+%% respect OTP conventions in some cases.
+-spec fixup_app_name(string()) -> string().
+fixup_app_name(FileName) ->
+    case string:tokens(FileName, "-") of
+        [Name] -> Name;
+        [Name, _Version] -> Name;
+        [Name, _Version, _Tag] -> Name
+    end.
+
+-spec bootstrap_registry(#data{}) -> ok.
+bootstrap_registry(#data{registry_snapshot = RegistrySnapshot}) ->
+    io:format("Bootstrapping Hex Registry for Rebar~n"),
+    make_sure_registry_snapshot_exists(RegistrySnapshot),
+    filelib:ensure_dir(?HEX_REGISTRY_PATH),
+    ok = case filelib:is_file(?HEX_REGISTRY_PATH) of
+             true ->
+                 file:delete(?HEX_REGISTRY_PATH);
+             false ->
+                 ok
+         end,
+    ok = file:make_symlink(RegistrySnapshot,
+                           ?HEX_REGISTRY_PATH).
+
+-spec make_sure_registry_snapshot_exists(string()) -> ok.
+make_sure_registry_snapshot_exists(RegistrySnapshot) ->
+    case filelib:is_file(RegistrySnapshot) of
+        true ->
+            ok;
+        false ->
+            stderr("Registry snapshot (~s) does not exist!", [RegistrySnapshot]),
+            erlang:halt(1)
+    end.
+
+-spec gather_required_data_from_the_environment(#data{}) -> {ok, #data{}}.
+gather_required_data_from_the_environment(ArgData) ->
+    {ok, ArgData#data{ version = guard_env("version")
+                     , erl_libs = get_env("ERL_LIBS", [])
+                     , plugins = get_env("buildPlugins", [])
+                     , root = code:root_dir()
+                     , name = guard_env("name")
+                     , compile_ports = nix2bool(get_env("compilePorts", ""))
+                     , registry_snapshot = guard_env("HEX_REGISTRY_SNAPSHOT")}}.
+
+-spec nix2bool(any()) -> boolean().
+nix2bool("1") ->
+    true;
+nix2bool("") ->
+    false.
+
+get_env(Name) ->
+    os:getenv(Name).
+get_env(Name, Def) ->
+    case get_env(Name) of
+        false -> Def;
+        Val ->   Val
+    end.
+
+-spec guard_env(string()) -> string().
+guard_env(Name) ->
+    case get_env(Name) of
+        false ->
+            stderr("Expected Environment variable ~s! Are you sure you are "
+                   "running in a Nix environment? Either a nix-build, "
+                   "nix-shell, etc?~n", [Name]),
+            erlang:halt(1);
+        Variable ->
+            Variable
+    end.
+
+%% @doc
+%% If debug info is set we need to add debug info to the list of compile options
+%%
+-spec if_debug_info_add(#data{}) -> ok.
+if_debug_info_add(#data{debug_info = true}) ->
+    ConfigTerms = add_debug_info(read_rebar_config()),
+    Text = lists:map(fun(Term) -> io_lib:format("~tp.~n", [Term]) end,
+                     ConfigTerms),
+    file:write_file("rebar.config", Text);
+if_debug_info_add(_) ->
+    ok.
+
+-spec add_debug_info([term()]) -> [term()].
+add_debug_info(Config) ->
+    ExistingOpts = case lists:keysearch(erl_opts, 1, Config) of
+                       {value, {erl_opts, ExistingOptsList}} -> ExistingOptsList;
+                       _ -> []
+                   end,
+    case lists:member(debug_info, ExistingOpts) of
+        true ->
+            Config;
+        false ->
+            lists:keystore(erl_opts, 1, Config,
+                           {erl_opts, [debug_info | ExistingOpts]})
+    end.
+
+
+%% @doc
+%% If the compile ports flag is set, rewrite the rebar config to
+%% include the 'pc' plugin.
+-spec if_compile_ports_add_pc_plugin(#data{}) -> ok.
+if_compile_ports_add_pc_plugin(#data{compile_ports = true}) ->
+    ConfigTerms = add_pc_to_plugins(read_rebar_config()),
+    Text = lists:map(fun(Term) -> io_lib:format("~tp.~n", [Term]) end,
+                     ConfigTerms),
+    file:write_file("rebar.config", Text);
+if_compile_ports_add_pc_plugin(_) ->
+    ok.
+
+-spec add_pc_to_plugins([term()]) -> [term()].
+add_pc_to_plugins(Config) ->
+    PluginList = case lists:keysearch(plugins, 1, Config) of
+                     {value, {plugins, ExistingPluginList}} -> ExistingPluginList;
+                     _ -> []
+                 end,
+    lists:keystore(plugins, 1, Config, {plugins, [pc | PluginList]}).
+
+-spec read_rebar_config() -> [term()].
+read_rebar_config() ->
+    case file:consult("rebar.config") of
+        {ok, Terms} ->
+            Terms;
+        _ ->
+            stderr("Unable to read rebar config!", []),
+            erlang:halt(1)
+    end.
+
+
+-spec if_single_app_project_update_app_src_version(#data{}) -> ok.
+if_single_app_project_update_app_src_version(#data{name = Name,
+                                                   version = Version}) ->
+    SrcFile = filename:join("src",
+                            lists:concat([Name, ".app.src"])),
+
+    case filelib:is_file(SrcFile) of
+        true ->
+            update_app_src_with_version(SrcFile, Version);
+        false ->
+            ok
+    end.
+
+-spec update_app_src_with_version(string(), string()) -> ok.
+update_app_src_with_version(SrcFile, Version) ->
+    {ok, [{application, Name, Details}]} = file:consult(SrcFile),
+    NewDetails = lists:keyreplace(vsn, 1, Details, {vsn, Version}),
+    ok = file:write_file(SrcFile, io_lib:fwrite("~p.\n", [{application, Name, NewDetails}])).
+
+%% @doc
+%% Write the result of the format string out to stderr.
+-spec stderr(string(), [term()]) -> ok.
+stderr(FormatStr, Args) ->
+    io:put_chars(standard_error, io_lib:format(FormatStr, Args)).
diff --git a/nixpkgs/pkgs/development/tools/build-managers/redo-sh/default.nix b/nixpkgs/pkgs/development/tools/build-managers/redo-sh/default.nix
new file mode 100644
index 000000000000..3036ef235845
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/redo-sh/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "2.0.3";
+  name = "redo-sh-${version}";
+
+  src = fetchurl {
+    url = "http://news.dieweltistgarnichtso.net/bin/archives/redo-sh.tar.gz";
+    sha256 = "1ycx3hik7vnlbwxacn1dzr48fwsn2ials0sg6k9l3gcyrha5wf1n";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  sourceRoot = ".";
+  installPhase = ''
+    mkdir -p "$out/share"
+    mv man "$out/share"
+    mv bin "$out"
+    for p in $out/bin/*; do
+      wrapProgram "$p" --suffix PATH : "$out/bin"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Redo implementation in Bourne Shell";
+    homepage = http://news.dieweltistgarnichtso.net/bin/redo-sh.html;
+    license  = licenses.agpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ sternenseemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/redo/default.nix b/nixpkgs/pkgs/development/tools/build-managers/redo/default.nix
new file mode 100644
index 000000000000..97b82d204ad2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/redo/default.nix
@@ -0,0 +1,28 @@
+{stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  name = "redo-1.4";
+  src = fetchurl {
+    url = "https://jdebp.eu./Repository/freebsd/${name}.tar.gz";
+    sha256 = "1c8gr5h77v4fw78zkhbm9z9adqs3kd7xvxwnmci2zvlf4bqqk4jv";
+  };
+
+  nativeBuildInputs = [ perl /* for pod2man */ ];
+
+  sourceRoot = ".";
+
+  buildPhase = ''
+    ./package/compile
+  '';
+  installPhase = ''
+    ./package/export $out/
+  '';
+
+  meta = {
+    homepage = https://jdebp.eu./Softwares/redo/;
+    description = "A system for building target files from source files";
+    license = stdenv.lib.licenses.bsd2;
+    maintainers = [ stdenv.lib.maintainers.vrthra ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/remake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/remake/default.nix
new file mode 100644
index 000000000000..3eca6f02e45d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/remake/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, readline }:
+
+stdenv.mkDerivation rec {
+  name = "remake-${version}";
+  remakeVersion = "4.1";
+  dbgVersion = "1.1";
+  version = "${remakeVersion}+dbg-${dbgVersion}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/bashdb/remake/${version}/remake-${remakeVersion}+dbg${dbgVersion}.tar.bz2";
+    sha256 = "1zi16pl7sqn1aa8b7zqm9qnd9vjqyfywqm8s6iap4clf86l7kss2";
+  };
+
+  patches = [
+    ./glibc-2.27-glob.patch
+  ];
+
+  buildInputs = [ readline ];
+
+  meta = {
+    homepage = http://bashdb.sourceforge.net/remake/;
+    license = stdenv.lib.licenses.gpl3;
+    description = "GNU Make with comprehensible tracing and a debugger";
+    platforms = with stdenv.lib.platforms; linux ++ darwin;
+    maintainers = with stdenv.lib.maintainers; [ bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/remake/glibc-2.27-glob.patch b/nixpkgs/pkgs/development/tools/build-managers/remake/glibc-2.27-glob.patch
new file mode 100644
index 000000000000..ef876e2fb237
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/remake/glibc-2.27-glob.patch
@@ -0,0 +1,34 @@
+diff --git a/glob/glob.c b/glob/glob.c
+index f3911bcd861..6cb76e8e162 100644
+--- a/glob/glob.c
++++ b/glob/glob.c
+@@ -208,29 +208,8 @@ my_realloc (p, n)
+ #endif /* __GNU_LIBRARY__ || __DJGPP__ */
+ 
+ 
+-#if !defined __alloca && !defined __GNU_LIBRARY__
+-
+-# ifdef	__GNUC__
+-#  undef alloca
+-#  define alloca(n)	__builtin_alloca (n)
+-# else	/* Not GCC.  */
+-#  ifdef HAVE_ALLOCA_H
+-#   include <alloca.h>
+-#  else	/* Not HAVE_ALLOCA_H.  */
+-#   ifndef _AIX
+-#    ifdef WINDOWS32
+-#     include <malloc.h>
+-#    else
+-extern char *alloca ();
+-#    endif /* WINDOWS32 */
+-#   endif /* Not _AIX.  */
+-#  endif /* sparc or HAVE_ALLOCA_H.  */
+-# endif	/* GCC.  */
+-
+ # define __alloca	alloca
+ 
+-#endif
+-
+ #ifndef __GNU_LIBRARY__
+ # define __stat stat
+ # ifdef STAT_MACROS_BROKEN
diff --git a/nixpkgs/pkgs/development/tools/build-managers/sbt-extras/default.nix b/nixpkgs/pkgs/development/tools/build-managers/sbt-extras/default.nix
new file mode 100644
index 000000000000..e0cfe59b0516
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/sbt-extras/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, which, curl, makeWrapper, jdk }:
+
+let
+  rev = "a47a965e00ecd66793832e2a12a1972d25e6f734";
+  version = "2019-04-05";
+in
+stdenv.mkDerivation {
+  name = "sbt-extras-${version}";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "paulp";
+    repo = "sbt-extras";
+    inherit rev;
+    sha256 = "1hrz7kg0k2iqq18bg6ll2bdj487p0987880dz0c0g35ah70ps2hj";
+  };
+
+  dontBuild = true;
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+
+    substituteInPlace bin/sbt --replace 'declare java_cmd="java"' 'declare java_cmd="${jdk}/bin/java"'
+
+    install bin/sbt $out/bin
+
+    wrapProgram $out/bin/sbt --prefix PATH : ${stdenv.lib.makeBinPath [ which curl ]}
+  '';
+
+  meta = {
+    description = "A more featureful runner for sbt, the simple/scala/standard build tool";
+    homepage = https://github.com/paulp/sbt-extras;
+    license = stdenv.lib.licenses.bsd3;
+    maintainers = with stdenv.lib.maintainers; [ puffnfresh ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/sbt/default.nix b/nixpkgs/pkgs/development/tools/build-managers/sbt/default.nix
new file mode 100644
index 000000000000..8110027b6cfc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/sbt/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, jre }:
+
+stdenv.mkDerivation rec {
+  name = "sbt-${version}";
+  version = "1.2.8";
+
+  src = fetchurl {
+    urls = [
+      "https://dl.bintray.com/sbt/native-packages/sbt/${version}/${name}.tgz"
+      "https://github.com/sbt/sbt/releases/download/v${version}/sbt-${version}.tgz"
+      "https://cocl.us/sbt-${version}.tgz"
+    ];
+    sha256 = "0n7yghnb1q3lyjpv721znvslk5lwib7y84mxwz66yv8p84jj3fcv";
+  };
+
+  patchPhase = ''
+    echo -java-home ${jre.home} >>conf/sbtopts
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/sbt $out/bin
+    cp -ra . $out/share/sbt
+    ln -s $out/share/sbt/bin/sbt $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.scala-sbt.org/;
+    license = licenses.bsd3;
+    description = "A build tool for Scala, Java and more";
+    maintainers = with maintainers; [ nequissimus rickynils ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/sbt/scala-native.nix b/nixpkgs/pkgs/development/tools/build-managers/sbt/scala-native.nix
new file mode 100644
index 000000000000..70038ed2d3a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/sbt/scala-native.nix
@@ -0,0 +1,18 @@
+{ lib, sbt, makeWrapper, boehmgc, libunwind, re2, llvmPackages, zlib }:
+
+sbt.overrideDerivation(old: {
+  nativeBuildInputs = [ makeWrapper ];
+
+  version = "0.13.16";
+
+  sha256 = "033nvklclvbirhpsiy28d3ccmbm26zcs9vb7j8jndsc1ln09awi2";
+
+  postFixup = ''
+    wrapProgram $out/bin/sbt \
+      --set CLANG_PATH      "${llvmPackages.clang}/bin/clang" \
+      --set CLANGPP_PATH    "${llvmPackages.clang}/bin/clang" \
+      --set CPATH           "${lib.makeSearchPathOutput "dev" "include" [ re2 zlib boehmgc libunwind llvmPackages.libcxxabi llvmPackages.libcxx ]}/c++/v1" \
+      --set LIBRARY_PATH    "${lib.makeLibraryPath [ re2 zlib boehmgc libunwind llvmPackages.libcxxabi llvmPackages.libcxx ]}" \
+      --set NIX_CFLAGS_LINK "-lc++abi -lc++"
+  '';
+})
diff --git a/nixpkgs/pkgs/development/tools/build-managers/scons/common.nix b/nixpkgs/pkgs/development/tools/build-managers/scons/common.nix
new file mode 100644
index 000000000000..740d04d853f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scons/common.nix
@@ -0,0 +1,34 @@
+{ version, sha256 }:
+
+{ stdenv, fetchurl, python2Packages }:
+
+let name = "scons";
+in python2Packages.buildPythonApplication {
+  name = "${name}-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/scons/${name}-${version}.tar.gz";
+    inherit sha256;
+  };
+
+  # Fix a regression in 3.0.0 (causes build errors for some packages)
+  patches = stdenv.lib.optional (version == "3.0.0") ./print-statements.patch;
+
+  setupHook = ./setup-hook.sh;
+
+  meta = with stdenv.lib; {
+    homepage = http://scons.org/;
+    description = "An improved, cross-platform substitute for Make";
+    license = licenses.mit;
+    longDescription = ''
+      SCons is an Open Source software construction tool. Think of
+      SCons as an improved, cross-platform substitute for the classic
+      Make utility with integrated functionality similar to
+      autoconf/automake and compiler caches such as ccache. In short,
+      SCons is an easier, more reliable and faster way to build
+      software.
+    '';
+    platforms = platforms.all;
+    maintainers = [ maintainers.primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/scons/default.nix b/nixpkgs/pkgs/development/tools/build-managers/scons/default.nix
new file mode 100644
index 000000000000..ce15de8678d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scons/default.nix
@@ -0,0 +1,14 @@
+{ callPackage }:
+
+let
+  mkScons = args: callPackage (import ./common.nix args) { };
+in {
+  scons_3_0_1 = mkScons {
+    version = "3.0.1";
+    sha256 = "0wzid419mlwqw9llrg8gsx4nkzhqy16m4m40r0xnh6cwscw5wir4";
+  };
+  scons_latest = mkScons {
+    version = "3.0.5";
+    sha256 = "0gn7fgxvx94bjm4cim29cdz91ar1rmfxk2f39wwgljvdvhinyryz";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/scons/print-statements.patch b/nixpkgs/pkgs/development/tools/build-managers/scons/print-statements.patch
new file mode 100644
index 000000000000..a963bf78abab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scons/print-statements.patch
@@ -0,0 +1,13 @@
+diff --git a/src/engine/SCons/Script/SConscript.py b/src/engine/SCons/Script/SConscript.py
+index 558e28f9..8fea9c4d 100644
+--- src/engine/SCons/Script/SConscript.py
++++ src/engine/SCons/Script/SConscript.py
+@@ -5,8 +5,6 @@
+ 
+ """
+ 
+-from __future__ import print_function
+-
+ #
+ # __COPYRIGHT__
+ #
diff --git a/nixpkgs/pkgs/development/tools/build-managers/scons/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/scons/setup-hook.sh
new file mode 100644
index 000000000000..55159aa5a93a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scons/setup-hook.sh
@@ -0,0 +1,84 @@
+sconsBuildPhase() {
+    runHook preBuild
+
+    if [ -n "$prefix" ]; then
+        mkdir -p "$prefix"
+    fi
+
+    if [ -z "${dontAddPrefix:-}" ] && [ -n "$prefix" ]; then
+        buildFlags="${prefixKey:-prefix=}$prefix $buildFlags"
+    fi
+
+    local flagsArray=(
+      ${enableParallelBuilding:+-j${NIX_BUILD_CORES}}
+      $sconsFlags ${sconsFlagsArray[@]}
+      $buildFlags ${buildFlagsArray[@]}
+    )
+
+    echoCmd 'build flags' "${flagsArray[@]}"
+    scons "${flagsArray[@]}"
+
+    runHook postBuild
+}
+
+sconsInstallPhase() {
+    runHook preInstall
+
+    if [ -n "$prefix" ]; then
+        mkdir -p "$prefix"
+    fi
+
+    if [ -z "${dontAddPrefix:-}" ] && [ -n "$prefix" ]; then
+        installFlags="${prefixKey:-prefix=}$prefix $installFlags"
+    fi
+
+    local flagsArray=(
+        $sconsFlags ${sconsFlagsArray[@]}
+        $installFlags ${installFlagsArray[@]}
+        ${installTargets:-install}
+    )
+
+    echoCmd 'install flags' "${flagsArray[@]}"
+    scons "${flagsArray[@]}"
+
+    runHook postInstall
+}
+
+sconsCheckPhase() {
+    runHook preCheck
+
+    if [ -z "${checkTarget:-}" ]; then
+        if scons -n check >/dev/null 2>&1; then
+            checkTarget=check
+        elif scons -n test >/dev/null 2>&1; then
+            checkTarget=test
+        fi
+    fi
+
+    if [ -z "${checkTarget:-}" ]; then
+        echo "no check/test target found, doing nothing"
+    else
+        local flagsArray=(
+            ${enableParallelChecking:+-j${NIX_BUILD_CORES}}
+            $sconsFlags ${sconsFlagsArray[@]}
+            ${checkFlagsArray[@]}
+        )
+
+        echoCmd 'check flags' "${flagsArray[@]}"
+        scons "${flagsArray[@]}"
+    fi
+
+    runHook postCheck
+}
+
+if [ -z "$buildPhase" ]; then
+    buildPhase=sconsBuildPhase
+fi
+
+if [ -z "$dontUseSconsInstall" -a -z "$installPhase" ]; then
+    installPhase=sconsInstallPhase
+fi
+
+if [ -z "$checkPhase" ]; then
+    checkPhase=sconsCheckPhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/build-managers/shards/default.nix b/nixpkgs/pkgs/development/tools/build-managers/shards/default.nix
new file mode 100644
index 000000000000..02d5adb0c34d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/shards/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, crystal, pcre, libyaml, which }:
+
+stdenv.mkDerivation rec {
+  name = "shards-${version}";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner  = "crystal-lang";
+    repo   = "shards";
+    rev    = "v${version}";
+    sha256 = "1cjn2lafr08yiqzlhyqx14jjjxf1y24i2kk046px07gljpnlgqwk";
+  };
+
+  buildInputs = [ crystal libyaml pcre which ];
+
+  buildFlags = [ "CRFLAGS=--release" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 bin/shards $out/bin/shards
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Dependency manager for the Crystal language";
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ peterhoeg ];
+    inherit (crystal.meta) homepage platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/tup/default.nix b/nixpkgs/pkgs/development/tools/build-managers/tup/default.nix
new file mode 100644
index 000000000000..19256e39c33c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/tup/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchFromGitHub, fuse, pkgconfig, pcre }:
+
+stdenv.mkDerivation rec {
+  name = "tup-${version}";
+  version = "0.7.8";
+
+  src = fetchFromGitHub {
+    owner = "gittup";
+    repo = "tup";
+    rev = "v${version}";
+    sha256 = "07dmz712zbs5kayf98kywp7blssgh0y2gc1623jbsynmqwi77mcb";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ fuse pcre ];
+
+  configurePhase = ''
+    sed -i 's/`git describe`/v${version}/g' src/tup/link.sh
+    sed -i 's/pcre-confg/pkg-config pcre/g' Tupfile Tuprules.tup
+  '';
+
+  # Regular tup builds require fusermount to have suid, which nix cannot
+  # currently provide in a build environment, so we bootstrap and use 'tup
+  # generate' instead
+  buildPhase = ''
+    ./build.sh
+    ./build/tup init
+    ./build/tup generate script.sh
+    ./script.sh
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp tup $out/bin/
+
+    mkdir -p $out/share/man/man1
+    cp tup.1 $out/share/man/man1/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A fast, file-based build system";
+    longDescription = ''
+      Tup is a file-based build system for Linux, OSX, and Windows. It inputs a list
+      of file changes and a directed acyclic graph (DAG), then processes the DAG to
+      execute the appropriate commands required to update dependent files. Updates are
+      performed with very little overhead since tup implements powerful build
+      algorithms to avoid doing unnecessary work. This means you can stay focused on
+      your project rather than on your build system.
+    '';
+    homepage = http://gittup.org/tup/;
+    license = licenses.gpl2;
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/waf/default.nix b/nixpkgs/pkgs/development/tools/build-managers/waf/default.nix
new file mode 100644
index 000000000000..f9dc33a36e0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/waf/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitLab, fetchpatch, python, ensureNewerSourcesForZipFilesHook }:
+
+stdenv.mkDerivation rec {
+  name = "waf-${version}";
+  version = "2.0.15";
+
+  src = fetchFromGitLab {
+    owner = "ita1024";
+    repo = "waf";
+    rev = name;
+    sha256 = "0i86dbn6l01n4h4rzyl4mvizqabbqn5w7fywh83z7fxpha13c3bz";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://gitlab.com/grahamc/waf/commit/fc1c98f1fb575fb26b867a61cbca79aa894db2ea.patch";
+      sha256 = "0kzfrr6nh1ay8nyk0i69nhkkrq7hskn7yw1qyjxrda1y3wxj6jp8";
+    })
+  ];
+
+  buildInputs = [ python ensureNewerSourcesForZipFilesHook ];
+
+  configurePhase = ''
+    python waf-light configure
+  '';
+  buildPhase = ''
+    python waf-light build
+  '';
+  installPhase = ''
+    install waf $out
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Meta build system";
+    homepage    = https://waf.io;
+    license     = licenses.bsd3;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/waf/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/waf/setup-hook.sh
new file mode 100644
index 000000000000..3da86d3201f5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/waf/setup-hook.sh
@@ -0,0 +1,65 @@
+wafConfigurePhase() {
+    runHook preConfigure
+
+    if ! [ -f "${wafPath:=./waf}" ]; then
+        echo "copying waf to $wafPath..."
+        cp @waf@ "$wafPath"
+    fi
+
+    if [ -z "${dontAddPrefix:-}" ] && [ -n "$prefix" ]; then
+        wafConfigureFlags="${prefixKey:---prefix=}$prefix $wafConfigureFlags"
+    fi
+
+    local flagsArray=(
+        @crossFlags@
+        "${flagsArray[@]}"
+        $wafConfigureFlags "${wafConfigureFlagsArray[@]}"
+        ${configureTargets:-configure}
+    )
+    echoCmd 'configure flags' "${flagsArray[@]}"
+    python "$wafPath" "${flagsArray[@]}"
+
+    runHook postConfigure
+}
+
+wafBuildPhase () {
+    runHook preBuild
+
+    # set to empty if unset
+    : ${wafFlags=}
+
+    local flagsArray=(
+      ${enableParallelBuilding:+-j ${NIX_BUILD_CORES}}
+      $wafFlags ${wafFlagsArray[@]}
+      $buildFlags ${buildFlagsArray[@]}
+      ${buildTargets:-build}
+    )
+
+    echoCmd 'build flags' "${flagsArray[@]}"
+    python "$wafPath" "${flagsArray[@]}"
+
+    runHook postBuild
+}
+
+wafInstallPhase() {
+    runHook preInstall
+
+    if [ -n "$prefix" ]; then
+        mkdir -p "$prefix"
+    fi
+
+    local flagsArray=(
+        $wafFlags ${wafFlagsArray[@]}
+        $installFlags ${installFlagsArray[@]}
+	${installTargets:-install}
+    )
+
+    echoCmd 'install flags' "${flagsArray[@]}"
+    python "$wafPath" "${flagsArray[@]}"
+
+    runHook postInstall
+}
+
+configurePhase=wafConfigurePhase
+buildPhase=wafBuildPhase
+installPhase=wafInstallPhase
diff --git a/nixpkgs/pkgs/development/tools/buildah/default.nix b/nixpkgs/pkgs/development/tools/buildah/default.nix
new file mode 100644
index 000000000000..8fd60f05b86c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/buildah/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, buildGoPackage, fetchFromGitHub
+, gpgme, libgpgerror, lvm2, btrfs-progs, pkgconfig, ostree, libselinux, libseccomp
+, go-md2man }:
+
+let
+  version = "1.8.3";
+
+  src = fetchFromGitHub {
+    rev    = "v${version}";
+    owner  = "containers";
+    repo   = "buildah";
+    sha256 = "12fi67pnp07zrk72zniiciw2nhmzn6lmbkydv5sib08x765izn6s";
+  };
+
+  goPackagePath = "github.com/containers/buildah";
+
+in buildGoPackage rec {
+  name = "buildah-${version}";
+  inherit src;
+
+  outputs = [ "bin" "man" "out" ];
+
+  inherit goPackagePath;
+  excludedPackages = [ "tests" ];
+
+  # Optimizations break compilation of libseccomp c bindings
+  hardeningDisable = [ "fortify" ];
+
+  nativeBuildInputs = [ pkgconfig go-md2man.bin ];
+  buildInputs = [ gpgme libgpgerror lvm2 btrfs-progs ostree libselinux libseccomp ];
+
+  # Copied from the skopeo package, doesn’t seem to make a difference?
+  # If something related to these libs failed, uncomment these lines.
+  /*preBuild = with lib; ''
+    export CGO_CFLAGS="-I${getDev gpgme}/include -I${getDev libgpgerror}/include -I${getDev devicemapper}/include -I${getDev btrfs-progs}/include"
+    export CGO_LDFLAGS="-L${getLib gpgme}/lib -L${getLib libgpgerror}/lib -L${getLib devicemapper}/lib"
+  '';*/
+
+  postBuild = ''
+    # depends on buildGoPackage not changing …
+    pushd ./go/src/${goPackagePath}/docs
+    make docs
+    make install PREFIX="$man"
+    popd
+  '';
+
+  meta = {
+    description = "A tool which facilitates building OCI images";
+    homepage = https://github.com/containers/buildah;
+    maintainers = with stdenv.lib.maintainers; [ Profpatsch vdemeester ];
+    license = stdenv.lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cachix/default.nix b/nixpkgs/pkgs/development/tools/cachix/default.nix
new file mode 100644
index 000000000000..a127fb137f67
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cachix/default.nix
@@ -0,0 +1,3 @@
+{ haskellPackages, haskell }:
+
+(haskell.lib.doDistribute haskellPackages.cachix).bin
diff --git a/nixpkgs/pkgs/development/tools/cadre/Gemfile b/nixpkgs/pkgs/development/tools/cadre/Gemfile
new file mode 100644
index 000000000000..aa42f75c95cf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cadre/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'cadre', '=1.0.4'
diff --git a/nixpkgs/pkgs/development/tools/cadre/Gemfile.lock b/nixpkgs/pkgs/development/tools/cadre/Gemfile.lock
new file mode 100644
index 000000000000..c14df9cffa61
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cadre/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    cadre (1.0.4)
+      thor (>= 0.14, < 1.0)
+      tilt (> 1.0)
+      valise (~> 1.2)
+    thor (0.20.3)
+    tilt (2.0.9)
+    valise (1.2.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  cadre (= 1.0.4)
+
+BUNDLED WITH
+   1.16.3
diff --git a/nixpkgs/pkgs/development/tools/cadre/default.nix b/nixpkgs/pkgs/development/tools/cadre/default.nix
new file mode 100644
index 000000000000..93eb32cfb514
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cadre/default.nix
@@ -0,0 +1,15 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "cadre";
+  gemdir = ./.;
+  exes = [ "cadre" ];
+
+  meta = with lib; {
+    description = "Toolkit to add Ruby development - in-editor coverage, libnotify of test runs";
+    homepage    = https://github.com/nyarly/cadre;
+    license     = licenses.mit;
+    maintainers = [ maintainers.nyarly ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cadre/gemset.nix b/nixpkgs/pkgs/development/tools/cadre/gemset.nix
new file mode 100644
index 000000000000..33fd428debf2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cadre/gemset.nix
@@ -0,0 +1,35 @@
+{
+  cadre = {
+    dependencies = ["thor" "tilt" "valise"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07q60s1bm2xar46g00ls5fjkn6dm2kfxhsz9ayblc31x5kr8d83a";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  thor = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+  tilt = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ca4k0clwf0rkvy7726x4nxpjxkpv67w043i39saxgldxd97zmwz";
+      type = "gem";
+    };
+    version = "2.0.9";
+  };
+  valise = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1arsbmk2gifrhv244qrld7s3202xrnxy6vlc5gqklg70dpsinbn5";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/cargo-web/default.nix b/nixpkgs/pkgs/development/tools/cargo-web/default.nix
new file mode 100644
index 000000000000..262a3d31742a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cargo-web/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, openssl, perl, pkgconfig, rustPlatform
+, CoreServices, Security, cf-private
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-web";
+  version = "0.6.25";
+
+  src = fetchFromGitHub {
+    owner = "koute";
+    repo = pname;
+    rev = version;
+    sha256 = "0q77bryc7ap8gb4rzp9xk8ngqwxh106qn7899g30lwxycnyii0mf";
+  };
+
+  cargoSha256 = "1f4sj260q4rlzbajwimya1yhh90hmmbhr47yfg9i8xcv5cg0cqjn";
+
+  nativeBuildInputs = [ openssl perl pkgconfig ];
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [
+    CoreServices Security
+    # Needed for CFURLResourceIsReachable symbols.
+    cf-private
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A Cargo subcommand for the client-side Web";
+    homepage = https://github.com/koute/cargo-web;
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.kevincox ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cask/default.nix b/nixpkgs/pkgs/development/tools/cask/default.nix
new file mode 100644
index 000000000000..e33761a67e02
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cask/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchurl, python, emacsPackagesNg }:
+
+stdenv.mkDerivation rec {
+  name = "cask-${version}";
+  version = "0.8.4";
+
+  src = fetchurl {
+    url = "https://github.com/cask/cask/archive/v${version}.tar.gz";
+    sha256 = "02f8bb20b33b23fb11e7d2a1d282519dfdb8b3090b9672448b8c2c2cacd3e478";
+  };
+
+  doCheck = true;
+  buildInputs = with emacsPackagesNg; [
+    s f dash ansi ecukes servant ert-runner el-mock
+    noflet ert-async shell-split-string git package-build
+  ];
+  buildPhase = ''
+    emacs --batch -L . -f batch-byte-compile cask.el cask-cli.el
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/templates
+    mkdir -p $out/share/emacs/site-lisp/cask/bin
+    install -Dm644 *.el *.elc $out/share/emacs/site-lisp/cask
+    install -Dm755 bin/cask $out/share/emacs/site-lisp/cask/bin
+    install -Dm644 templates/* $out/templates/
+    touch $out/.no-upgrade
+    ln -s $out/share/emacs/site-lisp/cask/bin/cask $out/bin/cask
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Project management for Emacs";
+    longDescription = ''
+      Cask is a project management tool for Emacs that helps automate the
+      package development cycle; development, dependencies, testing, building,
+      packaging and more.
+      Cask can also be used to manage dependencies for your local Emacs configuration.
+    '';
+
+    homepage = https://cask.readthedocs.io/en/latest/index.html;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.flexw ];
+  };
+
+  nativeBuildInputs = [ emacsPackagesNg.emacs python ];
+}
diff --git a/nixpkgs/pkgs/development/tools/casperjs/default.nix b/nixpkgs/pkgs/development/tools/casperjs/default.nix
new file mode 100644
index 000000000000..e07b3cd9db74
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/casperjs/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, fetchFromGitHub, fontsConf, phantomjs2, python, nodePackages }:
+
+let version = "1.1.1";
+
+in stdenv.mkDerivation rec {
+
+  name = "casperjs-${version}";
+
+  src = fetchFromGitHub {
+    owner = "casperjs";
+    repo = "casperjs";
+    rev = version;
+    sha256 = "187prrm728xpn0nx9kxfxa4fwd7w25z78nsxfk6a6kl7c5656jpz";
+  };
+
+  buildInputs = [ phantomjs2 python nodePackages.eslint ];
+
+  patchPhase = ''
+    substituteInPlace bin/casperjs --replace "/usr/bin/env python" "${python}/bin/python" \
+                                   --replace "'phantomjs'" "'${phantomjs2}/bin/phantomjs'"
+  '';
+
+  dontBuild = true;
+
+  doCheck = true;
+  checkPhase = ''
+    export FONTCONFIG_FILE=${fontsConf}
+    make test
+  '';
+
+  installPhase = ''
+    cp -r . $out
+  '';
+
+  meta = {
+
+    description = ''
+      Navigation scripting & testing utility for PhantomJS and SlimerJS
+    '';
+
+    longDescription = ''
+      CasperJS is a navigation scripting & testing utility for PhantomJS and
+      SlimerJS (still experimental). It eases the process of defining a full
+      navigation scenario and provides useful high-level functions, methods &
+      syntactic sugar for doing common tasks.
+    '';
+
+    homepage = http://casperjs.org;
+    license = stdenv.lib.licenses.mit;
+
+    maintainers = [ stdenv.lib.maintainers.bluescreen303 ];
+    platforms = stdenv.lib.platforms.linux;
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/castxml/default.nix b/nixpkgs/pkgs/development/tools/castxml/default.nix
new file mode 100644
index 000000000000..653d0d4505e7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/castxml/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchFromGitHub
+, pythonPackages
+, cmake
+, llvmPackages
+, libffi, libxml2, zlib
+, withMan ? true
+}:
+stdenv.mkDerivation rec {
+
+  pname   = "CastXML";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner  = pname;
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "1qpgr5hyb692h7l5igmq53m6a6vi4d9qp8ks893cflfx9955h3ip";
+  };
+
+  nativeBuildInputs = [ cmake ] ++ stdenv.lib.optionals withMan [ pythonPackages.sphinx ];
+
+  cmakeFlags = [
+    "-DCLANG_RESOURCE_DIR=${llvmPackages.clang-unwrapped}"
+    "-DSPHINX_MAN=${if withMan then "ON" else "OFF"}"
+  ];
+
+  buildInputs = [
+    llvmPackages.clang-unwrapped
+    llvmPackages.llvm
+    libffi libxml2 zlib
+  ];
+
+  propagatedBuildInputs = [ llvmPackages.libclang ];
+
+  # 97% tests passed, 97 tests failed out of 2881
+  # mostly because it checks command line and nix append -isystem and all
+  doCheck = false;
+  checkPhase = ''
+    # -E exclude 4 tests based on names
+    # see https://github.com/CastXML/CastXML/issues/90
+    ctest -E 'cmd.cc-(gnu|msvc)-((c-src-c)|(src-cxx))-cmd'
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/CastXML/CastXML";
+    license = licenses.asl20;
+    description = "Abstract syntax tree XML output tool";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cbor-diag/Gemfile b/nixpkgs/pkgs/development/tools/cbor-diag/Gemfile
new file mode 100644
index 000000000000..798e507460eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cbor-diag/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'cbor-diag'
diff --git a/nixpkgs/pkgs/development/tools/cbor-diag/Gemfile.lock b/nixpkgs/pkgs/development/tools/cbor-diag/Gemfile.lock
new file mode 100644
index 000000000000..0d129765aa4a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cbor-diag/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    cbor-diag (0.5.2)
+      json
+      treetop (~> 1)
+    json (2.1.0)
+    polyglot (0.3.5)
+    treetop (1.6.10)
+      polyglot (~> 0.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  cbor-diag
+
+BUNDLED WITH
+   1.14.6
diff --git a/nixpkgs/pkgs/development/tools/cbor-diag/default.nix b/nixpkgs/pkgs/development/tools/cbor-diag/default.nix
new file mode 100644
index 000000000000..049d9f38c0c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cbor-diag/default.nix
@@ -0,0 +1,30 @@
+{ lib, bundlerApp, ruby }:
+
+bundlerApp {
+  pname = "cbor-diag";
+
+  inherit ruby;
+  gemdir = ./.;
+
+  exes = [
+    "cbor2diag.rb"
+    "cbor2json.rb"
+    "cbor2pretty.rb"
+    "cbor2yaml.rb"
+    "diag2cbor.rb"
+    "diag2pretty.rb"
+    "json2cbor.rb"
+    "json2pretty.rb"
+    "pretty2cbor.rb"
+    "pretty2diag.rb"
+    "yaml2cbor.rb"
+  ];
+
+  meta = with lib; {
+    description = "CBOR diagnostic utilities";
+    homepage    = https://github.com/cabo/cbor-diag;
+    license     = with licenses; asl20;
+    maintainers = with maintainers; [ fdns ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cbor-diag/gemset.nix b/nixpkgs/pkgs/development/tools/cbor-diag/gemset.nix
new file mode 100644
index 000000000000..2de0e9a647a7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cbor-diag/gemset.nix
@@ -0,0 +1,36 @@
+{
+  cbor-diag = {
+    dependencies = ["json" "treetop"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g4pxf1ag4pyb351m06l08ig1smnf8w27ynqfxkgmwak5mh1z7w1";
+      type = "gem";
+    };
+    version = "0.5.2";
+  };
+  json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  polyglot = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g31pijhnv7z960sd09lckmw9h8rs3wmc8g4ihmppszxqm99zpv7";
+      type = "gem";
+    };
+    version = "1.6.10";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/cddl/Gemfile b/nixpkgs/pkgs/development/tools/cddl/Gemfile
new file mode 100644
index 000000000000..2ba729084f1a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cddl/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'cddl'
diff --git a/nixpkgs/pkgs/development/tools/cddl/Gemfile.lock b/nixpkgs/pkgs/development/tools/cddl/Gemfile.lock
new file mode 100644
index 000000000000..65701dd45bf8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cddl/Gemfile.lock
@@ -0,0 +1,28 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    abnc (0.1.0)
+    cbor-diag (0.5.2)
+      json
+      treetop (~> 1)
+    cddl (0.8.5)
+      abnc
+      cbor-diag
+      colorize
+      json
+      regexp-examples
+    colorize (0.8.1)
+    json (2.1.0)
+    polyglot (0.3.5)
+    regexp-examples (1.4.2)
+    treetop (1.6.10)
+      polyglot (~> 0.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  cddl
+
+BUNDLED WITH
+   1.14.6
diff --git a/nixpkgs/pkgs/development/tools/cddl/default.nix b/nixpkgs/pkgs/development/tools/cddl/default.nix
new file mode 100644
index 000000000000..37ad593d7964
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cddl/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, ruby }:
+
+bundlerApp {
+  pname = "cddl";
+
+  inherit ruby;
+  gemdir = ./.;
+  exes = [ "cddl" ];
+
+  meta = with lib; {
+    description = "A parser, generator, and validator for CDDL";
+    homepage    = https://rubygems.org/gems/cddl;
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ fdns ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cddl/gemset.nix b/nixpkgs/pkgs/development/tools/cddl/gemset.nix
new file mode 100644
index 000000000000..92aa41995051
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cddl/gemset.nix
@@ -0,0 +1,69 @@
+{
+  abnc = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13nvzrk72nj130fs8bq8q3cfm48939rdzh7l31ncj5c4969hrbig";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  cbor-diag = {
+    dependencies = ["json" "treetop"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g4pxf1ag4pyb351m06l08ig1smnf8w27ynqfxkgmwak5mh1z7w1";
+      type = "gem";
+    };
+    version = "0.5.2";
+  };
+  cddl = {
+    dependencies = ["abnc" "cbor-diag" "colorize" "json" "regexp-examples"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pg91wrby0qgrdnf089ddy5yy2jalxd3bb9dljj16cpwv4gjx047";
+      type = "gem";
+    };
+    version = "0.8.5";
+  };
+  colorize = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "133rqj85n400qk6g3dhf2bmfws34mak1wqihvh3bgy9jhajw580b";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  polyglot = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  regexp-examples = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "104f0j0h2x5ijly7kyaj7zz0md65r2c03cpbi5cngm0hs2sr1qkz";
+      type = "gem";
+    };
+    version = "1.4.2";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g31pijhnv7z960sd09lckmw9h8rs3wmc8g4ihmppszxqm99zpv7";
+      type = "gem";
+    };
+    version = "1.6.10";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/cdecl/cdecl-2.5-lex.patch b/nixpkgs/pkgs/development/tools/cdecl/cdecl-2.5-lex.patch
new file mode 100644
index 000000000000..ecdee5d544f6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cdecl/cdecl-2.5-lex.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile b/Makefile
+index 1643b74..8f1ae11 100644
+--- a/Makefile
++++ b/Makefile
+@@ -33,7 +33,7 @@ c++decl: cdgram.c cdlex.c cdecl.c
+ 	rm -f cdecl
+ 
+ cdlex.c: cdlex.l
+-	lex cdlex.l && mv lex.yy.c cdlex.c
++	flex cdlex.l && mv lex.yy.c cdlex.c
+ 
+ cdgram.c: cdgram.y
+ 	yacc cdgram.y && mv y.tab.c cdgram.c
diff --git a/nixpkgs/pkgs/development/tools/cdecl/default.nix b/nixpkgs/pkgs/development/tools/cdecl/default.nix
new file mode 100644
index 000000000000..7981681a6414
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cdecl/default.nix
@@ -0,0 +1,25 @@
+{stdenv, fetchurl, yacc, flex, readline, ncurses, gnused}:
+
+stdenv.mkDerivation {
+  name = "cdecl-2.5";
+  src = fetchurl {
+    url = "https://www.cdecl.org/files/cdecl-blocks-2.5.tar.gz";
+    sha256 = "1b7k0ra30hh8mg8fqv0f0yzkaac6lfg6n376drgbpxg4wwml1rly";
+  };
+
+  patches = [ ./cdecl-2.5-lex.patch ];
+  preBuild = ''
+    ${gnused}/bin/sed 's/getline/cdecl_getline/g' -i cdecl.c;
+    makeFlagsArray=(CFLAGS="-DBSD -DUSE_READLINE -std=gnu89" LIBS=-lreadline);
+    makeFlags="$makeFlags PREFIX=$out BINDIR=$out/bin MANDIR=$out/man1 CATDIR=$out/cat1 CC=$CC";
+    mkdir -p $out/bin;
+  '';
+  buildInputs = [yacc flex readline ncurses];
+
+  meta = {
+    description = "Translator English -- C/C++ declarations";
+    license = stdenv.lib.licenses.publicDomain;
+    maintainers = with stdenv.lib.maintainers; [joelteon];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/check/default.nix b/nixpkgs/pkgs/development/tools/check/default.nix
new file mode 100644
index 000000000000..dfa164e6755c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/check/default.nix
@@ -0,0 +1,30 @@
+{ buildGoPackage
+, lib
+, fetchFromGitLab
+}:
+
+buildGoPackage rec {
+  name = "check-unstable-${version}";
+  version = "2018-09-12";
+  rev = "88db195993f8e991ad402754accd0635490769f9";
+
+  goPackagePath = "gitlab.com/opennota/check";
+
+  src = fetchFromGitLab {
+    inherit rev;
+
+    owner = "opennota";
+    repo = "check";
+    sha256 = "1983xmdkgpqda4qz8ashc6xv1zg5jl4zly3w566grxc5sfxpgf0i";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "A set of utilities for checking Go sources.";
+    homepage = https://gitlab.com/opennota/check;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/check/deps.nix b/nixpkgs/pkgs/development/tools/check/deps.nix
new file mode 100644
index 000000000000..b9c50d95d117
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/check/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "677d2ff680c1";
+      sha256 = "0vp1w1haqcjd82dxd6x9xrllbfwvm957rxwkpji96cgvhsli2bq5";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/chefdk/Gemfile b/nixpkgs/pkgs/development/tools/chefdk/Gemfile
new file mode 100644
index 000000000000..4d9640c8e9f9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/chefdk/Gemfile
@@ -0,0 +1,17 @@
+source 'https://rubygems.org'
+
+gem 'chef-dk', '2.4.17'
+gem 'pry'
+gem 'test-kitchen'
+gem 'inspec'
+gem 'kitchen-inspec'
+gem 'kitchen-vagrant'
+gem 'berkshelf'
+gem 'chef-vault'
+gem 'foodcritic'
+gem 'ohai'
+gem 'rubocop'
+gem 'knife-spork'
+gem 'fauxhai'
+gem 'chefspec'
+gem 'chef-provisioning'
diff --git a/nixpkgs/pkgs/development/tools/chefdk/Gemfile.lock b/nixpkgs/pkgs/development/tools/chefdk/Gemfile.lock
new file mode 100644
index 000000000000..545375d87805
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/chefdk/Gemfile.lock
@@ -0,0 +1,400 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.5.2)
+      public_suffix (>= 2.0.2, < 4.0)
+    app_conf (0.4.2)
+    ast (2.3.0)
+    backports (3.10.3)
+    berkshelf (6.3.1)
+      buff-config (~> 2.0)
+      buff-extensions (~> 2.0)
+      chef (>= 12.7.2)
+      cleanroom (~> 1.0)
+      concurrent-ruby (~> 1.0)
+      faraday (~> 0.9)
+      httpclient (~> 2.7)
+      minitar (~> 0.5, >= 0.5.4)
+      mixlib-archive (~> 0.4)
+      mixlib-shellout (~> 2.0)
+      octokit (~> 4.0)
+      retryable (~> 2.0)
+      ridley (~> 5.0)
+      solve (~> 4.0)
+      thor (~> 0.19, < 0.19.2)
+    buff-config (2.0.0)
+      buff-extensions (~> 2.0)
+      varia_model (~> 0.6)
+    buff-extensions (2.0.0)
+    buff-ignore (1.2.0)
+    buff-ruby_engine (1.0.0)
+    buff-shell_out (1.1.0)
+      buff-ruby_engine (~> 1.0)
+    builder (3.2.3)
+    celluloid (0.16.0)
+      timers (~> 4.0.0)
+    celluloid-io (0.16.2)
+      celluloid (>= 0.16.0)
+      nio4r (>= 1.1.0)
+    chef (13.6.4)
+      addressable
+      bundler (>= 1.10)
+      chef-config (= 13.6.4)
+      chef-zero (>= 13.0)
+      diff-lcs (~> 1.2, >= 1.2.4)
+      erubis (~> 2.7)
+      ffi-yajl (~> 2.2)
+      highline (~> 1.6, >= 1.6.9)
+      iniparse (~> 1.4)
+      iso8601 (~> 0.9.1)
+      mixlib-archive (~> 0.4)
+      mixlib-authentication (~> 1.4)
+      mixlib-cli (~> 1.7)
+      mixlib-log (~> 1.3)
+      mixlib-shellout (~> 2.0)
+      net-sftp (~> 2.1, >= 2.1.2)
+      net-ssh (>= 2.9, < 5.0)
+      net-ssh-multi (~> 1.2, >= 1.2.1)
+      ohai (~> 13.0)
+      plist (~> 3.2)
+      proxifier (~> 1.0)
+      rspec-core (~> 3.5)
+      rspec-expectations (~> 3.5)
+      rspec-mocks (~> 3.5)
+      rspec_junit_formatter (~> 0.2.0)
+      serverspec (~> 2.7)
+      specinfra (~> 2.10)
+      syslog-logger (~> 1.6)
+      uuidtools (~> 2.1.5)
+    chef-config (13.6.4)
+      addressable
+      fuzzyurl
+      mixlib-config (~> 2.0)
+      mixlib-shellout (~> 2.0)
+    chef-dk (2.4.17)
+      addressable (>= 2.3.5, < 2.6)
+      chef (~> 13.0)
+      chef-provisioning (~> 2.0)
+      cookbook-omnifetch (~> 0.5)
+      diff-lcs (~> 1.0)
+      ffi-yajl (>= 1.0, < 3.0)
+      minitar (~> 0.5.4)
+      mixlib-cli (~> 1.7)
+      mixlib-shellout (~> 2.0)
+      paint (~> 1.0)
+      solve (> 2.0, < 5.0)
+    chef-provisioning (2.6.0)
+      cheffish (>= 4.0, < 14.0)
+      inifile (>= 2.0.2)
+      mixlib-install (>= 1.0)
+      net-scp (~> 1.0)
+      net-ssh (>= 2.9, < 5.0)
+      net-ssh-gateway (> 1.2, < 3.0)
+      winrm (~> 2.0)
+      winrm-elevated (~> 1.0)
+      winrm-fs (~> 1.0)
+    chef-vault (3.3.0)
+    chef-zero (13.1.0)
+      ffi-yajl (~> 2.2)
+      hashie (>= 2.0, < 4.0)
+      mixlib-log (~> 1.3)
+      rack (~> 2.0)
+      uuidtools (~> 2.1)
+    cheffish (13.1.0)
+      chef-zero (~> 13.0)
+      net-ssh
+    chefspec (7.1.1)
+      chef (>= 12.14.89)
+      fauxhai (>= 4, < 6)
+      rspec (~> 3.0)
+    cleanroom (1.0.0)
+    coderay (1.1.2)
+    concurrent-ruby (1.0.5)
+    cookbook-omnifetch (0.8.0)
+      mixlib-archive (~> 0.4)
+    cucumber-core (3.1.0)
+      backports (>= 3.8.0)
+      cucumber-tag_expressions (~> 1.1.0)
+      gherkin (>= 5.0.0)
+    cucumber-tag_expressions (1.1.1)
+    diff-lcs (1.3)
+    diffy (3.2.0)
+    docker-api (1.34.0)
+      excon (>= 0.47.0)
+      multi_json
+    erubis (2.7.0)
+    excon (0.59.0)
+    faraday (0.13.1)
+      multipart-post (>= 1.2, < 3)
+    fauxhai (5.5.0)
+      net-ssh
+    ffi (1.9.18)
+    ffi-yajl (2.3.1)
+      libyajl2 (~> 1.2)
+    foodcritic (12.2.1)
+      cucumber-core (>= 1.3)
+      erubis
+      ffi-yajl (~> 2.0)
+      nokogiri (>= 1.5, < 2.0)
+      rake
+      rufus-lru (~> 1.0)
+      treetop (~> 1.4)
+    fuzzyurl (0.9.0)
+    gherkin (5.0.0)
+    git (1.3.0)
+    gssapi (1.2.0)
+      ffi (>= 1.0.1)
+    gyoku (1.3.1)
+      builder (>= 2.1.2)
+    hashie (3.5.6)
+    highline (1.7.10)
+    hitimes (1.2.6)
+    htmlentities (4.3.4)
+    httpclient (2.8.3)
+    inifile (3.0.0)
+    iniparse (1.4.4)
+    inspec (1.47.0)
+      addressable (~> 2.4)
+      faraday (>= 0.9.0)
+      hashie (~> 3.4)
+      htmlentities
+      json (>= 1.8, < 3.0)
+      method_source (~> 0.8)
+      mixlib-log
+      parallel (~> 1.9)
+      parslet (~> 1.5)
+      pry (~> 0)
+      rainbow (~> 2)
+      rspec (~> 3)
+      rspec-its (~> 1.2)
+      rubyzip (~> 1.1)
+      semverse
+      sslshake (~> 1.2)
+      thor (~> 0.19)
+      tomlrb (~> 1.2)
+      train (~> 0.30)
+    ipaddress (0.8.3)
+    iso8601 (0.9.1)
+    json (2.1.0)
+    kitchen-inspec (0.20.0)
+      hashie (~> 3.4)
+      inspec (>= 0.34.0, < 2.0.0)
+      test-kitchen (~> 1.6)
+    kitchen-vagrant (1.2.1)
+      test-kitchen (~> 1.4)
+    knife-spork (1.7.1)
+      app_conf (>= 0.4.0)
+      chef (>= 11.0.0)
+      diffy (>= 3.0.1)
+      git (>= 1.2.5)
+    libyajl2 (1.2.0)
+    little-plugger (1.1.4)
+    logging (2.2.2)
+      little-plugger (~> 1.1)
+      multi_json (~> 1.10)
+    method_source (0.9.0)
+    mini_portile2 (2.3.0)
+    minitar (0.5.4)
+    mixlib-archive (0.4.1)
+      mixlib-log
+    mixlib-authentication (1.4.2)
+    mixlib-cli (1.7.0)
+    mixlib-config (2.2.4)
+    mixlib-install (3.8.0)
+      mixlib-shellout
+      mixlib-versioning
+      thor
+    mixlib-log (1.7.1)
+    mixlib-shellout (2.3.2)
+    mixlib-versioning (1.2.2)
+    molinillo (0.6.4)
+    multi_json (1.12.2)
+    multipart-post (2.0.0)
+    net-scp (1.2.1)
+      net-ssh (>= 2.6.5)
+    net-sftp (2.1.2)
+      net-ssh (>= 2.6.5)
+    net-ssh (4.2.0)
+    net-ssh-gateway (1.3.0)
+      net-ssh (>= 2.6.5)
+    net-ssh-multi (1.2.1)
+      net-ssh (>= 2.6.5)
+      net-ssh-gateway (>= 1.2.0)
+    net-telnet (0.1.1)
+    nio4r (2.1.0)
+    nokogiri (1.8.1)
+      mini_portile2 (~> 2.3.0)
+    nori (2.6.0)
+    octokit (4.7.0)
+      sawyer (~> 0.8.0, >= 0.5.3)
+    ohai (13.7.0)
+      chef-config (>= 12.5.0.alpha.1, < 14)
+      ffi (~> 1.9)
+      ffi-yajl (~> 2.2)
+      ipaddress
+      mixlib-cli
+      mixlib-config (~> 2.0)
+      mixlib-log (>= 1.7.1, < 2.0)
+      mixlib-shellout (~> 2.0)
+      plist (~> 3.1)
+      systemu (~> 2.6.4)
+      wmi-lite (~> 1.0)
+    paint (1.0.1)
+    parallel (1.12.0)
+    parser (2.4.0.2)
+      ast (~> 2.3)
+    parslet (1.8.1)
+    plist (3.3.0)
+    polyglot (0.3.5)
+    powerpack (0.1.1)
+    proxifier (1.0.3)
+    pry (0.11.3)
+      coderay (~> 1.1.0)
+      method_source (~> 0.9.0)
+    public_suffix (3.0.1)
+    rack (2.0.6)
+    rainbow (2.2.2)
+      rake
+    rake (12.3.0)
+    retryable (2.0.4)
+    ridley (5.1.1)
+      addressable
+      buff-config (~> 2.0)
+      buff-extensions (~> 2.0)
+      buff-ignore (~> 1.2)
+      buff-shell_out (~> 1.0)
+      celluloid (~> 0.16.0)
+      celluloid-io (~> 0.16.1)
+      chef-config (>= 12.5.0)
+      erubis
+      faraday (~> 0.9)
+      hashie (>= 2.0.2, < 4.0.0)
+      httpclient (~> 2.7)
+      json (>= 1.7.7)
+      mixlib-authentication (>= 1.3.0)
+      retryable (~> 2.0)
+      semverse (~> 2.0)
+      varia_model (~> 0.6)
+    rspec (3.7.0)
+      rspec-core (~> 3.7.0)
+      rspec-expectations (~> 3.7.0)
+      rspec-mocks (~> 3.7.0)
+    rspec-core (3.7.0)
+      rspec-support (~> 3.7.0)
+    rspec-expectations (3.7.0)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.7.0)
+    rspec-its (1.2.0)
+      rspec-core (>= 3.0.0)
+      rspec-expectations (>= 3.0.0)
+    rspec-mocks (3.7.0)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.7.0)
+    rspec-support (3.7.0)
+    rspec_junit_formatter (0.2.3)
+      builder (< 4)
+      rspec-core (>= 2, < 4, != 2.12.0)
+    rubocop (0.51.0)
+      parallel (~> 1.10)
+      parser (>= 2.3.3.1, < 3.0)
+      powerpack (~> 0.1)
+      rainbow (>= 2.2.2, < 3.0)
+      ruby-progressbar (~> 1.7)
+      unicode-display_width (~> 1.0, >= 1.0.1)
+    ruby-progressbar (1.9.0)
+    rubyntlm (0.6.2)
+    rubyzip (1.2.1)
+    rufus-lru (1.1.0)
+    safe_yaml (1.0.4)
+    sawyer (0.8.1)
+      addressable (>= 2.3.5, < 2.6)
+      faraday (~> 0.8, < 1.0)
+    semverse (2.0.0)
+    serverspec (2.41.3)
+      multi_json
+      rspec (~> 3.0)
+      rspec-its
+      specinfra (~> 2.72)
+    sfl (2.3)
+    solve (4.0.0)
+      molinillo (~> 0.6)
+      semverse (>= 1.1, < 3.0)
+    specinfra (2.72.1)
+      net-scp
+      net-ssh (>= 2.7, < 5.0)
+      net-telnet
+      sfl
+    sslshake (1.2.0)
+    syslog-logger (1.6.8)
+    systemu (2.6.5)
+    test-kitchen (1.19.2)
+      mixlib-install (~> 3.6)
+      mixlib-shellout (>= 1.2, < 3.0)
+      net-scp (~> 1.1)
+      net-ssh (>= 2.9, < 5.0)
+      net-ssh-gateway (~> 1.2)
+      safe_yaml (~> 1.0)
+      thor (~> 0.19, < 0.19.2)
+      winrm (~> 2.0)
+      winrm-elevated (~> 1.0)
+      winrm-fs (~> 1.1.0)
+    thor (0.19.1)
+    timers (4.0.4)
+      hitimes
+    tomlrb (1.2.6)
+    train (0.31.1)
+      docker-api (~> 1.26)
+      json (>= 1.8, < 3.0)
+      mixlib-shellout (~> 2.0)
+      net-scp (~> 1.2)
+      net-ssh (>= 2.9, < 5.0)
+      winrm (~> 2.0)
+      winrm-fs (~> 1.0)
+    treetop (1.6.9)
+      polyglot (~> 0.3)
+    unicode-display_width (1.3.0)
+    uuidtools (2.1.5)
+    varia_model (0.6.0)
+      buff-extensions (~> 2.0)
+      hashie (>= 2.0.2, < 4.0.0)
+    winrm (2.2.3)
+      builder (>= 2.1.2)
+      erubis (~> 2.7)
+      gssapi (~> 1.2)
+      gyoku (~> 1.0)
+      httpclient (~> 2.2, >= 2.2.0.2)
+      logging (>= 1.6.1, < 3.0)
+      nori (~> 2.0)
+      rubyntlm (~> 0.6.0, >= 0.6.1)
+    winrm-elevated (1.1.0)
+      winrm (~> 2.0)
+      winrm-fs (~> 1.0)
+    winrm-fs (1.1.1)
+      erubis (~> 2.7)
+      logging (>= 1.6.1, < 3.0)
+      rubyzip (~> 1.1)
+      winrm (~> 2.0)
+    wmi-lite (1.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  berkshelf
+  chef-dk (= 2.4.17)
+  chef-provisioning
+  chef-vault
+  chefspec
+  fauxhai
+  foodcritic
+  inspec
+  kitchen-inspec
+  kitchen-vagrant
+  knife-spork
+  ohai
+  pry
+  rubocop
+  test-kitchen
+
+BUNDLED WITH
+   1.16.4
diff --git a/nixpkgs/pkgs/development/tools/chefdk/default.nix b/nixpkgs/pkgs/development/tools/chefdk/default.nix
new file mode 100644
index 000000000000..1d81d469eb29
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/chefdk/default.nix
@@ -0,0 +1,20 @@
+{ lib, bundlerEnv, ruby_2_4, perl, autoconf }:
+
+bundlerEnv {
+  # Last updated via:
+  # nix-shell -p bundix -p gcc -p libxml2 -p zlib --run "bundix -mdl"
+  name = "chefdk-2.4.17";
+
+  ruby = ruby_2_4;
+  gemdir = ./.;
+
+  buildInputs = [ perl autoconf ];
+
+  meta = with lib; {
+    description = "A streamlined development and deployment workflow for Chef platform";
+    homepage    = https://downloads.chef.io/chef-dk/;
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ offline ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/chefdk/gemset.nix b/nixpkgs/pkgs/development/tools/chefdk/gemset.nix
new file mode 100644
index 000000000000..228b3cd85135
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/chefdk/gemset.nix
@@ -0,0 +1,1132 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk";
+      type = "gem";
+    };
+    version = "2.5.2";
+  };
+  app_conf = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yqwhr7d9i0cgavqkkq0b4pfqpn213dbhj5ayygr293wplm0jh57";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  ast = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pp82blr5fakdk27d1d21xq9zchzb6vmyb1zcsl520s3ygvprn8m";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  backports = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1agsk23kfr194s690jnrpijh9pf3hq4a9yy66j1wzzj2x19ss9y0";
+      type = "gem";
+    };
+    version = "3.10.3";
+  };
+  berkshelf = {
+    dependencies = ["buff-config" "buff-extensions" "chef" "cleanroom" "concurrent-ruby" "faraday" "httpclient" "minitar" "mixlib-archive" "mixlib-shellout" "octokit" "retryable" "ridley" "solve" "thor"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03rwq5njxh3d3fcr3ap0wivqlavfcm1ywxj50m4arfndsdvvjih1";
+      type = "gem";
+    };
+    version = "6.3.1";
+  };
+  buff-config = {
+    dependencies = ["buff-extensions" "varia_model"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06zx175sww4grk1rwyn1g3b1j2y324jf1506wl4xx96iss8spa4r";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  buff-extensions = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qjyx97b9gavrk1r77bif1wv7z2mwlqy0v42q0vb7jd609n7vgcg";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  buff-ignore = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vn0jh4l8np1xlyvsrrhlzhapcwvrjfni92jmg1an5qdw1qlgxmh";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  buff-ruby_engine = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1njpndvhvq7idfrwfw3p0hs5ch6nygwscjmksh23dz49dsirk7a9";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  buff-shell_out = {
+    dependencies = ["buff-ruby_engine"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zg1li17759whsi2yhb08wvbbqn5cy6i5v51384yjk2a29vs9lck";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  builder = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1";
+      type = "gem";
+    };
+    version = "3.2.3";
+  };
+  celluloid = {
+    dependencies = ["timers"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "044xk0y7i1xjafzv7blzj5r56s7zr8nzb619arkrl390mf19jxv3";
+      type = "gem";
+    };
+    version = "0.16.0";
+  };
+  celluloid-io = {
+    dependencies = ["celluloid" "nio4r"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l1x0p6daa5vskywrvaxdlanwib3k5pps16axwyy4p8d49pn9rnx";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  chef = {
+    dependencies = ["addressable" "chef-config" "chef-zero" "diff-lcs" "erubis" "ffi-yajl" "highline" "iniparse" "iso8601" "mixlib-archive" "mixlib-authentication" "mixlib-cli" "mixlib-log" "mixlib-shellout" "net-sftp" "net-ssh" "net-ssh-multi" "ohai" "plist" "proxifier" "rspec-core" "rspec-expectations" "rspec-mocks" "rspec_junit_formatter" "serverspec" "specinfra" "syslog-logger" "uuidtools"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1whvkx1a3877vnpv6q84bp9sb4aq5p5hgv9frln90l61f5nrx1gb";
+      type = "gem";
+    };
+    version = "13.6.4";
+  };
+  chef-config = {
+    dependencies = ["addressable" "fuzzyurl" "mixlib-config" "mixlib-shellout"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r5bd2901bwcr8zffhvri1ypkqfmqinbg78aj0xnndg6lkbr9rd5";
+      type = "gem";
+    };
+    version = "13.6.4";
+  };
+  chef-dk = {
+    dependencies = ["addressable" "chef" "chef-provisioning" "cookbook-omnifetch" "diff-lcs" "ffi-yajl" "minitar" "mixlib-cli" "mixlib-shellout" "paint" "solve"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zqbwkad61rn4wli6z8a7l7glfnnrhbg474vfshvr0k1sicy8z2d";
+      type = "gem";
+    };
+    version = "2.4.17";
+  };
+  chef-provisioning = {
+    dependencies = ["cheffish" "inifile" "mixlib-install" "net-scp" "net-ssh" "net-ssh-gateway" "winrm" "winrm-elevated" "winrm-fs"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mxax73kblcbsz5bzqc655igbjwqjpl5f7vz478afr6amh3lsxsw";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  chef-vault = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ks248hqd3s9w0nq8pnpp6and3522b128f2avg63cx5gq6889hwh";
+      type = "gem";
+    };
+    version = "3.3.0";
+  };
+  chef-zero = {
+    dependencies = ["ffi-yajl" "hashie" "mixlib-log" "rack" "uuidtools"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nzmc0fzi73k692j09zipm3gqx1fkrw4r4r4g2b3i1zvasaxbi7x";
+      type = "gem";
+    };
+    version = "13.1.0";
+  };
+  cheffish = {
+    dependencies = ["chef-zero" "net-ssh"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mpyf9bhnxil5mwy8cffcfl5l9alxhdnjzsmpzcdwihbz401qrn3";
+      type = "gem";
+    };
+    version = "13.1.0";
+  };
+  chefspec = {
+    dependencies = ["chef" "fauxhai" "rspec"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zpycdwp18k6nkgyx7l3ndhyaby1v4bfqh9by6ld2fbksnx29p6k";
+      type = "gem";
+    };
+    version = "7.1.1";
+  };
+  cleanroom = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r6qa4b248jasv34vh7rw91pm61gzf8g5dvwx2gxrshjs7vbhfml";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  coderay = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y";
+      type = "gem";
+    };
+    version = "1.1.2";
+  };
+  concurrent-ruby = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "183lszf5gx84kcpb779v6a2y0mx9sssy8dgppng1z9a505nj1qcf";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  cookbook-omnifetch = {
+    dependencies = ["mixlib-archive"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dm93zjr2a9pappkncnw4hlrn7dl9vwmrx5xly4128rnzbcgn41p";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  cucumber-core = {
+    dependencies = ["backports" "cucumber-tag_expressions" "gherkin"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06lip8ds4lw3wyjwsjv1laimk5kz39vsmvv9if7hiq9v611kd3sn";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  cucumber-tag_expressions = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cvmbljybws0qzjs1l67fvr9gqr005l8jk1ni5gcsis9pfmqh3vc";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  diff-lcs = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza";
+      type = "gem";
+    };
+    version = "1.3";
+  };
+  diffy = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "015nn9zaciqj43mfpjlw619r5dvnfkrjcka8nsa6j260v6qya941";
+      type = "gem";
+    };
+    version = "3.2.0";
+  };
+  docker-api = {
+    dependencies = ["excon" "multi_json"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09wsm6ims9gndfkh1ndhq3mps581g0slmvlvcdmsjfjb3qgm6fj5";
+      type = "gem";
+    };
+    version = "1.34.0";
+  };
+  erubis = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  excon = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mnc9lqlzwqj5ayp0lh7impisqm55mdg3mw5q4gi9yjic5sidc40";
+      type = "gem";
+    };
+    version = "0.59.0";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gyqsj7vlqynwvivf9485zwmcj04v1z7gq362z0b8zw2zf4ag0hw";
+      type = "gem";
+    };
+    version = "0.13.1";
+  };
+  fauxhai = {
+    dependencies = ["net-ssh"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0145yfn48qh64wbr55lzs1xjd6fi0z9000ix1z086dziks508c2v";
+      type = "gem";
+    };
+    version = "5.5.0";
+  };
+  ffi = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "034f52xf7zcqgbvwbl20jwdyjwznvqnwpbaps9nk18v9lgb1dpx0";
+      type = "gem";
+    };
+    version = "1.9.18";
+  };
+  ffi-yajl = {
+    dependencies = ["libyajl2"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mv7h8bjzgv96kpbmgkmg43rwy96w54kg39vldcdwym6kpqyfgr5";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  foodcritic = {
+    dependencies = ["cucumber-core" "erubis" "ffi-yajl" "nokogiri" "rake" "rufus-lru" "treetop"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0snnfv95zwv3rc9ilkzvw1pjch8cykkxq5q42ckx9zr9yd4bzmhz";
+      type = "gem";
+    };
+    version = "12.2.1";
+  };
+  fuzzyurl = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03qchs33vfwbsv5awxg3acfmlcrf5xbhnbrc83fdpamwya0glbjl";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  gherkin = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0arfhyjcsf5bv1anj4ysqhgl621nwl9qfcs7gg20y3sapcjwl2y7";
+      type = "gem";
+    };
+    version = "5.0.0";
+  };
+  git = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1waikaggw7a1d24nw0sh8fd419gbf7awh000qhsf411valycj6q3";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  gssapi = {
+    dependencies = ["ffi"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j93nsf9j57p7x4aafalvjg8hia2mmqv3aky7fmw2ck5yci343ix";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  gyoku = {
+    dependencies = ["builder"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wn0sl14396g5lyvp8sjmcb1hw9rbyi89gxng91r7w4df4jwiidh";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  hashie = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "120mkd2hkwhcfj7avi1dphb0lm7wx364d1cjm9yr4fibqpvsgqi7";
+      type = "gem";
+    };
+    version = "3.5.6";
+  };
+  highline = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01ib7jp85xjc4gh4jg0wyzllm46hwv8p0w1m4c75pbgi41fps50y";
+      type = "gem";
+    };
+    version = "1.7.10";
+  };
+  hitimes = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06222h9236jw9jgmdlpi0q7psac1shvxqxqx905qkvabmxdxlfar";
+      type = "gem";
+    };
+    version = "1.2.6";
+  };
+  htmlentities = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nkklqsn8ir8wizzlakncfv42i32wc0w9hxp00hvdlgjr7376nhj";
+      type = "gem";
+    };
+    version = "4.3.4";
+  };
+  httpclient = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  inifile = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c5zmk7ia63yw5l2k14qhfdydxwi1sah1ppjdiicr4zcalvfn0xi";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  iniparse = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xbik6838gfh5yq9ahh1m7dzszxlk0g7x5lvhb8amk60mafkrgws";
+      type = "gem";
+    };
+    version = "1.4.4";
+  };
+  inspec = {
+    dependencies = ["addressable" "faraday" "hashie" "htmlentities" "json" "method_source" "mixlib-log" "parallel" "parslet" "pry" "rainbow" "rspec" "rspec-its" "rubyzip" "semverse" "sslshake" "thor" "tomlrb" "train"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yvmqdhpag7v6m9z1mcwqj6y1rnrx6hbqws0lhh1zp4xky3w7fn4";
+      type = "gem";
+    };
+    version = "1.47.0";
+  };
+  ipaddress = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x86s0s11w202j6ka40jbmywkrx8fhq8xiy8mwvnkhllj57hqr45";
+      type = "gem";
+    };
+    version = "0.8.3";
+  };
+  iso8601 = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0diaqrf9lxmjamasydmd8mbc9p1lh01mb2d9y66kd1mmi7ml85yp";
+      type = "gem";
+    };
+    version = "0.9.1";
+  };
+  json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  kitchen-inspec = {
+    dependencies = ["hashie" "inspec" "test-kitchen"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0giqlpwhc7d91245pa9wkjad6ag6wd0q1757kwxmpgz4rh59xwnz";
+      type = "gem";
+    };
+    version = "0.20.0";
+  };
+  kitchen-vagrant = {
+    dependencies = ["test-kitchen"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nd09fwk6ncb6rflhl8pwfnq8iyhfzrfqdx4pyhjqq18n5pp3nk6";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  knife-spork = {
+    dependencies = ["app_conf" "chef" "diffy" "git"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h9ifjwlqhav04j40psmz22vdz1s3xvq35kzqyc22ir3w6s9nrlj";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  libyajl2 = {
+    source = {
+      sha256 = "0n5j0p8dxf9xzb9n4bkdr8w0a8gg3jzrn9indri3n0fv90gcs5qi";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  little-plugger = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  logging = {
+    dependencies = ["little-plugger" "multi_json"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06j6iaj89h9jhkx1x3hlswqrfnqds8br05xb1qra69dpvbdmjcwn";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  method_source = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xqj21j3vfq4ldia6i2akhn2qd84m0iqcnsl49kfpq3xk6x0dzgn";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  mini_portile2 = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  minitar = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vpdjfmdq1yc4i620frfp9af02ia435dnpj8ybsd7dc3rypkvbka";
+      type = "gem";
+    };
+    version = "0.5.4";
+  };
+  mixlib-archive = {
+    dependencies = ["mixlib-log"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b56iprv8cdhxjpzb8ck0mc54cl0kmyzlkn6bzzdqws4gxvdf6gk";
+      type = "gem";
+    };
+    version = "0.4.1";
+  };
+  mixlib-authentication = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lh8vrkq2nnf0rx69mlyiqkx664baxbp32imb7l517lbcw5xspgb";
+      type = "gem";
+    };
+    version = "1.4.2";
+  };
+  mixlib-cli = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0647msh7kp7lzyf6m72g6snpirvhimjm22qb8xgv9pdhbcrmcccp";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  mixlib-config = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s2ag6jz59r1gn8rbhf5c1g2mpbkc5jmz2fxh3n7hzv80dfzk42w";
+      type = "gem";
+    };
+    version = "2.2.4";
+  };
+  mixlib-install = {
+    dependencies = ["mixlib-shellout" "mixlib-versioning" "thor"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rsi3f3rcg3vky3biy59rvllk3wvx8xnyfch0d4h74r6sxcgbf79";
+      type = "gem";
+    };
+    version = "3.8.0";
+  };
+  mixlib-log = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14sknyi9r7rg28m21c8ixzyndhbmi0d6vk02y4hf42dd60hmdbgp";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  mixlib-shellout = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aszrg8b6nrsb3avdm2x04f2n0xx81rdip0waxibkqpslcmb8zx5";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  mixlib-versioning = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04ayjzsqqgi0ax8c657wwnmclxh53jvn82mnsf7jb2h7fzlb59v3";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  molinillo = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hiy8qvk7hsy5bl5x5b19zf3v3qbmcpa0a9w1kywhvd9051a9vnr";
+      type = "gem";
+    };
+    version = "0.6.4";
+  };
+  multi_json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1raim9ddjh672m32psaa9niw67ywzjbxbdb8iijx3wv9k5b0pk2x";
+      type = "gem";
+    };
+    version = "1.12.2";
+  };
+  multipart-post = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  net-scp = {
+    dependencies = ["net-ssh"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b0jqrcsp4bbi4n4mzyf70cp2ysyp6x07j8k8cqgxnvb4i3a134j";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  net-sftp = {
+    dependencies = ["net-ssh"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04674g4n6mryjajlcd82af8g8k95la4b1bj712dh71hw1c9vhw1y";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  net-ssh = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07c4v97zl1daabmri9zlbzs6yvkl56z1q14bw74d53jdj0c17nhx";
+      type = "gem";
+    };
+    version = "4.2.0";
+  };
+  net-ssh-gateway = {
+    dependencies = ["net-ssh"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04ws9bvf3ppvcj9vrnwyabcwv4lz1m66ni443z2cf4wvvqssifsa";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  net-ssh-multi = {
+    dependencies = ["net-ssh" "net-ssh-gateway"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13kxz9b6kgr9mcds44zpavbndxyi6pvyzyda6bhk1kfmb5c10m71";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  net-telnet = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13qxznpwmc3hs51b76wqx2w29r158gzzh8719kv2gpi56844c8fx";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  nio4r = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n7csawahihc4z0d1888l2c9hlxxd06m093c58gkp1mcbj9bvyb0";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "105xh2zkr8nsyfaj2izaisarpnkrrl9000y3nyflg9cbzrfxv021";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  nori = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  octokit = {
+    dependencies = ["sawyer"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h6cm7bi0y7ysjgwws3paaipqdld6c0m0niazrjahhpz88qqq1g4";
+      type = "gem";
+    };
+    version = "4.7.0";
+  };
+  ohai = {
+    dependencies = ["chef-config" "ffi" "ffi-yajl" "ipaddress" "mixlib-cli" "mixlib-config" "mixlib-log" "mixlib-shellout" "plist" "systemu" "wmi-lite"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05dx2nsswcnd9f7qvz4jgiwwh18z4qbx6mqvflzlx276adx68i0s";
+      type = "gem";
+    };
+    version = "13.7.0";
+  };
+  paint = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z1fqyyc2jiv6yabv467h652cxr2lmxl5gqqg7p14y28kdqf0nhj";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  parallel = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qv2yj4sxr36ga6xdxvbq9h05hn10bwcbkqv6j6q1fiixhsdnnzd";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  parser = {
+    dependencies = ["ast"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bqc29xx4zwlshvi6krrd0sl82d7xjfhcrxvgf38wvdqcl3b7ck3";
+      type = "gem";
+    };
+    version = "2.4.0.2";
+  };
+  parslet = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15ls4zgarhic522r767nbsfn7hddrhd7zv8hvlx5flas8b2ybirf";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  plist = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k0pyqrjcz9kn1b3ahsfs9aqym7s7yzz0vavya0zn0mca3jw2zqc";
+      type = "gem";
+    };
+    version = "3.3.0";
+  };
+  polyglot = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  powerpack = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fnn3fli5wkzyjl4ryh0k90316shqjfnhydmc7f8lqpi0q21va43";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  proxifier = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1abzlg39cfji1nx3i8kmb5k3anr2rd392yg2icms24wkqz9g9zj0";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  pry = {
+    dependencies = ["coderay" "method_source"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mh312k3y94sj0pi160wpia0ps8f4kmzvm505i6bvwynfdh7v30g";
+      type = "gem";
+    };
+    version = "0.11.3";
+  };
+  public_suffix = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mvzd9ycjw8ydb9qy3daq3kdzqs2vpqvac4dqss6ckk4rfcjc637";
+      type = "gem";
+    };
+    version = "3.0.1";
+  };
+  rack = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  rainbow = {
+    dependencies = ["rake"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08w2ghc5nv0kcq5b257h7dwjzjz1pqcavajfdx2xjyxqsvh2y34w";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  rake = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "190p7cs8zdn07mjj6xwwsdna3g0r98zs4crz7jh2j2q5b0nbxgjf";
+      type = "gem";
+    };
+    version = "12.3.0";
+  };
+  retryable = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pxv5xgr08s9gv5npj7h3raxibywznrv2wcrb85ibhlhzgzcxggf";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+  ridley = {
+    dependencies = ["addressable" "buff-config" "buff-extensions" "buff-ignore" "buff-shell_out" "celluloid" "celluloid-io" "chef-config" "erubis" "faraday" "hashie" "httpclient" "json" "mixlib-authentication" "retryable" "semverse" "varia_model"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n2ykdnr1cn9fk8ns2dh3qf7g5dywl8p8kw4zbw4amb4v5xlkwjh";
+      type = "gem";
+    };
+    version = "5.1.1";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0134g96wzxjlig2gxzd240gm2dxfw8izcyi2h6hjmr40syzcyx01";
+      type = "gem";
+    };
+    version = "3.7.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15c4mgivvs9hpi0i1a8gypdl1f0hg6xknsbizgpm3khc95lqd9r9";
+      type = "gem";
+    };
+    version = "3.7.0";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fw06wm8jdj8k7wrb8xmzj0fr1wjyb0ya13x31hidnyblm41hmvy";
+      type = "gem";
+    };
+    version = "3.7.0";
+  };
+  rspec-its = {
+    dependencies = ["rspec-core" "rspec-expectations"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pwphny5jawcm1hda3vs9pjv1cybaxy17dc1s75qd7drrvx697p3";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  rspec-mocks = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b02ya3qhqgmcywqv4570dlhav70r656f7dmvwg89whpkq1z1xr3";
+      type = "gem";
+    };
+    version = "3.7.0";
+  };
+  rspec-support = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hvpqpkh7j5rbwkkc0qwicwpgn0xlnpq935ikmx8n1wxxf553v3p";
+      type = "gem";
+    };
+    version = "3.7.0";
+  };
+  rspec_junit_formatter = {
+    dependencies = ["builder" "rspec-core"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hphl8iggqh1mpbbv0avf8735x6jgry5wmkqyzgv1zwnimvja1ai";
+      type = "gem";
+    };
+    version = "0.2.3";
+  };
+  rubocop = {
+    dependencies = ["parallel" "parser" "powerpack" "rainbow" "ruby-progressbar" "unicode-display_width"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cy2plq67b47ql06ypx3svbnnjmr2q616scwyhfd6330cg0aacf1";
+      type = "gem";
+    };
+    version = "0.51.0";
+  };
+  ruby-progressbar = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1igh1xivf5h5g3y5m9b4i4j2mhz2r43kngh4ww3q1r80ch21nbfk";
+      type = "gem";
+    };
+    version = "1.9.0";
+  };
+  rubyntlm = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p6bxsklkbcqni4bcq6jajc2n57g0w5rzn4r49c3lb04wz5xg0dy";
+      type = "gem";
+    };
+    version = "0.6.2";
+  };
+  rubyzip = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06js4gznzgh8ac2ldvmjcmg9v1vg9llm357yckkpylaj6z456zqz";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  rufus-lru = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sp7ymz054md75fnn2hx5d2axmhrh0abbn8c2p759j4g4lxn11ip";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  safe_yaml = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  sawyer = {
+    dependencies = ["addressable" "faraday"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sv1463r7bqzvx4drqdmd36m7rrv6sf1v3c6vswpnq3k6vdw2dvd";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  semverse = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cf6iv5wgwb7b8jf7il751223k9yahz9aym06s9r0prda5mwddyy";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  serverspec = {
+    dependencies = ["multi_json" "rspec" "rspec-its" "specinfra"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zsi7nb7mn6jsxbs6gbbkavmbnpdpk9xn2rsd5hbayzmqnb7qk43";
+      type = "gem";
+    };
+    version = "2.41.3";
+  };
+  sfl = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qm4hvhq9pszi9zs1cl9qgwx1n4wxq0af0hq9sbf6qihqd8rwwwr";
+      type = "gem";
+    };
+    version = "2.3";
+  };
+  solve = {
+    dependencies = ["molinillo" "semverse"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08jywdc6wgfb57ncjnsdjb694fzq8aqw0iv289nijpw5hccd32g4";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  specinfra = {
+    dependencies = ["net-scp" "net-ssh" "net-telnet" "sfl"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dh4ydl4rr6dc8dw9nqns9z3d4f5inmpjnspnvgppvy9hk9lnx9h";
+      type = "gem";
+    };
+    version = "2.72.1";
+  };
+  sslshake = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19j8q4mnjvjnhlbzs9r0pn608bv5a4cihf6lswv36l3lc35gp9zl";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  syslog-logger = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14y20phq1khdla4z9wvf98k7j3x6n0rjgs4f7vb0xlf7h53g6hbm";
+      type = "gem";
+    };
+    version = "1.6.8";
+  };
+  systemu = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gmkbakhfci5wnmbfx5i54f25j9zsvbw858yg3jjhfs5n4ad1xq1";
+      type = "gem";
+    };
+    version = "2.6.5";
+  };
+  test-kitchen = {
+    dependencies = ["mixlib-install" "mixlib-shellout" "net-scp" "net-ssh" "net-ssh-gateway" "safe_yaml" "thor" "winrm" "winrm-elevated" "winrm-fs"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wypsc0yl5zgw4f39i8nwq35z0lnjpqx333w9ginmiifs9jydlvm";
+      type = "gem";
+    };
+    version = "1.19.2";
+  };
+  thor = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z";
+      type = "gem";
+    };
+    version = "0.19.1";
+  };
+  timers = {
+    dependencies = ["hitimes"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jx4wb0x182gmbcs90vz0wzfyp8afi1mpl9w5ippfncyk4kffvrz";
+      type = "gem";
+    };
+    version = "4.0.4";
+  };
+  tomlrb = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09gh67v8s1pr7c37490sjp782gi4wf9k9cadp4l926h1sp27bcgz";
+      type = "gem";
+    };
+    version = "1.2.6";
+  };
+  train = {
+    dependencies = ["docker-api" "json" "mixlib-shellout" "net-scp" "net-ssh" "winrm" "winrm-fs"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ic719ghmyvf93p4y91y00rc09s946sg4n1h855yip9h5795q9i5";
+      type = "gem";
+    };
+    version = "0.31.1";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sdkd1v2h8dhj9ncsnpywmqv7w1mdwsyc5jwyxlxwriacv8qz8bd";
+      type = "gem";
+    };
+    version = "1.6.9";
+  };
+  unicode-display_width = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12pi0gwqdnbx1lv5136v3vyr0img9wr0kxcn4wn54ipq4y41zxq8";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  uuidtools = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zjvq1jrrnzj69ylmz1xcr30skf9ymmvjmdwbvscncd7zkr8av5g";
+      type = "gem";
+    };
+    version = "2.1.5";
+  };
+  varia_model = {
+    dependencies = ["buff-extensions" "hashie"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kgj37rc3yia4pr5pma0psgar6xjk064qdfii3nwr6dj1v73cyxz";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  winrm = {
+    dependencies = ["builder" "erubis" "gssapi" "gyoku" "httpclient" "logging" "nori" "rubyntlm"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02lzbixdbjvhmb0byqx9rl9x4xx9pqc8jwm7y6mmp7w7mri72zh6";
+      type = "gem";
+    };
+    version = "2.2.3";
+  };
+  winrm-elevated = {
+    dependencies = ["winrm" "winrm-fs"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04krbwnj4cw7jy42w3n2y5kp2fbcp3v9mbf59pdhfk1py18bswcr";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  winrm-fs = {
+    dependencies = ["erubis" "logging" "rubyzip" "winrm"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vax34qbr3n6jifxyzr4nngaz8vrmzw6ydw21cnnrhidfkqgh7ja";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  wmi-lite = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06pm7jr2gcnphhhswha2kqw0vhxy91i68942s7gqriadbc8pq9z3";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/chit/default.nix b/nixpkgs/pkgs/development/tools/chit/default.nix
new file mode 100644
index 000000000000..b312b888e908
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/chit/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchFromGitHub, rustPlatform, pkgconfig, openssl
+, darwin
+}:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  pname = "chit";
+  version = "0.1.14";
+
+  src = fetchFromGitHub {
+    owner = "peterheesterman";
+    repo = pname;
+    rev = version;
+    sha256 = "1rzy15xwlf87c8kpy9pwvir6s9z3qc8d9iz4pk0gfdj2il3vmjwv";
+  };
+
+  cargoSha256 = "1jqnnf4jgjpm1i310hda15423nxfw9frgpmc2kbrs66qcsj7avaw";
+
+  nativeBuildInputs = stdenv.lib.optionals stdenv.isLinux [ pkgconfig ];
+  buildInputs = []
+  ++ stdenv.lib.optionals stdenv.isLinux [ openssl ]
+  ++ stdenv.lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ CoreFoundation CoreServices Security ])
+  ;
+
+  meta = with stdenv.lib; {
+    description = "Crate help in terminal: A tool for looking up details about rust crates without going to crates.io";
+    longDescription = ''
+      Chit helps answer these questions:
+
+      * Who wrote this crate? What else did they write?
+      * What alternatives are there?
+      * How old is this crate?
+      * What versions are there? When did they come out?
+      * What are the downloads over time?
+      * Should i use this crate?
+      * How mature is it?
+    '';
+    homepage = https://github.com/peterheesterman/chit;
+    license = licenses.mit;
+    maintainers = [ maintainers.lilyball ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/clang-tools/default.nix b/nixpkgs/pkgs/development/tools/clang-tools/default.nix
new file mode 100644
index 000000000000..42bcf7fd055f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clang-tools/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, writeScript, llvmPackages }:
+
+let
+  clang = llvmPackages.clang-unwrapped;
+  version = stdenv.lib.getVersion clang;
+in
+
+stdenv.mkDerivation {
+  name = "clang-tools-${version}";
+  unpackPhase = ":";
+  installPhase = ''
+    mkdir -p $out/bin
+    for tool in \
+      clang-apply-replacements \
+      clang-check \
+      clang-format \
+      clang-rename \
+      clang-tidy
+    do
+      ln -s ${clang}/bin/$tool $out/bin/$tool
+    done
+  '';
+  meta = clang.meta // {
+    description = "Standalone command line tools for C++ development";
+    maintainers = with stdenv.lib.maintainers; [ aherrmann ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/clog-cli/default.nix b/nixpkgs/pkgs/development/tools/clog-cli/default.nix
new file mode 100644
index 000000000000..0c8e6ff591bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clog-cli/default.nix
@@ -0,0 +1,25 @@
+{ fetchFromGitHub, rustPlatform, stdenv }:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  name = "clog-cli-${version}";
+  version = "0.9.3";
+
+  src = fetchFromGitHub {
+    owner = "clog-tool";
+    repo = "clog-cli";
+    rev = "v${version}";
+    sha256 = "1wxglc4n1dar5qphhj5pab7ps34cjr7jy611fwn72lz0f6c7jp3z";
+  };
+
+  cargoSha256 = "1i1aq7bwkx8sqrlpxq24ldh908j72lwi2r3sg9zaz5p8xq1xgq6p";
+
+  meta = {
+    description = "Generate changelogs from local git metadata";
+    homepage = https://github.com/clog-tool/clog-cli;
+    license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [stdenv.lib.maintainers.nthorne];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cloudfoundry-cli/default.nix b/nixpkgs/pkgs/development/tools/cloudfoundry-cli/default.nix
new file mode 100644
index 000000000000..4f285fa69618
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cloudfoundry-cli/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, go }:
+
+buildGoPackage rec {
+  name = "cloudfoundry-cli-${version}";
+  version = "6.41.0";
+
+  goPackagePath = "code.cloudfoundry.org/cli";
+
+  subPackages = [ "." ];
+
+  src = fetchFromGitHub {
+    owner = "cloudfoundry";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "1dkd0lfq55qpnxsrigffaqm2nlcxr0bm0jsl4rsjlmb8p2vgpx8b";
+  };
+
+  makeTarget = let hps = stdenv.hostPlatform.system; in
+    if hps == "x86_64-darwin" then
+      "out/cf-cli_osx"
+    else if hps == "x86_64-linux" then
+      "out/cf-cli_linux_x86-64"
+    else if hps == "i686-linux" then
+      "out/cf-cli_linux_i686"
+    else
+      throw "make target for this platform unknown";
+
+  buildPhase = ''
+    cd go/src/${goPackagePath}
+    CF_BUILD_DATE="1970-01-01" make $makeTarget
+    cp $makeTarget out/cf
+  '';
+
+  installPhase = ''
+    install -Dm555 out/cf "$bin/bin/cf"
+    install -Dm444 -t "$bin/share/bash-completion/completions/" "$src/ci/installers/completion/cf"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "The official command line client for Cloud Foundry";
+    homepage = https://github.com/cloudfoundry/cli;
+    maintainers = with maintainers; [ ris ];
+    license = licenses.asl20;
+    platforms = [ "i686-linux" "x86_64-linux" "x86_64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/compass/Gemfile b/nixpkgs/pkgs/development/tools/compass/Gemfile
new file mode 100644
index 000000000000..66a29975e7dd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/compass/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org" do
+  gem 'compass'
+end
diff --git a/nixpkgs/pkgs/development/tools/compass/Gemfile.lock b/nixpkgs/pkgs/development/tools/compass/Gemfile.lock
new file mode 100644
index 000000000000..43790d9e7a1e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/compass/Gemfile.lock
@@ -0,0 +1,31 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    chunky_png (1.3.11)
+    compass (1.0.3)
+      chunky_png (~> 1.2)
+      compass-core (~> 1.0.2)
+      compass-import-once (~> 1.0.5)
+      rb-fsevent (>= 0.9.3)
+      rb-inotify (>= 0.9)
+      sass (>= 3.3.13, < 3.5)
+    compass-core (1.0.3)
+      multi_json (~> 1.0)
+      sass (>= 3.3.0, < 3.5)
+    compass-import-once (1.0.5)
+      sass (>= 3.2, < 3.5)
+    ffi (1.10.0)
+    multi_json (1.13.1)
+    rb-fsevent (0.10.3)
+    rb-inotify (0.10.0)
+      ffi (~> 1.0)
+    sass (3.4.25)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  compass!
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/development/tools/compass/default.nix b/nixpkgs/pkgs/development/tools/compass/default.nix
new file mode 100644
index 000000000000..c47bddd4d9c3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/compass/default.nix
@@ -0,0 +1,15 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "compass";
+  gemdir = ./.;
+  exes = [ "compass" ];
+
+  meta = with lib; {
+    description = "Stylesheet Authoring Environment that makes your website design simpler to implement and easier to maintain";
+    homepage    = https://github.com/Compass/compass;
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ offline manveru ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/compass/gemset.nix b/nixpkgs/pkgs/development/tools/compass/gemset.nix
new file mode 100644
index 000000000000..1beb3d3fec00
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/compass/gemset.nix
@@ -0,0 +1,96 @@
+{
+  chunky_png = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "124najs9prqzrzk49h53kap992rmqxj0wni61z2hhsn7mwmgdp9d";
+      type = "gem";
+    };
+    version = "1.3.11";
+  };
+  compass = {
+    dependencies = ["chunky_png" "compass-core" "compass-import-once" "rb-fsevent" "rb-inotify" "sass"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lfi83w8z75czr0pf0rmj9hda22082h3cmvczl8r1ma9agf88y2c";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  compass-core = {
+    dependencies = ["multi_json" "sass"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yaspqwdmzwdcqviclbs3blq7an16pysrfzylz8q1gxmmd6bpj3a";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  compass-import-once = {
+    dependencies = ["sass"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bn7gwbfz7jvvdd0qdfqlx67fcb83gyvxqc7dr9fhcnks3z8z5rq";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8";
+      type = "gem";
+    };
+    version = "0.10.3";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fs7hxm9g6ywv2yih83b879klhc4fs8i0p9166z795qmd77dk0a4";
+      type = "gem";
+    };
+    version = "0.10.0";
+  };
+  sass = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kfpcwh8dgw4lc81qglkvjl73689jy3g7196zkxm4fpskg1p5lkw";
+      type = "gem";
+    };
+    version = "3.4.25";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/compile-daemon/default.nix b/nixpkgs/pkgs/development/tools/compile-daemon/default.nix
new file mode 100644
index 000000000000..db7df2af7009
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/compile-daemon/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "compile-daemon-unstable-${version}";
+  version = "2017-03-08";
+  rev = "d447e567232bcb84cedd3b2be012c7127f31f469";
+
+  goPackagePath = "github.com/githubnemo/CompileDaemon";
+
+  src = fetchFromGitHub {
+    owner = "githubnemo";
+    repo = "CompileDaemon";
+    inherit rev;
+    sha256 = "0jfbipp3gd89n6d7gds1qvfkqvz80qdlqqhijxffh8z8ss0xinqc";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Very simple compile daemon for Go";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ];
+    inherit (src.meta) homepage;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/compile-daemon/deps.nix b/nixpkgs/pkgs/development/tools/compile-daemon/deps.nix
new file mode 100644
index 000000000000..53771ddad9f0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/compile-daemon/deps.nix
@@ -0,0 +1,48 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.0-devel
+[
+  {
+    goPackagePath = "github.com/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev = "9131ab34cf20d2f6d83fdc67168a5430d1c7dc23";
+      sha256 = "111x6rhpxfjhwkjrmrirqqh6nc68q5g7air9fl5kgr3bg85hybr5";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev = "a392f450ea64cee2b268dfaacdc2502b50a22b18";
+      sha256 = "1msiq5nb1sdhwfjv65hjnvr2s4pfsp8mv6f5z8aa8n9bjf0cksyc";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev = "57fdcb988a5c543893cc61bce354a6e24ab70022";
+      sha256 = "1fkhmi3nhz6vasfvjzjjwxkbpwsb9hzc0g5h1rygqrnzjykl2r39";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "99f16d856c9836c42d24e7ab64ea72916925fa97";
+      sha256 = "0g2x5krfhnraq03v0b48y3xv3ffg92pbgvps0npj9l7wq8q9hkmx";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/fsnotify.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/fsnotify.v1";
+      rev = "629574ca2a5df945712d3079857300b5e4da0236";
+      sha256 = "06wfg1mmzjj04z7d0q1x2fai9k6hm957brngsaf02fa9a3qqanv3";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/container-linux-config-transpiler/default.nix b/nixpkgs/pkgs/development/tools/container-linux-config-transpiler/default.nix
new file mode 100644
index 000000000000..b2b903b095c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/container-linux-config-transpiler/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+
+with lib;
+
+buildGoPackage rec {
+  name = "ct-${version}";
+  version = "0.7.0";
+
+  goPackagePath = "github.com/coreos/container-linux-config-transpiler";
+
+  src = fetchFromGitHub {
+    owner = "coreos";
+    repo = "container-linux-config-transpiler";
+    rev = "v${version}";
+    sha256="058zjk9yqgdli55gc6y48455il6wjpslyz2r2ckk2ki9c5qc8b7c";
+  };
+
+  buildFlagsArray = ''
+    -ldflags=-X ${goPackagePath}/internal/version.Raw=v${version}
+  '';
+
+  postInstall = ''
+    mv $bin/bin/{internal,ct}
+    rm $bin/bin/tools
+  '';
+
+  meta = {
+    description = "Convert a Container Linux Config into Ignition";
+    license = licenses.asl20;
+    homepage = https://github.com/coreos/container-linux-config-transpiler;
+    maintainers = with maintainers; [elijahcaine];
+    platforms = with platforms; unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/2.x.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/2.x.nix
new file mode 100644
index 000000000000..6a73e2581822
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/2.x.nix
@@ -0,0 +1,12 @@
+{ callPackage, fetchFromGitHub, ... } @ args:
+
+callPackage ./generic.nix (args // rec {
+  src = fetchFromGitHub {
+    owner = "buildkite";
+    repo = "agent";
+    rev = "v${version}";
+    sha256 = "07065hhhb418w5qlqnyiap45r59paysysbwz1l7dmaw3j4q8m8rg";
+  };
+  version = "2.6.10";
+  hasBootstrapScript = true;
+})
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/3.x.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/3.x.nix
new file mode 100644
index 000000000000..e8266c2efe2c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/3.x.nix
@@ -0,0 +1,15 @@
+{ bash, callPackage, fetchFromGitHub, ... } @ args:
+
+callPackage ./generic.nix (args // rec {
+  src = fetchFromGitHub {
+    owner = "buildkite";
+    repo = "agent";
+    rev = "v${version}";
+    sha256 = "0sr1rxl92d4wdipl66f1yymx5bmyj1y85v6k22v57rzr6yhyfmsf";
+  };
+  version = "3.8.4";
+  hasBootstrapScript = false;
+  postPatch = ''
+    substituteInPlace bootstrap/shell/shell.go --replace /bin/bash ${bash}/bin/bash
+  '';
+})
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/generic.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/generic.nix
new file mode 100644
index 000000000000..ba0be89abf3d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/generic.nix
@@ -0,0 +1,45 @@
+{ stdenv, buildGoPackage, makeWrapper, coreutils, git, openssh, bash, gnused, gnugrep
+, src, version, hasBootstrapScript, postPatch ? ""
+, ... }:
+let
+  goPackagePath = "github.com/buildkite/agent";
+in
+buildGoPackage {
+  name = "buildkite-agent-${version}";
+
+  inherit goPackagePath src postPatch;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    ${stdenv.lib.optionalString hasBootstrapScript ''
+    # Install bootstrap.sh
+    mkdir -p $bin/libexec/buildkite-agent
+    cp $NIX_BUILD_TOP/go/src/${goPackagePath}/templates/bootstrap.sh $bin/libexec/buildkite-agent
+    sed -e "s|#!/bin/bash|#!${bash}/bin/bash|g" -i $bin/libexec/buildkite-agent/bootstrap.sh
+    ''}
+
+    # Fix binary name
+    mv $bin/bin/{agent,buildkite-agent}
+
+    # These are runtime dependencies
+    wrapProgram $bin/bin/buildkite-agent \
+      ${stdenv.lib.optionalString hasBootstrapScript "--set BUILDKITE_BOOTSTRAP_SCRIPT_PATH $bin/libexec/buildkite-agent/bootstrap.sh"} \
+      --prefix PATH : '${stdenv.lib.makeBinPath [ openssh git coreutils gnused gnugrep ]}'
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Build runner for buildkite.com";
+    longDescription = ''
+      The buildkite-agent is a small, reliable, and cross-platform build runner
+      that makes it easy to run automated builds on your own infrastructure.
+      It’s main responsibilities are polling buildkite.com for work, running
+      build jobs, reporting back the status code and output log of the job,
+      and uploading the job's artifacts.
+    '';
+    homepage = https://buildkite.com/docs/agent;
+    license = licenses.mit;
+    maintainers = with maintainers; [ pawelpacana zimbatm rvl ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/cide/Gemfile b/nixpkgs/pkgs/development/tools/continuous-integration/cide/Gemfile
new file mode 100644
index 000000000000..7e72ac0529d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/cide/Gemfile
@@ -0,0 +1,6 @@
+source "https://rubygems.org"
+
+gem 'cide'
+
+# Optional dependency, only used by `cide upload`
+gem 'aws-sdk', '~> 2'
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/cide/Gemfile.lock b/nixpkgs/pkgs/development/tools/continuous-integration/cide/Gemfile.lock
new file mode 100644
index 000000000000..736b2bfca1a2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/cide/Gemfile.lock
@@ -0,0 +1,40 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    aws-sdk (2.2.17)
+      aws-sdk-resources (= 2.2.17)
+    aws-sdk-core (2.2.17)
+      jmespath (~> 1.0)
+    aws-sdk-resources (2.2.17)
+      aws-sdk-core (= 2.2.17)
+    axiom-types (0.1.1)
+      descendants_tracker (~> 0.0.4)
+      ice_nine (~> 0.11.0)
+      thread_safe (~> 0.3, >= 0.3.1)
+    cide (0.9.0)
+      thor (~> 0.19)
+      virtus (~> 1.0)
+    coercible (1.0.0)
+      descendants_tracker (~> 0.0.1)
+    descendants_tracker (0.0.4)
+      thread_safe (~> 0.3, >= 0.3.1)
+    equalizer (0.0.11)
+    ice_nine (0.11.2)
+    jmespath (1.1.3)
+    thor (0.19.1)
+    thread_safe (0.3.5)
+    virtus (1.0.5)
+      axiom-types (~> 0.1)
+      coercible (~> 1.0)
+      descendants_tracker (~> 0.0, >= 0.0.3)
+      equalizer (~> 0.0, >= 0.0.9)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  aws-sdk (~> 2)
+  cide
+
+BUNDLED WITH
+   1.10.6
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/cide/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/cide/default.nix
new file mode 100644
index 000000000000..932a02cf2bcf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/cide/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, bundlerEnv, makeWrapper, docker, git, gnutar, gzip }:
+
+stdenv.mkDerivation rec {
+  name = "cide-${version}";
+  version = "0.9.0";
+
+  env = bundlerEnv {
+    name = "${name}-gems";
+
+    gemdir = ./.;
+  };
+
+  phases = ["installPhase"];
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/cide $out/bin/cide \
+      --set PATH ${stdenv.lib.makeBinPath [ docker git gnutar gzip ]}
+  '';
+
+  meta = with lib; {
+    description = "Isolated test runner with Docker";
+    homepage    = http://zimbatm.github.io/cide/;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+    platforms   = docker.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/cide/gemset.nix b/nixpkgs/pkgs/development/tools/continuous-integration/cide/gemset.nix
new file mode 100644
index 000000000000..df8f7c9f2088
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/cide/gemset.nix
@@ -0,0 +1,103 @@
+{
+  virtus = {
+    dependencies = ["axiom-types" "coercible" "descendants_tracker" "equalizer"];
+    source = {
+      sha256 = "06iphwi3c4f7y9i2rvhvaizfswqbaflilziz4dxqngrdysgkn1fk";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  thread_safe = {
+    source = {
+      sha256 = "1hq46wqsyylx5afkp6jmcihdpv4ynzzq9ygb6z2pb1cbz5js0gcr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  thor = {
+    source = {
+      sha256 = "08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z";
+      type = "gem";
+    };
+    version = "0.19.1";
+  };
+  jmespath = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vpvd61kc60f98jn28kw7x7vi82qrwgglam42nvzh98i43yxwsfb";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  ice_nine = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nv35qg1rps9fsis28hz2cq2fx1i96795f91q4nmkm934xynll2x";
+      type = "gem";
+    };
+    version = "0.11.2";
+  };
+  equalizer = {
+    source = {
+      sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4";
+      type = "gem";
+    };
+    version = "0.0.11";
+  };
+  descendants_tracker = {
+    dependencies = ["thread_safe"];
+    source = {
+      sha256 = "15q8g3fcqyb41qixn6cky0k3p86291y7xsh1jfd851dvrza1vi79";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  coercible = {
+    dependencies = ["descendants_tracker"];
+    source = {
+      sha256 = "1p5azydlsz0nkxmcq0i1gzmcfq02lgxc4as7wmf47j1c6ljav0ah";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  cide = {
+    version = "0.9.0";
+    source = {
+      type = "gem";
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wykwv0jnrh49jm9zsy1cb5wddv65iw4ixh072hr242wb83dcyl0";
+    };
+  };
+  axiom-types = {
+    dependencies = ["descendants_tracker" "ice_nine" "thread_safe"];
+    source = {
+      sha256 = "10q3k04pll041mkgy0m5fn2b1lazm6ly1drdbcczl5p57lzi3zy1";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  aws-sdk-resources = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vdnpjmil99n9d1fpk1w6ssgvmzx4wfmrqcij8nyd0iqdaacx3fj";
+      type = "gem";
+    };
+    version = "2.2.17";
+  };
+  aws-sdk-core = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vq7ny5n3rdfzkdqdm76r48slmp2a5v7565llrl4bw5hb5k4p75z";
+      type = "gem";
+    };
+    version = "2.2.17";
+  };
+  aws-sdk = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cwycrdk21blzjzf8fj1wlmdix94rj9aixj6phx6lwbqykn2dzx9";
+      type = "gem";
+    };
+    version = "2.2.17";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/default.nix
new file mode 100644
index 000000000000..4a4708df32dd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/default.nix
@@ -0,0 +1,24 @@
+# with import <nixpkgs>{};
+{ stdenv, fetchFromGitHub, buildGoPackage }:
+
+buildGoPackage rec {
+  name = "drone-cli-${version}";
+  version = "0.8.6";
+  revision = "v${version}";
+  goPackagePath = "github.com/drone/drone-cli";
+
+  goDeps= ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "drone";
+    repo = "drone-cli";
+    rev = revision;
+    sha256 = "1vvilpqyx9jl0lc9hr73qxngwhwbyk81fycal7ys1w59gv9hxrh9";
+  };
+
+  meta = with stdenv.lib; {
+    maintainers = with maintainers; [ bricewge ];
+    license = licenses.asl20;
+    description = "Command line client for the Drone continuous integration server.";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/deps.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/deps.nix
new file mode 100644
index 000000000000..d6486db13951
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/deps.nix
@@ -0,0 +1,274 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/Microsoft/go-winio";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Microsoft/go-winio";
+      rev =  "7da180ee92d8bd8bb8c37fc560e673e6557c392f";
+      sha256 = "19gjjhmzswhm11wzj38r5alxypmflmy0z42flhc3czhmmwv7b1av";
+    };
+  }
+  {
+    goPackagePath  = "github.com/Sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Sirupsen/logrus";
+      rev =  "d682213848ed68c0a260ca37d6dd5ace8423f5ba";
+      sha256 = "0nzyqwzx3k7nqfq8q7yv32gaf3ymq3bpwhkmw1hj2zakq5a93d8x";
+    };
+  }
+  {
+    goPackagePath  = "github.com/cncd/pipeline";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cncd/pipeline";
+      rev =  "3a09486affc9215ba52f55b1f6e10182458d1aba";
+      sha256 = "17v9bwmqhr9pqppsqpb2qg7klip5jmks5c5kq6lxw6iq75q3p5zm";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/distribution";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/distribution";
+      rev =  "7dba427612198a11b161a27f9d40bb2dca1ccd20";
+      sha256 = "0sv2044znv2cjcll0lc45wbjhsy0hpfkbczhl07m81i62r929l27";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/docker";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/docker";
+      rev =  "f645ffca04abf2dd6c89ac9057a1eb7d2b0ac338";
+      sha256 = "0ic848invzfyzj9psbd8d3wvqddxbxbpj8vy2dbdqcwl26qabaqf";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/go-connections";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/go-connections";
+      rev =  "eb315e36415380e7c2fdee175262560ff42359da";
+      sha256 = "0jsci3f0dc3bd0bab7byq24qvwpd6dw34hnd2kmvvgrg31xzb73f";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/go-units";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/go-units";
+      rev =  "f2145db703495b2e525c59662db69a7344b00bb8";
+      sha256 = "0ql76imazd27h1dnnala49qsaw2dl6hspcwzh20bgm9ajcv0fwd0";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/libcompose";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/libcompose";
+      rev =  "1c4bd4542afb20db0b51afd71d9ebceaf206e2dd";
+      sha256 = "1prm5w6d0zvc39jq7wxdgis3pzzra2wdqxqn68ip5dhf3m32c8vn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/drone/drone-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/drone/drone-go";
+      rev =  "7f20e6c113d3ffa2af80401c4eba7d510c8fd875";
+      sha256 = "1qm5nmzqmvjl8c2nfhhbp5a4ij1zfw4dinx278ns9qb0w973614k";
+    };
+  }
+  {
+    goPackagePath  = "github.com/drone/envsubst";
+    fetch = {
+      type = "git";
+      url = "https://github.com/drone/envsubst";
+      rev =  "f4d1a8ef8670afc9eea1fb95ee09a979fd2763a3";
+      sha256 = "10rj5zskp6f0bw648c1fn76v18jlidjd7ri76kk3csz2bwjm3m9c";
+    };
+  }
+  {
+    goPackagePath  = "github.com/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev =  "507f6050b8568533fb3f5504de8e5205fa62a114";
+      sha256 = "0k1v9dkhrxiqhg48yqkwzpd7x40xx38gv2pgknswbsy4r8w644i7";
+    };
+  }
+  {
+    goPackagePath  = "github.com/flynn/go-shlex";
+    fetch = {
+      type = "git";
+      url = "https://github.com/flynn/go-shlex";
+      rev =  "3f9db97f856818214da2e1057f8ad84803971cff";
+      sha256 = "1j743lysygkpa2s2gii2xr32j7bxgc15zv4113b0q9jhn676ysia";
+    };
+  }
+  {
+    goPackagePath  = "github.com/ghodss/yaml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ghodss/yaml";
+      rev =  "0ca9ea5df5451ffdf184b4428c902747c2c11cd7";
+      sha256 = "0skwmimpy7hlh7pva2slpcplnm912rp3igs98xnqmn859kwa5v8g";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev =  "925541529c1fa6821df4e44ce2723319eb2be768";
+      sha256 = "1d3zjvhl115l23xakj0014qpjchivlg098h10v5nfirkk1i9f9sa";
+    };
+  }
+  {
+    goPackagePath  = "github.com/google/go-jsonnet";
+    fetch = {
+      type = "git";
+      url = "https://github.com/drone/go-jsonnet.git";
+      rev =  "0274286eef945e5e24be6ebfc13a9deefdd312ee";
+      # sha256 = "105jqawa401z5kcsbpan3cg9lryxlnnrclg6s9xnzslwd9wxyfrl";
+      sha256 = "0crbsmwgy9iav7rnhkgkqv8cbyl6q60bjkbfcaqxb6m47q3d544a";
+    };
+  }
+  {
+    goPackagePath  = "github.com/jackspirou/syscerts";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jackspirou/syscerts";
+      rev =  "b68f5469dff16e102bd6a2d5b3e79341c938d736";
+      sha256 = "0mjz64qnysmy9lh0hrjvwir5ndlh5li13m6zvfrl0s5gi7m9v0kd";
+    };
+  }
+  {
+    goPackagePath  = "github.com/joho/godotenv";
+    fetch = {
+      type = "git";
+      url = "https://github.com/joho/godotenv";
+      rev =  "a79fa1e548e2c689c241d10173efd51e5d689d5b";
+      sha256 = "09610yqswxa02905mp9cqgsm50r76saagzddc55sqav4ad04j6qm";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev =  "167de6bfdfba052fa6b2d3664c8f5272e23c9072";
+      sha256 = "1nwjmsppsjicr7anq8na6md7b1z84l9ppnlr045hhxjvbkqwalvx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev =  "0360b2af4f38e8d38c7fce2a9f4e702702d73a39";
+      sha256 = "06w45aqz2a6yrk25axbly2k5wmsccv8cspb94bfmz4izvw8h927n";
+    };
+  }
+  {
+    goPackagePath  = "github.com/opencontainers/go-digest";
+    fetch = {
+      type = "git";
+      url = "https://github.com/opencontainers/go-digest";
+      rev =  "279bed98673dd5bef374d3b6e4b09e2af76183bf";
+      sha256 = "01gc7fpn8ax429024p2fcx3yb18axwz5bjf2hqxlii1jbsgw4bh9";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/browser";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/browser";
+      rev =  "c90ca0c84f15f81c982e32665bffd8d7aac8f097";
+      sha256 = "05xpqsns08blmwdh8aw5kpq2d9x4fl91535j6np1ylw1q2b67b8i";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev =  "645ef00459ed84a119197bfb8d8205042c6df63d";
+      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+    };
+  }
+  {
+    goPackagePath  = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev =  "cfb38830724cc34fedffe9a2a29fb54fa9169cd1";
+      sha256 = "0y6f4sbzkiiwrxbl15biivj8c7qwxnvm3zl2dd3mw4wzg4x10ygj";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev =  "650f4a345ab4e5b245a3034b110ebc7299e68186";
+      sha256 = "0r1ij3lq07d6kg3dlpj508vwkwmz0qpwcrbismisw6vkl7ls7w89";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev =  "f5dfe339be1d06f81b22525fe34671ee7d2c8904";
+      sha256 = "01y9j7pjnnld4ipmzjvs0hls0hh698f2sga8cxaw5y6r5j7igaah";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/oauth2";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/oauth2";
+      rev =  "543e37812f10c46c622c9575afd7ad22f22a12ba";
+      sha256 = "0kc816fq1zj5wdw4mfa7w2q26rnh273157w8n0d30xpzl8ba2isr";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev =  "fd80eb99c8f653c847d294a001bdf2a3a6f768f5";
+      sha256 = "12lzldlj1cqc1babp1hkkn76fglzn5abkqvmbpr4f2j95mf9x836";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "37707fdb30a5b38865cfb95e5aab41707daec7fd";
+      sha256 = "1abrr2507a737hdqv4q7pw7hv6ls9pdiq9crhdi52r3gcz6hvizg";
+    };
+  }
+  {
+    goPackagePath  = "google.golang.org/appengine";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/appengine";
+      rev =  "150dc57a1b433e64154302bdc40b6bb8aefa313a";
+      sha256 = "0w3knznv39k8bm85ri62f83czcrxknql7dv6p9hk1a5jx3xljgxq";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-yaml/yaml";
+      rev =  "d670f9405373e636a5a2765eea47fac0c9bc91a4";
+      sha256 = "1w1xid51n8v1mydn2m3vgggw8qgpd5a5sr62snsc77d99fpjsrs0";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone/default.nix
new file mode 100644
index 000000000000..81dbc54cece0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, buildGoPackage, go-bindata, go-bindata-assetfs }:
+
+buildGoPackage rec {
+  name = "drone.io-${version}";
+  version = "0.8.6-20180727-${stdenv.lib.strings.substring 0 7 revision}";
+  revision = "c48150767c2700d35dcc29b110a81c8b5969175e";
+  goPackagePath = "github.com/drone/drone";
+
+  # These dependencies pulled (in `drone` buildprocess) via Makefile,
+  # so I extracted them here, all revisions pinned by same date, as ${version}
+  goDeps= ./deps.nix;
+
+  nativeBuildInputs = [ go-bindata go-bindata-assetfs ];
+
+  src = fetchFromGitHub {
+    owner = "drone";
+    repo = "drone";
+    rev = revision;
+    sha256 = "0miq2012nivvr1ysi3aa2xrr5ak3mf0l3drybyc83iycy0kp4bda";
+  };
+
+  meta = with stdenv.lib; {
+    maintainers = with maintainers; [ avnik vdemeester ];
+    license = licenses.asl20;
+    description = "Continuous Integration platform built on container technology";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone/deps.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone/deps.nix
new file mode 100644
index 000000000000..86059fba28d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone/deps.nix
@@ -0,0 +1,38 @@
+[
+  {
+    goPackagePath = "github.com/drone/drone-ui";
+    fetch = {
+      type = "git";
+      url = "https://github.com/drone/drone-ui";
+      rev = "5a497bd6cd5c3c17c53b00d40bcda1bf6f68f475";
+      sha256 = "1666xlz3dg468izfwprg17sgb3f4ppn5sj5klds3wgdfrjjm4v57";
+    };
+  }
+  {
+    goPackagePath = "github.com/drone/mq";
+    fetch = {
+      type = "git";
+      url = "https://github.com/drone/mq";
+      rev = "280af2a3b9c7d9ce90d625150dfff972c6c190b8";
+      sha256 = "10a24yq3ya8mvs7j6m7lqhyws7jd923rnih75ciq1g327qxf743s";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/net";
+      rev = "dfa909b99c79129e1100513e5cd36307665e5723";
+      sha256 = "0nsansy1yqy1kzh5wpv3zi85s0chxfq0ha8knhgnfa0wj0k8q0il";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "b4deda0973fb4c70b50d226b1af49f3da59f5265";
+      sha256 = "0ya4ha7m20bw048m1159ppqzlvda4x0vdprlbk5sdgmy74h3xcdq";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
new file mode 100644
index 000000000000..42e8f26970f5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
@@ -0,0 +1,51 @@
+{ lib, buildGoPackage, fetchFromGitLab, fetchurl }:
+
+let
+  version = "11.11.0";
+  # Gitlab runner embeds some docker images these are prebuilt for arm and x86_64
+  docker_x86_64 = fetchurl {
+    url = "https://gitlab-runner-downloads.s3.amazonaws.com/v${version}/helper-images/prebuilt-x86_64.tar.xz";
+    sha256 = "0h35y3ifqqsirkbgg75jj30n1ggyyncbwjnnxwdhc3r9hbbc545y";
+  };
+
+  docker_arm = fetchurl {
+    url = "https://gitlab-runner-downloads.s3.amazonaws.com/v${version}/helper-images/prebuilt-arm.tar.xz";
+    sha256 = "1lphzy5xxyc4qgmnf7rrplida2zdn2mfl9p9fr3gyjs7gbcr92d7";
+  };
+in
+buildGoPackage rec {
+  inherit version;
+  name = "gitlab-runner-${version}";
+  goPackagePath = "gitlab.com/gitlab-org/gitlab-runner";
+  commonPackagePath = "${goPackagePath}/common";
+  buildFlagsArray = ''
+    -ldflags=
+      -X ${commonPackagePath}.NAME=gitlab-runner
+      -X ${commonPackagePath}.VERSION=${version}
+      -X ${commonPackagePath}.REVISION=v${version}
+  '';
+
+  src = fetchFromGitLab {
+    owner = "gitlab-org";
+    repo = "gitlab-runner";
+    rev = "v${version}";
+    sha256 = "0i45p4z8f7ggdh7624473d8qhz7d75hlhz98p3z69dggx38vv49y";
+  };
+
+  patches = [ ./fix-shell-path.patch ];
+
+  postInstall = ''
+    touch $bin/bin/hello
+    install -d $bin/bin/helper-images
+    ln -sf ${docker_x86_64} $bin/bin/helper-images/prebuilt-x86_64.tar.xz
+    ln -sf ${docker_arm} $bin/bin/helper-images/prebuilt-arm.tar.xz
+  '';
+
+  meta = with lib; {
+    description = "GitLab Runner the continuous integration executor of GitLab";
+    license = licenses.mit;
+    homepage = https://about.gitlab.com/gitlab-ci/;
+    platforms = platforms.unix ++ platforms.darwin;
+    maintainers = with maintainers; [ bachp zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/fix-shell-path.patch b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/fix-shell-path.patch
new file mode 100644
index 000000000000..8aa419ea5f94
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/fix-shell-path.patch
@@ -0,0 +1,28 @@
+diff --git a/shells/bash.go b/shells/bash.go
+index 673f4765..a58cc5e2 100644
+--- a/shells/bash.go
++++ b/shells/bash.go
+@@ -5,6 +5,7 @@ import (
+ 	"bytes"
+ 	"fmt"
+ 	"io"
++	"os/exec"
+ 	"path"
+ 	"runtime"
+ 	"strconv"
+@@ -225,7 +226,11 @@ func (b *BashShell) GetConfiguration(info common.ShellScriptInfo) (script *commo
+ 	if info.User != "" {
+ 		script.Command = "su"
+ 		if runtime.GOOS == "linux" {
+-			script.Arguments = append(script.Arguments, "-s", "/bin/"+b.Shell)
++			shellPath, err := exec.LookPath(b.Shell)
++			if err != nil {
++				shellPath = "/bin/"+b.Shell
++			}
++			script.Arguments = append(script.Arguments, "-s", shellPath)
+ 		}
+ 		script.Arguments = append(script.Arguments, info.User)
+ 		script.Arguments = append(script.Arguments, "-c", shellCommand)
+-- 
+2.18.0
+
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gocd-agent/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/gocd-agent/default.nix
new file mode 100644
index 000000000000..cdc4e6db2c2d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gocd-agent/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  name = "gocd-agent-${version}-${rev}";
+  version = "16.9.0";
+  rev = "4001";
+
+  src = fetchurl {
+    url = "https://download.go.cd/binaries/${version}-${rev}/generic/go-agent-${version}-${rev}.zip";
+    sha256 = "1xcwwjf2khhng6v1y7dvi579y2j643al9n0x80m0c46qb9mzd04x";
+  };
+  meta = with stdenv.lib; {
+    description = "A continuous delivery server specializing in advanced workflow modeling and visualization";
+    homepage = http://www.go.cd;
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ grahamc swarren83 ];
+  };
+
+  buildInputs = [ unzip ];
+
+  buildCommand = "
+    unzip $src -d $out
+    mv $out/go-agent-${version} $out/go-agent
+  ";
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gocd-server/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/gocd-server/default.nix
new file mode 100644
index 000000000000..8982ca5f77ad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gocd-server/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  name = "gocd-server-${version}-${rev}";
+  version = "16.9.0";
+  rev = "4001";
+
+  src = fetchurl {
+    url = "https://download.go.cd/binaries/${version}-${rev}/generic/go-server-${version}-${rev}.zip";
+    sha256 = "0x5pmjbhrka6p27drkrca7872vgsjxaa5j0cbxsa2ds02wrn57a7";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A continuous delivery server specializing in advanced workflow modeling and visualization";
+    homepage = http://www.go.cd;
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ grahamc swarren83 ];
+  };
+
+  buildInputs = [ unzip ];
+
+  buildCommand = "
+    unzip $src -d $out
+    mv $out/go-server-${version} $out/go-server
+    mkdir -p $out/go-server/conf
+  ";
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix
new file mode 100644
index 000000000000..babc46115e80
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "jenkins-${version}";
+  version = "2.164.3";
+
+  src = fetchurl {
+    url = "http://mirrors.jenkins.io/war-stable/${version}/jenkins.war";
+    sha256 = "03m5ykl6kqih9li2fhyq9rf8x8djaj2rgjd2p897zzw5j0grkbx8";
+  };
+
+  buildCommand = ''
+    mkdir -p "$out/webapps"
+    cp "$src" "$out/webapps/jenkins.war"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An extendable open source continuous integration server";
+    homepage = https://jenkins-ci.org;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ coconnor fpletz earldouglas ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/jenkins/update.sh b/nixpkgs/pkgs/development/tools/continuous-integration/jenkins/update.sh
new file mode 100755
index 000000000000..66d1b4ceff66
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/jenkins/update.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl common-updater-scripts jq
+
+set -eu -o pipefail
+
+core_json="$(curl -s --fail --location https://updates.jenkins.io/stable/update-center.actual.json | jq .core)"
+oldVersion=$(nix-instantiate --eval -E "with import ./. {}; jenkins.version or (builtins.parseDrvName jenkins.name).version" | tr -d '"')
+
+version="$(jq -r .version <<<$core_json)"
+sha256="$(jq -r .sha256 <<<$core_json)"
+hash="$(nix-hash --type sha256 --to-base32 "$sha256")"
+url="$(jq -r .url <<<$core_json)"
+
+if [ ! "${oldVersion}" = "${version}" ]; then
+  update-source-version jenkins "$version" "$hash" "$url"
+  nixpkgs="$(git rev-parse --show-toplevel)"
+  default_nix="$nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix"
+  git add "${default_nix}"
+  git commit -m "jenkins: ${oldVersion} -> ${version}"
+else
+  echo "jenkins is already up-to-date"
+fi
diff --git a/nixpkgs/pkgs/development/tools/corgi/default.nix b/nixpkgs/pkgs/development/tools/corgi/default.nix
new file mode 100644
index 000000000000..b7772dd659fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/corgi/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "corgi-${rev}";
+  rev = "v0.2.4";
+
+  goPackagePath = "github.com/DrakeW/corgi";
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "DrakeW";
+    repo = "corgi";
+    sha256 = "0h9rjv1j129n1ichwpiiyspgim1273asi3s6hgizvbc75gbbb8fn";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "CLI workflow manager";
+    longDescription = ''
+      Corgi is a command-line tool that helps with your repetitive command usages by organizing them into reusable snippet.
+    '';
+    homepage = https://github.com/DrakeW/corgi;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/corgi/deps.nix b/nixpkgs/pkgs/development/tools/corgi/deps.nix
new file mode 100644
index 000000000000..d48b141627c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/corgi/deps.nix
@@ -0,0 +1,47 @@
+[
+  {
+    goPackagePath = "github.com/chzyer/readline";
+    fetch = {
+      type = "git";
+      url = "https://github.com/chzyer/readline";
+      rev = "2972be24d48e78746da79ba8e24e8b488c9880de";
+      sha256 = "104q8dazj8yf6b089jjr82fy9h1g80zyyzvp3g8b44a7d8ngjj6r";
+    };
+  }
+  {
+    goPackagePath = "github.com/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev = "2d684516a8861da43017284349b7e303e809ac21";
+      sha256 = "1fcfmz4wji3gqmmsdx493r7d101s58hwjalqps6hy25nva5pvmfs";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/go-homedir";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/go-homedir";
+      rev = "ae18d6b8b3205b561c79e8e5f69bff09736185f4";
+      sha256 = "0f0z0aa4wivk4z1y503dmnw0k0g0g403dly8i4q263gfshs82sbq";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cobra";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cobra";
+      rev = "99dc123558852f67743bd0b2caf8383cb3c6d720";
+      sha256 = "0b2rjgycgpkpvpsqgvilqkr66bfk477lyd6l0jxmgxb1h0za5s25";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev = "d929dcbb10863323c436af3cf76cb16a6dfc9b29";
+      sha256 = "1qjmqvszs9cmic7brm7pknq86zjra4hq923bn88blfvr3bap5bc4";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/corundum/Gemfile b/nixpkgs/pkgs/development/tools/corundum/Gemfile
new file mode 100644
index 000000000000..5f817ae498a7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/corundum/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "corundum", "=0.6.2"
diff --git a/nixpkgs/pkgs/development/tools/corundum/Gemfile.lock b/nixpkgs/pkgs/development/tools/corundum/Gemfile.lock
new file mode 100644
index 000000000000..40ad1948394f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/corundum/Gemfile.lock
@@ -0,0 +1,56 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    calibrate (0.0.1)
+    caliph (0.3.1)
+    corundum (0.6.2)
+      bundler (~> 1.10)
+      caliph (~> 0.3)
+      mattock (~> 0.9)
+      paint (~> 0.8)
+      rspec (>= 2.0, < 4)
+      simplecov (>= 0.5)
+      simplecov-json (~> 0.2)
+    diff-lcs (1.3)
+    docile (1.1.5)
+    json (2.1.0)
+    mattock (0.10.1)
+      calibrate (~> 0.0.1)
+      caliph (~> 0.3)
+      rake (~> 10.0)
+      tilt (> 0)
+      valise (~> 1.1)
+    paint (0.9.0)
+    rake (10.5.0)
+    rspec (3.6.0)
+      rspec-core (~> 3.6.0)
+      rspec-expectations (~> 3.6.0)
+      rspec-mocks (~> 3.6.0)
+    rspec-core (3.6.0)
+      rspec-support (~> 3.6.0)
+    rspec-expectations (3.6.0)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.6.0)
+    rspec-mocks (3.6.0)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.6.0)
+    rspec-support (3.6.0)
+    simplecov (0.14.1)
+      docile (~> 1.1.0)
+      json (>= 1.8, < 3)
+      simplecov-html (~> 0.10.0)
+    simplecov-html (0.10.1)
+    simplecov-json (0.2)
+      json
+      simplecov
+    tilt (2.0.7)
+    valise (1.2.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  corundum (= 0.6.2)
+
+BUNDLED WITH
+   1.14.4
diff --git a/nixpkgs/pkgs/development/tools/corundum/default.nix b/nixpkgs/pkgs/development/tools/corundum/default.nix
new file mode 100644
index 000000000000..22d7b236ffa4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/corundum/default.nix
@@ -0,0 +1,15 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "corundum";
+  gemdir = ./.;
+  exes = [ "corundum-skel" ];
+
+  meta = with lib; {
+    description = "Tool and libraries for maintaining Ruby gems.";
+    homepage    = https://github.com/nyarly/corundum;
+    license     = licenses.mit;
+    maintainers = [ maintainers.nyarly ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/corundum/gemset.nix b/nixpkgs/pkgs/development/tools/corundum/gemset.nix
new file mode 100644
index 000000000000..e395e098e6d1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/corundum/gemset.nix
@@ -0,0 +1,154 @@
+{
+  calibrate = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17kmlss7db70pjwdbbhag7mnixh8wasdq6n1v8663x50z9c7n2ng";
+      type = "gem";
+    };
+    version = "0.0.1";
+  };
+  caliph = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08d07n4m4yh1h9icq6n9dkw4jwgdmgd638f15mxr2pvqp4wycsnr";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  corundum = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y6shjrqaqyh14a1r4ic660g6jnq4abdrx9imglyalzyrlrwbsxq";
+      type = "gem";
+    };
+    version = "0.6.2";
+  };
+  diff-lcs = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza";
+      type = "gem";
+    };
+    version = "1.3";
+  };
+  docile = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m8j31whq7bm5ljgmsrlfkiqvacrw6iz9wq10r3gwrv5785y8gjx";
+      type = "gem";
+    };
+    version = "1.1.5";
+  };
+  json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  mattock = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02d6igwr4sfj4jnky8d5h0rm2cc665k1bqz7sj4khzvr18nk3ai6";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  paint = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fcn7cfrhbl4nl95fmcd67q33h7bl3iafsafs6w9yj4nqzagz1yc";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  rake = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jcabbgnjc788chx31sihc5pgbqnlc1c75wakmqlbjdm8jns2m9b";
+      type = "gem";
+    };
+    version = "10.5.0";
+  };
+  rspec = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nd50hycab2a2vdah9lxi585g8f63jxjvmzmxqyln51grxwx9hzb";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  rspec-core = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18np8wyw2g79waclpaacba6nd7x60ixg07ncya0j0qj1z9b37grd";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  rspec-expectations = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "028ifzf9mqp3kxx40q1nbwj40g72g9zk0wr78l146phblkv96w0a";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  rspec-mocks = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nv6jkxy24sag1i9w9wi3850k6skk2fm6yhcrgnmlz6vmwxvizp8";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  rspec-support = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "050paqqpsml8w88nf4a15zbbj3vvm471zpv73sjfdnz7w21wnypb";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  simplecov = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r9fnsnsqj432cmrpafryn8nif3x0qg9mdnvrcf0wr01prkdlnww";
+      type = "gem";
+    };
+    version = "0.14.1";
+  };
+  simplecov-html = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f3psphismgp6jp1fxxz09zbswh7m2xxxr6gqlzdh7sgv415clvm";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  simplecov-json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0x9hr08pkj5d14nfzsn5h8b7ayl6q0xir45dcx5rv2a7g10kzlpp";
+      type = "gem";
+    };
+    version = "0.2";
+  };
+  tilt = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1is1ayw5049z8pd7slsk870bddyy5g2imp4z78lnvl8qsl8l0s7b";
+      type = "gem";
+    };
+    version = "2.0.7";
+  };
+  valise = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1arsbmk2gifrhv244qrld7s3202xrnxy6vlc5gqklg70dpsinbn5";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/coursier/default.nix b/nixpkgs/pkgs/development/tools/coursier/default.nix
new file mode 100644
index 000000000000..299e7d9d4992
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/coursier/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  name = "coursier-${version}";
+  version = "1.1.0-M14-6";
+
+  src = fetchurl {
+    url = "https://github.com/coursier/coursier/releases/download/v${version}/coursier";
+    sha256 = "01q0gz4qnwvnd7mprcm5aj77hrxyr6ax8jp4d9jkqfkg272znaj7";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    install -Dm555 $src $out/bin/coursier
+    patchShebangs $out/bin/coursier
+    wrapProgram $out/bin/coursier --prefix PATH ":" ${jre}/bin
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://get-coursier.io/;
+    description = "A Scala library to fetch dependencies from Maven / Ivy repositories";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ adelbertc nequissimus ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cppclean/default.nix b/nixpkgs/pkgs/development/tools/cppclean/default.nix
new file mode 100644
index 000000000000..96fe07a7799a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cppclean/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromGitHub, python3Packages }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  name = "cppclean-unstable-${version}";
+  version = "2018-05-12";
+
+  src = fetchFromGitHub {
+    owner  = "myint";
+    repo   = "cppclean";
+    rev    = "e7da41eca5e1fd2bd1dddd6655e50128bb96dc28";
+    sha256 = "0pymh6r7y19bwcypfkmgwyixrx36pmz338jd83yrjflsbjlriqm4";
+  };
+
+  postUnpack = ''
+    patchShebangs .
+    '';
+
+  checkPhase = ''
+    ./test.bash
+    '';
+
+  meta = with stdenv.lib; {
+    description = "Finds problems in C++ source that slow development of large code bases";
+    homepage    = https://github.com/myint/cppclean;
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ nthorne ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cucumber/Gemfile b/nixpkgs/pkgs/development/tools/cucumber/Gemfile
new file mode 100644
index 000000000000..f738129eca4f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cucumber/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'cucumber'
diff --git a/nixpkgs/pkgs/development/tools/cucumber/Gemfile.lock b/nixpkgs/pkgs/development/tools/cucumber/Gemfile.lock
new file mode 100644
index 000000000000..a9a2d073de4e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cucumber/Gemfile.lock
@@ -0,0 +1,34 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    backports (3.14.0)
+    builder (3.2.3)
+    cucumber (3.1.2)
+      builder (>= 2.1.2)
+      cucumber-core (~> 3.2.0)
+      cucumber-expressions (~> 6.0.1)
+      cucumber-wire (~> 0.0.1)
+      diff-lcs (~> 1.3)
+      gherkin (~> 5.1.0)
+      multi_json (>= 1.7.5, < 2.0)
+      multi_test (>= 0.1.2)
+    cucumber-core (3.2.1)
+      backports (>= 3.8.0)
+      cucumber-tag_expressions (~> 1.1.0)
+      gherkin (~> 5.0)
+    cucumber-expressions (6.0.1)
+    cucumber-tag_expressions (1.1.1)
+    cucumber-wire (0.0.1)
+    diff-lcs (1.3)
+    gherkin (5.1.0)
+    multi_json (1.13.1)
+    multi_test (0.1.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  cucumber
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/development/tools/cucumber/default.nix b/nixpkgs/pkgs/development/tools/cucumber/default.nix
new file mode 100644
index 000000000000..4a3ed7395500
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cucumber/default.nix
@@ -0,0 +1,15 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "cucumber";
+  gemdir = ./.;
+  exes = [ "cucumber" ];
+
+  meta = with lib; {
+    description = "A tool for executable specifications";
+    homepage    = https://cucumber.io/;
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ manveru ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cucumber/gemset.nix b/nixpkgs/pkgs/development/tools/cucumber/gemset.nix
new file mode 100644
index 000000000000..99d519a83b68
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cucumber/gemset.nix
@@ -0,0 +1,114 @@
+{
+  backports = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17j5pf0b69bkn043wi4xd530ky53jbbnljr4bsjzlm4k8bzlknfn";
+      type = "gem";
+    };
+    version = "3.14.0";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1";
+      type = "gem";
+    };
+    version = "3.2.3";
+  };
+  cucumber = {
+    dependencies = ["builder" "cucumber-core" "cucumber-expressions" "cucumber-wire" "diff-lcs" "gherkin" "multi_json" "multi_test"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s2brssrpal8hyhcgg974x3xyhpmvpwps5ypd9p8w2lg01l1pp3j";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  cucumber-core = {
+    dependencies = ["backports" "cucumber-tag_expressions" "gherkin"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iavlh8hqj9lwljbpkw06259gdicbr1bdb6pbj5yy3n8szgr8k3c";
+      type = "gem";
+    };
+    version = "3.2.1";
+  };
+  cucumber-expressions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zwmv6hznyz9vk81f5dhwcr9jhxx2vmbk8yyazayvllvhy0fkpdw";
+      type = "gem";
+    };
+    version = "6.0.1";
+  };
+  cucumber-tag_expressions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cvmbljybws0qzjs1l67fvr9gqr005l8jk1ni5gcsis9pfmqh3vc";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  cucumber-wire = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09ymvqb0sbw2if1nxg8rcj33sf0va88ancq5nmp8g01dfwzwma2f";
+      type = "gem";
+    };
+    version = "0.0.1";
+  };
+  diff-lcs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza";
+      type = "gem";
+    };
+    version = "1.3";
+  };
+  gherkin = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cgcdchwwdm10rsk44frjwqd4ihprhxjbm799nscqy2q1raqfj5s";
+      type = "gem";
+    };
+    version = "5.1.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  multi_test = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sx356q81plr67hg16jfwz9hcqvnk03bd9n75pmdw8pfxjfy1yxd";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/dapper/default.nix b/nixpkgs/pkgs/development/tools/dapper/default.nix
new file mode 100644
index 000000000000..265763492b88
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dapper/default.nix
@@ -0,0 +1,31 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+, fetchpatch
+}:
+
+buildGoPackage rec {
+  pname = "dapper";
+  version = "0.4.1";
+
+  goPackagePath = "github.com/rancher/dapper";
+
+  src = fetchFromGitHub {
+    owner = "rancher";
+    repo = "dapper";
+    rev = "v${version}";
+    sha256 = "03rmkmlvhmfwcln5v1rqww1kirxm0d1p58h6pj8f5fnhk9spb162";
+  };
+   patchPhase = ''
+     substituteInPlace main.go --replace 0.0.0 ${version}
+   '';
+
+  meta = with lib; {
+    description = "Docker Build Wrapper";
+    homepage = "https://github.com/rancher/dapper";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ kuznero ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/database/cdb/default.nix b/nixpkgs/pkgs/development/tools/database/cdb/default.nix
new file mode 100644
index 000000000000..f0a4f6c34e25
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/cdb/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, lib, fetchurl, fetchFromGitHub, writeText }:
+
+let
+  version = "0.75";
+  sha256 = "1iajg55n47hqxcpdzmyq4g4aprx7bzxcp885i850h355k5vmf68r";
+  # Please don’t forget to update the docs:
+  # clone https://github.com/Profpatsch/cdb-docs
+  # and create a pull request with the result of running
+  # ./update <version>
+  # from the repository’s root folder.
+  docRepo = fetchFromGitHub {
+    owner = "Profpatsch";
+    repo = "cdb-docs";
+    rev = "359b6c55c9e170ebfc88f3f38face8ae2315eacb";
+    sha256 = "1y0ivviy58i0pmavhvrpznc4yjigjknff298gnw9rkg5wxm0gbbq";
+  };
+
+in stdenv.mkDerivation {
+  name = "cdb-${version}";
+
+  src = fetchurl {
+    url = "https://cr.yp.to/cdb/cdb-${version}.tar.gz";
+    inherit sha256;
+  };
+
+  outputs = [ "bin" "doc" "out" ];
+
+  postPatch = ''
+    # A little patch, borrowed from Archlinux AUR, borrowed from Gentoo Portage
+    sed -e 's/^extern int errno;$/#include <errno.h>/' -i error.h
+  '';
+
+  postInstall = ''
+    # don't use make setup, but move the binaries ourselves
+    mkdir -p $bin/bin
+    install -m 755 -t $bin/bin/ cdbdump cdbget cdbmake cdbmake-12 cdbmake-sv cdbstats cdbtest
+
+    # patch paths in scripts
+    function cdbmake-subst {
+      substituteInPlace $bin/bin/$1 \
+        --replace /usr/local/bin/cdbmake $bin/bin/cdbmake
+    }
+    cdbmake-subst cdbmake-12
+    cdbmake-subst cdbmake-sv
+
+    # docs
+    mkdir -p $doc/share/cdb
+    cp -r "${docRepo}/docs" $doc/share/cdb/html
+  '';
+
+  meta = {
+    homepage = "https://cr.yp.to/cdb";
+    license = lib.licenses.publicDomain;
+    maintainers = [ lib.maintainers.Profpatsch ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/dbmate/default.nix b/nixpkgs/pkgs/development/tools/database/dbmate/default.nix
new file mode 100644
index 000000000000..14fcc3f8607c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/dbmate/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "dbmate-${version}";
+  version = "1.4.1";
+
+  goPackagePath = "github.com/amacneil/dbmate";
+
+  src = fetchFromGitHub {
+    owner = "amacneil";
+    repo = "dbmate";
+    rev = "v${version}";
+    sha256 = "0s3l51kmpsaikixq1yxryrgglzk4kfrjagcpf1i2bkq4wc5gyv5d";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Database migration tool";
+    homepage = https://dbmate.readthedocs.io;
+    license = licenses.mit;
+    maintainers = [ maintainers.manveru ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/dbmate/deps.nix b/nixpkgs/pkgs/development/tools/database/dbmate/deps.nix
new file mode 100644
index 000000000000..97bfc10b20af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/dbmate/deps.nix
@@ -0,0 +1,84 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev =  "346938d642f2ec3594ed81d874461961cd0faa76";
+      sha256 = "0d4jfmak5p6lb7n2r6yvf5p1zcw0l8j74kn55ghvr7zr7b7axm6c";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-sql-driver/mysql";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-sql-driver/mysql";
+      rev =  "2cc627ac8defc45d65066ae98f898166f580f9a4";
+      sha256 = "0n589y9ak2m6glaqmqlggrfv2hghy5i2906r123svf92ci4r9sww";
+    };
+  }
+  {
+    goPackagePath  = "github.com/joho/godotenv";
+    fetch = {
+      type = "git";
+      url = "https://github.com/joho/godotenv";
+      rev =  "a79fa1e548e2c689c241d10173efd51e5d689d5b";
+      sha256 = "09610yqswxa02905mp9cqgsm50r76saagzddc55sqav4ad04j6qm";
+    };
+  }
+  {
+    goPackagePath  = "github.com/lib/pq";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lib/pq";
+      rev =  "19c8e9ad00952ce0c64489b60e8df88bb16dd514";
+      sha256 = "0lm79ja5id7phf1jwf1vs987azaxis0q7qr69px0r6gqiva0q0vz";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-sqlite3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-sqlite3";
+      rev =  "6c771bb9887719704b210e87e934f08be014bdb1";
+      sha256 = "0x6s7hy3ab3qw6dfl81y7ighjva5j4rrzvqhppf1qwz5alpfmpdm";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev =  "792786c7400a136282c1664665ae0a8db921c6c2";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+    };
+  }
+  {
+    goPackagePath  = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev =  "b91bfb9ebec76498946beb6af7c0230c7cc7ba6c";
+      sha256 = "178xyfgsbs40jq406aqj0r67ik1b81gdc28z45nbcw6hfhz82rvl";
+    };
+  }
+  {
+    goPackagePath  = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev =  "cfb38830724cc34fedffe9a2a29fb54fa9169cd1";
+      sha256 = "0y6f4sbzkiiwrxbl15biivj8c7qwxnvm3zl2dd3mw4wzg4x10ygj";
+    };
+  }
+  {
+    goPackagePath  = "google.golang.org/appengine";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/appengine";
+      rev =  "150dc57a1b433e64154302bdc40b6bb8aefa313a";
+      sha256 = "0w3knznv39k8bm85ri62f83czcrxknql7dv6p9hk1a5jx3xljgxq";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/database/ephemeralpg/default.nix b/nixpkgs/pkgs/development/tools/database/ephemeralpg/default.nix
new file mode 100644
index 000000000000..e136b180d78c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/ephemeralpg/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, postgresql, getopt, makeWrapper }:
+stdenv.mkDerivation rec {
+  name = "ephemeralpg-${version}";
+  version = "2.5";
+  src = fetchurl {
+    url = "http://ephemeralpg.org/code/${name}.tar.gz";
+    sha256 = "004fcll7248h73adkqawn9bhkqj9wsxyi3w99x64f7s37r2518wk";
+  };
+  buildInputs = [ makeWrapper ];
+  installPhase = ''
+    mkdir -p $out
+    PREFIX=$out make install
+    wrapProgram $out/bin/pg_tmp --prefix PATH : ${stdenv.lib.makeBinPath [ postgresql getopt ]}
+  '';
+  meta = with stdenv.lib; {
+    description = ''Run tests on an isolated, temporary PostgreSQL database.'';
+    license = licenses.isc;
+    homepage = http://ephemeralpg.org/;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ hrdinka ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/liquibase/default.nix b/nixpkgs/pkgs/development/tools/database/liquibase/default.nix
new file mode 100644
index 000000000000..4589e6ff4e5b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/liquibase/default.nix
@@ -0,0 +1,83 @@
+{ stdenv, fetchurl, jre, makeWrapper
+, mysqlSupport ? true, mysql_jdbc ? null }:
+
+assert mysqlSupport -> mysql_jdbc != null;
+
+with stdenv.lib;
+let
+  extraJars = optional mysqlSupport mysql_jdbc;
+  logback-core = fetchurl {
+    url = "http://central.maven.org/maven2/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar";
+    sha256 = "5946d837fe6f960c02a53eda7a6926ecc3c758bbdd69aa453ee429f858217f22";
+  };
+  logback-classic = fetchurl {
+    url = "http://central.maven.org/maven2/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar";
+    sha256 = "fb53f8539e7fcb8f093a56e138112056ec1dc809ebb020b59d8a36a5ebac37e0";
+  };
+  slf4j = fetchurl {
+    url = "http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar";
+    sha256 = "18c4a0095d5c1da6b817592e767bb23d29dd2f560ad74df75ff3961dbde25b79";
+  };
+in
+
+stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+  pname = "liquibase";
+  version = "3.6.2";
+
+  src = fetchurl {
+    url = "https://github.com/liquibase/liquibase/releases/download/${pname}-parent-${version}/${name}-bin.tar.gz";
+    sha256 = "199ybjk0xxsg04v5x5l4arljmzj96hxva6ym6bp7av7dny0nqvfx";
+  };
+
+  buildInputs = [ jre makeWrapper ];
+
+  unpackPhase = ''
+    tar xfz ${src}
+  '';
+
+  installPhase =
+    let addJars = dir: ''
+      for jar in ${dir}/*.jar; do
+        CP="\$CP":"\$jar"
+      done
+    '';
+    in ''
+      mkdir -p $out/{bin,lib,sdk}
+      mv ./* $out/
+      cp ${logback-core} ${logback-classic} ${slf4j} $out/lib
+
+      # Clean up documentation.
+      mkdir -p $out/share/doc/${name}
+      mv $out/LICENSE.txt \
+         $out/README.txt \
+         $out/share/doc/${name}
+
+      # Remove silly files.
+      rm $out/liquibase.bat $out/liquibase.spec
+
+      # we provide our own script
+      rm $out/liquibase
+
+      # there’s a lot of escaping, but I’m not sure how to improve that
+      cat > $out/bin/liquibase <<EOF
+      #!/usr/bin/env bash
+      # taken from the executable script in the source
+      CP="$out/liquibase.jar"
+      ${addJars "$out/lib"}
+      ${concatStringsSep "\n" (map (p: addJars "${p}/share/java") extraJars)}
+
+      ${getBin jre}/bin/java -cp "\$CP" \$JAVA_OPTS \
+        liquibase.integration.commandline.Main \''${1+"\$@"}
+      EOF
+      chmod +x $out/bin/liquibase
+  '';
+
+  meta = {
+    description = "Version Control for your database";
+    homepage = http://www.liquibase.org/;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nequissimus ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/litecli/default.nix b/nixpkgs/pkgs/development/tools/database/litecli/default.nix
new file mode 100644
index 000000000000..cbf1af440575
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/litecli/default.nix
@@ -0,0 +1,51 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "litecli";
+  version = "1.0.0";
+
+  # Python 2 won't have prompt_toolkit 2.x.x
+  # See: https://github.com/NixOS/nixpkgs/blob/f49e2ad3657dede09dc998a4a98fd5033fb52243/pkgs/top-level/python-packages.nix#L3408
+  disabled = python3Packages.isPy27;
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "0s5a6r5q09144cc5169snwis5i2jrh3z2g4mw9wi2fsjxyhgpwq5";
+  };
+
+  # fixes tests https://github.com/dbcli/litecli/pull/53
+  postPatch = ''
+    substituteInPlace litecli/main.py \
+      --replace 'except FileNotFoundError:' 'except (FileNotFoundError, OSError):'
+  '';
+
+  propagatedBuildInputs = with python3Packages; [
+    cli-helpers
+    click
+    configobj
+    prompt_toolkit
+    pygments
+    sqlparse
+  ];
+
+  checkInputs = with python3Packages; [
+    pytest
+    mock
+  ];
+
+  preCheck = ''
+    export XDG_CONFIG_HOME=$TMP
+    # add missing file
+    echo "litecli is awesome!" > tests/test.txt
+  '';
+
+  meta = with lib; {
+    description = "Command-line interface for SQLite";
+    longDescription = ''
+      A command-line client for SQLite databases that has auto-completion and syntax highlighting.
+    '';
+    homepage = https://litecli.com;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ Scriptkiddi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/pgcli/default.nix b/nixpkgs/pkgs/development/tools/database/pgcli/default.nix
new file mode 100644
index 000000000000..602eb33fdc1c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pgcli/default.nix
@@ -0,0 +1,47 @@
+{ lib, python3Packages, fetchFromGitHub, fetchpatch }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "pgcli";
+  version = "2.0.2";
+
+  # Python 2 won't have prompt_toolkit 2.x.x
+  # See: https://github.com/NixOS/nixpkgs/blob/f49e2ad3657dede09dc998a4a98fd5033fb52243/pkgs/top-level/python-packages.nix#L3408
+  disabled = python3Packages.isPy27;
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "1p4j2dbcfxd3kz86qi519jkqjx1mg5wdgn1gxdjx3lk1vpsd7x04";
+  };
+
+  patches = [
+    (fetchpatch {
+      # TODO: Remove with next pgcli release. Fixes TypeError in tests
+      # https://github.com/dbcli/pgcli/pull/1006
+      url = https://github.com/dbcli/pgcli/commit/351135b61ef9ad3184c49a406544708daf589fe3.patch;
+      sha256 = "08131y0lv1v760i0ypcx2hljx066ks93kp96xkv3bycxnavvcl53";
+      excludes = [ "changelog.rst" ];
+    })
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    cli-helpers click configobj humanize prompt_toolkit psycopg2
+    pygments sqlparse pgspecial setproctitle keyring
+  ];
+
+  checkInputs = with python3Packages; [ pytest mock ];
+
+  checkPhase = ''
+    pytest
+  '';
+
+  meta = with lib; {
+    description = "Command-line interface for PostgreSQL";
+    longDescription = ''
+      Rich command-line interface for PostgreSQL with auto-completion and
+      syntax highlighting.
+    '';
+    homepage = https://pgcli.com;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ dywedir ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/pyrseas/default.nix b/nixpkgs/pkgs/development/tools/database/pyrseas/default.nix
new file mode 100644
index 000000000000..0390e7b86bbc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pyrseas/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, pythonPackages, fetchFromGitHub }:
+
+let
+  pgdbconn = pythonPackages.buildPythonPackage rec {
+    pname = "pgdbconn";
+    version = "0.8.0";
+    src = fetchFromGitHub {
+      owner = "perseas";
+      repo = "pgdbconn";
+      rev = "26c1490e4f32e4b5b925e5b82014ad106ba5b057";
+      sha256 = "09r4idk5kmqi3yig7ip61r6js8blnmac5n4q32cdcbp1rcwzdn6z";
+    };
+    # The tests are impure (they try to access a PostgreSQL server)
+    doCheck = false;
+    propagatedBuildInputs = [
+      pythonPackages.psycopg2
+      pythonPackages.pytest
+    ];
+  };
+in
+
+pythonPackages.buildPythonApplication rec {
+  pname = "pyrseas";
+  version = "0.8.0";
+  src = fetchFromGitHub {
+    owner = "perseas";
+    repo = "Pyrseas";
+    rev = "2e9be763e61168cf20d28bd69010dc5875bd7b97";
+    sha256 = "1h9vahplqh0rzqjsdq64qqar6hj1bpbc6nl1pqwwgca56385br8r";
+  };
+  # The tests are impure (they try to access a PostgreSQL server)
+  doCheck = false;
+  propagatedBuildInputs = [
+    pythonPackages.psycopg2
+    pythonPackages.pytest
+    pythonPackages.pyyaml
+    pgdbconn
+  ];
+  meta = {
+    description = "A declarative language to describe PostgreSQL databases";
+    homepage = https://perseas.github.io/;
+    license = stdenv.lib.licenses.bsd3;
+    maintainers = with stdenv.lib.maintainers; [ pmeunier ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/schemaspy/default.nix b/nixpkgs/pkgs/development/tools/database/schemaspy/default.nix
new file mode 100644
index 000000000000..ab62fdf3d523
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/schemaspy/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, jre, makeWrapper, graphviz }:
+
+stdenv.mkDerivation rec {
+  version = "6.0.0-rc2";
+  name = "schemaspy-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/schemaspy/schemaspy/releases/download/v${version}/${name}.jar";
+    sha256 = "0ph1l62hy163m2hgybhkccqbcj6brna1vdbr7536zc37lzjxq9rn";
+  };
+
+  unpackPhase = "true";
+
+  buildInputs = [
+    jre
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  wrappedPath = lib.makeBinPath [
+    graphviz
+  ];
+
+  installPhase = ''
+    install -D ${src} "$out/share/java/${name}.jar"
+
+    makeWrapper ${jre}/bin/java $out/bin/schemaspy \
+      --add-flags "-jar $out/share/java/${name}.jar" \
+      --prefix PATH : "$wrappedPath"
+  '';
+
+  meta = with lib; {
+    homepage = "http://schemaspy.org";
+    description = "Document your database simply and easily";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jraygauthier ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/database/shmig/default.nix b/nixpkgs/pkgs/development/tools/database/shmig/default.nix
new file mode 100644
index 000000000000..f65347889382
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/shmig/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub
+, withMySQL ? true, withPSQL ? false, withSQLite ? false
+, mysql, postgresql, sqlite, gawk
+, lib
+}:
+
+stdenv.mkDerivation rec {
+  name = "shmig-${version}";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "mbucc";
+    repo = "shmig";
+    rev = "v${version}";
+    sha256 = "15ry1d51d6dlzzzhck2x57wrq48vs4n9pp20bv2sz6nk92fva5l5";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postPatch = ''
+    patchShebangs .
+
+    substituteInPlace shmig \
+      --replace "\`which mysql\`" "${lib.optionalString withMySQL "${mysql.client}/bin/mysql"}" \
+      --replace "\`which psql\`" "${lib.optionalString withPSQL "${postgresql}/bin/psql"}" \
+      --replace "\`which sqlite3\`" "${lib.optionalString withSQLite "${sqlite}/bin/sqlite3"}" \
+      --replace "awk" "${gawk}/bin/awk"
+  '';
+
+  preBuild = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Minimalistic database migration tool with MySQL, PostgreSQL and SQLite support";
+    homepage = "https://github.com/mbucc/shmig";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sqlcheck/default.nix b/nixpkgs/pkgs/development/tools/database/sqlcheck/default.nix
new file mode 100644
index 000000000000..867aa0b98eca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqlcheck/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  name = "sqlcheck-${version}";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "jarulraj";
+    repo = "sqlcheck";
+    rev = "v${version}";
+    sha256 = "0v8idyhwhbphxzmh03lih3wd9gdq317zn7wsf01infih7b6l0k69";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Automatically identify anti-patterns in SQL queries";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sqldeveloper/18.2.nix b/nixpkgs/pkgs/development/tools/database/sqldeveloper/18.2.nix
new file mode 100644
index 000000000000..adb22f45c8e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqldeveloper/18.2.nix
@@ -0,0 +1,84 @@
+{ stdenv, makeDesktopItem, makeWrapper, requireFile, unzip, jdk }:
+
+let
+  version = "18.2.0.183.1748";
+
+  desktopItem = makeDesktopItem {
+    name = "sqldeveloper";
+    exec = "sqldeveloper";
+    icon = "sqldeveloper";
+    desktopName = "Oracle SQL Developer 18";
+    genericName = "Oracle SQL Developer 18";
+    comment = "Oracle's Oracle DB GUI client";
+    categories = "Application;Development;";
+  };
+in
+  stdenv.mkDerivation rec {
+
+  inherit version;
+  name = "sqldeveloper-${version}";
+
+  src = requireFile rec {
+    name = "sqldeveloper-${version}-no-jre.zip";
+    url = "http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/";
+    message = ''
+      This Nix expression requires that ${name} already be part of the store. To
+      obtain it you need to
+
+      - navigate to ${url}
+      - make sure that it says "Version ${version}" above the list of downloads
+        - if it does not, click on the "Previous Version" link below the downloads
+          and repeat until the version is correct. This is necessarry because as the
+          time of this writing there exists no permanent link for the current version
+          yet.
+          Also consider updating this package yourself (you probably just need to
+          change the `version` variable and update the sha256 to the one of the
+          new file) or opening an issue at the nixpkgs repo.
+      - accept the license agreement
+      - download the file listed under "Other Platforms"
+      - sign in or create an oracle account if neccessary
+
+      and then add the file to the Nix store using either:
+
+        nix-store --add-fixed sha256 ${name}
+
+      or
+
+        nix-prefetch-url --type sha256 file:///path/to/${name}
+    '';
+    sha256 = "0clz2w4ghqczy9sz6j4qqygk20whdwkca192pd3v0dw09875as0k";
+  };
+
+  buildInputs = [ makeWrapper unzip ];
+
+  unpackCmd = "unzip $curSrc";
+
+  installPhase = ''
+    mkdir -p $out/libexec $out/share/{applications,pixmaps}
+    mv * $out/libexec/
+
+    mv $out/libexec/icon.png $out/share/pixmaps/sqldeveloper.png
+    cp ${desktopItem}/share/applications/* $out/share/applications
+
+    makeWrapper $out/libexec/sqldeveloper/bin/sqldeveloper $out/bin/sqldeveloper \
+      --set JAVA_HOME ${jdk.home} \
+      --run "cd $out/libexec/sqldeveloper/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Oracle's Oracle DB GUI client";
+    longDescription = ''
+      Oracle SQL Developer is a free integrated development environment that
+      simplifies the development and management of Oracle Database in both
+      traditional and Cloud deployments. SQL Developer offers complete
+      end-to-end development of your PL/SQL applications, a worksheet for
+      running queries and scripts, a DBA console for managing the database,
+      a reports interface, a complete data modeling solution, and a migration
+      platform for moving your 3rd party databases to Oracle.
+    '';
+    homepage = http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/;
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ ardumont flokli ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sqldeveloper/default.nix b/nixpkgs/pkgs/development/tools/database/sqldeveloper/default.nix
new file mode 100644
index 000000000000..45e8ba4f7c02
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqldeveloper/default.nix
@@ -0,0 +1,84 @@
+{ stdenv, makeDesktopItem, makeWrapper, requireFile, unzip, jdk }:
+
+let
+  version = "17.4.1.054.0712";
+
+  desktopItem = makeDesktopItem {
+    name = "sqldeveloper";
+    exec = "sqldeveloper";
+    icon = "sqldeveloper";
+    desktopName = "Oracle SQL Developer";
+    genericName = "Oracle SQL Developer";
+    comment = "Oracle's Oracle DB GUI client";
+    categories = "Application;Development;";
+  };
+in
+  stdenv.mkDerivation rec {
+
+  inherit version;
+  name = "sqldeveloper-${version}";
+
+  src = requireFile rec {
+    name = "sqldeveloper-${version}-no-jre.zip";
+    url = "http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/";
+    message = ''
+      This Nix expression requires that ${name} already be part of the store. To
+      obtain it you need to
+
+      - navigate to ${url}
+      - make sure that it says "Version ${version}" above the list of downloads
+        - if it does not, click on the "Previous Version" link below the downloads
+          and repeat until the version is correct. This is necessarry because as the
+          time of this writing there exists no permanent link for the current version
+          yet.
+          Also consider updating this package yourself (you probably just need to
+          change the `version` variable and update the sha256 to the one of the
+          new file) or opening an issue at the nixpkgs repo.
+      - accept the license agreement
+      - download the file listed under "Other Platforms"
+      - sign in or create an oracle account if neccessary
+
+      and then add the file to the Nix store using either:
+
+        nix-store --add-fixed sha256 ${name}
+
+      or
+
+        nix-prefetch-url --type sha256 file:///path/to/${name}
+    '';
+    sha256 = "7e92ca94d02489002db291c96f1d67f9b2501a8967ff3457103fcf60c1eb154a";
+  };
+
+  buildInputs = [ makeWrapper unzip ];
+
+  unpackCmd = "unzip $curSrc";
+
+  installPhase = ''
+    mkdir -p $out/libexec $out/share/{applications,pixmaps}
+    mv * $out/libexec/
+
+    mv $out/libexec/icon.png $out/share/pixmaps/sqldeveloper.png
+    cp ${desktopItem}/share/applications/* $out/share/applications
+
+    makeWrapper $out/libexec/sqldeveloper/bin/sqldeveloper $out/bin/sqldeveloper \
+      --set JAVA_HOME ${jdk.home} \
+      --run "cd $out/libexec/sqldeveloper/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Oracle's Oracle DB GUI client";
+    longDescription = ''
+      Oracle SQL Developer is a free integrated development environment that
+      simplifies the development and management of Oracle Database in both
+      traditional and Cloud deployments. SQL Developer offers complete
+      end-to-end development of your PL/SQL applications, a worksheet for
+      running queries and scripts, a DBA console for managing the database,
+      a reports interface, a complete data modeling solution, and a migration
+      platform for moving your 3rd party databases to Oracle.
+    '';
+    homepage = http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/;
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    maintainers = with maintainers; [ ardumont flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sqlite-web/default.nix b/nixpkgs/pkgs/development/tools/database/sqlite-web/default.nix
new file mode 100644
index 000000000000..a1b8ece12362
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqlite-web/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "sqlite-web";
+  version = "0.3.5";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "9e0c8938434b0129423544162d4ca6975abf7042c131445f79661a4b9c885d47";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ flask peewee pygments ];
+
+  # no tests in repository
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Web-based SQLite database browser";
+    homepage = https://github.com/coleifer/sqlite-web;
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sqlitebrowser/default.nix b/nixpkgs/pkgs/development/tools/database/sqlitebrowser/default.nix
new file mode 100644
index 000000000000..7813eba04361
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqlitebrowser/default.nix
@@ -0,0 +1,37 @@
+{ mkDerivation, lib, fetchFromGitHub, cmake, antlr
+, qtbase, qttools, sqlite }:
+
+mkDerivation rec {
+  version = "3.11.2";
+  pname = "sqlitebrowser";
+
+  src = fetchFromGitHub {
+    repo   = pname;
+    owner  = pname;
+    rev    = "v${version}";
+    sha256 = "0ydd5fg76d5d23byac1f7f8mzx3brmd0cnnkd58qpmlzi7p9hcvx";
+  };
+
+  buildInputs = [ qtbase sqlite ];
+
+  nativeBuildInputs = [ cmake antlr qttools ];
+
+  # Use internal `qscintilla` rather than our package to fix the build
+  # (https://github.com/sqlitebrowser/sqlitebrowser/issues/1348#issuecomment-374170936).
+  # This can probably be removed when https://github.com/NixOS/nixpkgs/pull/56034 is merged.
+  cmakeFlags = [ "-DFORCE_INTERNAL_QSCINTILLA=ON" ];
+
+  NIX_LDFLAGS = [
+    "-lQt5PrintSupport"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "DB Browser for SQLite";
+    homepage = http://sqlitebrowser.org/;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ma27 ];
+    platforms = platforms.linux; # can only test on linux
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/squirrel-sql/default.nix b/nixpkgs/pkgs/development/tools/database/squirrel-sql/default.nix
new file mode 100644
index 000000000000..5eb7651f199b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/squirrel-sql/default.nix
@@ -0,0 +1,78 @@
+# To enable specific database drivers, override this derivation and pass the
+# driver packages in the drivers argument (e.g. mysql_jdbc, postgresql_jdbc).
+{ stdenv, fetchurl, makeDesktopItem, makeWrapper, unzip
+, jre
+, drivers ? []
+}:
+let
+  version = "3.9.1";
+in stdenv.mkDerivation rec {
+  name = "squirrel-sql-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/squirrel-sql/1-stable/${version}-plainzip/squirrelsql-${version}-standard.zip";
+    sha256 = "1xpkh9kwdjzd0zks8c4mq3add9ivc24hb0hflp11dl32dsdmzrai";
+  };
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+  buildInputs = [ jre ];
+
+  unpackPhase = ''
+    runHook preUnpack
+    unzip ${src}
+    runHook postUnpack
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+    cd squirrelsql-${version}-standard
+    chmod +x squirrel-sql.sh
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    
+    mkdir -p $out/share/squirrel-sql
+    cp -r . $out/share/squirrel-sql
+
+    mkdir -p $out/bin
+    cp=""
+    for pkg in ${builtins.concatStringsSep " " drivers}; do
+      if test -n "$cp"; then
+        cp="$cp:"
+      fi
+      cp="$cp"$(echo $pkg/share/java/*.jar | tr ' ' :)
+    done
+    makeWrapper $out/share/squirrel-sql/squirrel-sql.sh $out/bin/squirrel-sql \
+      --set CLASSPATH "$cp" \
+      --set JAVA_HOME "${jre}"
+    # Make sure above `CLASSPATH` gets picked up
+    substituteInPlace $out/share/squirrel-sql/squirrel-sql.sh --replace "-cp \"\$CP\"" "-cp \"\$CLASSPATH:\$CP\""
+
+    mkdir -p $out/share/icons/hicolor/32x32/apps
+    ln -s $out/share/squirrel-sql/icons/acorn.png \
+      $out/share/icons/hicolor/32x32/apps/squirrel-sql.png
+    ln -s ${desktopItem}/share/applications $out/share
+    
+    runHook postInstall
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = "squirrel-sql";
+    exec = "squirrel-sql";
+    comment = meta.description;
+    desktopName = "SQuirreL SQL";
+    genericName = "SQL Client";
+    categories = "Development;";
+    icon = "squirrel-sql";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Universal SQL Client";
+    homepage = http://squirrel-sql.sourceforge.net/;
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ khumba ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/timescaledb-parallel-copy/default.nix b/nixpkgs/pkgs/development/tools/database/timescaledb-parallel-copy/default.nix
new file mode 100644
index 000000000000..3c9f9c54dd39
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/timescaledb-parallel-copy/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "timescaledb-parallel-copy";
+  version = "0.2.0";
+
+  owner  = "timescale";
+  repo   = "timescaledb-parallel-copy";
+
+  goPackagePath = with src; "github.com/${owner}/${repo}";
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    inherit owner repo;
+    rev    = version;
+    sha256 = "1z9vf29vrxqs8imbisv681d02p4cfk3hlsrin6hhibxf1h0br9gd";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Bulk, parallel insert of CSV records into PostgreSQL";
+    homepage    = https://github.com/timescale/timescaledb-parallel-copy;
+    license     = licenses.asl20;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/timescaledb-parallel-copy/deps.nix b/nixpkgs/pkgs/development/tools/database/timescaledb-parallel-copy/deps.nix
new file mode 100644
index 000000000000..ac145fcd34ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/timescaledb-parallel-copy/deps.nix
@@ -0,0 +1,21 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/jmoiron/sqlx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jmoiron/sqlx";
+      rev = "82935fac6c1a317907c8f43ed3f7f85ea844a78b";
+      sha256 = "0cbscnss2ifc3qgmy97i0zbirrp4hix4jlcz853f4bg5n2zzgwh2";
+    };
+  }
+  {
+    goPackagePath = "github.com/lib/pq";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lib/pq";
+      rev = "7aad666537ab32b76f0966145530335f1fed51fd";
+      sha256 = "12qczn5afbf6203wnbpay1kazzh20jg5qyakrph3j1r13n91nc1r";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/database/timescaledb-tune/default.nix b/nixpkgs/pkgs/development/tools/database/timescaledb-tune/default.nix
new file mode 100644
index 000000000000..9dd923173733
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/timescaledb-tune/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "timescaledb-tune";
+  version = "0.6.0";
+
+  goPackagePath = "github.com/timescale/timescaledb-tune";
+
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "timescale";
+    repo = name;
+    rev = version;
+    sha256 = "0hjxmjgkqm9sbjbyhs3pzkk1d9vvlcbzwl7ghsigh4h7rw3a0mpk";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A tool for tuning your TimescaleDB for better performance";
+    homepage = https://github.com/timescale/timescaledb-tune;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/timescaledb-tune/deps.nix b/nixpkgs/pkgs/development/tools/database/timescaledb-tune/deps.nix
new file mode 100644
index 000000000000..d898770fd4ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/timescaledb-tune/deps.nix
@@ -0,0 +1,21 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev = "3f9d52f7176a6927daacff70a3e8d1dc2025c53e";
+      sha256 = "165ww24x6ba47ji4j14mp3f006ksnmi53ws9280pgd2zcw91nbn8";
+    };
+  }
+  {
+    goPackagePath = "github.com/pbnjay/memory";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pbnjay/memory";
+      rev = "974d429e7ae40c89e7dcd41cfcc22a0bfbe42510";
+      sha256 = "0kazg5psdn90pqadrzma5chdwh0l2by9z31sspr47gx93fhjmkkq";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/dcadec/default.nix b/nixpkgs/pkgs/development/tools/dcadec/default.nix
new file mode 100644
index 000000000000..f9ca826cd620
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dcadec/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = pname + "-" + version;
+  pname = "dcadec";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "foo86";
+    repo = pname;
+    rev = "v" + version;
+    sha256 = "07nd0ajizrp1w02bsyfcv18431r8m8rq8gjfmz9wmckpg7cxj2hs";
+  };
+
+  installPhase = "make PREFIX=/ DESTDIR=$out install";
+
+  doCheck = false; # fails with "ERROR: Run 'git submodule update --init test/samples' first."
+
+  meta = with stdenv.lib; {
+    description = "DTS Coherent Acoustics decoder with support for HD extensions";
+    maintainers = with maintainers; [ edwtjo ];
+    homepage = https://github.com/foo86/dcadec;
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/deadcode/default.nix b/nixpkgs/pkgs/development/tools/deadcode/default.nix
new file mode 100644
index 000000000000..fbed4e905cfc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/deadcode/default.nix
@@ -0,0 +1,31 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+# TODO(yl): should we package https://github.com/remyoudompheng/go-misc instead of
+# the standalone extract of deadcode from it?
+buildGoPackage rec {
+  name = "deadcode-unstable-${version}";
+  version = "2016-07-24";
+  rev = "210d2dc333e90c7e3eedf4f2242507a8e83ed4ab";
+
+  goPackagePath = "github.com/tsenart/deadcode";
+  excludedPackages = "\\(cmd/fillswitch/test-fixtures\\)";
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "tsenart";
+    repo = "deadcode";
+    sha256 = "05kif593f4wygnrq2fdjhn7kkcpdmgjnykcila85d0gqlb1f36g0";
+  };
+
+  meta = with lib; {
+    description = "deadcode is a very simple utility which detects unused declarations in a Go package.";
+    homepage = https://github.com/remyoudompheng/go-misc/tree/master/deadcode;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/deis/default.nix b/nixpkgs/pkgs/development/tools/deis/default.nix
new file mode 100644
index 000000000000..172e81e1369e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/deis/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "deis-${version}";
+  version = "1.13.4";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/deis/deis";
+  subPackages = [ "client" ];
+
+  postInstall = ''
+    if [ -f "$bin/bin/client" ]; then
+      mv "$bin/bin/client" "$bin/bin/deis"
+    fi
+  '';
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "deis";
+    repo = "deis";
+    sha256 = "0hndzvlgpfm83c4i1c88byv8j9clagswa79nny8wrw33dx90dym1";
+  };
+
+  preBuild = ''
+    export GOPATH=$GOPATH:$NIX_BUILD_TOP/go/src/${goPackagePath}/Godeps/_workspace
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://deis.io;
+    description = "A command line utility used to interact with the Deis open source PaaS.";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/deisctl/default.nix b/nixpkgs/pkgs/development/tools/deisctl/default.nix
new file mode 100644
index 000000000000..4285a6745591
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/deisctl/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "deis-${version}";
+  version = "1.13.3";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/deis/deis";
+  subPackages = [ "deisctl" ];
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "deis";
+    repo = "deis";
+    sha256 = "15q44jyjms8fdmly0z4sn4ymf1dx6cmdavgixjixdj2wbjw0yi2p";
+  };
+
+  preBuild = ''
+    export GOPATH=$GOPATH:$NIX_BUILD_TOP/go/src/${goPackagePath}/Godeps/_workspace
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://deis.io;
+    description = "A command-line utility used to provision and operate a Deis cluster.";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/delve/default.nix b/nixpkgs/pkgs/development/tools/delve/default.nix
new file mode 100644
index 000000000000..a0bd4e12063e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/delve/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "delve-${version}";
+  version = "1.2.0";
+
+  goPackagePath = "github.com/go-delve/delve";
+  excludedPackages = "\\(_fixtures\\|scripts\\|service/test\\)";
+
+  src = fetchFromGitHub {
+    owner = "go-delve";
+    repo = "delve";
+    rev = "v${version}";
+    sha256 = "1xz1xm0lb1arwm3w2ydq5y5xglq60fc0q46x9xndr3i9j0rm8bxh";
+  };
+
+  meta = with stdenv.lib; {
+    description = "debugger for the Go programming language";
+    homepage = https://github.com/derekparker/delve;
+    maintainers = with maintainers; [ vdemeester ];
+    license = licenses.mit;
+    platforms = [ "x86_64-linux" ] ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dep/default.nix b/nixpkgs/pkgs/development/tools/dep/default.nix
new file mode 100644
index 000000000000..a486d786c374
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dep/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "dep-${version}";
+  version = "0.5.1";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/golang/dep";
+  subPackages = [ "cmd/dep" ];
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "golang";
+    repo = "dep";
+    sha256 = "1a5vq5v3ikg6iysbywxr5hcjnbv76nzhk50rd3iq3v2fnyq38dv2";
+  };
+
+  buildFlagsArray = ("-ldflags=-s -w -X main.commitHash=${rev} -X main.version=${version}");
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/golang/dep;
+    description = "Go dependency management tool";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ carlsverre rvolosatovs ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dep2nix/default.nix b/nixpkgs/pkgs/development/tools/dep2nix/default.nix
new file mode 100644
index 000000000000..dcdb1053cf72
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dep2nix/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, buildGoPackage
+, makeWrapper, nix-prefetch-scripts }:
+
+buildGoPackage rec {
+  pname = "dep2nix";
+  version = "unstable-2019-04-02";
+
+  goPackagePath = "github.com/nixcloud/dep2nix";
+
+  src = fetchFromGitHub {
+    owner = "nixcloud";
+    repo = pname;
+    rev = "830684f920333b8ff0946d6b807e8be642eec3ef";
+    sha256 = "17sjxhzhmz4893x3x054anp4xvqd1px15nv3fj2m7i6r0vbgpm0j";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  postFixup = ''
+    wrapProgram $bin/bin/dep2nix \
+      --prefix PATH : ${nix-prefetch-scripts}/bin
+  '';
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Convert `Gopkg.lock` files from golang dep into `deps.nix`";
+    license = licenses.bsd3;
+    homepage = https://github.com/nixcloud/dep2nix;
+    maintainers = [ maintainers.mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dep2nix/deps.nix b/nixpkgs/pkgs/development/tools/dep2nix/deps.nix
new file mode 100644
index 000000000000..fc9280e9df5b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dep2nix/deps.nix
@@ -0,0 +1,145 @@
+
+  # file automatically generated from Gopkg.lock with https://github.com/nixcloud/dep2nix (golang dep)
+  [
+  
+    {
+      goPackagePath  = "github.com/Masterminds/semver";
+      fetch = {
+        type = "git";
+        url = "https://github.com/Masterminds/semver";
+        rev =  "a93e51b5a57ef416dac8bb02d11407b6f55d8929";
+        sha256 = "1rd3p135r7iw0lvaa6vk7afxna87chq61a7a0wqnxd3xgpnpa9ik";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/Masterminds/vcs";
+      fetch = {
+        type = "git";
+        url = "https://github.com/Masterminds/vcs";
+        rev =  "6f1c6d150500e452704e9863f68c2559f58616bf";
+        sha256 = "02bpyzccazw9lwqchcz349al4vlxnz4m5gzwigk02zg2qpa1j53j";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/armon/go-radix";
+      fetch = {
+        type = "git";
+        url = "https://github.com/armon/go-radix";
+        rev =  "1fca145dffbcaa8fe914309b1ec0cfc67500fe61";
+        sha256 = "19jws9ngncpbhghzcy7biyb4r8jh14mzknyk67cvq6ln7kh1qyic";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/boltdb/bolt";
+      fetch = {
+        type = "git";
+        url = "https://github.com/boltdb/bolt";
+        rev =  "2f1ce7a837dcb8da3ec595b1dac9d0632f0f99e8";
+        sha256 = "0z7j06lijfi4y30ggf2znak2zf2srv2m6c68ar712wd2ys44qb3r";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/golang/dep";
+      fetch = {
+        type = "git";
+        url = "https://github.com/CrushedPixel/dep";
+        rev =  "fa9f32339c8855ebe7e7bc66e549036a7e06d37a";
+        sha256 = "1knaxs1ji1b0b68393f24r8qzvahxz9x7rqwc8jsjlshvpz0hlm6";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/golang/protobuf";
+      fetch = {
+        type = "git";
+        url = "https://github.com/golang/protobuf";
+        rev =  "bbd03ef6da3a115852eaf24c8a1c46aeb39aa175";
+        sha256 = "1pyli3dcagi7jzpiazph4fhkz7a3z4bhd25nwbb7g0iy69b8z1g4";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/jmank88/nuts";
+      fetch = {
+        type = "git";
+        url = "https://github.com/jmank88/nuts";
+        rev =  "8b28145dffc87104e66d074f62ea8080edfad7c8";
+        sha256 = "1d0xj1dj1lfalq3pg15h0c645n84lf122xx3zkm7hawq9zri6n5k";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/nightlyone/lockfile";
+      fetch = {
+        type = "git";
+        url = "https://github.com/nightlyone/lockfile";
+        rev =  "6a197d5ea61168f2ac821de2b7f011b250904900";
+        sha256 = "03znnf6rzyyi4h4qj81py1xpfs3pnfm39j4bfc9qzakz5j9y1gdl";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/pelletier/go-toml";
+      fetch = {
+        type = "git";
+        url = "https://github.com/pelletier/go-toml";
+        rev =  "acdc4509485b587f5e675510c4f2c63e90ff68a8";
+        sha256 = "1y5m9pngxhsfzcnxh8ma5nsllx74wn0jr47p2n6i3inrjqxr12xh";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/pkg/errors";
+      fetch = {
+        type = "git";
+        url = "https://github.com/pkg/errors";
+        rev =  "645ef00459ed84a119197bfb8d8205042c6df63d";
+        sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/sdboyer/constext";
+      fetch = {
+        type = "git";
+        url = "https://github.com/sdboyer/constext";
+        rev =  "836a144573533ea4da4e6929c235fd348aed1c80";
+        sha256 = "0055yw73di4spa1wwpa2pyb708wmh9r3xd8dcv8pn81dba94if1w";
+      };
+    }
+    
+    {
+      goPackagePath  = "golang.org/x/net";
+      fetch = {
+        type = "git";
+        url = "https://go.googlesource.com/net";
+        rev =  "dc948dff8834a7fe1ca525f8d04e261c2b56e70d";
+        sha256 = "0gkw1am63agb1rgpxr2qhns9npr99mzwrxg7px88qq8h93zzd4kg";
+      };
+    }
+    
+    {
+      goPackagePath  = "golang.org/x/sync";
+      fetch = {
+        type = "git";
+        url = "https://go.googlesource.com/sync";
+        rev =  "fd80eb99c8f653c847d294a001bdf2a3a6f768f5";
+        sha256 = "12lzldlj1cqc1babp1hkkn76fglzn5abkqvmbpr4f2j95mf9x836";
+      };
+    }
+    
+    {
+      goPackagePath  = "golang.org/x/sys";
+      fetch = {
+        type = "git";
+        url = "https://go.googlesource.com/sys";
+        rev =  "37707fdb30a5b38865cfb95e5aab41707daec7fd";
+        sha256 = "1abrr2507a737hdqv4q7pw7hv6ls9pdiq9crhdi52r3gcz6hvizg";
+      };
+    }
+    
+]
diff --git a/nixpkgs/pkgs/development/tools/detect-secrets/default.nix b/nixpkgs/pkgs/development/tools/detect-secrets/default.nix
new file mode 100644
index 000000000000..6e9e1596b131
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/detect-secrets/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildPythonApplication, fetchFromGitHub, isPy27, pyyaml, unidiff, configparser, enum34, future, functools32, mock, pytest }:
+
+buildPythonApplication rec {
+  pname = "detect-secrets";
+  version = "0.12.4";
+
+  # PyPI tarball doesn't ship tests
+  src = fetchFromGitHub {
+    owner = "Yelp";
+    repo = "detect-secrets";
+    rev = "v${version}";
+    sha256 = "01y5xd0irxxib4wnf5834gwa7ibb81h5y4dl8b26gyzgvm5zfpk1";
+  };
+
+  propagatedBuildInputs = [ pyyaml ]
+    ++ lib.optionals isPy27 [ configparser enum34 future functools32 ];
+
+  checkInputs = [ mock pytest unidiff ];
+
+  # deselect tests which require git setup
+  checkPhase = ''
+    PYTHONPATH=$PWD:$PYTHONPATH pytest \
+      --deselect tests/main_test.py::TestMain \
+      --deselect tests/pre_commit_hook_test.py::TestPreCommitHook \
+      --deselect tests/core/baseline_test.py::TestInitializeBaseline
+  '';
+
+  meta = with lib; {
+    description = "An enterprise friendly way of detecting and preventing secrets in code";
+    homepage = https://github.com/Yelp/detect-secrets;
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/devd/default.nix b/nixpkgs/pkgs/development/tools/devd/default.nix
new file mode 100644
index 000000000000..f3e63c537897
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devd/default.nix
@@ -0,0 +1,22 @@
+{ buildGoPackage, fetchFromGitHub, stdenv }:
+
+buildGoPackage rec {
+  pname = "devd";
+  version = "0.9";
+  src = fetchFromGitHub {
+    owner = "cortesi";
+    repo = "devd";
+    rev = "v${version}";
+    sha256 = "1b02fj821k68q7xl48wc194iinqw9jiavzfl136hlzvg4m07p1wf";
+  };
+  goPackagePath = "github.com/cortesi/devd";
+  subPackages = [ "cmd/devd" ];
+  goDeps = ./deps.nix;
+  meta = with stdenv.lib; {
+    description = "A local webserver for developers";
+    homepage = https://github.com/cortesi/devd;
+    license = licenses.mit;
+    maintainers = with maintainers; [ brianhicks ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/devd/deps.nix b/nixpkgs/pkgs/development/tools/devd/deps.nix
new file mode 100644
index 000000000000..2cf6dd7eb23b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devd/deps.nix
@@ -0,0 +1,201 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/GeertJohan/go.rice";
+    fetch = {
+      type = "git";
+      url = "https://github.com/GeertJohan/go.rice";
+      rev =  "c02ca9a983da5807ddf7d796784928f5be4afd09";
+      sha256 = "1wzi3fprizg29dd4b4bmwz49x154k8cry9d7c08441y1i8w895yw";
+    };
+  }
+  {
+    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/bmatcuk/doublestar";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bmatcuk/doublestar";
+      rev =  "85a78806aa1b4707d1dbace9be592cf1ece91ab3";
+      sha256 = "01fd5j142pgsj5gfba43646aa6vd09fzvjhhik2r30nj4lsyy3z8";
+    };
+  }
+  {
+    goPackagePath  = "github.com/cortesi/moddwatch";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cortesi/moddwatch";
+      rev =  "0a1e0881aa8823d4dbec04c5b65a32a33f467e46";
+      sha256 = "0f9gi2vvrhsbbvfqzlx2dcgn389qj1h77rvh2iffqhnsn3cxf5fr";
+    };
+  }
+  {
+    goPackagePath  = "github.com/cortesi/termlog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cortesi/termlog";
+      rev =  "87cefd5ac843f65364f70a1fd2477bb6437690e8";
+      sha256 = "1mygv1bv6dkm5p1wsvzrsyq771k6apdcxlyfqdp5ay8vl75jxvmb";
+    };
+  }
+  {
+    goPackagePath  = "github.com/daaku/go.zipexe";
+    fetch = {
+      type = "git";
+      url = "https://github.com/daaku/go.zipexe";
+      rev =  "a5fe2436ffcb3236e175e5149162b41cd28bd27d";
+      sha256 = "0vi5pskhifb6zw78w2j97qbhs09zmrlk4b48mybgk5b3sswp6510";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dustin/go-humanize";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dustin/go-humanize";
+      rev =  "9f541cc9db5d55bce703bd99987c9d5cb8eea45e";
+      sha256 = "1kqf1kavdyvjk7f8kx62pnm7fbypn9z1vbf8v2qdh3y7z7a0cbl3";
+    };
+  }
+  {
+    goPackagePath  = "github.com/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev =  "3f9d52f7176a6927daacff70a3e8d1dc2025c53e";
+      sha256 = "165ww24x6ba47ji4j14mp3f006ksnmi53ws9280pgd2zcw91nbn8";
+    };
+  }
+  {
+    goPackagePath  = "github.com/goji/httpauth";
+    fetch = {
+      type = "git";
+      url = "https://github.com/goji/httpauth";
+      rev =  "2da839ab0f4df05a6db5eb277995589dadbd4fb9";
+      sha256 = "0rcz1qxdbc2gw0gaj81kag94k98izs9vmhcp5mzs7979s7q4kym1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gorilla/websocket";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/websocket";
+      rev =  "66b9c49e59c6c48f0ffce28c2d8b8a5678502c6d";
+      sha256 = "00i4vb31nsfkzzk7swvx3i75r2d960js3dri1875vypk3v2s0pzk";
+    };
+  }
+  {
+    goPackagePath  = "github.com/juju/ratelimit";
+    fetch = {
+      type = "git";
+      url = "https://github.com/juju/ratelimit";
+      rev =  "59fac5042749a5afb9af70e813da1dd5474f0167";
+      sha256 = "0ppwvwbh9jdpdk4f9924vw373cpfz5g5ad10c707p22a984vanrz";
+    };
+  }
+  {
+    goPackagePath  = "github.com/kardianos/osext";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kardianos/osext";
+      rev =  "ae77be60afb1dcacde03767a8c37337fad28ac14";
+      sha256 = "056dkgxrqjj5r18bnc3knlpgdz5p3yvp12y4y978hnsfhwaqvbjz";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev =  "167de6bfdfba052fa6b2d3664c8f5272e23c9072";
+      sha256 = "1nwjmsppsjicr7anq8na6md7b1z84l9ppnlr045hhxjvbkqwalvx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev =  "6ca4dbf54d38eea1a992b3c722a76a5d1c4cb25c";
+      sha256 = "0zs92j2cqaw9j8qx1sdxpv3ap0rgbs0vrvi72m40mg8aa36gd39w";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mitchellh/go-homedir";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/go-homedir";
+      rev =  "ae18d6b8b3205b561c79e8e5f69bff09736185f4";
+      sha256 = "0f0z0aa4wivk4z1y503dmnw0k0g0g403dly8i4q263gfshs82sbq";
+    };
+  }
+  {
+    goPackagePath  = "github.com/rjeczalik/notify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rjeczalik/notify";
+      rev =  "629144ba06a1c6af28c1e42c228e3d42594ce081";
+      sha256 = "0745w0mdr9xfr4rxw4pfr1sl8apc7wr7mvfykdl4wslq3mdj8a91";
+    };
+  }
+  {
+    goPackagePath  = "github.com/toqueteos/webbrowser";
+    fetch = {
+      type = "git";
+      url = "https://github.com/toqueteos/webbrowser";
+      rev =  "43eedf9c266f511c55ef7eace9ee549e269b54b4";
+      sha256 = "0wa8xv0gh9iq3dlwb48dx8w2awrsarqa900hszan8gaxgag7x7ih";
+    };
+  }
+  {
+    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 =  "927f97764cc334a6575f4b7a1584a147864d5723";
+      sha256 = "0np7b766gb92vbm514yhdl7cjmqvn0dxdxskd84aas2ri1fkpgw5";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "b4a75ba826a64a70990f11a225237acd6ef35c9f";
+      sha256 = "0kzrd2wywkcq35iakbzplqyma4bvf2ng3mzi7917kxcbdq3fflrj";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/alecthomas/kingpin.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/kingpin";
+      rev =  "947dcec5ba9c011838740e680966fd7087a71d0d";
+      sha256 = "0mndnv3hdngr3bxp7yxfd47cas4prv98sqw534mx7vp38gd88n5r";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/devpi-client/default.nix b/nixpkgs/pkgs/development/tools/devpi-client/default.nix
new file mode 100644
index 000000000000..b23745a7b493
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devpi-client/default.nix
@@ -0,0 +1,47 @@
+{ stdenv
+, pythonPackages
+, glibcLocales
+, devpi-server
+, git
+, mercurial
+} :
+
+pythonPackages.buildPythonApplication rec {
+  name = "${pname}-${version}";
+  pname = "devpi-client";
+  version = "4.1.0";
+
+  src = pythonPackages.fetchPypi {
+    inherit pname version;
+    sha256 = "0f5jkvxx9fl8v5vwbwmplqhjsdfgiib7j3zvn0zxd8krvi2s38fq";
+  };
+
+  checkInputs = with pythonPackages; [
+                    pytest pytest-flakes webtest mock
+                    devpi-server tox
+                    sphinx wheel git mercurial detox
+                    setuptools
+                    ];
+  checkPhase = ''
+    export PATH=$PATH:$out/bin
+    export HOME=$TMPDIR # fix tests failing in sandbox due to "/homeless-shelter"
+
+    # setuptools do not get propagated into the tox call (cannot import setuptools)
+    rm testing/test_test.py
+
+    # test_pypi_index_attributes tries to connect to upstream pypi
+    py.test -k 'not test_pypi_index_attributes' testing
+  '';
+
+  LC_ALL = "en_US.UTF-8";
+  buildInputs = with pythonPackages; [ glibcLocales pkginfo check-manifest ];
+  propagatedBuildInputs = with pythonPackages; [ py devpi-common pluggy setuptools ];
+
+  meta = with stdenv.lib; {
+    homepage = http://doc.devpi.net;
+    description = "Client for devpi, a pypi index server and packaging meta tool";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lewo makefu ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/devpi-server/default.nix b/nixpkgs/pkgs/development/tools/devpi-server/default.nix
new file mode 100644
index 000000000000..f3ade82e52e8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devpi-server/default.nix
@@ -0,0 +1,34 @@
+ { stdenv, pythonPackages, nginx }:
+
+pythonPackages.buildPythonApplication rec {
+  name = "${pname}-${version}";
+  pname = "devpi-server";
+  version = "4.4.0";
+
+  src = pythonPackages.fetchPypi {
+    inherit pname version;
+    sha256 = "0y77kcnk26pfid8vsw07v2k61x9sdl6wbmxg5qxnz3vd7703xpkl";
+  };
+
+  propagatedBuildInputs = with pythonPackages;
+    [ devpi-common execnet itsdangerous pluggy waitress pyramid passlib ];
+  checkInputs = with pythonPackages; [ nginx webtest pytest beautifulsoup4 pytest-timeout mock pyyaml ];
+  preCheck = ''
+    # These tests pass with pytest 3.3.2 but not with pytest 3.4.0.
+    sed -i 's/test_basic/noop/' test_devpi_server/test_log.py
+    sed -i 's/test_new/noop/' test_devpi_server/test_log.py
+    sed -i 's/test_thread_run_try_again/noop/' test_devpi_server/test_replica.py
+  '';
+  checkPhase = ''
+    runHook preCheck
+    cd test_devpi_server/
+    PATH=$PATH:$out/bin pytest --slow -rfsxX
+  '';
+
+  meta = with stdenv.lib;{
+    homepage = http://doc.devpi.net;
+    description = "Github-style pypi index server and packaging meta tool";
+    license = licenses.mit;
+    maintainers = with maintainers; [ makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/devtodo/default.nix b/nixpkgs/pkgs/development/tools/devtodo/default.nix
new file mode 100644
index 000000000000..dcaa43156699
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devtodo/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, readline, ncurses }:
+
+stdenv.mkDerivation rec {
+  name = "devtodo-${version}";
+  version = "0.1.20";
+
+  src = fetchurl {
+    url = "https://swapoff.org/files/devtodo/${name}.tar.gz";
+    sha256 = "029y173njydzlznxmdizrrz4wcky47vqhl87fsb7xjcz9726m71p";
+  };
+
+  buildInputs = [ readline ncurses ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://swapoff.org/devtodo1.html;
+    description = "A hierarchical command-line task manager";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.woffs ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dive/default.nix b/nixpkgs/pkgs/development/tools/dive/default.nix
new file mode 100644
index 000000000000..b599ccf1364a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dive/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "dive";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "wagoodman";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0az9b800zwk5sd90s8ssg8amf0a4dl7nrglkirp51d8hh3rs6nzl";
+  };
+
+  modSha256 = "1rc9nqri66kgjpxqcgwllyd0qmk46gs3wmsfdj1w43p6ybnaf3qw";
+
+  meta = with lib; {
+    description = "A tool for exploring each layer in a docker image";
+    homepage = https://github.com/wagoodman/dive;
+    license = licenses.mit;
+    maintainers = with maintainers; [ marsam spacekookie ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/doctl/default.nix b/nixpkgs/pkgs/development/tools/doctl/default.nix
new file mode 100644
index 000000000000..d7604f4de9d7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/doctl/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "doctl-${version}";
+  version = "${major}.${minor}.${patch}";
+  major = "1";
+  minor = "18";
+  patch = "0";
+  goPackagePath = "github.com/digitalocean/doctl";
+
+  excludedPackages = ''\(doctl-gen-doc\|install-doctl\|release-doctl\)'';
+  buildFlagsArray = let t = "${goPackagePath}"; in ''
+     -ldflags=
+        -X ${t}.Major=${major}
+        -X ${t}.Minor=${minor}
+        -X ${t}.Patch=${patch}
+        -X ${t}.Label=release
+   '';
+
+  src = fetchFromGitHub {
+    owner = "digitalocean";
+    repo   = "doctl";
+    rev    = "v${version}";
+    sha256 = "1p43q1iyjj597gr47hn589fv7n26mny9niq7yb9hlmslkplsrb0a";
+  };
+
+  meta = {
+    description = "A command line tool for DigitalOcean services";
+    homepage = https://github.com/digitalocean/doctl;
+    license = stdenv.lib.licenses.asl20;
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [ stdenv.lib.maintainers.siddharthist ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/documentation/doxygen/default.nix b/nixpkgs/pkgs/development/tools/documentation/doxygen/default.nix
new file mode 100644
index 000000000000..d7dcb4259633
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/doxygen/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, cmake, fetchurl, perl, python, flex, bison, qt4, CoreServices, libiconv }:
+
+stdenv.mkDerivation rec {
+
+  name = "doxygen-1.8.15";
+
+  src = fetchurl {
+    urls = [
+      "mirror://sourceforge/doxygen/${name}.src.tar.gz" # faster, with https, etc.
+      "http://doxygen.nl/files/${name}.src.tar.gz"
+    ];
+    sha256 = "bd9c0ec462b6a9b5b41ede97bede5458e0d7bb40d4cfa27f6f622eb33c59245d";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs =
+    [ perl python flex bison ]
+    ++ stdenv.lib.optional (qt4 != null) qt4
+    ++ stdenv.lib.optional stdenv.isSunOS libiconv
+    ++ stdenv.lib.optionals stdenv.isDarwin [ CoreServices libiconv ];
+
+  cmakeFlags =
+    [ "-DICONV_INCLUDE_DIR=${libiconv}/include" ] ++
+    stdenv.lib.optional (qt4 != null) "-Dbuild_wizard=YES";
+
+  NIX_CFLAGS_COMPILE =
+    stdenv.lib.optional stdenv.isDarwin "-mmacosx-version-min=10.9";
+
+  enableParallelBuilding = true;
+  doCheck = false; # fails
+
+  meta = {
+    license = stdenv.lib.licenses.gpl2Plus;
+    homepage = http://doxygen.nl/;
+    description = "Source code documentation generator tool";
+
+    longDescription = ''
+      Doxygen is a documentation system for C++, C, Java, Objective-C,
+      Python, IDL (CORBA and Microsoft flavors), Fortran, VHDL, PHP,
+      C\#, and to some extent D.  It can generate an on-line
+      documentation browser (in HTML) and/or an off-line reference
+      manual (in LaTeX) from a set of documented source files.
+    '';
+
+    platforms = if qt4 != null then stdenv.lib.platforms.linux else stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/documentation/gnome-doc-utils/default.nix b/nixpkgs/pkgs/development/tools/documentation/gnome-doc-utils/default.nix
new file mode 100644
index 000000000000..2f29fb2fbad2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/gnome-doc-utils/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, pkgconfig, libxml2Python, libxslt, intltool, gnome3
+, python2Packages }:
+
+python2Packages.buildPythonApplication rec {
+  pname = "gnome-doc-utils";
+  version = "0.20.10";
+
+  format = "other";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "19n4x25ndzngaciiyd8dd6s2mf9gv6nv3wv27ggns2smm7zkj1nb";
+  };
+
+  nativeBuildInputs = [ intltool pkgconfig libxslt.dev ];
+  buildInputs = [ libxslt ];
+
+  configureFlags = [ "--disable-scrollkeeper" ];
+
+  preBuild = ''
+    substituteInPlace xml2po/xml2po/Makefile --replace '-e "s+^#!.*python.*+#!$(PYTHON)+"' '-e "s\"^#!.*python.*\"#!$(PYTHON)\""'
+  '';
+
+  propagatedBuildInputs = [ libxml2Python ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "Collection of documentation utilities for the GNOME project";
+    homepage = "https://gitlab.gnome.org/GNOME/gnome-doc-utils";
+    license = with licenses; [ gpl2Plus lgpl2Plus ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/documentation/gtk-doc/default.nix b/nixpkgs/pkgs/development/tools/documentation/gtk-doc/default.nix
new file mode 100644
index 000000000000..f6083a78bf89
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/gtk-doc/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchurl, autoreconfHook, pkgconfig, perl, python3, libxml2Python, libxslt, which
+, docbook_xml_dtd_43, docbook_xsl, gnome-doc-utils, gettext, itstool, gnome3
+, withDblatex ? false, dblatex
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gtk-doc";
+  version = "1.29";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "1cc6yl8l275qn3zpjl6f0s4fwmkczngjr9hhsdv74mln4h08wmql";
+  };
+
+  patches = [
+    passthru.respect_xml_catalog_files_var_patch
+  ];
+
+  outputDevdoc = "out";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs =
+    [ pkgconfig perl python3 libxml2Python libxslt docbook_xml_dtd_43 docbook_xsl
+      gnome-doc-utils gettext which itstool
+    ] ++ stdenv.lib.optional withDblatex dblatex;
+
+  configureFlags = [ "--disable-scrollkeeper" ];
+
+  # Make pygments available for binaries, python.withPackages creates a wrapper
+  # but scripts are not allowed in shebangs so we link it into sys.path.
+  postInstall = ''
+    ln -s ${python3.pkgs.pygments}/${python3.sitePackages}/* $out/share/gtk-doc/python/
+  '';
+
+  doCheck = false; # requires a lot of stuff
+  doInstallCheck = false; # fails
+
+  passthru = {
+    # Consumers are expected to copy the m4 files to their source tree, let them reuse the patch
+    respect_xml_catalog_files_var_patch = ./respect-xml-catalog-files-var.patch;
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      versionPolicy = "none";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "Tools to extract documentation embedded in GTK+ and GNOME source code";
+    homepage = "https://www.gtk.org/gtk-doc";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/documentation/gtk-doc/respect-xml-catalog-files-var.patch b/nixpkgs/pkgs/development/tools/documentation/gtk-doc/respect-xml-catalog-files-var.patch
new file mode 100644
index 000000000000..95f6879a0069
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/gtk-doc/respect-xml-catalog-files-var.patch
@@ -0,0 +1,13 @@
+--- a/m4/gtkdoc_jh_check_xml_catalog.m4
++++ b/m4/gtkdoc_jh_check_xml_catalog.m4
+@@ -5,8 +5,8 @@
+ [
+ 	AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
+ 	AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
+-	if $jh_found_xmlcatalog && \
+-		AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
++	# empty argument forces libxml to use XML_CATALOG_FILES variable
++	if AC_RUN_LOG([$XMLCATALOG --noout "" "$1" >&2]); then
+ 		AC_MSG_RESULT([found])
+ 		ifelse([$3],,,[$3])
+ 	else
diff --git a/nixpkgs/pkgs/development/tools/documentation/mdsh/default.nix b/nixpkgs/pkgs/development/tools/documentation/mdsh/default.nix
new file mode 100644
index 000000000000..645cd62c3c43
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/mdsh/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  name = "mdsh-${version}";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "zimbatm";
+    repo = "mdsh";
+    rev = "v${version}";
+    sha256 = "17pd090wpnx7i8q9pp9rhps35ahm1xn4h6pm1cfsafm072qd7rff";
+  };
+
+  cargoSha256 = "0a2d2qnb0wkxcs2l839p7jsr99ng2frahsfi2viy9fjynsjpvzlm";
+
+  meta = with stdenv.lib; {
+    description = "Markdown shell pre-processor";
+    homepage = https://github.com/zimbatm/mdsh;
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ zimbatm ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/documentation/mkdocs/default.nix b/nixpkgs/pkgs/development/tools/documentation/mkdocs/default.nix
new file mode 100644
index 000000000000..5f3dff95e358
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/mkdocs/default.nix
@@ -0,0 +1,43 @@
+{ lib, python, fetchFromGitHub }:
+
+with python.pkgs;
+
+buildPythonApplication rec {
+  pname = "mkdocs";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "mkdocs";
+    repo = "mkdocs";
+    rev = version;
+    sha256 = "1x35vgiskgz4wwrvi4m1mri5wlphf15p90fr3rxsy5bf19v3s9hs";
+  };
+
+  checkInputs = [
+    nose nose-exclude mock
+  ];
+
+  NOSE_EXCLUDE_TESTS = lib.concatStringsSep ";" [
+    "mkdocs.tests.gh_deploy_tests.TestGitHubDeploy"
+    "mkdocs.tests.config.config_tests.ConfigTests"
+    "mkdocs.tests.config.config_options_tests.DirTest"
+  ];
+
+  checkPhase = "nosetests mkdocs";
+
+  propagatedBuildInputs = [
+    tornado
+    livereload
+    click
+    pyyaml
+    markdown
+    jinja2
+    backports_tempfile
+  ];
+
+  meta = {
+    homepage = http://mkdocs.org/;
+    description = "Project documentation with Markdown";
+    license = lib.licenses.bsd2;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/drip/default.nix b/nixpkgs/pkgs/development/tools/drip/default.nix
new file mode 100644
index 000000000000..17aa94ebf366
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/drip/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, jdk, which, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+  pname = "drip";
+  version = "0.2.4";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    owner = "ninjudd";
+    rev = version;
+    sha256 = "1zl62wdwfak6z725asq5lcqb506la1aavj7ag78lvp155wyh8aq1";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ jdk ];
+
+  postPatch = ''
+    patchShebangs .
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir $out
+    cp ./* $out -r
+    wrapProgram $out/bin/drip \
+      --prefix PATH : "${which}/bin"
+    $out/bin/drip version
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A launcher for the Java Virtual Machine intended to be a drop-in replacement for the java command, only faster";
+    license = licenses.epl10;
+    homepage = https://github.com/ninjudd/drip;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.rybern ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dtools/default.nix b/nixpkgs/pkgs/development/tools/dtools/default.nix
new file mode 100644
index 000000000000..c223a8dc54a1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dtools/default.nix
@@ -0,0 +1,61 @@
+{stdenv, lib, fetchFromGitHub, dmd, curl}:
+
+stdenv.mkDerivation rec {
+  name = "dtools-${version}";
+  version = "2.085.1";
+
+  srcs = [
+    (fetchFromGitHub {
+      owner = "dlang";
+      repo = "dmd";
+      rev = "v${version}";
+      sha256 = "0ccidfcawrcwdpfjwjiln5xwr4ffp8i2hwx52p8zn3xmc5yxm660";
+      name = "dmd";
+    })
+    (fetchFromGitHub {
+      owner = "dlang";
+      repo = "tools";
+      rev = "v${version}";
+      sha256 = "1x85w4k2zqgv2bjbvhschxdc6kq8ygp89h499cy8rfqm6q23g0ws";
+      name = "dtools";
+    })
+  ];
+
+  sourceRoot = ".";
+
+  postUnpack = ''
+      mv dmd dtools
+      cd dtools
+
+      substituteInPlace posix.mak --replace "\$(DMD) \$(DFLAGS) -unittest -main -run rdmd.d" ""
+  '';
+
+  nativeBuildInputs = [ dmd ];
+  buildInputs = [ curl ];
+
+  makeCmd = ''
+    make -f posix.mak DMD_DIR=dmd DMD=${dmd.out}/bin/dmd CC=${stdenv.cc}/bin/cc
+  '';
+
+  buildPhase = ''
+    $makeCmd
+  '';
+
+  doCheck = true;
+
+  checkPhase = ''
+      $makeCmd test_rdmd
+    '';
+
+  installPhase = ''
+      $makeCmd INSTALL_DIR=$out install
+	'';
+
+  meta = with stdenv.lib; {
+    description = "Ancillary tools for the D programming language compiler";
+    homepage = https://github.com/dlang/tools;
+    license = lib.licenses.boost;
+    maintainers = with maintainers; [ ThomasMader ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/easyjson/default.nix b/nixpkgs/pkgs/development/tools/easyjson/default.nix
new file mode 100644
index 000000000000..14d07a0108fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/easyjson/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "easyjson-unstable-${version}";
+  version = "2019-02-21";
+  goPackagePath = "github.com/mailru/easyjson";
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "mailru";
+    repo = "easyjson";
+    rev = "6243d8e04c3f819e79757e8bc3faa15c3cb27003";
+    sha256 = "160sj5pq4bv9jshniimkd5f9zcg6xrbgb027lhr9l895nsv4dlib";
+  };
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/mailru/easyjson";
+    description = "Fast JSON serializer for golang";
+    license = licenses.mit;
+    maintainers = with maintainers; [ chiiruno ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/easyjson/deps.nix b/nixpkgs/pkgs/development/tools/easyjson/deps.nix
new file mode 100644
index 000000000000..0429d8876b29
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/easyjson/deps.nix
@@ -0,0 +1,3 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+]
diff --git a/nixpkgs/pkgs/development/tools/ejson/Gemfile b/nixpkgs/pkgs/development/tools/ejson/Gemfile
new file mode 100644
index 000000000000..f860fe5075d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ejson/Gemfile
@@ -0,0 +1,4 @@
+source 'https://rubygems.org'
+
+gem 'fpm'
+gem 'ronn'
diff --git a/nixpkgs/pkgs/development/tools/ejson/Gemfile.lock b/nixpkgs/pkgs/development/tools/ejson/Gemfile.lock
new file mode 100644
index 000000000000..52c82545bf36
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ejson/Gemfile.lock
@@ -0,0 +1,54 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    arr-pm (0.0.10)
+      cabin (> 0)
+    backports (3.14.0)
+    cabin (0.9.0)
+    childprocess (0.9.0)
+      ffi (~> 1.0, >= 1.0.11)
+    clamp (1.0.1)
+    dotenv (2.7.2)
+    ffi (1.10.0)
+    fpm (1.11.0)
+      arr-pm (~> 0.0.10)
+      backports (>= 2.6.2)
+      cabin (>= 0.6.0)
+      childprocess (= 0.9.0)
+      clamp (~> 1.0.0)
+      ffi
+      json (>= 1.7.7, < 2.0)
+      pleaserun (~> 0.0.29)
+      ruby-xz (~> 0.2.3)
+      stud
+    hpricot (0.8.6)
+    insist (1.0.0)
+    io-like (0.3.0)
+    json (1.8.6)
+    mustache (0.99.8)
+    pleaserun (0.0.30)
+      cabin (> 0)
+      clamp
+      dotenv
+      insist
+      mustache (= 0.99.8)
+      stud
+    rdiscount (2.2.0.1)
+    ronn (0.7.3)
+      hpricot (>= 0.8.2)
+      mustache (>= 0.7.0)
+      rdiscount (>= 1.5.8)
+    ruby-xz (0.2.3)
+      ffi (~> 1.9)
+      io-like (~> 0.3)
+    stud (0.0.23)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  fpm
+  ronn
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/development/tools/ejson/default.nix b/nixpkgs/pkgs/development/tools/ejson/default.nix
new file mode 100644
index 000000000000..19ee4c6391bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ejson/default.nix
@@ -0,0 +1,46 @@
+{ lib, bundlerEnv, ruby, buildGoPackage, fetchFromGitHub }:
+let
+  # needed for manpage generation
+  gems = bundlerEnv {
+    name = "ejson-gems";
+    gemdir = ./.;
+    inherit ruby;
+  };
+in buildGoPackage rec {
+  name = "ejson-${version}";
+  version = "1.2.1";
+  rev = "v${version}";
+
+  nativeBuildInputs = [ gems ];
+
+  goPackagePath = "github.com/Shopify/ejson";
+  subPackages = [ "cmd/ejson" ];
+
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "Shopify";
+    repo = "ejson";
+    inherit rev;
+    sha256 = "09356kp059hbzmqpzlz4b3agg93yqqygh5l5ddbxcsaqx4qiwdr7";
+  };
+
+  # set HOME, otherwise bundler will insert stuff in the manpages
+  postBuild = ''
+    cd go/src/$goPackagePath
+    HOME=$PWD make man
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share
+    cp -r build/man $out/share
+  '';
+
+  meta = with lib; {
+    description = "A small library to manage encrypted secrets using asymmetric encryption.";
+    license = licenses.mit;
+    homepage = https://github.com/Shopify/ejson;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.manveru ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ejson/deps.nix b/nixpkgs/pkgs/development/tools/ejson/deps.nix
new file mode 100644
index 000000000000..b0c7defc5d78
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ejson/deps.nix
@@ -0,0 +1,48 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/codegangsta/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/codegangsta/cli";
+      rev =  "9908e96513e5a94de37004098a3974a567f18111";
+      sha256 = "0g6sihdb53nlf770dp3jc0qqxnlir5n2yjbp5p5vf7kcj3p54p34";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dustin/gojson";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dustin/gojson";
+      rev =  "057ac0edc14e44d03df3bb03449e666ff50884c1";
+      sha256 = "1kzzbi5yshcg1v99gab5ymd3psild3p0rbq9jf7mssjvh11yza6f";
+    };
+  }
+  {
+    goPackagePath  = "github.com/smartystreets/goconvey";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smartystreets/goconvey";
+      rev =  "90f2eae17a8bdcbe3f6f654fc76af7f39e97d7b9";
+      sha256 = "0s984ksmc8npf642nwwd1a81c2sfi613v7yia9jff710i5472fah";
+    };
+  }
+  {
+    goPackagePath  = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev =  "cfb38830724cc34fedffe9a2a29fb54fa9169cd1";
+      sha256 = "0y6f4sbzkiiwrxbl15biivj8c7qwxnvm3zl2dd3mw4wzg4x10ygj";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev =  "ca7e7f10cb9fd9c1a6ff7f60436c086d73714180";
+      sha256 = "02wmfdq40fjszrd9l2w4c1g34zxnxyydwr4sqvp2blmw2s6ww4bx";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/ejson/gemset.nix b/nixpkgs/pkgs/development/tools/ejson/gemset.nix
new file mode 100644
index 000000000000..70c61be984c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ejson/gemset.nix
@@ -0,0 +1,188 @@
+{
+  arr-pm = {
+    dependencies = ["cabin"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07yx1g1nh4zdy38i2id1xyp42fvj4vl6i196jn7szvjfm0jx98hg";
+      type = "gem";
+    };
+    version = "0.0.10";
+  };
+  backports = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17j5pf0b69bkn043wi4xd530ky53jbbnljr4bsjzlm4k8bzlknfn";
+      type = "gem";
+    };
+    version = "3.14.0";
+  };
+  cabin = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b3b8j3iqnagjfn1261b9ncaac9g44zrx1kcg81yg4z9i513kici";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  childprocess = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a61922kmvcxyj5l70fycapr87gz1dzzlkfpq85rfqk5vdh3d28p";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  clamp = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jb6l4scp69xifhicb5sffdixqkw8wgkk9k2q57kh2y36x1px9az";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  dotenv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13cis6bf06hmz744xrsl163p6gb78xcm8g8q4pcabsy5ywyv6kag";
+      type = "gem";
+    };
+    version = "2.7.2";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  fpm = {
+    dependencies = ["arr-pm" "backports" "cabin" "childprocess" "clamp" "ffi" "json" "pleaserun" "ruby-xz" "stud"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0khzsiqzswxpql6w2ws9dawb27zgv4nmgrjszydmm0xpv6h21jrm";
+      type = "gem";
+    };
+    version = "1.11.0";
+  };
+  hpricot = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jn8x9ch79gqmnzgyz78kppavjh5lqx0y0r6frykga2b86rz9s6z";
+      type = "gem";
+    };
+    version = "0.8.6";
+  };
+  insist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bw3bdwns14mapbgb8cbjmr0amvwz8y72gyclq04xp43wpp5jrvg";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  io-like = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04nn0s2wmgxij3k760h3r8m1dgih5dmd9h4v1nn085yi824i5z6k";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5";
+      type = "gem";
+    };
+    version = "1.8.6";
+  };
+  mustache = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g5hplm0k06vwxwqzwn1mq5bd02yp0h3rym4zwzw26aqi7drcsl2";
+      type = "gem";
+    };
+    version = "0.99.8";
+  };
+  pleaserun = {
+    dependencies = ["cabin" "clamp" "dotenv" "insist" "mustache" "stud"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hgnrl67zkqaxmfkwbyscawj4wqjm7h8khpbj58s6iw54wp3408p";
+      type = "gem";
+    };
+    version = "0.0.30";
+  };
+  rdiscount = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1arvk3k06prxasq1djbj065ixar4zl171340g7wr1ww4gj9makx3";
+      type = "gem";
+    };
+    version = "2.2.0.1";
+  };
+  ronn = {
+    dependencies = ["hpricot" "mustache" "rdiscount"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07plsxxfx5bxdk72ii9za6km0ziqlq8jh3bicr4774dalga6zpw2";
+      type = "gem";
+    };
+    version = "0.7.3";
+  };
+  ruby-xz = {
+    dependencies = ["ffi" "io-like"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11bgpvvk0098ghvlxr4i713jmi2izychalgikwvdwmpb452r3ndw";
+      type = "gem";
+    };
+    version = "0.2.3";
+  };
+  stud = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qpb57cbpm9rwgsygqxifca0zma87drnlacv49cqs2n5iyi6z8kb";
+      type = "gem";
+    };
+    version = "0.0.23";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/electron/3.x.nix b/nixpkgs/pkgs/development/tools/electron/3.x.nix
new file mode 100644
index 000000000000..597e66f9b293
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/3.x.nix
@@ -0,0 +1,77 @@
+{ stdenv, libXScrnSaver, makeWrapper, fetchurl, unzip, atomEnv, gtk2, at-spi2-atk }:
+
+let
+  version = "3.1.8";
+  name = "electron-${version}";
+
+  throwSystem = throw "Unsupported system: ${stdenv.hostPlatform.system}";
+
+  meta = with stdenv.lib; {
+    description = "Cross platform desktop application shell";
+    homepage = https://github.com/electron/electron;
+    license = licenses.mit;
+    maintainers = with maintainers; [ travisbhartwell manveru ];
+    platforms = [ "x86_64-darwin" "x86_64-linux" "i686-linux" "armv7l-linux" "aarch64-linux" ];
+  };
+
+  linux = {
+    inherit name version meta;
+    src = {
+      i686-linux = fetchurl {
+        url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-linux-ia32.zip";
+        sha256 = "1vq4vanlwixgk1q4v5d24f1ywgy2af1r14f9byzfy89vwds77yk9";
+      };
+      x86_64-linux = fetchurl {
+        url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-linux-x64.zip";
+        sha256 = "13zds8bzn4z11544llkh99fw75gddxs5b9h1m5xgjzw37vf6rpws";
+      };
+      armv7l-linux = fetchurl {
+        url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-linux-armv7l.zip";
+        sha256 = "0rfw1ydlmixyhifpmm2qyxapx3iqav4nlnzp2km9z7a0hpc4lii6";
+      };
+      aarch64-linux = fetchurl {
+        url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-linux-arm64.zip";
+        sha256 = "0qrnvzjz78fblfg4r6xpzc40p10y6865gqpwx2h5vsdfp6sgq898";
+      };
+    }.${stdenv.hostPlatform.system} or throwSystem;
+
+    buildInputs = [ unzip makeWrapper ];
+
+    buildCommand = ''
+      mkdir -p $out/lib/electron $out/bin
+      unzip -d $out/lib/electron $src
+      ln -s $out/lib/electron/electron $out/bin
+
+      fixupPhase
+
+      patchelf \
+        --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        --set-rpath "${atomEnv.libPath}:${gtk2}/lib:${at-spi2-atk}/lib:$out/lib/electron" \
+        $out/lib/electron/electron
+
+      wrapProgram $out/lib/electron/electron \
+        --prefix LD_PRELOAD : ${stdenv.lib.makeLibraryPath [ libXScrnSaver ]}/libXss.so.1
+    '';
+  };
+
+  darwin = {
+    inherit name version meta;
+
+    src = fetchurl {
+      url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-darwin-x64.zip";
+      sha256 = "0ms75306dq2ym838zk9d9nypnd8yjipl0zqyq9bvd4r32p241hw9";
+    };
+
+    buildInputs = [ unzip ];
+
+    buildCommand = ''
+      mkdir -p $out/Applications
+      unzip $src
+      mv Electron.app $out/Applications
+      mkdir -p $out/bin
+      ln -s $out/Applications/Electron.app/Contents/MacOs/Electron $out/bin/electron
+    '';
+  };
+in
+
+  stdenv.mkDerivation (if stdenv.isDarwin then darwin else linux)
diff --git a/nixpkgs/pkgs/development/tools/electron/5.x.nix b/nixpkgs/pkgs/development/tools/electron/5.x.nix
new file mode 100644
index 000000000000..ba97587c5af7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/5.x.nix
@@ -0,0 +1,77 @@
+{ stdenv, libXScrnSaver, makeWrapper, fetchurl, unzip, atomEnv, libuuid, at-spi2-atk, at-spi2-core }:
+
+let
+  version = "5.0.0";
+  name = "electron-${version}";
+
+  throwSystem = throw "Unsupported system: ${stdenv.hostPlatform.system}";
+
+  meta = with stdenv.lib; {
+    description = "Cross platform desktop application shell";
+    homepage = https://github.com/electron/electron;
+    license = licenses.mit;
+    maintainers = with maintainers; [ travisbhartwell manveru ];
+    platforms = [ "x86_64-darwin" "x86_64-linux" "i686-linux" "armv7l-linux" "aarch64-linux" ];
+  };
+
+  linux = {
+    inherit name version meta;
+    src = {
+      i686-linux = fetchurl {
+        url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-linux-ia32.zip";
+        sha256 = "01320qv0x18rmjn6ibbs49pd04d58rz5dac509lxxay8nfb14gdp";
+      };
+      x86_64-linux = fetchurl {
+        url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-linux-x64.zip";
+        sha256 = "0mkc8r5xggkzdypyq4hxigmjl6d1jn0139l8nwj1vr224ggnskhn";
+      };
+      armv7l-linux = fetchurl {
+        url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-linux-armv7l.zip";
+        sha256 = "1w767yxm3b6sj52z0wnzr4vfn0m8n2jdjhj3ksmq6qrv401vvib3";
+      };
+      aarch64-linux = fetchurl {
+        url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-linux-arm64.zip";
+        sha256 = "1nvpfkrizkmr6xxb2ls19p9mhgpms65ws09bx3l8sqq6275916jk";
+      };
+    }.${stdenv.hostPlatform.system} or throwSystem;
+
+    buildInputs = [ unzip makeWrapper ];
+
+    buildCommand = ''
+      mkdir -p $out/lib/electron $out/bin
+      unzip -d $out/lib/electron $src
+      ln -s $out/lib/electron/electron $out/bin
+
+      fixupPhase
+
+      patchelf \
+        --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        --set-rpath "${atomEnv.libPath}:${stdenv.lib.makeLibraryPath [ libuuid at-spi2-atk at-spi2-core ]}:$out/lib/electron" \
+        $out/lib/electron/electron
+
+      wrapProgram $out/lib/electron/electron \
+        --prefix LD_PRELOAD : ${stdenv.lib.makeLibraryPath [ libXScrnSaver ]}/libXss.so.1
+    '';
+  };
+
+  darwin = {
+    inherit name version meta;
+
+    src = fetchurl {
+      url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-darwin-x64.zip";
+      sha256 = "07s2cq4ffpx86pjxrh1hcvk3r85saxqi3kkbbfkg9r1bbq8zbapm";
+    };
+
+    buildInputs = [ unzip ];
+
+    buildCommand = ''
+      mkdir -p $out/Applications
+      unzip $src
+      mv Electron.app $out/Applications
+      mkdir -p $out/bin
+      ln -s $out/Applications/Electron.app/Contents/MacOs/Electron $out/bin/electron
+    '';
+  };
+in
+
+  stdenv.mkDerivation (if stdenv.isDarwin then darwin else linux)
diff --git a/nixpkgs/pkgs/development/tools/electron/default.nix b/nixpkgs/pkgs/development/tools/electron/default.nix
new file mode 100644
index 000000000000..b6f7d0b072b2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/default.nix
@@ -0,0 +1,77 @@
+{ stdenv, libXScrnSaver, makeWrapper, fetchurl, unzip, atomEnv, libuuid, at-spi2-atk }:
+
+let
+  version = "4.1.5";
+  name = "electron-${version}";
+
+  throwSystem = throw "Unsupported system: ${stdenv.hostPlatform.system}";
+
+  meta = with stdenv.lib; {
+    description = "Cross platform desktop application shell";
+    homepage = https://github.com/electron/electron;
+    license = licenses.mit;
+    maintainers = with maintainers; [ travisbhartwell manveru ];
+    platforms = [ "x86_64-darwin" "x86_64-linux" "i686-linux" "armv7l-linux" "aarch64-linux" ];
+  };
+
+  linux = {
+    inherit name version meta;
+    src = {
+      i686-linux = fetchurl {
+        url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-linux-ia32.zip";
+        sha256 = "0rqaydlg7wkccks7crwpylad0bsz8knm82mpb7hnj68p9njxpsbz";
+      };
+      x86_64-linux = fetchurl {
+        url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-linux-x64.zip";
+        sha256 = "0xwvn41pvpsrx54waix8kmg3w1f1f9nmfn08hf9bkgnlgh251shy";
+      };
+      armv7l-linux = fetchurl {
+        url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-linux-armv7l.zip";
+        sha256 = "172yq2m4i0pf72xr6w3xgkxfakkx2wrc54aah5j3nr6809bcnzji";
+      };
+      aarch64-linux = fetchurl {
+        url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-linux-arm64.zip";
+        sha256 = "0gcgvgplg9c2sm53sa4nll4x486c4m190ma9a98xfx9mp9vy55vq";
+      };
+    }.${stdenv.hostPlatform.system} or throwSystem;
+
+    buildInputs = [ unzip makeWrapper ];
+
+    buildCommand = ''
+      mkdir -p $out/lib/electron $out/bin
+      unzip -d $out/lib/electron $src
+      ln -s $out/lib/electron/electron $out/bin
+
+      fixupPhase
+
+      patchelf \
+        --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        --set-rpath "${atomEnv.libPath}:${stdenv.lib.makeLibraryPath [ libuuid at-spi2-atk ]}:$out/lib/electron" \
+        $out/lib/electron/electron
+
+      wrapProgram $out/lib/electron/electron \
+        --prefix LD_PRELOAD : ${stdenv.lib.makeLibraryPath [ libXScrnSaver ]}/libXss.so.1
+    '';
+  };
+
+  darwin = {
+    inherit name version meta;
+
+    src = fetchurl {
+      url = "https://github.com/electron/electron/releases/download/v${version}/electron-v${version}-darwin-x64.zip";
+      sha256 = "1z43ga620rw84x1yxvnxf11pd782s5vgj5dgnn4k0nfgxlihy058";
+    };
+
+    buildInputs = [ unzip ];
+
+    buildCommand = ''
+      mkdir -p $out/Applications
+      unzip $src
+      mv Electron.app $out/Applications
+      mkdir -p $out/bin
+      ln -s $out/Applications/Electron.app/Contents/MacOs/Electron $out/bin/electron
+    '';
+  };
+in
+
+  stdenv.mkDerivation (if stdenv.isDarwin then darwin else linux)
diff --git a/nixpkgs/pkgs/development/tools/electron/print-hashes.sh b/nixpkgs/pkgs/development/tools/electron/print-hashes.sh
new file mode 100755
index 000000000000..203e5a4dfec6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/print-hashes.sh
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+
+set -eu -o pipefail
+
+if [[ $# -lt 1 ]]; then
+    echo "$0: version" >&2
+    exit 1
+fi
+
+
+VERSION=$1
+
+declare -A SYSTEMS HASHES
+SYSTEMS=(
+    [i686-linux]=linux-ia32
+    [x86_64-linux]=linux-x64
+    [armv7l-linux]=linux-armv7l
+    [aarch64-linux]=linux-arm64
+    [x86_64-darwin]=darwin-x64
+)
+
+for S in "${!SYSTEMS[@]}"; do
+  HASHES["$S"]=$(nix-prefetch-url "https://github.com/electron/electron/releases/download/v${VERSION}/electron-v${VERSION}-${SYSTEMS[$S]}.zip")
+done
+
+for S in "${!HASHES[@]}"; do
+    echo "$S"
+    echo "sha256 = \"${HASHES[$S]}\";"
+done
diff --git a/nixpkgs/pkgs/development/tools/erlang/cuter/default.nix b/nixpkgs/pkgs/development/tools/erlang/cuter/default.nix
new file mode 100644
index 000000000000..af58762f80eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/erlang/cuter/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, autoreconfHook, which, writeText, makeWrapper, fetchFromGitHub, erlang
+, beamPackages, z3, python }:
+
+stdenv.mkDerivation rec {
+  name = "cuter-${version}";
+  version = "0.1";
+
+  src = fetchFromGitHub {
+    owner = "aggelgian";
+    repo = "cuter";
+    rev = "v${version}";
+    sha256 = "1ax1pj6ji4w2mg3p0nh2lzmg3n9mgfxk4cf07pll51yrcfpfrnfv";
+  };
+
+  setupHook = writeText "setupHook.sh" ''
+    addToSearchPath ERL_LIBS "$1/lib/erlang/lib/"
+  '';
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper which ];
+  buildInputs = [ python python.pkgs.setuptools z3.python erlang ];
+
+  buildFlags = "PWD=$(out)/lib/erlang/lib/cuter-${version} cuter_target";
+  configurePhase = ''
+    autoconf
+    ./configure --prefix $out
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/lib/erlang/lib/cuter-${version}"
+    mkdir -p "$out/bin"
+    cp -r * "$out/lib/erlang/lib/cuter-${version}"
+    cp cuter "$out/bin/cuter"
+    wrapProgram $out/bin/cuter \
+      --prefix PATH : "${python}/bin" \
+      --suffix PYTHONPATH : "${z3}/${python.sitePackages}" \
+      --suffix ERL_LIBS : "$out/lib/erlang/lib"
+  '';
+
+  meta = {
+    description = "A concolic testing tool for the Erlang functional programming language";
+    license = stdenv.lib.licenses.gpl3;
+    homepage = https://github.com/aggelgian/cuter;
+    maintainers = with stdenv.lib.maintainers; [ ericbmerritt ];
+    platforms = with stdenv.lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/erlang/hex2nix/default.nix b/nixpkgs/pkgs/development/tools/erlang/hex2nix/default.nix
new file mode 100644
index 000000000000..5a24c3c95256
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/erlang/hex2nix/default.nix
@@ -0,0 +1,21 @@
+{ fetchFromGitHub, fetchRebar3Deps, rebar3Relx }:
+
+rebar3Relx rec {
+    name = "hex2nix";
+    version = "0.0.6-a31eadd7";
+
+    releaseType = "escript";
+
+    checkouts = fetchRebar3Deps {
+      inherit name version;
+      src = "${src}/rebar.config";
+      sha256 = "1b59vk6ynakdiwqd1s6axaj9bvkaaq7ll28b48nv613z892h7nm5";
+    };
+
+    src = fetchFromGitHub {
+      owner  = "erlang-nix";
+      repo   = "hex2nix";
+      rev    = "a31eadd7af2cbdac1b87991b378e98ea4fb40ae0";
+      sha256 = "1hnkrksyrbpq2gq25rfsrnm86n0g3biab88gswm3zj88ddrz6dyk";
+    };
+}
diff --git a/nixpkgs/pkgs/development/tools/erlang/relx-exe/default.nix b/nixpkgs/pkgs/development/tools/erlang/relx-exe/default.nix
new file mode 100644
index 000000000000..2c32cc5c6706
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/erlang/relx-exe/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchHex, fetchRebar3Deps, rebar3Relx }:
+
+rebar3Relx rec {
+  name = "relx-exe";
+  version = "3.23.1";
+  releaseType = "escript";
+
+  src = fetchHex {
+    pkg = "relx";
+    sha256 = "13j7wds2d7b8v3r9pwy3zhwhzywgwhn6l9gm3slqzyrs1jld0a9d";
+    version = "3.23.1";
+  };
+
+  checkouts = fetchRebar3Deps {
+    inherit name version;
+    src = "${src}/rebar.lock";
+    sha256 = "046b1lb9rymndlvzmin3ppa3vkssjqspyfp98869k11s5avg76hd";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/errcheck/default.nix b/nixpkgs/pkgs/development/tools/errcheck/default.nix
new file mode 100644
index 000000000000..1ce49a4cbb9d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/errcheck/default.nix
@@ -0,0 +1,29 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "errcheck-${version}";
+  version = "1.1.0";
+
+  goPackagePath = "github.com/kisielk/errcheck";
+  excludedPackages = "\\(testdata\\)";
+
+  src = fetchFromGitHub {
+    owner = "kisielk";
+    repo = "errcheck";
+    rev = "v${version}";
+    sha256 = "19vd4rxmqbk5lpiav3pf7df3yjlz0l0dwx9mn0gjq5f998iyhy6y";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "errcheck is a program for checking for unchecked errors in go programs.";
+    homepage = https://github.com/kisielk/errcheck;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/errcheck/deps.nix b/nixpkgs/pkgs/development/tools/errcheck/deps.nix
new file mode 100644
index 000000000000..8470c9e12aa6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/errcheck/deps.nix
@@ -0,0 +1,20 @@
+[
+  {
+    goPackagePath = "github.com/kisielk/gotool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kisielk/gotool";
+      rev = "80517062f582ea3340cd4baf70e86d539ae7d84d";
+      sha256 = "14af2pa0ssyp8bp2mvdw184s5wcysk6akil3wzxmr05wwy951iwn";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "3a10b9bf0a52df7e992a8c3eb712a86d3c896c75";
+      sha256 = "19f3dijcc54jnd7458jab2dgpd0gzccmv2qympd9wi8cc8jpnhws";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/fac/default.nix b/nixpkgs/pkgs/development/tools/fac/default.nix
new file mode 100644
index 000000000000..18367d14f6e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fac/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, makeWrapper, git }:
+
+buildGoPackage rec {
+  name = "fac-${version}";
+  version = "2.0.0";
+
+  goPackagePath = "github.com/mkchoi212/fac";
+
+  src = fetchFromGitHub {
+    owner = "mkchoi212";
+    repo = "fac";
+    rev = "v${version}";
+    sha256 = "054bbiw0slz9szy3ap2sh5dy97w3g7ms27rd3ww3i1zdhvnggwpc";
+  };
+
+  goDeps = ./deps.nix;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $bin/bin/fac \
+      --prefix PATH : ${git}/bin
+
+    # Install man page, not installed by default
+    install -D go/src/${goPackagePath}/assets/doc/fac.1 $out/share/man/man1/fac.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "CUI for fixing git conflicts";
+    inherit (src.meta) homepage;
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/fac/deps.nix b/nixpkgs/pkgs/development/tools/fac/deps.nix
new file mode 100644
index 000000000000..65335497e5ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fac/deps.nix
@@ -0,0 +1,66 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/alecthomas/chroma";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/chroma";
+      rev =  "0c0b382eca61a71c1eb4cb4dea2bc78aa4939d96";
+      sha256 = "0chpzs542s366vv01bfhrajdrbhmrvc3gi8jhpw3xgz6wfkivcp4";
+    };
+  }
+  {
+    goPackagePath  = "github.com/danwakefield/fnmatch";
+    fetch = {
+      type = "git";
+      url = "https://github.com/danwakefield/fnmatch";
+      rev =  "cbb64ac3d964b81592e64f957ad53df015803288";
+      sha256 = "0cbf511ppsa6hf59mdl7nbyn2b2n71y0bpkzbmfkdqjhanqh1lqz";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dlclark/regexp2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dlclark/regexp2";
+      rev =  "7632a260cbaf5e7594fc1544a503456ecd0827f1";
+      sha256 = "0vhp5r0ywv9p1c74fm8xzclnwx2mg9f0764b3id7a9nwh0plisx2";
+    };
+  }
+  {
+    goPackagePath  = "github.com/jroimartin/gocui";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jroimartin/gocui";
+      rev =  "c055c87ae801372cd74a0839b972db4f7697ae5f";
+      sha256 = "1b1cbjg925l1c5v3ls8amni9716190yzf847cqs9wjnj82z8qa47";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-runewidth";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-runewidth";
+      rev =  "ce7b0b5c7b45a81508558cd1dba6bb1e4ddb51bb";
+      sha256 = "0lc39b6xrxv7h3v3y1kgz49cgi5qxwlygs715aam6ba35m48yi7g";
+    };
+  }
+  {
+    goPackagePath  = "github.com/nsf/termbox-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nsf/termbox-go";
+      rev =  "5c94acc5e6eb520f1bcd183974e01171cc4c23b3";
+      sha256 = "1fi8imdgwvlsgifw2qfl3ww0lsrgkfsimkzz7bnrq41nar78s0fw";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-yaml/yaml";
+      rev =  "5420a8b6744d3b0345ab293f6fcba19c978f1183";
+      sha256 = "0dwjrs2lp2gdlscs7bsrmyc5yf6mm4fvgw71bzr9mv2qrd2q73s1";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/fdroidserver/default.nix b/nixpkgs/pkgs/development/tools/fdroidserver/default.nix
new file mode 100644
index 000000000000..24eba03946ac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fdroidserver/default.nix
@@ -0,0 +1,58 @@
+{ docker
+, fetchFromGitLab
+, python
+, lib }:
+
+python.pkgs.buildPythonApplication rec {
+  version = "1.1.1";
+  pname = "fdroidserver";
+
+  src = fetchFromGitLab {
+    owner = "fdroid";
+    repo = "fdroidserver";
+    rev = version;
+    sha256 = "0m618rvjh8h8hnbafrxsdkw8m5r2wnkz7whqnh60jh91h3yr0kzs";
+  };
+
+  patchPhase = ''
+    substituteInPlace fdroidserver/common.py --replace "FDROID_PATH = os.path.realpath(os.path.join(os.path.dirname(__file__), '..'))" "FDROID_PATH = '$out/bin'"
+    substituteInPlace setup.py --replace "pyasn1-modules == 0.2.1" "pyasn1-modules"
+  '';
+
+  preConfigure = ''
+    ${python.interpreter} setup.py compile_catalog
+  '';
+  postInstall = ''
+    install -m 0755 gradlew-fdroid $out/bin
+  '';
+
+  buildInputs = [ python.pkgs.Babel ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    androguard
+    clint
+    defusedxml
+    docker
+    docker-py
+    GitPython
+    libcloud
+    mwclient
+    paramiko
+    pillow
+    pyasn1
+    pyasn1-modules
+    python-vagrant
+    pyyaml
+    qrcode
+    requests
+    ruamel_yaml
+  ];
+
+  meta = with lib; {
+    homepage = https://f-droid.org;
+    description = "Server and tools for F-Droid, the Free Software repository system for Android";
+    license = licenses.agpl3;
+    maintainers = [ lib.maintainers.pmiddend ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/fedpkg/default.nix b/nixpkgs/pkgs/development/tools/fedpkg/default.nix
new file mode 100644
index 000000000000..5548b20de83c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fedpkg/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, buildPythonApplication, buildPythonPackage, isPy3k, fetchurl, rpkg, offtrac, urlgrabber, pyopenssl, python_fedora }:
+
+let
+  fedora_cert = buildPythonPackage rec {
+    name = "fedora-cert";
+    version = "0.6.0.2";
+    format = "other";
+
+    src = fetchurl {
+      url = "https://releases.pagure.org/fedora-packager/fedora-packager-${version}.tar.bz2";
+      sha256 = "02f22072wx1zg3rhyfw6gbxryzcbh66s92nb98mb9kdhxixv6p0z";
+    };
+    propagatedBuildInputs = [ python_fedora pyopenssl ];
+    doCheck = false;
+  };
+in buildPythonApplication rec {
+  pname = "fedpkg";
+  version = "1.29";
+
+  disabled = isPy3k;
+
+  src = fetchurl {
+    url = "https://releases.pagure.org/fedpkg/${pname}-${version}.tar.bz2";
+    sha256 = "1cpy5p1rp7w52ighz3ynvhyw04z86y8phq3n8563lj6ayr8pw631";
+  };
+  patches = [ ./fix-paths.patch ];
+  propagatedBuildInputs = [ rpkg offtrac urlgrabber fedora_cert ];
+
+  meta = with stdenv.lib; {
+    description = "Subclass of the rpkg project for dealing with rpm packaging";
+    homepage = https://pagure.io/fedpkg;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fedpkg/fix-paths.patch b/nixpkgs/pkgs/development/tools/fedpkg/fix-paths.patch
new file mode 100644
index 000000000000..1831337a5851
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fedpkg/fix-paths.patch
@@ -0,0 +1,16 @@
+--- orig/setup.py
++++ new/setup.py
+@@ -27,10 +27,10 @@
+         'bin/fedpkg',
+         'bin/fedpkg-stage',
+     ],
+-    data_files=[(bash_completion_dir(), ['conf/bash-completion/fedpkg.bash']),
+-                ('/etc/rpkg', ['conf/etc/rpkg/fedpkg.conf',
++    data_files=[('share/bash-completion/completions', ['conf/bash-completion/fedpkg.bash']),
++                ('etc/rpkg', ['conf/etc/rpkg/fedpkg.conf',
+                                'conf/etc/rpkg/fedpkg-stage.conf']),
+-                ('/usr/share/zsh/site-functions', ['conf/zsh-completion/_fedpkg']),
++                ('share/zsh/site-functions', ['conf/zsh-completion/_fedpkg']),
+                 ],
+ 
+     tests_require=['nose', 'mock'],
diff --git a/nixpkgs/pkgs/development/tools/flamegraph/default.nix b/nixpkgs/pkgs/development/tools/flamegraph/default.nix
new file mode 100644
index 000000000000..a351c325ea24
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flamegraph/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, perl }:
+
+stdenv.mkDerivation {
+  name = "FlameGraph-2017-07-01";
+
+  src = fetchFromGitHub {
+    owner = "brendangregg";
+    repo = "FlameGraph";
+    rev = "a93d905911c07c96a73b35ddbcb5ddb2f39da4b6";
+    sha256 = "07z2ffnab41dz833wwgr875vjccqyh0238357g7ml1yg5445x2jy";
+  };
+
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    for x in $src/*.pl $src/*.awk $src/dev/*.pl $src/dev/*.d; do
+      cp $x $out/bin
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    license = licenses.cddl;
+    homepage = http://www.brendangregg.com/flamegraphs.html;
+    description = "Visualization for profiled code";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flatpak-builder/default.nix b/nixpkgs/pkgs/development/tools/flatpak-builder/default.nix
new file mode 100644
index 000000000000..5f8aaf07d730
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flatpak-builder/default.nix
@@ -0,0 +1,107 @@
+{ stdenv
+, fetchurl
+, substituteAll
+
+, autoreconfHook
+, docbook_xml_dtd_412
+, docbook_xml_dtd_42
+, docbook_xml_dtd_43
+, docbook_xsl
+, gettext
+, libxml2
+, libxslt
+, pkgconfig
+, xmlto
+
+, acl
+, bazaar
+, binutils
+, bzip2
+, coreutils
+, cpio
+, curl
+, elfutils
+, flatpak
+, gitMinimal
+, glib
+, gnutar
+, json-glib
+, libcap
+, libdwarf
+, libsoup
+, libyaml
+, ostree
+, patch
+, rpm
+, unzip
+}:
+
+let
+  version = "1.0.6";
+in stdenv.mkDerivation rec {
+  name = "flatpak-builder-${version}";
+
+  outputs = [ "out" "doc" "man" ];
+
+  src = fetchurl {
+    url = "https://github.com/flatpak/flatpak-builder/releases/download/${version}/${name}.tar.xz";
+    sha256 = "1fw9lzf9cy3fnnvn9q3g0schxcj7kaj6kjijhrmcmsfcnzbjlmrv";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    docbook_xml_dtd_412
+    docbook_xml_dtd_42
+    docbook_xml_dtd_43
+    docbook_xsl
+    gettext
+    libxml2
+    libxslt
+    pkgconfig
+    xmlto
+  ];
+
+  buildInputs = [
+    acl
+    bzip2
+    curl
+    elfutils
+    flatpak
+    glib
+    json-glib
+    libcap
+    libdwarf
+    libsoup
+    libxml2
+    libyaml
+    ostree
+  ];
+
+  patches = [
+    # patch taken from gtk_doc
+    ./respect-xml-catalog-files-var.patch
+    (substituteAll {
+      src = ./fix-paths.patch;
+      bzr = "${bazaar}/bin/bzr";
+      cp = "${coreutils}/bin/cp";
+      patch = "${patch}/bin/patch";
+      tar = "${gnutar}/bin/tar";
+      unzip = "${unzip}/bin/unzip";
+      rpm2cpio = "${rpm}/bin/rpm2cpio";
+      cpio = "${cpio}/bin/cpio";
+      git = "${gitMinimal}/bin/git";
+      rofilesfuse = "${ostree}/bin/rofiles-fuse";
+      strip = "${binutils}/bin/strip";
+      eustrip = "${elfutils}/bin/eu-strip";
+      euelfcompress = "${elfutils}/bin/eu-elfcompress";
+    })
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Tool to build flatpaks from source";
+    homepage = https://flatpak.org/;
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flatpak-builder/fix-paths.patch b/nixpkgs/pkgs/development/tools/flatpak-builder/fix-paths.patch
new file mode 100644
index 000000000000..6b82e623a02c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flatpak-builder/fix-paths.patch
@@ -0,0 +1,130 @@
+--- a/src/builder-context.c
++++ b/src/builder-context.c
+@@ -763,7 +763,7 @@
+   g_autoptr(GFile) rofiles_base = NULL;
+   g_autoptr(GFile) rofiles_dir = NULL;
+   g_autofree char *tmpdir_name = NULL;
+-  char *argv[] = { "rofiles-fuse",
++  char *argv[] = { "@rofilesfuse@",
+                    "-o",
+                    "kernel_cache,entry_timeout=60,attr_timeout=60,splice_write,splice_move",
+                    (char *)flatpak_file_get_path_cached (self->app_dir),
+--- a/src/builder-git.c
++++ b/src/builder-git.c
+@@ -44,7 +44,7 @@
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (dir, output, flags, error, "git", ap);
++  res = flatpak_spawn (dir, output, flags, error, "@git@", ap);
+   va_end (ap);
+ 
+   return res;
+@@ -58,7 +58,7 @@
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (NULL, NULL, 0, error, "cp", ap);
++  res = flatpak_spawn (NULL, NULL, 0, error, "@cp@", ap);
+   va_end (ap);
+ 
+   return res;
+--- a/src/builder-source-archive.c
++++ b/src/builder-source-archive.c
+@@ -430,7 +430,7 @@
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (dir, NULL, 0, error, "tar", ap);
++  res = flatpak_spawn (dir, NULL, 0, error, "@tar@", ap);
+   va_end (ap);
+ 
+   return res;
+@@ -445,7 +445,7 @@
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (dir, NULL, 0, error, "unzip", ap);
++  res = flatpak_spawn (dir, NULL, 0, error, "@unzip@", ap);
+   va_end (ap);
+ 
+   return res;
+@@ -457,7 +457,7 @@
+        GError **error)
+ {
+   gboolean res;
+-  const gchar *argv[] = { "sh", "-c", "rpm2cpio \"$1\" | cpio -i -d",
++  const gchar *argv[] = { "sh", "-c", "@rpm2cpio@ \"$1\" | @cpio@ -i -d",
+       "sh", /* shell's $0 */
+       rpm_path, /* shell's $1 */
+       NULL };
+@@ -604,7 +604,7 @@
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (dir, NULL, 0, error, "git", ap);
++  res = flatpak_spawn (dir, NULL, 0, error, "@git@", ap);
+   va_end (ap);
+ 
+   return res;
+--- a/src/builder-source-bzr.c
++++ b/src/builder-source-bzr.c
+@@ -124,7 +124,7 @@
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (dir, output, 0, error, "bzr", ap);
++  res = flatpak_spawn (dir, output, 0, error, "@bzr@", ap);
+   va_end (ap);
+ 
+   return res;
+--- a/src/builder-source-patch.c
++++ b/src/builder-source-patch.c
+@@ -215,15 +215,15 @@
+ 
+   args = g_ptr_array_new ();
+   if (use_git) {
+-    g_ptr_array_add (args, "git");
++    g_ptr_array_add (args, "@git@");
+     g_ptr_array_add (args, "apply");
+     g_ptr_array_add (args, "-v");
+   } else if (use_git_am) {
+-    g_ptr_array_add (args, "git");
++    g_ptr_array_add (args, "@git@");
+     g_ptr_array_add (args, "am");
+     g_ptr_array_add (args, "--keep-cr");
+   } else {
+-    g_ptr_array_add (args, "patch");
++    g_ptr_array_add (args, "@patch@");
+   }
+   for (i = 0; extra_options != NULL && extra_options[i] != NULL; i++)
+     g_ptr_array_add (args, (gchar *) extra_options[i]);
+--- a/src/builder-utils.c
++++ b/src/builder-utils.c
+@@ -149,7 +149,7 @@
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (NULL, NULL, 0, error, "strip", ap);
++  res = flatpak_spawn (NULL, NULL, 0, error, "@strip@", ap);
+   va_end (ap);
+ 
+   return res;
+@@ -163,7 +163,7 @@
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (NULL, NULL, 0, error, "eu-strip", ap);
++  res = flatpak_spawn (NULL, NULL, 0, error, "@eustrip@", ap);
+   va_end (ap);
+ 
+   return res;
+@@ -177,7 +177,7 @@
+   va_list ap;
+ 
+   va_start (ap, error);
+-  res = flatpak_spawn (NULL, NULL, 0, error, "eu-elfcompress", ap);
++  res = flatpak_spawn (NULL, NULL, 0, error, "@euelfcompress@", ap);
+   va_end (ap);
+ 
+   return res;
diff --git a/nixpkgs/pkgs/development/tools/flatpak-builder/respect-xml-catalog-files-var.patch b/nixpkgs/pkgs/development/tools/flatpak-builder/respect-xml-catalog-files-var.patch
new file mode 100644
index 000000000000..0e259aebd8a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flatpak-builder/respect-xml-catalog-files-var.patch
@@ -0,0 +1,13 @@
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -40,8 +40,8 @@
+ [
+   AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
+   AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
+-  if $jh_found_xmlcatalog && \
+-     AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
++  # empty argument forces libxml to use XML_CATALOG_FILES variable
++  if AC_RUN_LOG([$XMLCATALOG --noout "" "$1" >&2]); then
+     AC_MSG_RESULT([found])
+     ifelse([$3],,,[$3
+ ])dnl
diff --git a/nixpkgs/pkgs/development/tools/flock/default.nix b/nixpkgs/pkgs/development/tools/flock/default.nix
new file mode 100644
index 000000000000..ac145fae7efe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flock/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, fetchFromGitHub, autoreconfHook, ronn }:
+
+stdenv.mkDerivation rec {
+  pname = "flock";
+  name = "${pname}-${version}";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "discoteq";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1vdq22zhdfi7wwndsd6s7fwmz02fsn0x04d7asq4hslk7bjxjjzn";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ ronn ];
+
+  meta = with lib; {
+    description = "Cross-platform version of flock(1)";
+    maintainers = [ maintainers.matthewbauer ];
+    platforms = platforms.all;
+    license = licenses.isc;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flootty/default.nix b/nixpkgs/pkgs/development/tools/flootty/default.nix
new file mode 100644
index 000000000000..1baddb52259c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flootty/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "Flootty";
+  version = "3.2.2";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "0gfl143ly81pmmrcml91yr0ypvwrs5q4s1sfdc0l2qkqpy233ih7";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A collaborative terminal. In practice, it's similar to a shared screen or tmux session";
+    homepage = "https://floobits.com/help/flootty";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ sellout enzime ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flyway/default.nix b/nixpkgs/pkgs/development/tools/flyway/default.nix
new file mode 100644
index 000000000000..4ad04ae0e43b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flyway/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, jre_headless, makeWrapper }:
+  let
+    version = "5.2.4";
+  in
+    stdenv.mkDerivation {
+      name = "flyway-${version}";
+      src = fetchurl {
+        url = "https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/${version}/flyway-commandline-${version}.tar.gz";
+        sha256 = "16ia6nlvj4cgmdkn66bjg73h5vah82hpzk9mf0n5kmqnwcaa8hmc";
+      };
+      nativeBuildInputs = [ makeWrapper ];
+      dontBuild = true;
+      dontStrip = true;
+      installPhase = ''
+        mkdir -p $out/bin $out/share/flyway
+        cp -r sql jars drivers conf $out/share/flyway
+        cp -r lib/community $out/share/flyway/lib
+        makeWrapper "${jre_headless}/bin/java" $out/bin/flyway \
+          --add-flags "-Djava.security.egd=file:/dev/../dev/urandom" \
+          --add-flags "-classpath '$out/share/flyway/lib/*:$out/share/flyway/drivers/*'" \
+          --add-flags "org.flywaydb.commandline.Main"
+      '';
+      meta = with stdenv.lib; {
+        description = "Evolve your Database Schema easily and reliably across all your instances";
+        homepage = "https://flywaydb.org/";
+        license = licenses.asl20;
+        platforms = platforms.unix;
+        maintainers = [ maintainers.cmcdragonkai ];
+      };
+    }
diff --git a/nixpkgs/pkgs/development/tools/fmbt/default.nix b/nixpkgs/pkgs/development/tools/fmbt/default.nix
new file mode 100644
index 000000000000..11880213bada
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fmbt/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchFromGitHub, python, autoreconfHook, pkgconfig, makeWrapper
+, flex
+, gettext, libedit, glib, imagemagick, libxml2, boost, gnuplot, graphviz
+, tesseract, gts, libXtst
+}:
+stdenv.mkDerivation rec {
+  version = "0.39";
+  name = "fMBT-${version}";
+
+  src = fetchFromGitHub {
+    owner = "intel";
+    repo = "fMBT";
+    rev = "v${version}";
+    sha256 = "15sxwdcsjybq50vkla4md2ay8m67ndc4vwcsl5vwsjkim5qlxslb";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig flex makeWrapper
+    python.pkgs.wrapPython ];
+
+  buildInputs = [ python gettext libedit glib imagemagick libxml2 boost
+    gnuplot graphviz tesseract gts 
+    ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    pyside pydbus pexpect pysideShiboken
+  ];
+
+  preBuild = ''
+    export PYTHONPATH="$PYTHONPATH:$out/lib/python${python.pythonVersion}/site-packages"
+    export PATH="$PATH:$out/bin"
+    export LD_LIBRARY_PATH="${stdenv.lib.makeLibraryPath [libXtst]}"
+  '';
+
+  postInstall = ''
+    echo -e '#! ${stdenv.shell}\npython "$@"' > "$out/bin/fmbt-python"
+    chmod a+x "$out/bin/fmbt-python"
+    patchShebangs "$out/bin"
+    for i in "$out"/bin/*; do
+      wrapProgram "$i" --suffix "PATH" ":" "$PATH" \
+        --suffix "PYTHONPATH" ":" "$PYTHONPATH" \
+        --suffix "LD_LIBRARY_PATH" ":" "$LD_LIBRARY_PATH"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Free Model-Based Testing tool";
+    homepage = "https://github.com/intel/fMBT";
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ raskin ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/fusee-launcher/default.nix b/nixpkgs/pkgs/development/tools/fusee-launcher/default.nix
new file mode 100644
index 000000000000..6210361eb883
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fusee-launcher/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, lib
+, python3Packages
+, python3
+, fetchFromGitHub
+, pkgsCross
+, makeWrapper
+} :
+
+stdenv.mkDerivation rec {
+  name = "fusee-launcher-${version}";
+  version = "unstable-2018-07-14";
+
+  src = fetchFromGitHub {
+    owner = "Cease-and-DeSwitch";
+    repo = "fusee-launcher";
+    rev = "265e8f3e1987751ec41db6f1946d132b296aba43";
+    sha256 = "1pqkgw5bk0xcz9x7pc1f0r0b9nsc8jnnvcs1315d8ml8mx23fshm";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share
+    cp fusee-launcher.py $out/bin/fusee-launcher
+    cp intermezzo.bin $out/share/intermezzo.bin
+
+    # Wrap with path to intermezzo.bin relocator binary in /share
+    wrapProgram $out/bin/fusee-launcher \
+      --add-flags "--relocator $out/share/intermezzo.bin" \
+      --prefix PYTHONPATH : "$PYTHONPATH:$(toPythonPath $out)"
+  '';
+
+  nativeBuildInputs = [ pkgsCross.arm-embedded.buildPackages.gcc makeWrapper python3Packages.wrapPython ];
+  buildInputs = [ python3 python3Packages.pyusb ];
+  pythonPath = with python3Packages; [ pyusb ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/Cease-and-DeSwitch/fusee-launcher;
+    description = "Work-in-progress launcher for one of the Tegra X1 bootROM exploits";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pneumaticat ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/galen/default.nix b/nixpkgs/pkgs/development/tools/galen/default.nix
new file mode 100644
index 000000000000..fac1a3958d37
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/galen/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, jre8, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "galen";
+  version = "2.4.4";
+  name = "${pname}-${version}";
+
+  inherit jre8;
+
+  src = fetchurl {
+    url = "https://github.com/galenframework/galen/releases/download/galen-${version}/galen-bin-${version}.zip";
+    sha256 = "13dq8cf0yy24vym6z7p8hb0mybgpcl4j5crsaq8a6pjfxz6d17mq";
+  };
+
+  buildInputs = [ unzip ];
+
+  buildPhase = ''
+  mkdir -p $out/bin
+  '';
+
+  installPhase = ''
+  cat galen | sed -e "s,java,$jre8/bin/java," > $out/bin/galen
+  chmod +x $out/bin/galen
+  cp galen.jar $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://galenframework.com;
+    description = "Automated layout testing for websites";
+    license = licenses.asl20;
+    maintainers = [ ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gamecube-tools/default.nix b/nixpkgs/pkgs/development/tools/gamecube-tools/default.nix
new file mode 100644
index 000000000000..0857a3d4a7c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gamecube-tools/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, which, autoconf, automake, fetchFromGitHub,
+  libtool, freeimage, mesa }:
+stdenv.mkDerivation rec {
+  version = "v1.0.2";
+  name = "gamecube-tools-${version}";
+
+  nativeBuildInputs = [ which autoconf automake libtool ];
+  buildInputs = [ freeimage mesa ];
+
+  src = fetchFromGitHub {
+    owner = "devkitPro";
+    repo  = "gamecube-tools";
+    rev = version;
+    sha256 = "0zvpkzqvl8iv4ndzhkjkmrzpampyzgb91spv0h2x2arl8zy4z7ca";
+  };
+
+  preConfigure = "./autogen.sh";
+
+  meta = with stdenv.lib; {
+    description = "Tools for gamecube/wii projects";
+    homepage = "https://github.com/devkitPro/gamecube-tools/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ tomsmeets ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gauge/default.nix b/nixpkgs/pkgs/development/tools/gauge/default.nix
new file mode 100644
index 000000000000..c750b5537913
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gauge/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "gauge-${version}";
+  version = "1.0.4";
+
+  goPackagePath = "github.com/getgauge/gauge";
+  excludedPackages = ''\(build\|man\)'';
+
+  src = fetchFromGitHub {
+    owner = "getgauge";
+    repo = "gauge";
+    rev = "v${version}";
+    sha256 = "1b52kpv5561pyjvqi8xmidarqp6lcyyy4sjsl4qjx4cr7hmk8kc7";
+  };
+
+  meta = with stdenv.lib; {
+   description = "Light weight cross-platform test automation";
+   homepage    = https://gauge.org;
+   license     = licenses.gpl3;
+   maintainers = [ maintainers.vdemeester ];
+   platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gdm/default.nix b/nixpkgs/pkgs/development/tools/gdm/default.nix
new file mode 100644
index 000000000000..35328fdf66cf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gdm/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "gdm-${version}";
+  version = "1.4";
+
+  goPackagePath = "github.com/sparrc/gdm";
+
+  src = fetchFromGitHub {
+    owner = "sparrc";
+    repo = "gdm";
+    rev = version;
+    sha256 = "0kpqmbg144qcvd8k88j9yx9lrld85ray2viw161xajafk16plvld";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Minimalist dependency manager for Go written in Go.";
+    homepage = https://github.com/sparrc/gdm;
+    license = licenses.unlicense;
+    platforms = platforms.all;
+    maintainers = [ maintainers.mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gdm/deps.nix b/nixpkgs/pkgs/development/tools/gdm/deps.nix
new file mode 100644
index 000000000000..62a3df65e3aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gdm/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by go2nix.
+[
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "0d047c8d5a8c3a1c89d9d78511f4ed7aef49ea0c";
+      sha256 = "0ahyxvqy25zpyppmrb7vsad332gmq2cdi7hb0si6ni0cmrlqcfwr";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/geckodriver/default.nix b/nixpkgs/pkgs/development/tools/geckodriver/default.nix
new file mode 100644
index 000000000000..17560f55ec4a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/geckodriver/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, stdenv
+, darwin
+}:
+
+with rustPlatform; 
+
+buildRustPackage rec {
+  version = "0.22.0";
+  name = "geckodriver-${version}";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = "geckodriver";
+    rev = "v${version}";
+    sha256 = "12m95lfqwdxs2m5kjh3yrpm9w2li5m8n3fw46a2nkxyfw6c94l4b";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  cargoSha256 = "1pwg35kgn5z2zrlj1dwcbbdmkgmnvfxpxv4klzsxxg4m9xr1pfy4";
+
+  meta = with lib; {
+    description = "Proxy for using W3C WebDriver-compatible clients to interact with Gecko-based browsers";
+    homepage = https://github.com/mozilla/geckodriver;
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ jraygauthier ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ghp-import/default.nix b/nixpkgs/pkgs/development/tools/ghp-import/default.nix
new file mode 100644
index 000000000000..44c16b3a4bfd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ghp-import/default.nix
@@ -0,0 +1,28 @@
+{ python3, glibcLocales, lib }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  version = "0.5.5";
+  pname = "ghp-import";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1mvmpi7lqflw2lr0g0y5f9s0d1pv9cav4gbmaqnziqg442klx4iy";
+  };
+
+  disabled = isPyPy;
+  buildInputs = [ glibcLocales ];
+
+  LC_ALL="en_US.UTF-8";
+
+  # No tests available
+  doCheck = false;
+
+  meta = {
+    description = "Copy your docs directly to the gh-pages branch";
+    homepage = "https://github.com/davisp/ghp-import";
+    license = "Tumbolia Public License";
+    maintainers = with lib.maintainers; [ garbas ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/git-ftp/default.nix b/nixpkgs/pkgs/development/tools/git-ftp/default.nix
new file mode 100644
index 000000000000..4c67a45d8c30
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/git-ftp/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, pandoc, man }:
+stdenv.mkDerivation rec {
+  name = "git-ftp-${version}";
+  version = "1.5.1";
+  src = fetchFromGitHub {
+    owner = "git-ftp";
+    repo = "git-ftp";
+    rev = version;
+    sha256 = "0nh2f58rwwfzmglm75fmmm10470a80q0vsihc2msa8xswngihg22";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    make install-all prefix=$out
+  '';
+
+  buildInputs = [pandoc man];
+
+  meta = with stdenv.lib; {
+    description = "Git powered FTP client written as shell script.";
+    homepage = https://git-ftp.github.io/;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ tweber ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/git-quick-stats/default.nix b/nixpkgs/pkgs/development/tools/git-quick-stats/default.nix
new file mode 100644
index 000000000000..3408b960889d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/git-quick-stats/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchFromGitHub }:
+stdenv.mkDerivation rec {
+  name = "git-quick-stats-${version}";
+  version = "2.0.8";
+  src = fetchFromGitHub {
+    repo = "git-quick-stats";
+    owner = "arzzen";
+    rev = "${version}";
+    sha256 = "1px1sk7b6mjnbclsr1jn33m9k4wd8wqyw4d6w1rgj0ii29lhzmqi";
+  };
+  PREFIX = builtins.placeholder "out";
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/arzzen/git-quick-stats";
+    description = "A simple and efficient way to access various statistics in git repository";
+    platforms = platforms.all;
+    maintainers = [ maintainers.kmein ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/git-repo-updater/default.nix b/nixpkgs/pkgs/development/tools/git-repo-updater/default.nix
new file mode 100644
index 000000000000..6acb628a322c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/git-repo-updater/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildPythonApplication, fetchPypi
+, colorama, GitPython }:
+
+buildPythonApplication rec {
+  pname = "gitup";
+  version = "0.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "11ilz9i2yxrbipyjzpfkj7drx9wkrn3phvd1a60jivphbqdldpgf";
+  };
+
+  propagatedBuildInputs = [ colorama GitPython ];
+
+  meta = with lib; {
+    description = "Easily update multiple Git repositories at once";
+    homepage = "https://github.com/earwig/git-repo-updater";
+    license = licenses.mit;
+    maintainers = [ maintainers.bdesham ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/git-series/default.nix b/nixpkgs/pkgs/development/tools/git-series/default.nix
new file mode 100644
index 000000000000..442ae4d15ec9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/git-series/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchFromGitHub, fetchpatch, rustPlatform, openssl, cmake, perl, pkgconfig, zlib }:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  version = "0.9.1";
+  name = "git-series-${version}";
+
+  src = fetchFromGitHub {
+    owner = "git-series";
+    repo = "git-series";
+    rev = version;
+    sha256 = "07mgq5h6r1gf3jflbv2khcz32bdazw7z1s8xcsafdarnm13ps014";
+  };
+
+  cargoSha256 = "07b25pcndhwvpwa5khdh8y1fl44hdv6ff2pfj1mjc0wchbspqm6q";
+
+  cargoDepsHook = ''
+    (
+      cd */
+      # see https://github.com/git-series/git-series/pull/56
+      patch -p1 < ${fetchpatch {
+        url = "https://github.com/Mic92/git-series/commit/3aa30a47d74ebf90b444dccdf8c153f07f119483.patch";
+        sha256 = "06v8br9skvy75kcw2zgbswxyk82sqzc8smkbqpzmivxlc2i9rnh0";
+      }}
+    )
+  '';
+
+  nativeBuildInputs = [ cmake pkgconfig perl ];
+  buildInputs = [ openssl zlib ];
+
+  postBuild = ''
+    install -D "$src/git-series.1" "$out/man/man1/git-series.1"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A tool to help with formatting git patches for review on mailing lists";
+    longDescription = ''
+          git series tracks changes to a patch series over time. git
+          series also tracks a cover letter for the patch series,
+          formats the series for email, and prepares pull requests.
+    '';
+    homepage = https://github.com/git-series/git-series;
+
+    license = licenses.mit;
+    maintainers = [ maintainers.vmandela ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile b/nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile
new file mode 100644
index 000000000000..5db8cdb73488
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile
@@ -0,0 +1,4 @@
+# frozen_string_literal: true
+source "https://rubygems.org"
+
+gem "github_changelog_generator", "1.14.3"
diff --git a/nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile.lock b/nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile.lock
new file mode 100644
index 000000000000..b1b955cba940
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile.lock
@@ -0,0 +1,49 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (5.2.2)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 0.7, < 2)
+      minitest (~> 5.1)
+      tzinfo (~> 1.1)
+    addressable (2.5.2)
+      public_suffix (>= 2.0.2, < 4.0)
+    concurrent-ruby (1.1.4)
+    faraday (0.15.4)
+      multipart-post (>= 1.2, < 3)
+    faraday-http-cache (2.0.0)
+      faraday (~> 0.8)
+    github_changelog_generator (1.14.3)
+      activesupport
+      faraday-http-cache
+      multi_json
+      octokit (~> 4.6)
+      rainbow (>= 2.1)
+      rake (>= 10.0)
+      retriable (~> 2.1)
+    i18n (1.2.0)
+      concurrent-ruby (~> 1.0)
+    minitest (5.11.3)
+    multi_json (1.13.1)
+    multipart-post (2.0.0)
+    octokit (4.13.0)
+      sawyer (~> 0.8.0, >= 0.5.3)
+    public_suffix (3.0.3)
+    rainbow (3.0.0)
+    rake (12.3.2)
+    retriable (2.1.0)
+    sawyer (0.8.1)
+      addressable (>= 2.3.5, < 2.6)
+      faraday (~> 0.8, < 1.0)
+    thread_safe (0.3.6)
+    tzinfo (1.2.5)
+      thread_safe (~> 0.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  github_changelog_generator (= 1.14.3)
+
+BUNDLED WITH
+   1.16.3
diff --git a/nixpkgs/pkgs/development/tools/github-changelog-generator/default.nix b/nixpkgs/pkgs/development/tools/github-changelog-generator/default.nix
new file mode 100644
index 000000000000..9362ef3fe45d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github-changelog-generator/default.nix
@@ -0,0 +1,15 @@
+{ stdenv, lib, bundlerApp}:
+
+bundlerApp rec {
+  pname = "github_changelog_generator";
+  gemdir = ./.;
+  exes = [ "github_changelog_generator" ];
+
+  meta = with lib; {
+    description = "Fully automated changelog generation - This gem generates a changelog file based on tags, issues and merged pull requests";
+    homepage    = https://github.com/github-changelog-generator/github-changelog-generator;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ Scriptkiddi ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/github-changelog-generator/gemset.nix b/nixpkgs/pkgs/development/tools/github-changelog-generator/gemset.nix
new file mode 100644
index 000000000000..3382557aaa57
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github-changelog-generator/gemset.nix
@@ -0,0 +1,155 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iya7vxqwxysr74s7b4z1x19gmnx5advimzip3cbmsd5bd43wfgz";
+      type = "gem";
+    };
+    version = "5.2.2";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk";
+      type = "gem";
+    };
+    version = "2.5.2";
+  };
+  concurrent-ruby = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ixcx9pfissxrga53jbdpza85qd5f6b5nq1sfqa9rnfq82qnlbp1";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s72m05jvzc1pd6cw1i289chas399q0a14xrwg4rvkdwy7bgzrh0";
+      type = "gem";
+    };
+    version = "0.15.4";
+  };
+  faraday-http-cache = {
+    dependencies = ["faraday"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08j86fgcwl7z792qyijdsq680arzpfiydqd24ja405z2rbm7r2i0";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  github_changelog_generator = {
+    dependencies = ["activesupport" "faraday-http-cache" "multi_json" "octokit" "rainbow" "rake" "retriable"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ylqfmc78i6jf42ydkyng0gzvsl5w80wr3rjkhd6q4kgi96n70lr";
+      type = "gem";
+    };
+    version = "1.14.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "079sqshk08mqs3d6yzvshmqf4s175lpi2pp71f1p10l09sgmrixr";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  minitest = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq";
+      type = "gem";
+    };
+    version = "5.11.3";
+  };
+  multi_json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  multipart-post = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  octokit = {
+    dependencies = ["sawyer"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yh0yzzqg575ix3y2l2261b9ag82gv2v4f1wczdhcmfbxcz755x6";
+      type = "gem";
+    };
+    version = "4.13.0";
+  };
+  public_suffix = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l";
+      type = "gem";
+    };
+    version = "3.0.3";
+  };
+  rainbow = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  rake = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sy5a7nh6xjdc9yhcw31jji7ssrf9v5806hn95gbrzr998a2ydjn";
+      type = "gem";
+    };
+    version = "12.3.2";
+  };
+  retriable = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1123kqmy3yk7k3vidvcwa46lknmhilv8axpaiag1wifa576hkqy1";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  sawyer = {
+    dependencies = ["addressable" "faraday"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sv1463r7bqzvx4drqdmd36m7rrv6sf1v3c6vswpnq3k6vdw2dvd";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  thread_safe = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z";
+      type = "gem";
+    };
+    version = "1.2.5";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/github/cligh/default.nix b/nixpkgs/pkgs/development/tools/github/cligh/default.nix
new file mode 100644
index 000000000000..6a336b7015a0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github/cligh/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, buildPythonApplication, pyxdg, PyGithub }:
+
+buildPythonApplication rec {
+  name = "cligh-${version}";
+  version = "0.3";
+
+  doCheck = false; # no tests
+
+  src = fetchFromGitHub {
+    owner = "CMB";
+    repo = "cligh";
+    rev = "v${version}";
+    sha256 = "0d1fd78rzl2n75xpmy1gnxh1shvcs4qm0j4qqszqvfriwkg2flxn";
+  };
+
+  propagatedBuildInputs = [ pyxdg PyGithub ];
+
+  meta = with stdenv.lib; {
+    homepage = http://the-brannons.com/software/cligh.html;
+    description = "A simple command-line interface to the facilities of Github";
+    longDescription = ''
+        Cligh is a simple command-line interface to the facilities of GitHub.
+        It is written by Christopher Brannon chris@the-brannons.com. The
+        current version is 0.3, released July 23, 2016. This program is still
+        in the early stage of development. It is by no means feature-complete.
+        A friend and I consider it useful, but others may not.
+    '';
+    platforms = platforms.all;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.jhhuh ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/github/github-release/default.nix b/nixpkgs/pkgs/development/tools/github/github-release/default.nix
new file mode 100644
index 000000000000..b80ddff054a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github/github-release/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchurl }:
+
+let
+  linuxPredicate = stdenv.hostPlatform.system == "x86_64-linux";
+  bsdPredicate = stdenv.hostPlatform.system == "x86_64-freebsd";
+  darwinPredicate = stdenv.hostPlatform.system == "x86_64-darwin";
+  metadata = assert linuxPredicate || bsdPredicate || darwinPredicate;
+    if linuxPredicate then
+      { arch = "linux-amd64";
+        sha256 = "0b3h0d0qsrjx99kcd2cf71xijh44wm5rpm2sr54snh3f7macj2p1";
+        archiveBinaryPath = "linux/amd64"; }
+    else if bsdPredicate then
+      { arch = "freebsd-amd64";
+        sha256 = "1yydm4ndkh80phiwk41kcf6pizvwrfhsfk3jwrrgr42wsnkkgj0q";
+        archiveBinaryPath = "freebsd/amd64"; }
+    else
+      { arch = "darwin-amd64";
+        sha256 = "1dj74cf1ahihia2dr9ii9ky0cpmywn42z2iq1vkbrrcggjvyrnlf";
+        archiveBinaryPath = "darwin/amd64"; };
+in stdenv.mkDerivation rec {
+  shortname = "github-release";
+  name = "${shortname}-${version}";
+  version = "0.6.2";
+
+  src = fetchurl {
+    url = "https://github.com/aktau/github-release/releases/download/v${version}/${metadata.arch}-${shortname}.tar.bz2";
+    sha256 = metadata.sha256;
+  };
+
+  buildInputs = [ ];
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp "${metadata.archiveBinaryPath}/github-release" "$out/bin/"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Commandline app to create and edit releases on Github (and upload artifacts)";
+    longDescription = ''
+      A small commandline app written in Go that allows you to easily create and
+      delete releases of your projects on Github.
+      In addition it allows you to attach files to those releases.
+    '';
+
+    license = licenses.mit;
+    homepage = https://github.com/aktau/github-release;
+    maintainers = with maintainers; [ ardumont ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/glide/default.nix b/nixpkgs/pkgs/development/tools/glide/default.nix
new file mode 100644
index 000000000000..bd83a63e5d66
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glide/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "glide-${version}";
+  version = "0.12.3";
+
+  goPackagePath = "github.com/Masterminds/glide";
+
+   buildFlagsArray = ''
+   -ldflags=
+      -X main.version=${version}
+  '';
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "Masterminds";
+    repo = "glide";
+    sha256 = "0hvfikvxfk94aqms1bdxqxqpamzy0v8binv5jwglzw2sf2437ww0";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://glide.sh;
+    description = "Package management for Go";
+    license = licenses.mit;
+    maintainers = [ maintainers.rushmorem ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gllvm/default.nix b/nixpkgs/pkgs/development/tools/gllvm/default.nix
new file mode 100644
index 000000000000..b581e71129ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gllvm/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "gllvm-${version}";
+  version = "1.2.3";
+
+  goPackagePath = "github.com/SRI-CSL/gllvm";
+
+  src = fetchFromGitHub {
+    owner = "SRI-CSL";
+    repo = "gllvm";
+    rev = "v${version}";
+    sha256 = "12kdgsma62nzksvw266qm3ivkbz62ma93dd25wy0p19789v4fi7s";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/SRI-CSL/gllvm;
+    description = "Whole Program LLVM: wllvm ported to go";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ dtzWill ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/global-platform-pro/default.nix b/nixpkgs/pkgs/development/tools/global-platform-pro/default.nix
new file mode 100644
index 000000000000..9841e7900cd5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/global-platform-pro/default.nix
@@ -0,0 +1,68 @@
+{ stdenv, fetchFromGitHub, jdk, maven, writeText, makeWrapper, jre_headless, pcsclite }:
+
+# TODO: This is quite a bit of duplicated logic with gephi. Factor it out?
+stdenv.mkDerivation rec {
+  pname = "global-platform-pro";
+  version = "18.09.14";
+  GPPRO_VERSION = "18.09.14-0-gb439b52"; # git describe --tags --always --long --dirty
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "martinpaljak";
+    repo = "GlobalPlatformPro";
+    rev = "${version}";
+    sha256 = "1vws6cbgm3mrwc2xz9j1y262vw21x3hjc9m7rqc4hn3m7gjpwsvg";
+  };
+
+  deps = stdenv.mkDerivation {
+    name = "${name}-deps";
+    inherit src;
+    nativeBuildInputs = [ jdk maven ];
+    installPhase = ''
+      # Download the dependencies
+      while ! mvn package "-Dmaven.repo.local=$out/.m2" -Dmaven.wagon.rto=5000; do
+        echo "timeout, restart maven to continue downloading"
+      done
+
+      # And keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files
+      # with lastModified timestamps inside
+      find "$out/.m2" -type f \
+        -regex '.+\(\.lastUpdated\|resolver-status\.properties\|_remote\.repositories\)' \
+        -delete
+    '';
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "1qwgvz6l5wia8q5824c9f3iwyapfskljhqf1z09fw6jjj1jy3b15";
+  };
+
+  nativeBuildInputs = [ jdk maven makeWrapper ];
+
+  buildPhase = ''
+    cp -dpR "${deps}/.m2" ./
+    chmod -R +w .m2
+    mvn package --offline -Dmaven.repo.local="$(pwd)/.m2"
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/lib/java" "$out/share/java"
+    cp target/gp.jar "$out/share/java"
+    makeWrapper "${jre_headless}/bin/java" "$out/bin/gp" \
+      --add-flags "-jar '$out/share/java/gp.jar'" \
+      --prefix LD_LIBRARY_PATH : "${pcsclite.out}/lib"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Command-line utility for managing applets and keys on Java Cards";
+    longDescription = ''
+      This command-line utility can be used to manage applets and keys
+      on Java Cards. It is made available as the `gp` executable.
+
+      The executable requires the PC/SC daemon running for correct execution.
+      If you run NixOS, it can be enabled with `services.pcscd.enable = true;`.
+    '';
+    homepage = https://github.com/martinpaljak/GlobalPlatformPro;
+    license = with licenses; [ lgpl3 ];
+    maintainers = with maintainers; [ ekleog ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/glock/default.nix b/nixpkgs/pkgs/development/tools/glock/default.nix
new file mode 100644
index 000000000000..35f7a2bfdea1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glock/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "glock-${version}";
+  version = "20160816-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "b8c84ff5ade15a6238ca61c20d3afc70d2e41276";
+
+  goPackagePath = "github.com/robfig/glock";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "robfig";
+    repo = "glock";
+    sha256 = "10jwn3k71p340g8d43zjx7k1j534rcd7rss8pif09mpfrn9qndhh";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/robfig/glock;
+    description = "A command-line tool to lock Go dependencies to specific revisions";
+    license = licenses.mit;
+    maintainers = [ maintainers.rushmorem ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/glock/deps.nix b/nixpkgs/pkgs/development/tools/glock/deps.nix
new file mode 100644
index 000000000000..b7392d757cfc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glock/deps.nix
@@ -0,0 +1,21 @@
+# This file was generated by go2nix.
+[
+  {
+    goPackagePath = "github.com/agtorre/gocolorize";
+    fetch = {
+      type = "git";
+      url = "https://github.com/agtorre/gocolorize";
+      rev = "f42b554bf7f006936130c9bb4f971afd2d87f671";
+      sha256 = "1dj7s8bgw9qky344d0k9gz661c0m317a08a590184drw7m51hy9p";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "f1a397bba50dee815e8c73f3ec94ffc0e8df1a09";
+      sha256 = "1wy8nn2vg70n98g80i1zrk49129phyfbzxbicj748bmf82rnaxzg";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/glslviewer/default.nix b/nixpkgs/pkgs/development/tools/glslviewer/default.nix
new file mode 100644
index 000000000000..d85060add5eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glslviewer/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchFromGitHub, glfw, pkgconfig, libXrandr, libXdamage
+, libXext, libXrender, libXinerama, libXcursor, libXxf86vm, libXi
+, libX11, libGLU, python2Packages, ensureNewerSourcesForZipFilesHook
+, Cocoa
+}:
+
+stdenv.mkDerivation rec {
+  name = "glslviewer-${version}";
+  version = "2019-04-22";
+
+  src = fetchFromGitHub {
+    owner = "patriciogonzalezvivo";
+    repo = "glslViewer";
+    rev = "fa3e2ed4810927d189e480b704366cca22f281f3";
+    sha256 = "1888jxi84f2nnc0kpzqrn2cada1z4zqyq8ss4ppb5y3wy7d87qjn";
+  };
+
+  nativeBuildInputs = [ pkgconfig ensureNewerSourcesForZipFilesHook ];
+  buildInputs = [
+    glfw libGLU glfw libXrandr libXdamage
+    libXext libXrender libXinerama libXcursor libXxf86vm
+    libXi libX11
+  ] ++ (with python2Packages; [ python setuptools wrapPython ])
+    ++ stdenv.lib.optional stdenv.isDarwin Cocoa;
+  pythonPath = with python2Packages; [ requests ];
+
+  # Makefile has /usr/local/bin hard-coded for 'make install'
+  preConfigure = ''
+    substituteInPlace Makefile \
+        --replace '/usr/local' "$out" \
+        --replace '/usr/bin/clang++' 'clang++'
+    substituteInPlace Makefile \
+        --replace 'python setup.py install' "python setup.py install --prefix=$out"
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin $(toPythonPath "$out")
+    export PYTHONPATH=$PYTHONPATH:$(toPythonPath "$out")
+  '';
+
+  postInstall = ''
+    wrapPythonPrograms
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Live GLSL coding renderer";
+    homepage = http://patriciogonzalezvivo.com/2015/glslViewer/;
+    license = licenses.bsd3;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = [ maintainers.hodapp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gnome-desktop-testing/default.nix b/nixpkgs/pkgs/development/tools/gnome-desktop-testing/default.nix
new file mode 100644
index 000000000000..70b426dc5942
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gnome-desktop-testing/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, glib, autoreconfHook, pkgconfig, systemd, fetchgit }:
+
+stdenv.mkDerivation rec {
+  version = "2018.1";
+  name = "gnome-desktop-testing-${version}";
+
+  src = fetchgit {
+    url = https://gitlab.gnome.org/GNOME/gnome-desktop-testing.git;
+    rev = "v${version}";
+    sha256 = "1bcd8v101ynsv2p5swh30hnajjf6z8dxzd89h9racp847hgjgyxc";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [ glib systemd ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "GNOME OSTree testing code";
+    homepage = https://live.gnome.org/Initiatives/GnomeGoals/InstalledTests;
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.jtojnar ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gnulib/default.nix b/nixpkgs/pkgs/development/tools/gnulib/default.nix
new file mode 100644
index 000000000000..15042353b1d5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gnulib/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchgit }:
+
+stdenv.mkDerivation {
+  pname = "gnulib";
+  version = "20190326";
+
+  src = fetchgit {
+    url = https://git.savannah.gnu.org/r/gnulib.git;
+    rev = "a18f7ce3c0aa760c33d46bbeb8e5b3a14cf24984";
+    sha256 = "04py5n3j17wyqv9wfsslcrxzapni9vmw6p5g0adzy2md3ygjw4x4";
+  };
+
+  dontFixup = true;
+  # no "make install", gnulib is a collection of source code
+  installPhase = ''
+    mkdir -p $out; mv * $out/
+    ln -s $out/lib $out/include
+    mkdir -p $out/bin
+    ln -s $out/gnulib-tool $out/bin/
+  '';
+
+  meta = {
+    homepage = https://www.gnu.org/software/gnulib/;
+    description = "Central location for code to be shared among GNU packages";
+    license = stdenv.lib.licenses.gpl3Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-bindata-assetfs/default.nix b/nixpkgs/pkgs/development/tools/go-bindata-assetfs/default.nix
new file mode 100644
index 000000000000..249fc21cdfe4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-bindata-assetfs/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "go-bindata-assetfs-${version}";
+  version = "20160814-${rev}";
+  rev = "e1a2a7e";
+  goPackagePath = "github.com/elazarl/go-bindata-assetfs";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "elazarl";
+    repo = "go-bindata-assetfs";
+    sha256 = "0b6q8h9fwpgpkvml1j87wq9174g7px1dmskhm884drpvswda2djk";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Serve embedded files from jteeuwen/go-bindata";
+    license = licenses.bsd2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ avnik ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-bindata/default.nix b/nixpkgs/pkgs/development/tools/go-bindata/default.nix
new file mode 100644
index 000000000000..9a783deecee6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-bindata/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  name = "go-bindata-${version}";
+  version = "20151023-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "a0ff2567cfb70903282db057e799fd826784d41d";
+  
+  goPackagePath = "github.com/jteeuwen/go-bindata";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/jteeuwen/go-bindata";
+    sha256 = "0d6zxv0hgh938rf59p1k5lj0ymrb8kcps2vfrb9kaarxsvg7y69v";
+  };
+
+  excludedPackages = "testdata";
+
+  meta = with stdenv.lib; {
+    homepage    = "https://github.com/jteeuwen/go-bindata";
+    description = "A small utility which generates Go code from any file, useful for embedding binary data in a Go program";
+    maintainers = with maintainers; [ cstrahan ];
+    license     = licenses.cc0 ;
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-junit-report/default.nix b/nixpkgs/pkgs/development/tools/go-junit-report/default.nix
new file mode 100644
index 000000000000..5e1a69a16929
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-junit-report/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "go-junit-report-unstable-${version}";
+  version = "2018-06-14";
+  rev = "385fac0ced9acaae6dc5b39144194008ded00697";
+
+  goPackagePath = "github.com/jstemmer/go-junit-report";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "jstemmer";
+    repo = "go-junit-report";
+    sha256 = "109zs8wpdmc2ijc2khyqija8imay88ka6v50xvrpnnwnd3ywckxi";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Converts go test output to an xml report, suitable for applications that expect junit xml reports (e.g. Jenkins)";
+    homepage    = "https://${goPackagePath}";
+    maintainers = with maintainers; [ cryptix ];
+    license     = licenses.mit;
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-langserver/default.nix b/nixpkgs/pkgs/development/tools/go-langserver/default.nix
new file mode 100644
index 000000000000..ec0e565eabd6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-langserver/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "go-langserver";
+  version = "2.0.0";
+
+  goPackagePath = "github.com/sourcegraph/go-langserver";
+  subPackages = [ "." ];
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "sourcegraph";
+    repo = "go-langserver";
+    sha256 = "1wv7xf81s3qi8xydxjkkp8vacdzrq8sbj04346fz73nsn85z0sgp";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A Go language server protocol server";
+    homepage = https://github.com/sourcegraph/go-langserver;
+    license = licenses.mit;
+    maintainers = with maintainers; [ johnchildren ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-motion/default.nix b/nixpkgs/pkgs/development/tools/go-motion/default.nix
new file mode 100644
index 000000000000..62e276f2f423
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-motion/default.nix
@@ -0,0 +1,38 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "motion-unstable-${version}";
+  version = "2018-04-09";
+  rev = "218875ebe23806e7af82f3b5b14bb3355534f679";
+
+  goPackagePath = "github.com/fatih/motion";
+  excludedPackages = ''testdata'';
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "fatih";
+    repo = "motion";
+    sha256 = "08lp61hmb77p0cknf71jp8lssplxad3ddyqjxh8x3cr0bmn9ykr9";
+  };
+
+  meta = with lib; {
+    description = "Navigation and insight in Go";
+    longDescription = ''
+      Motion is a tool that was designed to work with editors. It is providing
+      contextual information for a given offset(option) from a file or
+      directory of files. Editors can use these informations to implement
+      navigation, text editing, etc... that are specific to a Go source code.
+
+      It's optimized and created to work with vim-go, but it's designed to work
+      with any editor. It's currently work in progress and open to change.
+    '';
+    homepage = https://github.com/fatih/motion;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-outline/default.nix b/nixpkgs/pkgs/development/tools/go-outline/default.nix
new file mode 100644
index 000000000000..4df506f908fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-outline/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "go-outline-${version}";
+  version = "unstable-2018-11-22";
+  rev = "7182a932836a71948db4a81991a494751eccfe77";
+
+  goPackagePath = "github.com/ramya-rao-a/go-outline";
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "ramya-rao-a";
+    repo = "go-outline";
+    sha256 = "0p381yvwvff0i4i7mf5v1k2q1lb0rs2xkjgv67n1cw2573c613r1";
+  };
+
+  meta = {
+    description = "Utility to extract JSON representation of declarations from a Go source file.";
+    homepage = https://github.com/ramya-rao-a/go-outline;
+    maintainers = with stdenv.lib.maintainers; [ vdemeester ];
+    license = stdenv.lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-outline/deps.nix b/nixpkgs/pkgs/development/tools/go-outline/deps.nix
new file mode 100644
index 000000000000..6a333b58bec6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-outline/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/tools";
+      rev = "96b5a5404f303f074e6117d832a9873c439508f0";
+      sha256 = "1h6r9xyp1v3w2x8d108vzghn65l6ia2h895irypmrwymfcp30y42";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/go-protobuf/default.nix b/nixpkgs/pkgs/development/tools/go-protobuf/default.nix
new file mode 100644
index 000000000000..750df126e943
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-protobuf/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "go-protobuf-${version}";
+  version = "2018-01-04";
+  rev = "1e59b77b52bf8e4b449a57e6f79f21226d571845";
+
+  goPackagePath = "github.com/golang/protobuf";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "golang";
+    repo = "protobuf";
+    sha256 = "19bkh81wnp6njg3931wky6hsnnl2d1ig20vfjxpv450sd3k6yys8";
+  };
+
+  meta = with stdenv.lib; {
+    homepage    = "https://github.com/golang/protobuf";
+    description = " Go bindings for protocol buffer";
+    maintainers = with maintainers; [ lewo ];
+    license     = licenses.bsd3;
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-repo-root/default.nix b/nixpkgs/pkgs/development/tools/go-repo-root/default.nix
new file mode 100644
index 000000000000..52cd37f98850
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-repo-root/default.nix
@@ -0,0 +1,17 @@
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  name = "go-repo-root-${version}";
+  version = "20140911-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "90041e5c7dc634651549f96814a452f4e0e680f9";
+  
+  goPackagePath = "github.com/cstrahan/go-repo-root";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/cstrahan/go-repo-root";
+    sha256 = "1rlzp8kjv0a3dnfhyqcggny0ad648j5csr2x0siq5prahlp48mg4";
+  };
+
+  goDeps = ./deps.nix;
+}
diff --git a/nixpkgs/pkgs/development/tools/go-repo-root/deps.nix b/nixpkgs/pkgs/development/tools/go-repo-root/deps.nix
new file mode 100644
index 000000000000..2554b3cad1a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-repo-root/deps.nix
@@ -0,0 +1,20 @@
+[
+  {
+    goPackagePath = "golang.org/x/tools/go/vcs";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "9ae4729fba20b3533d829a9c6ba8195b068f2abc";
+      sha256 = "1j51aaskfqc953p5s9naqimr04hzfijm4yczdsiway1xnnvvpfr1";
+    };
+  }
+  {
+    goPackagePath = "code.google.com/p/go.tools/go/vcs";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "9ae4729fba20b3533d829a9c6ba8195b068f2abc";
+      sha256 = "1j51aaskfqc953p5s9naqimr04hzfijm4yczdsiway1xnnvvpfr1";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/go-symbols/default.nix b/nixpkgs/pkgs/development/tools/go-symbols/default.nix
new file mode 100644
index 000000000000..dfeb6d52e727
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-symbols/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "go-symbols-${version}";
+  version = "0.1.1";
+
+  goPackagePath = "github.com/acroca/go-symbols";
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "acroca";
+    repo = "go-symbols";
+    rev = "v${version}";
+    sha256 = "0yyzw6clndb2r5j9isyd727njs98zzp057v314vfvknsm8g7hqrz";
+  };
+
+  meta = {
+    description = "A utility for extracting a JSON representation of the package symbols from a go source tree.";
+    homepage = https://github.com/acroca/go-symbols;
+    maintainers = with stdenv.lib.maintainers; [ vdemeester ];
+    license = stdenv.lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-symbols/deps.nix b/nixpkgs/pkgs/development/tools/go-symbols/deps.nix
new file mode 100644
index 000000000000..6a333b58bec6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-symbols/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/tools";
+      rev = "96b5a5404f303f074e6117d832a9873c439508f0";
+      sha256 = "1h6r9xyp1v3w2x8d108vzghn65l6ia2h895irypmrwymfcp30y42";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/go-tools/default.nix b/nixpkgs/pkgs/development/tools/go-tools/default.nix
new file mode 100644
index 000000000000..ee61a745f10b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-tools/default.nix
@@ -0,0 +1,29 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "go-tools-${version}";
+  version = "2019.1.1";
+
+  goPackagePath = "honnef.co/go/tools";
+  excludedPackages = ''\(simple\|ssa\|ssa/ssautil\|lint\|staticcheck\|stylecheck\|unused\)/testdata'';
+
+  src = fetchFromGitHub {
+    owner = "dominikh";
+    repo = "go-tools";
+    rev = "${version}";
+    sha256 = "1zwh64x3i32p6f6808q609n63xda3bq888n43wl4alpx1b08spha";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "A collection of tools and libraries for working with Go code, including linters and static analysis.";
+    homepage = https://staticcheck.io;
+    license = licenses.mit;
+    maintainers = with maintainers; [ rvolosatovs kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-tools/deps.nix b/nixpkgs/pkgs/development/tools/go-tools/deps.nix
new file mode 100644
index 000000000000..469d4b9d1530
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-tools/deps.nix
@@ -0,0 +1,29 @@
+[
+ {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "3012a1dbe2e4bd1391d42b32f0577cb7bbc7f005";
+      sha256 = "1fjdwwfzyzllgiwydknf1pwjvy49qxfsczqx5gz3y0izs7as99j6";
+    };
+  }
+  {
+    goPackagePath = "github.com/kisielk/gotool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kisielk/gotool";
+      rev = "80517062f582ea3340cd4baf70e86d539ae7d84d";
+      sha256 = "14af2pa0ssyp8bp2mvdw184s5wcysk6akil3wzxmr05wwy951iwn";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "2c0ae70061356820330c96810d9483beb9a6da8e";
+      sha256 = "1lsi2ssxajclj3bciz2a41v1vjv768ja3v6wnbyhxy8xphwkp4fk";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/go2nix/default.nix b/nixpkgs/pkgs/development/tools/go2nix/default.nix
new file mode 100644
index 000000000000..36634423fdbc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go2nix/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, buildGoPackage, go-bindata, gotools, nix-prefetch-git, git, makeWrapper,
+  fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "go2nix-${version}";
+  version = "1.3.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/kamilchm/go2nix";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "kamilchm";
+    repo = "go2nix";
+    sha256 = "1q61mgngvyl2bnmrqahh3bji402n76c7xwv29lwk007gymzgff0n";
+  };
+
+  goDeps = ./deps.nix;
+
+  outputs = [ "bin" "out" "man" ];
+
+  buildInputs = [ go-bindata gotools makeWrapper ];
+  preBuild = ''go generate ./...'';
+
+  postInstall = ''
+    wrapProgram $bin/bin/go2nix \
+      --prefix PATH : ${nix-prefetch-git}/bin \
+      --prefix PATH : ${git}/bin
+
+    mkdir -p $man/share/man/man1
+    cp $src/go2nix.1 $man/share/man/man1
+  '';
+
+  allowGoReference = true;
+
+  doCheck = false; # tries to access the net
+
+  meta = with stdenv.lib; {
+    description = "Go apps packaging for Nix";
+    homepage = https://github.com/kamilchm/go2nix;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kamilchm ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go2nix/deps.nix b/nixpkgs/pkgs/development/tools/go2nix/deps.nix
new file mode 100644
index 000000000000..8fc784f4b7f8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go2nix/deps.nix
@@ -0,0 +1,20 @@
+[
+    {
+        goPackagePath = "github.com/Masterminds/vcs";
+        fetch = {
+            type = "git";
+            url = "https://github.com/Masterminds/vcs";
+            rev = "7af28b64c5ec41b1558f5514fd938379822c237c";
+            sha256 = "127pamr5lkym3iq6z747bm4y4gyc02glrqb61yv82z1rdyv1dcf6";
+        };
+    }
+    {
+        goPackagePath = "github.com/jawher/mow.cli";
+        fetch = {
+            type = "git";
+            url = "https://github.com/jawher/mow.cli";
+            rev = "772320464101e904cd51198160eb4d489be9cc49";
+            sha256 = "1a8hnh2k3vc3prjhnz4rjbiwhqq6r3mi18h9cdb6fc6s6yzjc19j";
+        };
+    }
+]
diff --git a/nixpkgs/pkgs/development/tools/goa/default.nix b/nixpkgs/pkgs/development/tools/goa/default.nix
new file mode 100644
index 000000000000..53d4bfaa483e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goa/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "goa-${version}";
+  version = "1.4.1";
+
+  goPackagePath = "github.com/goadesign/goa";
+  subPackages = [ "goagen" ];
+
+  src = fetchFromGitHub {
+    owner = "goadesign";
+    repo = "goa";
+    rev = "v${version}";
+    sha256 = "0qcd4ii6arlpsivfdhcwidvnd8zbxxvf574jyxyvm1aazl8sqxj7";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    homepage = https://goa.design;
+    description = "A framework for building microservices in Go using a unique design-first approach";
+    license = licenses.mit;
+    maintainers = [ maintainers.rushmorem ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/goa/deps.nix b/nixpkgs/pkgs/development/tools/goa/deps.nix
new file mode 100644
index 000000000000..bfe862a4006a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goa/deps.nix
@@ -0,0 +1,75 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/dimfeld/httppath";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dimfeld/httppath";
+      rev = "ee938bf735983d53694d79138ad9820efff94c92";
+      sha256 = "1c1kic8g3r78g6h4xl8n2ac1waxsb9fqz40k20ypi08k24mv3ha9";
+    };
+  }
+  {
+    goPackagePath = "github.com/gofrs/uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gofrs/uuid";
+      rev = "e684523faa0581e44663968f097d478c499d4276";
+      sha256 = "1p2md0bmfnn7kaa866fnb8lfnmlzzb8wfhp4ym5915p8mv4whxgz";
+    };
+  }
+  {
+    goPackagePath = "github.com/manveru/faker";
+    fetch = {
+      type = "git";
+      url = "https://github.com/manveru/faker";
+      rev = "9fbc68a78c4dbc7914e1a23f88f126bea4383b97";
+      sha256 = "1cnrf4wdjhxd9fryhlp2krl9acz6dzwic89gshs49pg3aajlf4dy";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cobra";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cobra";
+      rev = "4dab30cb33e6633c33c787106bafbfbfdde7842d";
+      sha256 = "1g7p7c2azqaxbfkx5yaznk0z1inqnajlbwv921k6vh8i1xdblxk5";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev = "1ce0cc6db4029d97571db82f85092fccedb572ce";
+      sha256 = "02wsc01npnpc7srqw7rzaihn2hjmrkfy2x412fxbb675j2hk9cx6";
+    };
+  }
+  {
+    goPackagePath = "github.com/zach-klippenstein/goregen";
+    fetch = {
+      type = "git";
+      url = "https://github.com/zach-klippenstein/goregen";
+      rev = "795b5e3961ea1912fde60af417ad85e86acc0d6a";
+      sha256 = "113kx47ryhyb803v8ckizlrc34cmwcwb0h28v34bahd2mir8nq3l";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "a754db16a40a9d94359b6600b825419c0ca6f986";
+      sha256 = "0n0cwb2szcjbyncqhdia77spcjsbm05jcgpnh0i8rdr16ixwanyq";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "51d6538a90f86fe93ac480b35f37b2be17fef232";
+      sha256 = "01wj12jzsdqlnidpyjssmj0r4yavlqy7dwrg7adqd8dicjc4ncsa";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/gocode-gomod/default.nix b/nixpkgs/pkgs/development/tools/gocode-gomod/default.nix
new file mode 100644
index 000000000000..f93bd9d28c81
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gocode-gomod/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "gocode-gomod-unstable-${version}";
+  version = "2019-03-27";
+  rev = "81059208699789f992bb4a4a3fedd734e335468d";
+
+  goPackagePath = "github.com/stamblerre/gocode";
+
+  # we must allow references to the original `go` package,
+  # because `gocode` needs to dig into $GOROOT to provide completions for the
+  # standard packages.
+  allowGoReference = true;
+
+  excludedPackages = ''internal/suggest/testdata'';
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "stamblerre";
+    repo = "gocode";
+    sha256 = "0y5lc7sq3913mvvczwx8mq5l3l9yg34jzaw742q8jpd1jzqyza94";
+  };
+
+  goDeps = ./deps.nix;
+
+  postInstall = ''
+    mv $bin/bin/gocode $bin/bin/gocode-gomod
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An autocompletion daemon for the Go programming language";
+    longDescription = ''
+      Gocode is a helper tool which is intended to be integrated with your
+      source code editor, like vim, neovim and emacs. It provides several
+      advanced capabilities, which currently includes:
+
+        - Context-sensitive autocompletion
+
+      It is called daemon, because it uses client/server architecture for
+      caching purposes. In particular, it makes autocompletions very fast.
+      Typical autocompletion time with warm cache is 30ms, which is barely
+      noticeable.
+    '';
+    homepage = https://github.com/stamblerre/gocode;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ kalbasit rvolosatovs ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gocode-gomod/deps.nix b/nixpkgs/pkgs/development/tools/gocode-gomod/deps.nix
new file mode 100644
index 000000000000..ac9662697063
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gocode-gomod/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "78dc5bac0cacea7969e98b79c3b86597e0aa4e25";
+      sha256 = "16jg2x1sfm39kz4rchn0gxyq99fnkxw6v51wxriqbs76a2wrznp9";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/gocode/default.nix b/nixpkgs/pkgs/development/tools/gocode/default.nix
new file mode 100644
index 000000000000..3351c0e986b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gocode/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "gocode-unstable-${version}";
+  version = "2018-11-05";
+  rev = "0af7a86943a6e0237c90f8aeb74a882e1862c898";
+
+  goPackagePath = "github.com/mdempsky/gocode";
+  excludedPackages = ''internal/suggest/testdata'';
+
+  # we must allow references to the original `go` package,
+  # because `gocode` needs to dig into $GOROOT to provide completions for the
+  # standard packages.
+  allowGoReference = true;
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "mdempsky";
+    repo = "gocode";
+    sha256 = "0fxqn0v6dbwarn444lc1xrx5vfkcidi73f4ba7l4clsb9qdqgyam";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "An autocompletion daemon for the Go programming language";
+    longDescription = ''
+      Gocode is a helper tool which is intended to be integrated with your
+      source code editor, like vim, neovim and emacs. It provides several
+      advanced capabilities, which currently includes:
+
+        - Context-sensitive autocompletion
+
+      It is called daemon, because it uses client/server architecture for
+      caching purposes. In particular, it makes autocompletions very fast.
+      Typical autocompletion time with warm cache is 30ms, which is barely
+      noticeable.
+    '';
+    homepage = https://github.com/mdempsky/gocode;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gocode/deps.nix b/nixpkgs/pkgs/development/tools/gocode/deps.nix
new file mode 100644
index 000000000000..ac9662697063
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gocode/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "78dc5bac0cacea7969e98b79c3b86597e0aa4e25";
+      sha256 = "16jg2x1sfm39kz4rchn0gxyq99fnkxw6v51wxriqbs76a2wrznp9";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/goconst/default.nix b/nixpkgs/pkgs/development/tools/goconst/default.nix
new file mode 100644
index 000000000000..9ef94ffdc7fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goconst/default.nix
@@ -0,0 +1,27 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "goconst-${version}";
+  version = "1.1.0";
+
+  goPackagePath = "github.com/jgautheron/goconst";
+  excludedPackages = ''testdata'';
+
+  src = fetchFromGitHub {
+    owner = "jgautheron";
+    repo = "goconst";
+    rev = version;
+    sha256 = "0zhscvv9w54q1h2vs8xx3qkz98cf36qhxjvdq0xyz3qvn4vhnyw6";
+  };
+
+  meta = with lib; {
+    description = "Find in Go repeated strings that could be replaced by a constant";
+    homepage = https://github.com/jgautheron/goconst;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/goconvey/default.nix b/nixpkgs/pkgs/development/tools/goconvey/default.nix
new file mode 100644
index 000000000000..fcdb56460e19
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goconvey/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "goconvey-${version}";
+  version = "1.6.3";
+
+  goPackagePath = "github.com/smartystreets/goconvey";
+  excludedPackages = "web/server/watch/integration_testing";
+
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "smartystreets";
+    repo = "goconvey";
+    rev = "${version}";
+    sha256 = "1ph18rkl3ns3fgin5i4j54w5a69grrmf3apcsmnpdn1wlrbs3dxh";
+  };
+
+  meta = {
+    description = "Go testing in the browser. Integrates with `go test`. Write behavioral tests in Go.";
+    homepage = https://github.com/smartystreets/goconvey;
+    maintainers = with stdenv.lib.maintainers; [ vdemeester ];
+    license = stdenv.lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/goconvey/deps.nix b/nixpkgs/pkgs/development/tools/goconvey/deps.nix
new file mode 100644
index 000000000000..d329359da709
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goconvey/deps.nix
@@ -0,0 +1,20 @@
+[
+  {
+    goPackagePath = "github.com/jtolds/gls";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jtolds/gls";
+      rev = "77f18212c9c7edc9bd6a33d383a7b545ce62f064";
+      sha256 = "1vm37pvn0k4r6d3m620swwgama63laz8hhj3pyisdhxwam4m2g1h";
+    };
+  }
+  {
+    goPackagePath = "github.com/smartystreets/assertions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smartystreets/assertions";
+      rev = "0b37b35ec7434b77e77a4bb29b79677cced992ea";
+      sha256 = "1j0adgbykl55rf2945g0n5bmqdsnjcqlx5dcmpfh4chki43hiwg9";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/gocyclo/default.nix b/nixpkgs/pkgs/development/tools/gocyclo/default.nix
new file mode 100644
index 000000000000..91ebaff803eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gocyclo/default.nix
@@ -0,0 +1,28 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "gocyclo-unstable-${version}";
+  version = "2015-02-08";
+  rev = "aa8f8b160214d8dfccfe3e17e578dd0fcc6fede7";
+
+  goPackagePath = "github.com/alecthomas/gocyclo";
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "alecthomas";
+    repo = "gocyclo";
+    sha256 = "094rj97q38j53lmn2scshrg8kws8c542yq5apih1ahm9wdkv8pxr";
+  };
+
+  meta = with lib; {
+    description = "Calculate cyclomatic complexities of functions in Go source code.";
+    homepage = https://github.com/alecthomas/gocyclo;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/godef/default.nix b/nixpkgs/pkgs/development/tools/godef/default.nix
new file mode 100644
index 000000000000..993305bd98fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godef/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "godef-${version}";
+  version = "1.1.1";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/rogpeppe/godef";
+  subPackages = [ "." ];
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "rogpeppe";
+    repo = "godef";
+    sha256 = "1bpzqnb9fsk1pjjap3gm94pqch1jz02rfah9hg8iqbfm0dzpy31b";
+  };
+
+  meta = {
+    description = "Print where symbols are defined in Go source code";
+    homepage = https://github.com/rogpeppe/godef/;
+    maintainers = with stdenv.lib.maintainers; [ vdemeester rvolosatovs ];
+    license = stdenv.lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/godot/default.nix b/nixpkgs/pkgs/development/tools/godot/default.nix
new file mode 100644
index 000000000000..7fd6fe623748
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/default.nix
@@ -0,0 +1,68 @@
+{ stdenv, lib, fetchFromGitHub, scons, pkgconfig, libX11, libXcursor
+, libXinerama, libXrandr, libXrender, libpulseaudio ? null
+, libXi ? null, libXext, libXfixes, freetype, openssl
+, alsaLib, libGLU, zlib, yasm ? null }:
+
+let
+  options = {
+    touch = libXi != null;
+    pulseaudio = false;
+  };
+in stdenv.mkDerivation rec {
+  name    = "godot-${version}";
+  version = "3.1.1";
+
+  src = fetchFromGitHub {
+    owner  = "godotengine";
+    repo   = "godot";
+    rev    = "${version}-stable";
+    sha256 = "0lplkwgshh0x7r1daai9gflzwjnp3yfx4724h1myvidaz234v2wh";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    scons libX11 libXcursor libXinerama libXrandr libXrender
+    libXi libXext libXfixes freetype openssl alsaLib libpulseaudio
+    libGLU zlib yasm
+  ];
+
+  patches = [
+    ./pkg_config_additions.patch
+    ./dont_clobber_environment.patch
+  ];
+
+  enableParallelBuilding = true;
+
+  sconsFlags = "target=release_debug platform=x11";
+  preConfigure = ''
+    sconsFlags+=" ${lib.concatStringsSep " " (lib.mapAttrsToList (k: v: "${k}=${builtins.toJSON v}") options)}"
+  '';
+
+  outputs = [ "out" "dev" "man" ];
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp bin/godot.* $out/bin/godot
+
+    mkdir "$dev"
+    cp -r modules/gdnative/include $dev
+
+    mkdir -p "$man/share/man/man6"
+    cp misc/dist/linux/godot.6 "$man/share/man/man6/"
+
+    mkdir -p "$out"/share/{applications,icons/hicolor/scalable/apps}
+    cp misc/dist/linux/org.godotengine.Godot.desktop "$out/share/applications/"
+    cp icon.svg "$out/share/icons/hicolor/scalable/apps/godot.svg"
+    cp icon.png "$out/share/icons/godot.png"
+    substituteInPlace "$out/share/applications/org.godotengine.Godot.desktop" \
+      --replace "Exec=godot" "Exec=$out/bin/godot"
+  '';
+
+  meta = {
+    homepage    = "https://godotengine.org";
+    description = "Free and Open Source 2D and 3D game engine";
+    license     = stdenv.lib.licenses.mit;
+    platforms   = [ "i686-linux" "x86_64-linux" ];
+    maintainers = [ stdenv.lib.maintainers.twey ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/godot/dont_clobber_environment.patch b/nixpkgs/pkgs/development/tools/godot/dont_clobber_environment.patch
new file mode 100644
index 000000000000..96a8464b5668
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/dont_clobber_environment.patch
@@ -0,0 +1,17 @@
++++ build/SConstruct
+@@ -63,10 +63,10 @@ elif platform_arg == 'javascript':
+     custom_tools = ['cc', 'c++', 'ar', 'link', 'textfile', 'zip']
+
+ env_base = Environment(tools=custom_tools)
+-if 'TERM' in os.environ:
+-    env_base['ENV']['TERM'] = os.environ['TERM']
+-env_base.AppendENVPath('PATH', os.getenv('PATH'))
+-env_base.AppendENVPath('PKG_CONFIG_PATH', os.getenv('PKG_CONFIG_PATH'))
++for k in ("TERM", "PATH", "PKG_CONFIG_PATH"):
++    if (k in os.environ):
++        env_base["ENV"][k] = os.environ[k]
++
+ env_base.android_maven_repos = []
+ env_base.android_flat_dirs = []
+ env_base.android_dependencies = []
+
diff --git a/nixpkgs/pkgs/development/tools/godot/pkg_config_additions.patch b/nixpkgs/pkgs/development/tools/godot/pkg_config_additions.patch
new file mode 100644
index 000000000000..409baaa6f266
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/pkg_config_additions.patch
@@ -0,0 +1,22 @@
++++ b/platform/x11/detect.py
+@@ -175,6 +175,11 @@ def configure(env):
+     env.ParseConfig('pkg-config xrender --cflags --libs')
+     env.ParseConfig('pkg-config xi --cflags --libs')
+ 
++    env.ParseConfig('pkg-config xext --cflags --libs')
++    env.ParseConfig('pkg-config xfixes --cflags --libs')
++    env.ParseConfig('pkg-config glu --cflags --libs')
++    env.ParseConfig('pkg-config zlib --cflags --libs')
++
+     if (env['touch']):
+         env.Append(CPPFLAGS=['-DTOUCH_ENABLED'])
+ 
+@@ -264,7 +269,7 @@ def configure(env):
+         print("Enabling ALSA")
+         env.Append(CPPFLAGS=["-DALSA_ENABLED", "-DALSAMIDI_ENABLED"])
+ 	# Don't parse --cflags, we don't need to add /usr/include/alsa to include path
+-        env.ParseConfig('pkg-config alsa --libs')
++        env.ParseConfig('pkg-config alsa --cflags --libs')
+     else:
+         print("ALSA libraries not found, disabling driver")
+ 
diff --git a/nixpkgs/pkgs/development/tools/gogetdoc/default.nix b/nixpkgs/pkgs/development/tools/gogetdoc/default.nix
new file mode 100644
index 000000000000..7724ee49465c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gogetdoc/default.nix
@@ -0,0 +1,31 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "gogetdoc-unstable-${version}";
+  version = "2018-10-25";
+  rev = "9098cf5fc236a5e25060730544af2ba6d65cd968";
+
+  goPackagePath = "github.com/zmb3/gogetdoc";
+  excludedPackages = "\\(testdata\\)";
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "zmb3";
+    repo = "gogetdoc";
+    sha256 = "159dgkd2lz07kimbpzminli5p539l4ry0dr93r46iz3lk5q76znl";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "Gets documentation for items in Go source code";
+    homepage = https://github.com/zmb3/gogetdoc;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gogetdoc/deps.nix b/nixpkgs/pkgs/development/tools/gogetdoc/deps.nix
new file mode 100644
index 000000000000..d770057d1d78
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gogetdoc/deps.nix
@@ -0,0 +1,13 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "6adeb8aab2de";
+      sha256 = "0kylkki0ksdm12ppl37fghzbma9hmgqwph0nwngv08v4blk6li6k";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/golangci-lint/default.nix b/nixpkgs/pkgs/development/tools/golangci-lint/default.nix
new file mode 100644
index 000000000000..f08705989563
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/golangci-lint/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  name = "golangci-lint-${version}";
+  version = "1.16.0";
+  goPackagePath = "github.com/golangci/golangci-lint";
+
+  subPackages = [ "cmd/golangci-lint" ];
+
+  src = fetchFromGitHub {
+    owner = "golangci";
+    repo = "golangci-lint";
+    rev = "v${version}";
+    sha256 = "1yzcfmrxyrxhq3vx13qm7czvhvdnaqay75v8ry1lgpg0bnh9pakx";
+  };
+
+  modSha256 = "1dsaj6qsac9y4rkssjbmk46vaqbblzdim2rbdh3dgn1m0vdpv505";
+
+  meta = with lib; {
+    description = "Linters Runner for Go. 5x faster than gometalinter. Nice colored output.";
+    homepage = https://golangci.com/;
+    license = licenses.agpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ anpryl manveru ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/golint/default.nix b/nixpkgs/pkgs/development/tools/golint/default.nix
new file mode 100644
index 000000000000..9d404546d008
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/golint/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  name = "lint-${version}";
+  version = "20181026-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "c67002cb31c3a748b7688c27f20d8358b4193582";
+  
+  goPackagePath = "golang.org/x/lint";
+  excludedPackages = "testdata";
+
+  # we must allow references to the original `go` package, as golint uses
+  # compiler go/build package to load the packages it's linting.
+  allowGoReference = true;
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://go.googlesource.com/lint";
+    sha256 = "0gymbggskjmphqxqcx4s0vnlcz7mygbix0vhwcwv5r67c0bf6765";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    homepage = https://golang.org;
+    description = "Linter for Go source code";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jhillyerd ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/golint/deps.nix b/nixpkgs/pkgs/development/tools/golint/deps.nix
new file mode 100644
index 000000000000..e26400989338
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/golint/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "91f80e683c10fea00e7f965a1a7cac482ce52541";
+      sha256 = "16a2vppy5hnp663f28yak6592l8p968ihsc91pigamxx3vk1qh5d";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/gometalinter/default.nix b/nixpkgs/pkgs/development/tools/gometalinter/default.nix
new file mode 100644
index 000000000000..f63d33138fc2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gometalinter/default.nix
@@ -0,0 +1,70 @@
+{ buildGoPackage
+, deadcode
+, errcheck
+, fetchFromGitHub
+, go
+, go-check
+, go-tools
+, goconst
+, gocyclo
+, golint
+, gosec
+, gotools
+, ineffassign
+, maligned
+, interfacer
+, lib
+, makeWrapper
+, unconvert
+}:
+
+with lib;
+
+let
+  runtimeDeps = [
+    deadcode
+    errcheck
+    go
+    go-check
+    go-tools
+    goconst
+    gocyclo
+    golint
+    gosec
+    gotools
+    ineffassign
+    interfacer
+    maligned
+    unconvert
+  ];
+
+in buildGoPackage rec {
+  name = "gometalinter-${version}";
+  version = "3.0.0";
+
+  goPackagePath = "github.com/alecthomas/gometalinter";
+  excludedPackages = "\\(regressiontests\\)";
+
+  src = fetchFromGitHub {
+    owner = "alecthomas";
+    repo = "gometalinter";
+    rev = "v${version}";
+    sha256 = "06dd60531qp0hxfwnxnyi36d6div1j781jvcb99ykhgrg0kwmzq9";
+  };
+
+  postInstall = ''
+    wrapProgram $bin/bin/gometalinter --prefix PATH : "${makeBinPath runtimeDeps}"
+  '';
+
+  buildInputs = [ makeWrapper ];
+
+  allowGoReference = true;
+
+  meta = with lib; {
+    description = "Concurrently run Go lint tools and normalise their output";
+    homepage = https://github.com/alecthomas/gometalinter;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit rvolosatovs ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gomodifytags/default.nix b/nixpkgs/pkgs/development/tools/gomodifytags/default.nix
new file mode 100644
index 000000000000..112e1769f212
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gomodifytags/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "gomodifytags-unstable-${version}";
+  version = "2018-09-14";
+  rev = "141225bf62b6e5c9c0c9554a2e993e8c30aebb1d";
+
+  goPackagePath = "github.com/fatih/gomodifytags";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "fatih";
+    repo = "gomodifytags";
+    sha256 = "16qbp594l90qpvf388wlv0kf6wvqj1vz2mqq0g3qcz6dkrc4cjqa";
+  };
+
+  meta = {
+    description = "Go tool to modify struct field tags.";
+    homepage = https://github.com/fatih/gomodifytags;
+    maintainers = with stdenv.lib.maintainers; [ vdemeester ];
+    license = stdenv.lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/google-app-engine-go-sdk/default.nix b/nixpkgs/pkgs/development/tools/google-app-engine-go-sdk/default.nix
new file mode 100644
index 000000000000..ba4f4bb3f519
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/google-app-engine-go-sdk/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchzip, python27, python27Packages, makeWrapper }:
+
+with python27Packages;
+
+stdenv.mkDerivation rec {
+  name = "google-app-engine-go-sdk-${version}";
+  version = "1.9.61";
+  src =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      fetchzip {
+        url = "https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_linux_amd64-${version}.zip";
+        sha256 = "1i2j9ympl1218akwsmm7yb31v0gibgpzlb657bcravi1irfv1hhs";
+      }
+    else
+      fetchzip {
+        url = "https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_darwin_amd64-${version}.zip";
+        sha256 = "0s8sqyc72lnc7dxd4cl559gyfx83x71jjpsld3i3nbp3mwwamczp";
+      };
+
+  buildInputs = [python27 makeWrapper];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/
+    cp -r "$src" "$out/share/go_appengine"
+
+    # create wrappers with correct env
+    for i in goapp go-app-stager *.py; do
+      makeWrapper "$out/share/go_appengine/$i" "$out/bin/$i" \
+        --prefix PATH : "${python27}/bin" \
+        --prefix PYTHONPATH : "$(toPythonPath ${cffi}):$(toPythonPath ${cryptography}):$(toPythonPath ${pyopenssl})"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Google App Engine SDK for Go";
+    version = version;
+    homepage = https://cloud.google.com/appengine/docs/go/;
+    license = licenses.asl20;
+    platforms = ["x86_64-linux" "x86_64-darwin"];
+    maintainers = with maintainers; [ lufia ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gopkgs/default.nix b/nixpkgs/pkgs/development/tools/gopkgs/default.nix
new file mode 100644
index 000000000000..89a1da772701
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gopkgs/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "gopkgs-${version}";
+  version = "2.0.1";
+
+  goPackagePath = "github.com/uudashr/gopkgs";
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "uudashr";
+    repo = "gopkgs";
+    sha256 = "03zfwkmzwx2knkghky3irb2r78lbc1ccszjcg9y445b4pbqkn6w4";
+  };
+
+  meta = {
+    description = "Tool to get list available Go packages.";
+    homepage = https://github.com/uudashr/gopkgs;
+    maintainers = with stdenv.lib.maintainers; [ vdemeester ];
+    license = stdenv.lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gopkgs/deps.nix b/nixpkgs/pkgs/development/tools/gopkgs/deps.nix
new file mode 100644
index 000000000000..715c7bbbc824
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gopkgs/deps.nix
@@ -0,0 +1,21 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/karrick/godirwalk";
+    fetch = {
+      type = "git";
+      url = "https://github.com/karrick/godirwalk";
+      rev =  "5cc8b3875be6c21825a1b54d3029ed415c93c4f7";
+      sha256 = "02nlyr0sa0lj1f27fsrxlspcsrx7fs60qwr33l5r6yq52axcikcd";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev =  "645ef00459ed84a119197bfb8d8205042c6df63d";
+      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/gosec/default.nix b/nixpkgs/pkgs/development/tools/gosec/default.nix
new file mode 100644
index 000000000000..7ee87b8f8483
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gosec/default.nix
@@ -0,0 +1,29 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "gosec-${version}";
+  version = "1.2.0";
+
+  goPackagePath = "github.com/securego/gosec";
+  excludedPackages = ''cmd/tlsconfig'';
+
+  src = fetchFromGitHub {
+    owner = "securego";
+    repo = "gosec";
+    rev = "${version}";
+    sha256 = "1420yl4cjp4v4xv0l0wbahgl6bjhz77lx5va9hqa6abddmqvx1hg";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "Golang security checker";
+    homepage = https://github.com/securego/gosec;
+    license = licenses.asl20 ;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gosec/deps.nix b/nixpkgs/pkgs/development/tools/gosec/deps.nix
new file mode 100644
index 000000000000..80a77e7fb807
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gosec/deps.nix
@@ -0,0 +1,193 @@
+# 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/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "v1.2.0";
+      sha256 = "0kf4b59rcbb1cchfny2dm9jyznp8ri2hsb14n8iak1q8986xa0ab";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/kisielk/gotool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kisielk/gotool";
+      rev = "0de1eaf82fa3";
+      sha256 = "177af7bjq6clmkqshnmnwlpwvx80kpi2277q275iwq59lp48viq1";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/kr/pretty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/pretty";
+      rev = "v0.1.0";
+      sha256 = "18m4pwg2abd0j9cn5v3k2ksk9ig4vlwxmlw9rrglanziv9l967qp";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/kr/pty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/pty";
+      rev = "v1.1.1";
+      sha256 = "0383f0mb9kqjvncqrfpidsf8y6ns5zlrc91c6a74xpyxjwvzl2y6";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/kr/text";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/text";
+      rev = "v0.1.0";
+      sha256 = "1gm5bsl01apvc84bw06hasawyqm4q84vx1pm32wr9jnd7a8vjgj1";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/nbutton23/zxcvbn-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nbutton23/zxcvbn-go";
+      rev = "a22cb81b2ecd";
+      sha256 = "0hm16vc7xrw0cqla6xcn59bb7n2sa0j8rkniywn5dqnbrpza12cd";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/onsi/ginkgo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/onsi/ginkgo";
+      rev = "11459a886d9c";
+      sha256 = "1nswc1fnrrs792qbix05h91bilj8rr3wxmxgwi97p2gjk0r292zh";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/onsi/gomega";
+    fetch = {
+      type = "git";
+      url = "https://github.com/onsi/gomega";
+      rev = "dcabb60a477c";
+      sha256 = "1775lv5jbsgv3ghq5v2827slqlhqdadrzc1nkpq4y0hdv2qzrgkm";
+    };
+  }
+
+  {
+    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/ryanuber/go-glob";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ryanuber/go-glob";
+      rev = "256dc444b735";
+      sha256 = "07rsd7hranghwc68ib0r2zxd9d5djanzjvd84j9dgj3wqsyg5mi2";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "v1.2.2";
+      sha256 = "0dlszlshlxbmmfxj5hlwgv3r22x0y1af45gn1vd198nvvs3pnvfs";
+    };
+  }
+
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "8351a756f30f";
+      sha256 = "0b6m579i3wrx1m69mqkdng5gjfssprxx0pg45kzrdi68sh0zr5d1";
+    };
+  }
+
+  {
+    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 = "164713f0dfce";
+      sha256 = "1qn9vvyqsaaj0az0rbilzc4pfv9sl4vh78c2g37yya5gcdnarh3w";
+    };
+  }
+
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "1cbadb444a80";
+      sha256 = "0ih9ysagh4ylj08393497sscf3yziybc6acg4mrh0wa7mld75j56";
+    };
+  }
+
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "e531a2a1c15f";
+      sha256 = "0740w56nmjqdj7ld1h3gpcpi3x8n81bdx0pp267rz9hmwkrb2s1c";
+    };
+  }
+
+  {
+    goPackagePath = "gopkg.in/check.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/check.v1";
+      rev = "788fd7840127";
+      sha256 = "0v3bim0j375z81zrpr5qv42knqs0y2qv2vkjiqi5axvb78slki1a";
+    };
+  }
+
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "eb3733d160e7";
+      sha256 = "1srhvcaa9db3a6xj29mkjr5kg33y71pclrlx4vcwz5m1lgb5c7q6";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/gotags/default.nix b/nixpkgs/pkgs/development/tools/gotags/default.nix
new file mode 100644
index 000000000000..b8230561fb42
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotags/default.nix
@@ -0,0 +1,15 @@
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  name = "gotags-${version}";
+  version = "20150803-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "be986a34e20634775ac73e11a5b55916085c48e7";
+  
+  goPackagePath = "github.com/jstemmer/gotags";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/jstemmer/gotags";
+    sha256 = "071wyq90b06xlb3bb0l4qjz1gf4nnci4bcngiddfcxf2l41w1vja";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gotests/default.nix b/nixpkgs/pkgs/development/tools/gotests/default.nix
new file mode 100644
index 000000000000..8eb65281b3fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotests/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "gotests-${version}";
+  version = "1.5.3";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/cweill/gotests";
+  excludedPackages = "testdata";
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "cweill";
+    repo = "gotests";
+    sha256 = "1c0hly31ax0wk01zdx0l0yl40xybaizjfb3gjxia2z0mgx330dq9";
+  };
+
+  meta = {
+    description = "Generate Go tests from your source code.";
+    homepage = https://github.com/cweill/gotests;
+    maintainers = with stdenv.lib.maintainers; [ vdemeester ];
+    license = stdenv.lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gotests/deps.nix b/nixpkgs/pkgs/development/tools/gotests/deps.nix
new file mode 100644
index 000000000000..df411303d944
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotests/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "23463209683dad3f2b9cc7f7c2663e1847c59017";
+      sha256 = "1shzfl4zixhj78v4f6y04bcmfl705yr5q8hp72ndbbma0mh09g8f";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/gotools/default.nix b/nixpkgs/pkgs/development/tools/gotools/default.nix
new file mode 100644
index 000000000000..9bb57bfe5029
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotools/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, go, buildGoModule, fetchgit }:
+
+buildGoModule rec {
+  name = "gotools-unstable-${version}";
+  version = "2019-06-03";
+  rev = "8aaa1484dc108aa23dcf2d4a09371c0c9e280f6b";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://go.googlesource.com/tools";
+    sha256 = "0sa41fi38b6pvz7jjr6vqrd152qjvmbcagm1qdxw41vqcdw3ljx3";
+  };
+
+  modSha256 = "0cm7fwb1k5hvbhh86kagzsw5vwgkr6dr7glhbjxg5xaahlhx2w5w";
+
+  postConfigure = ''
+    # Make the builtin tools available here
+    mkdir -p $out/bin
+    eval $(go env | grep GOTOOLDIR)
+    find $GOTOOLDIR -type f | while read x; do
+      ln -sv "$x" "$out/bin"
+    done
+    export GOTOOLDIR=$out/bin
+  '';
+
+  excludedPackages = "\\("
+    + stdenv.lib.concatStringsSep "\\|" ([ "testdata" ] ++ stdenv.lib.optionals (stdenv.lib.versionAtLeast go.meta.branch "1.5") [ "vet" "cover" ])
+    + "\\)";
+
+  # Set GOTOOLDIR for derivations adding this to buildInputs
+  postInstall = ''
+    mkdir -p $out/nix-support
+    substituteAll ${../../go-modules/tools/setup-hook.sh} $out/nix-support/setup-hook.tmp
+    cat $out/nix-support/setup-hook.tmp >> $out/nix-support/setup-hook
+    rm $out/nix-support/setup-hook.tmp
+  '';
+
+  # Do not copy this without a good reason for enabling
+  # In this case tools is heavily coupled with go itself and embeds paths.
+  allowGoReference = true;
+}
diff --git a/nixpkgs/pkgs/development/tools/govendor/default.nix b/nixpkgs/pkgs/development/tools/govendor/default.nix
new file mode 100644
index 000000000000..2030c8ba444a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/govendor/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "govendor-${version}";
+  version = "1.0.9";
+
+  goPackagePath = "github.com/kardianos/govendor";
+
+  src = fetchFromGitHub {
+    owner = "kardianos";
+    repo = "govendor";
+    rev = "v${version}";
+    sha256 = "0g02cd25chyijg0rzab4xr627pkvk5k33mscd6r0gf1v5xvadcfq";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/kardianos/govendor";
+    description = "Go vendor tool that works with the standard vendor file";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/govers/default.nix b/nixpkgs/pkgs/development/tools/govers/default.nix
new file mode 100644
index 000000000000..152b619966c9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/govers/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  name = "govers-${version}";
+  version = "20160623-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "77fd787551fc5e7ae30696e009e334d52d2d3a43";
+
+  goPackagePath = "github.com/rogpeppe/govers";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/rogpeppe/govers";
+    sha256 = "12w83vyi8mgn48fwdm2js693qcydimxapg8rk0yf01w0ab03r5wn";
+  };
+
+  dontRenameImports = true;
+
+  doCheck = false; # fails, silently
+
+}
diff --git a/nixpkgs/pkgs/development/tools/gox/default.nix b/nixpkgs/pkgs/development/tools/gox/default.nix
new file mode 100644
index 000000000000..b28bf24892c2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gox/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "gox-${version}";
+  version = "20181025";
+
+  goPackagePath = "github.com/mitchellh/gox";
+
+  src = fetchFromGitHub {
+    owner = "mitchellh";
+    repo = "gox";
+    rev = "9cc487598128d0963ff9dcc51176e722788ec645";
+    sha256 = "18indkdwq2m1wy95d71lgbf46jxxrfc5km1fys5laapz993h77v6";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/mitchellh/gox;
+    description = "A dead simple, no frills Go cross compile tool";
+    platforms = platforms.all;
+    license = licenses.mpl20;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/gox/deps.nix b/nixpkgs/pkgs/development/tools/gox/deps.nix
new file mode 100644
index 000000000000..c4991e38ff02
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gox/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "github.com/mitchellh/iochan";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/iochan";
+      rev = "87b45ffd0e9581375c491fef3d32130bb15c5bd7";
+      sha256 = "1435kdcx3j1xgr6mm5c7w7hjx015jb20yfqlkp93q143hspf02fx";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/gpp/default.nix b/nixpkgs/pkgs/development/tools/gpp/default.nix
new file mode 100644
index 000000000000..461110b63d71
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gpp/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  name = "gpp-${version}";
+  version = "2.25";
+
+  src = fetchFromGitHub {
+    owner = "logological";
+    repo = "gpp";
+    rev = "96c5dd8905384ea188f380f51d24cbd7fd58f642";
+    sha256 = "0bvhnx3yfhbfiqqhhz6k2a596ls5rval7ykbp3jl5b6062xj861b";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  installCheckPhase = "$out/bin/gpp --help";
+  doInstallCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "General-purpose preprocessor with customizable syntax";
+    homepage = "https://logological.org/gpp";
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ nmattia ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/grabserial/default.nix b/nixpkgs/pkgs/development/tools/grabserial/default.nix
new file mode 100644
index 000000000000..c86c2e275ed1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/grabserial/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchgit, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+
+  name = "grabserial-1.9.3";
+  namePrefix = "";
+
+  src = fetchgit {
+    url = https://github.com/tbird20d/grabserial.git;
+    rev  = "7cbf104b61ffdf68e6782a8e885050565399a014";
+    sha256 = "043r2p5jw0ymx8ka1d39q1ap39i7sliq5f4w3yr1n53lzshjmc5g";
+  };
+
+  propagatedBuildInputs = [ pythonPackages.pyserial ];
+
+  meta = {
+    description = "Python based serial dump and timing program";
+    homepage = https://github.com/tbird20d/grabserial;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [ vmandela ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gron/default.nix b/nixpkgs/pkgs/development/tools/gron/default.nix
new file mode 100644
index 000000000000..ebe76197ef4e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gron/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "gron-${version}";
+  version = "0.6.0";
+
+  owner = "tomnomnom";
+  repo = "gron";
+  goPackagePath = "github.com/${owner}/${repo}";
+
+  src = fetchFromGitHub {
+    inherit owner repo;
+    rev = "v${version}";
+    sha256 = "05f3w4zr15wd7xk75l12y5kip4gnv719a2x9w2hy23q3pnss9wk0";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Make JSON greppable!";
+    longDescription = ''
+      gron transforms JSON into discrete assignments to make it easier to grep
+      for what you want and see the absolute 'path' to it. It eases the
+      exploration of APIs that return large blobs of JSON but have terrible
+      documentation.
+    '';
+    homepage = "https://github.com/tomnomnom/gron";
+    license = licenses.mit;
+    maintainers = [ maintainers.fgaz ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gron/deps.nix b/nixpkgs/pkgs/development/tools/gron/deps.nix
new file mode 100644
index 000000000000..effc255d877e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gron/deps.nix
@@ -0,0 +1,57 @@
+[
+  rec {
+    owner = "fatih";
+    repo = "color";
+    goPackagePath = "github.com/${owner}/${repo}";
+    fetch = {
+      type = "git";
+      url = "https://github.com/${owner}/${repo}";
+      rev = "v1.7.0";
+      sha256 = "0v8msvg38r8d1iiq2i5r4xyfx0invhc941kjrsg5gzwvagv55inv";
+    };
+  }
+  rec {
+    owner = "nwidger";
+    repo = "jsoncolor";
+    goPackagePath = "github.com/${owner}/${repo}";
+    fetch = {
+      type = "git";
+      url = "https://github.com/${owner}/${repo}";
+      rev = "75a6de4340e59be95f0884b9cebdda246e0fdf40";
+      sha256 = "0aiv42xijrqgrxfx6pfyrndpwqv8i1qwsk190jdczyjxlnki2nki";
+    };
+  }
+  rec {
+    owner = "pkg";
+    repo = "errors";
+    goPackagePath = "github.com/${owner}/${repo}";
+    fetch = {
+      type = "git";
+      url = "https://github.com/${owner}/${repo}";
+      rev = "v0.8.0";
+      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+    };
+  }
+  rec {
+    owner = "mattn";
+    repo = "go-colorable";
+    goPackagePath = "github.com/${owner}/${repo}";
+    fetch = {
+      type = "git";
+      url = "https://github.com/${owner}/${repo}";
+      rev = "v0.0.9";
+      sha256 = "1nwjmsppsjicr7anq8na6md7b1z84l9ppnlr045hhxjvbkqwalvx";
+    };
+  }
+  rec {
+    owner = "mattn";
+    repo = "go-isatty";
+    goPackagePath = "github.com/${owner}/${repo}";
+    fetch = {
+      type = "git";
+      url = "https://github.com/${owner}/${repo}";
+      rev = "v0.0.4";
+      sha256 = "0zs92j2cqaw9j8qx1sdxpv3ap0rgbs0vrvi72m40mg8aa36gd39w";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/gtk-mac-bundler/default.nix b/nixpkgs/pkgs/development/tools/gtk-mac-bundler/default.nix
new file mode 100644
index 000000000000..833b41ae985b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gtk-mac-bundler/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "gtk-mac-bundler-${version}";
+  version = "0.7.4";
+
+  src = fetchFromGitHub {
+    owner = "GNOME";
+    repo = "gtk-mac-bundler";
+    rev = "bundler-${version}";
+    sha256 = "1kyyq2hc217i5vhbfff0ldgv0r3aziwryd1xlck5cw3s6hgskbza";
+  };
+
+  installPhase = ''
+  	mkdir -p $out/bin
+    substitute gtk-mac-bundler.in $out/bin/gtk-mac-bundler \
+      --subst-var-by PATH $out/share
+    chmod a+x $out/bin/gtk-mac-bundler
+
+    mkdir -p $out/share
+    cp -r bundler $out/share
+  '';
+
+  meta = with lib; {
+    description = "a helper script that creates application bundles form GTK+ executables for macOS";
+    maintainers = [ maintainers.matthewbauer ];
+    platforms = platforms.darwin;
+    homepage = https://wiki.gnome.org/Projects/GTK+/OSX/Bundling;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/guile/g-wrap/default.nix b/nixpkgs/pkgs/development/tools/guile/g-wrap/default.nix
new file mode 100644
index 000000000000..78f2e967123b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/guile/g-wrap/default.nix
@@ -0,0 +1,35 @@
+{ fetchurl, stdenv, guile, guile-lib, libffi, pkgconfig, glib }:
+
+stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+  pname = "g-wrap";
+  version = "1.9.15";
+
+  src = fetchurl {
+    url = "mirror://savannah/${pname}/${name}.tar.gz";
+    sha256 = "0ak0bha37dfpj9kmyw1r8fj8nva639aw5xr66wr5gd3l1rqf5xhg";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  # Note: Glib support is optional, but it's quite useful (e.g., it's used by
+  # Guile-GNOME).
+  buildInputs = [ guile glib guile-lib ];
+
+  propagatedBuildInputs = [ libffi ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "A wrapper generator for Guile";
+    longDescription = ''
+      G-Wrap is a tool (and Guile library) for generating function wrappers for
+      inter-language calls.  It currently only supports generating Guile
+      wrappers for C functions.
+    '';
+    homepage = "https://www.nongnu.org/g-wrap/";
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ vyp ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/guile/guile-lint/default.nix b/nixpkgs/pkgs/development/tools/guile/guile-lint/default.nix
new file mode 100644
index 000000000000..fd9347a4007f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/guile/guile-lint/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, guile }:
+
+stdenv.mkDerivation rec {
+  name = "guile-lint-${version}";
+  version = "14";
+
+  src = fetchurl {
+    url = "https://download.tuxfamily.org/user42/${name}.tar.bz2";
+    sha256 = "1gnhnmki05pkmzpbfc07vmb2iwza6vhy75y03bw2x2rk4fkggz2v";
+  };
+
+  buildInputs = [ guile ];
+
+  unpackPhase = ''tar xjvf "$src" && sourceRoot="$PWD/${name}"'';
+
+  prePatch = ''
+    substituteInPlace guile-lint.in --replace \
+      "exec guile" "exec ${guile}/bin/guile"
+  '';
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with stdenv.lib; {
+    description = "Checks syntax and semantics in a Guile program or module";
+    homepage = "https://user42.tuxfamily.org/guile-lint/index.html";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ vyp ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/hyper-haskell/default.nix b/nixpkgs/pkgs/development/tools/haskell/hyper-haskell/default.nix
new file mode 100644
index 000000000000..3b52c262c0c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/hyper-haskell/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchFromGitHub, jshon, electron
+, runtimeShell, hyper-haskell-server, extra-packages ? [] }:
+
+let
+  binPath = stdenv.lib.makeBinPath ([ hyper-haskell-server ] ++ extra-packages);
+
+in stdenv.mkDerivation rec {
+  name = "hyper-haskell-${version}";
+  version = "0.1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "HeinrichApfelmus";
+    repo = "hyper-haskell";
+    rev = "v${version}";
+    sha256 = "1k38h7qx12z7463z8466pji0nwfkp4qkg7q83kns2mzmwmw5jnmb";
+  };
+
+  propagatedBuildInputs = extra-packages;
+
+  buildCommand = ''
+    mkdir -p $out/bin $out/share/hyper-haskell/worksheets $out/share/applications $out/share/icons/hicolor/scalable/apps $out/share/mime/packages
+
+    # Electron app
+    cp -R $src/app $out
+
+    # Desktop Launcher
+    cp $src/resources/hyper-haskell.desktop $out/share/applications/hyper-haskell.desktop
+    cp $src/resources/icons/icon.svg $out/share/icons/hicolor/scalable/apps/hyper-haskell.svg
+    cp $src/resources/shared-mime-info.xml $out/share/mime/packages/hyper-haskell.xml
+
+    # install example worksheets with backend set to nix
+    for worksheet in "$src/worksheets/"*.hhs; do
+      ${jshon}/bin/jshon -e settings -s nix -i packageTool -p < $worksheet > $out/share/hyper-haskell/worksheets/`basename $worksheet`
+    done
+
+    # install electron wrapper script
+    cat > $out/bin/hyper-haskell <<EOF
+    #!${runtimeShell}
+    export PATH="${binPath}:\$PATH"
+    exec ${electron}/bin/electron $out/app "\$@"
+    EOF
+    chmod 755 $out/bin/hyper-haskell
+  '';
+
+  meta = with stdenv.lib; {
+    description = "The strongly hyped graphical interpreter for the Haskell programming language";
+    homepage = "https://github.com/HeinrichApfelmus/hyper-haskell";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.rvl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/hyper-haskell/server.nix b/nixpkgs/pkgs/development/tools/haskell/hyper-haskell/server.nix
new file mode 100644
index 000000000000..47a9c550fa8b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/hyper-haskell/server.nix
@@ -0,0 +1,21 @@
+{ stdenv, ghcWithPackages, makeWrapper, packages }:
+
+let
+hyperHaskellEnv = ghcWithPackages (self: [ self.hyper-haskell-server ] ++ packages self);
+in stdenv.mkDerivation {
+  name = "hyper-haskell-server-with-packages-${hyperHaskellEnv.version}";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    mkdir -p $out/bin
+    makeWrapper ${hyperHaskellEnv}/bin/hyper-haskell-server $out/bin/hyper-haskell-server \
+      --set NIX_GHC ${hyperHaskellEnv}/bin/ghc \
+      --set NIX_GHCPKG ${hyperHaskellEnv}/bin/ghc-pkg \
+      --set NIX_GHC_LIBDIR ${hyperHaskellEnv}/lib/ghc-*
+  '';
+
+  # trivial derivation
+  preferLocalBuild = true;
+  allowSubstitutes = false;
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/ihaskell/wrapper.nix b/nixpkgs/pkgs/development/tools/haskell/ihaskell/wrapper.nix
new file mode 100644
index 000000000000..0f42a5e34903
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/ihaskell/wrapper.nix
@@ -0,0 +1,28 @@
+{ stdenv, writeScriptBin, makeWrapper, buildEnv, haskell, ghcWithPackages, jupyter, packages }:
+let
+  ihaskellEnv = ghcWithPackages (self: [
+    self.ihaskell
+    (haskell.lib.doJailbreak self.ihaskell-blaze)
+    (haskell.lib.doJailbreak self.ihaskell-diagrams)
+    (haskell.lib.doJailbreak self.ihaskell-display)
+  ] ++ packages self);
+  ihaskellSh = writeScriptBin "ihaskell-notebook" ''
+    #! ${stdenv.shell}
+    export GHC_PACKAGE_PATH="$(echo ${ihaskellEnv}/lib/*/package.conf.d| tr ' ' ':'):$GHC_PACKAGE_PATH"
+    export PATH="${stdenv.lib.makeBinPath ([ ihaskellEnv jupyter ])}\${PATH:+':'}$PATH"
+    ${ihaskellEnv}/bin/ihaskell install -l $(${ihaskellEnv}/bin/ghc --print-libdir) && ${jupyter}/bin/jupyter notebook
+  '';
+in
+buildEnv {
+  name = "ihaskell-with-packages";
+  buildInputs = [ makeWrapper ];
+  paths = [ ihaskellEnv jupyter ];
+  postBuild = ''
+    ln -s ${ihaskellSh}/bin/ihaskell-notebook $out/bin/
+    for prg in $out/bin"/"*;do
+      if [[ -f $prg && -x $prg ]]; then
+        wrapProgram $prg --set PYTHONPATH "$(echo ${jupyter}/lib/*/site-packages)"
+      fi
+    done
+  '';
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/lambdabot/custom-config.patch b/nixpkgs/pkgs/development/tools/haskell/lambdabot/custom-config.patch
new file mode 100644
index 000000000000..db467f8dd29b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/lambdabot/custom-config.patch
@@ -0,0 +1,49 @@
+diff --git a/src/Main.hs b/src/Main.hs
+index 61da2f3..39e5c9b 100644
+--- a/src/Main.hs
++++ b/src/Main.hs
+@@ -73,11 +73,14 @@ main = do
+     config' <- sequence config
+     dir <- P.getDataDir
+     exitWith <=< lambdabotMain modulesInfo $
+-        [dataDir ==> dir, lbVersion ==> P.version] ++ config'
++        [dataDir ==> dir, lbVersion ==> P.version] ++ configInfo ++ config'
+ 
+ -- special online target for ghci use
+ online :: [String] -> IO ()
+ online strs = do
+     dir <- P.getDataDir
+-    void $ lambdabotMain modulesInfo
+-        [dataDir ==> dir, lbVersion ==> P.version, onStartupCmds ==> strs]
++    void $ lambdabotMain modulesInfo $
++        [dataDir ==> dir, lbVersion ==> P.version, onStartupCmds ==> strs] ++ configInfo
++
++configInfo :: [DSum Config Identity]
++configInfo = @config@
+diff --git a/src/Modules.hs b/src/Modules.hs
+index 036ea1f..eaafa50 100644
+--- a/src/Modules.hs
++++ b/src/Modules.hs
+@@ -14,10 +14,15 @@ import Lambdabot.Plugin.Reference
+ import Lambdabot.Plugin.Social
+ 
+ modulesInfo :: Modules
+-modulesInfo = $(modules $ corePlugins
+-    ++ haskellPlugins
+-    ++ ["irc", "localtime", "topic"] -- ircPlugins
+-    ++ ["dummy", "fresh", "todo"] -- miscPlugins
+-    ++ ["bf", "dice", "elite", "filter", "quote", "slap", "unlambda", "vixen"] -- noveltyPlugins
+-    ++ referencePlugins
+-    ++ socialPlugins)
++modulesInfo =
++  $(modules $
++    let oldDefaultModules =
++          corePlugins
++          ++ haskellPlugins
++          ++ ["irc", "localtime", "topic"] -- ircPlugins
++          ++ ["dummy", "fresh", "todo"] -- miscPlugins
++          ++ ["bf", "dice", "elite", "filter", "quote", "slap", "unlambda", "vixen"] -- noveltyPlugins
++          ++ referencePlugins
++          ++ socialPlugins
++    in @modules@
++   )
diff --git a/nixpkgs/pkgs/development/tools/haskell/lambdabot/default.nix b/nixpkgs/pkgs/development/tools/haskell/lambdabot/default.nix
new file mode 100644
index 000000000000..5e372b4f3874
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/lambdabot/default.nix
@@ -0,0 +1,41 @@
+{ lib, haskellLib, makeWrapper, haskellPackages
+, mueval
+, withDjinn ? true
+, aspell ? null
+, packages ? (pkgs: [])
+, modules ? "oldDefaultModules"
+, configuration ? "[]"
+}:
+
+let allPkgs = pkgs: mueval.defaultPkgs pkgs ++ [ pkgs.lambdabot-trusted ] ++ packages pkgs;
+    mueval' = mueval.override {
+      inherit haskellPackages;
+      packages = allPkgs;
+    };
+    bins = lib.makeBinPath ([ mueval'
+                              (haskellPackages.ghcWithHoogle allPkgs)
+                              haskellPackages.unlambda
+                              haskellPackages.brainfuck
+                            ]
+                            ++ lib.optional withDjinn haskellPackages.djinn
+                            ++ lib.optional (aspell != null) aspell
+                           );
+    modulesStr = lib.replaceChars ["\n"] [" "] modules;
+    configStr = lib.replaceChars ["\n"] [" "] configuration;
+
+in haskellLib.overrideCabal haskellPackages.lambdabot (self: {
+  patches = (self.patches or []) ++ [ ./custom-config.patch ];
+  postPatch = (self.postPatch or "") + ''
+    substituteInPlace src/Main.hs \
+      --replace '@config@' '${configStr}'
+    substituteInPlace src/Modules.hs \
+      --replace '@modules@' '${modulesStr}'
+  '';
+
+  buildTools = (self.buildTools or []) ++ [ makeWrapper ];
+
+  postInstall = (self.postInstall or "") + ''
+    wrapProgram $out/bin/lambdabot \
+      --prefix PATH ":" '${bins}'
+  '';
+})
diff --git a/nixpkgs/pkgs/development/tools/haskell/mueval/default.nix b/nixpkgs/pkgs/development/tools/haskell/mueval/default.nix
new file mode 100644
index 000000000000..3b4a6406f703
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/mueval/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, makeWrapper, haskellPackages, packages ? (pkgs: [])
+}:
+
+let defaultPkgs = pkgs: [ pkgs.show
+                          pkgs.simple-reflect
+                          pkgs.QuickCheck
+                          pkgs.mtl
+                        ];
+    env = haskellPackages.ghcWithPackages
+           (pkgs: defaultPkgs pkgs ++ packages pkgs);
+    libDir = "${env}/lib/ghc-${env.version}";
+
+in stdenv.mkDerivation {
+  name = "mueval-env";
+
+  inherit (haskellPackages) mueval;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    mkdir -p $out/bin
+
+    makeWrapper $mueval/bin/mueval $out/bin/mueval \
+      --prefix PATH ":" "$out/bin"
+
+    makeWrapper $mueval/bin/mueval-core $out/bin/mueval \
+      --set "NIX_GHC_LIBDIR" "${libDir}"
+
+  '';
+
+  passthru = { inherit defaultPkgs; };
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/multi-ghc-travis/default.nix b/nixpkgs/pkgs/development/tools/haskell/multi-ghc-travis/default.nix
new file mode 100644
index 000000000000..2d1ce7f8758c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/multi-ghc-travis/default.nix
@@ -0,0 +1,29 @@
+{ mkDerivation, ansi-terminal, base, bytestring, Cabal, containers
+, deepseq, Diff, directory, filepath, ShellCheck, stdenv, tasty
+, tasty-golden, transformers, fetchFromGitHub
+}:
+
+mkDerivation {
+  pname = "haskell-ci";
+  version = "0";
+  src = fetchFromGitHub {
+    owner = "haskell-CI";
+    repo = "haskell-ci";
+    rev = "18a7f5edcde360cea0740ff143eff1113ecda7d2";
+    sha256 = "00gxpxb5n1a1v562fd4cg1j92vwmd2zp00c2j60piyl8ppxxa115";
+  };
+  isLibrary = true;
+  isExecutable = true;
+  libraryHaskellDepends = [
+    base Cabal containers deepseq directory filepath ShellCheck
+    transformers
+  ];
+  executableHaskellDepends = [ base ];
+  testHaskellDepends = [
+    ansi-terminal base bytestring Diff directory filepath tasty
+    tasty-golden transformers
+  ];
+  homepage = "https://github.com/haskell-CI/haskell-ci";
+  description = "Script generator for Travis-CI";
+  license = stdenv.lib.licenses.bsd3;
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/vaultenv/default.nix b/nixpkgs/pkgs/development/tools/haskell/vaultenv/default.nix
new file mode 100644
index 000000000000..1eb8bf75cdfb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/vaultenv/default.nix
@@ -0,0 +1,38 @@
+{ mkDerivation, async, base, bytestring, connection, containers
+, directory, hpack, hspec, hspec-discover, hspec-expectations
+, http-client, http-conduit, lens, lens-aeson, megaparsec, mtl
+, optparse-applicative, parser-combinators, retry, stdenv, text
+, unix, unordered-containers, utf8-string, fetchzip
+}:
+mkDerivation rec {
+  pname = "vaultenv";
+  version = "0.8.0";
+
+  src = fetchzip {
+    url = "https://github.com/channable/vaultenv/archive/v${version}.tar.gz";
+    sha256 = "04hrwyy7gsybdwljrks4ym3pshqk1i43f8wpirjx7b0dfjgsd2l5";
+  };
+
+  buildTools = [ hpack ];
+
+  isLibrary = false;
+  isExecutable = true;
+  executableHaskellDepends = [
+    async base bytestring connection containers http-client
+    http-conduit lens lens-aeson megaparsec mtl optparse-applicative
+    parser-combinators retry text unix unordered-containers utf8-string
+  ];
+  testHaskellDepends = [
+    async base bytestring connection containers directory hspec
+    hspec-discover hspec-expectations http-client http-conduit lens
+    lens-aeson megaparsec mtl optparse-applicative parser-combinators
+    retry text unix unordered-containers utf8-string
+  ];
+  preConfigure = "hpack";
+  homepage = "https://github.com/channable/vaultenv#readme";
+  description = "Runs processes with secrets from HashiCorp Vault";
+  license = stdenv.lib.licenses.bsd3;
+  maintainers = with stdenv.lib.maintainers; [ lnl7 ];
+  hydraPlatforms = [];
+  broken = true;  # does not compile any longer
+}
diff --git a/nixpkgs/pkgs/development/tools/hcloud/default.nix b/nixpkgs/pkgs/development/tools/hcloud/default.nix
new file mode 100644
index 000000000000..fd05e12b4d55
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hcloud/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "hcloud-${version}";
+  version = "1.11.0";
+  
+  goPackagePath = "github.com/hetznercloud/cli";
+
+  src = fetchFromGitHub {
+    owner = "hetznercloud";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "0iknw14728l2mynrvb3fiqm7y893ppp22gbb3mppi6iy3as94f1f";
+  };
+
+  goDeps = ./deps.nix;
+
+  buildFlagsArray = [ "-ldflags=" "-w -X github.com/hetznercloud/cli/cli.Version=${version}" ];
+
+  postInstall = ''
+    mkdir -p \
+      $bin/etc/bash_completion.d \
+      $bin/share/zsh/vendor-completions
+
+    # Add bash completions
+    $bin/bin/hcloud completion bash > "$bin/etc/bash_completion.d/hcloud"
+
+    # Add zsh completions
+    echo "#compdef hcloud" > "$bin/share/zsh/vendor-completions/_hcloud"
+    $bin/bin/hcloud completion zsh >> "$bin/share/zsh/vendor-completions/_hcloud"
+  '';
+
+  meta = {
+    description = "A command-line interface for Hetzner Cloud, a provider for cloud virtual private servers";
+    homepage = https://github.com/hetznercloud/cli;
+    license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [ stdenv.lib.maintainers.zauberpony ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/hcloud/deps.nix b/nixpkgs/pkgs/development/tools/hcloud/deps.nix
new file mode 100644
index 000000000000..b0b544701283
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hcloud/deps.nix
@@ -0,0 +1,102 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/dustin/go-humanize";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dustin/go-humanize";
+      rev = "9f541cc9db5d55bce703bd99987c9d5cb8eea45e";
+      sha256 = "1kqf1kavdyvjk7f8kx62pnm7fbypn9z1vbf8v2qdh3y7z7a0cbl3";
+    };
+  }
+  {
+    goPackagePath = "github.com/fatih/structs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/structs";
+      rev = "878a968ab22548362a09bdb3322f98b00f470d46";
+      sha256 = "15nkffa8ylr5kkv52gyry675l8bzv3c0xx39j0fzz0vp2kcjyy8x";
+    };
+  }
+  {
+    goPackagePath = "github.com/gosuri/uilive";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gosuri/uilive";
+      rev = "ac356e6e42cd31fcef8e6aec13ae9ed6fe87713e";
+      sha256 = "1k28zbc14p1yqzhamp9rcagjdw6wsdb55m08nx758jwlr31az6jy";
+    };
+  }
+  {
+    goPackagePath = "github.com/gosuri/uiprogress";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gosuri/uiprogress";
+      rev = "d0567a9d84a1c40dd7568115ea66f4887bf57b33";
+      sha256 = "1m7rxf71mn8w2yysc8wmf2703avhci6f4nkiijjl1f2cx4kzykck";
+    };
+  }
+  {
+    goPackagePath = "github.com/hetznercloud/hcloud-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hetznercloud/hcloud-go";
+      rev = "ecee721a51a772254d0104bf4d796358e40d6bbd";
+      sha256 = "0bwym7f8am14yfh584p28d8lnj4f9mhqi05l1mlrl315xn0c78v3";
+    };
+  }
+  {
+    goPackagePath = "github.com/pelletier/go-toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pelletier/go-toml";
+      rev = "27c6b39a135b7dc87a14afb068809132fb7a9a8f";
+      sha256 = "13ldxh43xf4prmcrjzriz3gxpnijpqlzrgyhh7bnkj7lkhryfpk9";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cobra";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cobra";
+      rev = "d2d81d9a96e23f0255397222bb0b4e3165e492dc";
+      sha256 = "14nhpiyhz2lm468y5sm1vyxks5aky12kmbhmqq319s92lkm494cy";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev = "24fa6976df40757dce6aea913e7b81ade90530e1";
+      sha256 = "0rf6prz6gl0l1b3wijzdgq887cdwigvzxvz6gqbm5l8pkq3fx1m9";
+    };
+  }
+  {
+    goPackagePath = "github.com/thcyron/uiprogress";
+    fetch = {
+      type = "git";
+      url = "https://github.com/thcyron/uiprogress";
+      rev = "25e98ffb0e98b5192b475d8f2fd78083bfe9a67e";
+      sha256 = "1avb0jykn3qbjrvhc8i50ahisf9rsfy74ysrwfqbqqkpvhdxv12i";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "ff983b9c42bc9fbf91556e191cc8efb585c16908";
+      sha256 = "1hpr06kzn8jnn3gvzp0p9zn4fz4l9h69f7x66idx142w4xdlaanz";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "7fbe1cd0fcc20051e1fcb87fbabec4a1bacaaeba";
+      sha256 = "0y49s4kazign9nsw2x3h39cgs14lqi57m4hrka26w49z8a1xdyc6";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/heroku/default.nix b/nixpkgs/pkgs/development/tools/heroku/default.nix
new file mode 100644
index 000000000000..670307402908
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/heroku/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, fetchurl, makeWrapper, nodejs }:
+
+stdenv.mkDerivation rec {
+  pname = "heroku";
+  version = "7.22.4";
+
+  src = fetchurl {
+    url = "https://cli-assets.heroku.com/heroku-v${version}/heroku-v${version}.tar.xz";
+    sha256 = "067kvkdn7yvzb3ws6yjsfbypww914fclhnxrh2dw1hc6cazfgmqp";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/share/heroku $out/bin
+    cp -pr * $out/share/heroku
+    substituteInPlace $out/share/heroku/bin/run \
+      --replace "/usr/bin/env node" "${nodejs}/bin/node"
+    makeWrapper $out/share/heroku/bin/run $out/bin/heroku \
+      --set HEROKU_DISABLE_AUTOUPDATE 1
+  '';
+
+  meta = {
+    homepage = https://cli.heroku.com;
+    description = "Everything you need to get started using Heroku";
+    maintainers = with lib.maintainers; [ aflatter mirdhyn peterhoeg ];
+    license = lib.licenses.mit;
+    platforms = with lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/hexio/default.nix b/nixpkgs/pkgs/development/tools/hexio/default.nix
new file mode 100644
index 000000000000..905580482d45
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hexio/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, python, pcsclite, pth }:
+
+stdenv.mkDerivation rec {
+  pname = "hexio";
+  name = "${pname}-${version}";
+  version = "1.0-RC1";
+
+  src = fetchFromGitHub {
+    sha256 = "08jxkdi0gjsi8s793f9kdlad0a58a0xpsaayrsnpn9bpmm5cgihq";
+    rev = "version-${version}";
+    owner = "vanrein";
+    repo = "hexio";
+  };
+
+  propagatedBuildInputs = [ python ];
+  buildInputs = [ pcsclite pth ];
+
+  patchPhase = ''
+    substituteInPlace Makefile \
+      --replace '-I/usr/local/include/PCSC/' '-I${stdenv.lib.getDev pcsclite}/include/PCSC/' \
+      --replace '-L/usr/local/lib/pth' '-I${pth}/lib/'
+    '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib $out/sbin $out/man
+    make DESTDIR=$out PREFIX=/ all
+    make DESTDIR=$out PREFIX=/ install
+    '';
+
+  meta = with stdenv.lib; {
+    description = "Low-level I/O helpers for hexadecimal, tty/serial devices and so on";
+    homepage = https://github.com/vanrein/hexio;
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ leenaars ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/iaca/2.1.nix b/nixpkgs/pkgs/development/tools/iaca/2.1.nix
new file mode 100644
index 000000000000..b2c764c5a856
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/iaca/2.1.nix
@@ -0,0 +1,33 @@
+{ stdenv, makeWrapper, requireFile, gcc, unzip }:
+with stdenv.lib;
+
+# v2.1: last version with NHM/WSM arch support
+stdenv.mkDerivation {
+  name = "iaca-2.1";
+  src = requireFile {
+    name = "iaca-version-2.1-lin64.zip";
+    sha256 = "11s1134ijf66wrc77ksky9mnb0lq6ml6fzmr86a6p6r5xclzay2m";
+    url = "https://software.intel.com/en-us/articles/intel-architecture-code-analyzer-download";
+  };
+  unpackCmd = ''${unzip}/bin/unzip "$src" -x __MACOSX/ __MACOSX/iaca-lin64/ __MACOSX/iaca-lin64/._.DS_Store'';
+  nativeBuildInputs = [ makeWrapper ];
+  installPhase = ''
+    mkdir -p $out/bin $out/lib
+    cp bin/iaca $out/bin/
+    cp lib/* $out/lib
+  '';
+  preFixup = let libPath = makeLibraryPath [ stdenv.cc.cc.lib gcc ]; in ''
+    patchelf \
+        --set-interpreter ${stdenv.glibc}/lib/ld-linux-x86-64.so.2 \
+        --set-rpath $out/lib:"${libPath}" \
+        $out/bin/iaca
+  '';
+  postFixup = ''wrapProgram $out/bin/iaca --set LD_LIBRARY_PATH $out/lib'';
+  meta = {
+    description = "Intel Architecture Code Analyzer";
+    homepage = https://software.intel.com/en-us/articles/intel-architecture-code-analyzer/;
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ kazcw ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/iaca/3.0.nix b/nixpkgs/pkgs/development/tools/iaca/3.0.nix
new file mode 100644
index 000000000000..34b9e1df1906
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/iaca/3.0.nix
@@ -0,0 +1,24 @@
+{ stdenv, requireFile, unzip }:
+with stdenv.lib;
+
+stdenv.mkDerivation {
+  name = "iaca-3.0";
+  src = requireFile {
+    name = "iaca-version-v3.0-lin64.zip";
+    sha256 = "0qd81bxg269cwwvfmdp266kvhcl3sdvhrkfqdrbmanawk0w7lvp1";
+    url = "https://software.intel.com/en-us/articles/intel-architecture-code-analyzer-download";
+  };
+  unpackCmd = ''${unzip}/bin/unzip "$src"'';
+  installPhase = ''
+    mkdir -p $out/bin
+    cp iaca $out/bin
+    patchelf --set-interpreter ${stdenv.glibc}/lib/ld-linux-x86-64.so.2 $out/bin/iaca
+  '';
+  meta = {
+    description = "Intel Architecture Code Analyzer";
+    homepage = https://software.intel.com/en-us/articles/intel-architecture-code-analyzer/;
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ kazcw ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/icestorm/default.nix b/nixpkgs/pkgs/development/tools/icestorm/default.nix
new file mode 100644
index 000000000000..c287e40d823a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/icestorm/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchFromGitHub
+, pkgconfig, libftdi
+, python3, pypy3
+}:
+
+let
+  pypyCompatible = stdenv.isx86_64; /* pypy3 seems broken on i686 */
+  pythonPkg      = if pypyCompatible then pypy3 else python3;
+  pythonInterp   = pythonPkg.interpreter;
+in
+
+stdenv.mkDerivation rec {
+  name = "icestorm-${version}";
+  version = "2019.04.16";
+
+  src = fetchFromGitHub {
+    owner  = "cliffordwolf";
+    repo   = "icestorm";
+    rev    = "d9ea2e15fccebbbce59409b0ae7a1481d78aab86";
+    sha256 = "1qa37p7hm7c2ga26xcvsd8xkqrp4hm0w6yh7cvz2q988yjzal5ky";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ pythonPkg libftdi ];
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  # fix icebox_vlog chipdb path. icestorm issue:
+  #   https://github.com/cliffordwolf/icestorm/issues/125
+  #
+  # also, fix up the path to the chosen Python interpreter. for pypy-compatible
+  # platforms, it offers significant performance improvements.
+  patchPhase = ''
+    substituteInPlace ./icebox/icebox_vlog.py \
+      --replace /usr/local/share "$out/share"
+
+    for x in icefuzz/Makefile icebox/Makefile icetime/Makefile; do
+      substituteInPlace "$x" --replace python3 "${pythonInterp}"
+    done
+
+    for x in $(find . -type f -iname '*.py'); do
+      substituteInPlace "$x" \
+        --replace '/usr/bin/env python3' '${pythonInterp}'
+    done
+  '';
+
+  meta = {
+    description = "Documentation and tools for Lattice iCE40 FPGAs";
+    longDescription = ''
+      Project IceStorm aims at reverse engineering and
+      documenting the bitstream format of Lattice iCE40
+      FPGAs and providing simple tools for analyzing and
+      creating bitstream files.
+    '';
+    homepage    = http://www.clifford.at/icestorm/;
+    license     = stdenv.lib.licenses.isc;
+    maintainers = with stdenv.lib.maintainers; [ shell thoughtpolice ];
+    platforms   = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/icr/default.nix b/nixpkgs/pkgs/development/tools/icr/default.nix
new file mode 100644
index 000000000000..3a39d0ddf6bd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/icr/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, crystal, shards, which
+, openssl, readline, libyaml }:
+
+stdenv.mkDerivation rec {
+  pname = "icr";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner  = "crystal-community";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "0kkdqrxk4f4bqbb84mgjrk9r0fz1hsz95apvjsc49gav4c8xx3mb";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace /usr/local $out
+  '';
+
+  buildInputs = [ crystal libyaml openssl readline ];
+
+  nativeBuildInputs = [ shards which ];
+
+  doCheck = true;
+  checkTarget = "test";
+
+  meta = with stdenv.lib; {
+    description = "Interactive console for the Crystal programming language";
+    homepage = "https://github.com/crystal-community/icr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/iferr/default.nix b/nixpkgs/pkgs/development/tools/iferr/default.nix
new file mode 100644
index 000000000000..e2aebe9b2dc2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/iferr/default.nix
@@ -0,0 +1,28 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "iferr-unstable-${version}";
+  version = "2018-06-15";
+  rev = "bb332a3b1d9129b6486c7ddcb7030c11b05cfc88";
+
+  goPackagePath = "github.com/koron/iferr";
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "koron";
+    repo = "iferr";
+    sha256 = "1nyqy1sgq2afiama4wy7wap8s03c0hiwwa0f6kwq3y59097rfc0c";
+  };
+
+  meta = with lib; {
+    description = ''Generate "if err != nil {" block'';
+    homepage = https://github.com/koron/iferr;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/imatix_gsl/default.nix b/nixpkgs/pkgs/development/tools/imatix_gsl/default.nix
new file mode 100644
index 000000000000..62f33a2d2517
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/imatix_gsl/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, pcre } :
+
+stdenv.mkDerivation rec {
+  name = "imatix_gsl-${version}";
+  version = "4.1";
+
+  src = fetchFromGitHub {
+    owner = "imatix";
+    repo = "gsl";
+    rev = "72192d0d9de17de08d9379602d6482b4e5d402d0";
+    sha256 = "1apy11avgqc27xlczyjh15y10qjdyqsqab1wrl2067qgpdiy58w7";
+  };
+
+  buildInputs = [ pcre ];
+
+  CCNAME = "cc";
+
+  postPatch = "sed -e 's,/usr/bin/install,install,g' -i src/Makefile";
+  preBuild = "cd src";
+  installFlags = "DESTDIR=$(out)";
+
+  meta = with stdenv.lib; {
+    license = licenses.gpl3Plus;
+    homepage = https://github.com/imatix/gsl/;
+    description = "A universal code generator";
+    platforms = platforms.unix;
+    maintainers = [ maintainers.moosingin3space ];
+    broken = stdenv.isLinux; # 2018-04-10
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/impl/default.nix b/nixpkgs/pkgs/development/tools/impl/default.nix
new file mode 100644
index 000000000000..69bbf8afe5ac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/impl/default.nix
@@ -0,0 +1,30 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "impl-unstable-${version}";
+  version = "2018-02-27";
+  rev = "3d0f908298c49598b6aa84f101c69670e15d1d03";
+
+  goPackagePath = "github.com/josharian/impl";
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "josharian";
+    repo = "impl";
+    sha256 = "0xpip20x5vclrl0by1760lg73v6lj6nmkbiazlskyvpkw44h8a7c";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "impl generates method stubs for implementing an interface.";
+    homepage = https://github.com/josharian/impl;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/impl/deps.nix b/nixpkgs/pkgs/development/tools/impl/deps.nix
new file mode 100644
index 000000000000..3477aaed6075
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/impl/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "96e9e165b75e735822645eff82850b08c377be36";
+      sha256 = "1zj9ck5sg9b0pphxybmvxf64hhcap7v7j37fx3v5aknf18crjjdg";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/ineffassign/default.nix b/nixpkgs/pkgs/development/tools/ineffassign/default.nix
new file mode 100644
index 000000000000..10e5c61025ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ineffassign/default.nix
@@ -0,0 +1,29 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "ineffassign-unstable-${version}";
+  version = "2018-09-09";
+	rev = "1003c8bd00dc2869cb5ca5282e6ce33834fed514";
+
+  goPackagePath = "github.com/gordonklaus/ineffassign";
+  excludedPackages = ''testdata'';
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "gordonklaus";
+    repo = "ineffassign";
+    sha256 = "1rkzqvd3z03vq8q8qi9cghvgggsf02ammj9wq8jvpnx6b2sd16nd";
+  };
+
+  meta = with lib; {
+    description = "Detect ineffectual assignments in Go code.";
+    homepage = https://github.com/gordonklaus/ineffassign;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/interfacer/default.nix b/nixpkgs/pkgs/development/tools/interfacer/default.nix
new file mode 100644
index 000000000000..274ced0b37cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/interfacer/default.nix
@@ -0,0 +1,31 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "interfacer-unstable-${version}";
+  version = "2018-08-31";
+  rev = "c20040233aedb03da82d460eca6130fcd91c629a";
+
+  goPackagePath = "mvdan.cc/interfacer";
+  excludedPackages = ''check/testdata'';
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "mvdan";
+    repo = "interfacer";
+    sha256 = "0cx4m74mvn200360pmsqxx4z0apk9fcknwwqh8r94zd3jfv4akq2";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "A linter that suggests interface types.";
+    homepage = https://github.com/mvdan/interfacer;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/interfacer/deps.nix b/nixpkgs/pkgs/development/tools/interfacer/deps.nix
new file mode 100644
index 000000000000..6810950878be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/interfacer/deps.nix
@@ -0,0 +1,29 @@
+[
+  {
+    goPackagePath = "github.com/kisielk/gotool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kisielk/gotool";
+      rev = "80517062f582ea3340cd4baf70e86d539ae7d84d";
+      sha256 = "14af2pa0ssyp8bp2mvdw184s5wcysk6akil3wzxmr05wwy951iwn";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "96e9e165b75e735822645eff82850b08c377be36";
+      sha256 = "1zj9ck5sg9b0pphxybmvxf64hhcap7v7j37fx3v5aknf18crjjdg";
+    };
+  }
+  {
+    goPackagePath = "mvdan.cc/lint";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mvdan/lint";
+      rev = "adc824a0674b99099789b6188a058d485eaf61c0";
+      sha256 = "17mi2rvkg9kzv1shxcyawzcj4jj3v738d1j82fp4yygx859yvr8r";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/irony-server/default.nix b/nixpkgs/pkgs/development/tools/irony-server/default.nix
new file mode 100644
index 000000000000..b6a78071bc87
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/irony-server/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, cmake, llvmPackages, irony }:
+
+stdenv.mkDerivation rec {
+  name = "irony-server-${version}";
+  inherit (irony) version;
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ llvmPackages.libclang ];
+
+  dontUseCmakeBuildDir = true;
+
+  cmakeDir = "server";
+
+  cmakeFlags = [
+    "-DCMAKE_PREFIX_PATH=${llvmPackages.clang-unwrapped}"
+  ];
+
+  src = irony.src;
+
+  meta = {
+    description = "The server part of irony.";
+    homepage = "https://melpa.org/#/irony";
+    maintainers = [ stdenv.lib.maintainers.deepfire ];
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.free;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/java/cfr/default.nix b/nixpkgs/pkgs/development/tools/java/cfr/default.nix
new file mode 100644
index 000000000000..aa47ed1186c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/cfr/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, makeWrapper, fetchurl, jre }:
+
+stdenv.mkDerivation rec {
+  name = "cfr-${version}";
+  version = "0.145";
+
+  src = fetchurl {
+    url = "http://www.benf.org/other/cfr/cfr_${version}.jar";
+    sha256 = "0xv2v9z9xwym5m7h6bkvcmdgsa9lmkvsl77vk3aykgbzxywh7xqv";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    jar=$out/share/java/cfr_${version}.jar
+    install -Dm444 $src $jar
+    makeWrapper ${jre}/bin/java $out/bin/cfr --add-flags "-jar $jar"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Another java decompiler";
+    longDescription = ''
+      CFR will decompile modern Java features - Java 8 lambdas (pre and post
+      Java beta 103 changes), Java 7 String switches etc, but is written
+      entirely in Java 6.
+    '';
+    homepage = http://www.benf.org/other/cfr/;
+    license = licenses.mit;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/java/fastjar/default.nix b/nixpkgs/pkgs/development/tools/java/fastjar/default.nix
new file mode 100644
index 000000000000..403bfeabfd05
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/fastjar/default.nix
@@ -0,0 +1,31 @@
+{ fetchurl, stdenv, zlib }:
+
+let version = "0.98"; in
+  stdenv.mkDerivation {
+    name = "fastjar-${version}";
+
+    src = fetchurl {
+      url = "https://download.savannah.gnu.org/releases/fastjar/fastjar-${version}.tar.gz";
+      sha256 = "0iginbz2m15hcsa3x4y7v3mhk54gr1r7m3ghx0pg4n46vv2snmpi";
+    };
+
+    buildInputs = [ zlib ];
+
+    doCheck = true;
+
+    meta = {
+      description = "Fast Java archiver written in C";
+
+      longDescription = ''
+        Fastjar is a version of Sun's `jar' utility, written entirely in C, and
+        therefore quite a bit faster.  Fastjar can be up to 100x faster than
+        the stock `jar' program running without a JIT.
+      '';
+
+      homepage = https://savannah.nongnu.org/projects/fastjar/;
+
+      license = stdenv.lib.licenses.gpl2Plus;
+      platforms = stdenv.lib.platforms.linux;
+      maintainers = [ ];
+    };
+  }
diff --git a/nixpkgs/pkgs/development/tools/java/jhiccup/default.nix b/nixpkgs/pkgs/development/tools/java/jhiccup/default.nix
new file mode 100644
index 000000000000..6fb34588cd0b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/jhiccup/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+  name = "jhiccup-${version}";
+  version = "2.0.10";
+
+  src = fetchzip {
+    url    = "https://www.azul.com/files/jHiccup-${version}-dist.zip";
+    sha256 = "1hsvi8wjh615fnjf75h7b5afp04chqcgvini30vfcn3m9a5icbgy";
+  };
+
+  configurePhase = ":";
+  buildPhase     = ":";
+  installPhase = ''
+    mkdir -p $out/bin $out/share/java
+    cp *.jar $out/share/java
+
+    # Fix version number (out of date at time of import), and path to
+    # jHiccup.jar
+    for x in ./jHiccup ./jHiccupLogProcessor; do
+      substituteInPlace $x \
+        --replace 'JHICCUP_Version=2.0.5' 'JHICCUP_Version=${version}' \
+        --replace '$INSTALLED_PATH' $out/share/java
+    done
+
+    mv jHiccup jHiccupLogProcessor $out/bin/
+  '';
+
+  meta = {
+    description = "Measure JVM application stalls and GC pauses";
+    homepage    = https://www.azul.com/jhiccup/;
+    license     = stdenv.lib.licenses.cc0;
+    platforms   = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/java/visualvm/default.nix b/nixpkgs/pkgs/development/tools/java/visualvm/default.nix
new file mode 100644
index 000000000000..3cec26435050
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/visualvm/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, fetchzip, lib, makeWrapper, makeDesktopItem, jdk, gtk2, gawk }:
+
+stdenv.mkDerivation rec {
+  version = "1.4.2";
+  name = "visualvm-${version}";
+
+  src = fetchzip {
+    url = "https://github.com/visualvm/visualvm.src/releases/download/${version}/visualvm_${builtins.replaceStrings ["."] [""]  version}.zip";
+    sha256 = "0kic1rqxaj2rpnflj1wklsy3gjz50gcb0wak4qi3hjkz5rv6gp1y";
+  };
+
+  desktopItem = makeDesktopItem {
+      name = "visualvm";
+      exec = "visualvm";
+      comment = "Java Troubleshooting Tool";
+      desktopName = "VisualVM";
+      genericName = "Java Troubleshooting Tool";
+      categories = "Application;Development;";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    find . -type f -name "*.dll" -o -name "*.exe"  -delete;
+
+    substituteInPlace etc/visualvm.conf \
+      --replace "#visualvm_jdkhome=" "visualvm_jdkhome=" \
+      --replace "/path/to/jdk" "${jdk.home}" \
+      --replace 'visualvm_default_options="' 'visualvm_default_options="--laf com.sun.java.swing.plaf.gtk.GTKLookAndFeel -J-Dawt.useSystemAAFontSettings=lcd -J-Dswing.aatext=true '
+
+    substituteInPlace platform/lib/nbexec \
+      --replace /usr/bin/\''${awk} ${gawk}/bin/awk
+
+    cp -r . $out
+
+    # To get the native LAF, JVM needs to see GTK’s .so-s.
+    wrapProgram $out/bin/visualvm \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ gtk2 ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A visual interface for viewing information about Java applications";
+    longDescription = ''
+      VisualVM is a visual tool integrating several commandline JDK
+      tools and lightweight profiling capabilities. Designed for both
+      production and development time use, it further enhances the
+      capability of monitoring and performance analysis for the Java
+      SE platform.
+    '';
+    homepage = https://visualvm.java.net/;
+    license = licenses.gpl2ClasspathPlus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ michalrus moaxcp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jazzy/Gemfile b/nixpkgs/pkgs/development/tools/jazzy/Gemfile
new file mode 100644
index 000000000000..27c230a9829a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jazzy/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'jazzy'
diff --git a/nixpkgs/pkgs/development/tools/jazzy/Gemfile.lock b/nixpkgs/pkgs/development/tools/jazzy/Gemfile.lock
new file mode 100644
index 000000000000..3affa961bef1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jazzy/Gemfile.lock
@@ -0,0 +1,102 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    CFPropertyList (3.0.0)
+    activesupport (4.2.11.1)
+      i18n (~> 0.7)
+      minitest (~> 5.1)
+      thread_safe (~> 0.3, >= 0.3.4)
+      tzinfo (~> 1.1)
+    atomos (0.1.3)
+    claide (1.0.2)
+    cocoapods (1.5.3)
+      activesupport (>= 4.0.2, < 5)
+      claide (>= 1.0.2, < 2.0)
+      cocoapods-core (= 1.5.3)
+      cocoapods-deintegrate (>= 1.0.2, < 2.0)
+      cocoapods-downloader (>= 1.2.0, < 2.0)
+      cocoapods-plugins (>= 1.0.0, < 2.0)
+      cocoapods-search (>= 1.0.0, < 2.0)
+      cocoapods-stats (>= 1.0.0, < 2.0)
+      cocoapods-trunk (>= 1.3.0, < 2.0)
+      cocoapods-try (>= 1.1.0, < 2.0)
+      colored2 (~> 3.1)
+      escape (~> 0.0.4)
+      fourflusher (~> 2.0.1)
+      gh_inspector (~> 1.0)
+      molinillo (~> 0.6.5)
+      nap (~> 1.0)
+      ruby-macho (~> 1.1)
+      xcodeproj (>= 1.5.7, < 2.0)
+    cocoapods-core (1.5.3)
+      activesupport (>= 4.0.2, < 6)
+      fuzzy_match (~> 2.0.4)
+      nap (~> 1.0)
+    cocoapods-deintegrate (1.0.4)
+    cocoapods-downloader (1.2.2)
+    cocoapods-plugins (1.0.0)
+      nap
+    cocoapods-search (1.0.0)
+    cocoapods-stats (1.1.0)
+    cocoapods-trunk (1.3.1)
+      nap (>= 0.8, < 2.0)
+      netrc (~> 0.11)
+    cocoapods-try (1.1.0)
+    colored2 (3.1.2)
+    concurrent-ruby (1.1.5)
+    escape (0.0.4)
+    ffi (1.10.0)
+    fourflusher (2.0.1)
+    fuzzy_match (2.0.4)
+    gh_inspector (1.1.3)
+    i18n (0.9.5)
+      concurrent-ruby (~> 1.0)
+    jazzy (0.9.6)
+      cocoapods (~> 1.5.3)
+      mustache (~> 1.1.0)
+      open4
+      redcarpet (~> 3.4.0)
+      rouge (>= 2.0.6, < 4.0)
+      sass (~> 3.6.0)
+      sqlite3 (~> 1.3.13)
+      xcinvoke (~> 0.3.0)
+    liferaft (0.0.6)
+    minitest (5.11.3)
+    molinillo (0.6.6)
+    mustache (1.1.0)
+    nanaimo (0.2.6)
+    nap (1.1.0)
+    netrc (0.11.0)
+    open4 (1.3.4)
+    rb-fsevent (0.10.3)
+    rb-inotify (0.10.0)
+      ffi (~> 1.0)
+    redcarpet (3.4.0)
+    rouge (3.3.0)
+    ruby-macho (1.4.0)
+    sass (3.6.0)
+      sass-listen (~> 4.0.0)
+    sass-listen (4.0.0)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+    sqlite3 (1.3.13)
+    thread_safe (0.3.6)
+    tzinfo (1.2.5)
+      thread_safe (~> 0.1)
+    xcinvoke (0.3.0)
+      liferaft (~> 0.0.6)
+    xcodeproj (1.8.2)
+      CFPropertyList (>= 2.3.3, < 4.0)
+      atomos (~> 0.1.3)
+      claide (>= 1.0.2, < 2.0)
+      colored2 (~> 3.1)
+      nanaimo (~> 0.2.6)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  jazzy
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/development/tools/jazzy/default.nix b/nixpkgs/pkgs/development/tools/jazzy/default.nix
new file mode 100644
index 000000000000..981c9c1d0604
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jazzy/default.nix
@@ -0,0 +1,19 @@
+{ lib, bundlerApp, ruby }:
+
+bundlerApp rec {
+  inherit ruby;
+  pname = "jazzy";
+  gemdir = ./.;
+  exes = [ "jazzy" ];
+
+  meta = with lib; {
+    description     = "A command-line utility that generates documentation for Swift or Objective-C";
+    homepage        = https://github.com/realm/jazzy;
+    license         = licenses.mit;
+    platforms       = platforms.darwin;
+    maintainers     = with maintainers; [
+      peterromfeldhk
+      lilyball
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jazzy/gemset.nix b/nixpkgs/pkgs/development/tools/jazzy/gemset.nix
new file mode 100644
index 000000000000..0a8ea5f9a507
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jazzy/gemset.nix
@@ -0,0 +1,401 @@
+{
+  activesupport = {
+    dependencies = ["i18n" "minitest" "thread_safe" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vbq7a805bfvyik2q3kl9s3r418f5qzvysqbz2cwy4hr7m2q4ir6";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  atomos = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17vq6sjyswr5jfzwdccw748kgph6bdw30bakwnn6p8sl4hpv4hvx";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  CFPropertyList = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ykjag3k5msz3sf1j91rb55da2xh596y06m3a4yl79fiy2id0w9z";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  claide = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0az54rp691hc42yl1xyix2cxv58byhaaf4gxbpghvvq29l476rzc";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  cocoapods = {
+    dependencies = ["activesupport" "claide" "cocoapods-core" "cocoapods-deintegrate" "cocoapods-downloader" "cocoapods-plugins" "cocoapods-search" "cocoapods-stats" "cocoapods-trunk" "cocoapods-try" "colored2" "escape" "fourflusher" "gh_inspector" "molinillo" "nap" "ruby-macho" "xcodeproj"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0x5cz19p0j9k1hvn35lxnv3dn8i65n4qvi5nzjaf53pdgh52401h";
+      type = "gem";
+    };
+    version = "1.5.3";
+  };
+  cocoapods-core = {
+    dependencies = ["activesupport" "fuzzy_match" "nap"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xnxcd2xnvf60f8w27glq5jcn9wdhzch9nkdb24ihhmpxfgj3f39";
+      type = "gem";
+    };
+    version = "1.5.3";
+  };
+  cocoapods-deintegrate = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bf524f1za92i6rlr4cr6jm3c4vfjszsdc9lsr6wk5125c76ipzn";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  cocoapods-downloader = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09fd4zaqkz8vz3djplacngcs4n0j6j956wgq43s1y6bwl0zyjmd3";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  cocoapods-plugins = {
+    dependencies = ["nap"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16na82sfyc8801qs1n22nwq486s4j7yj6rj7fcp8cbxmj371fpbj";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  cocoapods-search = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02wmy5rbjk29c65zn62bffxv30qs11slql23qx65snkm0vd93mn6";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  cocoapods-stats = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xhdh5v94p6l612rwrk290nd2hdfx8lbaqfbkmj34md218kilqww";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  cocoapods-trunk = {
+    dependencies = ["nap" "netrc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1plssgabdv6hcaq1c3gf43kf1d2prx883q8lzdr6chi5byzzs3yl";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  cocoapods-try = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gf2zjmcjhh9psq15yfy82wz5jnlihf5bcw79f8hlv4cnqyspncj";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  colored2 = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jlbqa9q4mvrm73aw9mxh23ygzbjiqwisl32d8szfb5fxvbjng5i";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x07r23s7836cpp5z9yrlbpljcxpax14yw4fy4bnp6crhr6x24an";
+      type = "gem";
+    };
+    version = "1.1.5";
+  };
+  escape = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sa1xkfc9jvkwyw1jbz3jhkq0ms1zrvswi6mmfiwcisg5fp497z4";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  fourflusher = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dzmkxyzrk475c1yk5zddwhhj28b6fnj4jkk1h5gr1c2mrar72d5";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
+  fuzzy_match = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19gw1ifsgfrv7xdi6n61658vffgm1867f4xdqfswb2b5h6alzpmm";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+  gh_inspector = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f8r9byajj3bi2c7c5sqrc7m0zrv3nblfcd4782lw5l73cbsgk04";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3";
+      type = "gem";
+    };
+    version = "0.9.5";
+  };
+  jazzy = {
+    dependencies = ["cocoapods" "mustache" "open4" "redcarpet" "rouge" "sass" "sqlite3" "xcinvoke"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09df1mkf8fhzj0hmgdifnyvd8lhgxr1ps8yjyxfk8n2jkkbiyj7i";
+      type = "gem";
+    };
+    version = "0.9.6";
+  };
+  liferaft = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kasbbx84gzsxx8w8bgr6xjg43h9bvzzaqg7si8jirnja8yc27k3";
+      type = "gem";
+    };
+    version = "0.0.6";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq";
+      type = "gem";
+    };
+    version = "5.11.3";
+  };
+  molinillo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hh40z1adl4lw16dj4hxgabx4rr28mgqycih1y1d91bwww0jjdg6";
+      type = "gem";
+    };
+    version = "0.6.6";
+  };
+  mustache = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1698xpwxmfvj39ii5vv8a4aka54p3fpk5i4rf8z9lfxrh4948rbk";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  nanaimo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ajfyaqjw3dzykk612yw8sm21savfqy292hgps8h8l4lvxww1lz6";
+      type = "gem";
+    };
+    version = "0.2.6";
+  };
+  nap = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xm5xssxk5s03wjarpipfm39qmgxsalb46v1prsis14x1xk935ll";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  netrc = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gzfmcywp1da8nzfqsql2zqi648mfnx6qwkig3cv36n9m0yy676y";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  open4 = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cgls3f9dlrpil846q0w7h66vsc33jqn84nql4gcqkk221rh7px1";
+      type = "gem";
+    };
+    version = "1.3.4";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8";
+      type = "gem";
+    };
+    version = "0.10.3";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fs7hxm9g6ywv2yih83b879klhc4fs8i0p9166z795qmd77dk0a4";
+      type = "gem";
+    };
+    version = "0.10.0";
+  };
+  redcarpet = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h9qz2hik4s9knpmbwrzb3jcp3vc5vygp9ya8lcpl7f1l9khmcd7";
+      type = "gem";
+    };
+    version = "3.4.0";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1digsi2s8wyzx8vsqcxasw205lg6s7izx8jypl8rrpjwshmv83ql";
+      type = "gem";
+    };
+    version = "3.3.0";
+  };
+  ruby-macho = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lhdjn91jkifsy2hzq2hgcm0pp8pbik87m58zmw1ifh6hkp9adjb";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  sass = {
+    dependencies = ["sass-listen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18c6prbw9wl8bqhb2435pd9s0lzarl3g7xf8pmyla28zblvwxmyh";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  sass-listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  sqlite3 = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01ifzp8nwzqppda419c9wcvr8n82ysmisrs0hph9pdmv1lpa4f5i";
+      type = "gem";
+    };
+    version = "1.3.13";
+  };
+  thread_safe = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z";
+      type = "gem";
+    };
+    version = "1.2.5";
+  };
+  xcinvoke = {
+    dependencies = ["liferaft"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16pyq7wvx2c0fywrqxk3vg6psa3yjhbd7hw7hv2mjim6myjkdsb7";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  xcodeproj = {
+    dependencies = ["CFPropertyList" "atomos" "claide" "colored2" "nanaimo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ji3wmpr6xm4172vxh9y6731vm2xrvv7ccwk4ijd5n4if1dakm03";
+      type = "gem";
+    };
+    version = "1.8.2";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/jazzy/update b/nixpkgs/pkgs/development/tools/jazzy/update
new file mode 100755
index 000000000000..ff0e16868366
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jazzy/update
@@ -0,0 +1,8 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p bash bundler bundix
+
+set -e
+
+rm -f Gemfile.lock
+bundler lock
+bundix
diff --git a/nixpkgs/pkgs/development/tools/jbake/default.nix b/nixpkgs/pkgs/development/tools/jbake/default.nix
new file mode 100644
index 000000000000..dbda476171ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jbake/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchzip, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  version = "2.6.4";
+  name = "jbake-${version}";
+
+  src = fetchzip {
+    url = "https://dl.bintray.com/jbake/binary/${name}-bin.zip";
+    sha256 = "0zgp0wwxxmi13v5q5jvr610igx2vxg0bwck9j1imnn9ciakg1aaw";
+  };
+
+  buildInputs = [ makeWrapper jre ];
+
+  postPatch = "patchShebangs .";
+
+  installPhase = ''
+    mkdir -p $out
+    cp -vr * $out
+    wrapProgram $out/bin/jbake --set JAVA_HOME "${jre}"
+  '';
+
+  checkPhase = ''
+    export JAVA_HOME=${jre}
+    bin/jbake | grep -q "${version}" || (echo "jbake did not return correct version"; exit 1)
+  '';
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "JBake is a Java based, open source, static site/blog generator for developers & designers";
+    homepage = "https://jbake.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ moaxcp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jd/default.nix b/nixpkgs/pkgs/development/tools/jd/default.nix
new file mode 100644
index 000000000000..3fe55de2ec8c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jd/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  name = "jd-${version}";
+  version = "0.3.1";
+  rev = "2729b5af166cfd72bd953ef8959b456c4db940fc";
+
+  goPackagePath = "github.com/tidwall/jd";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/tidwall/jd";
+    sha256 = "0dj4k38pf80dl77jns29vx2dj265s4ksg2q2s9n240b7b8z8mn5h";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Interactive JSON Editor";
+    license = licenses.mit;
+    maintainers = [ maintainers.np ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jid/default.nix b/nixpkgs/pkgs/development/tools/jid/default.nix
new file mode 100644
index 000000000000..4833755b3ee3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jid/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "jid-${version}";
+  version = "0.7.2";
+
+  goPackagePath = "github.com/simeji/jid";
+
+  src = fetchFromGitHub {
+    owner = "simeji";
+    repo = "jid";
+    rev = "${version}";
+    sha256 = "0p4srp85ilcafrn9d36rzpzg5k5jd7is93p68hamgxqyiiw6a8fi";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = {
+    description = "A command-line tool to incrementally drill down JSON";
+    homepage = https://github.com/simeji/jid;
+    license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.all;
+    maintainers = with stdenv.lib.maintainers; [ stesie ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jid/deps.nix b/nixpkgs/pkgs/development/tools/jid/deps.nix
new file mode 100644
index 000000000000..a027902d2df2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jid/deps.nix
@@ -0,0 +1,57 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/bitly/go-simplejson";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bitly/go-simplejson";
+      rev = "9db4a59bd4d803ae0c173a7d8a538e056cd59d57";
+      sha256 = "0cbnjzjq55jnzk07zdk7nb96yzgpyawm1r6km3xignn8ih4bnn6g";
+    };
+  }
+  {
+    goPackagePath = "github.com/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev = "3f9d52f7176a6927daacff70a3e8d1dc2025c53e";
+      sha256 = "165ww24x6ba47ji4j14mp3f006ksnmi53ws9280pgd2zcw91nbn8";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-runewidth";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-runewidth";
+      rev = "c88d7e5f2e24de48a200a2655ac8a0910be9a0f7";
+      sha256 = "14prmzjlv9z31n6caaaq1kwi4p0mp3x4pv5r7d0575lcampa41jw";
+    };
+  }
+  {
+    goPackagePath = "github.com/nsf/termbox-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nsf/termbox-go";
+      rev = "60ab7e3d12ed91bc1b2486559c4b3a6b62297577";
+      sha256 = "040064fh7wzdmv8flw6svi007hiqs1cjk1a3k3gpg7gii3npifsl";
+    };
+  }
+  {
+    goPackagePath = "github.com/nwidger/jsoncolor";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nwidger/jsoncolor";
+      rev = "75a6de4340e59be95f0884b9cebdda246e0fdf40";
+      sha256 = "0aiv42xijrqgrxfx6pfyrndpwqv8i1qwsk190jdczyjxlnki2nki";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev = "059132a15dd08d6704c67711dae0cf35ab991756";
+      sha256 = "0bxkbh2rq40kdk8i05am5np77cnskx3571v2k300j5mmj1rl1ijg";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/jira_cli/default.nix b/nixpkgs/pkgs/development/tools/jira_cli/default.nix
new file mode 100644
index 000000000000..8722d49eb32e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jira_cli/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, libffi, openssl, python3Packages }:
+let
+  inherit (python3Packages) fetchPypi buildPythonApplication vcrpy mock hiro;
+in
+  buildPythonApplication rec {
+    pname = "jira-cli";
+    version = "2.2";
+    src = fetchPypi {
+      inherit pname version;
+      sha256 = "314118d5d851394ebf910122fd7ce871f63581393968c71456441eb56be3b112";
+    };
+
+    postPatch = ''
+      substituteInPlace requirements/main.txt --replace "argparse" ""
+    '';
+
+    # Tests rely on VCR cassettes being written during tests. R/O nix store prevents this.
+    doCheck = false;
+    checkInputs = with python3Packages; [ vcrpy mock hiro ];
+    buildInputs = [ libffi openssl ];
+    propagatedBuildInputs = with python3Packages; [
+      ordereddict requests six suds-jurko termcolor keyring
+      jira  keyrings-alt
+    ];
+
+    meta = with stdenv.lib; {
+      description = "A command line interface to Jira";
+      homepage = https://github.com/alisaifee/jira-cli;
+      maintainers = with maintainers; [ nyarly ];
+      license = licenses.mit;
+    };
+  }
diff --git a/nixpkgs/pkgs/development/tools/jl/default.nix b/nixpkgs/pkgs/development/tools/jl/default.nix
new file mode 100644
index 000000000000..0d9ce143a834
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jl/default.nix
@@ -0,0 +1,37 @@
+{ mkDerivation, fetchFromGitHub, fetchpatch
+, aeson, aeson-pretty, attoparsec, base, bytestring, conduit, conduit-extra
+, containers, exceptions, mtl, optparse-simple, parsec, scientific, stdenv
+, text, unordered-containers, vector
+}:
+mkDerivation rec {
+  pname = "jl";
+  version = "0.0.5";
+  src = fetchFromGitHub {
+    owner = "chrisdone";
+    repo = "jl";
+    rev = "v${version}";
+    sha256 = "1hlnwsl4cj0l4x8dxwda2fcnk789cwlphl9gv9cfrivl43mgkgar";
+  };
+  patches = [
+    # MonadFail compatibility patch. Should be removed with the next release
+    (fetchpatch {
+      url = https://github.com/chrisdone/jl/commit/6d40308811cbc22a96b47ebe69ec308b4e9fd356.patch;
+      sha256 = "1pg92ffkg8kim5r8rz8js6fjqyjisg1266sf7p9jyxjgsskwpa4g";
+    })
+  ];
+
+  isLibrary = true;
+  isExecutable = true;
+  libraryHaskellDepends = [
+    aeson attoparsec base bytestring containers exceptions mtl parsec
+    scientific text unordered-containers vector
+  ];
+  executableHaskellDepends = [
+    aeson aeson-pretty base bytestring conduit conduit-extra containers
+    mtl optparse-simple text vector
+  ];
+  license = stdenv.lib.licenses.bsd3;
+  description = "Functional sed for JSON";
+  maintainers = with stdenv.lib.maintainers; [ fgaz ];
+  homepage = https://github.com/chrisdone/jl;
+}
diff --git a/nixpkgs/pkgs/development/tools/jmespath/default.nix b/nixpkgs/pkgs/development/tools/jmespath/default.nix
new file mode 100644
index 000000000000..c53d6608efd3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jmespath/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "jmespath-${version}";
+  version = "0.2.2";
+  rev = "${version}";
+
+  goPackagePath = "github.com/jmespath/go-jmespath";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "jmespath";
+    repo = "go-jmespath";
+    sha256 = "0f4j0m44limnjd6q5fk152g6jq2a5cshcdms4p3a1br8pl9wp5fb";
+  };
+  meta = with stdenv.lib; {
+    description = "A JMESPath implementation in Go";
+    homepage = https://github.com/jmespath/go-jmespath;
+    maintainers = with maintainers; [ cransom ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jo/default.nix b/nixpkgs/pkgs/development/tools/jo/default.nix
new file mode 100644
index 000000000000..2417f4cbfd1d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jo/default.nix
@@ -0,0 +1,25 @@
+{stdenv, fetchFromGitHub, autoreconfHook}:
+
+stdenv.mkDerivation rec {
+  pname = "jo";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner  = "jpmens";
+    repo = "jo";
+    rev = version;
+    sha256 ="03b22zb5034ccqyp4ynfzknxagb3jz2dppl0kqz2nv4a08aglpmy";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with stdenv.lib; {
+    description = "A small utility to create JSON objects";
+    homepage = https://github.com/jpmens/jo;
+    license = licenses.gpl2Plus;
+    maintainers = [maintainers.markus1189];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jp/default.nix b/nixpkgs/pkgs/development/tools/jp/default.nix
new file mode 100644
index 000000000000..e8e8acd6a9a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jp/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "jp-${version}";
+  version = "0.1.2";
+  rev = "${version}";
+
+  goPackagePath = "github.com/jmespath/jp";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "jmespath";
+    repo = "jp";
+    sha256 = "1i0jl0c062crigkxqx8zpyqliz8j4d37y95cna33jl777kx42r6h";
+  };
+  meta = with stdenv.lib; {
+    description = "A command line interface to the JMESPath expression language for JSON";
+    homepage = https://github.com/jmespath/jp;
+    maintainers = with maintainers; [ cransom ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jq/default.nix b/nixpkgs/pkgs/development/tools/jq/default.nix
new file mode 100644
index 000000000000..307968a68440
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jq/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, fetchpatch, oniguruma }:
+
+stdenv.mkDerivation rec {
+  name = "jq-${version}";
+  version="1.6";
+
+  src = fetchurl {
+    url="https://github.com/stedolan/jq/releases/download/jq-${version}/jq-${version}.tar.gz";
+    sha256="0wmapfskhzfwranf6515nzmm84r7kwljgfs7dg6bjgxakbicis2x";
+  };
+
+  outputs = [ "bin" "doc" "man" "dev" "lib" "out" ];
+
+  buildInputs = [ oniguruma ];
+
+  configureFlags =
+    [
+    "--bindir=\${bin}/bin"
+    "--sbindir=\${bin}/bin"
+    "--datadir=\${doc}/share"
+    "--mandir=\${man}/share/man"
+    ]
+    # jq is linked to libjq:
+    ++ stdenv.lib.optional (!stdenv.isDarwin) "LDFLAGS=-Wl,-rpath,\\\${libdir}";
+
+  doInstallCheck = true;
+  installCheckTarget = "check";
+
+  postInstallCheck = ''
+    $bin/bin/jq --help >/dev/null
+  '';
+
+  meta = with stdenv.lib; {
+    description = ''A lightweight and flexible command-line JSON processor'';
+    license = licenses.mit;
+    maintainers = with maintainers; [ raskin ];
+    platforms = with platforms; linux ++ darwin;
+    downloadPage = "http://stedolan.github.io/jq/download/";
+    updateWalker = true;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jsduck/Gemfile b/nixpkgs/pkgs/development/tools/jsduck/Gemfile
new file mode 100644
index 000000000000..483fc40ff799
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jsduck/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "jsduck"
diff --git a/nixpkgs/pkgs/development/tools/jsduck/Gemfile.lock b/nixpkgs/pkgs/development/tools/jsduck/Gemfile.lock
new file mode 100644
index 000000000000..2a95d72c9465
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jsduck/Gemfile.lock
@@ -0,0 +1,23 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    dimensions (1.2.0)
+    jsduck (5.3.4)
+      dimensions (~> 1.2.0)
+      json (~> 1.8.0)
+      parallel (~> 0.7.1)
+      rdiscount (~> 2.1.6)
+      rkelly-remix (~> 0.0.4)
+    json (1.8.6)
+    parallel (0.7.1)
+    rdiscount (2.1.8)
+    rkelly-remix (0.0.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  jsduck
+
+BUNDLED WITH
+   1.13.6
diff --git a/nixpkgs/pkgs/development/tools/jsduck/default.nix b/nixpkgs/pkgs/development/tools/jsduck/default.nix
new file mode 100644
index 000000000000..ef89517966d7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jsduck/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, bundlerEnv, makeWrapper, }:
+
+stdenv.mkDerivation rec {
+  pname = "jsduck";
+  name = "${pname}-${version}";
+  version = "5.3.4";
+
+  env = bundlerEnv {
+    name = "${pname}";
+    gemfile = ./Gemfile;
+    lockfile = ./Gemfile.lock;
+    gemset = ./gemset.nix;
+  };
+
+  phases = [ "installPhase" ];
+
+  buildInputs = [ env makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/jsduck $out/bin/jsduck
+  '';
+
+  meta = with lib; {
+    description = "Simple JavaScript Duckumentation generator.";
+    homepage    = https://github.com/senchalabs/jsduck;
+    license     = with licenses; gpl3;
+    maintainers = with stdenv.lib.maintainers; [ periklis ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jsduck/gemset.nix b/nixpkgs/pkgs/development/tools/jsduck/gemset.nix
new file mode 100644
index 000000000000..493cc42f4f4e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jsduck/gemset.nix
@@ -0,0 +1,51 @@
+{
+  dimensions = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pqb7yzjcpbgbyi196ifqbd1wy570cn12bkzcvpcha4xilhajja0";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  jsduck = {
+    dependencies = ["dimensions" "json" "parallel" "rdiscount" "rkelly-remix"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hac7g9g6gg10bigbm8dskwwbv1dfch8ca353gh2bkwf244qq2xr";
+      type = "gem";
+    };
+    version = "5.3.4";
+  };
+  json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5";
+      type = "gem";
+    };
+    version = "1.8.6";
+  };
+  parallel = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kzz6ydg7r23ks2b7zbpx4vz3h186n19vhgnjcwi7xwd6h2f1fsq";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  rdiscount = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vcyy90r6wfg0b0y5wqp3d25bdyqjbwjhkm1xy9jkz9a7j72n70v";
+      type = "gem";
+    };
+    version = "2.1.8";
+  };
+  rkelly-remix = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g7hjl9nx7f953y7lncmfgp0xgxfxvgfm367q6da9niik6rp1y3j";
+      type = "gem";
+    };
+    version = "0.0.7";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/json2hcl/default.nix b/nixpkgs/pkgs/development/tools/json2hcl/default.nix
new file mode 100644
index 000000000000..694428f55a6b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/json2hcl/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "json2hcl";
+  name = "${pname}-${version}";
+  version = "0.0.6";
+
+  src = fetchFromGitHub {
+    inherit owner;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0knil88n2w41w3nzqz6ljgfjkl5r3x0bh7ifqgiyf6sin3pl4pn0";
+  };
+
+  owner = "kvz";
+  goPackagePath = "github.com/${owner}/${pname}";
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "Convert JSON to HCL, and vice versa";
+    license = with licenses; [ mit ];
+    maintainers = [ maintainers.matthewbauer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/json2hcl/deps.nix b/nixpkgs/pkgs/development/tools/json2hcl/deps.nix
new file mode 100644
index 000000000000..bb9df28ad87f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/json2hcl/deps.nix
@@ -0,0 +1,20 @@
+[
+  {
+    goPackagePath = "github.com/Acconut/hcl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Acconut/hcl";
+      rev = "23c074d0eceb2b8a5bfdbb271ab780cde70f05a8";
+      sha256 = "0db4lpqb5m130rmfy3s3gjjf4dxllypmyrzxv6ggqhkmwmc7w4mc";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/hcl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/hcl";
+      rev = "23c074d0eceb2b8a5bfdbb271ab780cde70f05a8";
+      sha256 = "0db4lpqb5m130rmfy3s3gjjf4dxllypmyrzxv6ggqhkmwmc7w4mc";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/just/default.nix b/nixpkgs/pkgs/development/tools/just/default.nix
new file mode 100644
index 000000000000..447cc51ac39b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/just/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchFromGitHub, rustPlatform, coreutils, bash, dash }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "just";
+  version = "0.4.4";
+
+  src = fetchFromGitHub {
+    owner = "casey";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "06k1pl2qmmr9q0ffw6l0dzqqfgpckmrdzjpzn9cw23shhihv99a8";
+  };
+
+  cargoSha256 = "1blsdl9dsq24vhm8cg1ja9m4b3h343lndibq6wz2kcwdq4i8jhd0";
+
+  checkInputs = [ coreutils bash dash ];
+
+  preCheck = ''
+    # USER must not be empty
+    export USER=just-user
+    export USERNAME=just-user
+
+    sed -i tests/integration.rs \
+        -e "s@/bin/echo@${coreutils}/bin/echo@g" \
+        -e "s@#!/usr/bin/env sh@#!${bash}/bin/sh@g" \
+        -e "s@#!/usr/bin/env cat@#!${coreutils}/bin/cat@g"
+
+    sed -i tests/interrupts.rs \
+        -e "s@/bin/echo@${coreutils}/bin/echo@g" \
+        -e "s@#!/usr/bin/env sh@#!${bash}/bin/sh@g" \
+        -e "s@#!/usr/bin/env cat@#!${coreutils}/bin/cat@g"
+
+    sed -i src/justfile.rs \
+        -e "s@/bin/echo@${coreutils}/bin/echo@g" \
+        -e "s@#!/usr/bin/env sh@#!${bash}/bin/sh@g" \
+        -e "s@#!/usr/bin/env cat@#!${coreutils}/bin/cat@g"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A handy way to save and run project-specific commands";
+    homepage = https://github.com/casey/just;
+    license = licenses.cc0;
+    maintainers = with maintainers; [ xrelkd ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/k6/default.nix b/nixpkgs/pkgs/development/tools/k6/default.nix
new file mode 100644
index 000000000000..b8071bf1ac26
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/k6/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "k6";
+  version = "0.24.0";
+
+  goPackagePath = "github.com/loadimpact/k6";
+
+  src = fetchFromGitHub {
+    owner = "loadimpact";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1riyyi4lxdaqilzzkxzzw3hzcrjjcylq2jh3p3656f99wiisvj28";
+  };
+
+  subPackages = [ "./" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://k6.io/;
+    description = "A modern load testing tool, using Go and JavaScript";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ offline ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kafkacat/default.nix b/nixpkgs/pkgs/development/tools/kafkacat/default.nix
new file mode 100644
index 000000000000..4a837bcef652
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kafkacat/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, pkgconfig, zlib, rdkafka, yajl }:
+
+stdenv.mkDerivation rec {
+  name = "kafkacat-${version}";
+
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "edenhill";
+    repo = "kafkacat";
+    rev = "${version}";
+    sha256 = "0zs2nmf3ghm9iar7phc0ncqsb9nhipav94v6qmpxkfwxd2ljkpds";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ zlib rdkafka yajl ];
+
+  preConfigure = ''
+    patchShebangs ./configure
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A generic non-JVM producer and consumer for Apache Kafka";
+    homepage = https://github.com/edenhill/kafkacat;
+    license = licenses.bsd2;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ nyarly ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kexpand/default.nix b/nixpkgs/pkgs/development/tools/kexpand/default.nix
new file mode 100644
index 000000000000..a82c21b72e9e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kexpand/default.nix
@@ -0,0 +1,18 @@
+{ buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "kexpand-unstable-2017-05-12";
+
+  goPackagePath = "github.com/kopeio/kexpand";
+
+  subPackages = [ "." ];
+
+  src = fetchFromGitHub {
+    owner = "kopeio";
+    repo = "kexpand";
+    rev = "c508a43a4e84410dfd30827603e902148c5c1f3c";
+    sha256 = "0946h74lsqnr1106j7i2w2a5jg2bbk831d7prlws4bb2kigfm38p";
+  };
+
+  goDeps = ./deps.nix;
+}
diff --git a/nixpkgs/pkgs/development/tools/kexpand/deps.nix b/nixpkgs/pkgs/development/tools/kexpand/deps.nix
new file mode 100644
index 000000000000..c049d9683cce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kexpand/deps.nix
@@ -0,0 +1,63 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+
+  {
+    goPackagePath = "github.com/ghodss/yaml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ghodss/yaml";
+      rev = "v1.0.0";
+      sha256 = "0skwmimpy7hlh7pva2slpcplnm912rp3igs98xnqmn859kwa5v8g";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/golang/glog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/glog";
+      rev = "23def4e6c14b";
+      sha256 = "0jb2834rw5sykfr937fxi8hxi2zy80sj2bdn9b3jb4b26ksqng30";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/spf13/cobra";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cobra";
+      rev = "v0.0.3";
+      sha256 = "1q1nsx05svyv9fv3fy6xv6gs9ffimkyzsfm49flvl3wnvf1ncrkd";
+    };
+  }
+
+  {
+    goPackagePath = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev = "v1.0.3";
+      sha256 = "1cj3cjm7d3zk0mf1xdybh0jywkbbw7a6yr3y22x9sis31scprswd";
+    };
+  }
+
+  {
+    goPackagePath = "gopkg.in/check.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/check.v1";
+      rev = "20d25e280405";
+      sha256 = "0k1m83ji9l1a7ng8a7v40psbymxasmssbrrhpdv2wl4rhs0nc3np";
+    };
+  }
+
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "v2.2.1";
+      sha256 = "0dwjrs2lp2gdlscs7bsrmyc5yf6mm4fvgw71bzr9mv2qrd2q73s1";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/kind/default.nix b/nixpkgs/pkgs/development/tools/kind/default.nix
new file mode 100644
index 000000000000..3a2040e712a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kind/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+with stdenv.lib;
+
+buildGoPackage rec {
+  name = "kind-${version}";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    rev    = "v${version}";
+    owner  = "kubernetes-sigs";
+    repo   = "kind";
+    sha256 = "1azl5knw1n7g42xp92r9k7y4rzwp9xx0spcldszrpry2v4lmc5sb";
+  };
+
+  # move dev tool package that confuses the go compiler
+  patchPhase = "rm -r hack";
+
+  goDeps = ./deps.nix;
+  goPackagePath = "sigs.k8s.io/kind";
+  excludedPackages = "images/base/entrypoint";
+
+  meta = {
+    description = "Kubernetes IN Docker - local clusters for testing Kubernetes";
+    homepage    = https://github.com/kubernetes-sigs/kind;
+    maintainers = with maintainers; [ offline rawkode ];
+    license     = stdenv.lib.licenses.asl20;
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kind/deps.nix b/nixpkgs/pkgs/development/tools/kind/deps.nix
new file mode 100644
index 000000000000..1681fe9e2eb4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kind/deps.nix
@@ -0,0 +1,507 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+  {
+    goPackagePath = "github.com/NYTimes/gziphandler";
+    fetch = {
+      type = "git";
+      url = "https://github.com/NYTimes/gziphandler";
+      rev = "56545f4a5d46";
+      sha256 = "1fwk9wz6vrvq72f2gq8jhvd1nvv6grqgwrjq66vjpm0726pxar72";
+    };
+  }
+  {
+    goPackagePath = "github.com/PuerkitoBio/purell";
+    fetch = {
+      type = "git";
+      url = "https://github.com/PuerkitoBio/purell";
+      rev = "v1.1.0";
+      sha256 = "0vsxyn1fbm7g873b8kf3hcsgqgncb5nmfq3zfsc35a9yhzarka91";
+    };
+  }
+  {
+    goPackagePath = "github.com/PuerkitoBio/urlesc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/PuerkitoBio/urlesc";
+      rev = "de5bf2ad4578";
+      sha256 = "0n0srpqwbaan1wrhh2b7ysz543pjs1xw2rghvqyffg9l0g8kzgcw";
+    };
+  }
+  {
+    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/emicklei/go-restful";
+    fetch = {
+      type = "git";
+      url = "https://github.com/emicklei/go-restful";
+      rev = "ff4f55a20633";
+      sha256 = "1v5lj5142abz3gvbygp6xghpdx4ps2lwswl8559ivaidahwnc21c";
+    };
+  }
+  {
+    goPackagePath = "github.com/evanphx/json-patch";
+    fetch = {
+      type = "git";
+      url = "https://github.com/evanphx/json-patch";
+      rev = "v4.2.0";
+      sha256 = "0cfvyhl3hjfc4z8hbkfc40yafv6r7y513zgp3jwf88isbd13r7a6";
+    };
+  }
+  {
+    goPackagePath = "github.com/ghodss/yaml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ghodss/yaml";
+      rev = "v1.0.0";
+      sha256 = "0skwmimpy7hlh7pva2slpcplnm912rp3igs98xnqmn859kwa5v8g";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-openapi/jsonpointer";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-openapi/jsonpointer";
+      rev = "v0.17.0";
+      sha256 = "0sv2k1fwj6rsigc9489c19ap0jib1d0widm040h0sjdw2nadh3i2";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-openapi/jsonreference";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-openapi/jsonreference";
+      rev = "v0.17.0";
+      sha256 = "1d0rk17wn755xsfi9pxifdpgs2p23bc0rkf95kjwxczyy6jbqdaj";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-openapi/spec";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-openapi/spec";
+      rev = "v0.19.0";
+      sha256 = "1527dbn74c0gw9gib5lmdr5vjgp5h57r1j92c3wh37irz90vnb6a";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-openapi/swag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-openapi/swag";
+      rev = "v0.17.0";
+      sha256 = "1hhgbx59f7lcsqiza2is8q9walhf8mxfkwj7xql1scrn6ms2jmlv";
+    };
+  }
+  {
+    goPackagePath = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev = "v1.2.1";
+      sha256 = "06yqa6h0kw3gr5pc3qmas7f7435a96zf7iw7p0l00r2hqf6fqq6m";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "4bd1920723d7";
+      sha256 = "0z21hxin616xvkv075vdz416zm36qs0mbi76526l9yz8khbg7jmr";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/gofuzz";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/gofuzz";
+      rev = "v1.0.0";
+      sha256 = "0qz439qvccm91w0mmjz4fqgx48clxdwagkvvx89cr43q1d4iry36";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/uuid";
+      rev = "v1.1.1";
+      sha256 = "0hfxcf9frkb57k6q0rdkrmnfs78ms21r1qfk9fhlqga2yh5xg8zb";
+    };
+  }
+  {
+    goPackagePath = "github.com/googleapis/gnostic";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/gnostic";
+      rev = "68f4ded48ba9";
+      sha256 = "0l6qkbpmy2qd0q8h7dghhv27qjngll739kzm389qdbjxj3inq2dl";
+    };
+  }
+  {
+    goPackagePath = "github.com/inconshreveable/mousetrap";
+    fetch = {
+      type = "git";
+      url = "https://github.com/inconshreveable/mousetrap";
+      rev = "v1.0.0";
+      sha256 = "1mn0kg48xkd74brf48qf5hzp0bc6g8cf5a77w895rl3qnlpfw152";
+    };
+  }
+  {
+    goPackagePath = "github.com/json-iterator/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/json-iterator/go";
+      rev = "v1.1.6";
+      sha256 = "08caswxvdn7nvaqyj5kyny6ghpygandlbw9vxdj7l5vkp7q0s43r";
+    };
+  }
+  {
+    goPackagePath = "github.com/kisielk/errcheck";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kisielk/errcheck";
+      rev = "v1.1.0";
+      sha256 = "19vd4rxmqbk5lpiav3pf7df3yjlz0l0dwx9mn0gjq5f998iyhy6y";
+    };
+  }
+  {
+    goPackagePath = "github.com/kisielk/gotool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kisielk/gotool";
+      rev = "v1.0.0";
+      sha256 = "14af2pa0ssyp8bp2mvdw184s5wcysk6akil3wzxmr05wwy951iwn";
+    };
+  }
+  {
+    goPackagePath = "github.com/konsorten/go-windows-terminal-sequences";
+    fetch = {
+      type = "git";
+      url = "https://github.com/konsorten/go-windows-terminal-sequences";
+      rev = "v1.0.1";
+      sha256 = "1lchgf27n276vma6iyxa0v1xds68n2g8lih5lavqnx5x6q5pw2ip";
+    };
+  }
+  {
+    goPackagePath = "github.com/mailru/easyjson";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mailru/easyjson";
+      rev = "60711f1a8329";
+      sha256 = "0234jp6134wkihdpdwq1hvzqblgl5khc1wp6dyi2h0hgh88bhdk1";
+    };
+  }
+  {
+    goPackagePath = "github.com/modern-go/concurrent";
+    fetch = {
+      type = "git";
+      url = "https://github.com/modern-go/concurrent";
+      rev = "bacd9c7ef1dd";
+      sha256 = "0s0fxccsyb8icjmiym5k7prcqx36hvgdwl588y0491gi18k5i4zs";
+    };
+  }
+  {
+    goPackagePath = "github.com/modern-go/reflect2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/modern-go/reflect2";
+      rev = "v1.0.1";
+      sha256 = "06a3sablw53n1dqqbr2f53jyksbxdmmk8axaas4yvnhyfi55k4lf";
+    };
+  }
+  {
+    goPackagePath = "github.com/munnerz/goautoneg";
+    fetch = {
+      type = "git";
+      url = "https://github.com/munnerz/goautoneg";
+      rev = "a547fc61f48d";
+      sha256 = "19khhn5xhqv1yp7d6k987gh5w5rhrjnp4p0c6fyrd8z6lzz5h9qi";
+    };
+  }
+  {
+    goPackagePath = "github.com/onsi/ginkgo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/onsi/ginkgo";
+      rev = "11459a886d9c";
+      sha256 = "1nswc1fnrrs792qbix05h91bilj8rr3wxmxgwi97p2gjk0r292zh";
+    };
+  }
+  {
+    goPackagePath = "github.com/onsi/gomega";
+    fetch = {
+      type = "git";
+      url = "https://github.com/onsi/gomega";
+      rev = "dcabb60a477c";
+      sha256 = "1775lv5jbsgv3ghq5v2827slqlhqdadrzc1nkpq4y0hdv2qzrgkm";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev = "v0.8.0";
+      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+    };
+  }
+  {
+    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/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev = "v1.4.1";
+      sha256 = "1m7ny9jkb98cxqhsp13xa5hnqh1s9f25x04q6arsala4zswsw33c";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cobra";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cobra";
+      rev = "v0.0.3";
+      sha256 = "1q1nsx05svyv9fv3fy6xv6gs9ffimkyzsfm49flvl3wnvf1ncrkd";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev = "v1.0.3";
+      sha256 = "1cj3cjm7d3zk0mf1xdybh0jywkbbw7a6yr3y22x9sis31scprswd";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/objx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/objx";
+      rev = "v0.1.1";
+      sha256 = "0iph0qmpyqg4kwv8jsx6a56a7hhqq8swrazv40ycxk9rzr0s8yls";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "v1.2.2";
+      sha256 = "0dlszlshlxbmmfxj5hlwgv3r22x0y1af45gn1vd198nvvs3pnvfs";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "c2843e01d9a2";
+      sha256 = "01xgxbj5r79nmisdvpq48zfy8pzaaj90bn6ngd4nf33j9ar1dp8r";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "3ec191127204";
+      sha256 = "0zzhbkw3065dp1jscp7q8dxw3mkwj95ixnrr8j7c47skis0m11i3";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "d0b11bdaac8a";
+      sha256 = "18yfsmw622l7gc5sqriv5qmck6903vvhivpzp8i3xfy3z33dybdl";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "v0.3.0";
+      sha256 = "0r6x6zjzhr8ksqlpiwm5gdd7s209kwk5p4lw54xjvz10cs3qlq19";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "1f849cf54d09";
+      sha256 = "19a3srk9dcqad3sqd8mfg36pbaxcfkbzhp3jinhqxnzd90bds6am";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/check.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/check.v1";
+      rev = "20d25e280405";
+      sha256 = "0k1m83ji9l1a7ng8a7v40psbymxasmssbrrhpdv2wl4rhs0nc3np";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/inf.v0";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/inf.v0";
+      rev = "v0.9.1";
+      sha256 = "00k5iqjcp371fllqxncv7jkf80hn1zww92zm78cclbcn4ybigkng";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "v2.2.1";
+      sha256 = "0dwjrs2lp2gdlscs7bsrmyc5yf6mm4fvgw71bzr9mv2qrd2q73s1";
+    };
+  }
+  {
+    goPackagePath = "k8s.io/api";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/api";
+      rev = "6e4e0e4f393b";
+      sha256 = "0y7nxxywq2qx74a5vsg0h2jkfj879wbv6bjran12401fv0vsdlp1";
+    };
+  }
+  {
+    goPackagePath = "k8s.io/apimachinery";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/apimachinery";
+      rev = "6a84e37a896d";
+      sha256 = "1ys06ixidvpcj9sgk0c2i5vsz11gg3h8xcpc9kqxfsik36cw1akk";
+    };
+  }
+  {
+    goPackagePath = "k8s.io/client-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/client-go";
+      rev = "v11.0.0";
+      sha256 = "006007k55b5q95fa0vih4bprwvx5sk4a5chvsn46baqa5znphyn1";
+    };
+  }
+  {
+    goPackagePath = "k8s.io/gengo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/gengo";
+      rev = "0689ccc1d7d6";
+      sha256 = "10c0kbm07pzxwdxpsmcgqkcxqxaijyywvwj1rciw6ssfcgx7kdc5";
+    };
+  }
+  {
+    goPackagePath = "k8s.io/klog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/klog";
+      rev = "v0.3.0";
+      sha256 = "05lp8ddqnbypgszv3ra7x105qpr8rr1g4rk2148wcmgfjrfhw437";
+    };
+  }
+  {
+    goPackagePath = "k8s.io/kube-openapi";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/kube-openapi";
+      rev = "a01b7d5d6c22";
+      sha256 = "182s6gqhzal5602dfyk9h8adsdqgh5fmgh0bifksp1x856v4aizx";
+    };
+  }
+  {
+    goPackagePath = "sigs.k8s.io/kustomize";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes-sigs/kustomize";
+      rev = "v2.0.3";
+      sha256 = "1dfkpx9rllj1bzm5f52bx404kdds3zx1h38yqri9ha3p3pcb1bbb";
+    };
+  }
+  {
+    goPackagePath = "sigs.k8s.io/structured-merge-diff";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes-sigs/structured-merge-diff";
+      rev = "ea680f03cc65";
+      sha256 = "1drc908qcvwifvbz12vxahplycnaj177pz5ay6ygbn3q8824qv7b";
+    };
+  }
+  {
+    goPackagePath = "sigs.k8s.io/yaml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes-sigs/yaml";
+      rev = "v1.1.0";
+      sha256 = "1p7hvjdr5jsyk7nys1g1pmgnf3ys6n320i6hds85afppk81k01kb";
+    };
+  }
+  {
+    goPackagePath = "github.com/vishvananda/netlink";
+    fetch = {
+      type = "git";
+      url = "https://github.com/vishvananda/netlink";
+      rev = "v1.0.0";
+      sha256 = "0hpzghf1a4cwawzhkiwdzin80h6hd09fskl77d5ppgc084yvj8x0";
+    };
+  }
+  {
+    goPackagePath = "github.com/vishvananda/netns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/vishvananda/netns";
+      rev = "13995c7128cc";
+      sha256 = "1zk6w8158qi4niva5rijchbv9ixgmijsgqshh54wdaav4xrhjshn";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/oauth2";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/oauth2";
+      rev = "9f3314589c9a";
+      sha256 = "13rr34jmgisgy8mc7yqz3474w4qbs01gz4b7zrgkvikdv4a6py3h";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/time";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/time";
+      rev = "9d24e82272b4";
+      sha256 = "1f5nkr4vys2vbd8wrwyiq2f5wcaahhpxmia85d1gshcbqjqf8dkb";
+    };
+  }
+  {
+    goPackagePath = "k8s.io/utils";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/utils";
+      rev = "8fab8cb257d5";
+      sha256 = "0ckkl9zj8c0p5csfgsnvgb3vm91l2zgxgxhbjcf3ds3wryljalyj";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/ktlint/default.nix b/nixpkgs/pkgs/development/tools/ktlint/default.nix
new file mode 100644
index 000000000000..0bfe54508b81
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ktlint/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  name = "ktlint-${version}";
+  version = "0.33.0";
+
+  src = fetchurl {
+    url = "https://github.com/shyiko/ktlint/releases/download/${version}/ktlint";
+    sha256 = "11yh4d7ybmddw86n8ms259rwd3q0gx2qqir2x92dhywp6pb8g11b";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  propagatedBuildInputs = [ jre ];
+
+  unpackCmd = ''
+    mkdir -p ${name}
+    cp $curSrc ${name}/ktlint
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv ktlint $out/bin/ktlint
+    chmod +x $out/bin/ktlint
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/ktlint --prefix PATH : "${jre}/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An anti-bikeshedding Kotlin linter with built-in formatter";
+    homepage = https://ktlint.github.io/;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ tadfisher ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kube-aws/default.nix b/nixpkgs/pkgs/development/tools/kube-aws/default.nix
new file mode 100644
index 000000000000..af5c0e9c2f9f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kube-aws/default.nix
@@ -0,0 +1,36 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+
+with lib;
+
+buildGoPackage rec {
+  name = "kube-aws-${version}";
+  version = "0.9.4";
+
+  goPackagePath = "github.com/coreos/kube-aws";
+
+  src = fetchFromGitHub {
+    owner = "coreos";
+    repo = "kube-aws";
+    rev = "v${version}";
+    sha256 = "11h14fsnflbx76rmpp0fxahbxi2qgcamgyxy9s4rmw83j2m8csxp";
+  };
+
+  preBuild = ''(
+    cd go/src/${goPackagePath}
+    go generate ./core/controlplane/config
+    go generate ./core/nodepool/config
+    go generate ./core/root/config
+  )'';
+
+  buildFlagsArray = ''
+    -ldflags=-X github.com/coreos/kube-aws/core/controlplane/cluster.VERSION=v${version}
+  '';
+
+  meta = {
+    description = "Tool for deploying kubernetes on aws using coreos";
+    license = licenses.asl20;
+    homepage = https://github.com/coreos/coreos-kubernetes;
+    maintainers = with maintainers; [offline];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kube-prompt/default.nix b/nixpkgs/pkgs/development/tools/kube-prompt/default.nix
new file mode 100644
index 000000000000..20a26824e5e7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kube-prompt/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "kube-prompt-${version}";
+  version = "1.0.5";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/c-bata/kube-prompt";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "c-bata";
+    repo = "kube-prompt";
+    sha256 = "1c1y0n1yxcaxvhlsj7b0wvhi934b5g0s1mi46hh5amb9j3dhgq1c";
+  };
+
+  subPackages = ["."];
+  goDeps = ./deps.nix;
+
+  meta = {
+  description = "An interactive kubernetes client featuring auto-complete using go-prompt";
+    license = lib.licenses.mit;
+    homepage = https://github.com/c-bata/kube-prompt;
+    maintainers = [ lib.maintainers.vdemeester ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kube-prompt/deps.nix b/nixpkgs/pkgs/development/tools/kube-prompt/deps.nix
new file mode 100644
index 000000000000..e2391789a41c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kube-prompt/deps.nix
@@ -0,0 +1,309 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "cloud.google.com/go";
+    fetch = {
+      type = "git";
+      url = "https://code.googlesource.com/gocloud";
+      rev =  "aad3f485ee528456e0768f20397b4d9dd941e755";
+      sha256 = "1cgabmg76axkbpm7zip3ym2mym6kwgc9cw9kil0inmckkh3x1ky8";
+    };
+  }
+  {
+    goPackagePath  = "github.com/c-bata/go-prompt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/c-bata/go-prompt";
+      rev =  "09daf6ae57865e436aab9ede6b66b490036e87de";
+      sha256 = "1s58y0i67x2yvi3iisdhj2qqrbl4kz0viy06caip8ykhxpvvkq30";
+    };
+  }
+  {
+    goPackagePath  = "github.com/ghodss/yaml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ghodss/yaml";
+      rev =  "0ca9ea5df5451ffdf184b4428c902747c2c11cd7";
+      sha256 = "0skwmimpy7hlh7pva2slpcplnm912rp3igs98xnqmn859kwa5v8g";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev =  "636bf0302bc95575d69441b25a2603156ffdddf1";
+      sha256 = "1525pq7r6h3s8dncvq8gxi893p2nq8dxpzvq0nfl5b4p6mq0v1c2";
+    };
+  }
+  {
+    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 =  "b4deda0973fb4c70b50d226b1af49f3da59f5265";
+      sha256 = "0ya4ha7m20bw048m1159ppqzlvda4x0vdprlbk5sdgmy74h3xcdq";
+    };
+  }
+  {
+    goPackagePath  = "github.com/google/btree";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/btree";
+      rev =  "e89373fe6b4a7413d7acd6da1725b83ef713e6e4";
+      sha256 = "0jlkjjlf8ilifgsb2bv0jfgl4cxl1bypx7a6pjkwz3xf6k8jd7mj";
+    };
+  }
+  {
+    goPackagePath  = "github.com/google/gofuzz";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/gofuzz";
+      rev =  "24818f796faf91cd76ec7bddd72458fbced7a6c1";
+      sha256 = "0cq90m2lgalrdfrwwyycrrmn785rgnxa3l3vp9yxkvnv88bymmlm";
+    };
+  }
+  {
+    goPackagePath  = "github.com/googleapis/gnostic";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/gnostic";
+      rev =  "7c663266750e7d82587642f65e60bc4083f1f84e";
+      sha256 = "0yh3ckd7m0r9h50wmxxvba837d0wb1k5yd439zq4p1kpp4390z12";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gregjones/httpcache";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gregjones/httpcache";
+      rev =  "9cad4c3443a7200dd6400aef47183728de563a38";
+      sha256 = "0wjdwcwqqcx2d5y68qvhg6qyj977il5ijmnn9h9cd6wjbdy0ay6s";
+    };
+  }
+  {
+    goPackagePath  = "github.com/imdario/mergo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/imdario/mergo";
+      rev =  "9316a62528ac99aaecb4e47eadd6dc8aa6533d58";
+      sha256 = "1mvgn89vp39gcpvhiq4n7nw5ipj7fk6h03jgc6fjwgvwvss213pb";
+    };
+  }
+  {
+    goPackagePath  = "github.com/json-iterator/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/json-iterator/go";
+      rev =  "ab8a2e0c74be9d3be70b3184d9acc634935ded82";
+      sha256 = "1x3wz44p1238gpyzkiiilvvrq9q8dwjdm9kdidq65yjq0zcn0sq4";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev =  "167de6bfdfba052fa6b2d3664c8f5272e23c9072";
+      sha256 = "1nwjmsppsjicr7anq8na6md7b1z84l9ppnlr045hhxjvbkqwalvx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev =  "0360b2af4f38e8d38c7fce2a9f4e702702d73a39";
+      sha256 = "06w45aqz2a6yrk25axbly2k5wmsccv8cspb94bfmz4izvw8h927n";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-runewidth";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-runewidth";
+      rev =  "ce7b0b5c7b45a81508558cd1dba6bb1e4ddb51bb";
+      sha256 = "0lc39b6xrxv7h3v3y1kgz49cgi5qxwlygs715aam6ba35m48yi7g";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-tty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-tty";
+      rev =  "931426f7535ac39720c8909d70ece5a41a2502a6";
+      sha256 = "00cb07v13xrfqm39m1j2h2zvj684gl9fzr51591i9a52a9m6xlj5";
+    };
+  }
+  {
+    goPackagePath  = "github.com/modern-go/concurrent";
+    fetch = {
+      type = "git";
+      url = "https://github.com/modern-go/concurrent";
+      rev =  "bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94";
+      sha256 = "0s0fxccsyb8icjmiym5k7prcqx36hvgdwl588y0491gi18k5i4zs";
+    };
+  }
+  {
+    goPackagePath  = "github.com/modern-go/reflect2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/modern-go/reflect2";
+      rev =  "4b7aa43c6742a2c18fdef89dd197aaae7dac7ccd";
+      sha256 = "1721y3yr3dpx5dx5ashf063qczk2awy5zjir1jvp1h5hn7qz4i49";
+    };
+  }
+  {
+    goPackagePath  = "github.com/petar/GoLLRB";
+    fetch = {
+      type = "git";
+      url = "https://github.com/petar/GoLLRB";
+      rev =  "53be0d36a84c2a886ca057d34b6aa4468df9ccb4";
+      sha256 = "01xp3lcamqkvl91jg6ly202gdsgf64j39rkrcqxi6v4pbrcv7hz0";
+    };
+  }
+  {
+    goPackagePath  = "github.com/peterbourgon/diskv";
+    fetch = {
+      type = "git";
+      url = "https://github.com/peterbourgon/diskv";
+      rev =  "5f041e8faa004a95c88a202771f4cc3e991971e6";
+      sha256 = "1mxpa5aad08x30qcbffzk80g9540wvbca4blc1r2qyzl65b8929b";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/term";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/term";
+      rev =  "cda20d4ac917ad418d86e151eff439648b06185b";
+      sha256 = "08frhz411dwyli5spfxn32d3ni9mrgdav51lmg8a1wpdmw0r0wwp";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev =  "583c0c0531f06d5278b7d917446061adc344b5cd";
+      sha256 = "0nr4mdpfhhk94hq4ymn5b2sxc47b29p1akxd8b0hx4dvdybmipb5";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev =  "a2144134853fc9a27a7b1e3eb4f19f1a76df13c9";
+      sha256 = "0hjjk6k9dq7zllwsw9icdfbli12ii379q2lajd6l7lyw72wy28by";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev =  "a680a1efc54dd51c040b3b5ce4939ea3cf2ea0d1";
+      sha256 = "018zmn4kmg2mbngcciqal54slc3pl4ry5vlv0bw36fcxvnazxnbp";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/oauth2";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/oauth2";
+      rev =  "ef147856a6ddbb60760db74283d2424e98c87bff";
+      sha256 = "1q1vm1z40fx1grlrm7az4rln6v5pj9xi5n1cjqg5xgq4dsk9132y";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "ac767d655b305d4e9612f5f6e33120b9176c4ad4";
+      sha256 = "1ds29n5lh4j21hmzxz7vk7hv1k6sixc7f0zsdc9xqdg0j7d212zm";
+    };
+  }
+  {
+    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 =  "fbb02b2291d28baffd63558aa44b4b56f178d650";
+      sha256 = "0jjqcv6rzihlgg4i797q80g1f6ch5diz2kxqh6488gwkb6nds4h4";
+    };
+  }
+  {
+    goPackagePath  = "google.golang.org/appengine";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/appengine";
+      rev =  "b1f26356af11148e710935ed1ac8a7f5702c7612";
+      sha256 = "1pz202zszg8f35dk5pfhwgcdi3r6dx1l4yk6x6ly7nb4j45zi96x";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/inf.v0";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-inf/inf";
+      rev =  "d2d2541c53f18d2a059457998ce2876cc8e67cbf";
+      sha256 = "00k5iqjcp371fllqxncv7jkf80hn1zww92zm78cclbcn4ybigkng";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-yaml/yaml";
+      rev =  "5420a8b6744d3b0345ab293f6fcba19c978f1183";
+      sha256 = "0dwjrs2lp2gdlscs7bsrmyc5yf6mm4fvgw71bzr9mv2qrd2q73s1";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/api";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/api";
+      rev =  "072894a440bdee3a891dea811fe42902311cd2a3";
+      sha256 = "1hlbfwak4adwkj74jdiw8kmapri9rqmmjssncqiq0xnwlkcyn0ig";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/apimachinery";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/apimachinery";
+      rev =  "103fd098999dc9c0c88536f5c9ad2e5da39373ae";
+      sha256 = "04navnpm59d75dhlz07rmay7m2izrf4m0i9xklxzqg7mlk9g20jc";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/client-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/client-go";
+      rev =  "7d04d0e2a0a1a4d4a1cd6baa432a2301492e4e65";
+      sha256 = "06rszpgckx9gmqz9gbq8wnl39d1dnl28wdgrygj2fhz5prhj0x4s";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/kubectx/default.nix b/nixpkgs/pkgs/development/tools/kubectx/default.nix
new file mode 100644
index 000000000000..0f9fb36a3f4e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubectx/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, lib, fetchFromGitHub, kubectl, makeWrapper }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "kubectx";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = "ahmetb";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0nb867llpvjmkxv5bbqnyjrc4z74kibqg1d3dw7m47d5a5hn8525";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+  doCheck = false;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/zsh/site-functions
+    mkdir -p $out/share/bash-completion/completions
+    mkdir -p $out/share/fish/vendor_completions.d
+
+    cp kubectx $out/bin
+    cp kubens $out/bin
+
+    # Provide ZSH completions
+    cp completion/kubectx.zsh $out/share/zsh/site-functions/_kubectx
+    cp completion/kubens.zsh $out/share/zsh/site-functions/_kubens
+
+    # Provide BASH completions
+    cp completion/kubectx.bash $out/share/bash-completion/completions/kubectx
+    cp completion/kubens.bash $out/share/bash-completion/completions/kubens
+
+    # Provide FISH completions
+    cp completion/*.fish $out/share/fish/vendor_completions.d/
+
+    for f in $out/bin/*; do
+      wrapProgram $f --prefix PATH : ${makeBinPath [ kubectl ]}
+    done
+  '';
+
+  meta = {
+    description = "Fast way to switch between clusters and namespaces in kubectl!";
+    license = licenses.asl20;
+    homepage = https://github.com/ahmetb/kubectx;
+    maintainers = with maintainers; [ periklis ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kubicorn/default.nix b/nixpkgs/pkgs/development/tools/kubicorn/default.nix
new file mode 100644
index 000000000000..fb76aed7b9eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubicorn/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, lib, buildGoPackage, fetchFromGitHub }:
+
+with stdenv.lib;
+
+buildGoPackage rec {
+  name = "kubicorn-${version}";
+  version = "2018-10-13-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "4c7f3623e9188fba43778271afe161a4facfb657";
+
+  src = fetchFromGitHub {
+    rev = rev;
+    owner = "kubicorn";
+    repo = "kubicorn";
+    sha256 = "18h5sj4lcivrwjq2hzn7c3g4mblw17zicb5nma8sh7sakwzyg1k9";
+  };
+
+  subPackages = ["."];
+  goPackagePath = "github.com/kubicorn/kubicorn";
+
+  meta = {
+    description = "Simple, cloud native infrastructure for Kubernetes";
+    homepage = http://kubicorn.io/;
+    maintainers = with stdenv.lib.maintainers; [ offline ];
+    license = stdenv.lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kustomize/default.nix b/nixpkgs/pkgs/development/tools/kustomize/default.nix
new file mode 100644
index 000000000000..49cea5e8ac81
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kustomize/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "kustomize-${version}";
+  version = "2.0.3";
+  # rev is the 2.0.3 commit, mainly for kustomize version command output
+  rev = "a6f65144121d1955266b0cd836ce954c04122dc8";
+
+  goPackagePath = "sigs.k8s.io/kustomize";
+
+  buildFlagsArray = let t = "${goPackagePath}/pkg/commands/misc"; in ''
+    -ldflags=
+      -s -X ${t}.kustomizeVersion=${version}
+         -X ${t}.gitCommit=${rev}
+         -X ${t}.buildDate=unknown
+  '';
+
+  src = fetchFromGitHub {
+    sha256 = "1dfkpx9rllj1bzm5f52bx404kdds3zx1h38yqri9ha3p3pcb1bbb";
+    rev = "v${version}";
+    repo = "kustomize";
+    owner = "kubernetes-sigs";
+  };
+
+  meta = with lib; {
+    description = "Customization of kubernetes YAML configurations";
+    longDescription = ''
+      kustomize lets you customize raw, template-free YAML files for
+      multiple purposes, leaving the original YAML untouched and usable
+      as is.
+    '';
+    homepage = https://github.com/kubernetes-sigs/kustomize;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ carlosdagos vdemeester periklis zaninime ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kythe/default.nix b/nixpkgs/pkgs/development/tools/kythe/default.nix
new file mode 100644
index 000000000000..bd25a60f72c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kythe/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, binutils , fetchurl, glibc, ncurses5 }:
+
+stdenv.mkDerivation rec {
+  version = "0.0.28";
+  name = "kythe-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/google/kythe/releases/download/v0.0.28/kythe-v0.0.28.tar.gz";
+    sha256 = "1qc7cngpxw66m3krpr5x50ns7gb3bpv2bdfzpb5afl12qp0mi6zm";
+  };
+
+  buildInputs =
+    [ binutils ];
+
+  doCheck = false;
+
+  dontBuild = true;
+
+  installPhase = ''
+    cd tools
+    for exe in http_server \
+                kythe read_entries triples verifier \
+                write_entries write_tables entrystream; do
+      echo "Patching:" $exe
+      patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $exe
+      patchelf --set-rpath "${stdenv.cc.cc.lib}/lib64:${ncurses5}/lib" $exe
+    done
+    cd ../
+    cp -R ./ $out
+    ln -s $out/tools $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A pluggable, (mostly) language-agnostic ecosystem for building tools that work with code.";
+    longDescription = ''
+    The Kythe project was founded to provide and support tools and standards
+      that encourage interoperability among programs that manipulate source
+      code. At a high level, the main goal of Kythe is to provide a standard,
+      language-agnostic interchange mechanism, allowing tools that operate on
+      source code — including build systems, compilers, interpreters, static
+      analyses, editors, code-review applications, and more — to share
+      information with each other smoothly.  '';
+    homepage = https://kythe.io/;
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.mpickering ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/lattice-diamond/default.nix b/nixpkgs/pkgs/development/tools/lattice-diamond/default.nix
new file mode 100644
index 000000000000..1691f09e6e41
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lattice-diamond/default.nix
@@ -0,0 +1,115 @@
+{ stdenv, rpmextract, patchelf, makeWrapper, file, requireFile, glib, zlib, 
+    freetype, fontconfig, xorg }:
+
+stdenv.mkDerivation rec {
+  name = "diamond-3.10";
+
+  nativeBuildInputs = [ rpmextract patchelf makeWrapper file ];
+
+  src = requireFile {
+    name = "diamond_3_10-base_x64-111-2-x86_64-linux.rpm";
+    url = "http://www.latticesemi.com/view_document?document_id=52180";
+    sha256 = "ec0b370cf8bd55831eeed7c5eadcabacbd6e63ac657c20209d672119a07a5c0f";
+  };
+
+  buildCommand = ''
+    origprefix=usr/local/diamond/3.10_x64
+    prefix=diamond
+    
+    echo "Unpacking $src..."
+    rpmextract $src
+    
+    # Move $pwd/usr/local/diamond/VERS to $out/diamond, cd.
+    mkdir -p $out/$prefix
+    rmdir $out/$prefix
+    mv $origprefix $out/$prefix
+    
+    cd $out
+    
+    # Extract all tarballs.
+    for tb in \
+        cae_library/cae_library.tar.gz \
+        embedded_source/embedded_source.tar.gz \
+        ispfpga/ispfpga.tar.gz \
+        synpbase/synpbase.tar.gz \
+        tcltk/tcltk.tar.gz \
+        bin/bin.tar.gz \
+        examples/examples.tar.gz \
+        data/data.tar.gz ; do
+    
+        echo "Extracting tarball $prefix/$tb"
+        cd $out/$prefix/$(dirname $tb)
+        tar xf $(basename $tb)
+        rm $(basename $tb)
+    done
+    
+    # Patch shebangs in start scripts .
+    cd $out/$prefix/bin/lin64
+    for tool in \
+        programmer \
+        pgrcmd \
+        diamond_env \
+        powercal \
+        model300 \
+        update \
+        diamond \
+        debugger \
+        ddtcmd \
+        cableserver \
+        revealrva \
+        ipexpress \
+        fileutility \
+        diamond ; do
+        
+        echo "Patching script $prefix/bin/lin64/$tool..."
+        patchShebangs $tool
+    done
+    
+    # Patch executable ELFs.
+    for path in bin/lin64 ispfpga/bin/lin64; do
+        cd $out/$prefix/$path
+        for f in *; do
+            if ! file $f | grep -q "ELF 64-bit LSB executable" ; then
+                continue
+            fi
+            echo "Patching ELF $prefix/$path/$f..."
+            # We force RPATH otherwise libraries from LD_LIBRARY_PATH (which the
+            # tools mangle by themselves) will not be able to find their
+            # dependencies from nix.
+            patchelf \
+                --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+                --set-rpath "$libPath" --force-rpath \
+                $f
+        done
+    done
+    
+    # Remove 32-bit libz.
+    rm $out/$prefix/bin/lin64/libz.{so,so.1}
+    
+    # Make wrappers (should these target more than the 'diamond' tool?).
+    # The purpose of these is just to call the target program using its
+    # absolute path - otherwise, it will crash.
+    mkdir -p bin
+    for tool in diamond ; do
+        makeWrapper $out/$prefix/bin/lin64/$tool $out/bin/$tool
+    done
+  '';
+
+  libPath = stdenv.lib.makeLibraryPath [
+    glib zlib freetype fontconfig
+    xorg.libSM xorg.libICE xorg.libXrender xorg.libXext xorg.libX11 xorg.libXt
+  ];
+
+  meta = {
+    description = "Vendor development tools for Lattice FPGA devices";
+    longDescription = ''
+      Lattice Diamond software is the leading-edge software design environment
+      for cost- sensitive, low-power Lattice FPGA architectures. It is the
+      next-generation replacement for ispLEVER.
+    '';
+    homepage = "http://www.latticesemi.com/latticediamond";
+    license = stdenv.lib.licenses.unfree;
+    maintainers = with stdenv.lib.maintainers; [ q3k ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/lazygit/default.nix b/nixpkgs/pkgs/development/tools/lazygit/default.nix
new file mode 100644
index 000000000000..d142078c50fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lazygit/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "lazygit-${version}";
+  version = "0.7.2";
+
+  goPackagePath = "github.com/jesseduffield/lazygit";
+
+  src = fetchFromGitHub {
+    owner = "jesseduffield";
+    repo = "lazygit";
+    rev = "v${version}";
+    sha256 = "1b5mzmxw715cx7b0n22hvrpk0dbavzypljc7skwmh8k1nlx935jj";
+  };
+
+  postPatch = ''
+    rm -rf scripts
+  '';
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Simple terminal UI for git commands";
+    license = licenses.mit;
+    maintainers = with stdenv.lib.maintainers; [ fpletz ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/leaps/default.nix b/nixpkgs/pkgs/development/tools/leaps/default.nix
new file mode 100644
index 000000000000..be964cf4d308
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/leaps/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "leaps-${version}";
+  version = "0.9.0";
+
+  goPackagePath = "github.com/Jeffail/leaps";
+
+  src = fetchFromGitHub {
+    owner = "Jeffail";
+    repo = "leaps";
+    sha256 = "1bzas7ixyfsfh81lnvplhx59yghkmnmy5p7jv9rnwp219dwbylpz";
+    rev = "v${version}";
+  };
+
+  goDeps = ./deps.nix;
+  
+  meta = {
+    description = "A pair programming tool and library written in Golang";
+    homepage = https://github.com/jeffail/leaps/;
+    license = "MIT";
+    maintainers = with stdenv.lib.maintainers; [ qknight ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/leaps/deps.nix b/nixpkgs/pkgs/development/tools/leaps/deps.nix
new file mode 100644
index 000000000000..afaf42779b3e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/leaps/deps.nix
@@ -0,0 +1,185 @@
+
+  # file automatically generated from Gopkg.lock with https://github.com/nixcloud/dep2nix (golang dep)
+  [
+  
+    {
+      goPackagePath  = "github.com/Azure/go-autorest";
+      fetch = {
+        type = "git";
+        url = "https://github.com/Azure/go-autorest";
+        rev =  "fc3b03a2d2d1f43fad3007038bd16f044f870722";
+        sha256 = "1j6aqbizlpiqcywdsj4dy4i76g8fbqc7d61c22ppc9knw0968h4r";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/Jeffail/gabs";
+      fetch = {
+        type = "git";
+        url = "https://github.com/Jeffail/gabs";
+        rev =  "2a3aa15961d5fee6047b8151b67ac2f08ba2c48c";
+        sha256 = "1fx6fyl5x037viwlj319f3gsq749an17q5l6n2zvf3ny5wq0iqxr";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/amir/raidman";
+      fetch = {
+        type = "git";
+        url = "https://github.com/amir/raidman";
+        rev =  "1ccc43bfb9c93cb401a4025e49c64ba71e5e668b";
+        sha256 = "074ckbyslrwn23q4x01hn3j7c3xngagn36lbli2g51n9j3x14jxr";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/azure/azure-sdk-for-go";
+      fetch = {
+        type = "git";
+        url = "https://github.com/azure/azure-sdk-for-go";
+        rev =  "21b68149ccf7c16b3f028bb4c7fd0ab458fe308f";
+        sha256 = "0zlhrh3n9mc5w7r0sdaqmpqfm2d290b50an0k1bvrr892m4cnxaq";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/cenkalti/backoff";
+      fetch = {
+        type = "git";
+        url = "https://github.com/cenkalti/backoff";
+        rev =  "61153c768f31ee5f130071d08fc82b85208528de";
+        sha256 = "08x77mgb9zsj047n74rx6c16jjx985lmy4s6fl58mdgxgxjv54y5";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/dgrijalva/jwt-go";
+      fetch = {
+        type = "git";
+        url = "https://github.com/dgrijalva/jwt-go";
+        rev =  "dbeaa9332f19a944acb5736b4456cfcc02140e29";
+        sha256 = "0zk6l6kzsjdijfn7c4h0aywdjx5j2hjwi67vy1k6wr46hc8ks2hs";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/elazarl/go-bindata-assetfs";
+      fetch = {
+        type = "git";
+        url = "https://github.com/elazarl/go-bindata-assetfs";
+        rev =  "30f82fa23fd844bd5bb1e5f216db87fd77b5eb43";
+        sha256 = "1swfb37g6sga3awvcmxf49ngbpvjv7ih5an9f8ixjqcfcwnb7nzp";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/garyburd/redigo";
+      fetch = {
+        type = "git";
+        url = "https://github.com/garyburd/redigo";
+        rev =  "d1ed5c67e5794de818ea85e6b522fda02623a484";
+        sha256 = "0gw18k9kg93hvdks93hckrdqppg1bav82sp2c98q6z36dkvaih24";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/go-sql-driver/mysql";
+      fetch = {
+        type = "git";
+        url = "https://github.com/go-sql-driver/mysql";
+        rev =  "a0583e0143b1624142adab07e0e97fe106d99561";
+        sha256 = "1rw1m91dpm23s6nn6jc4zi6rq2mgl7zx07gyadrdn0sh7cj8c89d";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/golang/protobuf";
+      fetch = {
+        type = "git";
+        url = "https://github.com/golang/protobuf";
+        rev =  "925541529c1fa6821df4e44ce2723319eb2be768";
+        sha256 = "1d3zjvhl115l23xakj0014qpjchivlg098h10v5nfirkk1i9f9sa";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/gorilla/websocket";
+      fetch = {
+        type = "git";
+        url = "https://github.com/gorilla/websocket";
+        rev =  "ea4d1f681babbce9545c9c5f3d5194a789c89f5b";
+        sha256 = "1bhgs2542qs49p1dafybqxfs2qc072xv41w5nswyrknwyjxxs2a1";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/kardianos/osext";
+      fetch = {
+        type = "git";
+        url = "https://github.com/kardianos/osext";
+        rev =  "ae77be60afb1dcacde03767a8c37337fad28ac14";
+        sha256 = "056dkgxrqjj5r18bnc3knlpgdz5p3yvp12y4y978hnsfhwaqvbjz";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/lib/pq";
+      fetch = {
+        type = "git";
+        url = "https://github.com/lib/pq";
+        rev =  "88edab0803230a3898347e77b474f8c1820a1f20";
+        sha256 = "02y7c8xy33x5q4167x2drzrys41nfi7wxxp9hy4vpazfws88al9p";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/marstr/guid";
+      fetch = {
+        type = "git";
+        url = "https://github.com/marstr/guid";
+        rev =  "8bdf7d1a087ccc975cf37dd6507da50698fd19ca";
+        sha256 = "1mxcigzfc1bbh5b616hm89bp06allhwcsas9v9lks235h0acgn4x";
+      };
+    }
+    
+    {
+      goPackagePath  = "github.com/satori/go.uuid";
+      fetch = {
+        type = "git";
+        url = "https://github.com/satori/go.uuid";
+        rev =  "f58768cc1a7a7e77a3bd49e98cdd21419399b6a3";
+        sha256 = "1j4s5pfg2ldm35y8ls8jah4dya2grfnx2drb4jcbjsyrp4cm5yfb";
+      };
+    }
+    
+    {
+      goPackagePath  = "golang.org/x/net";
+      fetch = {
+        type = "git";
+        url = "https://go.googlesource.com/net";
+        rev =  "cbe0f9307d0156177f9dd5dc85da1a31abc5f2fb";
+        sha256 = "1hmpqkxh97ayyy0xcdvf1bwirwja4wyin3sh0fzjlh93aqmqgylf";
+      };
+    }
+    
+    {
+      goPackagePath  = "gopkg.in/alexcesaro/statsd.v2";
+      fetch = {
+        type = "git";
+        url = "https://gopkg.in/alexcesaro/statsd.v2";
+        rev =  "7fea3f0d2fab1ad973e641e51dba45443a311a90";
+        sha256 = "02jdx68vicwsgabrnwgg1rvc45rinyh8ikinqgbqc56c5hkx3brj";
+      };
+    }
+    
+    {
+      goPackagePath  = "gopkg.in/yaml.v2";
+      fetch = {
+        type = "git";
+        url = "https://gopkg.in/yaml.v2";
+        rev =  "d670f9405373e636a5a2765eea47fac0c9bc91a4";
+        sha256 = "1w1xid51n8v1mydn2m3vgggw8qgpd5a5sr62snsc77d99fpjsrs0";
+      };
+    }
+    
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/librarian-puppet-go/default.nix b/nixpkgs/pkgs/development/tools/librarian-puppet-go/default.nix
new file mode 100644
index 000000000000..58f50dd2f7e3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/librarian-puppet-go/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+
+buildGoPackage rec {
+  name = "librarian-puppet-go-${version}";
+  version = "0.3.9";
+
+  goPackagePath = "github.com/tmtk75/librarian-puppet-go";
+
+  src = fetchFromGitHub {
+    owner = "tmtk75";
+    repo = "librarian-puppet-go";
+    rev = "v${version}";
+    sha256 = "19x2hz3b8xkhy2nkyjg6s4qvs55mh84fvjwp157a86dmxwkdf45y";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "librarian-puppet implementation in go.";
+    license = licenses.mit;
+    maintainers = with maintainers; [ womfoo ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/librarian-puppet-go/deps.nix b/nixpkgs/pkgs/development/tools/librarian-puppet-go/deps.nix
new file mode 100644
index 000000000000..e5729707d8ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/librarian-puppet-go/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/jawher/mow.cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jawher/mow.cli";
+      rev = "3ff64ca21987cfa628bd8d1865162b7ccd6107d7";
+      sha256 = "0vws79q4x3c9kjdsin3vw5200sinkxag3bfa0n9k69svsb222bij";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/libsigrok/default.nix b/nixpkgs/pkgs/development/tools/libsigrok/default.nix
new file mode 100644
index 000000000000..93c8c6a6c716
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/libsigrok/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, pkgconfig, libzip, glib, libusb1, libftdi1, check
+, libserialport, librevisa, doxygen, glibmm, python
+, version ? "0.5.0", sha256 ? "197kr5ip98lxn7rv10zs35d1w0j7265s0xvckx0mq2l8kdvqd32c"
+}:
+
+stdenv.mkDerivation rec {
+  inherit version;
+  name = "libsigrok-${version}";
+
+  src = fetchurl {
+    url = "https://sigrok.org/download/source/libsigrok/${name}.tar.gz";
+    inherit sha256;
+  };
+
+  firmware = fetchurl {
+    url = "https://sigrok.org/download/binary/sigrok-firmware-fx2lafw/sigrok-firmware-fx2lafw-bin-0.1.3.tar.gz";
+    sha256 = "1qr02ny97navqxr56xq1a227yzf6h09m8jlvc9bnjl0bsk6887bl";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libzip glib libusb1 libftdi1 check libserialport
+    librevisa doxygen glibmm python
+  ];
+
+  postInstall = ''
+    mkdir -p "$out/share/sigrok-firmware/"
+    tar --strip-components=1 -xvf "${firmware}" -C "$out/share/sigrok-firmware/"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Core library of the sigrok signal analysis software suite";
+    homepage = https://sigrok.org/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/libsigrokdecode/default.nix b/nixpkgs/pkgs/development/tools/libsigrokdecode/default.nix
new file mode 100644
index 000000000000..a91ab763beaf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/libsigrokdecode/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, pkgconfig, glib, python3, libsigrok, check }:
+
+stdenv.mkDerivation rec {
+  name = "libsigrokdecode-0.5.2";
+
+  src = fetchurl {
+    url = "https://sigrok.org/download/source/libsigrokdecode/${name}.tar.gz";
+    sha256 = "1w434nl1syjkvwl08lji3r9sr60lbxp1nqys8hqwzv2lgiwrx3g0";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ glib python3 libsigrok check ];
+
+  meta = with stdenv.lib; {
+    description = "Protocol decoding library for the sigrok signal analysis software suite";
+    homepage = https://sigrok.org/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/literate-programming/Literate/default.nix b/nixpkgs/pkgs/development/tools/literate-programming/Literate/default.nix
new file mode 100644
index 000000000000..035374d3e900
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/Literate/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchgit, dmd, dub }:
+
+stdenv.mkDerivation {
+  name = "Literate-2019-01-08";
+
+  src = fetchgit {
+    url = "https://github.com/zyedidia/Literate.git";
+    rev = "e20c5c86713701d4d17fd2881779d758a27a3e5a";
+    sha256 = "1pr7iipcnp6jxi13341p5b3szdrvs7aixpfbwifj6lgbb45vg9sm";
+  };
+
+  buildInputs = [ dmd dub ];
+
+  installPhase = "install -D bin/lit $out/bin/lit";
+
+  meta = with stdenv.lib; {
+    description = "A literate programming tool for any language";
+    homepage    = http://literate.zbyedidia.webfactional.com/;
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/literate-programming/eweb/default.nix b/nixpkgs/pkgs/development/tools/literate-programming/eweb/default.nix
new file mode 100644
index 000000000000..17a7731896ee
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/eweb/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, python3, asciidoc }:
+
+stdenv.mkDerivation rec{
+
+  name = "eweb-${meta.version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/eweb/${name}.tar.bz2";
+    sha256 = "1xy7vm2sj5q6s620fm25klmnwnz9xkrxmx4q2f8h6c85ydisayd5";
+  };
+
+  buildInputs = [ python3 asciidoc ];
+
+  installPhase = ''
+    install -d $out/bin $out/share/doc/${name}
+    cp etangle.py $out/bin
+    cp etangle.w etangle.html $out/share/doc/${name}
+  '';
+
+  meta = with stdenv.lib; {
+    version = "9.10" ;
+    homepage = http://eweb.sf.net;
+    description = "An Asciidoc-based literate programming tool, written in Python";
+    platforms = platforms.linux;
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/literate-programming/funnelweb/default.nix b/nixpkgs/pkgs/development/tools/literate-programming/funnelweb/default.nix
new file mode 100644
index 000000000000..66b44d1fc835
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/funnelweb/default.nix
@@ -0,0 +1,31 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+
+  name = "funnelweb-${meta.version}";
+  src = fetchurl {
+    url = http://www.ross.net/funnelweb/download/funnelweb_v320/funnelweb_v320_source.tar.gz;
+    sha256 = "0zqhys0j9gabrd12mnk8ibblpc8dal4kbl8vnhxmdlplsdpwn4wg";
+  };
+
+  buildPhase = ''
+    cd source
+    ${stdenv.cc}/bin/cc -D__linux__ -o fw *.c
+  '';
+
+  installPhase = ''
+    install -d $out/bin
+    install fw $out/bin/fw
+  '';
+
+  meta = with stdenv.lib; {
+    version = "3.20";
+    description = "A simple, reliable literate-programming macro preprocessor";
+    homepage = http://www.ross.net/funnelweb/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.AndersonTorres ];
+  };
+}
+#TODO: implement it for other platforms
+#TODO: Documentation files
diff --git a/nixpkgs/pkgs/development/tools/literate-programming/noweb/default.nix b/nixpkgs/pkgs/development/tools/literate-programming/noweb/default.nix
new file mode 100644
index 000000000000..44df2b1e1534
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/noweb/default.nix
@@ -0,0 +1,29 @@
+{stdenv, fetchurl, gawk}:
+
+stdenv.mkDerivation {
+  name = "noweb-2.11b";
+  src = fetchurl {
+    urls = [ "http://ftp.de.debian.org/debian/pool/main/n/noweb/noweb_2.11b.orig.tar.gz"
+             "ftp://www.eecs.harvard.edu/pub/nr/noweb.tgz"
+          ];
+    sha256 = "10hdd6mrk26kyh4bnng4ah5h1pnanhsrhqa7qwqy6dyv3rng44y9";
+  };
+  preBuild = ''
+    mkdir -p $out/lib/noweb
+    cd src
+    makeFlags="BIN=$out/bin LIB=$out/lib/noweb MAN=$out/share/man TEXINPUTS=$out/share/texmf/tex/latex"
+  '';
+  preInstall=''mkdir -p $out/share/texmf/tex/latex'';
+  postInstall= ''
+    substituteInPlace $out/bin/cpif --replace "PATH=/bin:/usr/bin" ""
+    for f in $out/bin/{noweb,nountangle,noroots,noroff,noindex} \
+             $out/lib/noweb/{toroff,btdefn,totex,noidx,unmarkup,toascii,tohtml,emptydefn}; do
+      substituteInPlace $f --replace "nawk" "${gawk}/bin/awk"
+    done
+  '';
+  patches = [ ./no-FAQ.patch ];
+
+  meta = {
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/literate-programming/noweb/no-FAQ.patch b/nixpkgs/pkgs/development/tools/literate-programming/noweb/no-FAQ.patch
new file mode 100644
index 000000000000..3230924990b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/noweb/no-FAQ.patch
@@ -0,0 +1,11 @@
+--- a/src/Makefile	2006-06-12 22:14:20.000000000 +0200
++++ b/src/Makefile	2010-06-17 11:30:11.804018145 +0200
+@@ -198,7 +198,7 @@
+ 	(cd elisp; ci -l $(CINAME) $(CIMSG) *.el)
+ 	ci -l $(CINAME) $(CIMSG) Makefile.nw INSTALL INSTALL.DOS README FAQ COPYRIGHT nwmake *.nw
+ 
+-source: FAQ
++source:
+ 	for i in c shell lib xdoc icon awk tex; do (cd $$i; make CPIF=">" source); done
+ 	sleep 1
+ 	for i in c shell lib xdoc icon awk tex; do (cd $$i; make touch); done
diff --git a/nixpkgs/pkgs/development/tools/literate-programming/nuweb/default.nix b/nixpkgs/pkgs/development/tools/literate-programming/nuweb/default.nix
new file mode 100644
index 000000000000..00397978054b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/nuweb/default.nix
@@ -0,0 +1,38 @@
+{stdenv, fetchurl, tex}:
+
+stdenv.mkDerivation rec{
+
+  name = "nuweb-${version}";
+  version = "1.58";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/nuweb/${name}.tar.gz";
+    sha256 = "0q51i3miy15fv4njjp82yws01qfjxvqx5ly3g3vh8z3h7iq9p47y";
+  };
+
+  buildInputs = [ tex ];
+
+  patchPhase = ''
+    sed -ie 's|nuweb -r|./nuweb -r|' Makefile
+  '';
+  buildPhase = ''
+    make nuweb
+    make nuweb.pdf nuwebdoc.pdf all
+  '';
+  installPhase = ''
+    install -d $out/bin $out/share/man/man1 $out/share/doc/${name} $out/share/emacs/site-lisp
+    cp nuweb $out/bin
+    cp nuweb.el $out/share/emacs/site-lisp
+    gzip -c nuweb.1 > $out/share/man/man1/nuweb.1.gz
+    cp htdocs/index.html nuweb.w nuweb.pdf nuwebdoc.pdf README $out/share/doc/${name}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A simple literate programming tool";
+    homepage = http://nuweb.sourceforge.net;
+    license = licenses.free;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
+# TODO: nuweb.el Emacs integration
diff --git a/nixpkgs/pkgs/development/tools/makerpm/default.nix b/nixpkgs/pkgs/development/tools/makerpm/default.nix
new file mode 100644
index 000000000000..404f3758ced4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/makerpm/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, zlib, libarchive, openssl }: 
+
+stdenv.mkDerivation rec { 
+  version = "1.0";
+  name = "makerpm-${version}";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp makerpm $out/bin
+  '';
+
+  buildInputs = [ zlib libarchive openssl ];
+
+  src = fetchFromGitHub {
+    owner = "ivan-tkatchev";
+    repo = "makerpm";
+    rev = "${version}";
+    sha256 = "089dkbh5705ppyi920rd0ksjc0143xmvnhm8qrx93rsgwc1ggi1y";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/ivan-tkatchev/makerpm/;
+    description = "A clean, simple RPM packager reimplemented completely from scratch";
+    license = licenses.free;
+    platforms = platforms.all;
+    maintainers = [ maintainers.ivan-tkatchev ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/maligned/default.nix b/nixpkgs/pkgs/development/tools/maligned/default.nix
new file mode 100644
index 000000000000..7e5cbaddd8b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/maligned/default.nix
@@ -0,0 +1,30 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "maligned-unstable-${version}";
+  version = "2018-07-07";
+  rev = "6e39bd26a8c8b58c5a22129593044655a9e25959";
+
+  goPackagePath = "github.com/mdempsky/maligned";
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "mdempsky";
+    repo = "maligned";
+    sha256 = "08inr5xjqv9flrlyhqd8ck1q26y5xb6iilz0xkb6bqa4dl5ialhi";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "Tool to detect Go structs that would take less memory if their fields were sorted.";
+    homepage = https://github.com/mdempsky/maligned;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/maligned/deps.nix b/nixpkgs/pkgs/development/tools/maligned/deps.nix
new file mode 100644
index 000000000000..afe5e50e47bd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/maligned/deps.nix
@@ -0,0 +1,20 @@
+[
+  {
+    goPackagePath = "github.com/kisielk/gotool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kisielk/gotool";
+      rev = "80517062f582ea3340cd4baf70e86d539ae7d84d";
+      sha256 = "14af2pa0ssyp8bp2mvdw184s5wcysk6akil3wzxmr05wwy951iwn";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "96e9e165b75e735822645eff82850b08c377be36";
+      sha256 = "1zj9ck5sg9b0pphxybmvxf64hhcap7v7j37fx3v5aknf18crjjdg";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/manul/default.nix b/nixpkgs/pkgs/development/tools/manul/default.nix
new file mode 100644
index 000000000000..a5dd0a882728
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/manul/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "manul-unstable-2016-09-30";
+
+  goPackagePath = "github.com/kovetskiy/manul";
+  excludedPackages = "tests";
+
+  src = fetchFromGitHub {
+    owner = "kovetskiy";
+    repo = "manul";
+    rev = "7bddb5404b9ecc66fd28075bb899c2d6dc7a1c51";
+    sha256 = "06kglxdgj1dfpc9bdnvhsh8z0c1pdbmwmfx4km01wpppzk06dnvm";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "The madness vendoring utility for Golang programs";
+    homepage = https://github.com/kovetskiy/manul;
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/manul/deps.nix b/nixpkgs/pkgs/development/tools/manul/deps.nix
new file mode 100644
index 000000000000..e99a597b0783
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/manul/deps.nix
@@ -0,0 +1,75 @@
+# This file was generated by go2nix.
+[
+  {
+    goPackagePath = "github.com/PuerkitoBio/goquery";
+    fetch = {
+      type = "git";
+      url = "https://github.com/PuerkitoBio/goquery";
+      rev = "3cb3b8656883c2cc3deb9c643d93ea6e5157e425";
+      sha256 = "0qhyssjwv98jncsiph95iz77sygkismvpprsalqi3xm3k50xi6r7";
+    };
+  }
+  {
+    goPackagePath = "github.com/andybalholm/cascadia";
+    fetch = {
+      type = "git";
+      url = "https://github.com/andybalholm/cascadia";
+      rev = "349dd0209470eabd9514242c688c403c0926d266";
+      sha256 = "12ikz849vkdb3dsdn6mdpkihvm0hbmkplyi0qdcm7s4ib4n003b1";
+    };
+  }
+  {
+    goPackagePath = "github.com/kovetskiy/godocs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kovetskiy/godocs";
+      rev = "2d9428f80f3442e07f67daf7ba378cd0ff6cfe24";
+      sha256 = "128dlvxqk31crzl9p3ps0nir724cjzxv4lxpgdvsir0wvfp8f83j";
+    };
+  }
+  {
+    goPackagePath = "github.com/reconquest/executil-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/reconquest/executil-go";
+      rev = "e72bce509b1a5e89ab21f29c92830d4304620765";
+      sha256 = "06z05hl4bym5agv0h1vgksj0mx0l4987ganwqcfb153w7pclvan3";
+    };
+  }
+  {
+    goPackagePath = "github.com/reconquest/hierr-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/reconquest/hierr-go";
+      rev = "bbf802f3f943e7b6a364a485ccf90807f3bfcc0e";
+      sha256 = "1v3fssw881vcawc2abvp8abwb7705yzxrb0khbzmn8qvdpqwh7hl";
+    };
+  }
+  {
+    goPackagePath = "github.com/reconquest/ser-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/reconquest/ser-go";
+      rev = "47f084a1e4a5433ac3d6ab6cfe8c1e30028a4d76";
+      sha256 = "1hgafiqc3mlazs2zg4rqjm4sasy2gjrjl64cy8mmlg5cayvbj4hq";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "c197bcf24cde29d3f73c7b4ac6fd41f4384e8af6";
+      sha256 = "1y2bbghi594m8p4pcm9pwrzql06179xj6zvhaghwcc6y0l48rbgp";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "6acef71eb69611914f7a30939ea9f6e194c78172";
+      sha256 = "1fcsv50sbq0lpzrhx3m9jw51wa255fsbqjwsx9iszq4d0gysnnvc";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/mbed-cli/default.nix b/nixpkgs/pkgs/development/tools/mbed-cli/default.nix
new file mode 100644
index 000000000000..cd80a5ad9e6f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mbed-cli/default.nix
@@ -0,0 +1,34 @@
+{ lib, python3Packages, git, mercurial }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "mbed-cli";
+  version = "1.9.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1228plh55id03qywsw0ai88ypdpbh9iz18jfcyhn21pci7mj77fv";
+  };
+
+  checkInputs = [
+    git
+    mercurial
+    pytest
+  ];
+
+  checkPhase = ''
+    export GIT_COMMITTER_NAME=nixbld
+    export EMAIL=nixbld@localhost
+    export GIT_COMMITTER_DATE=$SOURCE_DATE_EPOCH
+    pytest test
+  '';
+
+  meta = with lib; {
+    homepage = https://github.com/ARMmbed/mbed-cli;
+    description = "Arm Mbed Command Line Interface";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ rvolosatovs ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/mdk/default.nix b/nixpkgs/pkgs/development/tools/mdk/default.nix
new file mode 100644
index 000000000000..27f0063e24be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mdk/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, intltool, pkgconfig, glib }:
+
+stdenv.mkDerivation {
+  name = "gnu-mdk-1.2.10";
+  src = fetchurl {
+    url = https://ftp.gnu.org/gnu/mdk/v1.2.10/mdk-1.2.10.tar.gz;
+    sha256 = "1rwcq2b5vvv7318j92nxc5dayj27dpfhzc4rjiv4ccvsc0x35x5h";
+  };
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ intltool glib ];
+  postInstall = ''
+    mkdir -p $out/share/emacs/site-lisp/
+    cp -v ./misc/*.el $out/share/emacs/site-lisp
+  '';
+
+  meta = {
+    description = "GNU MIX Development Kit (MDK)";
+    homepage = https://www.gnu.org/software/mdk/;
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/minizinc/default.nix b/nixpkgs/pkgs/development/tools/minizinc/default.nix
new file mode 100644
index 000000000000..14f42ed9d40a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/minizinc/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, cmake, flex, bison }:
+let
+  version = "2.2.3";
+in
+stdenv.mkDerivation {
+  name = "minizinc-${version}";
+
+  buildInputs = [ cmake flex bison ];
+
+  src = fetchFromGitHub {
+    owner = "MiniZinc";
+    repo = "libminizinc";
+    rev = "3d66971a0cad6edbe796f4dd940229d38e5bfe3d"; # tags on the repo are disappearing: See https://github.com/MiniZinc/libminizinc/issues/257
+    sha256 = "1q31y9131aj2lsm34srm8i1s0271qcaaknzvym3r8awynm14saq5";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://www.minizinc.org/;
+    description = "MiniZinc is a medium-level constraint modelling language.";
+
+    longDescription = ''
+      MiniZinc is a medium-level constraint modelling
+      language. It is high-level enough to express most
+      constraint problems easily, but low-level enough
+      that it can be mapped onto existing solvers easily and consistently.
+      It is a subset of the higher-level language Zinc.
+    '';
+
+    license = licenses.mpl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.sheenobu ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/minizinc/ide.nix b/nixpkgs/pkgs/development/tools/minizinc/ide.nix
new file mode 100644
index 000000000000..ab2af43979a6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/minizinc/ide.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchFromGitHub, qtbase, qtwebengine, qtwebkit, qmake, makeWrapper, minizinc }:
+let
+  version = "2.2.3";
+in
+stdenv.mkDerivation {
+  name = "minizinc-ide-${version}";
+
+  nativeBuildInputs = [ qmake makeWrapper ];
+  buildInputs = [ qtbase qtwebengine qtwebkit ];
+
+  src = fetchFromGitHub {
+    owner = "MiniZinc";
+    repo = "MiniZincIDE";
+    rev = version;
+    sha256 = "1hanq7c6li59awlwghgvpd8w93a7zb6iw7p4062nphnbd1dmg92f";
+  };
+
+  sourceRoot = "source/MiniZincIDE";
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    wrapProgram $out/bin/MiniZincIDE --prefix PATH ":" ${stdenv.lib.makeBinPath [ minizinc ]}
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.minizinc.org/;
+    description = "IDE for MiniZinc, a medium-level constraint modelling language";
+
+    longDescription = ''
+      MiniZinc is a medium-level constraint modelling
+      language. It is high-level enough to express most
+      constraint problems easily, but low-level enough
+      that it can be mapped onto existing solvers easily and consistently.
+      It is a subset of the higher-level language Zinc.
+    '';
+
+    license = licenses.mpl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/abi-compliance-checker/default.nix b/nixpkgs/pkgs/development/tools/misc/abi-compliance-checker/default.nix
new file mode 100644
index 000000000000..db0e41d27ab3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/abi-compliance-checker/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, ctags, perl, binutils, abi-dumper }:
+
+stdenv.mkDerivation rec {
+  name = "abi-compliance-checker-${version}";
+  version = "2.3";
+
+  src = fetchFromGitHub {
+    owner = "lvc";
+    repo = "abi-compliance-checker";
+    rev = version;
+    sha256 = "1f1f9j2nf9j83sfl2ljadch99v6ha8rq8xm7ax5akc05hjpyckij";
+  };
+
+  buildInputs = [ binutils ctags perl ];
+  propagatedBuildInputs = [ abi-dumper ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://lvc.github.io/abi-compliance-checker;
+    description = "A tool for checking backward API/ABI compatibility of a C/C++ library";
+    license = licenses.lgpl21;
+    maintainers = [ maintainers.bhipple ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/abi-dumper/default.nix b/nixpkgs/pkgs/development/tools/misc/abi-dumper/default.nix
new file mode 100644
index 000000000000..047cd466baac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/abi-dumper/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, ctags, perl, elfutils, vtable-dumper }:
+
+stdenv.mkDerivation rec {
+  name = "abi-dumper-${version}";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "lvc";
+    repo = "abi-dumper";
+    rev = version;
+    sha256 = "1byhw132aj7a5a5zh5s3pnjlrhdk4cz6xd5irp1y08jl980qba5j";
+  };
+
+  patchPhase = ''
+    substituteInPlace abi-dumper.pl \
+      --replace eu-readelf ${elfutils}/bin/eu-readelf \
+      --replace vtable-dumper ${vtable-dumper}/bin/vtable-dumper \
+      --replace '"ctags"' '"${ctags}/bin/ctags"'
+  '';
+
+  buildInputs = [ elfutils ctags perl vtable-dumper ];
+
+  preBuild = "mkdir -p $out";
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/lvc/abi-dumper;
+    description = "Dump ABI of an ELF object containing DWARF debug info";
+    license = licenses.lgpl21;
+    maintainers = [ maintainers.bhipple ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/arcanist/default.nix b/nixpkgs/pkgs/development/tools/misc/arcanist/default.nix
new file mode 100644
index 000000000000..7810ba6349ce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/arcanist/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, fetchFromGitHub, php, flex, makeWrapper }:
+
+let
+  libphutil = fetchFromGitHub {
+    owner = "phacility";
+    repo = "libphutil";
+    rev = "3215e4e291ed4468faeed4542d47a571b5bc559a";
+    sha256 = "0bbinaxny0j4iniz2grf0s9cysbl3x24yc32f3jra9mwsgh2v2zj";
+  };
+  arcanist = fetchFromGitHub {
+    owner = "phacility";
+    repo = "arcanist";
+    rev = "2650e8627a20e1bfe334a4a2b787f44ef5d6ebc5";
+    sha256 = "0x0xxiar202ypbgxh19swzjil546bbp8li4k5yrpvab55y8ymkd4";
+  };
+in
+stdenv.mkDerivation rec {
+  name    = "arcanist-${version}";
+  version = "20180916";
+
+  src = [ arcanist libphutil ];
+  buildInputs = [ php makeWrapper flex ];
+
+  unpackPhase = ''
+    cp -aR ${libphutil} libphutil
+    cp -aR ${arcanist} arcanist
+    chmod +w -R libphutil arcanist
+  '';
+
+  postPatch = stdenv.lib.optionalString stdenv.isAarch64 ''
+    substituteInPlace libphutil/support/xhpast/Makefile \
+      --replace "-minline-all-stringops" ""
+  '';
+
+  buildPhase = ''
+    (
+      cd libphutil/support/xhpast
+      make clean all install
+    )
+  '';
+  installPhase = ''
+    mkdir -p $out/bin $out/libexec
+    cp -R libphutil $out/libexec/libphutil
+    cp -R arcanist  $out/libexec/arcanist
+
+    ln -s $out/libexec/arcanist/bin/arc $out/bin
+    wrapProgram $out/bin/arc \
+      --prefix PATH : "${php}/bin"
+  '';
+
+  meta = {
+    description = "Command line interface to Phabricator";
+    homepage    = "http://phabricator.org";
+    license     = stdenv.lib.licenses.asl20;
+    platforms   = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/astyle/default.nix b/nixpkgs/pkgs/development/tools/misc/astyle/default.nix
new file mode 100644
index 000000000000..e66d92e34d65
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/astyle/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl }:
+
+let
+  name = "astyle";
+  version = "3.1";
+in
+stdenv.mkDerivation {
+  name = "${name}-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${name}/${name}_${version}_linux.tar.gz";
+    sha256 = "1ms54wcs7hg1bsywqwf2lhdfizgbk7qxc9ghasxk8i99jvwlrk6b";
+  };
+
+  sourceRoot = if stdenv.cc.isClang
+    then "astyle/build/clang"
+    else "astyle/build/gcc";
+
+  # -s option is obsolete on Darwin and breaks build
+  postPatch = if stdenv.isDarwin then ''
+    substituteInPlace Makefile --replace "LDFLAGSr   = -s" "LDFLAGSr ="
+  '' else null;
+
+  installFlags = "INSTALL=install prefix=$$out";
+
+  meta = {
+    homepage = http://astyle.sourceforge.net/;
+    description = "Source code indenter, formatter, and beautifier for C, C++, C# and Java";
+    license = stdenv.lib.licenses.lgpl3;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autobuild/default.nix b/nixpkgs/pkgs/development/tools/misc/autobuild/default.nix
new file mode 100644
index 000000000000..8f425a929590
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autobuild/default.nix
@@ -0,0 +1,34 @@
+{ fetchurl, stdenv, makeWrapper, perl, openssh, rsync }:
+
+stdenv.mkDerivation rec {
+  name = "autobuild-5.3";
+
+  src = fetchurl {
+    url = "http://savannah.spinellicreations.com/autobuild/${name}.tar.gz";
+    sha256 = "0gv7g61ja9q9zg1m30k4snqwwy1kq7b4df6sb7d2qra7kbdq8af1";
+  };
+
+  buildInputs = [ makeWrapper perl openssh rsync ];
+
+  doCheck = true;
+
+  meta = {
+    description = "Continuous integration tool";
+
+    longDescription = ''
+      Autobuild is a package that process output from building
+      software, primarily focused on packages using Autoconf and
+      Automake, and then generate a HTML summary file, containing
+      links to each build log.
+
+      Autobuild can also help you automate building your project on
+      many systems concurrently.  Users with accounts on the
+      SourceForge compile farms will be able to invoke a parallel
+      build of their Autoconf/Automake based software, and produce a
+      summary of the build status, after reading the manual.
+    '';
+
+    homepage = https://josefsson.org/autobuild/;
+    license = stdenv.lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autoconf-archive/default.nix b/nixpkgs/pkgs/development/tools/misc/autoconf-archive/default.nix
new file mode 100644
index 000000000000..d7cea5c3d4ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf-archive/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, xz }:
+
+stdenv.mkDerivation rec {
+  name = "autoconf-archive-${version}";
+  version = "2019.01.06";
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf-archive/autoconf-archive-${version}.tar.xz";
+    sha256 = "0gqya7nf4j5k98dkky0c3bnr0paciya91vkqazg7knlq621mq68p";
+  };
+
+  buildInputs = [ xz ];
+
+  meta = with stdenv.lib; {
+    description = "Archive of autoconf m4 macros";
+    homepage = https://www.gnu.org/software/autoconf-archive/;
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autoconf/2.13.nix b/nixpkgs/pkgs/development/tools/misc/autoconf/2.13.nix
new file mode 100644
index 000000000000..9e777e53cf62
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf/2.13.nix
@@ -0,0 +1,40 @@
+{stdenv, fetchurl, m4, perl, lzma}:
+
+stdenv.mkDerivation rec {
+  name = "autoconf-2.13";
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf/${name}.tar.gz";
+    sha256 = "07krzl4czczdsgzrrw9fiqx35xcf32naf751khg821g5pqv12qgh";
+  };
+
+  nativebuildInputs = [ lzma ];
+  buildInputs = [ m4 perl ];
+
+  doCheck = true;
+
+  # Don't fixup "#! /bin/sh" in Autoconf, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  postInstall = ''ln -s autoconf "$out"/bin/autoconf-2.13'';
+
+  meta = {
+    homepage = https://www.gnu.org/software/autoconf/;
+    description = "Part of the GNU Build System";
+    branch = "2.13";
+
+    longDescription = ''
+      GNU Autoconf is an extensible package of M4 macros that produce
+      shell scripts to automatically configure software source code
+      packages.  These scripts can adapt the packages to many kinds of
+      UNIX-like systems without manual user intervention.  Autoconf
+      creates a configuration script for a package from a template
+      file that lists the operating system features that the package
+      can use, in the form of M4 macro calls.
+    '';
+
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autoconf/2.64.nix b/nixpkgs/pkgs/development/tools/misc/autoconf/2.64.nix
new file mode 100644
index 000000000000..98b55e31f60b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf/2.64.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, m4, perl }:
+
+stdenv.mkDerivation rec {
+  name = "autoconf-2.64";
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf/${name}.tar.xz";
+    sha256 = "0j3jdjpf5ly39dlp0bg70h72nzqr059k0x8iqxvaxf106chpgn9j";
+  };
+
+  buildInputs = [ m4 perl ];
+
+  # Work around a known issue in Cygwin.  See
+  # http://thread.gmane.org/gmane.comp.sysutils.autoconf.bugs/6822 for
+  # details.
+  # There are many test failures on `i386-pc-solaris2.11'.
+  #doCheck = ((!stdenv.isCygwin) && (!stdenv.isSunOS));
+  doCheck = false;
+
+  # Don't fixup "#! /bin/sh" in Autoconf, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  enableParallelBuilding = true;
+
+  # Make the Autotest test suite run in parallel.
+  preCheck =''
+    export TESTSUITEFLAGS="-j$NIX_BUILD_CORES"
+  '';
+
+  doInstallCheck = false; # fails
+
+  meta = {
+    homepage = https://www.gnu.org/software/autoconf/;
+    description = "Part of the GNU Build System";
+
+    longDescription = ''
+      GNU Autoconf is an extensible package of M4 macros that produce
+      shell scripts to automatically configure software source code
+      packages.  These scripts can adapt the packages to many kinds of
+      UNIX-like systems without manual user intervention.  Autoconf
+      creates a configuration script for a package from a template
+      file that lists the operating system features that the package
+      can use, in the form of M4 macro calls.
+    '';
+
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autoconf/default.nix b/nixpkgs/pkgs/development/tools/misc/autoconf/default.nix
new file mode 100644
index 000000000000..304b4fddf0d5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchurl, m4, perl }:
+
+stdenv.mkDerivation rec {
+  name = "autoconf-2.69";
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf/${name}.tar.xz";
+    sha256 = "113nlmidxy9kjr45kg9x3ngar4951mvag1js2a3j8nxcz34wxsv4";
+  };
+
+  nativeBuildInputs = [ m4 perl ];
+  buildInputs = [ m4 ];
+
+  # Work around a known issue in Cygwin.  See
+  # http://thread.gmane.org/gmane.comp.sysutils.autoconf.bugs/6822 for
+  # details.
+  # There are many test failures on `i386-pc-solaris2.11'.
+  #doCheck = ((!stdenv.isCygwin) && (!stdenv.isSunOS));
+  doCheck = false;
+
+  # Don't fixup "#! /bin/sh" in Autoconf, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  enableParallelBuilding = true;
+
+  # Make the Autotest test suite run in parallel.
+  preCheck =''
+    export TESTSUITEFLAGS="-j$NIX_BUILD_CORES"
+  '';
+
+  doInstallCheck = false; # fails
+
+  meta = {
+    homepage = https://www.gnu.org/software/autoconf/;
+    description = "Part of the GNU Build System";
+
+    longDescription = ''
+      GNU Autoconf is an extensible package of M4 macros that produce
+      shell scripts to automatically configure software source code
+      packages.  These scripts can adapt the packages to many kinds of
+      UNIX-like systems without manual user intervention.  Autoconf
+      creates a configuration script for a package from a template
+      file that lists the operating system features that the package
+      can use, in the form of M4 macro calls.
+    '';
+
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autogen/default.nix b/nixpkgs/pkgs/development/tools/misc/autogen/default.nix
new file mode 100644
index 000000000000..ff5ce659d2e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autogen/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, buildPackages, fetchurl, which, pkgconfig, perl, guile, libxml2 }:
+
+stdenv.mkDerivation rec {
+  name = "autogen-${version}";
+  version = "5.18.12";
+
+  src = fetchurl {
+    url = "mirror://gnu/autogen/rel${version}/autogen-${version}.tar.xz";
+    sha256 = "1n5zq4872sakvz9c7ncsdcfp0z8rsybsxvbmhkpbd19ii0pacfxy";
+  };
+
+  outputs = [ "bin" "dev" "lib" "out" "man" "info" ];
+
+  nativeBuildInputs = [ which pkgconfig perl ]
+    # autogen needs a build autogen when cross-compiling
+    ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+      buildPackages.buildPackages.autogen buildPackages.texinfo ];
+  buildInputs = [
+    guile libxml2
+  ];
+
+  configureFlags = stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    "--with-libxml2=${libxml2.dev}"
+    "--with-libxml2-cflags=-I${libxml2.dev}/include/libxml2"
+    # the configure check for regcomp wants to run a host program
+    "libopts_cv_with_libregex=yes"
+    #"MAKEINFO=${buildPackages.texinfo}/bin/makeinfo"
+  ];
+
+  postPatch = ''
+    # Fix a broken sed expression used for detecting the minor
+    # version of guile we are using
+    sed -i "s,sed '.*-I.*',sed 's/\\\(^\\\| \\\)-I/\\\1/g',g" configure
+
+    substituteInPlace pkg/libopts/mklibsrc.sh --replace /tmp $TMPDIR
+  '';
+
+  postInstall = ''
+    mkdir -p $dev/bin
+    mv $bin/bin/autoopts-config $dev/bin
+
+    for f in $lib/lib/autogen/tpl-config.tlib $out/share/autogen/tpl-config.tlib; do
+      sed -e "s|$dev/include|/no-such-autogen-include-path|" -i $f
+      sed -e "s|$bin/bin|/no-such-autogen-bin-path|" -i $f
+      sed -e "s|$lib/lib|/no-such-autogen-lib-path|" -i $f
+    done
+  '';
+
+  #doCheck = true; # 2 tests fail because of missing /dev/tty
+
+  meta = with stdenv.lib; {
+    description = "Automated text and program generation tool";
+    license = with licenses; [ gpl3Plus lgpl3Plus ];
+    homepage = https://www.gnu.org/software/autogen/;
+    platforms = platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/automake-1.11.x.nix b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.11.x.nix
new file mode 100644
index 000000000000..a5aa44abcdef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.11.x.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchurl, perl, autoconf }:
+
+stdenv.mkDerivation rec {
+  name = "automake-1.11.6";
+
+  # TODO: Remove the `aclocal' wrapper when $ACLOCAL_PATH support is
+  # available upstream; see
+  # <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=9026>.
+  builder = ./builder.sh;
+
+  setupHook = ./setup-hook.sh;
+
+  src = fetchurl {
+    url = "mirror://gnu/automake/${name}.tar.xz";
+    sha256 = "1ffbc6cc41f0ea6c864fbe9485b981679dc5e350f6c4bc6c3512f5a4226936b5";
+  };
+
+  patches = [ ./fix-test-autoconf-2.69.patch ./fix-perl-5.26.patch ];
+
+  buildInputs = [ perl autoconf ];
+
+  # Disable indented log output from Make, otherwise "make.test" will
+  # fail.
+  preCheck = "unset NIX_INDENT_MAKE";
+  doCheck = false; # takes _a lot_ of time, fails 11 of 782 tests
+
+  # Don't fixup "#! /bin/sh" in Libtool, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  # Run the test suite in parallel.
+  enableParallelBuilding = true;
+
+  meta = {
+    branch = "1.11";
+    homepage = https://www.gnu.org/software/automake/;
+    description = "GNU standard-compliant makefile generator";
+
+    longDescription = ''
+      GNU Automake is a tool for automatically generating
+      `Makefile.in' files compliant with the GNU Coding
+      Standards.  Automake requires the use of Autoconf.
+    '';
+
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/automake-1.15.x.nix b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.15.x.nix
new file mode 100644
index 000000000000..e1aeb025c30f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.15.x.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, perl, autoconf }:
+
+stdenv.mkDerivation rec {
+  name = "automake-1.15";
+
+  src = fetchurl {
+    url = "mirror://gnu/automake/${name}.tar.xz";
+    sha256 = "0dl6vfi2lzz8alnklwxzfz624b95hb1ipjvd3mk177flmddcf24r";
+  };
+
+  nativeBuildInputs = [ autoconf perl ];
+  buildInputs = [ autoconf ];
+
+  setupHook = ./setup-hook.sh;
+
+  # Disable indented log output from Make, otherwise "make.test" will
+  # fail.
+  preCheck = "unset NIX_INDENT_MAKE";
+  doCheck = false; # takes _a lot_ of time, fails 3 out of 2698 tests, all seem to be related to paths
+  doInstallCheck = false; # runs the same thing, fails the same tests
+
+  # The test suite can run in parallel.
+  enableParallelBuilding = true;
+
+  # Don't fixup "#! /bin/sh" in Libtool, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  meta = {
+    branch = "1.15";
+    homepage = https://www.gnu.org/software/automake/;
+    description = "GNU standard-compliant makefile generator";
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    longDescription = ''
+      GNU Automake is a tool for automatically generating
+      `Makefile.in' files compliant with the GNU Coding
+      Standards.  Automake requires the use of Autoconf.
+    '';
+
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/automake-1.16.x.nix b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.16.x.nix
new file mode 100644
index 000000000000..1e432a6e149b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.16.x.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, perl, autoconf }:
+
+stdenv.mkDerivation rec {
+  name = "automake-1.16.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/automake/${name}.tar.xz";
+    sha256 = "08g979ficj18i1w6w5219bgmns7czr03iadf20mk3lrzl8wbn1ax";
+  };
+
+  nativeBuildInputs = [ autoconf perl ];
+  buildInputs = [ autoconf ];
+
+  setupHook = ./setup-hook.sh;
+
+  # Disable indented log output from Make, otherwise "make.test" will
+  # fail.
+  preCheck = "unset NIX_INDENT_MAKE";
+  doCheck = false; # takes _a lot_ of time, fails 3 out of 2698 tests, all seem to be related to paths
+  doInstallCheck = false; # runs the same thing, fails the same tests
+
+  # The test suite can run in parallel.
+  enableParallelBuilding = true;
+
+  # Don't fixup "#! /bin/sh" in Libtool, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  meta = {
+    branch = "1.15";
+    homepage = https://www.gnu.org/software/automake/;
+    description = "GNU standard-compliant makefile generator";
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    longDescription = ''
+      GNU Automake is a tool for automatically generating
+      `Makefile.in' files compliant with the GNU Coding
+      Standards.  Automake requires the use of Autoconf.
+    '';
+
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/builder.sh b/nixpkgs/pkgs/development/tools/misc/automake/builder.sh
new file mode 100644
index 000000000000..e54a2acca67e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/builder.sh
@@ -0,0 +1,47 @@
+source $stdenv/setup
+
+# Wrap the given `aclocal' program, appending extra `-I' flags
+# corresponding to the directories listed in $ACLOCAL_PATH.  (Note
+# that `wrapProgram' can't be used for that purpose since it can only
+# prepend flags, not append them.)
+wrapAclocal() {
+    local program="$1"
+    local wrapped="$(dirname $program)/.$(basename $program)-wrapped"
+
+    mv "$program" "$wrapped"
+    cat > "$program"<<EOF
+#! $SHELL -e
+
+unset extraFlagsArray
+declare -a extraFlagsArray
+
+oldIFS=\$IFS
+IFS=:
+for dir in \$ACLOCAL_PATH; do
+    if test -n "\$dir" -a -d "\$dir"; then
+        extraFlagsArray=("\${extraFlagsArray[@]}" "-I" "\$dir")
+    fi
+done
+IFS=\$oldIFS
+
+exec "$wrapped" "\$@" "\${extraFlagsArray[@]}"
+EOF
+    chmod +x "$program"
+}
+
+postInstall() {
+    # Create a wrapper around `aclocal' that converts every element in
+    # `ACLOCAL_PATH' into a `-I dir' option.  This way `aclocal'
+    # becomes modular; M4 macros do not need to be stored in a single
+    # global directory, while callers of `aclocal' do not need to pass
+    # `-I' options explicitly.
+
+    for prog in $out/bin/aclocal*; do
+        wrapAclocal "$prog"
+    done
+
+    ln -s aclocal-1.11 $out/share/aclocal
+    ln -s automake-1.11 $out/share/automake
+}
+
+genericBuild
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/fix-perl-5.26.patch b/nixpkgs/pkgs/development/tools/misc/automake/fix-perl-5.26.patch
new file mode 100644
index 000000000000..fb2d08de6d81
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/fix-perl-5.26.patch
@@ -0,0 +1,10 @@
+--- automake-1.11.2/automake.in
++++ automake-1.11.2/automake.in
+@@ -4156,7 +4156,7 @@ sub substitute_ac_subst_variables_worker($)
+ sub substitute_ac_subst_variables ($)
+ {
+   my ($text) = @_;
+-  $text =~ s/\${([^ \t=:+{}]+)}/&substitute_ac_subst_variables_worker ($1)/ge;
++  $text =~ s/\$\{([^ \t=:+{}]+)}/&substitute_ac_subst_variables_worker ($1)/ge;
+   return $text;
+ }
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/fix-test-autoconf-2.69.patch b/nixpkgs/pkgs/development/tools/misc/automake/fix-test-autoconf-2.69.patch
new file mode 100644
index 000000000000..2ffa91f24eda
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/fix-test-autoconf-2.69.patch
@@ -0,0 +1,13 @@
+With Autoconf 2.69 (instead of 2.68), config.{guess,sub} are needed.
+
+--- automake-1.11.2/tests/compile_f90_c_cxx.test	2011-12-20 21:56:29.000000000 +0100
++++ automake-1.11.2/tests/compile_f90_c_cxx.test	2012-07-07 13:35:58.000000000 +0200
+@@ -41,7 +41,7 @@ END
+ : > baz.cc
+ 
+ $ACLOCAL
+-$AUTOMAKE
++$AUTOMAKE --add-missing
+ 
+ # Look for the macros at the beginning of rules.  Be careful, as there
+ # are literal tabs at the beginning of the search strings.
diff --git a/nixpkgs/pkgs/development/tools/misc/automake/setup-hook.sh b/nixpkgs/pkgs/development/tools/misc/automake/setup-hook.sh
new file mode 100644
index 000000000000..292632b7cbce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/setup-hook.sh
@@ -0,0 +1,5 @@
+addAclocals () {
+    addToSearchPathWithCustomDelimiter : ACLOCAL_PATH $1/share/aclocal
+}
+
+addEnvHooks "$hostOffset" addAclocals
diff --git a/nixpkgs/pkgs/development/tools/misc/automoc4/default.nix b/nixpkgs/pkgs/development/tools/misc/automoc4/default.nix
new file mode 100644
index 000000000000..c2bf7e0a831c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automoc4/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, cmake, qt4 }:
+
+stdenv.mkDerivation rec {
+  name = "automoc4-0.9.88";
+  
+  src = fetchurl {
+    url = "mirror://kde/stable/automoc4/0.9.88/${name}.tar.bz2";
+    sha256 = "0jackvg0bdjg797qlbbyf9syylm0qjs55mllhn11vqjsq3s1ch93";
+  };
+  
+  buildInputs = [ cmake qt4 ];
+  
+  meta = with stdenv.lib; {
+    homepage = https://techbase.kde.org/Development/Tools/Automoc4;
+    description = "KDE Meta Object Compiler";
+    license = licenses.bsd2;
+    maintainers = [ maintainers.sander ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/avarice/default.nix b/nixpkgs/pkgs/development/tools/misc/avarice/default.nix
new file mode 100644
index 000000000000..a8f6426a3b7b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/avarice/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, gcc, perl, libusb }:
+
+stdenv.mkDerivation rec {
+
+  name="avarice-2.13";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/avarice/${name}.tar.bz2";
+    sha256 = "0jhh1h1k5b41v2ycq8kn43nkrkh0b9l7xjmw38rak871g3z3hix1";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gcc perl libusb ];
+
+  meta = {
+    license = stdenv.lib.licenses.gpl2;
+    description = "Translator between GDB's remote debug protocol and the AVR JTAG ICE protocol";
+    homepage = https://sourceforge.net/projects/avarice/files/avarice/;
+    maintainers = [ stdenv.lib.maintainers.smironov ];
+    platforms = stdenv.lib.platforms.linux;
+    broken = true; # 2018-04-10
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/misc/avrdude/default.nix b/nixpkgs/pkgs/development/tools/misc/avrdude/default.nix
new file mode 100644
index 000000000000..39f98ae00284
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/avrdude/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, yacc, flex, libusb, libelf, libftdi1, readline
+# docSupport is a big dependency, disabled by default
+, docSupport ? false, texLive ? null, texinfo ? null, texi2html ? null
+}:
+
+assert docSupport -> texLive != null && texinfo != null && texi2html != null;
+
+stdenv.mkDerivation rec {
+  name = "avrdude-6.3";
+
+  src = fetchurl {
+    url = "mirror://savannah/avrdude/${name}.tar.gz";
+    sha256 = "15m1w1qad3dj7r8n5ng1qqcaiyx1gyd6hnc3p2apgjllccdp77qg";
+  };
+
+  configureFlags = stdenv.lib.optionals docSupport "--enable-doc";
+
+  buildInputs = [ yacc flex libusb libelf libftdi1 readline ]
+    ++ stdenv.lib.optionals docSupport [ texLive texinfo texi2html ];
+
+  meta = with stdenv.lib; {
+    description = "Command-line tool for programming Atmel AVR microcontrollers";
+    longDescription = ''
+      AVRDUDE (AVR Downloader/UploaDEr) is an utility to
+      download/upload/manipulate the ROM and EEPROM contents of AVR
+      microcontrollers using the in-system programming technique (ISP).
+    '';
+    homepage = https://www.nongnu.org/avrdude/;
+    license = licenses.gpl2Plus;
+    platforms = with platforms; linux ++ darwin;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/awf/default.nix b/nixpkgs/pkgs/development/tools/misc/awf/default.nix
new file mode 100644
index 000000000000..38d2194dab82
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/awf/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, gtk2, gtk3, pkgconfig
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  name = "awf-${version}";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "valr";
+    repo = "awf";
+    rev = "v${version}";
+    sha256 = "0jl2kxwpvf2n8974zzyp69mqhsbjnjcqm39y0jvijvjb1iy8iman";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig wrapGAppsHook ];
+
+  buildInputs = [ gtk2 gtk3 ];
+
+  autoreconfPhase = ''
+    patchShebangs ./autogen.sh
+    ./autogen.sh
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A Widget Factory";
+    longDescription = ''
+      A widget factory is a theme preview application for gtk2 and
+      gtk3. It displays the various widget types provided by gtk2/gtk3
+      in a single window allowing to see the visual effect of the
+      applied theme.
+    '';
+    homepage = https://github.com/valr/awf;
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ michalrus ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/babeltrace/default.nix b/nixpkgs/pkgs/development/tools/misc/babeltrace/default.nix
new file mode 100644
index 000000000000..cb00111b2b46
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/babeltrace/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pkgconfig, glib, libuuid, popt, elfutils }:
+
+stdenv.mkDerivation rec {
+  name = "babeltrace-1.5.6";
+
+  src = fetchurl {
+    url = "https://www.efficios.com/files/babeltrace/${name}.tar.bz2";
+    sha256 = "1dxv2pwyqx2p7kzhcfansij40m9kanl85x2r68dmgp98g0hvq22k";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ glib libuuid popt elfutils ];
+
+  meta = with stdenv.lib; {
+    description = "Command-line tool and library to read and convert LTTng tracefiles";
+    homepage = https://www.efficios.com/babeltrace;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/bashdb/default.nix b/nixpkgs/pkgs/development/tools/misc/bashdb/default.nix
new file mode 100644
index 000000000000..16182d26db3f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/bashdb/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, makeWrapper, python3Packages }:
+
+stdenv.mkDerivation rec {
+  name = "bashdb-${version}";
+  version = "4.4-1.0.0";
+
+  src = fetchurl {
+    url =  "mirror://sourceforge/bashdb/${name}.tar.bz2";
+    sha256 = "0p7i7bpzs6q1i7swnkr89kxqgzr146xw8d2acmqwqbslzm9dqlml";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/bashdb --prefix PYTHONPATH ":" "$(toPythonPath ${python3Packages.pygments})"
+  '';
+
+  meta = {
+    description = "Bash script debugger";
+    homepage = http://bashdb.sourceforge.net/;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/bin_replace_string/default.nix b/nixpkgs/pkgs/development/tools/misc/bin_replace_string/default.nix
new file mode 100644
index 000000000000..ac7eb557f2ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/bin_replace_string/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, libelf, txt2man }:
+
+stdenv.mkDerivation rec {
+  name = "bin_replace_string-${version}";
+  version = "0.2";
+
+  src = fetchurl {
+    sha256 = "1gnpddxwpsfrg4l76x5yplsvbcdbviybciqpn22yq3g3qgnr5c2a";
+    url = "ftp://ohnopub.net/mirror/bin_replace_string-0.2.tar.bz2";
+  };
+
+  buildInputs = [ libelf ];
+  nativeBuildInputs = [ txt2man ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Edit precompiled binaries";
+    longDescription = ''
+      bin_replace_string edits C-style strings in precompiled binaries. This is
+      intended to be useful to replace arbitrary strings in binaries whose
+      source code is not available. However, because of the nature of compiled
+      binaries, bin_replace_string may only replace a given C-string with a
+      shorter C-string.
+    '';
+    homepage = http://ohnopub.net/~ohnobinki/bin_replace_string/;
+    downloadPage = ftp://ohnopub.net/mirror/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/0001-x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch b/nixpkgs/pkgs/development/tools/misc/binutils/0001-x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch
new file mode 100644
index 000000000000..5a047b0f0703
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/0001-x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch
@@ -0,0 +1,517 @@
+From 6737a6b34f4823deb7142f27b4074831a37ac1e1 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Fri, 20 Jul 2018 09:18:47 -0700
+Subject: [PATCH] x86: Add a GNU_PROPERTY_X86_ISA_1_USED note if needed
+
+When -z separate-code, which is enabled by default for Linux/x86, is
+used to create executable, ld won't place any data in the code-only
+PT_LOAD segment.  If there are no data sections placed before the
+code-only PT_LOAD segment, the program headers won't be mapped into
+any PT_LOAD segment.  When the executable tries to access it (based
+on the program header address passed in AT_PHDR), it will lead to
+segfault.  This patch inserts a GNU_PROPERTY_X86_ISA_1_USED note if
+there may be no data sections before the text section so that the
+first PT_LOAD segment won't be code-only and will contain the program
+header.
+
+Testcases are adjusted to either pass "-z noseparate-code" to ld or
+discard the .note.gnu.property section.  A Linux/x86 run-time test is
+added.
+
+bfd/
+
+	PR ld/23428
+	* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): If the
+	separate code program header is needed, make sure that the first
+	read-only PT_LOAD segment has no code by adding a
+	GNU_PROPERTY_X86_ISA_1_USED note.
+
+ld/
+
+	PR ld/23428
+	* testsuite/ld-elf/linux-x86.S: New file.
+	* testsuite/ld-elf/linux-x86.exp: Likewise.
+	* testsuite/ld-elf/pr23428.c: Likewise.
+	* testsuite/ld-elf/sec64k.exp: Pass "-z noseparate-code" to ld
+	for Linux/x86 targets.
+	* testsuite/ld-i386/abs-iamcu.d: Likewise.
+	* testsuite/ld-i386/abs.d: Likewise.
+	* testsuite/ld-i386/pr12718.d: Likewise.
+	* testsuite/ld-i386/pr12921.d: Likewise.
+	* testsuite/ld-x86-64/abs-k1om.d: Likewise.
+	* testsuite/ld-x86-64/abs-l1om.d: Likewise.
+	* testsuite/ld-x86-64/abs.d: Likewise.
+	* testsuite/ld-x86-64/pr12718.d: Likewise.
+	* testsuite/ld-x86-64/pr12921.d: Likewise.
+	* testsuite/ld-linkonce/zeroeh.ld: Discard .note.gnu.property
+	section.
+	* testsuite/ld-scripts/print-memory-usage.t: Likewise.
+	* testsuite/ld-scripts/size-2.t: Likewise.
+	* testsuite/lib/ld-lib.exp (run_ld_link_exec_tests): Use ld
+	to create executable if language is "asm".
+
+(cherry picked from commit 241e64e3b42cd9eba514b8e0ad2ef39a337f10a5)
+---
+ bfd/elfxx-x86.c                              | 60 ++++++++++++++-----
+ ld/testsuite/ld-elf/linux-x86.S              | 63 ++++++++++++++++++++
+ ld/testsuite/ld-elf/linux-x86.exp            | 46 ++++++++++++++
+ ld/testsuite/ld-elf/pr23428.c                | 43 +++++++++++++
+ ld/testsuite/ld-elf/sec64k.exp               |  2 +
+ ld/testsuite/ld-i386/abs-iamcu.d             |  2 +-
+ ld/testsuite/ld-i386/abs.d                   |  2 +-
+ ld/testsuite/ld-i386/pr12718.d               |  2 +-
+ ld/testsuite/ld-i386/pr12921.d               |  2 +-
+ ld/testsuite/ld-linkonce/zeroeh.ld           |  1 +
+ ld/testsuite/ld-scripts/print-memory-usage.t |  2 +
+ ld/testsuite/ld-scripts/size-2.t             |  1 +
+ ld/testsuite/ld-x86-64/abs-k1om.d            |  2 +-
+ ld/testsuite/ld-x86-64/abs-l1om.d            |  2 +-
+ ld/testsuite/ld-x86-64/abs.d                 |  2 +-
+ ld/testsuite/ld-x86-64/pr12718.d             |  2 +-
+ ld/testsuite/ld-x86-64/pr12921.d             |  2 +-
+ ld/testsuite/lib/ld-lib.exp                  |  5 +-
+ 20 files changed, 248 insertions(+), 25 deletions(-)
+ create mode 100644 ld/testsuite/ld-elf/linux-x86.S
+ create mode 100644 ld/testsuite/ld-elf/linux-x86.exp
+ create mode 100644 ld/testsuite/ld-elf/pr23428.c
+
+diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
+index a2497aab86..2e4ff88f1f 100644
+--- a/bfd/elfxx-x86.c
++++ b/bfd/elfxx-x86.c
+@@ -2524,6 +2524,7 @@ _bfd_x86_elf_link_setup_gnu_properties
+   const struct elf_backend_data *bed;
+   unsigned int class_align = ABI_64_P (info->output_bfd) ? 3 : 2;
+   unsigned int got_align;
++  bfd_boolean has_text = FALSE;
+ 
+   features = 0;
+   if (info->ibt)
+@@ -2538,24 +2539,59 @@ _bfd_x86_elf_link_setup_gnu_properties
+     if (bfd_get_flavour (pbfd) == bfd_target_elf_flavour
+ 	&& bfd_count_sections (pbfd) != 0)
+       {
++	if (!has_text)
++	  {
++	    /* Check if there is no non-empty text section.  */
++	    sec = bfd_get_section_by_name (pbfd, ".text");
++	    if (sec != NULL && sec->size != 0)
++	      has_text = TRUE;
++	  }
++
+ 	ebfd = pbfd;
+ 
+ 	if (elf_properties (pbfd) != NULL)
+ 	  break;
+       }
+ 
+-  if (ebfd != NULL && features)
++  bed = get_elf_backend_data (info->output_bfd);
++
++  htab = elf_x86_hash_table (info, bed->target_id);
++  if (htab == NULL)
++    return pbfd;
++
++  if (ebfd != NULL)
+     {
+-      /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT and
+-	 GNU_PROPERTY_X86_FEATURE_1_SHSTK.  */
+-      prop = _bfd_elf_get_property (ebfd,
+-				    GNU_PROPERTY_X86_FEATURE_1_AND,
+-				    4);
+-      prop->u.number |= features;
+-      prop->pr_kind = property_number;
++      prop = NULL;
++      if (features)
++	{
++	  /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT and
++	     GNU_PROPERTY_X86_FEATURE_1_SHSTK.  */
++	  prop = _bfd_elf_get_property (ebfd,
++					GNU_PROPERTY_X86_FEATURE_1_AND,
++					4);
++	  prop->u.number |= features;
++	  prop->pr_kind = property_number;
++	}
++      else if (has_text
++	       && elf_properties (ebfd) == NULL
++	       && elf_tdata (info->output_bfd)->o->build_id.sec == NULL
++	       && !htab->elf.dynamic_sections_created
++	       && !info->traditional_format
++	       && (info->output_bfd->flags & D_PAGED) != 0
++	       && info->separate_code)
++	{
++	  /* If the separate code program header is needed, make sure
++	     that the first read-only PT_LOAD segment has no code by
++	     adding a GNU_PROPERTY_X86_ISA_1_USED note.  */
++	  prop = _bfd_elf_get_property (ebfd,
++					GNU_PROPERTY_X86_ISA_1_USED,
++					4);
++	  prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
++	  prop->pr_kind = property_number;
++	}
+ 
+       /* Create the GNU property note section if needed.  */
+-      if (pbfd == NULL)
++      if (prop != NULL && pbfd == NULL)
+ 	{
+ 	  sec = bfd_make_section_with_flags (ebfd,
+ 					     NOTE_GNU_PROPERTY_SECTION_NAME,
+@@ -2581,12 +2617,6 @@ error_alignment:
+ 
+   pbfd = _bfd_elf_link_setup_gnu_properties (info);
+ 
+-  bed = get_elf_backend_data (info->output_bfd);
+-
+-  htab = elf_x86_hash_table (info, bed->target_id);
+-  if (htab == NULL)
+-    return pbfd;
+-
+   htab->r_info = init_table->r_info;
+   htab->r_sym = init_table->r_sym;
+ 
+diff --git a/ld/testsuite/ld-elf/linux-x86.S b/ld/testsuite/ld-elf/linux-x86.S
+new file mode 100644
+index 0000000000..bdf40c6e01
+--- /dev/null
++++ b/ld/testsuite/ld-elf/linux-x86.S
+@@ -0,0 +1,63 @@
++	.text
++	.globl _start
++	.type _start,@function
++	.p2align 4
++_start:
++	xorl %ebp, %ebp
++#ifdef __LP64__
++	popq %rdi
++	movq %rsp, %rsi
++	andq  $~15, %rsp
++#elif defined __x86_64__
++	mov (%rsp),%edi
++	addl $4,%esp
++	movl %esp, %esi
++	andl  $~15, %esp
++#else
++	popl %esi
++	movl %esp, %ecx
++	andl  $~15, %esp
++
++	subl $8,%esp
++	pushl %ecx
++	pushl %esi
++#endif
++
++	call main
++
++	hlt
++
++	.type syscall,  @function
++	.globl syscall
++	.p2align 4
++syscall:
++#ifdef __x86_64__
++	movq %rdi, %rax		/* Syscall number -> rax.  */
++	movq %rsi, %rdi		/* shift arg1 - arg5.  */
++	movq %rdx, %rsi
++	movq %rcx, %rdx
++	movq %r8, %r10
++	movq %r9, %r8
++	movq 8(%rsp),%r9	/* arg6 is on the stack.  */
++	syscall			/* Do the system call.  */
++#else
++	push %ebp
++	push %edi
++	push %esi
++	push %ebx
++	mov 0x2c(%esp),%ebp
++	mov 0x28(%esp),%edi
++	mov 0x24(%esp),%esi
++	mov 0x20(%esp),%edx
++	mov 0x1c(%esp),%ecx
++	mov 0x18(%esp),%ebx
++	mov 0x14(%esp),%eax
++	int $0x80
++	pop %ebx
++	pop %esi
++	pop %edi
++	pop %ebp
++#endif
++	ret			/* Return to caller.  */
++	.size syscall, .-syscall
++	.section .note.GNU-stack,"",@progbits
+diff --git a/ld/testsuite/ld-elf/linux-x86.exp b/ld/testsuite/ld-elf/linux-x86.exp
+new file mode 100644
+index 0000000000..36217c6fb4
+--- /dev/null
++++ b/ld/testsuite/ld-elf/linux-x86.exp
+@@ -0,0 +1,46 @@
++# Expect script for simple native Linux/x86 tests.
++#   Copyright (C) 2018 Free Software Foundation, Inc.
++#
++# This file is part of the GNU Binutils.
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program 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 this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
++# MA 02110-1301, USA.
++#
++
++# Test very simple native Linux/x86 programs with linux-x86.S.
++if { ![isnative] || [which $CC] == 0 \
++     || (![istarget "i?86-*-linux*"] \
++         && ![istarget "x86_64-*-linux*"] \
++         && ![istarget "amd64-*-linux*"]) } {
++    return
++}
++
++# Add $PLT_CFLAGS if PLT is expected.
++global PLT_CFLAGS
++# Add $NOPIE_CFLAGS and $NOPIE_LDFLAGS if non-PIE is required.
++global NOPIE_CFLAGS NOPIE_LDFLAGS
++
++run_ld_link_exec_tests [list \
++    [list \
++	"Run PR ld/23428 test" \
++	"--no-dynamic-linker -z separate-code" \
++	"" \
++	{ linux-x86.S pr23428.c } \
++	"pr23428" \
++	"pass.out" \
++	"$NOPIE_CFLAGS -fno-asynchronous-unwind-tables" \
++	"asm" \
++    ] \
++]
+diff --git a/ld/testsuite/ld-elf/pr23428.c b/ld/testsuite/ld-elf/pr23428.c
+new file mode 100644
+index 0000000000..3631ed7926
+--- /dev/null
++++ b/ld/testsuite/ld-elf/pr23428.c
+@@ -0,0 +1,43 @@
++#include <unistd.h>
++#include <link.h>
++#include <syscall.h>
++
++#define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1)
++
++int
++main (int argc, char **argv)
++{
++  char **ev = &argv[argc + 1];
++  char **evp = ev;
++  ElfW(auxv_t) *av;
++  const ElfW(Phdr) *phdr = NULL;
++  size_t phnum = 0;
++  size_t loadnum = 0;
++  int fd = STDOUT_FILENO;
++  size_t i;
++
++  while (*evp++ != NULL)
++    ;
++
++  av = (ElfW(auxv_t) *) evp;
++
++  for (; av->a_type != AT_NULL; ++av)
++    switch (av->a_type)
++      {
++      case AT_PHDR:
++	phdr = (const void *) av->a_un.a_val;
++	break;
++      case AT_PHNUM:
++	phnum = av->a_un.a_val;
++	break;
++      }
++
++  for (i = 0; i < phnum; i++, phdr++)
++    if (phdr->p_type == PT_LOAD)
++      loadnum++;
++
++  syscall (SYS_write, fd, STRING_COMMA_LEN ("PASS\n"));
++
++  syscall (SYS_exit, !loadnum);
++  return 0;
++}
+diff --git a/ld/testsuite/ld-elf/sec64k.exp b/ld/testsuite/ld-elf/sec64k.exp
+index b58139e9dd..3909c0eaa1 100644
+--- a/ld/testsuite/ld-elf/sec64k.exp
++++ b/ld/testsuite/ld-elf/sec64k.exp
+@@ -177,6 +177,8 @@ if { ![istarget "d10v-*-*"]
+     foreach sfile $sfiles { puts $ofd "#source: $sfile" }
+     if { [istarget spu*-*-*] } {
+ 	puts $ofd "#ld: --local-store 0:0"
++    } elseif { [istarget "i?86-*-linux*"] || [istarget "x86_64-*-linux*"] } {
++	puts $ofd "#ld: -z noseparate-code"
+     } else {
+ 	puts $ofd "#ld:"
+     }
+diff --git a/ld/testsuite/ld-i386/abs-iamcu.d b/ld/testsuite/ld-i386/abs-iamcu.d
+index ac9beff2e5..aba7d6b03f 100644
+--- a/ld/testsuite/ld-i386/abs-iamcu.d
++++ b/ld/testsuite/ld-i386/abs-iamcu.d
+@@ -2,7 +2,7 @@
+ #source: abs.s
+ #source: zero.s
+ #as: --32 -march=iamcu
+-#ld: -m elf_iamcu
++#ld: -m elf_iamcu -z noseparate-code
+ #objdump: -rs -j .text
+ 
+ .*:     file format .*
+diff --git a/ld/testsuite/ld-i386/abs.d b/ld/testsuite/ld-i386/abs.d
+index e660aca524..191ee4456a 100644
+--- a/ld/testsuite/ld-i386/abs.d
++++ b/ld/testsuite/ld-i386/abs.d
+@@ -2,7 +2,7 @@
+ #as: --32
+ #source: abs.s
+ #source: zero.s
+-#ld: -melf_i386
++#ld: -melf_i386 -z noseparate-code
+ #objdump: -rs
+ 
+ .*:     file format .*
+diff --git a/ld/testsuite/ld-i386/pr12718.d b/ld/testsuite/ld-i386/pr12718.d
+index ec51540a42..7eba52d95e 100644
+--- a/ld/testsuite/ld-i386/pr12718.d
++++ b/ld/testsuite/ld-i386/pr12718.d
+@@ -1,6 +1,6 @@
+ #name: PR ld/12718
+ #as: --32
+-#ld: -melf_i386
++#ld: -melf_i386 -z noseparate-code
+ #readelf: -S
+ 
+ There are 5 section headers, starting at offset 0x[0-9a-f]+:
+diff --git a/ld/testsuite/ld-i386/pr12921.d b/ld/testsuite/ld-i386/pr12921.d
+index e49079b3c8..ea2da3eb51 100644
+--- a/ld/testsuite/ld-i386/pr12921.d
++++ b/ld/testsuite/ld-i386/pr12921.d
+@@ -1,6 +1,6 @@
+ #name: PR ld/12921
+ #as: --32
+-#ld: -melf_i386
++#ld: -melf_i386 -z noseparate-code
+ #readelf: -S --wide
+ 
+ There are 7 section headers, starting at offset 0x[0-9a-f]+:
+diff --git a/ld/testsuite/ld-linkonce/zeroeh.ld b/ld/testsuite/ld-linkonce/zeroeh.ld
+index b22eaa12c9..f89855a08f 100644
+--- a/ld/testsuite/ld-linkonce/zeroeh.ld
++++ b/ld/testsuite/ld-linkonce/zeroeh.ld
+@@ -2,4 +2,5 @@ SECTIONS {
+  .text 0xa00 : { *(.text); *(.gnu.linkonce.t.*) }
+  .gcc_except_table 0x2000 : { *(.gcc_except_table) }
+  .eh_frame 0x4000 : { *(.eh_frame) }
++  /DISCARD/ : { *(.note.gnu.property) }
+ }
+diff --git a/ld/testsuite/ld-scripts/print-memory-usage.t b/ld/testsuite/ld-scripts/print-memory-usage.t
+index 5ff057a5e3..6eda1d2dc4 100644
+--- a/ld/testsuite/ld-scripts/print-memory-usage.t
++++ b/ld/testsuite/ld-scripts/print-memory-usage.t
+@@ -11,4 +11,6 @@ SECTIONS
+     *(.data)
+     *(.rw)
+   }
++
++  /DISCARD/ : { *(.note.gnu.property) }
+ }
+diff --git a/ld/testsuite/ld-scripts/size-2.t b/ld/testsuite/ld-scripts/size-2.t
+index 723863995e..c3c4eddab4 100644
+--- a/ld/testsuite/ld-scripts/size-2.t
++++ b/ld/testsuite/ld-scripts/size-2.t
+@@ -18,4 +18,5 @@ SECTIONS
+     LONG (SIZEOF (.tdata))
+     LONG (SIZEOF (.tbss))
+   } :image
++  /DISCARD/ : { *(.note.gnu.property) }
+ }
+diff --git a/ld/testsuite/ld-x86-64/abs-k1om.d b/ld/testsuite/ld-x86-64/abs-k1om.d
+index 2c26639fc0..6b0fde0eed 100644
+--- a/ld/testsuite/ld-x86-64/abs-k1om.d
++++ b/ld/testsuite/ld-x86-64/abs-k1om.d
+@@ -2,7 +2,7 @@
+ #source: ../ld-i386/abs.s
+ #source: ../ld-i386/zero.s
+ #as: --64 -march=k1om
+-#ld: -m elf_k1om
++#ld: -m elf_k1om -z noseparate-code
+ #objdump: -rs -j .text
+ 
+ .*:     file format .*
+diff --git a/ld/testsuite/ld-x86-64/abs-l1om.d b/ld/testsuite/ld-x86-64/abs-l1om.d
+index 1fb96d44b7..f87869f9d0 100644
+--- a/ld/testsuite/ld-x86-64/abs-l1om.d
++++ b/ld/testsuite/ld-x86-64/abs-l1om.d
+@@ -2,7 +2,7 @@
+ #source: ../ld-i386/abs.s
+ #source: ../ld-i386/zero.s
+ #as: --64 -march=l1om
+-#ld: -m elf_l1om
++#ld: -m elf_l1om -z noseparate-code
+ #objdump: -rs -j .text
+ #target: x86_64-*-linux*
+ 
+diff --git a/ld/testsuite/ld-x86-64/abs.d b/ld/testsuite/ld-x86-64/abs.d
+index b24b018639..d99ab4685d 100644
+--- a/ld/testsuite/ld-x86-64/abs.d
++++ b/ld/testsuite/ld-x86-64/abs.d
+@@ -1,7 +1,7 @@
+ #name: Absolute non-overflowing relocs
+ #source: ../ld-i386/abs.s
+ #source: ../ld-i386/zero.s
+-#ld:
++#ld: -z noseparate-code
+ #objdump: -rs
+ 
+ .*:     file format .*
+diff --git a/ld/testsuite/ld-x86-64/pr12718.d b/ld/testsuite/ld-x86-64/pr12718.d
+index 07d17325d0..2c503ffbaa 100644
+--- a/ld/testsuite/ld-x86-64/pr12718.d
++++ b/ld/testsuite/ld-x86-64/pr12718.d
+@@ -1,6 +1,6 @@
+ #name: PR ld/12718
+ #as: --64
+-#ld: -melf_x86_64
++#ld: -melf_x86_64 -z noseparate-code
+ #readelf: -S --wide
+ 
+ There are 5 section headers, starting at offset 0x[0-9a-f]+:
+diff --git a/ld/testsuite/ld-x86-64/pr12921.d b/ld/testsuite/ld-x86-64/pr12921.d
+index 6fe6abee09..1162d55818 100644
+--- a/ld/testsuite/ld-x86-64/pr12921.d
++++ b/ld/testsuite/ld-x86-64/pr12921.d
+@@ -1,6 +1,6 @@
+ #name: PR ld/12921
+ #as: --64
+-#ld: -melf_x86_64
++#ld: -melf_x86_64 -z noseparate-code
+ #readelf: -S --wide
+ 
+ There are 7 section headers, starting at offset 0x[0-9a-f]+:
+diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
+index cfbefe9028..1095091882 100644
+--- a/ld/testsuite/lib/ld-lib.exp
++++ b/ld/testsuite/lib/ld-lib.exp
+@@ -1482,7 +1482,10 @@ proc run_ld_link_exec_tests { ldtests args } {
+ 	    continue
+ 	}
+ 
+-	if { [ string match "c++" $lang ] } {
++	if { [ string match "asm" $lang ] } {
++	    set link_proc ld_link
++	    set link_cmd $ld
++	} elseif { [ string match "c++" $lang ] } {
+ 	    set link_proc ld_link
+ 	    set link_cmd $CXX
+ 	} else {
+-- 
+2.20.1
+
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/0001-x86-Properly-add-X86_ISA_1_NEEDED-property.patch b/nixpkgs/pkgs/development/tools/misc/binutils/0001-x86-Properly-add-X86_ISA_1_NEEDED-property.patch
new file mode 100644
index 000000000000..ca50d9a57cd1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/0001-x86-Properly-add-X86_ISA_1_NEEDED-property.patch
@@ -0,0 +1,137 @@
+From 28a27bdbb9500797e6767f80c8128b09112aeed5 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Sat, 11 Aug 2018 06:41:33 -0700
+Subject: [PATCH] x86: Properly add X86_ISA_1_NEEDED property
+
+Existing properties may be removed during property merging.  We avoid
+adding X86_ISA_1_NEEDED property only if existing properties won't be
+removed.
+
+bfd/
+
+	PR ld/23428
+	* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Don't
+	add X86_ISA_1_NEEDED property only if existing properties won't
+	be removed.
+
+ld/
+
+	PR ld/23428
+	* testsuite/ld-elf/dummy.s: New file.
+	* testsuite/ld-elf/linux-x86.S: Add X86_FEATURE_1_AND property.
+	* testsuite/ld-elf/linux-x86.exp: Add dummy.s to pr23428.
+
+(cherry picked from commit ab9e342807d132182892de1be1a92d6e91a5c1da)
+---
+ bfd/elfxx-x86.c                   | 28 ++++++++++++++++++++++------
+ ld/testsuite/ld-elf/dummy.s       |  1 +
+ ld/testsuite/ld-elf/linux-x86.S   | 28 ++++++++++++++++++++++++++++
+ ld/testsuite/ld-elf/linux-x86.exp |  2 +-
+ 6 files changed, 66 insertions(+), 7 deletions(-)
+ create mode 100644 ld/testsuite/ld-elf/dummy.s
+
+diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
+index 7ccfd25815..2d8f7b640b 100644
+--- a/bfd/elfxx-x86.c
++++ b/bfd/elfxx-x86.c
+@@ -2588,7 +2588,6 @@ _bfd_x86_elf_link_setup_gnu_properties
+ 	  prop->pr_kind = property_number;
+ 	}
+       else if (has_text
+-	       && elf_properties (ebfd) == NULL
+ 	       && elf_tdata (info->output_bfd)->o->build_id.sec == NULL
+ 	       && !htab->elf.dynamic_sections_created
+ 	       && !info->traditional_format
+@@ -2598,11 +2597,28 @@ _bfd_x86_elf_link_setup_gnu_properties
+ 	  /* If the separate code program header is needed, make sure
+ 	     that the first read-only PT_LOAD segment has no code by
+ 	     adding a GNU_PROPERTY_X86_ISA_1_NEEDED note.  */
+-	  prop = _bfd_elf_get_property (ebfd,
+-					GNU_PROPERTY_X86_ISA_1_NEEDED,
+-					4);
+-	  prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
+-	  prop->pr_kind = property_number;
++	  elf_property_list *list;
++	  bfd_boolean need_property = TRUE;
++
++	  for (list = elf_properties (ebfd); list; list = list->next)
++	    switch (list->property.pr_type)
++	      {
++	      case GNU_PROPERTY_STACK_SIZE:
++	      case GNU_PROPERTY_NO_COPY_ON_PROTECTED:
++	      case GNU_PROPERTY_X86_ISA_1_NEEDED:
++		/* These properties won't be removed during merging.  */
++		need_property = FALSE;
++		break;
++	      }
++
++	  if (need_property)
++	    {
++	      prop = _bfd_elf_get_property (ebfd,
++					    GNU_PROPERTY_X86_ISA_1_NEEDED,
++					    4);
++	      prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
++	      prop->pr_kind = property_number;
++	    }
+ 	}
+ 
+       /* Create the GNU property note section if needed.  */
+diff --git a/ld/testsuite/ld-elf/dummy.s b/ld/testsuite/ld-elf/dummy.s
+new file mode 100644
+index 0000000000..403f98000d
+--- /dev/null
++++ b/ld/testsuite/ld-elf/dummy.s
+@@ -0,0 +1 @@
++# Dummy
+diff --git a/ld/testsuite/ld-elf/linux-x86.S b/ld/testsuite/ld-elf/linux-x86.S
+index bdf40c6e01..d94abc1106 100644
+--- a/ld/testsuite/ld-elf/linux-x86.S
++++ b/ld/testsuite/ld-elf/linux-x86.S
+@@ -61,3 +61,31 @@ syscall:
+ 	ret			/* Return to caller.  */
+ 	.size syscall, .-syscall
+ 	.section .note.GNU-stack,"",@progbits
++
++	.section ".note.gnu.property", "a"
++#ifdef __LP64__
++	.p2align 3
++#else
++	.p2align 2
++#endif
++	.long 1f - 0f		/* name length */
++	.long 5f - 2f		/* data length */
++	.long 5			/* note type */
++0:	.asciz "GNU"		/* vendor name */
++1:
++#ifdef __LP64__
++	.p2align 3
++#else
++	.p2align 2
++#endif
++2:	.long 0xc0000002	/* pr_type.  */
++	.long 4f - 3f		/* pr_datasz.  */
++3:
++	.long 0x2
++4:
++#ifdef __LP64__
++	.p2align 3
++#else
++	.p2align 2
++#endif
++5:
+diff --git a/ld/testsuite/ld-elf/linux-x86.exp b/ld/testsuite/ld-elf/linux-x86.exp
+index 36217c6fb4..f6f5a80853 100644
+--- a/ld/testsuite/ld-elf/linux-x86.exp
++++ b/ld/testsuite/ld-elf/linux-x86.exp
+@@ -37,7 +37,7 @@ run_ld_link_exec_tests [list \
+ 	"Run PR ld/23428 test" \
+ 	"--no-dynamic-linker -z separate-code" \
+ 	"" \
+-	{ linux-x86.S pr23428.c } \
++	{ linux-x86.S pr23428.c dummy.s } \
+ 	"pr23428" \
+ 	"pass.out" \
+ 	"$NOPIE_CFLAGS -fno-asynchronous-unwind-tables" \
+-- 
+2.20.1
+
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/0001-x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch b/nixpkgs/pkgs/development/tools/misc/binutils/0001-x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
new file mode 100644
index 000000000000..866d6db8ce24
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/0001-x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
@@ -0,0 +1,583 @@
+From d55c3e36094f06bb1fb02f5eac19fdccf1d91f7e Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Wed, 8 Aug 2018 06:09:15 -0700
+Subject: [PATCH] x86: Properly merge GNU_PROPERTY_X86_ISA_1_USED
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Without the GNU_PROPERTY_X86_ISA_1_USED property, all ISAs may be used.
+If a bit in the GNU_PROPERTY_X86_ISA_1_USED property is unset, the
+corresponding x86 instruction set isn’t used.  When merging properties
+from 2 input files and one input file doesn't have the
+GNU_PROPERTY_X86_ISA_1_USED property, the output file shouldn't have
+it neither.  This patch removes the GNU_PROPERTY_X86_ISA_1_USED
+property if an input file doesn't have it.
+
+This patch replaces the GNU_PROPERTY_X86_ISA_1_USED property with the
+GNU_PROPERTY_X86_ISA_1_NEEDED property which is the minimum ISA
+requirement.
+
+bfd/
+
+	PR ld/23486
+	* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Remove
+	GNU_PROPERTY_X86_ISA_1_USED if an input file doesn't have it.
+	(_bfd_x86_elf_link_setup_gnu_properties): Adding the
+	GNU_PROPERTY_X86_ISA_1_NEEDED, instead of
+	GNU_PROPERTY_X86_ISA_1_USED, property.
+
+ld/
+
+	PR ld/23486
+	* testsuite/ld-i386/i386.exp: Run PR ld/23486 tests.
+	* testsuite/ld-x86-64/x86-64.exp: Likewise.
+	* testsuite/ld-i386/pr23486a.d: New file.
+	* testsuite/ld-i386/pr23486b.d: Likewise.
+	* testsuite/ld-x86-64/pr23486a-x32.d: Likewise.
+	* testsuite/ld-x86-64/pr23486a.d: Likewise.
+	* testsuite/ld-x86-64/pr23486a.s: Likewise.
+	* testsuite/ld-x86-64/pr23486b-x32.d: Likewise.
+	* testsuite/ld-x86-64/pr23486b.d: Likewise.
+	* testsuite/ld-x86-64/pr23486b.s: Likewise.
+	* testsuite/ld-i386/property-3.r: Remove "x86 ISA used".
+	* testsuite/ld-i386/property-4.r: Likewise.
+	* testsuite/ld-i386/property-5.r: Likewise.
+	* testsuite/ld-i386/property-x86-ibt3a.d: Likewise.
+	* testsuite/ld-i386/property-x86-ibt3b.d: Likewise.
+	* testsuite/ld-i386/property-x86-shstk3a.d: Likewise.
+	* testsuite/ld-i386/property-x86-shstk3b.d: Likewise.
+	* testsuite/ld-x86-64/property-3.r: Likewise.
+	* testsuite/ld-x86-64/property-4.r: Likewise.
+	* testsuite/ld-x86-64/property-5.r: Likewise.
+	* testsuite/ld-x86-64/property-x86-ibt3a-x32.d: Likewise.
+	* testsuite/ld-x86-64/property-x86-ibt3a.d: Likewise.
+	* testsuite/ld-x86-64/property-x86-ibt3b-x32.d: Likewise.
+	* testsuite/ld-x86-64/property-x86-ibt3b.d: Likewise.
+	* testsuite/ld-x86-64/property-x86-shstk3a-x32.d: Likewise.
+	* testsuite/ld-x86-64/property-x86-shstk3a.d: Likewise.
+	* testsuite/ld-x86-64/property-x86-shstk3b-x32.d: Likewise.
+	* testsuite/ld-x86-64/property-x86-shstk3b.d: Likewise.
+
+(cherry picked from commit f7309df20c4e787041cedc4a6aced89c15259e54)
+---
+ bfd/elfxx-x86.c                               | 25 ++++++++++++---
+ ld/testsuite/ld-i386/i386.exp                 |  2 ++
+ ld/testsuite/ld-i386/pr23486a.d               | 10 ++++++
+ ld/testsuite/ld-i386/pr23486b.d               | 10 ++++++
+ ld/testsuite/ld-i386/property-3.r             |  1 -
+ ld/testsuite/ld-i386/property-4.r             |  1 -
+ ld/testsuite/ld-i386/property-5.r             |  1 -
+ ld/testsuite/ld-i386/property-x86-ibt3a.d     |  5 ++-
+ ld/testsuite/ld-i386/property-x86-ibt3b.d     |  5 ++-
+ ld/testsuite/ld-i386/property-x86-shstk3a.d   |  5 ++-
+ ld/testsuite/ld-i386/property-x86-shstk3b.d   |  5 ++-
+ ld/testsuite/ld-x86-64/pr23486a-x32.d         | 10 ++++++
+ ld/testsuite/ld-x86-64/pr23486a.d             | 10 ++++++
+ ld/testsuite/ld-x86-64/pr23486a.s             | 30 +++++++++++++++++
+ ld/testsuite/ld-x86-64/pr23486b-x32.d         | 10 ++++++
+ ld/testsuite/ld-x86-64/pr23486b.d             | 10 ++++++
+ ld/testsuite/ld-x86-64/pr23486b.s             | 30 +++++++++++++++++
+ ld/testsuite/ld-x86-64/property-3.r           |  1 -
+ ld/testsuite/ld-x86-64/property-4.r           |  1 -
+ ld/testsuite/ld-x86-64/property-5.r           |  1 -
+ .../ld-x86-64/property-x86-ibt3a-x32.d        |  5 ++-
+ ld/testsuite/ld-x86-64/property-x86-ibt3a.d   |  5 ++-
+ .../ld-x86-64/property-x86-ibt3b-x32.d        |  5 ++-
+ ld/testsuite/ld-x86-64/property-x86-ibt3b.d   |  5 ++-
+ .../ld-x86-64/property-x86-shstk3a-x32.d      |  5 ++-
+ ld/testsuite/ld-x86-64/property-x86-shstk3a.d |  5 ++-
+ .../ld-x86-64/property-x86-shstk3b-x32.d      |  5 ++-
+ ld/testsuite/ld-x86-64/property-x86-shstk3b.d |  5 ++-
+ ld/testsuite/ld-x86-64/x86-64.exp             |  4 +++
+ 31 files changed, 211 insertions(+), 47 deletions(-)
+ create mode 100644 ld/testsuite/ld-i386/pr23486a.d
+ create mode 100644 ld/testsuite/ld-i386/pr23486b.d
+ create mode 100644 ld/testsuite/ld-x86-64/pr23486a-x32.d
+ create mode 100644 ld/testsuite/ld-x86-64/pr23486a.d
+ create mode 100644 ld/testsuite/ld-x86-64/pr23486a.s
+ create mode 100644 ld/testsuite/ld-x86-64/pr23486b-x32.d
+ create mode 100644 ld/testsuite/ld-x86-64/pr23486b.d
+ create mode 100644 ld/testsuite/ld-x86-64/pr23486b.s
+
+--- a/bfd/elfxx-x86.c
++++ b/bfd/elfxx-x86.c
+@@ -2407,12 +2407,27 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
+   switch (pr_type)
+     {
+     case GNU_PROPERTY_X86_ISA_1_USED:
++      if (aprop == NULL || bprop == NULL)
++	{
++	  /* Only one of APROP and BPROP can be NULL.  */
++	  if (aprop != NULL)
++	    {
++	      /* Remove this property since the other input file doesn't
++		 have it.  */
++	      aprop->pr_kind = property_remove;
++	      updated = TRUE;
++	    }
++	  break;
++	}
++      goto or_property;
++
+     case GNU_PROPERTY_X86_ISA_1_NEEDED:
+       if (aprop != NULL && bprop != NULL)
+ 	{
++or_property:
+ 	  number = aprop->u.number;
+ 	  aprop->u.number = number | bprop->u.number;
+-	  /* Remove the property if ISA bits are empty.  */
++	  /* Remove the property if all bits are empty.  */
+ 	  if (aprop->u.number == 0)
+ 	    {
+ 	      aprop->pr_kind = property_remove;
+@@ -2428,14 +2443,14 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
+ 	    {
+ 	      if (aprop->u.number == 0)
+ 		{
+-		  /* Remove APROP if ISA bits are empty.  */
++		  /* Remove APROP if all bits are empty.  */
+ 		  aprop->pr_kind = property_remove;
+ 		  updated = TRUE;
+ 		}
+ 	    }
+ 	  else
+ 	    {
+-	      /* Return TRUE if APROP is NULL and ISA bits of BPROP
++	      /* Return TRUE if APROP is NULL and all bits of BPROP
+ 		 aren't empty to indicate that BPROP should be added
+ 		 to ABFD.  */
+ 	      updated = bprop->u.number != 0;
+@@ -2582,9 +2597,9 @@ _bfd_x86_elf_link_setup_gnu_properties
+ 	{
+ 	  /* If the separate code program header is needed, make sure
+ 	     that the first read-only PT_LOAD segment has no code by
+-	     adding a GNU_PROPERTY_X86_ISA_1_USED note.  */
++	     adding a GNU_PROPERTY_X86_ISA_1_NEEDED note.  */
+ 	  prop = _bfd_elf_get_property (ebfd,
+-					GNU_PROPERTY_X86_ISA_1_USED,
++					GNU_PROPERTY_X86_ISA_1_NEEDED,
+ 					4);
+ 	  prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
+ 	  prop->pr_kind = property_number;
+diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
+index 6d794fe653..78dad02579 100644
+--- a/ld/testsuite/ld-i386/i386.exp
++++ b/ld/testsuite/ld-i386/i386.exp
+@@ -462,6 +462,8 @@ run_dump_test "pr23189"
+ run_dump_test "pr23194"
+ run_dump_test "pr23372a"
+ run_dump_test "pr23372b"
++run_dump_test "pr23486a"
++run_dump_test "pr23486b"
+ 
+ if { !([istarget "i?86-*-linux*"]
+        || [istarget "i?86-*-gnu*"]
+diff --git a/ld/testsuite/ld-i386/pr23486a.d b/ld/testsuite/ld-i386/pr23486a.d
+new file mode 100644
+index 0000000000..41a6dcf7d5
+--- /dev/null
++++ b/ld/testsuite/ld-i386/pr23486a.d
+@@ -0,0 +1,10 @@
++#source: ../ld-x86-64/pr23486a.s
++#source: ../ld-x86-64/pr23486b.s
++#as: --32
++#ld: -r -m elf_i386
++#readelf: -n
++
++Displaying notes found in: .note.gnu.property
++  Owner                 Data size	Description
++  GNU                  0x0000000c	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: i486, 586
+diff --git a/ld/testsuite/ld-i386/pr23486b.d b/ld/testsuite/ld-i386/pr23486b.d
+new file mode 100644
+index 0000000000..08019b7274
+--- /dev/null
++++ b/ld/testsuite/ld-i386/pr23486b.d
+@@ -0,0 +1,10 @@
++#source: ../ld-x86-64/pr23486b.s
++#source: ../ld-x86-64/pr23486a.s
++#as: --32
++#ld: -r -m elf_i386
++#readelf: -n
++
++Displaying notes found in: .note.gnu.property
++  Owner                 Data size	Description
++  GNU                  0x0000000c	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: i486, 586
+diff --git a/ld/testsuite/ld-i386/property-3.r b/ld/testsuite/ld-i386/property-3.r
+index 0ed91f5922..d03203c1e5 100644
+--- a/ld/testsuite/ld-i386/property-3.r
++++ b/ld/testsuite/ld-i386/property-3.r
+@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+   GNU                  0x[0-9a-f]+	NT_GNU_PROPERTY_TYPE_0
+       Properties: stack size: 0x800000
+-	x86 ISA used: 586, SSE
+ 	x86 ISA needed: i486, 586
+ #pass
+diff --git a/ld/testsuite/ld-i386/property-4.r b/ld/testsuite/ld-i386/property-4.r
+index cb2bc15d9a..da295eb6c7 100644
+--- a/ld/testsuite/ld-i386/property-4.r
++++ b/ld/testsuite/ld-i386/property-4.r
+@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+   GNU                  0x[0-9a-f]+	NT_GNU_PROPERTY_TYPE_0
+       Properties: stack size: 0x800000
+-	x86 ISA used: i486, 586, SSE
+ 	x86 ISA needed: i486, 586, SSE
+ #pass
+diff --git a/ld/testsuite/ld-i386/property-5.r b/ld/testsuite/ld-i386/property-5.r
+index 552965058c..e4141594b3 100644
+--- a/ld/testsuite/ld-i386/property-5.r
++++ b/ld/testsuite/ld-i386/property-5.r
+@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+   GNU                  0x[0-9a-f]+	NT_GNU_PROPERTY_TYPE_0
+       Properties: stack size: 0x900000
+-	x86 ISA used: i486, 586, SSE
+ 	x86 ISA needed: i486, 586, SSE
+ #pass
+diff --git a/ld/testsuite/ld-i386/property-x86-ibt3a.d b/ld/testsuite/ld-i386/property-x86-ibt3a.d
+index 4bb35b00fb..0aedea1614 100644
+--- a/ld/testsuite/ld-i386/property-x86-ibt3a.d
++++ b/ld/testsuite/ld-i386/property-x86-ibt3a.d
+@@ -6,6 +6,5 @@
+ 
+ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+-  GNU                  0x00000018	NT_GNU_PROPERTY_TYPE_0
+-      Properties: x86 ISA used: i486, 586, SSE2, SSE3
+-	x86 ISA needed: 586, SSE, SSE3, SSE4_1
++  GNU                  0x0000000c	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
+diff --git a/ld/testsuite/ld-i386/property-x86-ibt3b.d b/ld/testsuite/ld-i386/property-x86-ibt3b.d
+index 418d58a8f7..bd69ac6478 100644
+--- a/ld/testsuite/ld-i386/property-x86-ibt3b.d
++++ b/ld/testsuite/ld-i386/property-x86-ibt3b.d
+@@ -6,6 +6,5 @@
+ 
+ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+-  GNU                  0x00000018	NT_GNU_PROPERTY_TYPE_0
+-      Properties: x86 ISA used: i486, 586, SSE2, SSE3
+-	x86 ISA needed: 586, SSE, SSE3, SSE4_1
++  GNU                  0x0000000c	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
+diff --git a/ld/testsuite/ld-i386/property-x86-shstk3a.d b/ld/testsuite/ld-i386/property-x86-shstk3a.d
+index e261038f60..76d2a39f2c 100644
+--- a/ld/testsuite/ld-i386/property-x86-shstk3a.d
++++ b/ld/testsuite/ld-i386/property-x86-shstk3a.d
+@@ -6,6 +6,5 @@
+ 
+ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+-  GNU                  0x00000018	NT_GNU_PROPERTY_TYPE_0
+-      Properties: x86 ISA used: i486, 586, SSE2, SSE3
+-	x86 ISA needed: 586, SSE, SSE3, SSE4_1
++  GNU                  0x0000000c	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
+diff --git a/ld/testsuite/ld-i386/property-x86-shstk3b.d b/ld/testsuite/ld-i386/property-x86-shstk3b.d
+index 25f3d2361e..e770ecffa5 100644
+--- a/ld/testsuite/ld-i386/property-x86-shstk3b.d
++++ b/ld/testsuite/ld-i386/property-x86-shstk3b.d
+@@ -6,6 +6,5 @@
+ 
+ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+-  GNU                  0x00000018	NT_GNU_PROPERTY_TYPE_0
+-      Properties: x86 ISA used: i486, 586, SSE2, SSE3
+-	x86 ISA needed: 586, SSE, SSE3, SSE4_1
++  GNU                  0x0000000c	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
+diff --git a/ld/testsuite/ld-x86-64/pr23486a-x32.d b/ld/testsuite/ld-x86-64/pr23486a-x32.d
+new file mode 100644
+index 0000000000..6d9fa68cdb
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/pr23486a-x32.d
+@@ -0,0 +1,10 @@
++#source: pr23486a.s
++#source: pr23486b.s
++#as: --x32
++#ld: -r -m elf32_x86_64
++#readelf: -n
++
++Displaying notes found in: .note.gnu.property
++  Owner                 Data size	Description
++  GNU                  0x0000000c	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: i486, 586
+diff --git a/ld/testsuite/ld-x86-64/pr23486a.d b/ld/testsuite/ld-x86-64/pr23486a.d
+new file mode 100644
+index 0000000000..dc2b7bf760
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/pr23486a.d
+@@ -0,0 +1,10 @@
++#source: pr23486a.s
++#source: pr23486b.s
++#as: --64 -defsym __64_bit__=1
++#ld: -r -m elf_x86_64
++#readelf: -n
++
++Displaying notes found in: .note.gnu.property
++  Owner                 Data size	Description
++  GNU                  0x00000010	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: i486, 586
+diff --git a/ld/testsuite/ld-x86-64/pr23486a.s b/ld/testsuite/ld-x86-64/pr23486a.s
+new file mode 100644
+index 0000000000..a07d0c7ced
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/pr23486a.s
+@@ -0,0 +1,30 @@
++	.section ".note.gnu.property", "a"
++.ifdef __64_bit__
++	.p2align 3
++.else
++	.p2align 2
++.endif
++	.long 1f - 0f		/* name length.  */
++	.long 4f - 1f		/* data length.  */
++	/* NT_GNU_PROPERTY_TYPE_0 */
++	.long 5			/* note type.  */
++0:
++	.asciz "GNU"		/* vendor name.  */
++1:
++.ifdef __64_bit__
++	.p2align 3
++.else
++	.p2align 2
++.endif
++	/* GNU_PROPERTY_X86_ISA_1_USED */
++	.long 0xc0000000	/* pr_type.  */
++	.long 3f - 2f		/* pr_datasz.  */
++2:
++	.long 0xa
++3:
++.ifdef __64_bit__
++	.p2align 3
++.else
++	.p2align 2
++.endif
++4:
+diff --git a/ld/testsuite/ld-x86-64/pr23486b-x32.d b/ld/testsuite/ld-x86-64/pr23486b-x32.d
+new file mode 100644
+index 0000000000..0445e69d82
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/pr23486b-x32.d
+@@ -0,0 +1,10 @@
++#source: pr23486b.s
++#source: pr23486a.s
++#as: --x32
++#ld: -r -m elf32_x86_64
++#readelf: -n
++
++Displaying notes found in: .note.gnu.property
++  Owner                 Data size	Description
++  GNU                  0x0000000c	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: i486, 586
+diff --git a/ld/testsuite/ld-x86-64/pr23486b.d b/ld/testsuite/ld-x86-64/pr23486b.d
+new file mode 100644
+index 0000000000..dc2b7bf760
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/pr23486b.d
+@@ -0,0 +1,10 @@
++#source: pr23486a.s
++#source: pr23486b.s
++#as: --64 -defsym __64_bit__=1
++#ld: -r -m elf_x86_64
++#readelf: -n
++
++Displaying notes found in: .note.gnu.property
++  Owner                 Data size	Description
++  GNU                  0x00000010	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: i486, 586
+diff --git a/ld/testsuite/ld-x86-64/pr23486b.s b/ld/testsuite/ld-x86-64/pr23486b.s
+new file mode 100644
+index 0000000000..c5167eeb65
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/pr23486b.s
+@@ -0,0 +1,30 @@
++	.section ".note.gnu.property", "a"
++.ifdef __64_bit__
++	.p2align 3
++.else
++	.p2align 2
++.endif
++	.long 1f - 0f		/* name length.  */
++	.long 4f - 1f		/* data length.  */
++	/* NT_GNU_PROPERTY_TYPE_0 */
++	.long 5			/* note type.  */
++0:
++	.asciz "GNU"		/* vendor name.  */
++1:
++.ifdef __64_bit__
++	.p2align 3
++.else
++	.p2align 2
++.endif
++	/* GNU_PROPERTY_X86_ISA_1_NEEDED */
++	.long 0xc0000001	/* pr_type.  */
++	.long 3f - 2f		/* pr_datasz.  */
++2:
++	.long 0x3
++3:
++.ifdef __64_bit__
++	.p2align 3
++.else
++	.p2align 2
++.endif
++4:
+diff --git a/ld/testsuite/ld-x86-64/property-3.r b/ld/testsuite/ld-x86-64/property-3.r
+index 0ed91f5922..d03203c1e5 100644
+--- a/ld/testsuite/ld-x86-64/property-3.r
++++ b/ld/testsuite/ld-x86-64/property-3.r
+@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+   GNU                  0x[0-9a-f]+	NT_GNU_PROPERTY_TYPE_0
+       Properties: stack size: 0x800000
+-	x86 ISA used: 586, SSE
+ 	x86 ISA needed: i486, 586
+ #pass
+diff --git a/ld/testsuite/ld-x86-64/property-4.r b/ld/testsuite/ld-x86-64/property-4.r
+index cb2bc15d9a..da295eb6c7 100644
+--- a/ld/testsuite/ld-x86-64/property-4.r
++++ b/ld/testsuite/ld-x86-64/property-4.r
+@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+   GNU                  0x[0-9a-f]+	NT_GNU_PROPERTY_TYPE_0
+       Properties: stack size: 0x800000
+-	x86 ISA used: i486, 586, SSE
+ 	x86 ISA needed: i486, 586, SSE
+ #pass
+diff --git a/ld/testsuite/ld-x86-64/property-5.r b/ld/testsuite/ld-x86-64/property-5.r
+index 552965058c..e4141594b3 100644
+--- a/ld/testsuite/ld-x86-64/property-5.r
++++ b/ld/testsuite/ld-x86-64/property-5.r
+@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+   GNU                  0x[0-9a-f]+	NT_GNU_PROPERTY_TYPE_0
+       Properties: stack size: 0x900000
+-	x86 ISA used: i486, 586, SSE
+ 	x86 ISA needed: i486, 586, SSE
+ #pass
+diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d b/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
+index 011426f5a4..4cec728dc7 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
++++ b/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
+@@ -6,6 +6,5 @@
+ 
+ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+-  GNU                  0x00000018	NT_GNU_PROPERTY_TYPE_0
+-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+-	x86 ISA needed: i486, 586, SSE2, SSE3
++  GNU                  0x0000000c	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3a.d b/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
+index 1b4229a037..a8df49a351 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
++++ b/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
+@@ -6,6 +6,5 @@
+ 
+ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+-  GNU                  0x00000020	NT_GNU_PROPERTY_TYPE_0
+-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+-	x86 ISA needed: i486, 586, SSE2, SSE3
++  GNU                  0x00000010	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d b/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
+index 290ed6abf1..c112626711 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
++++ b/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
+@@ -6,6 +6,5 @@
+ 
+ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+-  GNU                  0x00000018	NT_GNU_PROPERTY_TYPE_0
+-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+-	x86 ISA needed: i486, 586, SSE2, SSE3
++  GNU                  0x0000000c	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3b.d b/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
+index 1142e03272..f10dffdc2c 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
++++ b/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
+@@ -6,6 +6,5 @@
+ 
+ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+-  GNU                  0x00000020	NT_GNU_PROPERTY_TYPE_0
+-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+-	x86 ISA needed: i486, 586, SSE2, SSE3
++  GNU                  0x00000010	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d b/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
+index 819542d181..0147a3c7b6 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
++++ b/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
+@@ -6,6 +6,5 @@
+ 
+ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+-  GNU                  0x00000018	NT_GNU_PROPERTY_TYPE_0
+-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+-	x86 ISA needed: i486, 586, SSE2, SSE3
++  GNU                  0x0000000c	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3a.d b/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
+index 4c5d0e0a18..1f8c2dc929 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
++++ b/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
+@@ -6,6 +6,5 @@
+ 
+ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+-  GNU                  0x00000020	NT_GNU_PROPERTY_TYPE_0
+-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+-	x86 ISA needed: i486, 586, SSE2, SSE3
++  GNU                  0x00000010	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d b/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
+index ba181e0bc5..7ca2539ca5 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
++++ b/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
+@@ -6,6 +6,5 @@
+ 
+ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+-  GNU                  0x00000018	NT_GNU_PROPERTY_TYPE_0
+-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+-	x86 ISA needed: i486, 586, SSE2, SSE3
++  GNU                  0x0000000c	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3b.d b/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
+index 5216f385dd..f66a40e449 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
++++ b/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
+@@ -6,6 +6,5 @@
+ 
+ Displaying notes found in: .note.gnu.property
+   Owner                 Data size	Description
+-  GNU                  0x00000020	NT_GNU_PROPERTY_TYPE_0
+-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+-	x86 ISA needed: i486, 586, SSE2, SSE3
++  GNU                  0x00000010	NT_GNU_PROPERTY_TYPE_0
++      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
+index 6edb9e86f4..ae21e554ad 100644
+--- a/ld/testsuite/ld-x86-64/x86-64.exp
++++ b/ld/testsuite/ld-x86-64/x86-64.exp
+@@ -403,6 +403,10 @@ run_dump_test "pr23372a"
+ run_dump_test "pr23372a-x32"
+ run_dump_test "pr23372b"
+ run_dump_test "pr23372b-x32"
++run_dump_test "pr23486a"
++run_dump_test "pr23486a-x32"
++run_dump_test "pr23486b"
++run_dump_test "pr23486b-x32"
+ 
+ if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} {
+     return
+-- 
+2.20.1
+
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/always-search-rpath.patch b/nixpkgs/pkgs/development/tools/misc/binutils/always-search-rpath.patch
new file mode 100644
index 000000000000..2e9956e6b6e4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/always-search-rpath.patch
@@ -0,0 +1,14 @@
+diff --git a/ld/genscripts.sh b/ld/genscripts.sh
+index b6940d376d..0feb1adfd0 100755
+--- a/ld/genscripts.sh
++++ b/ld/genscripts.sh
+@@ -125,6 +125,9 @@ if test "x$NATIVE" = "xyes" ; then
+   USE_LIBPATH=yes
+ fi
+ 
++# TODO: why is this needed?
++USE_LIBPATH=yes
++
+ # Set the library search path, for libraries named by -lfoo.
+ # If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used.
+ # Otherwise, the default is set here.
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/build-components-separately.patch b/nixpkgs/pkgs/development/tools/misc/binutils/build-components-separately.patch
new file mode 100644
index 000000000000..d3cd0d2131cc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/build-components-separately.patch
@@ -0,0 +1,178 @@
+From bc09a9236f67e710d545ac11bcdac7b55dbcc1a0 Mon Sep 17 00:00:00 2001
+From: John Ericson <John.Ericson@Obsidian.Systems>
+Date: Thu, 12 Oct 2017 11:16:57 -0400
+Subject: [PATCH] Build components separately
+
+---
+ bfd/configure.ac     | 18 +++---------------
+ opcodes/Makefile.am  | 17 +++++++++++++----
+ opcodes/configure.ac | 45 ++++++---------------------------------------
+ 3 files changed, 22 insertions(+), 58 deletions(-)
+
+diff --git a/bfd/configure.ac b/bfd/configure.ac
+index 9a183c1628..8728837384 100644
+--- a/bfd/configure.ac
++++ b/bfd/configure.ac
+@@ -241,31 +241,19 @@ AC_CACHE_CHECK(linker --as-needed support, bfd_cv_ld_as_needed,
+ 
+ LT_LIB_M
+ 
+-# When building a shared libbfd, link against the pic version of libiberty
+-# so that apps that use libbfd won't need libiberty just to satisfy any
+-# libbfd references.
+-# We can't do that if a pic libiberty is unavailable since including non-pic
+-# code would insert text relocations into libbfd.
+ SHARED_LIBADD=
+-SHARED_LDFLAGS=
++SHARED_LDFLAGS=-liberty
+ if test "$enable_shared" = "yes"; then
+-changequote(,)dnl
+-  x=`sed -n -e 's/^[ 	]*PICFLAG[ 	]*=[ 	]*//p' < ../libiberty/Makefile | sed -n '$p'`
+-changequote([,])dnl
+-  if test -n "$x"; then
+-    SHARED_LIBADD="-L`pwd`/../libiberty/pic -liberty"
+-  fi
+-
+ # More hacks to build DLLs on Windows.
+   case "${host}" in
+   *-*-cygwin*)
+     SHARED_LDFLAGS="-no-undefined"
+-    SHARED_LIBADD="-L`pwd`/../libiberty -liberty -L`pwd`/../intl -lintl -lcygwin -lkernel32"
++    SHARED_LIBADD="-liberty -lintl -lcygwin -lkernel32"
+   ;;
+ 
+   # Hack to build or1k-src on OSX
+   or1k*-*-darwin*)
+-    SHARED_LIBADD="-L`pwd`/../libiberty/pic -L`pwd`/../intl -liberty -lintl"
++    SHARED_LIBADD="-liberty -lintl"
+   ;;
+   esac
+ 
+diff --git a/opcodes/Makefile.am b/opcodes/Makefile.am
+index 925e7ff651..47b395c195 100644
+--- a/opcodes/Makefile.am
++++ b/opcodes/Makefile.am
+@@ -52,7 +52,7 @@ libopcodes_la_LDFLAGS += -rpath $(rpath_bfdlibdir)
+ endif
+ 
+ # This is where bfd.h lives.
+-BFD_H = ../bfd/bfd.h
++BFD_H = $(BFDDIR)/bfd.h
+ 
+ BUILD_LIBS = @BUILD_LIBS@
+ BUILD_LIB_DEPS = @BUILD_LIB_DEPS@
+@@ -303,7 +303,7 @@ OFILES = @BFD_MACHINES@
+ # development.sh is used to determine -Werror default.
+ CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/development.sh
+ 
+-AM_CPPFLAGS = -I. -I$(srcdir) -I../bfd -I$(INCDIR) -I$(BFDDIR) @HDEFINES@ @INCINTL@
++AM_CPPFLAGS = -I. -I$(srcdir) -I$(INCDIR) -I$(BFDDIR) @HDEFINES@ @INCINTL@
+ 
+ disassemble.lo: disassemble.c
+ if am__fastdepCC
+@@ -324,12 +324,21 @@ libopcodes_la_SOURCES =  dis-buf.c disassemble.c dis-init.c
+ # old version of libbfd, or to pick up libbfd for the wrong architecture
+ # if host != build. So for building with shared libraries we use a
+ # hardcoded path to libbfd.so instead of relying on the entries in libbfd.la.
+-libopcodes_la_DEPENDENCIES = $(OFILES) @SHARED_DEPENDENCIES@
++libopcodes_la_DEPENDENCIES = $(OFILES) @SHARED_DEPENDENCIES@ libtool-soversion
+ libopcodes_la_LIBADD = $(OFILES) @SHARED_LIBADD@
+-libopcodes_la_LDFLAGS += -release `cat ../bfd/libtool-soversion` @SHARED_LDFLAGS@
++libopcodes_la_LDFLAGS += -release `cat libtool-soversion` @SHARED_LDFLAGS@
+ # Allow dependency tracking to work on all the source files.
+ EXTRA_libopcodes_la_SOURCES = $(LIBOPCODES_CFILES)
+ 
++libtool-soversion:
++	@echo "creating $@"
++	bfd_soversion="$(VERSION)" ;\
++	. $(BFDDIR)/development.sh ;\
++	if test "$$development" = true ; then \
++	  bfd_soversion="$(VERSION).$${bfd_version_date}" ;\
++	fi ;\
++	echo "$${bfd_soversion}" > $@
++
+ # libtool will build .libs/libopcodes.a.  We create libopcodes.a in
+ # the build directory so that we don't have to convert all the
+ # programs that use libopcodes.a simultaneously.  This is a hack which
+diff --git a/opcodes/configure.ac b/opcodes/configure.ac
+index b9f5eb8a4f..ef2c2152b7 100644
+--- a/opcodes/configure.ac
++++ b/opcodes/configure.ac
+@@ -89,6 +89,7 @@ AC_PROG_INSTALL
+ 
+ AC_CHECK_HEADERS(string.h strings.h stdlib.h limits.h)
+ ACX_HEADER_STRING
++GCC_HEADER_STDINT(bfd_stdint.h)
+ 
+ AC_CHECK_DECLS([basename, stpcpy])
+ 
+@@ -134,61 +135,27 @@ AC_CACHE_CHECK(linker --as-needed support, bfd_cv_ld_as_needed,
+ 
+ LT_LIB_M
+ 
+-#Libs for generator progs
+-if test "x$cross_compiling" = "xno"; then
+-  BUILD_LIBS=../libiberty/libiberty.a
+-  BUILD_LIB_DEPS=$BUILD_LIBS
+-else
+-  # if cross-compiling, assume that the system provides -liberty
+-  # and that the version is compatible with new headers.
+-  BUILD_LIBS=-liberty
+-  BUILD_LIB_DEPS=
+-fi
+-BUILD_LIBS="$BUILD_LIBS $LIBINTL"
+-BUILD_LIB_DEPS="$BUILD_LIB_DEPS $LIBINTL_DEP"
++BUILD_LIBS="-liberty $LIBINTL"
++BUILD_LIB_DEPS="$LIBINTL_DEP"
+ 
+ AC_SUBST(BUILD_LIBS)
+ AC_SUBST(BUILD_LIB_DEPS)
+ 
+ # Horrible hacks to build DLLs on Windows and a shared library elsewhere.
+ SHARED_LDFLAGS=
+-SHARED_LIBADD=
++SHARED_LIBADD=-liberty
+ SHARED_DEPENDENCIES=
+ if test "$enable_shared" = "yes"; then
+-# When building a shared libopcodes, link against the pic version of libiberty
+-# so that apps that use libopcodes won't need libiberty just to satisfy any
+-# libopcodes references.
+-# We can't do that if a pic libiberty is unavailable since including non-pic
+-# code would insert text relocations into libopcodes.
+ # Note that linking against libbfd as we do here, which is itself linked
+ # against libiberty, may not satisfy all the libopcodes libiberty references
+ # since libbfd may not pull in the entirety of libiberty.
+-changequote(,)dnl
+-  x=`sed -n -e 's/^[ 	]*PICFLAG[ 	]*=[ 	]*//p' < ../libiberty/Makefile | sed -n '$p'`
+-changequote([,])dnl
+-  if test -n "$x"; then
+-    SHARED_LIBADD="-L`pwd`/../libiberty/pic -liberty"
+-  fi
+-
+   case "${host}" in
+     *-*-cygwin*)
+       SHARED_LDFLAGS="-no-undefined"
+-      SHARED_LIBADD="-L`pwd`/../bfd -lbfd -L`pwd`/../libiberty -liberty -L`pwd`/../intl -lintl -lcygwin"
++      SHARED_LIBADD="-lbfd -liberty -lintl -lcygwin"
+       ;;
+-   *-*-darwin*)
+-     SHARED_LIBADD="-Wl,`pwd`/../bfd/.libs/libbfd.dylib ${SHARED_LIBADD}"
+-     SHARED_DEPENDENCIES="../bfd/libbfd.la"
+-     ;;
+     *)
+-      case "$host_vendor" in
+-        hp)
+-          SHARED_LIBADD="-Wl,`pwd`/../bfd/.libs/libbfd.sl ${SHARED_LIBADD}"
+-	  ;;
+-	*)
+-          SHARED_LIBADD="-Wl,`pwd`/../bfd/.libs/libbfd.so ${SHARED_LIBADD}"
+-	  ;;
+-      esac
+-      SHARED_DEPENDENCIES="../bfd/libbfd.la"
++      SHARED_LIBADD="-lbfd ${SHARED_LIBADD}"
+       ;;
+   esac
+ 
+-- 
+2.14.2
+
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/default.nix b/nixpkgs/pkgs/development/tools/misc/binutils/default.nix
new file mode 100644
index 000000000000..1edd2944eab9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/default.nix
@@ -0,0 +1,156 @@
+{ stdenv, lib, buildPackages
+, fetchurl, zlib, autoreconfHook, gettext
+# Enabling all targets increases output size to a multiple.
+, withAllTargets ? false, libbfd, libopcodes
+, enableShared ? true
+, noSysDirs
+, gold ? !stdenv.buildPlatform.isDarwin || stdenv.hostPlatform == stdenv.targetPlatform
+, bison ? null
+, fetchpatch
+}:
+
+let
+  reuseLibs = enableShared && withAllTargets;
+
+  # Remove gold-symbol-visibility patch when updating, the proper fix
+  # is now upstream.
+  # https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commitdiff;h=330b90b5ffbbc20c5de6ae6c7f60c40fab2e7a4f;hp=99181ccac0fc7d82e7dabb05dc7466e91f1645d3
+  version = "2.31.1";
+  basename = "binutils-${version}";
+  # The targetPrefix prepended to binary names to allow multiple binuntils on the
+  # PATH to both be usable.
+  targetPrefix = lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform)
+                  "${stdenv.targetPlatform.config}-";
+in
+
+stdenv.mkDerivation rec {
+  name = targetPrefix + basename;
+
+  # HACK to ensure that we preserve source from bootstrap binutils to not rebuild LLVM
+  src = stdenv.__bootPackages.binutils-unwrapped.src or (fetchurl {
+    url = "mirror://gnu/binutils/${basename}.tar.bz2";
+    sha256 = "1l34hn1zkmhr1wcrgf0d4z7r3najxnw3cx2y2fk7v55zjlk3ik7z";
+  });
+
+  patches = [
+    # Make binutils output deterministic by default.
+    ./deterministic.patch
+
+    # Bfd looks in BINDIR/../lib for some plugins that don't
+    # exist. This is pointless (since users can't install plugins
+    # there) and causes a cycle between the lib and bin outputs, so
+    # get rid of it.
+    ./no-plugins.patch
+
+    # Help bfd choose between elf32-littlearm, elf32-littlearm-symbian, and
+    # elf32-littlearm-vxworks in favor of the first.
+    # https://github.com/NixOS/nixpkgs/pull/30484#issuecomment-345472766
+    ./disambiguate-arm-targets.patch
+
+    # For some reason bfd ld doesn't search DT_RPATH when cross-compiling. It's
+    # not clear why this behavior was decided upon but it has the unfortunate
+    # consequence that the linker will fail to find transitive dependencies of
+    # shared objects when cross-compiling. Consequently, we are forced to
+    # override this behavior, forcing ld to search DT_RPATH even when
+    # cross-compiling.
+    ./always-search-rpath.patch
+
+    # https://sourceware.org/bugzilla/show_bug.cgi?id=22868
+    ./gold-symbol-visibility.patch
+
+    # https://sourceware.org/bugzilla/show_bug.cgi?id=23428
+    # un-break features so linking against musl doesn't produce crash-only binaries
+    ./0001-x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch
+    ./0001-x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
+    ./0001-x86-Properly-add-X86_ISA_1_NEEDED-property.patch
+  ] ++ lib.optional stdenv.targetPlatform.isiOS ./support-ios.patch;
+
+  outputs = [ "out" "info" "man" ];
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [
+    bison
+  ] ++ lib.optionals stdenv.targetPlatform.isiOS [
+    autoreconfHook
+  ];
+  buildInputs = [ zlib gettext ];
+
+  inherit noSysDirs;
+
+  preConfigure = ''
+    # Clear the default library search path.
+    if test "$noSysDirs" = "1"; then
+        echo 'NATIVE_LIB_DIRS=' >> ld/configure.tgt
+    fi
+
+    # Use symlinks instead of hard links to save space ("strip" in the
+    # fixup phase strips each hard link separately).
+    for i in binutils/Makefile.in gas/Makefile.in ld/Makefile.in gold/Makefile.in; do
+        sed -i "$i" -e 's|ln |ln -s |'
+    done
+  '';
+
+  # As binutils takes part in the stdenv building, we don't want references
+  # to the bootstrap-tools libgcc (as uses to happen on arm/mips)
+  NIX_CFLAGS_COMPILE = if stdenv.hostPlatform.isDarwin
+    then "-Wno-string-plus-int -Wno-deprecated-declarations"
+    else "-static-libgcc";
+
+  hardeningDisable = [ "format" "pie" ];
+
+  # TODO(@Ericson2314): Always pass "--target" and always targetPrefix.
+  configurePlatforms = [ "build" "host" ] ++ lib.optional (stdenv.targetPlatform != stdenv.hostPlatform) "target";
+
+  configureFlags =
+    (if enableShared then [ "--enable-shared" "--disable-static" ]
+                     else [ "--disable-shared" "--enable-static" ])
+  ++ lib.optional withAllTargets "--enable-targets=all"
+  ++ [
+    "--enable-64-bit-bfd"
+    "--with-system-zlib"
+
+    "--enable-deterministic-archives"
+    "--disable-werror"
+    "--enable-fix-loongson2f-nop"
+
+    # Turn on --enable-new-dtags by default to make the linker set
+    # RUNPATH instead of RPATH on binaries.  This is important because
+    # RUNPATH can be overriden using LD_LIBRARY_PATH at runtime.
+    "--enable-new-dtags"
+  ] ++ lib.optionals gold [ "--enable-gold" "--enable-plugins" ];
+
+  doCheck = false; # fails
+
+  postFixup = lib.optionalString reuseLibs ''
+    rm "$out"/lib/lib{bfd,opcodes}-${version}.so
+    ln -s '${lib.getLib libbfd}/lib/libbfd-${version}.so' "$out/lib/"
+    ln -s '${lib.getLib libopcodes}/lib/libopcodes-${version}.so' "$out/lib/"
+  '';
+
+  # else fails with "./sanity.sh: line 36: $out/bin/size: not found"
+  doInstallCheck = stdenv.buildPlatform == stdenv.hostPlatform && stdenv.hostPlatform == stdenv.targetPlatform;
+
+  enableParallelBuilding = true;
+
+  passthru = {
+    inherit targetPrefix version;
+  };
+
+  meta = with lib; {
+    description = "Tools for manipulating binaries (linker, assembler, etc.)";
+    longDescription = ''
+      The GNU Binutils are a collection of binary tools.  The main
+      ones are `ld' (the GNU linker) and `as' (the GNU assembler).
+      They also include the BFD (Binary File Descriptor) library,
+      `gprof', `nm', `strip', etc.
+    '';
+    homepage = https://www.gnu.org/software/binutils/;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ericson2314 ];
+    platforms = platforms.unix;
+
+    /* Give binutils a lower priority than gcc-wrapper to prevent a
+       collision due to the ld/as wrappers/symlinks in the latter. */
+    priority = 10;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/deterministic.patch b/nixpkgs/pkgs/development/tools/misc/binutils/deterministic.patch
new file mode 100644
index 000000000000..736e0aca6ce1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/deterministic.patch
@@ -0,0 +1,12 @@
+diff -ur orig/binutils-2.23.1/ld/ldlang.c binutils-2.23.1/ld/ldlang.c
+--- orig/ld/ldlang.c
++++ new/ld/ldlang.c
+@@ -3095,6 +3095,8 @@
+                           ldfile_output_machine))
+     einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
+ 
++  link_info.output_bfd->flags |= BFD_DETERMINISTIC_OUTPUT;
++
+   link_info.hash = bfd_link_hash_table_create (link_info.output_bfd);
+   if (link_info.hash == NULL)
+     einfo (_("%P%F: can not create hash table: %E\n"));
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/disambiguate-arm-targets.patch b/nixpkgs/pkgs/development/tools/misc/binutils/disambiguate-arm-targets.patch
new file mode 100644
index 000000000000..abbfa73da05d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/disambiguate-arm-targets.patch
@@ -0,0 +1,23 @@
+diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
+index 9f956d3..f5b61f1 100644
+--- a/bfd/elf32-arm.c
++++ b/bfd/elf32-arm.c
+@@ -19585,7 +19585,10 @@ elf32_arm_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker)
+ #undef  ELF_MAXPAGESIZE
+ #define ELF_MAXPAGESIZE			0x1000
+ 
++/* Prioritize elf32-*arm (priority 1) over elf32-*arm-vxworks (priority 2) */
++#define elf_match_priority 2
+ #include "elf32-target.h"
++#undef  elf_match_priority
+ 
+ 
+ /* Merge backend specific data from an object file to the output
+@@ -19974,4 +19977,7 @@ elf32_arm_symbian_plt_sym_val (bfd_vma i, const asection *plt,
+ #undef  ELF_MAXPAGESIZE
+ #define ELF_MAXPAGESIZE			0x8000
+ 
++/* Prioritize elf32-*arm (priority 1) over elf32-*arm-symbian (priority 2) */
++#define elf_match_priority 2
+ #include "elf32-target.h"
++#undef  elf_match_priority
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/gold-symbol-visibility.patch b/nixpkgs/pkgs/development/tools/misc/binutils/gold-symbol-visibility.patch
new file mode 100644
index 000000000000..0fb05a482d1c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/gold-symbol-visibility.patch
@@ -0,0 +1,79 @@
+commit 8564af037f5c4c6d2744a89497691359205b2bbc
+Author: Shea Levy <shea@shealevy.com>
+Date:   Mon Mar 19 10:52:40 2018 -0400
+
+    Revert "Allow multiply-defined absolute symbols when they have the same value."
+    
+    This reverts commit 5dc824ed42cd173c1525f5abc76f4091f11a4dbc.
+
+diff --git a/gold/ChangeLog-2017 b/gold/ChangeLog-2017
+index b2a47710b5..d7ca1b48c0 100644
+--- a/gold/ChangeLog-2017
++++ b/gold/ChangeLog-2017
+@@ -114,11 +114,6 @@
+ 	(localedir): Define as @localedir@.
+ 	(gnulocaledir, gettextsrcdir): Use @datarootdir@.
+ 
+-2017-11-28  Cary Coutant  <ccoutant@gmail.com>
+-
+-	* resolve.cc (Symbol_table::resolve): Allow multiply-defined absolute
+-	symbols when they have the same value.
+-
+ 2017-11-28  Cary Coutant  <ccoutant@gmail.com>
+ 
+ 	* object.h (class Sized_relobj_file): Remove discarded_eh_frame_shndx_.
+diff --git a/gold/resolve.cc b/gold/resolve.cc
+index 4a5784cf8b..803576bfed 100644
+--- a/gold/resolve.cc
++++ b/gold/resolve.cc
+@@ -247,28 +247,18 @@ Symbol_table::resolve(Sized_symbol<size>* to,
+ 		      Object* object, const char* version,
+ 		      bool is_default_version)
+ {
+-  bool to_is_ordinary;
+-  const unsigned int to_shndx = to->shndx(&to_is_ordinary);
+-
+   // It's possible for a symbol to be defined in an object file
+   // using .symver to give it a version, and for there to also be
+   // a linker script giving that symbol the same version.  We
+   // don't want to give a multiple-definition error for this
+   // harmless redefinition.
++  bool to_is_ordinary;
+   if (to->source() == Symbol::FROM_OBJECT
+       && to->object() == object
+-      && to->is_defined()
+       && is_ordinary
++      && to->is_defined()
++      && to->shndx(&to_is_ordinary) == st_shndx
+       && to_is_ordinary
+-      && to_shndx == st_shndx
+-      && to->value() == sym.get_st_value())
+-    return;
+-
+-  // Likewise for an absolute symbol defined twice with the same value.
+-  if (!is_ordinary
+-      && st_shndx == elfcpp::SHN_ABS
+-      && !to_is_ordinary
+-      && to_shndx == elfcpp::SHN_ABS
+       && to->value() == sym.get_st_value())
+     return;
+ 
+@@ -360,8 +350,8 @@ Symbol_table::resolve(Sized_symbol<size>* to,
+       && (sym.get_st_bind() == elfcpp::STB_WEAK
+ 	  || to->binding() == elfcpp::STB_WEAK)
+       && orig_st_shndx != elfcpp::SHN_UNDEF
++      && to->shndx(&to_is_ordinary) != elfcpp::SHN_UNDEF
+       && to_is_ordinary
+-      && to_shndx != elfcpp::SHN_UNDEF
+       && sym.get_st_size() != 0    // Ignore weird 0-sized symbols.
+       && to->symsize() != 0
+       && (sym.get_st_type() != to->type()
+@@ -372,7 +362,7 @@ Symbol_table::resolve(Sized_symbol<size>* to,
+     {
+       Symbol_location fromloc
+           = { object, orig_st_shndx, static_cast<off_t>(sym.get_st_value()) };
+-      Symbol_location toloc = { to->object(), to_shndx,
++      Symbol_location toloc = { to->object(), to->shndx(&to_is_ordinary),
+ 				static_cast<off_t>(to->value()) };
+       this->candidate_odr_violations_[to->name()].insert(fromloc);
+       this->candidate_odr_violations_[to->name()].insert(toloc);
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/no-plugins.patch b/nixpkgs/pkgs/development/tools/misc/binutils/no-plugins.patch
new file mode 100644
index 000000000000..9624b7976b70
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/no-plugins.patch
@@ -0,0 +1,19 @@
+diff -ru binutils-2.27-orig/bfd/plugin.c binutils-2.27/bfd/plugin.c
+--- binutils-2.27-orig/bfd/plugin.c	2016-10-14 17:46:30.791315555 +0200
++++ binutils-2.27/bfd/plugin.c	2016-10-14 17:46:38.583298765 +0200
+@@ -333,6 +333,7 @@
+   if (plugin_program_name == NULL)
+     return found;
+ 
++#if 0
+   plugin_dir = concat (BINDIR, "/../lib/bfd-plugins", NULL);
+   p = make_relative_prefix (plugin_program_name,
+ 			    BINDIR,
+@@ -364,6 +365,7 @@
+   free (p);
+   if (d)
+     closedir (d);
++#endif
+ 
+   return found;
+ }
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/support-ios.patch b/nixpkgs/pkgs/development/tools/misc/binutils/support-ios.patch
new file mode 100644
index 000000000000..74e56d130ed5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/support-ios.patch
@@ -0,0 +1,168 @@
+diff --git a/bfd/config.bfd b/bfd/config.bfd
+index f04a993f06..1e24a9d030 100644
+--- a/bfd/config.bfd
++++ b/bfd/config.bfd
+@@ -238,7 +238,7 @@ case "${targ}" in
+ 
+ # START OF targmatch.h
+ #ifdef BFD64
+-  aarch64-*-darwin*)
++  aarch64-*-darwin* | aarch64-*-ios*)
+     targ_defvec=aarch64_mach_o_vec
+     targ_selvecs="arm_mach_o_vec mach_o_le_vec mach_o_be_vec mach_o_fat_vec"
+     targ_archs="$targ_archs bfd_i386_arch bfd_powerpc_arch bfd_rs6000_arch"
+@@ -358,7 +358,7 @@ case "${targ}" in
+     targ_selvecs=arc_elf32_be_vec
+     ;;
+ 
+-  arm-*-darwin*)
++  arm-*-darwin* | arm-*-ios*)
+     targ_defvec=arm_mach_o_vec
+     targ_selvecs="mach_o_le_vec mach_o_be_vec mach_o_fat_vec"
+     targ_archs="$targ_archs bfd_i386_arch bfd_powerpc_arch bfd_rs6000_arch"
+@@ -678,7 +678,7 @@ case "${targ}" in
+   i[3-7]86-*-aix*)
+     targ_defvec=i386_coff_vec
+     ;;
+-  i[3-7]86-*-darwin* | i[3-7]86-*-macos10* | i[3-7]86-*-rhapsody*)
++  i[3-7]86-*-darwin* | i[3-7]86-*-ios* | i[3-7]86-*-macos10* | i[3-7]86-*-rhapsody*)
+     targ_defvec=i386_mach_o_vec
+     targ_selvecs="mach_o_le_vec mach_o_be_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec"
+     targ64_selvecs=x86_64_mach_o_vec
+@@ -762,7 +762,7 @@ case "${targ}" in
+     targ_defvec=x86_64_elf64_cloudabi_vec
+     want64=true
+     ;;
+-  x86_64-*-darwin*)
++  x86_64-*-darwin* | x86_64-*-ios*)
+     targ_defvec=x86_64_mach_o_vec
+     targ_selvecs="i386_mach_o_vec mach_o_le_vec mach_o_be_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec"
+     targ_archs="$targ_archs bfd_powerpc_arch bfd_rs6000_arch"
+@@ -1402,7 +1402,7 @@ case "${targ}" in
+     targ_selvecs="powerpc_elf32_le_vec powerpc_boot_vec"
+     targ64_selvecs="powerpc_elf64_vec powerpc_elf64_le_vec"
+     ;;
+-  powerpc-*-darwin* | powerpc-*-macos10* | powerpc-*-rhapsody*)
++  powerpc-*-darwin* | powerpc-*-ios* | powerpc-*-macos10* | powerpc-*-rhapsody*)
+     targ_defvec=mach_o_be_vec
+     targ_selvecs="mach_o_be_vec mach_o_le_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec"
+     targ_archs="$targ_archs bfd_i386_arch"
+diff --git a/configure.ac b/configure.ac
+index aae94501e4..2cceb4dad4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -510,7 +510,7 @@ if test x$enable_libgomp = x ; then
+ 	;;
+     *-*-solaris2* | *-*-hpux11*)
+ 	;;
+-    *-*-darwin* | *-*-aix*)
++    *-*-darwin* | *-*-ios* | *-*-aix*)
+ 	;;
+     nvptx*-*-*)
+ 	;;
+@@ -700,13 +700,13 @@ esac
+ 
+ # Disable libffi for some systems.
+ case "${target}" in
+-  powerpc-*-darwin*)
++  powerpc-*-darwin* | powerpc-*-ios*)
+     ;;
+-  i[[3456789]]86-*-darwin*)
++  i[[3456789]]86-*-darwin* | i[[3456789]]86-*-ios*)
+     ;;
+-  x86_64-*-darwin[[912]]*)
++  x86_64-*-darwin[[912]]* | x86_64-*-ios[[912]]*)
+     ;;
+-  *-*-darwin*)
++  *-*-darwin* | *-*-ios*)
+     noconfigdirs="$noconfigdirs target-libffi"
+     ;;
+   *-*-netware*)
+@@ -788,7 +788,7 @@ esac
+ # Disable the go frontend on systems where it is known to not work. Please keep
+ # this in sync with contrib/config-list.mk.
+ case "${target}" in
+-*-*-darwin* | *-*-cygwin* | *-*-mingw*)
++*-*-darwin* | *-*-ios* | *-*-cygwin* | *-*-mingw*)
+     unsupported_languages="$unsupported_languages go"
+     ;;
+ esac
+@@ -797,7 +797,7 @@ esac
+ # For testing, you can easily override this with --enable-libgo.
+ if test x$enable_libgo = x; then
+     case "${target}" in
+-    *-*-darwin*)
++    *-*-darwin* | *-*-ios*)
+ 	# PR 46986
+ 	noconfigdirs="$noconfigdirs target-libgo"
+ 	;;
+@@ -916,27 +916,27 @@ esac
+ case "${target}" in
+   *-*-chorusos)
+     ;;
+-  aarch64-*-darwin*)
++  aarch64-*-darwin* | aarch64-*-ios*)
+     noconfigdirs="$noconfigdirs ld gas gdb gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  arm-*-darwin*)
++  arm-*-darwin* | arm-*-ios*)
+     noconfigdirs="$noconfigdirs ld gas gdb gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  powerpc-*-darwin*)
++  powerpc-*-darwin* | powerpc-*-ios*)
+     noconfigdirs="$noconfigdirs ld gas gdb gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  i[[3456789]]86-*-darwin*)
++  i[[3456789]]86-*-darwin* | i[[3456789]]86-*-ios*)
+     noconfigdirs="$noconfigdirs ld gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  x86_64-*-darwin[[912]]*)
++  x86_64-*-darwin[[912]]* | x86_64-*-ios[[912]]*)
+     noconfigdirs="$noconfigdirs ld gas gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  *-*-darwin*)
++  *-*-darwin* | *-*-ios*)
+     noconfigdirs="$noconfigdirs ld gas gdb gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+@@ -1226,7 +1226,7 @@ case "${host}" in
+   hppa*-*)	
+     host_makefile_frag="config/mh-pa"
+     ;;
+-  *-*-darwin*)
++  *-*-darwin* | *-*-ios*)
+     host_makefile_frag="config/mh-darwin"
+     ;;
+   powerpc-*-aix*)
+@@ -1697,7 +1697,7 @@ ACX_ELF_TARGET_IFELSE([# ELF platforms build the lto-plugin always.
+   build_lto_plugin=yes
+ ],[if test x"$default_enable_lto" = x"yes" ; then
+     case $target in
+-      *-apple-darwin[[912]]* | *-cygwin* | *-mingw* | *djgpp*) ;;
++      *-apple-darwin[[912]]* | *-apple-ios[[912]]* | *-cygwin* | *-mingw* | *djgpp*) ;;
+       # On other non-ELF platforms, LTO has yet to be validated.
+       *) enable_lto=no ;;
+     esac
+@@ -1708,7 +1708,7 @@ ACX_ELF_TARGET_IFELSE([# ELF platforms build the lto-plugin always.
+   # warn during gcc/ subconfigure; unless you're bootstrapping with
+   # -flto it won't be needed until after installation anyway.
+     case $target in
+-      *-cygwin* | *-mingw* | *-apple-darwin* | *djgpp*) ;;
++      *-cygwin* | *-mingw* | *-apple-darwin* | *-apple-ios* | *djgpp*) ;;
+       *) if test x"$enable_lto" = x"yes"; then
+ 	AC_MSG_ERROR([LTO support is not enabled for this target.])
+         fi
+@@ -2590,7 +2590,7 @@ rm -f conftest*
+ # Decide which environment variable is used to find dynamic libraries.
+ case "${host}" in
+   *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;;
+-  *-*-darwin*) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;;
++  *-*-darwin* | *-*-ios* ) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;;
+   *-*-mingw* | *-*-cygwin ) RPATH_ENVVAR=PATH ;;
+   *) RPATH_ENVVAR=LD_LIBRARY_PATH ;;
+ esac
diff --git a/nixpkgs/pkgs/development/tools/misc/blackmagic/default.nix b/nixpkgs/pkgs/development/tools/misc/blackmagic/default.nix
new file mode 100644
index 000000000000..281463528354
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/blackmagic/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, lib, fetchFromGitHub
+, gcc-arm-embedded, binutils-arm-embedded, libftdi
+, python, pythonPackages
+}:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  name = "blackmagic-${version}";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "blacksphere";
+    repo = "blackmagic";
+    rev = "29386aee140e5e99a958727358f60980418b4c88";
+    sha256 = "05x19y80mixk6blpnfpfngy5d41jpjvdqgjzkmhv1qc03bhyhc82";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    gcc-arm-embedded binutils-arm-embedded
+  ];
+
+  buildInputs = [
+    libftdi
+    python
+    pythonPackages.intelhex
+  ];
+
+  postPatch = ''
+    # Prevent calling out to `git' to generate a version number:
+    substituteInPlace src/Makefile \
+      --replace '`git describe --always --dirty`' '${version}'
+
+    # Fix scripts that generate headers:
+    for f in $(find scripts libopencm3/scripts -type f); do
+      patchShebangs "$f"
+    done
+  '';
+
+  buildPhase = "${stdenv.shell} ${./helper.sh}";
+  installPhase = ":"; # buildPhase does this.
+
+  meta = {
+    description = "In-application debugger for ARM Cortex microcontrollers";
+    longDescription = ''
+      The Black Magic Probe is a modern, in-application debugging tool
+      for embedded microprocessors. It allows you to see what is going
+      on "inside" an application running on an embedded microprocessor
+      while it executes.
+
+      This package builds the firmware for all supported platforms,
+      placing them in separate directories under the firmware
+      directory.  It also places the FTDI version of the blackmagic
+      executable in the bin directory.
+    '';
+    homepage = https://github.com/blacksphere/blackmagic;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ pjones ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/blackmagic/helper.sh b/nixpkgs/pkgs/development/tools/misc/blackmagic/helper.sh
new file mode 100755
index 000000000000..b4c7558885bb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/blackmagic/helper.sh
@@ -0,0 +1,49 @@
+################################################################################
+# Build all of the platforms manually since the `all_platforms' target
+# doesn't preserve all of the build outputs and overrides CFLAGS.
+set -e
+set -u
+
+################################################################################
+# Prevent a warning from shellcheck:
+out=${out:-/tmp}
+
+################################################################################
+export CFLAGS=$NIX_CFLAGS_COMPILE
+
+################################################################################
+PRODUCTS="blackmagic.bin blackmagic.hex blackmagic_dfu.bin blackmagic_dfu.hex"
+
+################################################################################
+make_platform() {
+  echo "Building for hardware platform $1"
+
+  make clean
+  make PROBE_HOST="$1"
+
+  if [ "$1" = libftdi ]; then
+    mkdir -p "$out/bin"
+    install -m 0555 blackmagic "$out/bin"
+  fi
+
+  for f in $PRODUCTS; do
+    if [ -r "$f" ]; then
+      mkdir -p "$out/firmware/$1"
+      install -m 0444 "$f" "$out/firmware/$1"
+    fi
+  done
+
+}
+
+################################################################################
+# Start by building libopencm3:
+make -C libopencm3
+
+################################################################################
+# And now all of the platforms:
+cd src
+
+for platform in platforms/*/Makefile.inc; do
+  probe=$(basename "$(dirname "$platform")")
+  make_platform "$probe"
+done
diff --git a/nixpkgs/pkgs/development/tools/misc/bossa/bin2c.c b/nixpkgs/pkgs/development/tools/misc/bossa/bin2c.c
new file mode 100644
index 000000000000..f0b915de540a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/bossa/bin2c.c
@@ -0,0 +1,122 @@
+// bin2c.c
+//
+// convert a binary file into a C source vector
+//
+// THE "BEER-WARE LICENSE" (Revision 3.1415):
+// sandro AT sigala DOT it wrote this file. As long as you retain this notice you can do
+// whatever you want with this stuff.  If we meet some day, and you think this stuff is
+// worth it, you can buy me a beer in return.  Sandro Sigala
+//
+// syntax:  bin2c [-c] [-z] <input_file> <output_file>
+//
+//          -c    add the "const" keyword to definition
+//          -z    terminate the array with a zero (useful for embedded C strings)
+//
+// examples:
+//     bin2c -c myimage.png myimage_png.cpp
+//     bin2c -z sometext.txt sometext_txt.cpp
+ 
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+ 
+#ifndef PATH_MAX
+#define PATH_MAX 1024
+#endif
+ 
+int useconst = 0;
+int zeroterminated = 0;
+ 
+int myfgetc(FILE *f)
+{
+	int c = fgetc(f);
+	if (c == EOF && zeroterminated)
+	{
+		zeroterminated = 0;
+		return 0;
+	}
+	return c;
+}
+ 
+void process(const char *ifname, const char *ofname)
+{
+	FILE *ifile, *ofile;
+	ifile = fopen(ifname, "rb");
+	if (ifile == NULL)
+	{
+		fprintf(stderr, "cannot open %s for reading\n", ifname);
+		exit(1);
+	}
+	ofile = fopen(ofname, "wb");
+	if (ofile == NULL)
+	{
+		fprintf(stderr, "cannot open %s for writing\n", ofname);
+		exit(1);
+	}
+	char buf[PATH_MAX], *p;
+	const char *cp;
+	if ((cp = strrchr(ifname, '/')) != NULL)
+	{
+		++cp;
+	} else {
+		if ((cp = strrchr(ifname, '\\')) != NULL)
+			++cp;
+		else
+			cp = ifname;
+	}
+	strcpy(buf, cp);
+	for (p = buf; *p != '\0'; ++p)
+	{
+		if (!isalnum(*p))
+			*p = '_';
+	}
+	fprintf(ofile, "static %sunsigned char %s[] = {\n", useconst ? "const " : "", buf);
+	int c, col = 1;
+	while ((c = myfgetc(ifile)) != EOF)
+	{
+		if (col >= 78 - 6)
+		{
+			fputc('\n', ofile);
+			col = 1;
+		}
+		fprintf(ofile, "0x%.2x, ", c);
+		col += 6;
+	}
+	fprintf(ofile, "\n};\n");
+ 
+	fclose(ifile);
+	fclose(ofile);
+}
+ 
+void usage(void)
+{
+	fprintf(stderr, "usage: bin2c [-cz] <input_file> <output_file>\n");
+	exit(1);
+}
+ 
+int main(int argc, char **argv)
+{
+	while (argc > 3)
+	{
+		if (!strcmp(argv[1], "-c"))
+		{
+			useconst = 1;
+			--argc;
+			++argv;
+		} else if (!strcmp(argv[1], "-z"))
+		{
+			zeroterminated = 1;
+			--argc;
+			++argv;
+		} else {
+			usage();
+		}
+	}
+	if (argc != 3)
+	{
+		usage();
+	}
+	process(argv[1], argv[2]);
+	return 0;
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/bossa/bossa-no-applet-build.patch b/nixpkgs/pkgs/development/tools/misc/bossa/bossa-no-applet-build.patch
new file mode 100644
index 000000000000..4284245f485d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/bossa/bossa-no-applet-build.patch
@@ -0,0 +1,16 @@
+diff --git a/Makefile b/Makefile
+index cc8882e..97b11ee 100644
+--- a/Makefile
++++ b/Makefile
+@@ -184,11 +184,6 @@ $(foreach src,$(COMMON_SRCS),$(eval $(call common_obj,$(src))))
+ # Applet rules
+ #
+ define applet_obj
+-$(SRCDIR)/$(1:%.asm=%.cpp): $(SRCDIR)/$(1)
+-	@echo APPLET $(1:%.asm=%)
+-	$$(Q)$$(ARMAS) -o $$(@:%.o=%.obj) $$<
+-	$$(Q)$$(ARMOBJCOPY) -O binary $$(@:%.o=%.obj) $$(@:%.o=%.bin)
+-	$$(Q)appletgen $(1:%.asm=%) $(SRCDIR) $(OBJDIR)
+ $(OBJDIR)/$(1:%.asm=%.o): $(SRCDIR)/$(1:%.asm=%.cpp)
+ 	@echo CPP APPLET $$<
+ 	$$(Q)$$(CXX) $$(COMMON_CXXFLAGS) -c -o $$(@) $$(<:%.asm=%.cpp)
diff --git a/nixpkgs/pkgs/development/tools/misc/bossa/default.nix b/nixpkgs/pkgs/development/tools/misc/bossa/default.nix
new file mode 100644
index 000000000000..bb81a461188a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/bossa/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchgit, wxGTK, libX11, readline }:
+
+let
+  # BOSSA needs a "bin2c" program to embed images.
+  # Source taken from:
+  # http://wiki.wxwidgets.org/Embedding_PNG_Images-Bin2c_In_C
+  bin2c = stdenv.mkDerivation {
+    name = "bossa-bin2c";
+    src = ./bin2c.c;
+    unpackPhase = "true";
+    buildPhase = ''cc $src -o bin2c'';
+    installPhase = ''mkdir -p $out/bin; cp bin2c $out/bin/'';
+  };
+
+in
+stdenv.mkDerivation rec {
+  name = "bossa-1.8";
+
+  src = fetchgit {
+    url = https://github.com/shumatech/BOSSA;
+    rev = "3be622ca0aa6214a2fc51c1ec682c4a58a423d62";
+    sha256 = "19ik86qbffcb04cgmi4mnascbkck4ynfj87ha65qdk6fmp5q35vm";
+  };
+
+  patches = [ ./bossa-no-applet-build.patch ];
+
+  nativeBuildInputs = [ bin2c ];
+  buildInputs = [ wxGTK libX11 readline ];
+
+  # Explicitly specify targets so they don't get stripped.
+  makeFlags = [ "bin/bossac" "bin/bossash" "bin/bossa" ];
+  NIX_CFLAGS_COMPILE = "-Wno-error=deprecated-declarations";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/bossa{c,sh,} $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A flash programming utility for Atmel's SAM family of flash-based ARM microcontrollers";
+    longDescription = ''
+      BOSSA is a flash programming utility for Atmel's SAM family of
+      flash-based ARM microcontrollers. The motivation behind BOSSA is
+      to create a simple, easy-to-use, open source utility to replace
+      Atmel's SAM-BA software. BOSSA is an acronym for Basic Open
+      Source SAM-BA Application to reflect that goal.
+    '';
+    homepage = http://www.shumatech.com/web/products/bossa;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/bsdbuild/default.nix b/nixpkgs/pkgs/development/tools/misc/bsdbuild/default.nix
new file mode 100644
index 000000000000..359ab125be99
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/bsdbuild/default.nix
@@ -0,0 +1,68 @@
+{ stdenv, fetchurl, perl, libtool, pkgconfig, gettext, mandoc, ed }:
+
+stdenv.mkDerivation rec {
+  name = "bsdbuild-${version}";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "http://stable.hypertriton.com/bsdbuild/${name}.tar.gz";
+    sha256 = "1zrdjh7a6z4khhfw9zrp490afq306cpl5v8wqz2z55ys7k1n5ifl";
+  };
+
+  buildInputs = [ perl mandoc ed ];
+  nativeBuildInputs = [ pkgconfig libtool gettext ];
+
+  prePatch = ''
+    #ignore unfamiliar flags
+    substituteInPlace configure \
+      --replace '--sbindir=*' '--sbindir=* | --includedir=* | --oldincludedir=*'
+    #same for packages using bsdbuild
+    substituteInPlace mkconfigure.pl \
+      --replace '--sbindir=*' '--sbindir=* | --includedir=* | --oldincludedir=*'
+    #insert header for missing NULL macro
+    for f in db4.pm sdl_ttf.pm mysql.pm uim.pm strlcpy.pm getpwuid.pm \
+      getaddrinfo.pm strtoll.pm free_null.pm getpwnam_r.pm \
+      gettimeofday.pm gethostbyname.pm xinerama.pm strsep.pm \
+      fontconfig.pm gettext.pm pthreads.pm strlcat.pm kqueue.pm wgl.pm \
+      alsa.pm crypt.pm cracklib.pm freesg-rg.pm edacious.pm mmap.pm \
+      agar.pm x11.pm x11.pm execvp.pm agar-core.pm dyld.pm getopt.pm \
+      strtold.pm sdl_image.pm shl_load.pm glx.pm percgi.pm timerfd.pm \
+      glob.pm dlopen.pm freesg.pm csidl.pm perl.pm select.pm \
+      portaudio.pm etubestore.pm;
+    do
+ed -s -v BSDBuild/$f << EOF
+/#include
+i
+#include <stddef.h>
+.
+w
+EOF
+    done
+  '';
+
+  configureFlags = [
+    "--with-libtool=${libtool}/bin/libtool"
+    "--enable-nls=yes"
+    "--with-gettext=${gettext}"
+    "--with-manpages=yes"
+  ];
+
+  meta = {
+    homepage = http://bsdbuild.hypertriton.com;
+    description = "A cross-platform build system.";
+
+    longDescription = ''
+      BSDBuild is a cross-platform build system. Derived from the
+      traditional 4.4BSD make libraries, BSDBuild allows BSD-style
+      Makefiles (without BSD make extensions), and works natively
+      under most operating systems and make flavors. Since BSDBuild
+      is implemented as a library (as opposed to a macro package),
+      Makefiles are edited directly, as opposed to being compiled
+      (however, if the build directory is separate from the source
+      directory, BSDBuild will produce the required Makefiles in place).
+    '';
+
+    license = stdenv.lib.licenses.bsd3;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cbrowser/backslashes-quotes.diff b/nixpkgs/pkgs/development/tools/misc/cbrowser/backslashes-quotes.diff
new file mode 100644
index 000000000000..cc42f0745da5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cbrowser/backslashes-quotes.diff
@@ -0,0 +1,49 @@
+Based on this:
+http://sourceforge.net/tracker/?func=detail&aid=1493886&group_id=5152&atid=305152
+fix the infinite loops in quote highlight - ID: 1493886
+
+--- cbrowser-0.8-2/ftcllib.tcl	2000-07-04 01:17:43.000000000 +0200
++++ cbrowser-0.8/ftcllib.tcl	2006-05-24 00:39:18.833762522 +0200
+@@ -1290,13 +1290,39 @@
+   foreach {start end} [concat 1.0 [$widget tag ranges comment] end] {
+ 
+     while {[set temp [$widget search -regexp -- $pattern $start $end]] != ""} {
++      set startquote [$widget index "$temp + 1chars"]
+ 
+-      set endquote [$widget search -regexp -- {[^\\]\"} "$temp + 1chars" $end]
++      set temp [$widget index "$startquote + 1chars"]
++      while {1==1} {
++        set endquote [$widget search -regexp -- {\"} $temp $end]
++
++	# The program will not break if a /*C comment*/ is between C quotes.
++	if { $endquote == "" } {
++	  set endquote $startquote
++	  break
++	}
++
++        # look for double backslashes
++	if {[set temp2 [$widget search -regexp -- {\\\\} $temp $endquote]] != ""} {
++	  set temp "$temp2 + 2chars"
++	  continue
++	}
++        
++        # look for \"
++	if {[set temp2 [$widget search -regexp -- {\\\"} $temp $endquote]] != ""} {
++	  set temp "$temp2 + 2chars"
++	  continue
++	}
++
++	break
++      }
+ 
+       if {[strlen $endquote] > 0} {
+-        set start [$widget index "$endquote + 2chars"]
++        set start [$widget index "$endquote + 1chars"]
+ 
+-        $widget tag add quote "$temp + 1chars" $start
++        $widget tag add quote $startquote $start
++      } else {
++        set start [$widget index "$start + 1chars"]
+       }
+     }
+   }
diff --git a/nixpkgs/pkgs/development/tools/misc/cbrowser/default.nix b/nixpkgs/pkgs/development/tools/misc/cbrowser/default.nix
new file mode 100644
index 000000000000..6519f349bfc8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cbrowser/default.nix
@@ -0,0 +1,34 @@
+{ fetchurl, stdenv, tk, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "cbrowser-0.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cbrowser/cbrowser-0.8.tar.gz";
+    sha256 = "1050mirjab23qsnq3lp3a9vwcbavmh9kznzjm7dr5vkx8b7ffcji";
+  };
+
+  patches = [ ./backslashes-quotes.diff ];
+
+  buildInputs = [ tk makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/${name}
+    cp -R * $out/share/${name}/
+
+    makeWrapper $out/share/${name}/cbrowser $out/bin/cbrowser \
+      --prefix PATH : ${tk}/bin
+  '';
+
+  meta = {
+    description = "Tcl/Tk GUI front-end to cscope";
+
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    homepage = https://sourceforge.net/projects/cbrowser/;
+
+    maintainers = with stdenv.lib.maintainers; [viric];
+
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ccache/default.nix b/nixpkgs/pkgs/development/tools/misc/ccache/default.nix
new file mode 100644
index 000000000000..c5cb277c256f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ccache/default.nix
@@ -0,0 +1,82 @@
+{ stdenv, fetchurl, perl, zlib, makeWrapper }:
+
+let ccache = stdenv.mkDerivation rec {
+  name = "ccache-${version}";
+  version = "3.4.1";
+
+  src = fetchurl {
+    sha256 = "1pppi4jbkkj641cdynmc35jaj40jjicw7gj75ran5qs5886jcblc";
+    url = "mirror://samba/ccache/${name}.tar.xz";
+  };
+
+  nativeBuildInputs = [ perl ];
+
+  buildInputs = [ zlib ];
+
+  outputs = [ "out" "man" ];
+
+  # non to be fail on filesystems with unconventional blocksizes (zfs on Hydra?)
+  patches = [
+    ./fix-debug-prefix-map-suite.patch
+    ./skip-fs-dependent-test.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace Makefile.in --replace 'objs) $(extra_libs)' 'objs)'
+  '';
+
+  doCheck = !stdenv.isDarwin;
+
+  passthru = let
+      unwrappedCC = stdenv.cc.cc;
+    in {
+    # A derivation that provides gcc and g++ commands, but that
+    # will end up calling ccache for the given cacheDir
+    links = extraConfig: stdenv.mkDerivation rec {
+      name = "ccache-links";
+      passthru = {
+        isClang = unwrappedCC.isClang or false;
+        isGNU = unwrappedCC.isGNU or false;
+      };
+      inherit (unwrappedCC) lib;
+      nativeBuildInputs = [ makeWrapper ];
+      buildCommand = ''
+        mkdir -p $out/bin
+
+        wrap() {
+          local cname="$1"
+          if [ -x "${unwrappedCC}/bin/$cname" ]; then
+            makeWrapper ${ccache}/bin/ccache $out/bin/$cname \
+              --run ${stdenv.lib.escapeShellArg extraConfig} \
+              --add-flags ${unwrappedCC}/bin/$cname
+          fi
+        }
+
+        wrap cc
+        wrap c++
+        wrap gcc
+        wrap g++
+        wrap clang
+        wrap clang++
+
+        for executable in $(ls ${unwrappedCC}/bin); do
+          if [ ! -x "$out/bin/$executable" ]; then
+            ln -s ${unwrappedCC}/bin/$executable $out/bin/$executable
+          fi
+        done
+        for file in $(ls ${unwrappedCC} | grep -vw bin); do
+          ln -s ${unwrappedCC}/$file $out/$file
+        done
+      '';
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "Compiler cache for fast recompilation of C/C++ code";
+    homepage = http://ccache.samba.org/;
+    downloadPage = https://ccache.samba.org/download.html;
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+  };
+};
+in ccache
diff --git a/nixpkgs/pkgs/development/tools/misc/ccache/fix-debug-prefix-map-suite.patch b/nixpkgs/pkgs/development/tools/misc/ccache/fix-debug-prefix-map-suite.patch
new file mode 100644
index 000000000000..98a6fbf10bf1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ccache/fix-debug-prefix-map-suite.patch
@@ -0,0 +1,42 @@
+--- a/test/suites/debug_prefix_map.bash
++++ b/test/suites/debug_prefix_map.bash
+@@ -29,7 +29,7 @@
+     expect_stat 'cache hit (preprocessed)' 0
+     expect_stat 'cache miss' 1
+     expect_stat 'files in cache' 2
+-    if grep -E "[^=]`pwd`[^=]" test.o >/dev/null 2>&1; then
++    if objdump -g test.o | grep ": `pwd`$" >/dev/null 2>&1; then
+         test_failed "Source dir (`pwd`) found in test.o"
+     fi
+
+@@ -39,7 +39,7 @@
+     expect_stat 'cache hit (preprocessed)' 0
+     expect_stat 'cache miss' 1
+     expect_stat 'files in cache' 2
+-    if grep -E "[^=]`pwd`[^=]" test.o >/dev/null 2>&1; then
++    if objdump -g test.o | grep ": `pwd`$" >/dev/null 2>&1; then
+         test_failed "Source dir (`pwd`) found in test.o"
+     fi
+
+@@ -52,10 +52,10 @@
+     expect_stat 'cache hit (preprocessed)' 0
+     expect_stat 'cache miss' 1
+     expect_stat 'files in cache' 2
+-    if grep -E "[^=]`pwd`[^=]" test.o >/dev/null 2>&1; then
++    if objdump -g test.o | grep ": `pwd`$" >/dev/null 2>&1; then
+         test_failed "Source dir (`pwd`) found in test.o"
+     fi
+-    if ! grep "name" test.o >/dev/null 2>&1; then
++    if ! objdump -g test.o | grep ": name$" >/dev/null 2>&1; then
+         test_failed "Relocation (name) not found in test.o"
+     fi
+
+@@ -65,7 +65,7 @@
+     expect_stat 'cache hit (preprocessed)' 0
+     expect_stat 'cache miss' 1
+     expect_stat 'files in cache' 2
+-    if grep -E "[^=]`pwd`[^=]" test.o >/dev/null 2>&1; then
++    if objdump -g test.o | grep ": `pwd`$" >/dev/null 2>&1; then
+         test_failed "Source dir (`pwd`) found in test.o"
+     fi
+ }
diff --git a/nixpkgs/pkgs/development/tools/misc/ccache/skip-fs-dependent-test.patch b/nixpkgs/pkgs/development/tools/misc/ccache/skip-fs-dependent-test.patch
new file mode 100644
index 000000000000..7b233df6531b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ccache/skip-fs-dependent-test.patch
@@ -0,0 +1,26 @@
+--- a/test/suites/cleanup.bash
++++ b/test/suites/cleanup.bash
+@@ -94,23 +94,6 @@
+
+     $CCACHE -F 0 -M 256K >/dev/null
+     CCACHE_LOGFILE=/tmp/foo $CCACHE -c >/dev/null
+-    expect_file_count 3 '*.o' $CCACHE_DIR
+-    expect_file_count 3 '*.d' $CCACHE_DIR
+-    expect_file_count 3 '*.stderr' $CCACHE_DIR
+-    expect_stat 'files in cache' 9
+-    expect_stat 'cleanups performed' 1
+-    for i in 3 4 5; do
+-        file=$CCACHE_DIR/a/result$i-4017.o
+-        if [ ! -f $file ]; then
+-            test_failed "File $file removed when it shouldn't"
+-        fi
+-    done
+-    for i in 0 1 2 6 7 8 9; do
+-        file=$CCACHE_DIR/a/result$i-4017.o
+-        if [ -f $file ]; then
+-            test_failed "File $file not removed when it should"
+-        fi
+-    done
+
+     # -------------------------------------------------------------------------
+     TEST "Automatic cache cleanup, limit_multiple 0.9"
diff --git a/nixpkgs/pkgs/development/tools/misc/ccls/default.nix b/nixpkgs/pkgs/development/tools/misc/ccls/default.nix
new file mode 100644
index 000000000000..f643ecab69d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ccls/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchFromGitHub, makeWrapper
+, cmake, llvmPackages, rapidjson, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  name    = "ccls-${version}";
+  version = "0.20190314.1";
+
+  src = fetchFromGitHub {
+    owner = "MaskRay";
+    repo = "ccls";
+    rev = version;
+    sha256 = "1yvxliryqx2bc7r6ri4iafbrjx19jk8hnfbvq5xla72q0gqb97lf";
+  };
+
+  nativeBuildInputs = [ cmake makeWrapper ];
+  buildInputs = with llvmPackages; [ clang-unwrapped llvm rapidjson ];
+
+  cmakeFlags = [
+    "-DSYSTEM_CLANG=ON"
+    "-DCMAKE_OSX_DEPLOYMENT_TARGET=10.12"
+  ];
+
+  preConfigure = ''
+    cmakeFlagsArray+=(-DCMAKE_CXX_FLAGS="-fvisibility=hidden -fno-rtti")
+  '';
+
+  shell = runtimeShell;
+  postFixup = ''
+    # We need to tell ccls where to find the standard library headers.
+
+    standard_library_includes="\\\"-isystem\\\", \\\"${stdenv.lib.getDev stdenv.cc.libc}/include\\\""
+    standard_library_includes+=", \\\"-isystem\\\", \\\"${llvmPackages.libcxx}/include/c++/v1\\\""
+    export standard_library_includes
+
+    wrapped=".ccls-wrapped"
+    export wrapped
+
+    mv $out/bin/ccls $out/bin/$wrapped
+    substituteAll ${./wrapper} $out/bin/ccls
+    chmod --reference=$out/bin/$wrapped $out/bin/ccls
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A c/c++ language server powered by clang";
+    homepage    = https://github.com/MaskRay/ccls;
+    license     = licenses.asl20;
+    platforms   = platforms.linux ++ platforms.darwin;
+    maintainers = [ maintainers.mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ccls/wrapper b/nixpkgs/pkgs/development/tools/misc/ccls/wrapper
new file mode 100644
index 000000000000..f8d7b9eb3fea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ccls/wrapper
@@ -0,0 +1,12 @@
+#! @shell@ -e
+
+initString="--init={\"clang\":{\"extraArgs\": [@standard_library_includes@"
+
+if [ "${NIX_CFLAGS_COMPILE}" != "" ]; then
+  read -a cflags_array <<< ${NIX_CFLAGS_COMPILE}
+  initString+=$(printf ', \"%s\"' "${cflags_array[@]}")
+fi
+
+initString+="]}}"
+
+exec -a "$0" "@out@/bin/@wrapped@" "${initString}" "${extraFlagsArray[@]}" "$@"
diff --git a/nixpkgs/pkgs/development/tools/misc/cflow/default.nix b/nixpkgs/pkgs/development/tools/misc/cflow/default.nix
new file mode 100644
index 000000000000..ed4886305e3c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cflow/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, fetchurl, gettext, emacs }:
+
+stdenv.mkDerivation rec {
+  name = "cflow-1.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/cflow/${name}.tar.bz2";
+    sha256 = "1mzd3yf0dfv8h2av5vsxxlhpk21nw064h91b2kgfrdz92r0pnj1l";
+  };
+
+  patchPhase = ''
+    substituteInPlace "src/cflow.h"					\
+      --replace "/usr/bin/cpp"						\
+                "$(cat ${stdenv.cc}/nix-support/orig-cc)/bin/cpp"
+  '';
+
+  buildInputs = [ gettext ] ++
+    # We don't have Emacs/GTK/etc. on {Dar,Cyg}win.
+    stdenv.lib.optional
+      (! (stdenv.lib.lists.any (x: stdenv.hostPlatform.system == x)
+              [ "i686-cygwin" ]))
+      emacs;
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Tool to analyze the control flow of C programs";
+
+    longDescription = ''
+      GNU cflow analyzes a collection of C source files and prints a
+      graph, charting control flow within the program.
+
+      GNU cflow is able to produce both direct and inverted flowgraphs
+      for C sources.  Optionally a cross-reference listing can be
+      generated.  Two output formats are implemented: POSIX and GNU
+      (extended).
+
+      The package also provides Emacs major mode for examining the
+      produced flowcharts in Emacs.
+    '';
+
+    license = licenses.gpl3Plus;
+
+    homepage = https://www.gnu.org/software/cflow/;
+
+    maintainers = [ maintainers.vrthra ];
+
+    /* On Darwin, build fails with:
+
+       Undefined symbols:
+         "_argp_program_version", referenced from:
+             _argp_program_version$non_lazy_ptr in libcflow.a(argp-parse.o)
+       ld: symbol(s) not found
+     */
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cgdb/default.nix b/nixpkgs/pkgs/development/tools/misc/cgdb/default.nix
new file mode 100644
index 000000000000..31e720b13f29
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cgdb/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, ncurses, readline, flex, texinfo }:
+
+stdenv.mkDerivation rec {
+  name = "cgdb-${version}";
+  version = "0.7.0";
+
+  src = fetchurl {
+    url = "https://cgdb.me/files/${name}.tar.gz";
+    sha256 = "08slzg3702v5nivjhdx2bciqxc5vqcn8pc4i4lsgkcwdcrj94ymz";
+  };
+
+  buildInputs = [ ncurses readline flex texinfo ];
+
+  meta = with stdenv.lib; {
+    description = "A curses interface to gdb";
+
+    homepage = https://cgdb.github.io/;
+
+    repositories.git = git://github.com/cgdb/cgdb.git;
+
+    license = licenses.gpl2Plus;
+
+    platforms = with platforms; linux ++ cygwin;
+    maintainers = with maintainers; [ vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/checkbashisms/default.nix b/nixpkgs/pkgs/development/tools/misc/checkbashisms/default.nix
new file mode 100644
index 000000000000..2564b42731b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/checkbashisms/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, perl }:
+stdenv.mkDerivation rec {
+  version = "2.0.0.2";
+  name = "checkbashisms-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/checkbaskisms/${version}/checkbashisms";
+    sha256 = "1vm0yykkg58ja9ianfpm3mgrpah109gj33b41kl0jmmm11zip9jd";
+  };
+
+  buildInputs = [ perl ];
+
+  # The link returns directly the script. No need for unpacking
+  unpackPhase = "true";
+
+  installPhase = ''
+    install -D -m755 $src $out/bin/checkbashisms
+  '';
+
+  meta = {
+    homepage = https://sourceforge.net/projects/checkbaskisms/;
+    description = "Check shell scripts for non-portable syntax";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/chrpath/default.nix b/nixpkgs/pkgs/development/tools/misc/chrpath/default.nix
new file mode 100644
index 000000000000..4170570e08aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/chrpath/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "chrpath-0.16";
+
+  src = fetchurl {
+    url = "https://alioth.debian.org/frs/download.php/file/3979/chrpath-0.16.tar.gz";
+    sha256 = "0yvfq891mcdkf8g18gjjkn2m5rvs8z4z4cl1vwdhx6f2p9a4q3dv";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Command line tool to adjust the RPATH or RUNPATH of ELF binaries";
+    longDescription = ''
+      chrpath changes, lists or removes the rpath or runpath setting in a
+      binary. The rpath, or runpath if it is present, is where the runtime
+      linker should look for the libraries needed for a program.
+    '';
+    homepage = https://alioth.debian.org/projects/chrpath/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/chruby/default.nix b/nixpkgs/pkgs/development/tools/misc/chruby/default.nix
new file mode 100644
index 000000000000..ed96befca5e7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/chruby/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, lib, fetchFromGitHub, runCommand, rubies ? null }:
+
+let
+  rubiesEnv = runCommand "chruby-env" { preferLocalBuild = true; } ''
+    mkdir $out
+    ${lib.concatStrings
+        (lib.mapAttrsToList (name: path: "ln -s ${path} $out/${name}\n") rubies)}
+  '';
+
+in stdenv.mkDerivation rec {
+  name = "chruby-${version}";
+
+  version = "0.3.9";
+
+  src = fetchFromGitHub {
+    owner = "postmodern";
+    repo = "chruby";
+    rev = "v${version}";
+    sha256 = "1894g6fymr8kra9vwhbmnrcr58l022mcd7g9ans4zd3izla2j3gx";
+  };
+
+  phases = [ "unpackPhase" "patchPhase" "installPhase" "fixupPhase" ];
+
+  patches = lib.optionalString (rubies != null) [
+    ./env.patch
+  ];
+
+  postPatch = lib.optionalString (rubies != null) ''
+    substituteInPlace share/chruby/chruby.sh --replace "@rubiesEnv@" ${rubiesEnv}
+  '';
+
+  installPhase = ''
+    mkdir $out
+    cp -r bin $out
+    cp -r share $out
+  '';
+
+  meta = with lib; {
+    description = "Changes the current Ruby";
+    homepage = https://github.com/postmodern/chruby;
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/chruby/env.patch b/nixpkgs/pkgs/development/tools/misc/chruby/env.patch
new file mode 100644
index 000000000000..6a4ef8b73497
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/chruby/env.patch
@@ -0,0 +1,12 @@
+diff --git a/share/chruby/chruby.sh b/share/chruby/chruby.sh
+--- a/share/chruby/chruby.sh
++++ b/share/chruby/chruby.sh
+@@ -1,7 +1,7 @@
+ CHRUBY_VERSION="0.3.8"
+ RUBIES=()
+ 
+-for dir in "$PREFIX/opt/rubies" "$HOME/.rubies"; do
++for dir in @rubiesEnv@; do
+ 	[[ -d "$dir" && -n "$(ls -A "$dir")" ]] && RUBIES+=("$dir"/*)
+ done
+ unset dir
diff --git a/nixpkgs/pkgs/development/tools/misc/circleci-cli/default.nix b/nixpkgs/pkgs/development/tools/misc/circleci-cli/default.nix
new file mode 100644
index 000000000000..daf39318432a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/circleci-cli/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, buildGoPackage }:
+
+let
+  owner = "CircleCI-Public";
+  pname = "circleci-cli";
+  version = "0.1.2569";
+in
+buildGoPackage rec {
+  name = "${pname}-${version}";
+  inherit version;
+
+  src =  fetchFromGitHub {
+    inherit owner;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0ixiqx8rmia02r44zbhw149p5x9r9cv1fsnlhl8p2x5zd2bdr18x";
+  };
+
+  goPackagePath = "github.com/${owner}/${pname}";
+
+  meta = with stdenv.lib; {
+    # Box blurb edited from the AUR package circleci-cli
+    description = ''
+      Command to enable you to reproduce the CircleCI environment locally and
+      run jobs as if they were running on the hosted CirleCI application.
+    '';
+    maintainers = with maintainers; [ synthetica ];
+    platforms = platforms.unix;
+    license = licenses.mit;
+    homepage = https://circleci.com/;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cl-launch/default.nix b/nixpkgs/pkgs/development/tools/misc/cl-launch/default.nix
new file mode 100644
index 000000000000..c245a32a06d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cl-launch/default.nix
@@ -0,0 +1,38 @@
+{stdenv, fetchurl}:
+let
+  s = # Generated upstream information
+  rec {
+    baseName="cl-launch";
+    version="4.1.4.1";
+    name="${baseName}-${version}";
+    hash="09450yknzb0m3375lg4k8gdypmk3xwl8m1krv1kvhylmrm3995mz";
+    url="http://common-lisp.net/project/xcvb/cl-launch/cl-launch-4.1.4.1.tar.gz";
+    sha256="09450yknzb0m3375lg4k8gdypmk3xwl8m1krv1kvhylmrm3995mz";
+  };
+  buildInputs = [
+  ];
+in
+stdenv.mkDerivation {
+  inherit (s) name version;
+  inherit buildInputs;
+  src = fetchurl {
+    inherit (s) url sha256;
+  };
+
+  preConfigure = ''
+    export makeFlags="$makeFlags PREFIX='$out'"
+    mkdir -p "$out/bin"
+  '';
+
+  preBuild = ''
+    sed -e 's/\t\t@/\t\t/g' -i Makefile
+  '';
+
+  meta = {
+    inherit (s) version;
+    description = ''Common Lisp launcher script'';
+    license = stdenv.lib.licenses.llgpl21 ;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cl-launch/default.upstream b/nixpkgs/pkgs/development/tools/misc/cl-launch/default.upstream
new file mode 100644
index 000000000000..ff7ee9446d28
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cl-launch/default.upstream
@@ -0,0 +1,2 @@
+url http://common-lisp.net/project/xcvb/cl-launch/
+version_link '.-[0-9].*[0-9][.]tar[.][a-z0-9]*$'
diff --git a/nixpkgs/pkgs/development/tools/misc/cli11/default.nix b/nixpkgs/pkgs/development/tools/misc/cli11/default.nix
new file mode 100644
index 000000000000..904119bd6ae3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cli11/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, cmake, gtest, python, boost }:
+
+stdenv.mkDerivation rec {
+  pname = "cli11";
+  version = "1.7.1";
+
+  src = fetchFromGitHub {
+    owner = "CLIUtils";
+    repo = "CLI11";
+    rev = "v${version}";
+    sha256 = "0wddck970pczk7c201i2g6s85mkv4f2f4zxy6mndh3pfz41wcs2d";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  checkInputs = [ boost python ];
+
+  doCheck = true;
+
+  preConfigure = ''
+    rm -rfv extern/googletest
+    ln -sfv ${gtest.src} extern/googletest
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "CLI11 is a command line parser for C++11";
+    homepage = https://github.com/CLIUtils/CLI11;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ nand0p ];
+    license = licenses.unfreeRedistributable;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/coccinelle/default.nix b/nixpkgs/pkgs/development/tools/misc/coccinelle/default.nix
new file mode 100644
index 000000000000..4040eda141fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/coccinelle/default.nix
@@ -0,0 +1,57 @@
+{ fetchurl, stdenv, python, ncurses, ocamlPackages, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  name    = "coccinelle-${version}";
+  version = "1.0.6";
+
+  src = fetchurl {
+    url = "http://coccinelle.lip6.fr/distrib/${name}.tgz";
+    sha256 = "02g9hmwkvfl838zz690yra5jzrqjg6y6ffxkrfcsx790bhkfsll4";
+  };
+
+  buildInputs = with ocamlPackages; [
+    ocaml findlib menhir
+    ocaml_pcre pycaml
+    python ncurses pkgconfig
+  ];
+
+  doCheck = !stdenv.isDarwin;
+
+  # The build system builds two versions of spgen:
+  # 'spgen' with ocamlc -custom (bytecode specially linked)
+  # and 'spgen.opt' using ocamlopt.
+  # I'm not sure of the intentions here, but the way
+  # the 'spgen' binary is produced results in an
+  # invalid/incorrect interpreter path (/lib/ld-linux*).
+  # We could patch it, but without knowing why it's
+  # finding the wrong path it seems safer to use
+  # the .opt version that is built correctly.
+  # All that said, our fix here is simple: remove 'spgen'.
+  # The bin/spgen entrypoint is really a bash script
+  # and will use spgen.opt if 'spgen' doesn't exist.
+  postInstall = ''
+    rm $out/lib/coccinelle/spgen/spgen
+  '';
+
+  meta = {
+    description = "Program to apply semantic patches to C code";
+    longDescription = ''
+      Coccinelle is a program matching and transformation engine which
+      provides the language SmPL (Semantic Patch Language) for
+      specifying desired matches and transformations in C code.
+      Coccinelle was initially targeted towards performing collateral
+      evolutions in Linux.  Such evolutions comprise the changes that
+      are needed in client code in response to evolutions in library
+      APIs, and may include modifications such as renaming a function,
+      adding a function argument whose value is somehow
+      context-dependent, and reorganizing a data structure.  Beyond
+      collateral evolutions, Coccinelle is successfully used (by us
+      and others) for finding and fixing bugs in systems code.
+    '';
+
+    homepage = http://coccinelle.lip6.fr/;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/complexity/default.nix b/nixpkgs/pkgs/development/tools/misc/complexity/default.nix
new file mode 100644
index 000000000000..d95c67fea6d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/complexity/default.nix
@@ -0,0 +1,32 @@
+{ fetchurl, stdenv, autogen }:
+
+stdenv.mkDerivation rec {
+  name = "complexity-${version}";
+  version = "1.10";
+
+  src = fetchurl {
+    url = "mirror://gnu/complexity/${name}.tar.gz";
+    sha256 = "1vfns9xm7w0wrz12a3w15slrqnrfh6qxk15nv7qkj3irll3ff522";
+  };
+
+  buildInputs = [ autogen ];
+
+  doCheck = true;
+
+  meta = {
+    description = "C code complexity measurement tool";
+
+    longDescription =
+      '' GNU Complexity is a tool designed for analyzing the complexity of C
+         program functions.  It is very similar to the McCabe scoring, but
+         addresses several issues not considered in that scoring scheme.
+      '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    homepage = https://www.gnu.org/software/complexity/;
+
+    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cppi/default.nix b/nixpkgs/pkgs/development/tools/misc/cppi/default.nix
new file mode 100644
index 000000000000..e4d123dece1d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cppi/default.nix
@@ -0,0 +1,31 @@
+{ fetchurl, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "cppi-1.18";
+
+  src = fetchurl {
+    url = "mirror://gnu/cppi/${name}.tar.xz";
+    sha256 = "1jk42cjaggk71rimjnx3qpmb6hivps0917vl3z7wbxk3i2whb98j";
+  };
+
+  doCheck = true;
+
+  meta = {
+    homepage = https://savannah.gnu.org/projects/cppi/;
+
+    description = "A C preprocessor directive indenter";
+
+    longDescription =
+      '' GNU cppi indents C preprocessor directives to reflect their nesting
+         and ensure that there is exactly one space character between each #if,
+         #elif, #define directive and the following token.  The number of
+         spaces between the `#' and the following directive must correspond
+         to the level of nesting of that directive.
+      '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    maintainers = [ ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cproto/cproto_patch b/nixpkgs/pkgs/development/tools/misc/cproto/cproto_patch
new file mode 100644
index 000000000000..3743fef977b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cproto/cproto_patch
@@ -0,0 +1,11 @@
+diff -Naur cproto-4.6-old/cproto.h cproto-4.6/cproto.h
+--- cproto-4.6-old/cproto.h	1998-01-18 19:49:16.000000000 -0500
++++ cproto-4.6/cproto.h	2004-03-14 00:02:32.148070032 -0500
+@@ -117,6 +117,7 @@
+     Declarator *declarator;
+     DeclaratorList decl_list;
+ } YYSTYPE;
++#define YYSTYPE_IS_DECLARED 1
+ 
+ /* Prototype styles */
+ #if OPT_LINTLIBRARY
diff --git a/nixpkgs/pkgs/development/tools/misc/cproto/default.nix b/nixpkgs/pkgs/development/tools/misc/cproto/default.nix
new file mode 100644
index 000000000000..8a0cb095d445
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cproto/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, flex, bison }:
+
+stdenv.mkDerivation rec {
+  name = "cproto-${version}";
+  version = "4.7o";
+
+  src = fetchurl {
+    urls = [
+      "mirror://debian/pool/main/c/cproto/cproto_${version}.orig.tar.gz"
+      # No version listings and apparently no versioned tarball over http(s).
+      "ftp://ftp.invisible-island.net/cproto/cproto-${version}.tgz"
+    ];
+    sha256 = "0kxlrhhgm84v2q6n3wp7bb77g7wjxkb7azdvb6a70naf0rr0nsy7";
+  };
+
+  # patch made by Joe Khoobyar copied from gentoo bugs
+  patches = ./cproto_patch;
+
+  nativeBuildInputs = [ flex bison ];
+
+  doCheck = true;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    [ "$("$out/bin/cproto" -V 2>&1)" = '${version}' ]
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tool to generate C function prototypes from C source code";
+    homepage = https://invisible-island.net/cproto/;
+    license = licenses.publicDomain;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cquery/default.nix b/nixpkgs/pkgs/development/tools/misc/cquery/default.nix
new file mode 100644
index 000000000000..54ad7ca7071c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cquery/default.nix
@@ -0,0 +1,65 @@
+{ fetchFromGitHub, makeWrapper
+, cmake, llvmPackages, ncurses
+, runtimeShell }:
+
+let
+  src = fetchFromGitHub {
+    owner = "cquery-project";
+    repo = "cquery";
+    rev = "a95a6503d68a85baa25465ce147b7fc20f4a552e";
+    sha256 = "0rxbdln7dqkdw4q8rhclssgwypq16g9flkwmaabsr8knckbszxrx";
+    fetchSubmodules = true;
+  };
+
+  stdenv = llvmPackages.stdenv;
+
+in
+stdenv.mkDerivation rec {
+  name    = "cquery-${version}";
+  version = "2018-10-14";
+
+  inherit src;
+
+  nativeBuildInputs = [ cmake makeWrapper ];
+  buildInputs = with llvmPackages; [ clang clang-unwrapped llvm ncurses ];
+
+  cmakeFlags = [
+    "-DSYSTEM_CLANG=ON"
+    "-DCLANG_CXX=ON"
+    "-DCMAKE_OSX_DEPLOYMENT_TARGET=10.12"
+  ];
+
+  shell = runtimeShell;
+  postFixup = ''
+    # We need to tell cquery where to find the standard library headers.
+
+    standard_library_includes="\\\"-isystem\\\", \\\"${stdenv.lib.getDev stdenv.cc.libc}/include\\\""
+    standard_library_includes+=", \\\"-isystem\\\", \\\"${llvmPackages.libcxx}/include/c++/v1\\\""
+    export standard_library_includes
+
+    wrapped=".cquery-wrapped"
+    export wrapped
+
+    mv $out/bin/cquery $out/bin/$wrapped
+    substituteAll ${./wrapper} $out/bin/cquery
+    chmod --reference=$out/bin/$wrapped $out/bin/cquery
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    pushd ${src}
+    $out/bin/cquery --ci --test-unit
+
+    # The integration tests have to be disabled because cquery ignores `--init`
+    # if they are invoked, which means it won't find the system includes.
+    #$out/bin/cquery --ci --test-index
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A c/c++ language server powered by libclang";
+    homepage    = https://github.com/cquery-project/cquery;
+    license     = licenses.mit;
+    platforms   = platforms.linux ++ platforms.darwin;
+    maintainers = [ maintainers.tobim ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cquery/wrapper b/nixpkgs/pkgs/development/tools/misc/cquery/wrapper
new file mode 100644
index 000000000000..534f900f94af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cquery/wrapper
@@ -0,0 +1,12 @@
+#! @shell@ -e
+
+initString="--init={\"cacheDirectory\": \"/tmp/cquery\", \"extraClangArguments\": [@standard_library_includes@"
+
+if [ "${NIX_CFLAGS_COMPILE}" != "" ]; then
+  read -a cflags_array <<< ${NIX_CFLAGS_COMPILE}
+  initString+=$(printf ', \"%s\"' "${cflags_array[@]}")
+fi
+
+initString+="]}"
+
+exec -a "$0" "@out@/bin/@wrapped@" "${initString}" "${extraFlagsArray[@]}" "$@"
diff --git a/nixpkgs/pkgs/development/tools/misc/creduce/default.nix b/nixpkgs/pkgs/development/tools/misc/creduce/default.nix
new file mode 100644
index 000000000000..1aa17bac750c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/creduce/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, fetchurl, cmake, makeWrapper
+, llvm, clang-unwrapped
+, flex
+, zlib
+, perlPackages
+, utillinux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "creduce";
+  version = "2.9.0";
+
+  src = fetchurl {
+    url = "https://embed.cs.utah.edu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1b833z0g1hich68kzbkpfc26xb8w2phfl5savy8c6ir9ihwy1a8w";
+  };
+
+  nativeBuildInputs = [ cmake makeWrapper ];
+  buildInputs = [
+    # Ensure stdenv's CC is on PATH before clang-unwrapped
+    stdenv.cc
+    # Actual deps:
+    llvm clang-unwrapped
+    flex zlib
+  ] ++ (with perlPackages; [ perl ExporterLite FileWhich GetoptTabular RegexpCommon TermReadKey ]);
+
+  # On Linux, c-reduce's preferred way to reason about
+  # the cpu architecture/topology is to use 'lscpu',
+  # so let's make sure it knows where to find it:
+  postPatch = stdenv.lib.optionalString stdenv.isLinux ''
+    substituteInPlace creduce/creduce_utils.pm --replace \
+      lscpu ${utillinux}/bin/lscpu
+  '';
+
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    wrapProgram $out/bin/creduce --prefix PERL5LIB : "$PERL5LIB"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A C program reducer";
+    homepage = https://embed.cs.utah.edu/creduce;
+    # Officially, the license is: https://github.com/csmith-project/creduce/blob/master/COPYING
+    license = licenses.ncsa;
+    longDescription = ''
+      C-Reduce is a tool that takes a large C or C++ program that has a
+      property of interest (such as triggering a compiler bug) and
+      automatically produces a much smaller C/C++ program that has the same
+      property.  It is intended for use by people who discover and report
+      bugs in compilers and other tools that process C/C++ code.
+    '';
+    maintainers = [ maintainers.dtzWill ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cscope/default.nix b/nixpkgs/pkgs/development/tools/misc/cscope/default.nix
new file mode 100644
index 000000000000..67cd321cfd53
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cscope/default.nix
@@ -0,0 +1,53 @@
+{ fetchurl, stdenv, ncurses
+, emacsSupport ? true, emacs
+}:
+
+stdenv.mkDerivation rec {
+  name = "cscope-15.9";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cscope/${name}.tar.gz";
+    sha256 = "0ngiv4aj3rr35k3q3wjx0y19gh7i1ydqa0cqip6sjwd8fph5ll65";
+  };
+
+  configureFlags = [ "--with-ncurses=${ncurses.dev}" ];
+
+  buildInputs = [ ncurses ];
+  nativeBuildInputs = stdenv.lib.optional emacsSupport emacs;
+
+  postInstall = stdenv.lib.optionalString emacsSupport ''
+    cd "contrib/xcscope"
+
+    sed -i "cscope-indexer" \
+        -"es|^PATH=.*$|PATH=\"$out/bin:\$PATH\"|g"
+    sed -i "xcscope.el" \
+        -"es|\"cscope-indexer\"|\"$out/libexec/cscope/cscope-indexer\"|g";
+
+    mkdir -p "$out/libexec/cscope"
+    cp "cscope-indexer" "$out/libexec/cscope"
+
+    mkdir -p "$out/share/emacs/site-lisp"
+    emacs --batch --eval '(byte-compile-file "xcscope.el")'
+    cp xcscope.el{,c} "$out/share/emacs/site-lisp"
+  '';
+
+  meta = {
+    description = "A developer's tool for browsing source code";
+
+    longDescription = ''
+      Cscope is a developer's tool for browsing source code.  It has
+      an impeccable Unix pedigree, having been originally developed at
+      Bell Labs back in the days of the PDP-11.  Cscope was part of
+      the official AT&T Unix distribution for many years, and has been
+      used to manage projects involving 20 million lines of code!
+    '';
+
+    license = "BSD-style";
+
+    homepage = http://cscope.sourceforge.net/;
+
+    maintainers = with stdenv.lib.maintainers; [viric];
+
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/csmith/default.nix b/nixpkgs/pkgs/development/tools/misc/csmith/default.nix
new file mode 100644
index 000000000000..eff1af8cdb47
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/csmith/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchurl, m4, makeWrapper, libbsd, perlPackages }:
+
+stdenv.mkDerivation rec {
+  name = "csmith-${version}";
+  version = "2.3.0";
+
+  src = fetchurl {
+    url = "https://embed.cs.utah.edu/csmith/${name}.tar.gz";
+    sha256 = "1mb5zgixsyf86slggs756k8a5ddmj980md3ic9sa1y75xl5cqizj";
+  };
+
+  nativeBuildInputs = [ m4 makeWrapper ];
+  buildInputs = [ libbsd ] ++ (with perlPackages; [ perl SysCPU ]);
+
+  postInstall = ''
+    substituteInPlace $out/bin/compiler_test.pl \
+      --replace '$CSMITH_HOME/runtime' $out/include/${name} \
+      --replace ' ''${CSMITH_HOME}/runtime' " $out/include/${name}" \
+      --replace '$CSMITH_HOME/src/csmith' $out/bin/csmith
+
+    substituteInPlace $out/bin/launchn.pl \
+      --replace '../compiler_test.pl' $out/bin/compiler_test.pl \
+      --replace '../$CONFIG_FILE' '$CONFIG_FILE'
+
+    wrapProgram $out/bin/launchn.pl \
+      --prefix PERL5LIB : "$PERL5LIB"
+
+    mkdir -p $out/share/csmith
+    mv $out/bin/compiler_test.in $out/share/csmith/
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "A random generator of C programs";
+    homepage = https://embed.cs.utah.edu/csmith;
+    # Officially, the license is this: https://github.com/csmith-project/csmith/blob/master/COPYING
+    license = licenses.bsd2;
+    longDescription = ''
+      Csmith is a tool that can generate random C programs that statically and
+      dynamically conform to the C99 standard. It is useful for stress-testing
+      compilers, static analyzers, and other tools that process C code.
+      Csmith has found bugs in every tool that it has tested, and has been used
+      to find and report more than 400 previously unknown compiler bugs.
+    '';
+    maintainers = [ maintainers.dtzWill ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ctags/default.nix b/nixpkgs/pkgs/development/tools/misc/ctags/default.nix
new file mode 100644
index 000000000000..86136084d840
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ctags/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchsvn, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  name = "ctags-${revision}";
+  revision = "816";
+
+  src = fetchsvn {
+    url = https://svn.code.sf.net/p/ctags/code/trunk;
+    rev = revision;
+    sha256 = "0jmbkrmscbl64j71qffcc39x005jrmphx8kirs1g2ws44wil39hf";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  # don't use $T(E)MP which is set to the build directory
+  configureFlags= [ "--enable-tmpdir=/tmp" ];
+
+  meta = with stdenv.lib; {
+    description = "A tool for fast source code browsing (exuberant ctags)";
+    longDescription = ''
+      Ctags generates an index (or tag) file of language objects found
+      in source files that allows these items to be quickly and easily
+      located by a text editor or other utility.  A tag signifies a
+      language object for which an index entry is available (or,
+      alternatively, the index entry created for that object).  Many
+      programming languages are supported.
+    '';
+    homepage = http://ctags.sourceforge.net/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+
+    # So that Exuberant ctags is preferred over emacs's ctags
+    priority = 1;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ctags/wrapped.nix b/nixpkgs/pkgs/development/tools/misc/ctags/wrapped.nix
new file mode 100644
index 000000000000..869e7a61121d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ctags/wrapped.nix
@@ -0,0 +1,78 @@
+{ pkgs, ctags }:
+
+with pkgs.stdenv.lib;
+
+# define some ctags wrappers adding support for some not that common languages
+# customization:
+# a) add stuff here
+# b) override asLang, phpLang, ... using packageOverrides
+# c) use ctagsWrapped.override {args = [ your liste ];}
+
+# install using -iA ctagsWrapped.ctagsWrapped
+
+{
+
+  # the derivation. use language extensions specified by args
+  ctagsWrapped = makeOverridable ( {args, name} :  pkgs.writeScriptBin name ''
+  #!${pkgs.runtimeShell}
+  exec ${pkgs.ctags}/bin/ctags ${concatStringsSep " " (map escapeShellArg args)} "$@"
+  '') {
+    args = let x = pkgs.ctagsWrapped; in concatLists [
+      x.defaultArgs x.phpLang x.jsLang x.nixLang x.asLang x.rubyLang
+    ];
+    name = "${ctags.name}-wrapped";
+  };
+
+  ### language arguments
+
+  # don't scan version control directories
+  defaultArgs = [
+    "--exclude=\.svn"
+    "--exclude=\.hg"
+    "--exclude=\.git"
+    "--exclude=\_darcs"
+    "--sort=yes"
+  ];
+
+  # actionscript
+  asLang = [
+    "--langdef=ActionScript"
+    "--langmap=ActionScript:.as"
+    "--regex-ActionScript=/function[ \\t]+([A-Za-z0-9_]+)[ \\t]*\\(/\1/f,function,functions/"
+    "--regex-ActionScript=/function[ \\t]+(set|get)[ \\t]+([A-Za-z0-9_]+)[ \\t]*\\(/\2/p,property,properties/"
+    "--regex-ActionScript=/interface[ \\t]+[a-z0-9_.]*([A-Z][A-Za-z0-9_]+)/\\1/i,interface,interfaces/"
+    "--regex-ActionScript=/package[ \\t]+([^ \\t]*)/\\1/p/"
+    "--regex-ActionScript=/class[ \\t]+[a-z0-9_.]*([A-Z][A-Za-z0-9_]+)/\\1/c,class,classes/"
+  ];
+
+  # PHP
+  phpLang = [
+    "--langmap=PHP:.php"
+    "--regex-PHP=/abstract class ([^ ]*)/\\1/c/"
+    "--regex-PHP=/interface ([^ ]*)/\\1/i/"
+    "--regex-PHP=/function[ \\t]+([^ (]*)/\\1/f/"
+  ];
+
+  # Javascript: also find unnamed functions and funtions beeing passed within a dict.
+  # the dict properties is used to implement duck typing in frameworks
+  # var foo = function () { ... }
+  # {
+  # a : function () {}
+  # only recognize names up 100 characters. Else you'll be in trouble scanning compressed .js files.
+  jsLang = [
+    "--regex-JavaScript=/([^ \\t]{1,100})[ \\t]*:[ \\t]*function[ \\t]*\\(/\\1/f/"
+  ];
+
+  # find foo in "foo =", don't think we can do a lot better
+  nixLang = [
+    "--langdef=NIX"
+    "--langmap=NIX:.nix"
+    "--regex-NIX=/\([^ \\t*]*\)[ \\t]*=/\\1/f/"
+  ];
+
+  rubyLang = [
+    "--langmap=RUBY:.rb"
+    "--regex-RUBY=/class ([^ ]*)/\\1/c/"
+    "--regex-RUBY=/^[ ]*module[ ]*([^ ]*)/\\1/m/"
+  ];
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cwebbin/default.nix b/nixpkgs/pkgs/development/tools/misc/cwebbin/default.nix
new file mode 100644
index 000000000000..d8deb75d2d41
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cwebbin/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchFromGitHub, fetchurl, tie }:
+
+stdenv.mkDerivation rec {
+  name = "cwebbin-${version}";
+  version = "22p";
+
+  src = fetchFromGitHub {
+    owner = "ascherer";
+    repo = "cwebbin";
+    rev = "2016-05-20-22p";
+    sha256 = "0zf93016hm9i74i2v384rwzcw16y3hg5vc2mibzkx1rzvqa50yfr";
+  };
+
+  cweb = fetchurl {
+    url = https://www.ctan.org/tex-archive/web/c_cpp/cweb/cweb-3.64ah.tgz;
+    sha256 = "1hdzxfzaibnjxjzgp6d2zay8nsarnfy9hfq55hz1bxzzl23n35aj";
+  };
+
+  buildInputs = [ tie ];
+
+  makeFlags = [
+    "MACROSDIR=$(out)/share/texmf/tex/generic/cweb"
+    "CWEBINPUTS=$(out)/lib/cweb"
+    "DESTDIR=$(out)/bin/"
+    "MANDIR=$(out)/share/man/man1"
+    "EMACSDIR=$(out)/share/emacs/site-lisp"
+    "CP=cp"
+    "RM=rm"
+    "PDFTEX=echo"
+    "CC=c++"
+  ];
+
+  buildPhase = ''
+    zcat ${cweb} | tar -xvpf -
+    make -f Makefile.unix boot $makeFlags
+    make -f Makefile.unix cautiously $makeFlags
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/man/man1 $out/share/texmf/tex/generic $out/share/emacs $out/lib
+    make -f Makefile.unix install $makeFlags
+  '';
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Literate Programming in C/C++";
+    platforms = with platforms; unix;
+    maintainers = with maintainers; [ vrthra ];
+    license = licenses.abstyles;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/d-feet/default.nix b/nixpkgs/pkgs/development/tools/misc/d-feet/default.nix
new file mode 100644
index 000000000000..b96f65c2ecc2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/d-feet/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, pkgconfig, fetchurl, itstool, intltool, libxml2, glib, gtk3
+, python3Packages, wrapGAppsHook, gnome3, libwnck3, gobject-introspection }:
+
+let
+  pname = "d-feet";
+  version = "0.3.14";
+in python3Packages.buildPythonApplication rec {
+  name = "${pname}-${version}";
+  format = "other";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/d-feet/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "1m8lwiwl5jhi0x7y6x5zmd3hjplgvdjrb8a8jg74rvkygslj1p7f";
+  };
+
+  nativeBuildInputs = [ pkgconfig itstool intltool wrapGAppsHook libxml2 ];
+  buildInputs = [ glib gtk3 gnome3.adwaita-icon-theme libwnck3 gobject-introspection ];
+
+  propagatedBuildInputs = with python3Packages; [ pygobject3 pep8 ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "dfeet";
+      versionPolicy = "none";
+    };
+  };
+
+  meta = {
+    description = "D-Feet is an easy to use D-Bus debugger";
+
+    longDescription = ''
+      D-Feet can be used to inspect D-Bus interfaces of running programs
+      and invoke methods on those interfaces.
+    '';
+
+    homepage = https://wiki.gnome.org/Apps/DFeet;
+    platforms = stdenv.lib.platforms.all;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [ ktosiek ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dbench/default.nix b/nixpkgs/pkgs/development/tools/misc/dbench/default.nix
new file mode 100644
index 000000000000..a1c9e85a83ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dbench/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchgit, autoconf, popt, zlib }:
+
+stdenv.mkDerivation rec {
+  name = "dbench-2013-01-01";
+
+  src = fetchgit {
+    url = git://git.samba.org/sahlberg/dbench.git;
+    rev = "65b19870ed8d25bff14cafa1c30beb33f1fb6597";
+    sha256 = "16lcbwmmx8z5i73k3dnf54yffrpx7ql3y9k3cpkss9dcyxb1p83i";
+  };
+
+  buildInputs = [ autoconf popt zlib ];
+
+  patches = [
+    # patch has been also sent upstream and might be included in future versions
+    ./fix-missing-stdint.patch
+  ];
+
+  preConfigure = ''
+    ./autogen.sh
+    configureFlagsArray+=("--datadir=$out/share/dbench")
+  '';
+
+  postInstall = ''
+    cp -R loadfiles/* $out/share/dbench/doc/dbench/loadfiles
+
+    # dbench looks here for the file
+    ln -s doc/dbench/loadfiles/client.txt $out/share/dbench/client.txt
+
+    # backwards compatible to older nixpkgs packaging introduced by
+    # 3f27be8e5d5861cd4b9487d6c5212d88bf24316d
+    ln -s dbench/doc/dbench/loadfiles $out/share/loadfiles
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Filesystem benchmark tool based on load patterns";
+    homepage = https://dbench.samba.org/;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dbench/fix-missing-stdint.patch b/nixpkgs/pkgs/development/tools/misc/dbench/fix-missing-stdint.patch
new file mode 100644
index 000000000000..96cb28e9e55a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dbench/fix-missing-stdint.patch
@@ -0,0 +1,10 @@
+--- dbench-65b1987.org/libnfs.c	2017-11-08 12:25:39.652147989 +0000
++++ dbench-65b1987/libnfs.c	2017-11-08 12:26:20.269897054 +0000
+@@ -23,6 +23,7 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
++#include <stdint.h>
+ 
+ #define discard_const(ptr) ((void *)((intptr_t)(ptr)))
+ 
diff --git a/nixpkgs/pkgs/development/tools/misc/ddd/default.nix b/nixpkgs/pkgs/development/tools/misc/ddd/default.nix
new file mode 100644
index 000000000000..c51a5f504741
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ddd/default.nix
@@ -0,0 +1,20 @@
+{stdenv, fetchurl, motif, ncurses, libX11, libXt}:
+
+stdenv.mkDerivation rec {
+  name = "ddd-3.3.12";
+  src = fetchurl {
+    url = "mirror://gnu/ddd/${name}.tar.gz";
+    sha256 = "0p5nx387857w3v2jbgvps2p6mlm0chajcdw5sfrddcglsxkwvmis";
+  };
+  buildInputs = [motif ncurses libX11 libXt];
+  configureFlags = [ "--with-x" ];
+
+  patches = [ ./gcc44.patch ];
+
+  meta = {
+    homepage = https://www.gnu.org/software/ddd;
+    description = "Graphical front-end for command-line debuggers";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ddd/gcc44.patch b/nixpkgs/pkgs/development/tools/misc/ddd/gcc44.patch
new file mode 100644
index 000000000000..c4e4004b12e0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ddd/gcc44.patch
@@ -0,0 +1,11 @@
+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=504868
+--- a/ddd/strclass.C~ 2008-11-07 17:57:13.000000000 +0000
++++ b/ddd/strclass.C  2008-11-07 17:57:27.000000000 +0000
+@@ -39,6 +39,7 @@
+ #include <ctype.h>
+ #include <limits.h>
+ #include <new>
++#include <cstdio>
+ #include <stdlib.h>
+ 
+ void string::error(const char* msg) const
diff --git a/nixpkgs/pkgs/development/tools/misc/dejagnu/default.nix b/nixpkgs/pkgs/development/tools/misc/dejagnu/default.nix
new file mode 100644
index 000000000000..693c791875be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dejagnu/default.nix
@@ -0,0 +1,53 @@
+{ fetchurl, stdenv, expect, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "dejagnu-1.6.2";
+
+  src = fetchurl {
+    url = "mirror://gnu/dejagnu/${name}.tar.gz";
+    sha256 = "0qfj2wd4qk1yn9yzam6g8nmyxfazcc0knjyyibycb2ainkhp21hd";
+  };
+
+  buildInputs = [ expect makeWrapper ];
+
+  doCheck = true;
+
+  # Note: The test-suite *requires* /dev/pts among the `build-chroot-dirs' of
+  # the build daemon when building in a chroot.  See
+  # <https://www.mail-archive.com/nix-dev@cs.uu.nl/msg01056.html> for
+  # details.
+
+  # The test-suite needs to have a non-empty stdin:
+  #   https://lists.gnu.org/archive/html/bug-dejagnu/2003-06/msg00002.html
+  checkPhase = ''
+    # Provide `runtest' with a log name, otherwise it tries to run
+    # `whoami', which fails when in a chroot.
+    LOGNAME="nix-build-daemon" make check < /dev/zero
+  '';
+
+  postInstall = ''
+    wrapProgram "$out/bin/runtest" \
+      --prefix PATH ":" "${expect}/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Framework for testing other programs";
+
+    longDescription = ''
+      DejaGnu is a framework for testing other programs.  Its purpose
+      is to provide a single front end for all tests.  Think of it as a
+      custom library of Tcl procedures crafted to support writing a
+      test harness.  A test harness is the testing infrastructure that
+      is created to support a specific program or tool.  Each program
+      can have multiple testsuites, all supported by a single test
+      harness.  DejaGnu is written in Expect, which in turn uses Tcl --
+      Tool command language.
+    '';
+
+    homepage = https://www.gnu.org/software/dejagnu/;
+    license = licenses.gpl2Plus;
+
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dfu-programmer/default.nix b/nixpkgs/pkgs/development/tools/misc/dfu-programmer/default.nix
new file mode 100644
index 000000000000..ba95889b5a80
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dfu-programmer/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, libusb }:
+let
+  version = "0.7.2";
+in
+stdenv.mkDerivation rec {
+  name="dfu-programmer-${version}";
+
+  buildInputs = [ libusb ];
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dfu-programmer/${name}.tar.gz";
+    sha256 = "15gr99y1z9vbvhrkd25zqhnzhg6zjmaam3vfjzf2mazd39mx7d0x";
+  };
+
+  configureFlags = [ "--disable-libusb_1_0" ];
+
+  meta = with stdenv.lib; {
+    license = licenses.gpl2;
+    description = "A Device Firmware Update based USB programmer for Atmel chips with a USB bootloader";
+    homepage = http://dfu-programmer.sourceforge.net/;
+    maintainers = [ maintainers.the-kenny ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dfu-util/default.nix b/nixpkgs/pkgs/development/tools/misc/dfu-util/default.nix
new file mode 100644
index 000000000000..2657e570106e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dfu-util/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, pkgconfig, libusb1 }:
+
+stdenv.mkDerivation rec {
+  name="dfu-util-${version}";
+  version = "0.9";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libusb1 ];
+
+  src = fetchurl {
+    url = "http://dfu-util.sourceforge.net/releases/${name}.tar.gz";
+    sha256 = "0czq73m92ngf30asdzrfkzraag95hlrr74imbanqq25kdim8qhin";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Device firmware update (DFU) USB programmer";
+    longDescription = ''
+      dfu-util is a program that implements the host (PC) side of the USB
+      DFU 1.0 and 1.1 (Universal Serial Bus Device Firmware Upgrade) protocol.
+
+      DFU is intended to download and upload firmware to devices connected over
+      USB. It ranges from small devices like micro-controller boards up to mobile
+      phones. With dfu-util you are able to download firmware to your device or
+      upload firmware from it.
+    '';
+    homepage = http://dfu-util.sourceforge.net;
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dialog/default.nix b/nixpkgs/pkgs/development/tools/misc/dialog/default.nix
new file mode 100644
index 000000000000..efb850d5adef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dialog/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, ncurses
+, withLibrary ? false, libtool
+, unicodeSupport ? true
+, enableShared ? !stdenv.isDarwin
+}:
+
+assert withLibrary -> libtool != null;
+assert unicodeSupport -> ncurses.unicode && ncurses != null;
+
+stdenv.mkDerivation rec {
+  name = "dialog-${version}";
+  version = "1.3-20190211";
+
+  src = fetchurl {
+    urls = [
+      "ftp://ftp.invisible-island.net/dialog/${name}.tgz"
+      "https://invisible-mirror.net/archives/dialog/${name}.tgz"
+    ];
+    sha256 = "1lx0bvradzx1zl7znlrsnyljcs596r7wamkhyq37ikbxsy4y5h29";
+  };
+
+  buildInputs = [ ncurses ];
+
+  configureFlags = [
+    "--disable-rpath-hacks"
+    (stdenv.lib.withFeature withLibrary "libtool")
+    "--with-ncurses${stdenv.lib.optionalString unicodeSupport "w"}"
+    "--with-libtool-opts=${stdenv.lib.optionalString enableShared "-shared"}"
+  ];
+
+  installTargets = "install${stdenv.lib.optionalString withLibrary "-full"}";
+
+  meta = {
+    homepage = https://invisible-island.net/dialog/dialog.html;
+    description = "Display dialog boxes from shell";
+    license = stdenv.lib.licenses.lgpl21Plus;
+    maintainers = [ stdenv.lib.maintainers.spacefrogg ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/distcc/default.nix b/nixpkgs/pkgs/development/tools/misc/distcc/default.nix
new file mode 100644
index 000000000000..9891726c6633
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/distcc/default.nix
@@ -0,0 +1,84 @@
+{ stdenv, fetchFromGitHub, popt, avahi, pkgconfig, python, gtk2, runCommand
+, gcc, autoconf, automake, which, procps, libiberty_static
+, runtimeShell
+, sysconfDir ? ""   # set this parameter to override the default value $out/etc
+, static ? false
+}:
+
+let
+  name    = "distcc";
+  version = "2016-02-24";
+  distcc = stdenv.mkDerivation {
+    name = "${name}-${version}";
+    src = fetchFromGitHub {
+      owner = "distcc";
+      repo = "distcc";
+      rev = "b2fa4e21b4029e13e2c33f7b03ca43346f2cecb8";
+      sha256 = "1vj31wcdas8wy52hy6749mlrca9v6ynycdiigx5ay8pnya9z73c6";
+    };
+
+  nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [popt avahi pkgconfig python gtk2 autoconf automake which procps libiberty_static];
+    preConfigure =
+    ''
+      export CPATH=$(ls -d ${gcc.cc}/lib/gcc/*/${gcc.cc.version}/plugin/include)
+
+      configureFlagsArray=( CFLAGS="-O2 -fno-strict-aliasing"
+                            CXXFLAGS="-O2 -fno-strict-aliasing"
+          --mandir=$out/share/man
+                            ${if sysconfDir == "" then "" else "--sysconfdir=${sysconfDir}"}
+                            ${if static then "LDFLAGS=-static" else ""}
+                            --with${if static == true || popt == null then "" else "out"}-included-popt
+                            --with${if avahi != null then "" else "out"}-avahi
+                            --with${if gtk2 != null then "" else "out"}-gtk
+                            --without-gnome
+                            --enable-rfc2553
+                            --disable-Werror   # a must on gcc 4.6
+                           )
+      installFlags="sysconfdir=$out/etc";
+
+      ./autogen.sh
+    '';
+
+    # The test suite fails because it uses hard-coded paths, i.e. /usr/bin/gcc.
+    doCheck = false;
+
+    passthru = {
+      # A derivation that provides gcc and g++ commands, but that
+      # will end up calling distcc for the given cacheDir
+      #
+      # extraConfig is meant to be sh lines exporting environment
+      # variables like DISTCC_HOSTS, DISTCC_DIR, ...
+      links = extraConfig: (runCommand "distcc-links" { passthru.gcc = gcc.cc; }
+        ''
+          mkdir -p $out/bin
+          if [ -x "${gcc.cc}/bin/gcc" ]; then
+            cat > $out/bin/gcc << EOF
+            #!${runtimeShell}
+            ${extraConfig}
+            exec ${distcc}/bin/distcc gcc "\$@"
+          EOF
+            chmod +x $out/bin/gcc
+          fi
+          if [ -x "${gcc.cc}/bin/g++" ]; then
+            cat > $out/bin/g++ << EOF
+            #!${runtimeShell}
+            ${extraConfig}
+            exec ${distcc}/bin/distcc g++ "\$@"
+          EOF
+            chmod +x $out/bin/g++
+          fi
+        '');
+    };
+
+    meta = {
+      description = "A fast, free distributed C/C++ compiler";
+      homepage = http://distcc.org;
+      license = "GPL";
+
+      platforms = stdenv.lib.platforms.linux;
+      maintainers = with stdenv.lib.maintainers; [ anderspapitto ];
+    };
+  };
+in
+  distcc
diff --git a/nixpkgs/pkgs/development/tools/misc/distcc/masq.nix b/nixpkgs/pkgs/development/tools/misc/distcc/masq.nix
new file mode 100644
index 000000000000..f3bccde81606
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/distcc/masq.nix
@@ -0,0 +1,44 @@
+{ stdenv, gccRaw, binutils }:
+
+stdenv.mkDerivation {
+  name = "distcc-masq-${gccRaw.name}";
+
+  phases = [ "installPhase" ];
+  installPhase = ''
+    mkdir -p $out/bin
+
+    bin=${gccRaw}/bin
+
+    shopt -s nullglob
+    if [ -f $bin/gcc ]; then
+      ln -s $bin/gcc $out/bin
+    else
+      for a in $bin/*-gcc; do
+        ln -s $bin/*-gcc $out/bin/gcc
+        ln -s $bin/*-gcc $out/bin/cc
+      done
+    fi
+
+    if [ -f $bin/g++ ]; then
+      ln -s $bin/g++ $out/bin
+    else
+      for a in $bin/*-g++; do
+        ln -sf $bin/*-g++ $out/bin/g++
+        ln -sf $bin/*-g++ $out/bin/c++
+      done
+    fi
+
+    bbin=${binutils}/bin
+    if [ -f $bbin/as ]; then
+      ln -s $bbin/as $out/bin
+    else
+      for a in $bbin/*-as; do
+        ln -sf $bbin/*-as $out/bin/as
+      done
+    fi
+  '';
+
+  meta = {
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/doclifter/default.nix b/nixpkgs/pkgs/development/tools/misc/doclifter/default.nix
new file mode 100644
index 000000000000..9975f0f5465c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/doclifter/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchurl, python}:
+
+stdenv.mkDerivation {
+  name = "doclifter-2.19";
+  src = fetchurl {
+    url = http://www.catb.org/~esr/doclifter/doclifter-2.19.tar.gz;
+    sha256 = "1as6z7mdjrrkw2kism41q5ybvyzvwcmj9qzla2fz98v9f4jbj2s2";
+  };
+  buildInputs = [ python ];
+  
+  makeFlags = "PREFIX=$(out)";
+  
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+    cp manlifter $out/bin
+    cp manlifter.1 $out/share/man/man1
+  '';
+  
+  meta = {
+    description = "Lift documents in nroff markups to XML-DocBook";
+    homepage = http://www.catb.org/esr/doclifter;
+    license = "BSD";
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/drush/default.nix b/nixpkgs/pkgs/development/tools/misc/drush/default.nix
new file mode 100644
index 000000000000..f9a640d47038
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/drush/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, php, which, makeWrapper, bash, coreutils, ncurses }:
+
+stdenv.mkDerivation rec {
+  name = "drush-6.1.0";
+
+  meta = with stdenv.lib; {
+    description = "Command-line shell and Unix scripting interface for Drupal";
+    homepage    = https://github.com/drush-ops/drush;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ lovek323 ];
+    platforms   = platforms.all;
+  };
+
+  src = fetchurl {
+    url    = https://github.com/drush-ops/drush/archive/6.1.0.tar.gz;
+    sha256 = "1jgnc4jjyapyn04iczvcz92ic0vq8d1w8xi55ismqyy5cxhqj6bp";
+  };
+
+  consoleTable = fetchurl {
+    url    = http://download.pear.php.net/package/Console_Table-1.1.3.tgz;
+    sha256 = "07gbjd7m1fj5dmavr0z20vkqwx1cz2522sj9022p257jifj1yl76";
+  };
+
+  buildInputs = [ php which makeWrapper ];
+
+  installPhase = ''
+    # install libraries
+    cd lib
+    tar -xf ${consoleTable}
+    cd ..
+
+    mkdir -p "$out"
+    cp -r . "$out/src"
+    mkdir "$out/bin"
+    wrapProgram "$out/src/drush" --prefix PATH : "${stdenv.lib.makeBinPath [ which php bash coreutils ncurses ]}"
+    ln -s "$out/src/drush" "$out/bin/drush"
+  '';
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/editorconfig-core-c/default.nix b/nixpkgs/pkgs/development/tools/misc/editorconfig-core-c/default.nix
new file mode 100644
index 000000000000..2eda1f044ce8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/editorconfig-core-c/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchgit, cmake, pcre, doxygen }:
+
+stdenv.mkDerivation rec {
+  name = "editorconfig-core-c-${meta.version}";
+
+  src = fetchgit {
+    url = "https://github.com/editorconfig/editorconfig-core-c.git";
+    rev = "v${meta.version}";
+    sha256 = "0awpb63ci85kal3pnlj2b54bay8igj1rbc13d8gqkvidlb51nnx4";
+    fetchSubmodules = true;
+    inherit name;
+  };
+
+  buildInputs = [ pcre ];
+  nativeBuildInputs = [ cmake doxygen ];
+
+  # Multiple doxygen can not generate man pages in the same base directory in
+  # parallel: https://bugzilla.gnome.org/show_bug.cgi?id=791153
+  enableParallelBuilding = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://editorconfig.org/;
+    description = "EditorConfig core library written in C";
+    longDescription = ''
+      EditorConfig makes it easy to maintain the correct coding style when
+      switching between different text editors and between different
+      projects. The EditorConfig project maintains a file format and plugins
+      for various text editors which allow this file format to be read and used
+      by those editors. For information on the file format and supported text
+      editors, see the EditorConfig website.
+    '';
+    downloadPage = https://github.com/editorconfig/editorconfig-core-c;
+    license = with licenses; [ bsd2 bsd3 ];
+    version = "0.12.1";
+    maintainers = with maintainers; [ dochang ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/eggdbus/default.nix b/nixpkgs/pkgs/development/tools/misc/eggdbus/default.nix
new file mode 100644
index 000000000000..7c7e53404343
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/eggdbus/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, pkgconfig, glib, dbus, dbus-glib }:
+
+stdenv.mkDerivation rec {
+  name = "eggdbus-0.6";
+
+  src = fetchurl {
+    url = "https://hal.freedesktop.org/releases/${name}.tar.gz";
+    sha256 = "118hj63ac65zlg71kydv4607qcg1qpdlql4kvhnwnnhar421jnq4";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ glib dbus dbus-glib ];
+
+  meta = with stdenv.lib; {
+    homepage = https://hal.freedesktop.org/releases/;
+    description = "D-Bus bindings for GObject";
+    platforms = platforms.linux;
+    license = licenses.lgpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/elfinfo/default.nix b/nixpkgs/pkgs/development/tools/misc/elfinfo/default.nix
new file mode 100644
index 000000000000..51a5f52d3759
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/elfinfo/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "elfinfo-${version}";
+  version = "0.7.5";
+
+  goPackagePath = "github.com/xyproto/elfinfo";
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "xyproto";
+    repo = "elfinfo";
+    sha256 = "0b6zyfq0yhpbf03h52q2lgf6ff086gcsbnhm6chx18h0q1g17m96";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Small utility for showing information about ELF files";
+    homepage = https://elfinfo.roboticoverlords.org/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/elfkickers/default.nix b/nixpkgs/pkgs/development/tools/misc/elfkickers/default.nix
new file mode 100644
index 000000000000..905fa0d40935
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/elfkickers/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "elfkickers-${version}";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "http://www.muppetlabs.com/~breadbox/pub/software/ELFkickers-${version}.tar.gz";
+    sha256 = "0n0sypjrdm3ramv0sby4sdh3i3j9d0ihadr951wa08ypdnq3yrkd";
+  };
+
+  makeFlags = [ "CC=cc prefix=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://www.muppetlabs.com/~breadbox/software/elfkickers.html;
+    description = "A collection of programs that access and manipulate ELF files";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/elfutils/debug-info-from-env.patch b/nixpkgs/pkgs/development/tools/misc/elfutils/debug-info-from-env.patch
new file mode 100644
index 000000000000..409f1311c315
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/elfutils/debug-info-from-env.patch
@@ -0,0 +1,27 @@
+Look up .build-id files relative to the directories in the
+colon-separated environment variable NIX_DEBUG_INFO_DIRS, unless
+overriden by --debuginfo-path.
+
+diff -ru elfutils-0.169-orig/libdwfl/argp-std.c elfutils-0.169/libdwfl/argp-std.c
+--- elfutils-0.169-orig/libdwfl/argp-std.c	2017-05-02 23:05:52.000000000 +0200
++++ elfutils-0.169/libdwfl/argp-std.c	2017-07-28 16:08:06.739558106 +0200
+@@ -376,5 +376,7 @@
+ const struct argp *
+ dwfl_standard_argp (void)
+ {
++  debuginfo_path = getenv("NIX_DEBUG_INFO_DIRS");
++
+   return &libdwfl_argp;
+ }
+diff -ru elfutils-0.169-orig/src/stack.c elfutils-0.169/src/stack.c
+--- elfutils-0.169-orig/src/stack.c	2017-02-24 11:55:28.000000000 +0100
++++ elfutils-0.169/src/stack.c	2017-07-28 15:50:06.743196696 +0200
+@@ -631,6 +631,8 @@
+   /* Set locale.  */
+   (void) setlocale (LC_ALL, "");
+ 
++  debuginfo_path = getenv("NIX_DEBUG_INFO_DIRS");
++
+   const struct argp_option options[] =
+     {
+       { NULL, 0, NULL, 0, N_("Input selection options:"), 0 },
diff --git a/nixpkgs/pkgs/development/tools/misc/elfutils/default.nix b/nixpkgs/pkgs/development/tools/misc/elfutils/default.nix
new file mode 100644
index 000000000000..424032e21af4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/elfutils/default.nix
@@ -0,0 +1,80 @@
+{ lib, stdenv, fetchurl, m4, zlib, bzip2, bison, flex, gettext, xz, setupDebugInfoDirs }:
+
+# TODO: Look at the hardcoded paths to kernel, modules etc.
+stdenv.mkDerivation rec {
+  name = "elfutils-${version}";
+  version = "0.176";
+
+  src = fetchurl {
+    url = "https://sourceware.org/elfutils/ftp/${version}/${name}.tar.bz2";
+    sha256 = "08qhrl4g6qqr4ga46jhh78y56a47p3msa5b2x1qhzbxhf71lfmzb";
+  };
+
+  patches = [ ./debug-info-from-env.patch ];
+
+  postPatch = ''
+    patchShebangs tests
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  # We need bzip2 in NativeInputs because otherwise we can't unpack the src,
+  # as the host-bzip2 will be in the path.
+  nativeBuildInputs = [ m4 bison flex gettext bzip2 ];
+  buildInputs = [ zlib bzip2 xz ];
+
+  propagatedNativeBuildInputs = [ setupDebugInfoDirs ];
+
+  configureFlags =
+    [ "--program-prefix=eu-" # prevent collisions with binutils
+      "--enable-deterministic-archives"
+    ];
+
+  enableParallelBuilding = true;
+
+  # This program does not cross-build fine. So I only cross-build some parts
+  # I need for the linux perf tool.
+  # On the awful cross-building:
+  # http://comments.gmane.org/gmane.comp.sysutils.elfutils.devel/2005
+  #
+  # I wrote this testing for the nanonote.
+
+  buildPhase = stdenv.lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    pushd libebl
+    make
+    popd
+    pushd libelf
+    make
+    popd
+    pushd libdwfl
+    make
+    popd
+    pushd libdw
+    make
+    popd
+  '';
+
+  installPhase = stdenv.lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    pushd libelf
+    make install
+    popd
+    pushd libdwfl
+    make install
+    popd
+    pushd libdw
+    make install
+    popd
+    cp version.h $out/include
+  '';
+
+  doCheck = false; # fails 3 out of 174 tests
+  doInstallCheck = false; # fails 70 out of 174 tests
+
+  meta = {
+    homepage = https://sourceware.org/elfutils/;
+    description = "A set of utilities to handle ELF objects";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.eelco ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/epm/default.nix b/nixpkgs/pkgs/development/tools/misc/epm/default.nix
new file mode 100644
index 000000000000..f58d06599650
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/epm/default.nix
@@ -0,0 +1,27 @@
+{stdenv, fetchFromGitHub, rpm}:
+
+stdenv.mkDerivation rec {
+  name = "epm-${version}";
+  version = "4.4";
+
+  src = fetchFromGitHub {
+    repo = "epm";
+    owner = "michaelrsweet";
+    rev = "v${version}";
+    sha256 = "0kaw7v2m20qirapkps4dna6nf9xibnwljvvv0l9vpvi920kw7j7p";
+  };
+
+  buildInputs = [ rpm ];
+
+  preInstall = ''
+    sed -i 's/README/README.md/' Makefile
+  '';
+
+  meta = with stdenv.lib; {
+    description = "The ESP Package Manager generates distribution archives for a variety of platforms";
+    homepage = https://www.msweet.org/projects.php?Z2;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/findnewest/default.nix b/nixpkgs/pkgs/development/tools/misc/findnewest/default.nix
new file mode 100644
index 000000000000..6dd7e90f8f77
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/findnewest/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "findnewest";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "0-wiz-0";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "1x1cbn2b27h5r0ah5xc06fkalfdci2ngrgd4wibxjw0h88h0nvgq";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/0-wiz-0/findnewest;
+    description = "Recursively find newest file in a hierarchy and print its timestamp";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ bhipple ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/fsatrace/default.nix b/nixpkgs/pkgs/development/tools/misc/fsatrace/default.nix
new file mode 100644
index 000000000000..e84aa0ef555a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/fsatrace/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "fsatrace-${version}";
+  version = "0.0.1-160";
+
+  src = fetchFromGitHub {
+    owner = "jacereda";
+    repo = "fsatrace";
+    rev = "2bf89d836e0156e68f121b0ffeedade7c9381f77";
+    sha256 = "0bndfmm0y738azwzf6m6xg6gjnrwcqlfjsampk67vga40yylwkbw";
+  };
+
+  preConfigure = ''
+    mkdir -p $out/libexec/${name}
+    export makeFlags=INSTALLDIR=$out/libexec/${name}
+  '';
+
+  postInstall = ''
+    mkdir -p $out/bin
+    ln -s $out/libexec/${name}/fsatrace $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/jacereda/fsatrace;
+    description = "filesystem access tracer";
+    license = licenses.isc;
+    maintainers = [ maintainers.peti ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/fswatch/default.nix b/nixpkgs/pkgs/development/tools/misc/fswatch/default.nix
new file mode 100644
index 000000000000..0e4af1348902
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/fswatch/default.nix
@@ -0,0 +1,32 @@
+{ stdenv
+, fetchFromGitHub
+, autoreconfHook
+                     # for xargs
+, gettext
+, libtool
+, makeWrapper
+, texinfo
+}:
+
+stdenv.mkDerivation rec {
+  name = "fswatch-${version}";
+  version = "1.14.0";
+
+  src = fetchFromGitHub {
+    owner = "emcrisostomo";
+    repo = "fswatch";
+    rev = version;
+    sha256 = "1d1fvm36qgh6a5j9v24wai61d297pvzxr14jngjlhh4i474ff21i";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ gettext libtool makeWrapper texinfo ];
+
+  meta = with stdenv.lib; {
+    description = "A cross-platform file change monitor with multiple backends";
+    homepage = https://github.com/emcrisostomo/fswatch;
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gdb/darwin-target-match.patch b/nixpkgs/pkgs/development/tools/misc/gdb/darwin-target-match.patch
new file mode 100644
index 000000000000..1328d919503a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gdb/darwin-target-match.patch
@@ -0,0 +1,11 @@
+--- a/configure	2017-06-05 00:51:26.000000000 +0900
++++ b/configure	2018-03-06 23:12:58.000000000 +0900
+@@ -3603,7 +3603,7 @@
+     noconfigdirs="$noconfigdirs ld gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
+-  x86_64-*-darwin[912]*)
++  x86_64-*-darwin*)
+     noconfigdirs="$noconfigdirs ld gas gprof"
+     noconfigdirs="$noconfigdirs sim target-rda"
+     ;;
diff --git a/nixpkgs/pkgs/development/tools/misc/gdb/debug-info-from-env.patch b/nixpkgs/pkgs/development/tools/misc/gdb/debug-info-from-env.patch
new file mode 100644
index 000000000000..a7eda2c7e173
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gdb/debug-info-from-env.patch
@@ -0,0 +1,13 @@
+Initialize debug-file-directory from NIX_DEBUG_INFO_DIRS, a colon-separated list
+of directories with separate debugging information files.
+
+--- a/gdb/main.c
++++ b/gdb/main.c
+@@ -551,3 +551,6 @@ captured_main_1 (struct captured_main_args *context)
+ 
+-  debug_file_directory = relocate_gdb_directory (DEBUGDIR,
++  debug_file_directory = getenv("NIX_DEBUG_INFO_DIRS");
++
++  if (debug_file_directory == NULL)
++    debug_file_directory = relocate_gdb_directory (DEBUGDIR,
+ 						 DEBUGDIR_RELOCATABLE);
diff --git a/nixpkgs/pkgs/development/tools/misc/gdb/default.nix b/nixpkgs/pkgs/development/tools/misc/gdb/default.nix
new file mode 100644
index 000000000000..97657075d463
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gdb/default.nix
@@ -0,0 +1,94 @@
+{ stdenv
+
+# Build time
+, fetchurl, fetchpatch, pkgconfig, perl, texinfo, setupDebugInfoDirs, buildPackages
+
+# Run time
+, ncurses, readline, gmp, mpfr, expat, zlib, dejagnu
+
+, pythonSupport ? stdenv.hostPlatform == stdenv.buildPlatform && !stdenv.hostPlatform.isCygwin, python3 ? null
+, guile ? null
+
+}:
+
+let
+  basename = "gdb-${version}";
+  version = "8.3";
+in
+
+assert pythonSupport -> python3 != null;
+
+stdenv.mkDerivation rec {
+  name =
+    stdenv.lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform)
+                              (stdenv.targetPlatform.config + "-")
+    + basename;
+
+  src = fetchurl {
+    url = "mirror://gnu/gdb/${basename}.tar.xz";
+    sha256 = "0bnpzz0rl672xg5547q5qck2sxi6cnyixmk8bbb4gifw17ipwbw0";
+  };
+
+  patches = [
+    ./debug-info-from-env.patch
+  ] ++ stdenv.lib.optionals stdenv.isDarwin [
+    ./darwin-target-match.patch
+  ];
+
+  nativeBuildInputs = [ pkgconfig texinfo perl setupDebugInfoDirs ];
+
+  buildInputs = [ ncurses readline gmp mpfr expat zlib guile ]
+    ++ stdenv.lib.optional pythonSupport python3
+    ++ stdenv.lib.optional doCheck dejagnu;
+
+  propagatedNativeBuildInputs = [ setupDebugInfoDirs ];
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  enableParallelBuilding = true;
+
+  # darwin build fails with format hardening since v7.12
+  hardeningDisable = stdenv.lib.optionals stdenv.isDarwin [ "format" ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-format-nonliteral";
+
+  # TODO(@Ericson2314): Always pass "--target" and always prefix.
+  configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (stdenv.targetPlatform != stdenv.hostPlatform) "target";
+
+  configureFlags = with stdenv.lib; [
+    "--enable-targets=all" "--enable-64-bit-bfd"
+    "--disable-install-libbfd"
+    "--disable-shared" "--enable-static"
+    "--with-system-zlib"
+    "--with-system-readline"
+
+    "--with-gmp=${gmp.dev}"
+    "--with-mpfr=${mpfr.dev}"
+    "--with-expat" "--with-libexpat-prefix=${expat.dev}"
+  ] ++ stdenv.lib.optional (!pythonSupport) "--without-python";
+
+  postInstall =
+    '' # Remove Info files already provided by Binutils and other packages.
+       rm -v $out/share/info/bfd.info
+    '';
+
+  # TODO: Investigate & fix the test failures.
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "The GNU Project debugger";
+
+    longDescription = ''
+      GDB, the GNU Project debugger, allows you to see what is going
+      on `inside' another program while it executes -- or what another
+      program was doing at the moment it crashed.
+    '';
+
+    homepage = https://www.gnu.org/software/gdb/;
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    platforms = with platforms; linux ++ cygwin ++ darwin;
+    maintainers = with maintainers; [ pierron ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gdbgui/default.nix b/nixpkgs/pkgs/development/tools/misc/gdbgui/default.nix
new file mode 100644
index 000000000000..36e83564346b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gdbgui/default.nix
@@ -0,0 +1,55 @@
+{ stdenv
+, buildPythonApplication
+, fetchPypi
+, gdb
+, iana-etc
+, libredirect
+, flask
+, flask-socketio
+, flask-compress
+, pygdbmi
+, pygments
+, gevent
+, breakpointHook
+, }:
+
+buildPythonApplication rec {
+  pname = "gdbgui";
+  version = "0.13.1.1";
+
+  buildInputs = [ gdb ];
+  propagatedBuildInputs = [
+    flask
+    flask-socketio
+    flask-compress
+    pygdbmi
+    pygments
+    gevent
+  ];
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1ypxgkxwb443ndyrmsa7zx2hn0d9b3s7n2w49ngfghd3l8k0yvi2";
+  };
+
+  postPatch = ''
+    echo ${version} > gdbgui/VERSION.txt
+    # remove upper version bound
+    sed -ie 's!, <.*"!"!' setup.py
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/gdbgui \
+      --prefix PATH : ${stdenv.lib.makeBinPath [ gdb ]}
+  '';
+
+  # tests do not work without stdout/stdin
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A browser-based frontend for GDB";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ yrashk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gede/default.nix b/nixpkgs/pkgs/development/tools/misc/gede/default.nix
new file mode 100644
index 000000000000..70a157bc0840
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gede/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, makeWrapper, python, qmake, ctags, gdb }:
+
+stdenv.mkDerivation rec {
+  name = "gede-${version}";
+  version = "2.14.1";
+
+  src = fetchurl {
+    url = "http://gede.acidron.com/uploads/source/${name}.tar.xz";
+    sha256 = "1z7577zwz7h03d58as93hyx99isi3p4i3rhxr8l01zgi65mz0mr9";
+  };
+
+  nativeBuildInputs = [ qmake makeWrapper python ];
+
+  buildInputs = [ ctags ];
+
+  dontUseQmakeConfigure = true;
+
+  buildPhase = ":";
+
+  installPhase = ''
+    python build.py install --verbose --prefix="$out"
+    wrapProgram $out/bin/gede \
+      --prefix PATH : ${stdenv.lib.makeBinPath [ ctags gdb ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Graphical frontend (GUI) to GDB";
+    homepage = http://gede.acidron.com;
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ juliendehos ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gengetopt/default.nix b/nixpkgs/pkgs/development/tools/misc/gengetopt/default.nix
new file mode 100644
index 000000000000..b6758cb0bc2a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gengetopt/default.nix
@@ -0,0 +1,33 @@
+{ fetchurl, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "gengetopt-2.22.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/gengetopt/${name}.tar.gz";
+    sha256 = "1xq1kcfs6hri101ss4dhym0jn96z4v6jdvx288mfywadc245mc1h";
+  };
+
+  doCheck = true;
+
+  postPatch = ''
+    sed -e 's/set -o posix/set +o posix/' -i configure
+  '';
+
+  meta = {
+    description = "Command-line option parser generator";
+
+    longDescription =
+      '' GNU Gengetopt program generates a C function that uses getopt_long
+         function to parse the command line options, to validate them and
+         fills a struct
+      '';
+
+    homepage = https://www.gnu.org/software/gengetopt/;
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    maintainers = [ ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/global/default.nix b/nixpkgs/pkgs/development/tools/misc/global/default.nix
new file mode 100644
index 000000000000..b2c71388fc52
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/global/default.nix
@@ -0,0 +1,59 @@
+{ fetchurl, stdenv, libtool, makeWrapper
+, coreutils, ctags, ncurses, pythonPackages, sqlite, universal-ctags
+}:
+
+stdenv.mkDerivation rec {
+  name = "global-${version}";
+  version = "6.6.3";
+
+  src = fetchurl {
+    url = "mirror://gnu/global/${name}.tar.gz";
+    sha256 = "0735pj47dnspf20n0j1px24p59nwjinlmlb2n32ln1hvdkprivnb";
+  };
+
+  nativeBuildInputs = [ libtool makeWrapper ];
+
+  buildInputs = [ ncurses ];
+
+  propagatedBuildInputs = [ pythonPackages.pygments ];
+
+  configureFlags = [
+    "--with-ltdl-include=${libtool}/include"
+    "--with-ltdl-lib=${libtool.lib}/lib"
+    "--with-ncurses=${ncurses.dev}"
+    "--with-sqlite3=${sqlite.dev}"
+    "--with-exuberant-ctags=${ctags}/bin/ctags"
+    "--with-universal-ctags=${universal-ctags}/bin/ctags"
+    "--with-posix-sort=${coreutils}/bin/sort"
+  ];
+
+  doCheck = true;
+
+  postInstall = ''
+    mkdir -p "$out/share/emacs/site-lisp"
+    cp -v *.el "$out/share/emacs/site-lisp"
+
+    wrapProgram $out/bin/gtags \
+      --prefix PYTHONPATH : "$(toPythonPath ${pythonPackages.pygments})"
+    wrapProgram $out/bin/global \
+      --prefix PYTHONPATH : "$(toPythonPath ${pythonPackages.pygments})"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Source code tag system";
+    longDescription = ''
+      GNU GLOBAL is a source code tagging system that works the same way
+      across diverse environments (Emacs, vi, less, Bash, web browser, etc).
+      You can locate specified objects in source files and move there easily.
+      It is useful for hacking a large project containing many
+      subdirectories, many #ifdef and many main() functions.  It is similar
+      to ctags or etags but is different from them at the point of
+      independence of any editor.  It runs on a UNIX (POSIX) compatible
+      operating system like GNU and BSD.
+    '';
+    homepage = https://www.gnu.org/software/global/;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ pSub peterhoeg ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gnum4/darwin-secure-format.patch b/nixpkgs/pkgs/development/tools/misc/gnum4/darwin-secure-format.patch
new file mode 100644
index 000000000000..b14d8be6ef16
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gnum4/darwin-secure-format.patch
@@ -0,0 +1,15 @@
+With format string strictness, High Sierra also enforces that %n isn't used
+in dynamic format strings, but we should just disable its use on darwin in
+general.
+
+--- a/lib/vasnprintf.c	2017-06-22 15:19:15.000000000 -0700
++++ b/lib/vasnprintf.c	2017-06-22 15:20:20.000000000 -0700
+@@ -4869,7 +4869,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *
+ #endif
+                   *fbp = dp->conversion;
+ #if USE_SNPRINTF
+-# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
++# if !defined(__APPLE__) && !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+                 fbp[1] = '%';
+                 fbp[2] = 'n';
+                 fbp[3] = '\0';
diff --git a/nixpkgs/pkgs/development/tools/misc/gnum4/default.nix b/nixpkgs/pkgs/development/tools/misc/gnum4/default.nix
new file mode 100644
index 000000000000..afe9b59e012d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gnum4/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "gnum4-1.4.18";
+
+  src = fetchurl {
+    url = "mirror://gnu/m4/m4-1.4.18.tar.bz2";
+    sha256 = "1xkwwq0sgv05cla0g0a01yzhk0wpsn9y40w9kh9miiiv0imxfh36";
+  };
+
+  doCheck = false;
+
+  configureFlags = [ "--with-syscmd-shell=${stdenv.shell}" ];
+
+  # Upstream is aware of it; it may be in the next release.
+  patches = [ ./s_isdir.patch ]
+    ++ stdenv.lib.optional stdenv.isDarwin ./darwin-secure-format.patch;
+
+  meta = {
+    homepage = https://www.gnu.org/software/m4/;
+    description = "GNU M4, a macro processor";
+
+    longDescription = ''
+      GNU M4 is an implementation of the traditional Unix macro
+      processor.  It is mostly SVR4 compatible although it has some
+      extensions (for example, handling more than 9 positional
+      parameters to macros).  GNU M4 also has built-in functions for
+      including files, running shell commands, doing arithmetic, etc.
+
+      GNU M4 is a macro processor in the sense that it copies its
+      input to the output expanding macros as it goes.  Macros are
+      either builtin or user-defined and can take any number of
+      arguments.  Besides just doing macro expansion, m4 has builtin
+      functions for including named files, running UNIX commands,
+      doing integer arithmetic, manipulating text in various ways,
+      recursion etc...  m4 can be used either as a front-end to a
+      compiler or as a macro processor in its own right.
+    '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+    platforms = stdenv.lib.platforms.unix ++ stdenv.lib.platforms.windows;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gnum4/s_isdir.patch b/nixpkgs/pkgs/development/tools/misc/gnum4/s_isdir.patch
new file mode 100644
index 000000000000..a009a4ba4465
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gnum4/s_isdir.patch
@@ -0,0 +1,14 @@
+Fails to build with glibc 2.12.1 without this patch.
+
+http://lists.gnu.org/archive/html/bug-m4/2010-05/msg00002.html
+
+--- a/src/path.c
++++ b/src/path.c
+@@ -22,6 +22,7 @@
+ /* Handling of path search of included files via the builtins "include"
+    and "sinclude".  */
+ 
+ #include "m4.h"
++#include "sys/stat.h"
+ 
+ struct includes
diff --git a/nixpkgs/pkgs/development/tools/misc/gob2/default.nix b/nixpkgs/pkgs/development/tools/misc/gob2/default.nix
new file mode 100644
index 000000000000..b1e107368ba7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gob2/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, pkgconfig, glib, bison, flex, gnome3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gob2";
+  version = "2.0.20";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "5fe5d7990fd65b0d4b617ba894408ebaa6df453f2781c15a1cfdf2956c0c5428";
+  };
+
+  # configure script looks for d-bus but it is only needed for tests
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ glib bison flex ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      versionPolicy = "none";
+    };
+  };
+
+  meta = {
+    description = "Preprocessor for making GObjects with inline C code";
+    homepage = "https://www.jirka.org/gob.html";
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gperf/3.0.x.nix b/nixpkgs/pkgs/development/tools/misc/gperf/3.0.x.nix
new file mode 100644
index 000000000000..4a8b2e8daaba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gperf/3.0.x.nix
@@ -0,0 +1,35 @@
+{stdenv, fetchurl, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  name = "gperf-3.0.4";
+
+  src = fetchurl {
+    url = "mirror://gnu/gperf/${name}.tar.gz";
+    sha256 = "0gnnm8iqcl52m8iha3sxrzrl9mcyhg7lfrhhqgdn4zj00ji14wbn";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  patches = [ ./gperf-ar-fix.patch ];
+  meta = {
+    description = "Perfect hash function generator";
+
+    longDescription = ''
+      GNU gperf is a perfect hash function generator.  For a given
+      list of strings, it produces a hash function and hash table, in
+      form of C or C++ code, for looking up a value depending on the
+      input string.  The hash function is perfect, which means that
+      the hash table has no collisions, and the hash table lookup
+      needs a single string comparison only.
+
+      GNU gperf is highly customizable.  There are options for
+      generating C or C++ code, for emitting switch statements or
+      nested ifs instead of a hash table, and for tuning the algorithm
+      employed by gperf.
+    '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    homepage = https://www.gnu.org/software/gperf/;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gperf/default.nix b/nixpkgs/pkgs/development/tools/misc/gperf/default.nix
new file mode 100644
index 000000000000..cd0854d2beb8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gperf/default.nix
@@ -0,0 +1,33 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  name = "gperf-3.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/gperf/${name}.tar.gz";
+    sha256 = "1qispg6i508rq8pkajh26cznwimbnj06wq9sd85vg95v8nwld1aq";
+  };
+
+  meta = {
+    description = "Perfect hash function generator";
+
+    longDescription = ''
+      GNU gperf is a perfect hash function generator.  For a given
+      list of strings, it produces a hash function and hash table, in
+      form of C or C++ code, for looking up a value depending on the
+      input string.  The hash function is perfect, which means that
+      the hash table has no collisions, and the hash table lookup
+      needs a single string comparison only.
+
+      GNU gperf is highly customizable.  There are options for
+      generating C or C++ code, for emitting switch statements or
+      nested ifs instead of a hash table, and for tuning the algorithm
+      employed by gperf.
+    '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    homepage = https://www.gnu.org/software/gperf/;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gperf/gperf-ar-fix.patch b/nixpkgs/pkgs/development/tools/misc/gperf/gperf-ar-fix.patch
new file mode 100644
index 000000000000..942d726d76ea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gperf/gperf-ar-fix.patch
@@ -0,0 +1,46 @@
+--- gperf-3.0.4/lib/configure.ac	2009-01-15 02:24:31.000000000 +0200
++++ gperf-3.0.4.patched/lib/configure.ac	2018-11-29 06:37:20.968627533 +0300
+@@ -21,10 +21,12 @@
+ 
+ AC_PREREQ([2.60])
+ AC_INIT([hash.cc])
++m4_include([../aclocal.m4])
+ AC_PROG_MAKE_SET
+ dnl
+ dnl           checks for programs
+ dnl
++AC_SUBST([AR])
+ AC_PROG_CC
+                       dnl sets variable CC
+ AC_PROG_CPP
+--- gperf-3.0.4/lib/Makefile.in	2008-08-23 21:52:48.000000000 +0300
++++ gperf-3.0.4.patched/lib/Makefile.in	2018-11-29 06:36:43.161998888 +0300
+@@ -41,7 +41,7 @@
+ # Both C and C++ compiler
+ OBJEXT = @OBJEXT@
+ # Other
+-AR = ar
++AR = @AR@
+ AR_FLAGS = rc
+ RANLIB = @RANLIB@
+ MV = mv
+--- gperf-3.0.4/doc/configure.ac	2009-01-15 02:24:31.000000000 +0200
++++ gperf-3.0.4.patched/doc/configure.ac	2018-11-29 06:36:00.961288421 +0300
+@@ -21,6 +21,7 @@
+ 
+ AC_PREREQ([2.60])
+ AC_INIT([gperf.1])
++m4_include([../aclocal.m4])
+ PACKAGE=gperf
+ AC_SUBST([PACKAGE])
+ AC_PROG_MAKE_SET
+--- gperf-3.0.4/src/configure.ac	2009-01-15 02:24:30.000000000 +0200
++++ gperf-3.0.4.patched/src/configure.ac	2018-11-29 06:34:21.718576658 +0300
+@@ -21,6 +21,7 @@
+ 
+ AC_PREREQ([2.60])
+ AC_INIT([main.cc])
++m4_include([../aclocal.m4])
+ AC_CONFIG_HEADER([config.h])
+ AC_PROG_MAKE_SET
+ dnl
diff --git a/nixpkgs/pkgs/development/tools/misc/gpshell/default.nix b/nixpkgs/pkgs/development/tools/misc/gpshell/default.nix
new file mode 100644
index 000000000000..25043f89463d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gpshell/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, pkgconfig, globalplatform, pcsclite, gppcscconnectionplugin
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  name = "gpshell-${version}";
+  version = "1.4.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/globalplatform/gpshell-${version}.tar.gz";
+    sha256 = "19a77zvyf2vazbv17185s4pynhylk2ky8vhl4i8pg9zww29sicqi";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ globalplatform pcsclite makeWrapper ];
+
+  postFixup = ''
+    wrapProgram "$out/bin/gpshell" --prefix LD_LIBRARY_PATH : "${gppcscconnectionplugin}/lib"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://sourceforge.net/p/globalplatform/wiki/Home/;
+    description = "Smartcard management application";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gputils/default.nix b/nixpkgs/pkgs/development/tools/misc/gputils/default.nix
new file mode 100644
index 000000000000..aaaee20b81a8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gputils/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "gputils-${version}";
+  version = "1.5.0-1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gputils/${name}.tar.bz2";
+    sha256 = "055v83fdgqljprapf7rmh8x66mr13fj0qypj49xba5spx0ca123g";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://gputils.sourceforge.io/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ yorickvp ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gtkdialog/default.nix b/nixpkgs/pkgs/development/tools/misc/gtkdialog/default.nix
new file mode 100644
index 000000000000..02b4d1557678
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gtkdialog/default.nix
@@ -0,0 +1,21 @@
+{stdenv, fetchurl, gtk2, pkgconfig, hicolor-icon-theme }:
+
+stdenv.mkDerivation {
+  name = "gtkdialog-0.8.3";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/gtkdialog/gtkdialog-0.8.3.tar.gz";
+    sha256 = "ff89d2d7f1e6488e5df5f895716ac1d4198c2467a2a5dc1f51ab408a2faec38e";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gtk2 hicolor-icon-theme ];
+
+  meta = {
+    homepage = https://code.google.com/archive/p/gtkdialog/;
+    # community links: http://murga-linux.com/puppy/viewtopic.php?t=111923 -> https://github.com/01micko/gtkdialog
+    description = "Small utility for fast and easy GUI building from many scripted and compiled languages";
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/gtkperf/bench.patch b/nixpkgs/pkgs/development/tools/misc/gtkperf/bench.patch
new file mode 100644
index 000000000000..3d00a03e9a58
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gtkperf/bench.patch
@@ -0,0 +1,60 @@
+--- gtkperf/src/callbacks.c	2005-10-30 11:33:42.000000000 +0000
++++ gtkperf-patched/src/callbacks.c	2008-05-23 23:41:17.000000000 +0100
+@@ -219,6 +219,13 @@
+ }
+
+
++void
++on_cmdline_test(char *optarg)
++{
++	appdata->test_type = atoi(optarg);
++}
++
++
+ /* Initialize appdata */
+ void
+ setup_appdata(AppData * appdata_in)
+@@ -398,7 +405,7 @@
+ 	appdata->pixbuf_drawing = gdk_pixbuf_new_from_file (filename, NULL);
+
+ 	gtk_combo_box_set_active (GTK_COMBO_BOX (appdata->combobox_testtype),
+-				  0);
++				  appdata->test_type);
+
+ 	/* create end mark to info textview */
+ 	GtkTextIter iter;
+--- gtkperf/src/callbacks.h	2005-10-30 10:21:23.000000000 +0000
++++ gtkperf-patched/src/callbacks.h	2008-05-23 23:22:30.000000000 +0100
+@@ -13,6 +13,7 @@
+ void on_cmdline_run_all ();
+ void on_cmdline_help () ;
+ void on_cmdline_count (char *optarg) ;
++void on_cmdline_test (char *optarg) ;
+ void on_window_main_show (AppData * data);
+
+ gboolean
+--- gtkperf/src/main.c	2005-10-30 11:26:42.000000000 +0000
++++ gtkperf-patched/src/main.c	2008-05-23 23:44:02.000000000 +0100
+@@ -65,9 +65,10 @@
+ 			{"help", 0, 0, 0},
+ 			{"automatic", 0, 0, 0},
+ 			{"count", 1, 0, 0},
++			{"test", 1, 0, 0},
+ 			{0, 0, 0, 0}
+ 		};
+-		c = getopt_long (argc, argv, "hac:",
++		c = getopt_long (argc, argv, "hac:t:",
+ 			long_options, &option_index);
+ 		if (c == -1)
+ 			break;
+@@ -104,6 +105,10 @@
+ 				on_cmdline_count(optarg);
+ 				break;
+
++			case 't':
++				on_cmdline_test(optarg);
++				break;
++
+ 			default:
+ 			case 'h':
+ 				on_cmdline_help ();
diff --git a/nixpkgs/pkgs/development/tools/misc/gtkperf/default.nix b/nixpkgs/pkgs/development/tools/misc/gtkperf/default.nix
new file mode 100644
index 000000000000..5280b69cdcec
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gtkperf/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, gtk2, pkgconfig, libintl }:
+
+stdenv.mkDerivation {
+  name = "gtkperf-0.40.0";
+  src = fetchurl {
+    url = "mirror://sourceforge//gtkperf/gtkperf_0.40.tar.gz";
+    sha256 = "0yxj3ap3yfi76vqg6xjvgc16nfi9arm9kp87s35ywf10fd73814p";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gtk2 libintl ];
+
+  # https://openbenchmarking.org/innhold/7e9780c11550d09aa67bdba71248facbe2d781db
+  patches = [ ./bench.patch ];
+
+  meta = with stdenv.lib; {
+    description = "Application designed to test GTK+ performance";
+    homepage = http://gtkperf.sourceforge.net/;
+    license = with licenses; [ gpl2 ];
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/help2man/1.40.4-cygwin-nls.patch b/nixpkgs/pkgs/development/tools/misc/help2man/1.40.4-cygwin-nls.patch
new file mode 100644
index 000000000000..82f8cf1cb37b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/help2man/1.40.4-cygwin-nls.patch
@@ -0,0 +1,165 @@
+LD_PRELOAD by itself only works with Cygwin builtin functions, but
+textdomain() and friends come from libintl.  In order to override
+those functions, we have to "replace" cygintl-?.dll since functions are
+bound to a DLL name at link time.  Our replacement will be used since
+it is loaded first by LD_PRELOAD.
+
+But as we are making this *the* libintl, we need to provide 
+pass-throughs for the other functions which we're not overriding,
+otherwise Locale::gettext won't load (not to mention the program
+that we're trying to help2man).
+
+--- help2man-1.46.5/Makefile.in	2014-10-09 13:03:01.000000000 +0200
++++ help2man-1.46.5/Makefile.in	2015-05-12 14:46:52.995521900 +0200
+@@ -76,7 +76,8 @@
+        fi
+
+ install_preload: install_dirs preload
+-	$(INSTALL_PROGRAM) $(preload).so $(DESTDIR)$(pkglibdir)
++	$(INSTALL_PROGRAM) lib/cygintl-9.dll $(DESTDIR)$(pkglibdir)
++	ln -sf cygintl-9.dll $(DESTDIR)$(pkglibdir)/$(preload).so
+
+ install_l10n: install_dirs msg_l10n man_l10n info_l10n
+        set -e; \
+@@ -144,7 +146,9 @@
+
+ preload: $(preload).so
+ $(preload).so: $(srcdir)/$(preload).c
+-	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ -fPIC -shared $? $(LIBS)
++	mkdir -p lib
++	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o lib/cygintl-9.dll -shared $? $(LIBS)
++	ln -sf lib/cygintl-9.dll $@
+
+ man: $(target).1
+ $(target).1: $(srcdir)/$(target).PL $(srcdir)/$(target).h2m.PL
+--- help2man-1.46.5/bindtextdomain.c	2009-11-13 00:01:34.000000000 -0600
++++ help2man-1.46.5/bindtextdomain.c	2011-12-29 00:24:33.608078600 -0600
+@@ -27,12 +27,34 @@ static char *(*r_textdomain)(char const
+ static char *(*r_bindtextdomain)(char const *, char const *) = 0;
+ static char *(*r_bind_textdomain_codeset)(char const *, char const *) = 0;
+ 
++#ifdef __CYGWIN__
++static void *RTLD_NEXT = 0;
++static char *(*r_gettext)(const char *) = 0;
++static char *(*r_dgettext)(const char *, const char *) = 0;
++static char *(*r_dcgettext)(const char *, const char *, int) = 0;
++static char *(*r_ngettext)(const char *, const char *, unsigned long int) = 0;
++static char *(*r_dngettext)(const char *, const char *, const char *,
++                            unsigned long int) = 0;
++static char *(*r_dcngettext)(const char *, const char *, const char *,
++                             unsigned long int, int) = 0;
++static char *(*r_setlocale)(int, const char *) = 0;
++
++#define SYM(sym) libintl_ ## sym
++#else
++#define SYM(sym) sym
++#endif
++
+ void setup()
+ {
+     static int done = 0;
+     if (done++)
+         return;
+ 
++#ifdef __CYGWIN__
++    if (!(RTLD_NEXT = dlopen("/usr/bin/cygintl-9.dll", RTLD_LAZY)))
++        die("libintl8 not found");
++#endif
++
+     if (!(e_textdomain = getenv("TEXTDOMAIN")))
+ 	die("TEXTDOMAIN not set");
+ 
+@@ -48,9 +70,19 @@ void setup()
+     if (!(r_bind_textdomain_codeset = dlsym(RTLD_NEXT,
+     					    "bind_textdomain_codeset")))
+ 	die("can't find symbol \"bind_textdomain_codeset\"");
++
++#ifdef __CYGWIN__
++    r_gettext = dlsym(RTLD_NEXT, "libintl_gettext");
++    r_dgettext = dlsym(RTLD_NEXT, "libintl_dgettext");
++    r_dcgettext = dlsym(RTLD_NEXT, "libintl_dcgettext");
++    r_ngettext = dlsym(RTLD_NEXT, "libintl_ngettext");
++    r_dngettext = dlsym(RTLD_NEXT, "libintl_dngettext");
++    r_dcngettext = dlsym(RTLD_NEXT, "libintl_dcngettext");
++    r_setlocale = dlsym(RTLD_NEXT, "libintl_setlocale");
++#endif
+ }
+ 
+-char *textdomain(char const *domainname)
++char *SYM(textdomain)(char const *domainname)
+ {
+     char *r;
+     setup();
+@@ -61,7 +93,7 @@ char *textdomain(char const *domainname)
+     return r;
+ }
+ 
+-char *bindtextdomain(char const *domainname, char const *dirname)
++char *SYM(bindtextdomain)(char const *domainname, char const *dirname)
+ {
+     char const *dir = dirname;
+     setup();
+@@ -71,7 +103,7 @@ char *bindtextdomain(char const *domainn
+     return r_bindtextdomain(domainname, dir);
+ }
+ 
+-char *bind_textdomain_codeset(char const *domainname, char const *codeset)
++char *SYM(bind_textdomain_codeset)(char const *domainname, char const *codeset)
+ {
+     char *r;
+     setup();
+@@ -81,3 +113,54 @@ char *bind_textdomain_codeset(char const
+ 
+     return r;
+ }
++
++#ifdef __CYGWIN__
++
++char *libintl_gettext(const char *msgid)
++{
++    setup();
++    return r_gettext(msgid);
++}
++
++char *libintl_dgettext (const char *domainname, const char *msgid)
++{
++    setup();
++    return r_dgettext(domainname, msgid);
++}
++
++char *libintl_dcgettext (const char *domainname, const char *msgid,
++                         int category)
++{
++    setup();
++    return r_dcgettext (domainname, msgid, category);
++}
++
++char *libintl_ngettext (const char *msgid1, const char *msgid2,
++                        unsigned long int n)
++{
++    setup();
++    return r_ngettext (msgid1, msgid2, n);
++}
++
++char *libintl_dngettext (const char *domainname, const char *msgid1,
++                         const char *msgid2, unsigned long int n)
++{
++    setup();
++    return r_dngettext (domainname, msgid1, msgid2, n);
++}
++
++char *libintl_dcngettext (const char *domainname,
++                          const char *msgid1, const char *msgid2,
++                          unsigned long int n, int category)
++{
++    setup();
++    return r_dcngettext (domainname, msgid1, msgid2, n, category);
++}
++
++char *libintl_setlocale (int i, const char *s)
++{
++    setup();
++    return r_setlocale (i, s);
++}
++
++#endif
diff --git a/nixpkgs/pkgs/development/tools/misc/help2man/default.nix b/nixpkgs/pkgs/development/tools/misc/help2man/default.nix
new file mode 100644
index 000000000000..264f2aec44d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/help2man/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, perlPackages, gettext }:
+
+stdenv.mkDerivation rec {
+  name = "help2man-1.47.10";
+
+  src = fetchurl {
+    url = "mirror://gnu/help2man/${name}.tar.xz";
+    sha256 = "1yywli520246aba12vpgj7bhr1r13swad3xm49a0cygqcgywnwgk";
+  };
+
+  nativeBuildInputs = [ gettext perlPackages.LocaleGettext ];
+  buildInputs = [ perlPackages.perl perlPackages.LocaleGettext ];
+
+  doCheck = false;                                # target `check' is missing
+
+  patches = if stdenv.hostPlatform.isCygwin then [ ./1.40.4-cygwin-nls.patch ] else null;
+
+  # We don't use makeWrapper here because it uses substitutions our
+  # bootstrap shell can't handle.
+  postInstall = ''
+    mv $out/bin/help2man $out/bin/.help2man-wrapped
+    cat > $out/bin/help2man <<EOF
+    #! $SHELL -e
+    export PERL5LIB=\''${PERL5LIB:+:}${perlPackages.LocaleGettext}/${perlPackages.perl.libPrefix}
+    ${stdenv.lib.optionalString stdenv.hostPlatform.isCygwin
+        ''export PATH=\''${PATH:+:}${gettext}/bin''}
+    exec -a \$0 $out/bin/.help2man-wrapped "\$@"
+    EOF
+    chmod +x $out/bin/help2man
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Generate man pages from `--help' output";
+
+    longDescription =
+      '' help2man produces simple manual pages from the ‘--help’ and
+         ‘--version’ output of other commands.
+      '';
+
+    homepage = https://www.gnu.org/software/help2man/;
+
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/hound/default.nix b/nixpkgs/pkgs/development/tools/misc/hound/default.nix
new file mode 100644
index 000000000000..f1875ee0903a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/hound/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "hound-unstable-${version}";
+  version = "2018-11-02";
+  rev = "74ec7448a234d8d09e800b92e52c92e378c07742";
+
+  goPackagePath = "github.com/etsy/hound";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "etsy";
+    repo = "hound";
+    sha256 = "0g6nvgqjabprcl9z5ci5frhbam1dzq978h1d6aanf8vvzslfgdpq";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = {
+    inherit (src.meta) homepage;
+
+    description = "Lightning fast code searching made easy";
+    license = stdenv.lib.licenses.mit;
+    maintainers = with stdenv.lib.maintainers; [ grahamc ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/hound/deps.nix b/nixpkgs/pkgs/development/tools/misc/hound/deps.nix
new file mode 100644
index 000000000000..fe51488c7066
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/hound/deps.nix
@@ -0,0 +1 @@
+[]
diff --git a/nixpkgs/pkgs/development/tools/misc/hydra/default.nix b/nixpkgs/pkgs/development/tools/misc/hydra/default.nix
new file mode 100644
index 000000000000..0d50c772bdee
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/hydra/default.nix
@@ -0,0 +1,147 @@
+{ stdenv, nix, perlPackages, buildEnv, releaseTools, fetchFromGitHub
+, makeWrapper, autoconf, automake, libtool, unzip, pkgconfig, sqlite, libpqxx
+, gitAndTools, mercurial, darcs, subversion, bazaar, openssl, bzip2, libxslt
+, guile, perl, postgresql, nukeReferences, git, boehmgc, nlohmann_json
+, docbook_xsl, openssh, gnused, coreutils, findutils, gzip, lzma, gnutar
+, rpm, dpkg, cdrkit, pixz, lib, fetchpatch, boost, autoreconfHook
+}:
+
+with stdenv;
+
+if lib.versions.major nix.version == "1"
+  then throw "This Hydra version doesn't support Nix 1.x"
+else
+
+let
+  perlDeps = buildEnv {
+    name = "hydra-perl-deps";
+    paths = with perlPackages;
+      [ ModulePluggable
+        CatalystActionREST
+        CatalystAuthenticationStoreDBIxClass
+        CatalystDevel
+        CatalystDispatchTypeRegex
+        CatalystPluginAccessLog
+        CatalystPluginAuthorizationRoles
+        CatalystPluginCaptcha
+        CatalystPluginSessionStateCookie
+        CatalystPluginSessionStoreFastMmap
+        CatalystPluginStackTrace
+        CatalystRuntime
+        CatalystTraitForRequestProxyBase
+        CatalystViewDownload
+        CatalystViewJSON
+        CatalystViewTT
+        CatalystXScriptServerStarman
+        CatalystXRoleApplicator
+        CryptRandPasswd
+        DBDPg
+        DBDSQLite
+        DataDump
+        DateTime
+        DigestSHA1
+        EmailMIME
+        EmailSender
+        FileSlurp
+        IOCompress
+        IPCRun
+        JSON
+        JSONAny
+        JSONXS
+        LWP
+        LWPProtocolHttps
+        NetAmazonS3
+        NetStatsd
+        PadWalker
+        Readonly
+        SQLSplitStatement
+        SetScalar
+        Starman
+        SysHostnameLong
+        TextDiff
+        TextTable
+        XMLSimple
+        nix
+        nix.perl-bindings
+        git
+        boehmgc
+      ];
+  };
+in releaseTools.nixBuild rec {
+  pname = "hydra";
+  version = "2019-05-06";
+
+  inherit stdenv;
+
+  src = fetchFromGitHub {
+    owner = "NixOS";
+    repo = pname;
+    rev = "ff64583d07f046e378a6be596ec0ce7a9e2b7472";
+    sha256 = "0w88q0saz7si22z3ryim6vdrv9qkwn6l25xfmiapvh5qrnrrdcb9";
+  };
+
+  buildInputs =
+    [ makeWrapper autoconf automake libtool unzip nukeReferences sqlite libpqxx
+      gitAndTools.topGit mercurial darcs subversion bazaar openssl bzip2 libxslt
+      guile # optional, for Guile + Guix support
+      perlDeps perl nix
+      postgresql # for running the tests
+      nlohmann_json
+      boost
+    ];
+
+  hydraPath = lib.makeBinPath (
+    [ sqlite subversion openssh nix coreutils findutils pixz
+      gzip bzip2 lzma gnutar unzip git gitAndTools.topGit mercurial darcs gnused bazaar
+    ] ++ lib.optionals stdenv.isLinux [ rpm dpkg cdrkit ] );
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/NixOS/hydra/pull/648/commits/4171ab4c4fd576c516dc03ba64d1c7945f769af0.patch";
+      sha256 = "1fxa2459kdws6qc419dv4084c1ssmys7kqg4ic7n643kybamsgrx";
+    })
+  ];
+
+  configureFlags = [ "--with-docbook-xsl=${docbook_xsl}/xml/xsl/docbook" ];
+
+  NIX_CFLAGS_COMPILE = [ "-pthread" ];
+
+  shellHook = ''
+    PATH=$(pwd)/src/script:$(pwd)/src/hydra-eval-jobs:$(pwd)/src/hydra-queue-runner:$(pwd)/src/hydra-evaluator:$PATH
+    PERL5LIB=$(pwd)/src/lib:$PERL5LIB;
+  '';
+
+  enableParallelBuilding = true;
+
+  preCheck = ''
+    patchShebangs .
+    export LOGNAME=''${LOGNAME:-foo}
+  '';
+
+  postInstall = ''
+    mkdir -p $out/nix-support
+    for i in $out/bin/*; do
+        read -n 4 chars < $i
+        if [[ $chars =~ ELF ]]; then continue; fi
+        wrapProgram $i \
+            --prefix PERL5LIB ':' $out/libexec/hydra/lib:$PERL5LIB \
+            --prefix PATH ':' $out/bin:$hydraPath \
+            --set HYDRA_RELEASE ${version} \
+            --set HYDRA_HOME $out/libexec/hydra \
+            --set NIX_RELEASE ${nix.name or "unknown"}
+    done
+  ''; # */
+
+  dontStrip = true;
+
+  passthru.perlDeps = perlDeps;
+
+  meta = with stdenv.lib; {
+    description = "Nix-based continuous build system";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/icon-naming-utils/default.nix b/nixpkgs/pkgs/development/tools/misc/icon-naming-utils/default.nix
new file mode 100644
index 000000000000..d7b2cd36492e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/icon-naming-utils/default.nix
@@ -0,0 +1,25 @@
+{stdenv, fetchurl, perlPackages, librsvg}:
+
+stdenv.mkDerivation rec {
+  name = "icon-naming-utils-0.8.90";
+
+  src = fetchurl {
+    url = "http://tango.freedesktop.org/releases/${name}.tar.gz";
+    sha256 = "071fj2jm5kydlz02ic5sylhmw6h2p3cgrm3gwdfabinqkqcv4jh4";
+  };
+
+  buildInputs = [ librsvg ] ++ (with perlPackages; [ perl XMLSimple ]);
+
+  postInstall =
+    ''
+      # Add XML::Simple to the runtime search path.
+      substituteInPlace $out/libexec/icon-name-mapping \
+          --replace '/bin/perl' '/bin/perl -I${perlPackages.XMLSimple}/${perlPackages.perl.libPrefix}'
+    '';
+
+  meta = with stdenv.lib; {
+    homepage = http://tango.freedesktop.org/Standard_Icon_Naming_Specification;
+    platforms = with platforms; linux ++ darwin;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/igprof/default.nix b/nixpkgs/pkgs/development/tools/misc/igprof/default.nix
new file mode 100644
index 000000000000..294d1fa10dde
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/igprof/default.nix
@@ -0,0 +1,43 @@
+{stdenv, fetchFromGitHub, libunwind, cmake, pcre, gdb}:
+
+stdenv.mkDerivation rec {
+  version = "5.9.16";
+  name = "igprof-${version}";
+
+  src = fetchFromGitHub {
+    owner = "igprof";
+    repo = "igprof";
+    rev = "v${version}";
+    sha256 = "0rx3mv8zdh9bmcpfbzkib3d52skzfr8600gh5gv21wcsh50jnifx";
+  };
+
+  postPatch = ''
+    substituteInPlace src/igprof --replace libigprof.so $out/lib/libigprof.so
+    '';
+
+  buildInputs = [libunwind gdb pcre];
+  nativeBuildInputs = [cmake];
+  CXXFLAGS = ["-fPIC" "-O2" "-w" "-fpermissive"];
+
+  meta = {
+    description = "The Ignominous Profiler";
+
+    longDescription = ''
+      IgProf is a fast and light weight profiler. It correctly handles
+      dynamically loaded shared libraries, threads and sub-processes started by
+      the application.  We have used it routinely with large C++ applications
+      consisting of many hundreds of shared libraries and thousands of symbols
+      from millions of source lines of code. It requires no special privileges
+      to run. The performance reports provide full navigable call stacks and
+      can be customised by applying filters. Results from any number of
+      profiling runs can be included. This means you can both dig into the
+      details and see the big picture from combined workloads.
+    '';
+
+    license = stdenv.lib.licenses.gpl2;
+
+    homepage = https://igprof.org/;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ ktf ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/indent/darwin.patch b/nixpkgs/pkgs/development/tools/misc/indent/darwin.patch
new file mode 100644
index 000000000000..5458a0d93bff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/indent/darwin.patch
@@ -0,0 +1,15 @@
+diff --git a/config.h.in b/config.h.in
+index 07e6fce..0c57e2a 100644
+--- a/config.h.in
++++ b/config.h.in
+@@ -432,8 +432,8 @@
+ # endif
+ # define _GL_EXTERN_INLINE extern
+ #else
+-# define _GL_INLINE static _GL_UNUSED
+-# define _GL_EXTERN_INLINE static _GL_UNUSED
++# define _GL_INLINE static
++# define _GL_EXTERN_INLINE static
+ #endif
+ 
+ #if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
diff --git a/nixpkgs/pkgs/development/tools/misc/indent/default.nix b/nixpkgs/pkgs/development/tools/misc/indent/default.nix
new file mode 100644
index 000000000000..c4b5fecca741
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/indent/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, texinfo }:
+
+stdenv.mkDerivation rec {
+  name = "indent-2.2.12";
+
+  src = fetchurl {
+    url = "mirror://gnu/indent/${name}.tar.gz";
+    sha256 = "12xvcd16cwilzglv9h7sgh4h1qqjd1h8s48ji2dla58m4706hzg7";
+  };
+
+  patches = [ ./darwin.patch ];
+
+  buildInputs = [ texinfo ];
+
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.cc.isClang
+    "-Wno-implicit-function-declaration";
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    homepage = "https://www.gnu.org/software/indent/";
+    description = "A source code reformatter";
+    license = stdenv.lib.licenses.gpl3Plus;
+    maintainers = [ stdenv.lib.maintainers.mmahut ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/inotify-tools/default.nix b/nixpkgs/pkgs/development/tools/misc/inotify-tools/default.nix
new file mode 100644
index 000000000000..8bc35ba01a61
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/inotify-tools/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, autoreconfHook, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "inotify-tools-${version}";
+  version = "3.20.1";
+
+  src = fetchFromGitHub {
+    repo = "inotify-tools";
+    owner = "rvoicilas";
+    rev = version;
+    sha256 = "14dci1i4mhsd5sa33k8h3ayphk19kizynh5ql9ryibdpmcanfiyq";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/rvoicilas/inotify-tools/wiki;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ marcweber pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/intel-gpu-tools/default.nix b/nixpkgs/pkgs/development/tools/misc/intel-gpu-tools/default.nix
new file mode 100644
index 000000000000..281b09393b5d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/intel-gpu-tools/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, pkgconfig, libdrm, libpciaccess, cairo, xorgproto, udev
+, libX11, libXext, libXv, libXrandr, glib, bison, libunwind, python3, kmod
+, procps, utilmacros, gtk-doc, openssl, peg }:
+
+stdenv.mkDerivation rec {
+  name = "intel-gpu-tools-${version}";
+  version = "1.23";
+
+  src = fetchurl {
+    url = "https://xorg.freedesktop.org/archive/individual/app/igt-gpu-tools-${version}.tar.xz";
+    sha256 = "1l4s95m013p2wvddwr4cjqyvsgmc88zxx2887p1fbb1va5n0hjsd";
+  };
+
+  nativeBuildInputs = [ pkgconfig utilmacros ];
+  buildInputs = [ libdrm libpciaccess cairo xorgproto udev libX11 kmod
+    libXext libXv libXrandr glib bison libunwind python3 procps
+    gtk-doc openssl peg ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  preBuild = ''
+    patchShebangs tests
+
+    patchShebangs debugger/system_routine/pre_cpp.py
+    substituteInPlace tools/Makefile.am --replace '$(CAIRO_CFLAGS)' '$(CAIRO_CFLAGS) $(GLIB_CFLAGS)'
+    substituteInPlace tests/Makefile.am --replace '$(CAIRO_CFLAGS)' '$(CAIRO_CFLAGS) $(GLIB_CFLAGS)'
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://01.org/linuxgraphics/;
+    description = "Tools for development and testing of the Intel DRM driver";
+    license = licenses.mit;
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/intltool/default.nix b/nixpkgs/pkgs/development/tools/misc/intltool/default.nix
new file mode 100644
index 000000000000..a9f451d31e7d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/intltool/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, fetchpatch, gettext, perlPackages }:
+
+stdenv.mkDerivation rec {
+  name = "intltool-${version}";
+  version = "0.51.0";
+
+  src = fetchurl {
+    url = "https://launchpad.net/intltool/trunk/${version}/+download/${name}.tar.gz";
+    sha256 = "1karx4sb7bnm2j67q0q74hspkfn6lqprpy5r99vkn5bb36a4viv7";
+  };
+
+  # fix "unescaped left brace" errors when using intltool in some cases
+  patches = [(fetchpatch {
+    name = "perl5.26-regex-fixes.patch";
+    url = "https://sources.debian.org/data/main/i/intltool/0.51.0-5"
+      + "/debian/patches/perl5.26-regex-fixes.patch";
+    sha256 = "12q2140867r5d0dysly72khi7b0mm2gd7nlm1k81iyg7fxgnyz45";
+  })];
+
+  propagatedBuildInputs = [ gettext ] ++ (with perlPackages; [ perl XMLParser ]);
+
+  meta = with stdenv.lib; {
+    description = "Translation helper tool";
+    homepage = https://launchpad.net/intltool/;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/iozone/default.nix b/nixpkgs/pkgs/development/tools/misc/iozone/default.nix
new file mode 100644
index 000000000000..1d5da65df7e0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/iozone/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl, gnuplot }:
+
+let
+  target = if stdenv.hostPlatform.system == "i686-linux" then
+    "linux"
+  else if stdenv.hostPlatform.system == "x86_64-linux" then
+    "linux-AMD64"
+  else if stdenv.hostPlatform.system == "x86_64-darwin" then
+    "macosx"
+  else if stdenv.hostPlatform.system == "aarch64-linux" then
+    "linux-arm"
+  else throw "Platform ${stdenv.hostPlatform.system} not yet supported.";
+in
+
+stdenv.mkDerivation rec {
+  name = "iozone-3.471";
+
+  src = fetchurl {
+    url = http://www.iozone.org/src/current/iozone3_471.tar;
+    sha256 = "0w63b3d4ws1sm52lpdd08sl7n4ay438dl3wy0q9la12iq81rglid";
+  };
+
+  license = fetchurl {
+    url = http://www.iozone.org/docs/Iozone_License.txt;
+    sha256 = "1309sl1rqm8p9gll3z8zfygr2pmbcvzw5byf5ba8y12avk735zrv";
+  };
+
+  preBuild = "pushd src/current";
+  postBuild = "popd";
+
+  buildFlags = target;
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/doc,libexec,share/man/man1}
+    install docs/iozone.1 $out/share/man/man1/
+    install docs/Iozone_ps.gz $out/share/doc/
+    install -s src/current/{iozone,fileop,pit_server} $out/bin/
+    install src/current/{gnu3d.dem,Generate_Graphs,gengnuplot.sh} $out/libexec/
+    ln -s $out/libexec/Generate_Graphs $out/bin/iozone_generate_graphs
+    # License copy is mandated by the license, but it's not in the tarball.
+    install ${license} $out/share/doc/Iozone_License.txt
+  '';
+
+  preFixup = ''
+    sed -i "1i#! $shell" $out/libexec/Generate_Graphs
+    substituteInPlace $out/libexec/Generate_Graphs \
+      --replace ./gengnuplot.sh $out/libexec/gengnuplot.sh \
+      --replace 'gnuplot ' "${gnuplot}/bin/gnuplot " \
+      --replace gnu3d.dem $out/libexec/gnu3d.dem
+  '';
+
+  meta = {
+    description = "IOzone Filesystem Benchmark";
+    homepage    = http://www.iozone.org/;
+    license     = stdenv.lib.licenses.unfreeRedistributable;
+    platforms   = ["i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux" ];
+    maintainers = with stdenv.lib.maintainers; [ Baughn makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/itstool/default.nix b/nixpkgs/pkgs/development/tools/misc/itstool/default.nix
new file mode 100644
index 000000000000..9368a3c1acf8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/itstool/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, python2, libxml2Python }:
+# We need the same Python as is used to build libxml2Python
+
+stdenv.mkDerivation rec {
+  # 2.0.3+ breaks the build of gnome3.gnome-desktop
+  # https://github.com/itstool/itstool/issues/17
+  name = "itstool-2.0.2";
+
+  src = fetchurl {
+    url = "http://files.itstool.org/itstool/${name}.tar.bz2";
+    sha256 = "bf909fb59b11a646681a8534d5700fec99be83bb2c57badf8c1844512227033a";
+  };
+
+  buildInputs = [ python2 libxml2Python ];
+
+  patchPhase =
+    ''
+      sed -e '/import libxml2/i import sys\
+      sys.path.append("${libxml2Python}/lib/${python2.libPrefix}/site-packages")' \
+      -i itstool.in
+    '';
+
+  meta = {
+    homepage = http://itstool.org/;
+    description = "XML to PO and back again";
+    license = stdenv.lib.licenses.gpl3Plus;
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/jscoverage/default.nix b/nixpkgs/pkgs/development/tools/misc/jscoverage/default.nix
new file mode 100644
index 000000000000..af660561ee17
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/jscoverage/default.nix
@@ -0,0 +1,52 @@
+{ autoconf, fetchurl, makedepend, perl, python, stdenv, unzip, zip }:
+
+stdenv.mkDerivation rec {
+  name = "jscoverage-0.5.1";
+
+  src = fetchurl {
+    url = "https://siliconforks.com/jscoverage/download/${name}.tar.bz2";
+    sha256 = "c45f051cec18c10352f15f9844f47e37e8d121d5fd16680e2dd0f3b4420eb7f4";
+  };
+
+  patches = [
+    ./jsfalse_to_null.patch
+  ];
+
+  buildInputs = [ autoconf makedepend perl python unzip zip ];
+
+  # It works without MOZ_FIX_LINK_PATHS, circumventing an impurity
+  # issue.  Maybe we could kick js/ (spidermonkey) completely and
+  # instead use our spidermonkey via nix.
+  preConfigure = ''
+  sed -i 's/^MOZ_FIX_LINK_PATHS=.*$/MOZ_FIX_LINK_PATHS=""/' ./js/configure
+  '';
+
+  meta = {
+    description = "Code coverage for JavaScript";
+
+    longDescription = ''
+    JSCoverage is a tool that measures code coverage for JavaScript
+    programs.
+
+    Code coverage statistics show which lines of a program have been
+    executed (and which have been missed). This information is useful
+    for constructing comprehensive test suites (hence, it is often
+    called test coverage).
+
+    JSCoverage works by instrumenting the JavaScript code used in web
+    pages. Code coverage statistics are collected while the
+    instrumented JavaScript code is executed in a web browser.
+
+    JSCoverage supports the complete language syntax described in the
+    ECMAScript Language Specification (ECMA-262, 3rd
+    edition). JSCoverage works with any modern standards-compliant web
+    browser - including Internet Explorer (IE 6, 7, and 8), Firefox,
+    Opera, Safari, and Google Chrome - on Microsoft Windows and
+    GNU/Linux.
+    '';
+
+    homepage = http://siliconforks.com/jscoverage/;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/jscoverage/jsfalse_to_null.patch b/nixpkgs/pkgs/development/tools/misc/jscoverage/jsfalse_to_null.patch
new file mode 100644
index 000000000000..b49594964e1f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/jscoverage/jsfalse_to_null.patch
@@ -0,0 +1,26 @@
+diff --git i/js/jsstr.cpp w/js/jsstr.cpp
+index e662bf1..b18597e 100644
+--- i/js/jsstr.cpp
++++ w/js/jsstr.cpp
+@@ -3040,7 +3040,7 @@ js_InitStringClass(JSContext *cx, JSObject *obj)
+                                  JSVAL_VOID, NULL, NULL,
+                                  JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_SHARED, 0, 0,
+                                  NULL)) {
+-        return JS_FALSE;
++        return NULL;
+     }
+ 
+     return proto;
+diff --git i/js/jsxml.cpp w/js/jsxml.cpp
+index 5621ede..e00c97d 100644
+--- i/js/jsxml.cpp
++++ w/js/jsxml.cpp
+@@ -303,7 +303,7 @@ NewXMLNamespace(JSContext *cx, JSString *prefix, JSString *uri, JSBool declared)
+ 
+     obj = js_NewObject(cx, &js_NamespaceClass.base, NULL, NULL);
+     if (!obj)
+-        return JS_FALSE;
++        return NULL;
+     JS_ASSERT(JSVAL_IS_VOID(obj->fslots[JSSLOT_PREFIX]));
+     JS_ASSERT(JSVAL_IS_VOID(obj->fslots[JSSLOT_URI]));
+     JS_ASSERT(JSVAL_IS_VOID(obj->fslots[JSSLOT_DECLARED]));
diff --git a/nixpkgs/pkgs/development/tools/misc/kconfig-frontends/default.nix b/nixpkgs/pkgs/development/tools/misc/kconfig-frontends/default.nix
new file mode 100644
index 000000000000..e33259b416fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/kconfig-frontends/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, pkgconfig, bison, flex, gperf, ncurses, pythonPackages }:
+
+stdenv.mkDerivation rec {
+  basename = "kconfig-frontends";
+  version = "4.11.0.1";
+  name = "${basename}-${version}";
+
+  src = fetchurl {
+    sha256 = "1xircdw3k7aaz29snf96q2fby1cs48bidz5l1kkj0a5gbivw31i3";
+    url = "http://ymorin.is-a-geek.org/download/${basename}/${name}.tar.xz";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ bison flex gperf ncurses pythonPackages.python pythonPackages.wrapPython ];
+
+  configureFlags = [
+    "--enable-frontends=conf,mconf,nconf"
+  ];
+
+  postInstall = ''
+    wrapPythonPrograms
+  '';
+
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.cc.isClang "-Wno-error=format-security";
+
+  meta = with stdenv.lib; {
+    description = "Out of Linux tree packaging of the kconfig infrastructure";
+    longDescription = ''
+      Configuration language and system for the Linux kernel and other
+      projects. Features simple syntax and grammar, limited yet adequate option
+      types, simple organization of options, and direct and reverse
+      dependencies.
+    '';
+    homepage = http://ymorin.is-a-geek.org/projects/kconfig-frontends;
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ mbe ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/kdbg/default.nix b/nixpkgs/pkgs/development/tools/misc/kdbg/default.nix
new file mode 100644
index 000000000000..b431e804d8dc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/kdbg/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, cmake, extra-cmake-modules, qt5,
+  ki18n, kconfig, kiconthemes, kxmlgui, kwindowsystem,
+}:
+
+stdenv.mkDerivation rec {
+  name = "kdbg-${version}";
+  version = "3.0.0";
+  src = fetchurl {
+    url = "mirror://sourceforge/kdbg/${version}/${name}.tar.gz";
+    sha256 = "0lxfal6jijdcrf0hc81gmapfmz0kq4569d5qzfm4p72rq9s4r5in";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+  buildInputs = [ qt5.qtbase ki18n kconfig kiconthemes kxmlgui kwindowsystem ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://www.kdbg.org/;
+    description = ''
+      A graphical user interface to gdb, the GNU debugger. It provides an
+      intuitive interface for setting breakpoints, inspecting variables, and
+      stepping through code.
+    '';
+    license = licenses.gpl2;
+    maintainers = [ maintainers.catern ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/kibana/5.x.nix b/nixpkgs/pkgs/development/tools/misc/kibana/5.x.nix
new file mode 100644
index 000000000000..782bff68e349
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/kibana/5.x.nix
@@ -0,0 +1,45 @@
+{ stdenv, makeWrapper, fetchurl, elk5Version, nodejs, coreutils, which }:
+
+with stdenv.lib;
+let
+  inherit (builtins) elemAt;
+  archOverrides = {
+    "i686" = "x86";
+  };
+  info = splitString "-" stdenv.hostPlatform.system;
+  arch = (elemAt info 0);
+  elasticArch = archOverrides."${arch}" or arch;
+  plat = elemAt info 1;
+  shas = {
+    "x86_64-linux"  = "0hzr47hyw54b9j4c33n6f6n3pala6kjhyvinfszgikbghyhb7fsa";
+    "i686-linux"    = "0bka4h31cw10ii4pfygc81pwc3wr32pzw3v4k4bi8rnqbk280fmn";
+    "x86_64-darwin" = "0jqc2g89rqkla0alqxr14sh4pccfn514jrwr7mkjivxdapygh1ll";
+  };
+in stdenv.mkDerivation rec {
+  name = "kibana-${version}";
+  version = elk5Version;
+
+  src = fetchurl {
+    url = "https://artifacts.elastic.co/downloads/kibana/${name}-${plat}-${elasticArch}.tar.gz";
+    sha256 = shas."${stdenv.hostPlatform.system}" or (throw "Unknown architecture");
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/libexec/kibana $out/bin
+    mv * $out/libexec/kibana/
+    rm -r $out/libexec/kibana/node
+    makeWrapper $out/libexec/kibana/bin/kibana $out/bin/kibana \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ nodejs coreutils which ]}"
+    sed -i 's@NODE=.*@NODE=${nodejs}/bin/node@' $out/libexec/kibana/bin/kibana
+  '';
+
+  meta = {
+    description = "Visualize logs and time-stamped data";
+    homepage = http://www.elasticsearch.org/overview/kibana;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ offline rickynils ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/kibana/6.x.nix b/nixpkgs/pkgs/development/tools/misc/kibana/6.x.nix
new file mode 100644
index 000000000000..e11dd5040b09
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/kibana/6.x.nix
@@ -0,0 +1,64 @@
+{ elk6Version
+, enableUnfree ? true
+, stdenv
+, makeWrapper
+, fetchzip
+, fetchurl
+, nodejs-10_x
+, coreutils
+, which
+}:
+
+with stdenv.lib;
+let
+  nodejs = nodejs-10_x;
+  inherit (builtins) elemAt;
+  info = splitString "-" stdenv.hostPlatform.system;
+  arch = elemAt info 0;
+  plat = elemAt info 1;
+  shas =
+    if enableUnfree
+    then {
+      "x86_64-linux"  = "1i3zmzxihplwd8n994lfxhhgygdg3qxjqgrj1difa8w3vss0zbfn";
+      "x86_64-darwin" = "09a96ms9id77infxd9xxfs6r7j01mn0rz5yw3g9sl92j9ri7r52c";
+    }
+    else {
+      "x86_64-linux"  = "166rhxr0qlv1yarj2mg1c3b8mxvhl70jhz53azq7ic6laj55q7fk";
+      "x86_64-darwin" = "0ngngkbl036p2mzwhp8qafi3aqzk398a218w12srfqny5n630vdk";
+    };
+
+in stdenv.mkDerivation rec {
+  name = "kibana-${optionalString (!enableUnfree) "oss-"}${version}";
+  version = elk6Version;
+
+  src = fetchurl {
+    url = "https://artifacts.elastic.co/downloads/kibana/${name}-${plat}-${arch}.tar.gz";
+    sha256 = shas."${stdenv.hostPlatform.system}" or (throw "Unknown architecture");
+  };
+
+  patches = [
+    # Kibana specifies it specifically needs nodejs 10.15.2 but nodejs in nixpkgs is at 10.15.3.
+    # The <nixpkgs/nixos/tests/elk.nix> test succeeds with this newer version so lets just
+    # disable the version check.
+    ./disable-nodejs-version-check.patch
+  ];
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/libexec/kibana $out/bin
+    mv * $out/libexec/kibana/
+    rm -r $out/libexec/kibana/node
+    makeWrapper $out/libexec/kibana/bin/kibana $out/bin/kibana \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ nodejs coreutils which ]}"
+    sed -i 's@NODE=.*@NODE=${nodejs}/bin/node@' $out/libexec/kibana/bin/kibana
+  '';
+
+  meta = {
+    description = "Visualize logs and time-stamped data";
+    homepage = http://www.elasticsearch.org/overview/kibana;
+    license = if enableUnfree then licenses.elastic else licenses.asl20;
+    maintainers = with maintainers; [ offline rickynils basvandijk ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/kibana/7.x.nix b/nixpkgs/pkgs/development/tools/misc/kibana/7.x.nix
new file mode 100644
index 000000000000..0c3dd9f12c28
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/kibana/7.x.nix
@@ -0,0 +1,64 @@
+{ elk7Version
+, enableUnfree ? true
+, stdenv
+, makeWrapper
+, fetchzip
+, fetchurl
+, nodejs-10_x
+, coreutils
+, which
+}:
+
+with stdenv.lib;
+let
+  nodejs = nodejs-10_x;
+  inherit (builtins) elemAt;
+  info = splitString "-" stdenv.hostPlatform.system;
+  arch = elemAt info 0;
+  plat = elemAt info 1;
+  shas =
+    if enableUnfree
+    then {
+      "x86_64-linux"  = "1mzycd0ljnkslz9p9jhq279bkpk35r7svhngxjnmsh11ampsvxb8";
+      "x86_64-darwin" = "1bz409njdpmsagh5dg062114wpa96w7pmxwfjsizwksqyyjdwdv7";
+    }
+    else {
+      "x86_64-linux"  = "1x3gjc9xa03m4jfnl5vjxigzcnb8ysnhxgd8618v85x4l0010v38";
+      "x86_64-darwin" = "1nsbmrswv2jv2z7686i2sf6rrmxysbqi5ih6jjrbrqnk64xi18j2";
+    };
+
+in stdenv.mkDerivation rec {
+  name = "kibana-${optionalString (!enableUnfree) "oss-"}${version}";
+  version = elk7Version;
+
+  src = fetchurl {
+    url = "https://artifacts.elastic.co/downloads/kibana/${name}-${plat}-${arch}.tar.gz";
+    sha256 = shas."${stdenv.hostPlatform.system}" or (throw "Unknown architecture");
+  };
+
+  patches = [
+    # Kibana specifies it specifically needs nodejs 10.15.2 but nodejs in nixpkgs is at 10.15.3.
+    # The <nixpkgs/nixos/tests/elk.nix> test succeeds with this newer version so lets just
+    # disable the version check.
+    ./disable-nodejs-version-check.patch
+  ];
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/libexec/kibana $out/bin
+    mv * $out/libexec/kibana/
+    rm -r $out/libexec/kibana/node
+    makeWrapper $out/libexec/kibana/bin/kibana $out/bin/kibana \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ nodejs coreutils which ]}"
+    sed -i 's@NODE=.*@NODE=${nodejs}/bin/node@' $out/libexec/kibana/bin/kibana
+  '';
+
+  meta = {
+    description = "Visualize logs and time-stamped data";
+    homepage = http://www.elasticsearch.org/overview/kibana;
+    license = if enableUnfree then licenses.elastic else licenses.asl20;
+    maintainers = with maintainers; [ offline rickynils basvandijk ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/kibana/disable-nodejs-version-check.patch b/nixpkgs/pkgs/development/tools/misc/kibana/disable-nodejs-version-check.patch
new file mode 100644
index 000000000000..12a81566a72c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/kibana/disable-nodejs-version-check.patch
@@ -0,0 +1,19 @@
+diff -Naur a/src/setup_node_env/node_version_validator.js b/src/setup_node_env/node_version_validator.js
+--- a/src/setup_node_env/node_version_validator.js	2018-11-16 03:28:42.000000000 +0100
++++ b/src/setup_node_env/node_version_validator.js	2018-12-01 12:19:48.238337176 +0100
+@@ -26,7 +26,7 @@
+ var currentVersion = process && process.version || null;
+ var rawRequiredVersion = pkg && pkg.engines && pkg.engines.node || null;
+ var requiredVersion = rawRequiredVersion ? 'v' + rawRequiredVersion : rawRequiredVersion;
+-var isVersionValid = !!currentVersion && !!requiredVersion && currentVersion === requiredVersion;
++var isVersionValid = !!currentVersion && !!requiredVersion;
+ 
+ // Validates current the NodeJS version compatibility when Kibana starts.
+ if (!isVersionValid) {
+@@ -35,4 +35,4 @@
+   // Actions to apply when validation fails: error report + exit.
+   console.error(errorMessage);
+   process.exit(1);
+-}
+\ No newline at end of file
++}
diff --git a/nixpkgs/pkgs/development/tools/misc/libtool/default.nix b/nixpkgs/pkgs/development/tools/misc/libtool/default.nix
new file mode 100644
index 000000000000..f56a59c42704
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/libtool/default.nix
@@ -0,0 +1,36 @@
+{stdenv, fetchurl, m4, perl}:
+
+stdenv.mkDerivation rec {
+  name = "libtool-1.5.26";
+
+  src = fetchurl {
+    url = "mirror://gnu/libtool/${name}.tar.gz";
+    sha256 = "029ggq5kri1gjn6nfqmgw4w920gyfzscjjxbsxxidal5zqsawd8w";
+  };
+
+  nativeBuildInputs = [m4];
+  buildInputs = [perl];
+
+  # Don't fixup "#! /bin/sh" in Libtool, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  meta = {
+    description = "Generic library support script";
+
+    longDescription = ''
+      GNU libtool is a generic library support script.  Libtool hides
+      the complexity of using shared libraries behind a consistent,
+      portable interface.
+
+      To use libtool, add the new generic library building commands to
+      your Makefile, Makefile.in, or Makefile.am.  See the
+      documentation for details.
+    '';
+
+    homepage = https://www.gnu.org/software/libtool/;
+
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/libtool/libtool2.nix b/nixpkgs/pkgs/development/tools/misc/libtool/libtool2.nix
new file mode 100644
index 000000000000..0fb3dfed7445
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/libtool/libtool2.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchurl, m4, perl, help2man
+}:
+
+stdenv.mkDerivation rec {
+  name = "libtool-2.4.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/libtool/${name}.tar.gz";
+    sha256 = "1qq61k6lp1fp75xs398yzi6wvbx232l7xbyn3p13cnh27mflvgg3";
+  };
+
+  outputs = [ "out" "lib" ];
+
+  nativeBuildInputs = [ perl help2man m4 ];
+  propagatedBuildInputs = [ m4 ];
+
+  # Don't fixup "#! /bin/sh" in Libtool, otherwise it will use the
+  # "fixed" path in generated files!
+  dontPatchShebangs = true;
+
+  # XXX: The GNU ld wrapper does all sorts of nasty things wrt. RPATH, which
+  # leads to the failure of a number of tests.
+  doCheck = false;
+  doInstallCheck = false;
+
+  # Don't run the native `strip' when cross-compiling.  This breaks at least
+  # with `.a' files for MinGW.
+  dontStrip = stdenv.hostPlatform != stdenv.buildPlatform;
+
+  meta = {
+    description = "GNU Libtool, a generic library support script";
+
+    longDescription = ''
+      GNU libtool is a generic library support script.  Libtool hides
+      the complexity of using shared libraries behind a consistent,
+      portable interface.
+
+      To use libtool, add the new generic library building commands to
+      your Makefile, Makefile.in, or Makefile.am.  See the
+      documentation for details.
+    '';
+
+    homepage = https://www.gnu.org/software/libtool/;
+
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    maintainers = [ ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/libwhich/default.nix b/nixpkgs/pkgs/development/tools/misc/libwhich/default.nix
new file mode 100644
index 000000000000..58aca8a8b5a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/libwhich/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "libwhich";
+  version = "2019-03-20";
+
+  src = fetchFromGitHub {
+    owner = "vtjnash";
+    repo = pname;
+    rev = "b348872107c77cba50b60475aa8ce2ddba86aac0";
+    sha256 = "0fd8hsdc9b9v83j89mxvisgrz77q9rlxnbzd6j63wq66h95r02r9";
+  };
+
+  installPhase = ''
+    install -Dm755 -t $out/bin libwhich
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Like `which`, for dynamic libraries";
+    homepage = https://github.com/vtjnash/libwhich;
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/linuxkit/default.nix b/nixpkgs/pkgs/development/tools/misc/linuxkit/default.nix
new file mode 100644
index 000000000000..27f49ebcf38c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/linuxkit/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "linuxkit-${version}";
+  version = "2017-07-08";
+  rev = "8ca19a84d5281b1b15c7a48c21e5786943b47f1c";
+
+  goPackagePath = "github.com/linuxkit/linuxkit";
+
+  src = fetchFromGitHub {
+    owner = "linuxkit";
+    repo = "linuxkit";
+    inherit rev;
+    sha256 = "150y7hnjhi81iik7np27y5466ldaackq72mpi7vmybbl7vr1wgw4";
+  };
+
+  subPackages = [ "src/cmd/linuxkit" ];
+
+  preBuild = ''
+    buildFlagsArray+=("-ldflags" "-X main.GitCommit=${builtins.substring 0 7 rev} -X main.Version=0.0.0")
+  '';
+
+  meta = {
+    description = "A toolkit for building secure, portable and lean operating systems for containers";
+    license = lib.licenses.asl20;
+    homepage = https://github.com/linuxkit/linuxkit;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/lit/default.nix b/nixpkgs/pkgs/development/tools/misc/lit/default.nix
new file mode 100644
index 000000000000..c4164b414331
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lit/default.nix
@@ -0,0 +1,21 @@
+{ lib, python2 }:
+
+python2.pkgs.buildPythonApplication rec {
+  pname = "lit";
+  version = "0.8.0";
+
+  src = python2.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "0lwx1w1vk3a0pc237chwycl8qc6lwq8bzf13036wnmk74m9kwi7c";
+  };
+
+  # Non-standard test suite. Needs custom checkPhase.
+  doCheck = false;
+
+  meta = {
+    description = "Portable tool for executing LLVM and Clang style test suites";
+    homepage = http://llvm.org/docs/CommandGuide/lit.html;
+    license = lib.licenses.ncsa;
+    maintainers = with lib.maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/loccount/default.nix b/nixpkgs/pkgs/development/tools/misc/loccount/default.nix
new file mode 100644
index 000000000000..240d52ca7d0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/loccount/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, buildGoPackage, fetchFromGitLab }:
+buildGoPackage rec {
+  name = "loccount-${version}";
+  version = "1.2";
+
+  goPackagePath = "gitlab.com/esr/loccount";
+  excludedPackages = "tests";
+
+  src = fetchFromGitLab {
+    owner = "esr";
+    repo = "loccount";
+    rev = version;
+    sha256 = "18z7ai7wy2k9yd3w65d37apfqs3h9bc2c15y7v1bydppi44zfsdk";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Re-implementation of sloccount in Go";
+    longDescription = ''
+      loccount is a re-implementation of David A. Wheeler's sloccount tool
+      in Go.  It is faster and handles more different languages. Because
+      it's one source file in Go, it is easier to maintain and extend than the
+      multi-file, multi-language implementation of the original.
+
+      The algorithms are largely unchanged and can be expected to produce
+      identical numbers for languages supported by both tools.  Python is
+      an exception; loccount corrects buggy counting of single-quote multiline
+      literals in sloccount 2.26.
+    '';
+    homepage="https://gitlab.com/esr/loccount";
+    downloadPage="https://gitlab.com/esr/loccount/tree/master";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ calvertvl ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/lsof/darwin-dfile.patch b/nixpkgs/pkgs/development/tools/misc/lsof/darwin-dfile.patch
new file mode 100644
index 000000000000..9952228e613a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lsof/darwin-dfile.patch
@@ -0,0 +1,12 @@
+diff -Naur a/dialects/darwin/libproc/dfile.c b/dialects/darwin/libproc/dfile.c
+--- a/dialects/darwin/libproc/dfile.c	2018-02-14 09:28:06.000000000 -0500
++++ b/dialects/darwin/libproc/dfile.c	2018-04-16 18:52:40.828715293 -0400
+@@ -43,7 +43,7 @@
+ #include "lsof.h"
+ 
+ #if	defined(PROC_FP_GUARDED)
+-#extern	struct pff_tab	Pgf_tab[];
++extern	struct pff_tab	Pgf_tab[];
+ #endif	/* defined(PROC_FP_GUARDED) */
+ 
+ 
diff --git a/nixpkgs/pkgs/development/tools/misc/lsof/default.nix b/nixpkgs/pkgs/development/tools/misc/lsof/default.nix
new file mode 100644
index 000000000000..63003f338eb9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lsof/default.nix
@@ -0,0 +1,66 @@
+{ stdenv, fetchurl, buildPackages, ncurses }:
+
+let dialect = with stdenv.lib; last (splitString "-" stdenv.hostPlatform.system); in
+
+stdenv.mkDerivation rec {
+  name = "lsof-${version}";
+  version = "4.91";
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  buildInputs = [ ncurses ];
+
+  src = fetchurl {
+    urls = ["https://fossies.org/linux/misc/lsof_${version}.tar.bz2"] ++ # Mirrors seem to be down...
+      ["ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_${version}.tar.bz2"]
+      ++ map (
+        # the tarball is moved after new version is released
+        isOld: "ftp://sunsite.ualberta.ca/pub/Mirror/lsof/"
+        + "${stdenv.lib.optionalString isOld "OLD/"}lsof_${version}.tar.bz2"
+      ) [ false true ]
+      ++ map (
+        # the tarball is moved after new version is released
+        isOld: "http://www.mirrorservice.org/sites/lsof.itap.purdue.edu/pub/tools/unix/lsof/"
+        + "${stdenv.lib.optionalString isOld "OLD/"}lsof_${version}.tar.bz2"
+      ) [ false true ]
+      ;
+    sha256 = "18sh4hbl9jw2szkf0gvgan8g13f3g4c6s2q9h3zq5gsza9m99nn9";
+  };
+
+  unpackPhase = "tar xvjf $src; cd lsof_*; tar xvf lsof_*.tar; sourceRoot=$( echo lsof_*/); ";
+
+  patches = [ ./no-build-info.patch ] ++ stdenv.lib.optional stdenv.isDarwin ./darwin-dfile.patch;
+
+  postPatch = stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
+    substituteInPlace dialects/linux/dlsof.h --replace "defined(__UCLIBC__)" 1
+  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+    sed -i 's|lcurses|lncurses|g' Configure
+  '';
+
+  # Stop build scripts from searching global include paths
+  LSOF_INCLUDE = "${stdenv.lib.getDev stdenv.cc.libc}/include";
+  configurePhase = "LINUX_CONF_CC=$CC_FOR_BUILD LSOF_CC=$CC LSOF_AR=\"$AR cr\" LSOF_RANLIB=$RANLIB ./Configure -n ${dialect}";
+  preBuild = ''
+    for filepath in $(find dialects/${dialect} -type f); do
+      sed -i "s,/usr/include,$LSOF_INCLUDE,g" $filepath
+    done
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/man/man8
+    cp lsof.8 $out/man/man8/
+    cp lsof $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://people.freebsd.org/~abe/;
+    description = "A tool to list open files";
+    longDescription = ''
+      List open files. Can show what process has opened some file,
+      socket (IPv6/IPv4/UNIX local), or partition (by opening a file
+      from it).
+    '';
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.unix;
+    license = licenses.purdueBsd;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/lsof/no-build-info.patch b/nixpkgs/pkgs/development/tools/misc/lsof/no-build-info.patch
new file mode 100644
index 000000000000..cf785e248f2a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lsof/no-build-info.patch
@@ -0,0 +1,43 @@
+diff -ru -x '*~' lsof_4.91_src-orig/usage.c lsof_4.91_src/usage.c
+--- lsof_4.91_src-orig/usage.c	2018-02-14 15:20:32.000000000 +0100
++++ lsof_4.91_src/usage.c	2018-10-08 21:57:45.718560869 +0200
+@@ -930,26 +930,6 @@
+ 		(void) fprintf(stderr, "    configuration info: %s\n", cp);
+ #endif	/* defined(LSOF_CINFO) */
+ 
+-	    if ((cp = isnullstr(LSOF_CCDATE)))
+-		(void) fprintf(stderr, "    constructed: %s\n", cp);
+-	    cp = isnullstr(LSOF_HOST);
+-	    if (!(cp1 = isnullstr(LSOF_LOGNAME)))
+-		cp1 = isnullstr(LSOF_USER);
+-	    if (cp || cp1) {
+-		if (cp && cp1)
+-		    cp2 = "by and on";
+-		else if (cp)
+-		    cp2 = "on";
+-		else
+-		    cp2 = "by";
+-		(void) fprintf(stderr, "    constructed %s: %s%s%s\n",
+-		    cp2,
+-		    cp1 ? cp1 : "",
+-		    (cp && cp1) ? "@" : "",
+-		    cp  ? cp  : ""
+-		);
+-	    }
+-
+ #if	defined(LSOF_BLDCMT)
+ 	    if ((cp = isnullstr(LSOF_BLDCMT)))
+ 		(void) fprintf(stderr, "    builder's comment: %s\n", cp);
+@@ -959,12 +939,8 @@
+ 		(void) fprintf(stderr, "    compiler: %s\n", cp);
+ 	    if ((cp = isnullstr(LSOF_CCV)))
+ 		(void) fprintf(stderr, "    compiler version: %s\n", cp);
+-	    if ((cp = isnullstr(LSOF_CCFLAGS)))
+-		(void) fprintf(stderr, "    compiler flags: %s\n", cp);
+ 	    if ((cp = isnullstr(LSOF_LDFLAGS)))
+ 		(void) fprintf(stderr, "    loader flags: %s\n", cp);
+-	    if ((cp = isnullstr(LSOF_SYSINFO)))
+-		(void) fprintf(stderr, "    system info: %s\n", cp);
+ 	    (void) report_SECURITY("    ", ".\n");
+ 	    (void) report_WARNDEVACCESS("    ", "are", ".\n");
+ 	    (void) report_HASKERNIDCK("    K", "is");
diff --git a/nixpkgs/pkgs/development/tools/misc/ltrace/default.nix b/nixpkgs/pkgs/development/tools/misc/ltrace/default.nix
new file mode 100644
index 000000000000..77d4c5771f90
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ltrace/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, elfutils, libunwind }:
+
+stdenv.mkDerivation rec {
+  name = "ltrace-0.7.3";
+
+  src = fetchurl {
+    url = mirror://debian/pool/main/l/ltrace/ltrace_0.7.3.orig.tar.bz2;
+    sha256 = "00wmbdghqbz6x95m1mcdd3wd46l6hgcr4wggdp049dbifh3qqvqf";
+  };
+
+  buildInputs = [ elfutils libunwind ];
+
+  prePatch = let
+      debian = fetchurl {
+        url = mirror://debian/pool/main/l/ltrace/ltrace_0.7.3-6.debian.tar.xz;
+        sha256 = "0xc4pfd8qw53crvdxr29iwl8na53zmknca082kziwpvlzsick4kp";
+      };
+    in ''
+      tar xf '${debian}'
+      patches="$patches $(cat debian/patches/series | sed 's|^|debian/patches/|')"
+    '';
+
+  meta = with stdenv.lib; {
+    description = "Library call tracer";
+    homepage = https://www.ltrace.org/;
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/lttng-tools/default.nix b/nixpkgs/pkgs/development/tools/misc/lttng-tools/default.nix
new file mode 100644
index 000000000000..b671a27ac747
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lttng-tools/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, pkgconfig, popt, libuuid, liburcu, lttng-ust, kmod, libxml2 }:
+
+stdenv.mkDerivation rec {
+  name = "lttng-tools-${version}";
+  version = "2.10.6";
+
+  src = fetchurl {
+    url = "https://lttng.org/files/lttng-tools/${name}.tar.bz2";
+    sha256 = "0z2kh6svszi332012id373bjwzcmzj6fks993f6yi35zpqmzapgh";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ popt libuuid liburcu lttng-ust libxml2 kmod ];
+
+  meta = with stdenv.lib; {
+    description = "Tracing tools (kernel + user space) for Linux";
+    homepage = https://lttng.org/;
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/lttng-ust/default.nix b/nixpkgs/pkgs/development/tools/misc/lttng-ust/default.nix
new file mode 100644
index 000000000000..27c8f609d5d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lttng-ust/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, liburcu, python }:
+
+# NOTE:
+#   ./configure ...
+#   [...]
+#   LTTng-UST will be built with the following options:
+#
+#   Java support (JNI): Disabled
+#   sdt.h integration:  Disabled
+#   [...]
+#
+# Debian builds with std.h (systemtap).
+
+stdenv.mkDerivation rec {
+  name = "lttng-ust-${version}";
+  version = "2.10.3";
+
+  src = fetchurl {
+    url = "https://lttng.org/files/lttng-ust/${name}.tar.bz2";
+    sha256 = "0aw580xx6x9hgbxrzil7yqv12j8yvi5d9iibldx3z5jz1pwj114y";
+  };
+
+  buildInputs = [ python ];
+
+  preConfigure = ''
+    patchShebangs .
+  '';
+  
+  propagatedBuildInputs = [ liburcu ];
+
+  meta = with stdenv.lib; {
+    description = "LTTng Userspace Tracer libraries";
+    homepage = https://lttng.org/;
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/lttv/default.nix b/nixpkgs/pkgs/development/tools/misc/lttv/default.nix
new file mode 100644
index 000000000000..36a89726e81c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lttv/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, glib, gtk2, popt, babeltrace }:
+
+stdenv.mkDerivation rec {
+  name = "lttv-1.5";
+
+  src = fetchurl {
+    url = "https://lttng.org/files/packages/${name}.tar.bz2";
+    sha256 = "1faldxnh9dld5k0vxckwpqw241ya1r2zv286l6rpgqr500zqw7r1";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ glib gtk2 popt babeltrace ];
+
+  meta = with stdenv.lib; {
+    description = "Graphical trace viewer for LTTng trace files";
+    homepage = https://lttng.org/;
+    # liblttvtraceread (ltt/ directory) is distributed under the GNU LGPL v2.1.
+    # The rest of the LTTV package is distributed under the GNU GPL v2.
+    license = with licenses; [ gpl2 lgpl21 ];
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/luarocks/darwin.patch b/nixpkgs/pkgs/development/tools/misc/luarocks/darwin.patch
new file mode 100644
index 000000000000..a5e4ac461b48
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/luarocks/darwin.patch
@@ -0,0 +1,27 @@
+diff --git a/src/luarocks/core/cfg.lua b/src/luarocks/core/cfg.lua
+index f93e67a..2eb2db9 100644
+--- a/src/luarocks/core/cfg.lua
++++ b/src/luarocks/core/cfg.lua
+@@ -425,9 +425,9 @@ local function make_defaults(lua_version, target_cpu, platforms, home)
+       defaults.external_lib_extension = "dylib"
+       defaults.arch = "macosx-"..target_cpu
+       defaults.variables.LIBFLAG = "-bundle -undefined dynamic_lookup -all_load"
+-      defaults.variables.STAT = "/usr/bin/stat"
++      defaults.variables.STAT = "stat"
+       defaults.variables.STATFLAG = "-f '%A'"
+-      local version = util.popen_read("sw_vers -productVersion")
++      local version = "10.10"
+       version = tonumber(version and version:match("^[^.]+%.([^.]+)")) or 3
+       if version >= 10 then
+          version = 8
+@@ -436,8 +436,8 @@ local function make_defaults(lua_version, target_cpu, platforms, home)
+       else
+          defaults.gcc_rpath = false
+       end
+-      defaults.variables.CC = "env MACOSX_DEPLOYMENT_TARGET=10."..version.." gcc"
+-      defaults.variables.LD = "env MACOSX_DEPLOYMENT_TARGET=10."..version.." gcc"
++      defaults.variables.CC = "env MACOSX_DEPLOYMENT_TARGET=10."..version.." clang"
++      defaults.variables.LD = "env MACOSX_DEPLOYMENT_TARGET=10."..version.." clang"
+       defaults.web_browser = "open"
+    end
+ 
diff --git a/nixpkgs/pkgs/development/tools/misc/luarocks/default.nix b/nixpkgs/pkgs/development/tools/misc/luarocks/default.nix
new file mode 100644
index 000000000000..7edcb79388ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/luarocks/default.nix
@@ -0,0 +1,72 @@
+{stdenv, fetchurl
+, curl, makeWrapper, which, unzip
+, lua
+# for 'luarocks pack'
+, zip
+# some packages need to be compiled with cmake
+, cmake
+}:
+
+stdenv.mkDerivation rec {
+  pname = "luarocks";
+  version = "3.0.4";
+
+  src = fetchurl {
+    url="http://luarocks.org/releases/luarocks-${version}.tar.gz";
+    sha256="1pqfzwvjy8dzqg4fqjq2cgqcr00fgrdd7nwzxm7nqmawr83s6dhj";
+  };
+
+  patches = [ ./darwin.patch ];
+  preConfigure = ''
+    lua -e "" || {
+        luajit -e "" && {
+            export LUA_SUFFIX=jit
+            configureFlags="$configureFlags --lua-suffix=$LUA_SUFFIX"
+        }
+    }
+    lua_inc="$(echo "${lua}/include"/*/)"
+    if test -n "$lua_inc"; then
+        configureFlags="$configureFlags --with-lua-include=$lua_inc"
+    fi
+  '';
+
+  buildInputs = [
+    lua curl makeWrapper which
+  ];
+
+  postInstall = ''
+    sed -e "1s@.*@#! ${lua}/bin/lua$LUA_SUFFIX@" -i "$out"/bin/*
+    for i in "$out"/bin/*; do
+        test -L "$i" || {
+            wrapProgram "$i" \
+              --suffix LUA_PATH ";" "$(echo "$out"/share/lua/*/)?.lua" \
+              --suffix LUA_PATH ";" "$(echo "$out"/share/lua/*/)?/init.lua" \
+              --suffix LUA_CPATH ";" "$(echo "$out"/lib/lua/*/)?.so" \
+              --suffix LUA_CPATH ";" "$(echo "$out"/share/lua/*/)?/init.lua"
+        }
+    done
+  '';
+
+  propagatedBuildInputs = [ zip unzip cmake ];
+
+  # unpack hook for src.rock and rockspec files
+  setupHook = ./setup-hook.sh;
+
+  # cmake is just to compile packages with "cmake" buildType, not luarocks itself
+  dontUseCmakeConfigure = true;
+
+  shellHook = ''
+    export PATH="src/bin:''${PATH:-}"
+    export LUA_PATH="src/?.lua;''${LUA_PATH:-}"
+  '';
+
+  meta = with stdenv.lib; {
+    inherit version;
+    description = ''A package manager for Lua'';
+    license = licenses.mit ;
+    maintainers = with maintainers; [raskin teto];
+    platforms = platforms.linux ++ platforms.darwin;
+    downloadPage = "http://luarocks.org/releases/";
+    updateWalker = true;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/luarocks/default.upstream b/nixpkgs/pkgs/development/tools/misc/luarocks/default.upstream
new file mode 100644
index 000000000000..e69de1fe8895
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/luarocks/default.upstream
@@ -0,0 +1 @@
+url http://luarocks.org/releases/
diff --git a/nixpkgs/pkgs/development/tools/misc/luarocks/luarocks-nix.nix b/nixpkgs/pkgs/development/tools/misc/luarocks/luarocks-nix.nix
new file mode 100644
index 000000000000..d9f481425b62
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/luarocks/luarocks-nix.nix
@@ -0,0 +1,10 @@
+{ luarocks, fetchFromGitHub }:
+luarocks.overrideAttrs(old: {
+  pname = "luarocks-nix";
+  src = fetchFromGitHub {
+    owner = "teto";
+    repo = "luarocks";
+    rev = "595456f1246d66e5bdce0de838d0d6188274991c";
+    sha256 = "14nn0n5a0m516lnbwljy85h7y98zwnfbcyz7hgsm6fn4p8316yz2";
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/misc/luarocks/setup-hook.sh b/nixpkgs/pkgs/development/tools/misc/luarocks/setup-hook.sh
new file mode 100644
index 000000000000..587d5413c3ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/luarocks/setup-hook.sh
@@ -0,0 +1,16 @@
+unpackCmdHooks+=(_trySourceRock)
+unpackCmdHooks+=(_tryRockSpec)
+
+_tryRockSpec() {
+    if ! [[ "$curSrc" =~ \.rockspec$ ]]; then return 1; fi
+}
+
+_trySourceRock() {
+    if ! [[ "$curSrc" =~ \.src.rock$ ]]; then return 1; fi
+
+    # luarocks expects a clean <name>.rock.spec name to be the package name
+    # so we have to strip the hash
+    renamed="$(stripHash $curSrc)"
+    cp "$curSrc" "$renamed"
+    luarocks unpack --force "$renamed"
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/macdylibbundler/default.nix b/nixpkgs/pkgs/development/tools/misc/macdylibbundler/default.nix
new file mode 100644
index 000000000000..ebe62452440e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/macdylibbundler/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "macdylibbundler-${version}";
+  version = "20180825";
+
+  src = fetchFromGitHub {
+    owner = "auriamg";
+    repo = "macdylibbundler";
+    rev = "ce13cb585ead5237813b85e68fe530f085fc0a9e";
+    sha256 = "149p3dcnap4hs3nhq5rfvr3m70rrb5hbr5xkj1h0gsfp0d7gvxnj";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Utility to ease bundling libraries into executables for OSX";
+    longDescription = ''
+      dylibbundler is a small command-line programs that aims to make bundling
+      .dylibs as easy as possible. It automatically determines which dylibs are
+      needed by your program, copies these libraries inside the app bundle, and
+      fixes both them and the executable to be ready for distribution... all
+      this with a single command on the teminal! It will also work if your
+      program uses plug-ins that have dependencies too.
+    '';
+    homepage = https://github.com/auriamg/macdylibbundler;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.nomeata ];
+
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/md2man/default.nix b/nixpkgs/pkgs/development/tools/misc/md2man/default.nix
new file mode 100644
index 000000000000..23b7119e7d74
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/md2man/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+with lib;
+
+buildGoPackage rec {
+  name = "go-md2man-${version}";
+  version = "1.0.6";
+
+  goPackagePath = "github.com/cpuguy83/go-md2man";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "cpuguy83";
+    repo = "go-md2man";
+    sha256 = "1rm3zjrmfpzy0l3qp02xmd5pqzl77pdql9pbxhl0k1qw2vfzrjv6";
+  };
+
+  meta = {
+    description = "Go tool to convert markdown to man pages";
+    license = licenses.mit;
+    homepage = https://github.com/cpuguy83/go-md2man;
+    maintainers = with maintainers; [offline];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/mdl/.bundle/config b/nixpkgs/pkgs/development/tools/misc/mdl/.bundle/config
new file mode 100644
index 000000000000..d28c8337bc45
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mdl/.bundle/config
@@ -0,0 +1,3 @@
+---
+BUNDLE_PATH: "vendor/bundle"
+BUNDLE_CACHE_ALL: "true"
diff --git a/nixpkgs/pkgs/development/tools/misc/mdl/Gemfile b/nixpkgs/pkgs/development/tools/misc/mdl/Gemfile
new file mode 100644
index 000000000000..15b33c53a653
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mdl/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "mdl"
diff --git a/nixpkgs/pkgs/development/tools/misc/mdl/Gemfile.lock b/nixpkgs/pkgs/development/tools/misc/mdl/Gemfile.lock
new file mode 100644
index 000000000000..aabcd784d867
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mdl/Gemfile.lock
@@ -0,0 +1,21 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    kramdown (1.17.0)
+    mdl (0.5.0)
+      kramdown (~> 1.12, >= 1.12.0)
+      mixlib-cli (~> 1.7, >= 1.7.0)
+      mixlib-config (~> 2.2, >= 2.2.1)
+    mixlib-cli (1.7.0)
+    mixlib-config (2.2.18)
+      tomlrb
+    tomlrb (1.2.8)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  mdl
+
+BUNDLED WITH
+   1.16.3
diff --git a/nixpkgs/pkgs/development/tools/misc/mdl/default.nix b/nixpkgs/pkgs/development/tools/misc/mdl/default.nix
new file mode 100644
index 000000000000..f0aca5c36a15
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mdl/default.nix
@@ -0,0 +1,15 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "mdl";
+  gemdir = ./.;
+  exes = [ "mdl" ];
+
+  meta = with lib; {
+    description = "A tool to check markdown files and flag style issues";
+    homepage = https://github.com/markdownlint/markdownlint;
+    license = licenses.mit;
+    maintainers = with maintainers; [ gerschtli manveru ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/mdl/gemset.nix b/nixpkgs/pkgs/development/tools/misc/mdl/gemset.nix
new file mode 100644
index 000000000000..6d48be1cbcb0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mdl/gemset.nix
@@ -0,0 +1,54 @@
+{
+  kramdown = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n1c4jmrh5ig8iv1rw81s4mw4xsp4v97hvf8zkigv4hn5h542qjq";
+      type = "gem";
+    };
+    version = "1.17.0";
+  };
+  mdl = {
+    dependencies = ["kramdown" "mixlib-cli" "mixlib-config"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "047hp8z1ma630wp38bm1giklkf385rp6wly8aidn825q831w2g4i";
+      type = "gem";
+    };
+    version = "0.5.0";
+  };
+  mixlib-cli = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0647msh7kp7lzyf6m72g6snpirvhimjm22qb8xgv9pdhbcrmcccp";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  mixlib-config = {
+    dependencies = ["tomlrb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gm6yj9cbbgsl9x4xqxga0vz5w0ksq2jnq1wj8hvgm5c4wfcrswb";
+      type = "gem";
+    };
+    version = "2.2.18";
+  };
+  tomlrb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g28ssfal6vry3cmhy509ba3vi5d5aggz1gnffnvvmc8ml8vkpiv";
+      type = "gem";
+    };
+    version = "1.2.8";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/misc/mkcert/default.nix b/nixpkgs/pkgs/development/tools/misc/mkcert/default.nix
new file mode 100644
index 000000000000..9532b6e34421
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mkcert/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mkcert";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "FiloSottile";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1aadnsx5pfmryf8mgxg9g0i083dm1pmrc6v4ln2mm3n89wwqc9b7";
+  };
+
+  modSha256 = "0snvvwhyfq01nwgjz55dgd5skpg7z0dzix7sdag90cslbrr983i1";
+
+  meta = with lib; {
+    homepage = https://github.com/FiloSottile/mkcert;
+    description = "A simple tool for making locally-trusted development certificates";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/moby/default.nix b/nixpkgs/pkgs/development/tools/misc/moby/default.nix
new file mode 100644
index 000000000000..c45e7841d450
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/moby/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "moby-${version}";
+  version = "2017-07-06";
+  rev = "d87a3f9990ed24ebbb51695879cd640cb07a4b40";
+
+  goPackagePath = "github.com/moby/tool";
+
+  src = fetchFromGitHub {
+    owner = "moby";
+    repo = "tool";
+    inherit rev;
+    sha256 = "0xhasm69g5gwihcm8g7rff9nkx7iffvd642bknky6j3w133gs5lp";
+  };
+
+  preBuild = ''
+    buildFlagsArray+=("-ldflags" "-X main.GitCommit=${builtins.substring 0 7 rev} -X main.Version=0.0.0")
+  '';
+
+  meta = {
+    description = "Assembly tool for the Moby project, an open framework to assemble specialized container systems without reinventing the wheel";
+    license = lib.licenses.asl20;
+    homepage = https://mobyproject.org;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/msitools/default.nix b/nixpkgs/pkgs/development/tools/misc/msitools/default.nix
new file mode 100644
index 000000000000..5c2b0ad0ee33
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/msitools/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, intltool, glib, pkgconfig, libgsf, libuuid, gcab, bzip2, gnome3 }:
+
+stdenv.mkDerivation rec {
+  pname = "msitools";
+  version = "0.98";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "19wb3n3nwkpc6bjr0q3f1znaxsfaqgjbdxxnbx8ic8bb5b49hwac";
+  };
+
+  nativeBuildInputs = [ intltool pkgconfig ];
+  buildInputs = [ glib libgsf libuuid gcab bzip2 ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "Set of programs to inspect and build Windows Installer (.MSI) files";
+    homepage = https://wiki.gnome.org/msitools;
+    license = [ licenses.gpl2 licenses.lgpl21 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ninka/default.nix b/nixpkgs/pkgs/development/tools/misc/ninka/default.nix
new file mode 100644
index 000000000000..df793866cbb8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ninka/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, perl, perlPackages }:
+
+assert stdenv ? glibc;
+
+perlPackages.buildPerlPackage rec {
+  name = "ninka-${version}";
+  version = "2.0-pre";
+
+  src = fetchFromGitHub {
+    owner = "dmgerman";
+    repo = "ninka";
+    rev = "b89b59ecd057dfc939d0c75acaddebb58fcd8cba";
+    sha256 = "1grlis1kycbcjvjgqvn7aw81q1qx49ahvxg2k7cgyr79mvgpgi9m";
+  };
+
+  buildInputs = with perlPackages; [ perl TestOutput DBDSQLite DBI TestPod TestPodCoverage SpreadsheetParseExcel ];
+
+  doCheck = false;    # hangs
+
+  preConfigure = ''
+    sed -i.bak -e 's;#!/usr/bin/perl;#!${perl}/bin/perl;g' \
+        ./bin/ninka-excel ./bin/ninka ./bin/ninka-sqlite \
+        ./scripts/unify.pl ./scripts/parseLicense.pl \
+        ./scripts/license_matcher_modified.pl \
+        ./scripts/sort_package_license_list.pl
+    perl Makefile.PL
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A sentence based license detector";
+    homepage = http://ninka.turingmachine.org/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.vrthra ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/nixbang/default.nix b/nixpkgs/pkgs/development/tools/misc/nixbang/default.nix
new file mode 100644
index 000000000000..ade9954021a1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/nixbang/default.nix
@@ -0,0 +1,21 @@
+{ lib, pythonPackages, fetchFromGitHub }:
+
+let version = "0.1.2"; in
+pythonPackages.buildPythonApplication {
+  name = "nixbang-${version}";
+  namePrefix = "";
+
+  src = fetchFromGitHub {
+    owner = "madjar";
+    repo = "nixbang";
+    rev = version;
+    sha256 = "1kzk53ry60i814wa6n9y2ni0bcxhbi9p8gdv10b974gf23mhi8vc";
+  };
+
+  meta = {
+    homepage = https://github.com/madjar/nixbang;
+    description = "A special shebang to run scripts in a nix-shell";
+    maintainers = [ lib.maintainers.madjar ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/nrfutil/default.nix b/nixpkgs/pkgs/development/tools/misc/nrfutil/default.nix
new file mode 100644
index 000000000000..0a6155e649e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/nrfutil/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, python2Packages, fetchFromGitHub }:
+
+with python2Packages; buildPythonApplication rec {
+  pname = "nrfutil";
+  version = "5.2.0";
+
+  src = fetchFromGitHub {
+    owner = "NordicSemiconductor";
+    repo = "pc-nrfutil";
+    rev = "v${version}";
+    sha256 = "1hajjgz8r4fjbwqr22p5dvb6k83dpxf8k7mhx20gkbrrx9ivqh79";
+  };
+
+  propagatedBuildInputs = [ pc-ble-driver-py six pyserial enum34 click ecdsa
+    protobuf tqdm piccata pyspinel intelhex pyyaml crcmod libusb1 ipaddress ];
+
+  checkInputs = [ nose behave ];
+
+  postPatch = ''
+    # remove version bound on pyyaml
+    sed -i /pyyaml/d requirements.txt
+
+    mkdir test-reports
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Device Firmware Update tool for nRF chips";
+    homepage = "https://github.com/NordicSemiconductor/pc-nrfutil";
+    license = licenses.unfreeRedistributable;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/objconv/default.nix b/nixpkgs/pkgs/development/tools/misc/objconv/default.nix
new file mode 100644
index 000000000000..a449c28ea289
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/objconv/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  name = "objconv-${version}";
+  version = "2.51";
+
+  src = fetchurl {
+    # Versioned archive of objconv sources maintained by orivej.
+    url = "https://archive.org/download/objconv/${name}.zip";
+    sha256 = "0wp6ld9vk11f4nnkn56627zmlv9k5vafi99qa3yyn1pgcd61zcfs";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  outputs = [ "out" "doc" ];
+
+  unpackPhase = ''
+    mkdir -p "$name"
+    cd "$name"
+    unpackFile "$src"
+    unpackFile source.zip
+  '';
+
+  buildPhase = "c++ -o objconv -O2 *.cpp";
+
+  installPhase = ''
+    mkdir -p $out/bin $out/doc/objconv
+    mv objconv $out/bin
+    mv objconv-instructions.pdf $out/doc/objconv
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Object and executable file converter, modifier and disassembler";
+    homepage = https://www.agner.org/optimize/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ orivej vrthra ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile b/nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile
new file mode 100644
index 000000000000..bf4378d58ce2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'one_gadget'
diff --git a/nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile.lock b/nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile.lock
new file mode 100644
index 000000000000..3e02f085ae6b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/one_gadget/Gemfile.lock
@@ -0,0 +1,17 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    bindata (2.4.4)
+    elftools (1.0.2)
+      bindata (~> 2)
+    one_gadget (1.6.2)
+      elftools (~> 1.0.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  one_gadget
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/development/tools/misc/one_gadget/default.nix b/nixpkgs/pkgs/development/tools/misc/one_gadget/default.nix
new file mode 100644
index 000000000000..cf4a719292c4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/one_gadget/default.nix
@@ -0,0 +1,15 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "one_gadget";
+  gemdir = ./.;
+  exes = [ "one_gadget" ];
+
+  meta = with lib; {
+    description = "The best tool for finding one gadget RCE in libc.so.6";
+    homepage    = https://github.com/david942j/one_gadget;
+    license     = licenses.mit;
+    maintainers = [ maintainers.artemist ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/one_gadget/gemset.nix b/nixpkgs/pkgs/development/tools/misc/one_gadget/gemset.nix
new file mode 100644
index 000000000000..485ddf940fda
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/one_gadget/gemset.nix
@@ -0,0 +1,34 @@
+{
+  bindata = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kz42nvxnk1j9cj0i8lcnhprcgdqsqska92g6l19ziadydfk2gqy";
+      type = "gem";
+    };
+    version = "2.4.4";
+  };
+  elftools = {
+    dependencies = ["bindata"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ajymn59fr9117dkwf5xl8vmr737h6xmrcf1033zjlj2l5qkxn4a";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  one_gadget = {
+    dependencies = ["elftools"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wacvysd7ddnbx2jl1vhzbkb28y974riyns7bpx889518zaa09z0";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/misc/opengrok/default.nix b/nixpkgs/pkgs/development/tools/misc/opengrok/default.nix
new file mode 100644
index 000000000000..874aa04157dc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/opengrok/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, jre, ctags, makeWrapper, coreutils, git, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  name = "opengrok-${version}";
+  version = "1.0";
+
+  # binary distribution
+  src = fetchurl {
+    url = "https://github.com/oracle/opengrok/releases/download/${version}/${name}.tar.gz";
+    sha256 = "0h4rwfh8m41b7ij931gcbmkihri25m48373qf6ig0714s66xwc4i";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out
+    cp -a * $out/
+    substituteInPlace $out/bin/OpenGrok --replace "/bin/uname" "${coreutils}/bin/uname"
+    substituteInPlace $out/bin/Messages --replace "#!/bin/ksh" "#!${runtimeShell}"
+    wrapProgram $out/bin/OpenGrok \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ ctags git ]}" \
+      --set JAVA_HOME "${jre}" \
+      --set OPENGROK_TOMCAT_BASE "/var/tomcat"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Source code search and cross reference engine";
+    homepage = https://opengrok.github.io/OpenGrok/;
+    license = licenses.cddl;
+    maintainers = [ maintainers.lethalman ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/openocd/default.nix b/nixpkgs/pkgs/development/tools/misc/openocd/default.nix
new file mode 100644
index 000000000000..7141fdcee7e7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/openocd/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, lib, fetchurl, libftdi1, libusb1, pkgconfig, hidapi }:
+
+stdenv.mkDerivation rec {
+  name = "openocd-${version}";
+  version = "0.10.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/openocd/openocd-${version}.tar.bz2";
+    sha256 = "1bhn2c85rdz4gf23358kg050xlzh7yxbbwmqp24c0akmh3bff4kk";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libftdi1 libusb1 hidapi ];
+
+  configureFlags = [
+    "--enable-jtag_vpi"
+    "--enable-usb_blaster_libftdi"
+    (lib.enableFeature (! stdenv.isDarwin) "amtjtagaccel")
+    (lib.enableFeature (! stdenv.isDarwin) "gw16012")
+    "--enable-presto_libftdi"
+    "--enable-openjtag_ftdi"
+    (lib.enableFeature (! stdenv.isDarwin) "oocd_trace")
+    "--enable-buspirate"
+    (lib.enableFeature stdenv.isLinux "sysfsgpio")
+    "--enable-remote-bitbang"
+  ];
+
+  NIX_CFLAGS_COMPILE = lib.optionals stdenv.cc.isGNU [
+    "-Wno-implicit-fallthrough"
+    "-Wno-format-truncation"
+    "-Wno-format-overflow"
+  ];
+
+  postInstall = lib.optionalString stdenv.isLinux ''
+    mkdir -p "$out/etc/udev/rules.d"
+    rules="$out/share/openocd/contrib/60-openocd.rules"
+    if [ ! -f "$rules" ]; then
+        echo "$rules is missing, must update the Nix file."
+        exit 1
+    fi
+    ln -s "$rules" "$out/etc/udev/rules.d/"
+  '';
+
+  meta = with lib; {
+    description = "Free and Open On-Chip Debugging, In-System Programming and Boundary-Scan Testing";
+    longDescription = ''
+      OpenOCD provides on-chip programming and debugging support with a layered
+      architecture of JTAG interface and TAP support, debug target support
+      (e.g. ARM, MIPS), and flash chip drivers (e.g. CFI, NAND, etc.).  Several
+      network interfaces are available for interactiving with OpenOCD: HTTP,
+      telnet, TCL, and GDB.  The GDB server enables OpenOCD to function as a
+      "remote target" for source-level debugging of embedded systems using the
+      GNU GDB program.
+    '';
+    homepage = http://openocd.sourceforge.net/;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ bjornfor ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/pahole/default.nix b/nixpkgs/pkgs/development/tools/misc/pahole/default.nix
new file mode 100644
index 000000000000..3864ad945835
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pahole/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchgit, cmake, elfutils, zlib }:
+
+stdenv.mkDerivation rec {
+  name = "pahole-${version}";
+  version = "1.12";
+  src = fetchgit {
+    url = https://git.kernel.org/pub/scm/devel/pahole/pahole.git;
+    sha256 = "1a8xfwqdc2j3ydh9bk2pkvsaf3lrkbxj66vj991c7knc31ix8kpw";
+    rev = "v${version}";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ elfutils zlib ];
+
+  # Put libraries in "lib" subdirectory, not top level of $out
+  cmakeFlags = [ "-D__LIB=lib" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://git.kernel.org/cgit/devel/pahole/pahole.git/;
+    description = "Pahole and other DWARF utils";
+    license = licenses.gpl2;
+
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bosu ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/patchelf/default.nix b/nixpkgs/pkgs/development/tools/misc/patchelf/default.nix
new file mode 100644
index 000000000000..77d03f299f4a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/patchelf/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "patchelf-0.9";
+
+  src = fetchurl {
+    url = "https://nixos.org/releases/patchelf/${name}/${name}.tar.bz2";
+    sha256 = "a0f65c1ba148890e9f2f7823f4bedf7ecad5417772f64f994004f59a39014f83";
+  };
+
+  setupHook = [ ./setup-hook.sh ];
+
+  doCheck = false; # fails 8 out of 24 tests, problems when loading libc.so.6
+
+  meta = with stdenv.lib; {
+    homepage = https://nixos.org/patchelf.html;
+    license = licenses.gpl3;
+    description = "A small utility to modify the dynamic linker and RPATH of ELF executables";
+    maintainers = [ maintainers.eelco ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/patchelf/setup-hook.sh b/nixpkgs/pkgs/development/tools/misc/patchelf/setup-hook.sh
new file mode 100644
index 000000000000..bc1cddd4879c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/patchelf/setup-hook.sh
@@ -0,0 +1,22 @@
+# This setup hook calls patchelf to automatically remove unneeded
+# directories from the RPATH of every library or executable in every
+# output.
+
+fixupOutputHooks+=('if [ -z "$dontPatchELF" ]; then patchELF "$prefix"; fi')
+
+patchELF() {
+    local dir="$1"
+    [ -e "$dir" ] || return 0
+
+    header "shrinking RPATHs of ELF executables and libraries in $dir"
+
+    local i
+    while IFS= read -r -d $'\0' i; do
+        if [[ "$i" =~ .build-id ]]; then continue; fi
+        if ! isELF "$i"; then continue; fi
+        echo "shrinking $i"
+        patchelf --shrink-rpath "$i" || true
+    done < <(find "$dir" -type f -print0)
+
+    stopNest
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/patchelf/unstable.nix b/nixpkgs/pkgs/development/tools/misc/patchelf/unstable.nix
new file mode 100644
index 000000000000..29d713a9af44
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/patchelf/unstable.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  name = "patchelf-${version}";
+  version = "0.10-pre-20190328";
+
+  src = fetchFromGitHub {
+    owner = "NixOS";
+    repo = "patchelf";
+    rev = "e1e39f3639e39360ceebb2f7ed533cede4623070";
+    sha256 = "09q1b1yqfzg1ih51v7qjh55vxfdbd8x5anycl8sfz6qy107wr02k";
+  };
+
+  # Drop test that fails on musl (?)
+  postPatch = stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
+    substituteInPlace tests/Makefile.am \
+      --replace "set-rpath-library.sh" ""
+  '' +
+  # extend version identifier to more informative than "0.10".
+  ''
+    echo -n ${version} > version
+  '';
+
+  setupHook = [ ./setup-hook.sh ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ ];
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = {
+    homepage = https://nixos.org/patchelf.html;
+    license = "GPL";
+    description = "A small utility to modify the dynamic linker and RPATH of ELF executables";
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/pkg-config/2.36.3-not-win32.patch b/nixpkgs/pkgs/development/tools/misc/pkg-config/2.36.3-not-win32.patch
new file mode 100644
index 000000000000..c1dd808e6008
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pkg-config/2.36.3-not-win32.patch
@@ -0,0 +1,324 @@
+--- a/glib/configure.ac	2013-08-04 20:21:20.808722600 -0500
++++ b/glib/configure.ac	2013-08-04 18:30:21.852852200 -0500
+@@ -1880,7 +1880,7 @@ dnl ************************************
+ 
+ AC_MSG_CHECKING(for platform-dependent source)
+ case "$host" in
+-  *-*-cygwin*|*-*-mingw*)
++  *-*-mingw*)
+     PLATFORMDEP=gwin32.lo
+     ;;
+   *)
+@@ -2594,9 +2594,6 @@ dnl *** Win32 API libs ***
+ dnl **********************
+ 
+ case $host in
+-  *-*-cygwin*)
+-	G_LIBS_EXTRA="-luser32 -lkernel32"
+-    ;;
+   *-*-mingw*)
+ 	G_LIBS_EXTRA="-lws2_32 -lole32 -lwinmm -lshlwapi"
+     ;;
+--- a/glib/glib/gatomic.c	2013-08-04 20:21:20.907728300 -0500
++++ b/glib/glib/gatomic.c	2013-08-04 18:11:14.000000000 -0500
+@@ -464,7 +464,7 @@ gsize
+   return g_atomic_pointer_xor ((volatile gpointer *) atomic, val);
+ }
+ 
+-#elif defined (G_PLATFORM_WIN32)
++#elif defined (G_OS_WIN32)
+ 
+ #include <windows.h>
+ #if !defined(_M_AMD64) && !defined (_M_IA64) && !defined(_M_X64) && !(defined _MSC_VER && _MSC_VER <= 1200)
+--- a/glib/glib/gcharset.c	2013-08-04 20:21:20.925729300 -0500
++++ b/glib/glib/gcharset.c	2013-08-04 18:11:14.000000000 -0500
+@@ -496,7 +496,7 @@ guess_category_value (const gchar *categ
+   if ((retval != NULL) && (retval[0] != '\0'))
+     return retval;
+ 
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+   /* g_win32_getlocale() first checks for LC_ALL, LC_MESSAGES and
+    * LANG, which we already did above. Oh well. The main point of
+    * calling g_win32_getlocale() is to get the thread's locale as used
+--- a/glib/glib/gconvert.c	2013-08-04 20:21:20.933729800 -0500
++++ b/glib/glib/gconvert.c	2013-08-04 18:11:14.000000000 -0500
+@@ -33,9 +33,6 @@
+ 
+ #ifdef G_OS_WIN32
+ #include "win_iconv.c"
+-#endif
+-
+-#ifdef G_PLATFORM_WIN32
+ #define STRICT
+ #include <windows.h>
+ #undef STRICT
+@@ -1258,7 +1255,7 @@ g_locale_from_utf8 (const gchar *utf8str
+ 		      charset, "UTF-8", bytes_read, bytes_written, error);
+ }
+ 
+-#ifndef G_PLATFORM_WIN32
++#ifndef G_OS_WIN32
+ 
+ typedef struct _GFilenameCharsetCache GFilenameCharsetCache;
+ 
+@@ -1374,7 +1371,7 @@ g_get_filename_charsets (const gchar ***
+   return cache->is_utf8;
+ }
+ 
+-#else /* G_PLATFORM_WIN32 */
++#else /* G_OS_WIN32 */
+ 
+ gboolean
+ g_get_filename_charsets (const gchar ***filename_charsets) 
+@@ -1403,7 +1400,7 @@ g_get_filename_charsets (const gchar ***
+ #endif
+ }
+ 
+-#endif /* G_PLATFORM_WIN32 */
++#endif /* G_OS_WIN32 */
+ 
+ static gboolean
+ get_filename_charset (const gchar **filename_charset)
+--- a/glib/glib/gfileutils.c	2013-08-04 20:21:20.942730300 -0500
++++ b/glib/glib/gfileutils.c	2013-08-04 18:11:14.000000000 -0500
+@@ -2153,7 +2153,7 @@ g_path_skip_root (const gchar *file_name
+ {
+   g_return_val_if_fail (file_name != NULL, NULL);
+ 
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+   /* Skip \\server\share or //server/share */
+   if (G_IS_DIR_SEPARATOR (file_name[0]) &&
+       G_IS_DIR_SEPARATOR (file_name[1]) &&
+@@ -2163,7 +2163,6 @@ g_path_skip_root (const gchar *file_name
+       gchar *p;
+       p = strchr (file_name + 2, G_DIR_SEPARATOR);
+ 
+-#ifdef G_OS_WIN32
+       {
+         gchar *q;
+ 
+@@ -2171,7 +2170,6 @@ g_path_skip_root (const gchar *file_name
+         if (p == NULL || (q != NULL && q < p))
+         p = q;
+       }
+-#endif
+ 
+       if (p && p > file_name + 2 && p[1])
+         {
+--- a/glib/glib/glib.h	2013-08-04 20:21:20.949730700 -0500
++++ b/glib/glib/glib.h	2013-08-04 18:11:14.000000000 -0500
+@@ -96,7 +96,7 @@
+ #include <glib/gvariant.h>
+ #include <glib/gversion.h>
+ #include <glib/gversionmacros.h>
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+ #include <glib/gwin32.h>
+ #endif
+ 
+--- a/glib/glib/gutf8.c	2013-08-04 20:21:20.984732700 -0500
++++ b/glib/glib/gutf8.c	2013-08-04 18:11:14.000000000 -0500
+@@ -27,7 +27,7 @@
+ #endif
+ #include <string.h>
+ 
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+ #include <stdio.h>
+ #define STRICT
+ #include <windows.h>
+--- a/glib/glib/gutils.c	2013-08-04 20:21:21.015734500 -0500
++++ b/glib/glib/gutils.c	2013-08-04 18:11:14.000000000 -0500
+@@ -72,7 +72,7 @@
+ #include "garray.h"
+ #include "glibintl.h"
+ 
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+ #include "gconvert.h"
+ #include "gwin32.h"
+ #endif
+@@ -86,16 +86,13 @@
+  * These are portable utility functions.
+  */
+ 
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+ #  include <windows.h>
+ #  ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
+ #    define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 2
+ #    define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4
+ #  endif
+ #  include <lmcons.h>		/* For UNLEN */
+-#endif /* G_PLATFORM_WIN32 */
+-
+-#ifdef G_OS_WIN32
+ #  include <direct.h>
+ #  include <shlobj.h>
+    /* older SDK (e.g. msvc 5.0) does not have these*/
+@@ -131,7 +128,7 @@
+ #include <langinfo.h>
+ #endif
+ 
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+ 
+ gchar *
+ _glib_get_dll_directory (void)
+--- a/glib/glib/gutils.h	2013-08-04 20:21:21.067737500 -0500
++++ b/glib/glib/gutils.h	2013-08-04 18:11:14.000000000 -0500
+@@ -350,7 +350,7 @@ g_bit_storage (gulong number)
+  * On non-Windows platforms, expands to nothing.
+  */
+ 
+-#ifndef G_PLATFORM_WIN32
++#ifndef G_OS_WIN32
+ # define G_WIN32_DLLMAIN_FOR_DLL_NAME(static, dll_name)
+ #else
+ # define G_WIN32_DLLMAIN_FOR_DLL_NAME(static, dll_name)			\
+@@ -378,7 +378,7 @@ DllMain (HINSTANCE hinstDLL,						\
+ 
+ #endif	/* !G_DISABLE_DEPRECATED */
+ 
+-#endif /* G_PLATFORM_WIN32 */
++#endif /* G_OS_WIN32 */
+ 
+ G_END_DECLS
+ 
+--- a/glib/glib/gwin32.h	2013-08-04 20:21:21.081738300 -0500
++++ b/glib/glib/gwin32.h	2013-08-04 18:11:14.000000000 -0500
+@@ -33,7 +33,7 @@
+ 
+ #include <glib/gtypes.h>
+ 
+-#ifdef G_PLATFORM_WIN32
++#ifdef G_OS_WIN32
+ 
+ G_BEGIN_DECLS
+ 
+@@ -41,8 +41,6 @@ G_BEGIN_DECLS
+ #define MAXPATHLEN 1024
+ #endif
+ 
+-#ifdef G_OS_WIN32
+-
+ /*
+  * To get prototypes for the following POSIXish functions, you have to
+  * include the indicated non-POSIX headers. The functions are defined
+@@ -68,7 +66,6 @@ G_BEGIN_DECLS
+ GLIB_AVAILABLE_IN_ALL
+ gint		g_win32_ftruncate	(gint		 f,
+ 					 guint		 size);
+-#endif /* G_OS_WIN32 */
+ 
+ /* The MS setlocale uses locale names of the form "English_United
+  * States.1252" etc. We want the Unixish standard form "en", "zh_TW"
+@@ -112,7 +109,7 @@ gchar*          g_win32_locale_filename_
+ 
+ G_END_DECLS
+ 
+-#endif	 /* G_PLATFORM_WIN32 */
++#endif	 /* G_OS_WIN32 */
+ 
+ #ifdef G_OS_WIN32
+ #ifdef _WIN64
+--- a/glib/glib/libcharset/localcharset.c	2013-08-04 20:21:21.095739100 -0500
++++ b/glib/glib/libcharset/localcharset.c	2013-08-04 18:11:14.000000000 -0500
+@@ -46,10 +46,6 @@
+ #   include <locale.h>
+ #  endif
+ # endif
+-# ifdef __CYGWIN__
+-#  define WIN32_LEAN_AND_MEAN
+-#  include <windows.h>
+-# endif
+ #elif defined WIN32_NATIVE
+ # define WIN32_LEAN_AND_MEAN
+ # include <windows.h>
+@@ -111,7 +107,7 @@ _g_locale_get_charset_aliases (void)
+   cp = charset_aliases;
+   if (cp == NULL)
+     {
+-#if !(defined VMS || defined WIN32_NATIVE || defined __CYGWIN__)
++#if !(defined VMS || defined WIN32_NATIVE)
+       FILE *fp;
+       const char *dir;
+       const char *base = "charset.alias";
+@@ -237,7 +233,7 @@ _g_locale_get_charset_aliases (void)
+ 	   "DECKOREAN" "\0" "EUC-KR" "\0";
+ # endif
+ 
+-# if defined WIN32_NATIVE || defined __CYGWIN__
++# if defined WIN32_NATIVE
+       /* To avoid the troubles of installing a separate file in the same
+ 	 directory as the DLL and of retrieving the DLL's directory at
+ 	 runtime, simply inline the aliases here.  */
+@@ -292,53 +288,6 @@ _g_locale_charset_raw (void)
+   /* Most systems support nl_langinfo (CODESET) nowadays.  */
+   codeset = nl_langinfo (CODESET);
+ 
+-#  ifdef __CYGWIN__
+-  /* Cygwin 2006 does not have locales.  nl_langinfo (CODESET) always
+-     returns "US-ASCII".  As long as this is not fixed, return the suffix
+-     of the locale name from the environment variables (if present) or
+-     the codepage as a number.  */
+-  if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
+-    {
+-      const char *locale;
+-      static char buf[2 + 10 + 1];
+-
+-      locale = getenv ("LC_ALL");
+-      if (locale == NULL || locale[0] == '\0')
+-	{
+-	  locale = getenv ("LC_CTYPE");
+-	  if (locale == NULL || locale[0] == '\0')
+-	    locale = getenv ("LANG");
+-	}
+-      if (locale != NULL && locale[0] != '\0')
+-	{
+-	  /* If the locale name contains an encoding after the dot, return
+-	     it.  */
+-	  const char *dot = strchr (locale, '.');
+-
+-	  if (dot != NULL)
+-	    {
+-	      const char *modifier;
+-
+-	      dot++;
+-	      /* Look for the possible @... trailer and remove it, if any.  */
+-	      modifier = strchr (dot, '@');
+-	      if (modifier == NULL)
+-		return dot;
+-	      if (modifier - dot < sizeof (buf))
+-		{
+-		  memcpy (buf, dot, modifier - dot);
+-		  buf [modifier - dot] = '\0';
+-		  return buf;
+-		}
+-	    }
+-	}
+-
+-      /* Woe32 has a function returning the locale's codepage as a number.  */
+-      sprintf (buf, "CP%u", GetACP ());
+-      codeset = buf;
+-    }
+-#  endif
+-
+ # else
+ 
+   /* On old systems which lack it, use setlocale or getenv.  */
+diff --git a/glib/gtypes.h b/glib/gtypes.h
+index c18e0bf..816685a 100644
+--- a/glib/glib/gtypes.h
++++ b/glib/glib/gtypes.h
+@@ -462,7 +462,7 @@ G_END_DECLS
+  * properly get exported in Windows DLLs.
+  */
+ #ifndef GLIB_VAR
+-#  ifdef G_PLATFORM_WIN32
++#  ifdef G_OS_WIN32
+ #    ifdef GLIB_STATIC_COMPILATION
+ #      define GLIB_VAR extern
+ #    else /* !GLIB_STATIC_COMPILATION */
diff --git a/nixpkgs/pkgs/development/tools/misc/pkg-config/default.nix b/nixpkgs/pkgs/development/tools/misc/pkg-config/default.nix
new file mode 100644
index 000000000000..13855eb4e742
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pkg-config/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchurl, libiconv, vanilla ? false }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "pkg-config";
+  version = "0.29.2";
+
+  setupHook = ./setup-hook.sh;
+
+  src = fetchurl {
+    url = "https://pkgconfig.freedesktop.org/releases/${pname}-${version}.tar.gz";
+    sha256 = "14fmwzki1rlz8bs2p810lk6jqdxsk966d8drgsjmi54cd00rrikg";
+  };
+
+  # Process Requires.private properly, see
+  # http://bugs.freedesktop.org/show_bug.cgi?id=4738.
+  patches = optional (!vanilla) ./requires-private.patch
+    ++ optional stdenv.isCygwin ./2.36.3-not-win32.patch;
+
+  # These three tests fail due to a (desired) behavior change from our ./requires-private.patch
+  postPatch = ''
+    rm -f check/check-requires-private check/check-gtk check/missing
+  '';
+
+  buildInputs = optional (stdenv.isCygwin || stdenv.isDarwin || stdenv.isSunOS) libiconv;
+
+  configureFlags = [ "--with-internal-glib" ]
+    ++ optional (stdenv.isSunOS) [ "--with-libiconv=gnu" "--with-system-library-path" "--with-system-include-path" "CFLAGS=-DENABLE_NLS" ]
+       # Can't run these tests while cross-compiling
+    ++ optional (stdenv.hostPlatform != stdenv.buildPlatform)
+       [ "glib_cv_stack_grows=no"
+         "glib_cv_uscore=no"
+         "ac_cv_func_posix_getpwuid_r=yes"
+         "ac_cv_func_posix_getgrgid_r=yes"
+       ];
+
+  enableParallelBuilding = true;
+  doCheck = true;
+
+  postInstall = ''rm -f "$out"/bin/*-pkg-config''; # clean the duplicate file
+
+  meta = {
+    description = "A tool that allows packages to find out information about other packages";
+    homepage = http://pkg-config.freedesktop.org/wiki/;
+    platforms = platforms.all;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/pkg-config/requires-private.patch b/nixpkgs/pkgs/development/tools/misc/pkg-config/requires-private.patch
new file mode 100644
index 000000000000..d40aa9801379
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pkg-config/requires-private.patch
@@ -0,0 +1,17 @@
+diff --git a/main.c b/main.c
+index b61ca34..5a420c2 100644
+--- a/main.c
++++ b/main.c
+@@ -602,10 +602,10 @@ main (int argc, char **argv)
+   else
+     disable_private_libs();
+ 
+-  /* honor Requires.private if any Cflags are requested or any static
++  /* honor Requires.private if any any static
+    * libs are requested */
+ 
+-  if (pkg_flags & CFLAGS_ANY || want_requires_private || want_exists ||
++  if (want_requires_private ||
+       (want_static_lib_list && (pkg_flags & LIBS_ANY)))
+     enable_requires_private();
+ 
diff --git a/nixpkgs/pkgs/development/tools/misc/pkg-config/setup-hook.sh b/nixpkgs/pkgs/development/tools/misc/pkg-config/setup-hook.sh
new file mode 100644
index 000000000000..34a9b9f1173b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pkg-config/setup-hook.sh
@@ -0,0 +1,6 @@
+addPkgConfigPath () {
+    addToSearchPath PKG_CONFIG_PATH $1/lib/pkgconfig
+    addToSearchPath PKG_CONFIG_PATH $1/share/pkgconfig
+}
+
+addEnvHooks "$targetOffset" addPkgConfigPath
diff --git a/nixpkgs/pkgs/development/tools/misc/pkgconf/default.nix b/nixpkgs/pkgs/development/tools/misc/pkgconf/default.nix
new file mode 100644
index 000000000000..43d86966694f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pkgconf/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "pkgconf";
+  version = "1.6.1";
+
+  src = fetchurl {
+    url = "https://distfiles.dereferenced.org/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "1310va0nm8iyb4ghgz9qlx7qb00iha1523hq1zbgj0c98cwfxf92";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Package compiler and linker metadata toolkit";
+    homepage = https://git.dereferenced.org/pkgconf/pkgconf;
+    platforms = platforms.all;
+    license = licenses.isc;
+    maintainers = with maintainers; [ zaninime ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/pmccabe/default.nix b/nixpkgs/pkgs/development/tools/misc/pmccabe/default.nix
new file mode 100644
index 000000000000..fbb21a8b7c65
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pmccabe/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "pmccabe-${version}";
+  version = "2.6";
+
+  src = fetchurl {
+    url = "http://http.debian.net/debian/pool/main/p/pmccabe/pmccabe_${version}.tar.gz";
+    sha256 = "0a3h1b9fb87c82d5fbql5lc4gp338pa5s9i66dhw7zk8jdygx474";
+  };
+
+  patches = [
+    ./getopt_on_darwin.patch
+  ];
+
+  configurePhase = ''
+    sed -i -r Makefile \
+      -e 's,/usr/,/,g' \
+      -e "s,^DESTDIR =.*$,DESTDIR = $out," \
+      -e "s,^INSTALL = install.*$,INSTALL = install," \
+      -e "s,^all:.*$,all: \$(PROGS),"
+    '';
+
+  checkPhase = "make test";
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "McCabe-style function complexity and line counting for C and C++";
+    homepage = https://people.debian.org/~bame/pmccabe/;
+    license = licenses.gpl2Plus;
+
+    longDescription = ''
+      pmccabe calculates McCabe-style cyclomatic complexity for C and
+      C++ source code.  Per-function complexity may be used for
+      spotting likely trouble spots and for estimating testing
+      effort.
+
+      pmccabe also includes a non-commented line counter, decomment which
+      only removes comments from source code; codechanges, a program to
+      calculate the amount of change which has occurred between two source
+      trees or files; and vifn, to invoke vi given a function name rather
+      than a file name.
+    '';
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/pmccabe/getopt_on_darwin.patch b/nixpkgs/pkgs/development/tools/misc/pmccabe/getopt_on_darwin.patch
new file mode 100644
index 000000000000..534d6c1d6ef7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pmccabe/getopt_on_darwin.patch
@@ -0,0 +1,15 @@
+diff --git a/decomment.c b/decomment.c
+index 400707a..aea29fd 100644
+--- a/decomment.c
++++ b/decomment.c
+@@ -11,6 +11,10 @@
+ #include "getopt.h"
+ #endif
+ 
++#ifdef __APPLE__
++#include "getopt.h"
++#endif
++
+ #ifdef NEED_OPTIND
+ extern int optind;
+ #endif
diff --git a/nixpkgs/pkgs/development/tools/misc/prelink/default.nix b/nixpkgs/pkgs/development/tools/misc/prelink/default.nix
new file mode 100644
index 000000000000..f99c904ed01c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/prelink/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, libelf }:
+
+let
+  version = "20130503";
+in
+stdenv.mkDerivation rec {
+  name = "prelink-${version}";
+
+  buildInputs = [
+    libelf stdenv.cc.libc (stdenv.lib.getOutput "static" stdenv.cc.libc)
+  ];
+
+  src = fetchurl {
+    url = "https://people.redhat.com/jakub/prelink/prelink-${version}.tar.bz2";
+    sha256 = "1w20f6ilqrz8ca51qhrn1n13h7q1r34k09g33d6l2vwvbrhcffb3";
+  };
+
+  meta = {
+    homepage = https://people.redhat.com/jakub/prelink/;
+    license = "GPL";
+    description = "ELF prelinking utility to speed up dynamic linking";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/premake/3.nix b/nixpkgs/pkgs/development/tools/misc/premake/3.nix
new file mode 100644
index 000000000000..a94614af7967
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/premake/3.nix
@@ -0,0 +1,30 @@
+{stdenv, fetchurl, unzip}:
+
+let baseName = "premake";
+  version  = "3.7";
+in
+
+stdenv.mkDerivation {
+  name = "${baseName}-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sourceforge/premake/${baseName}-src-${version}.zip";
+    sha256 = "b59841a519e75d5b6566848a2c5be2f91455bf0cc6ae4d688fcbd4c40db934d5";
+  };
+
+  buildInputs = [unzip];
+
+  installPhase = ''
+    install -Dm755 bin/premake $out/bin/premake
+  '';
+
+  premake_cmd = "premake";
+  setupHook = ./setup-hook.sh;
+
+  meta = {
+    homepage = http://industriousone.com/premake;
+    description = "A simple build configuration and project generation tool using lua";
+    license = stdenv.lib.licenses.bsd3;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/premake/5.nix b/nixpkgs/pkgs/development/tools/misc/premake/5.nix
new file mode 100644
index 000000000000..8ceb3d4a4367
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/premake/5.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, Foundation, readline }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  name = "premake5-${version}";
+  version = "5.0.0-alpha12";
+
+  src = fetchFromGitHub {
+    owner = "premake";
+    repo = "premake-core";
+    rev = "v${version}";
+    sha256 = "1h3hr96pdz94njn4bg02ldcz0k5j1x017d8svc7fdyvl2b77nqzf";
+  };
+
+  buildInputs = optionals stdenv.isDarwin [ Foundation readline ];
+
+  patchPhase = optional stdenv.isDarwin ''
+    substituteInPlace premake5.lua \
+      --replace -mmacosx-version-min=10.4 -mmacosx-version-min=10.5
+  '';
+
+  buildPhase =
+    if stdenv.isDarwin then ''
+       make -f Bootstrap.mak osx
+    '' else ''
+       make -f Bootstrap.mak linux
+    '';
+
+  installPhase = ''
+    install -Dm755 bin/release/premake5 $out/bin/premake5
+  '';
+
+  premake_cmd = "premake5";
+  setupHook = ./setup-hook.sh;
+
+  meta = {
+    homepage = https://premake.github.io;
+    description = "A simple build configuration and project generation tool using lua";
+    license = stdenv.lib.licenses.bsd3;
+    platforms = platforms.darwin ++ platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/premake/default.nix b/nixpkgs/pkgs/development/tools/misc/premake/default.nix
new file mode 100644
index 000000000000..99bf8cac81fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/premake/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, unzip }:
+
+let baseName = "premake";
+  version  = "4.3";
+in
+
+stdenv.mkDerivation {
+  name = "${baseName}-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${baseName}/${baseName}-${version}-src.zip";
+    sha256 = "1017rd0wsjfyq2jvpjjhpszaa7kmig6q1nimw76qx3cjz2868lrn";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  buildPhase = ''
+    make -C build/gmake.unix/
+  '';
+
+  installPhase = ''
+    install -Dm755 bin/release/premake4 $out/bin/premake4
+  '';
+
+  premake_cmd = "premake4";
+  setupHook = ./setup-hook.sh;
+
+  meta = with stdenv.lib; {
+    homepage = http://industriousone.com/premake;
+    description = "A simple build configuration and project generation tool using lua";
+    license = stdenv.lib.licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/premake/setup-hook.sh b/nixpkgs/pkgs/development/tools/misc/premake/setup-hook.sh
new file mode 100644
index 000000000000..ba06ea2c7617
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/premake/setup-hook.sh
@@ -0,0 +1,19 @@
+premakeConfigurePhase() {
+    runHook preConfigure
+
+    local flagsArray=(
+        ${premakefile:+--file=$premakefile}
+        $premakeFlags ${premakeFlagsArray[@]}
+        ${premakeBackend:-gmake}
+    )
+
+    echoCmd 'configure flags' "${flagsArray[@]}"
+
+    @premake_cmd@ "${flagsArray[@]}"
+
+    runHook postConfigure
+}
+
+if [ -z "$configurePhase" ]; then
+    configurePhase=premakeConfigurePhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/misc/pwndbg/default.nix b/nixpkgs/pkgs/development/tools/misc/pwndbg/default.nix
new file mode 100644
index 000000000000..8f27609ababe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pwndbg/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, fetchFromGitHub
+, makeWrapper
+, gdb
+, future
+, isort
+, psutil
+, pycparser
+, pyelftools
+, python-ptrace
+, ROPGadget
+, six
+, unicorn
+, pygments
+, }:
+
+stdenv.mkDerivation rec {
+  name = "pwndbg-${version}";
+  version = "2019.01.25";
+
+  src = fetchFromGitHub {
+    owner = "pwndbg";
+    repo = "pwndbg";
+    rev = version;
+    sha256 = "0k7n6pcrj62ccag801yzf04a9mj9znghpkbnqwrzz0qn3rs42vgs";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  propagatedBuildInputs = [
+    future
+    isort
+    psutil
+    pycparser
+    pyelftools
+    python-ptrace
+    ROPGadget
+    six
+    unicorn
+    pygments
+  ];
+
+  installPhase = ''
+    mkdir -p $out/share/pwndbg
+    cp -r *.py pwndbg $out/share/pwndbg
+    makeWrapper ${gdb}/bin/gdb $out/bin/pwndbg \
+      --add-flags "-q -x $out/share/pwndbg/gdbinit.py"
+  '';
+
+  preFixup = ''
+    sed -i "/import sys/a import sys; sys.path[0:0] = '$PYTHONPATH'.split(':')" \
+      $out/share/pwndbg/gdbinit.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Exploit Development and Reverse Engineering with GDB Made Easy";
+    homepage = http://pwndbg.com;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/rman/default.nix b/nixpkgs/pkgs/development/tools/misc/rman/default.nix
new file mode 100644
index 000000000000..8093846780d2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/rman/default.nix
@@ -0,0 +1,32 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "rman-3.2";
+
+  src = fetchurl {
+    url = mirror://sourceforge/polyglotman/3.2/rman-3.2.tar.gz;
+    sha256 = "0prdld6nbkdlkcgc2r1zp13h2fh8r0mlwxx423dnc695ddlk18b8";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace ginstall install
+  '';
+
+  makeFlags = [ "BINDIR=$(out)/bin" "MANDIR=$(out)/share/man" ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  doCheck = false; # "check" target is probably meant to do "installcheck" or something
+
+  meta = {
+    description = "Parse formatted man pages and man page source from most flavors of UNIX and converts them to HTML, ASCII, TkMan, DocBook, and other formats";
+    license = "artistic";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/rolespec/default.nix b/nixpkgs/pkgs/development/tools/misc/rolespec/default.nix
new file mode 100644
index 000000000000..1e85e87c5378
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/rolespec/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchFromGitHub, makeWrapper }:
+
+stdenv.mkDerivation rec {
+
+  name = "rolespec-${meta.version}";
+
+  src = fetchFromGitHub {
+    owner = "nickjj";
+    repo = "rolespec";
+    rev = "d9ee530cd709168882059776c482fc37f46cb743";
+    sha256 = "1jkidw6aqr0zfqwmcvlpi9qa140z2pxcfsd43xm5ikx6jcwjdrzl";
+    inherit name;
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  # The default build phase (`make`) runs the test code. It's difficult to do
+  # the test in the build environment because it depends on the system package
+  # managers (apt/yum/pacman). We simply skip this phase since RoleSpec is
+  # shell based.
+  dontBuild = true;
+
+  # Wrap the program because `ROLESPEC_LIB` defaults to
+  # `/usr/local/lib/rolespec`.
+  installPhase = ''
+    make install PREFIX=$out
+    wrapProgram $out/bin/rolespec --set ROLESPEC_LIB $out/lib/rolespec
+  '';
+
+  # Since RoleSpec installs the shell script files in `lib` directory, the
+  # fixup phase shows some warnings. Disable these actions.
+  dontPatchELF = true;
+  dontStrip = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/nickjj/rolespec;
+    description = "A test library for testing Ansible roles";
+    longDescription = ''
+      A shell based test library for Ansible that works both locally and over
+      Travis-CI.
+    '';
+    downloadPage = "https://github.com/nickjj/rolespec";
+    license = licenses.gpl3;
+    version = "20161104";
+    maintainers = [ maintainers.dochang ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/saleae-logic/default.nix b/nixpkgs/pkgs/development/tools/misc/saleae-logic/default.nix
new file mode 100644
index 000000000000..19e4423f7d86
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/saleae-logic/default.nix
@@ -0,0 +1,98 @@
+# Saleae logic analyzer software
+#
+# Suggested udev rules to be able to access the Logic device without being root:
+#   SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="0925", ATTR{idProduct}=="3881", MODE="0666"
+#   SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="21a9", ATTR{idProduct}=="1001", MODE="0666"
+#
+# In NixOS, simply add this package to services.udev.packages.
+
+{ stdenv, fetchurl, unzip, glib, libSM, libICE, gtk2, libXext, libXft
+, fontconfig, libXrender, libXfixes, libX11, libXi, libXrandr, libXcursor
+, freetype, libXinerama, libxcb, zlib, pciutils
+, makeDesktopItem, xkeyboardconfig, dbus, runtimeShell, libGL
+}:
+
+let
+
+  libPath = stdenv.lib.makeLibraryPath [
+    glib libSM libICE gtk2 libXext libXft fontconfig libXrender libXfixes libX11
+    libXi libXrandr libXcursor freetype libXinerama libxcb zlib stdenv.cc.cc.lib
+    dbus libGL
+  ];
+
+in
+
+assert stdenv.hostPlatform.system == "x86_64-linux";
+
+stdenv.mkDerivation rec {
+  pname = "saleae-logic";
+  version = "1.2.18";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    name = "saleae-logic-${version}-64bit.zip";
+    url = "http://downloads.saleae.com/logic/${version}/Logic%20${version}%20(64-bit).zip";
+    sha256 = "0lhair2vsg8sjvzicvfcjfmvy30q7i01xj4z02iqh7pgzpb025h8";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "saleae-logic";
+    exec = "saleae-logic";
+    icon = ""; # the package contains no icon
+    comment = "Software for Saleae logic analyzers";
+    desktopName = "Saleae Logic";
+    genericName = "Logic analyzer";
+    categories = "Application;Development";
+  };
+
+  buildInputs = [ unzip ];
+
+  installPhase = ''
+    # Copy prebuilt app to $out
+    mkdir "$out"
+    cp -r * "$out"
+
+    # Patch it
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$out/Logic"
+    for bin in "$out/Logic"              \
+               "$out/libQt5Widgets.so.5" \
+               "$out/libQt5Gui.so.5"     \
+               "$out/libQt5Core.so.5"    \
+               "$out/libQt5Network.so.5" ; do
+        patchelf --set-rpath "${stdenv.cc.cc.lib}/lib:${stdenv.cc.cc.lib}/lib64:${libPath}:\$ORIGIN/Analyzers:\$ORIGIN" "$bin"
+    done
+
+    patchelf --set-rpath "${stdenv.cc.cc.lib}/lib:${stdenv.cc.cc.lib}/lib64:${libPath}:\$ORIGIN/../" "$out/platforms/libqxcb.so"
+
+    # Build the LD_PRELOAD library that makes Logic work from a read-only directory
+    mkdir -p "$out/lib"
+    gcc -shared -fPIC -DOUT=\"$out\" "${./preload.c}" -o "$out/lib/preload.so" -ldl
+
+    # Make wrapper script that uses the LD_PRELOAD library
+    mkdir -p "$out/bin"
+    cat > "$out/bin/saleae-logic" << EOF
+    #!${runtimeShell}
+    export LD_PRELOAD="$out/lib/preload.so"
+    export QT_XKB_CONFIG_ROOT="${xkeyboardconfig}/share/X11/xkb"
+    export PATH="${pciutils}/bin:\$PATH"
+    exec "$out/Logic" "\$@"
+    EOF
+    chmod a+x "$out"/bin/saleae-logic
+
+    # Copy the generated .desktop file
+    mkdir -p "$out/share/applications"
+    cp "$desktopItem"/share/applications/* "$out/share/applications/"
+
+    # Install provided udev rules
+    mkdir -p "$out/etc/udev/rules.d"
+    cp Drivers/99-SaleaeLogic.rules "$out/etc/udev/rules.d/"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Software for Saleae logic analyzers";
+    homepage = http://www.saleae.com/;
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/saleae-logic/preload.c b/nixpkgs/pkgs/development/tools/misc/saleae-logic/preload.c
new file mode 100644
index 000000000000..b4451e4d99f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/saleae-logic/preload.c
@@ -0,0 +1,341 @@
+/*
+ * LD_PRELOAD trick to make Saleae Logic work from a read-only installation
+ * directory.
+ *
+ * Saleae Logic tries to write to a few directories inside its installation
+ * directory. Because the Nix store is read-only, we have to redirect access to
+ * this file somewhere else. Here's the map:
+ *
+ *   $out/Settings/    => $HOME/.saleae-logic/Settings/
+ *   $out/Databases/   => $HOME/.saleae-logic/Databases/
+ *   $out/Errors/      => $HOME/.saleae-logic/Errors/
+ *   $out/Calibration/ => $HOME/.saleae-logic/Calibration/
+ *
+ * This also makes the software multi-user aware :-)
+ *
+ * NOTE: AFAIK (Bjørn Forsman), Logic version 1.2+ was supposed to have a
+ * command line parameter for redirecting these write operations, but
+ * apparently that feature got postponed.
+ *
+ * Usage:
+ *   gcc -shared -fPIC -DOUT="$out" preload.c -o preload.so -ldl
+ *   LD_PRELOAD=$PWD/preload.so ./result/Logic
+ *
+ * To see the paths that are modified at runtime, set the environment variable
+ * PRELOAD_DEBUG to 1 (or anything really; debugging is on as long as the
+ * variable exists).
+ */
+
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <dlfcn.h>
+#include <limits.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <errno.h>
+
+#ifndef OUT
+#error Missing OUT define - path to the installation directory.
+#endif
+
+/*
+ * TODO: How to properly wrap "open", which is declared as a variadic function
+ * in glibc? The man page lists these signatures:
+ *
+ *   int open(const char *pathname, int flags);
+ *   int open(const char *pathname, int flags, mode_t mode);
+ *
+ * But using either signature in this code cause a compile error, because
+ * glibc has declared the function as "int open(const char *, int, ...)".
+ * Same thing with "openat".
+ *
+ * For now we discard the variadic args. It seems to work.
+ *
+ * Relevant:
+ * http://stackoverflow.com/questions/28462523/how-to-wrap-ioctlint-d-unsigned-long-request-using-ld-preload
+ */
+typedef FILE *(*fopen_func_t)(const char *path, const char *mode);
+typedef FILE *(*fopen64_func_t)(const char *path, const char *mode);
+typedef int (*open_func_t)(const char *pathname, int flags, ...);
+typedef int (*open64_func_t)(const char *pathname, int flags, ...);
+typedef int (*openat_func_t)(int dirfd, const char *pathname, int flags, ...);
+typedef int (*openat64_func_t)(int dirfd, const char *pathname, int flags, ...);
+typedef int (*xstat_func_t)(int vers, const char *pathname, struct stat *buf);
+typedef int (*xstat64_func_t)(int vers, const char *pathname, struct stat64 *buf);
+typedef int (*access_func_t)(const char *pathname, int mode);
+typedef int (*faccessat_func_t)(int dirfd, const char *pathname, int mode, int flags);
+typedef int (*unlink_func_t)(const char *pathname);
+
+/*
+ * Redirect $out/{Settings,Databases,Errors,Calibration}/ => $HOME/.saleae-logic/.
+ * Path is truncated if bigger than PATH_MAX.
+ *
+ * @param pathname Original file path.
+ * @param buffer Pointer to a buffer of size PATH_MAX bytes that this function
+ * will write the new redirected path to (if needed).
+ *
+ * @return Pointer to the resulting path. It will either be equal to the
+ * pathname (no redirect) or buffer argument (was redirected).
+ */
+static const char *redirect(const char *pathname, char *buffer)
+{
+	const char *homepath;
+	const char *new_path;
+	static char have_warned;
+	const char *remainder;
+	static char have_initialized;
+	static size_t out_strlen;
+	static size_t settings_strlen;
+	static size_t databases_strlen;
+	static size_t errors_strlen;
+	static size_t calibration_strlen;
+	int ret;
+	int i;
+
+	homepath = getenv("HOME");
+	if (!homepath) {
+		homepath = "/";
+		if (!have_warned && getenv("PRELOAD_DEBUG")) {
+			fprintf(stderr, "preload_debug: WARNING: HOME is unset, using \"/\" (root) instead.\n");
+			have_warned = 1;
+		}
+	}
+
+	if (!have_initialized) {
+		/*
+		 * The directories that Saleae Logic expects to find.
+		 * The first element is intentionally empty (create base dir).
+		 */
+		char *dirs[] = {"", "/Settings", "/Databases", "/Errors", "/Calibration"};
+		char old_settings_path[PATH_MAX];
+		access_func_t orig_access;
+
+		out_strlen = strlen(OUT);
+		settings_strlen = out_strlen + strlen("/Settings");
+		databases_strlen = out_strlen + strlen("/Databases");
+		errors_strlen = out_strlen + strlen("/Errors");
+		calibration_strlen = out_strlen + strlen("/Calibration");
+		for (i = 0; i < sizeof dirs / sizeof dirs[0]; i++) {
+			snprintf(buffer, PATH_MAX, "%s/.saleae-logic%s", homepath, dirs[i]);
+			buffer[PATH_MAX-1] = '\0';
+			ret = mkdir(buffer, 0755);
+			if (0 != ret && errno != EEXIST) {
+				fprintf(stderr, "ERROR: Failed to create directory \"%s\": %s\n",
+						buffer, strerror(errno));
+				return NULL;
+			}
+		}
+
+		/*
+		 * Automatic migration of the settings file:
+		 * ~/.saleae-logic-settings.xml => ~/.saleae-logic/Settings/settings.xml
+		 */
+		snprintf(old_settings_path, PATH_MAX, "%s/.saleae-logic-settings.xml", homepath);
+		old_settings_path[PATH_MAX-1] = '\0';
+		orig_access = (access_func_t)dlsym(RTLD_NEXT, "access");
+		if (orig_access(old_settings_path, F_OK) == 0) {
+			snprintf(buffer, PATH_MAX, "%s/.saleae-logic/Settings/settings.xml", homepath);
+			buffer[PATH_MAX-1] = '\0';
+			ret = rename(old_settings_path, buffer);
+			if (ret != 0) {
+				fprintf(stderr, "WARN: Failed to move %s to %s",
+						old_settings_path, buffer);
+			}
+		}
+
+		have_initialized = 1;
+	}
+
+	new_path = pathname;
+	remainder = pathname + out_strlen;
+
+	if ((strncmp(OUT "/Settings", pathname, settings_strlen) == 0) ||
+	    (strncmp(OUT "/Databases", pathname, databases_strlen) == 0) ||
+	    (strncmp(OUT "/Errors", pathname, errors_strlen) == 0) ||
+	    (strncmp(OUT "/Calibration", pathname, calibration_strlen) == 0)) {
+		snprintf(buffer, PATH_MAX, "%s/.saleae-logic%s", homepath, remainder);
+		buffer[PATH_MAX-1] = '\0';
+		new_path = buffer;
+	}
+
+	return new_path;
+}
+
+FILE *fopen(const char *pathname, const char *mode)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	fopen_func_t orig_fopen;
+
+	orig_fopen = (fopen_func_t)dlsym(RTLD_NEXT, "fopen");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: fopen(\"%s\", \"%s\") => \"%s\"\n", pathname, mode, path);
+	}
+
+	return orig_fopen(path, mode);
+}
+
+FILE *fopen64(const char *pathname, const char *mode)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	fopen64_func_t orig_fopen64;
+
+	orig_fopen64 = (fopen64_func_t)dlsym(RTLD_NEXT, "fopen64");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: fopen64(\"%s\", \"%s\") => \"%s\"\n", pathname, mode, path);
+	}
+
+	return orig_fopen64(path, mode);
+}
+
+int open(const char *pathname, int flags, ...)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	open_func_t orig_open;
+
+	orig_open = (open_func_t)dlsym(RTLD_NEXT, "open");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: open(\"%s\", ...) => \"%s\"\n", pathname, path);
+	}
+
+	return orig_open(path, flags);
+}
+
+int open64(const char *pathname, int flags, ...)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	open64_func_t orig_open64;
+
+	orig_open64 = (open64_func_t)dlsym(RTLD_NEXT, "open64");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: open64(\"%s\", ...) => \"%s\"\n", pathname, path);
+	}
+
+	return orig_open64(path, flags);
+}
+
+int openat(int dirfd, const char *pathname, int flags, ...)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	openat_func_t orig_openat;
+
+	orig_openat = (openat_func_t)dlsym(RTLD_NEXT, "openat");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: openat(%d, \"%s\", %#x) => \"%s\"\n", dirfd, pathname, flags, path);
+	}
+
+	return orig_openat(dirfd, path, flags);
+}
+
+int openat64(int dirfd, const char *pathname, int flags, ...)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	openat64_func_t orig_openat64;
+
+	orig_openat64 = (openat64_func_t)dlsym(RTLD_NEXT, "openat64");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: openat64(%d, \"%s\", %#x) => \"%s\"\n", dirfd, pathname, flags, path);
+	}
+
+	return orig_openat64(dirfd, path, flags);
+}
+
+/*
+ * Notes about "stat".
+ *
+ * The stat function is special, at least in glibc, in that it cannot be
+ * directly overridden by LD_PRELOAD, due to it being inline wrapper around
+ * __xstat. The __xstat functions take one extra parameter, a version number,
+ * to indicate what "struct stat" should look like. This trick allows changing
+ * the contents of mode_t without changing the shared library major number. See
+ * sys/stat.h header for more info.
+ */
+int __xstat(int vers, const char *pathname, struct stat *buf)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	xstat_func_t orig_xstat;
+
+	orig_xstat = (xstat_func_t)dlsym(RTLD_NEXT, "__xstat");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: (__x)stat(\"%s\", ...) => \"%s\"\n", pathname, path);
+	}
+
+	return orig_xstat(vers, path, buf);
+}
+
+int __xstat64(int vers, const char *pathname, struct stat64 *buf)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	xstat64_func_t orig_xstat64;
+
+	orig_xstat64 = (xstat64_func_t)dlsym(RTLD_NEXT, "__xstat64");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: (__x)stat64(\"%s\", ...) => \"%s\"\n", pathname, path);
+	}
+
+	return orig_xstat64(vers, path, buf);
+}
+
+int access(const char *pathname, int mode)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	access_func_t orig_access;
+
+	orig_access = (access_func_t)dlsym(RTLD_NEXT, "access");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: access(\"%s\", ...) => \"%s\"\n", pathname, path);
+	}
+
+	return orig_access(path, mode);
+}
+
+int faccessat(int dirfd, const char *pathname, int mode, int flags)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	faccessat_func_t orig_faccessat;
+
+	orig_faccessat = (faccessat_func_t)dlsym(RTLD_NEXT, "faccessat");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: faccessat(\"%s\", ...) => \"%s\"\n", pathname, path);
+	}
+
+	return orig_faccessat(dirfd, path, mode, flags);
+}
+
+int unlink(const char *pathname)
+{
+	const char *path;
+	char buffer[PATH_MAX];
+	unlink_func_t orig_unlink;
+
+	orig_unlink = (unlink_func_t)dlsym(RTLD_NEXT, "unlink");
+	path = redirect(pathname, buffer);
+	if (path != pathname && getenv("PRELOAD_DEBUG")) {
+		fprintf(stderr, "preload_debug: unlink(\"%s\") => \"%s\"\n", pathname, path);
+	}
+
+	return orig_unlink(path);
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/semver-tool/default.nix b/nixpkgs/pkgs/development/tools/misc/semver-tool/default.nix
new file mode 100644
index 000000000000..879346a2b796
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/semver-tool/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "semver-tool";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "fsaintjacques";
+    repo = pname;
+    rev = version;
+    sha256 = "0lpwsa86qb5w6vbnsn892nb3qpxxx9ifxch8pw3ahzx2dqhdgnrr";
+  };
+
+  dontBuild = true; # otherwise we try to 'make' which fails.
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    install src/semver $out/bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = https://github.com/fsaintjacques/semver-tool;
+    description = "semver bash implementation";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.qyliss ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/sipp/default.nix b/nixpkgs/pkgs/development/tools/misc/sipp/default.nix
new file mode 100644
index 000000000000..a506831cd8ea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/sipp/default.nix
@@ -0,0 +1,41 @@
+{stdenv, fetchFromGitHub, autoreconfHook, ncurses, libpcap }:
+
+stdenv.mkDerivation rec {
+  version = "3.5.1";
+
+  name = "sipp-${version}";
+
+  src = fetchFromGitHub {
+    owner = "SIPp";
+    repo = "sipp";
+    rev = "v${version}";
+    sha256 = "179a1fvqyk3jpxbi28l1xfw22cw9vgvxrn19w5f38w74x0jwqg5k";
+  };
+
+  patchPhase = ''
+    sed -i "s@pcap/\(.*\).pcap@$out/share/pcap/\1.pcap@g" src/scenario.cpp
+    sed -i -e "s|AC_CHECK_LIB(curses|AC_CHECK_LIB(ncurses|" configure.ac
+    echo "#define SIPP_VERSION \"v${version}\"" > include/version.h
+  '';
+
+  configureFlags = [
+    "--with-pcap"
+  ];
+
+  postInstall = ''
+    mkdir -pv $out/share/pcap
+    cp pcap/* $out/share/pcap
+  '';
+
+  buildInputs = [ncurses libpcap];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with stdenv.lib; {
+    homepage = http://sipp.sf.net;
+    description = "The SIPp testing tool";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/misc/sloccount/default.nix b/nixpkgs/pkgs/development/tools/misc/sloccount/default.nix
new file mode 100644
index 000000000000..965f0ed096cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/sloccount/default.nix
@@ -0,0 +1,72 @@
+{ fetchurl, stdenv, perl, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "sloccount-2.26";
+
+  src = fetchurl {
+    url = "https://www.dwheeler.com/sloccount/${name}.tar.gz";
+    sha256 = "0ayiwfjdh1946asah861ah9269s5xkc8p5fv1wnxs9znyaxs4zzs";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
+
+  # Make sure the Flex-generated files are newer than the `.l' files, so that
+  # Flex isn't needed to recompile them.
+  patchPhase = ''
+    for file in *
+    do
+      if grep -q /usr/bin/perl "$file"
+      then
+          echo "patching \`$file'..."
+          substituteInPlace "$file" --replace \
+            "/usr/bin/perl" "${perl}/bin/perl"
+      fi
+    done
+
+    for file in *.l
+    do
+      touch "$(echo $file | sed -es'/\.l$/.c/g')"
+    done
+  '';
+
+  makeFlags = "PREFIX=$(out) CC=cc";
+
+  doCheck = true;
+  checkPhase = ''HOME="$TMPDIR" PATH="$PWD:$PATH" make test'';
+
+  preInstall = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/man/man1"
+    mkdir -p "$out/share/doc"
+  '';
+
+  postInstall = ''
+    for w in "$out/bin"/*; do
+      isScript "$w" || continue
+      wrapProgram "$w" --prefix PATH : "$out/bin"
+    done
+    '';
+
+  meta = {
+    description = "Set of tools for counting physical Source Lines of Code (SLOC)";
+
+    longDescription = ''
+      This is the home page of "SLOCCount", a set of tools for
+      counting physical Source Lines of Code (SLOC) in a large number
+      of languages of a potentially large set of programs.  This suite
+      of tools was used in my papers More than a Gigabuck: Estimating
+      GNU/Linux's Size and Estimating Linux's Size to measure the SLOC
+      of entire GNU/Linux distributions, and my essay Linux Kernel
+      2.6: It's Worth More!  Others have measured Debian GNU/Linux and
+      the Perl CPAN library using this tool suite.
+    '';
+
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    homepage = https://www.dwheeler.com/sloccount/;
+
+    maintainers = [ ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/sqitch/default.nix b/nixpkgs/pkgs/development/tools/misc/sqitch/default.nix
new file mode 100644
index 000000000000..a077367622eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/sqitch/default.nix
@@ -0,0 +1,28 @@
+{ name, stdenv, perl, makeWrapper, sqitchModule, databaseModule }:
+
+stdenv.mkDerivation {
+  name = "${name}-${sqitchModule.version}";
+
+  buildInputs = [ perl makeWrapper sqitchModule databaseModule ];
+
+  src = sqitchModule;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    for d in bin/sqitch etc lib share ; do
+      # make sure dest alreay exists before symlink
+      # this prevents installing a broken link into the path
+      if [ -e ${sqitchModule}/$d ]; then
+        ln -s ${sqitchModule}/$d $out/$d
+      fi
+    done
+  '';
+  dontStrip = true;
+  postFixup = "wrapProgram $out/bin/sqitch --prefix PERL5LIB : $PERL5LIB";
+
+  meta = {
+    platforms = stdenv.lib.platforms.unix;
+    inherit (sqitchModule.meta) license;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/srecord/default.nix b/nixpkgs/pkgs/development/tools/misc/srecord/default.nix
new file mode 100644
index 000000000000..a76a180741ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/srecord/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, boost, libtool, groff, ghostscript, libgcrypt ? null }:
+
+stdenv.mkDerivation rec {
+  name = "srecord-1.64";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/srecord/${name}.tar.gz";
+    sha256 = "1qk75q0k5vzmm3932q9hqz2gp8n9rrdfjacsswxc02656f3l3929";
+  };
+
+  buildInputs = [ boost libtool groff ghostscript libgcrypt ];
+
+  configureFlags = [
+    (stdenv.lib.optional (libgcrypt == null) "--without-gcrypt")
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Collection of powerful tools for manipulating EPROM load files";
+    homepage = http://srecord.sourceforge.net/;
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.bjornfor ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/stlink/default.nix b/nixpkgs/pkgs/development/tools/misc/stlink/default.nix
new file mode 100644
index 000000000000..90f901e51125
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/stlink/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, cmake, libusb1 }:
+
+# IMPORTANT: You need permissions to access the stlink usb devices. 
+# Add services.udev.pkgs = [ pkgs.stlink ] to your configuration.nix
+
+let
+  version = "1.3.0";
+in
+stdenv.mkDerivation {
+  name = "stlink-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/texane/stlink/archive/${version}.tar.gz";
+    sha256 = "3e8cba21744d2c38a0557f6835a05189e1b98202931bb0183d22efc462c893dd";
+  };
+
+  buildInputs = [ cmake libusb1 ];
+  patchPhase = ''
+    sed -i 's@/etc/udev/rules.d@$ENV{out}/etc/udev/rules.d@' CMakeLists.txt
+    sed -i 's@/etc/modprobe.d@$ENV{out}/etc/modprobe.d@' CMakeLists.txt
+  '';
+  preInstall = ''
+    mkdir -p $out/etc/udev/rules.d
+    mkdir -p $out/etc/modprobe.d
+  '';
+
+  meta = with stdenv.lib; {
+    description = "In-circuit debug and programming for ST-Link devices";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor maintainers.rongcuid ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/stm32flash/default.nix b/nixpkgs/pkgs/development/tools/misc/stm32flash/default.nix
new file mode 100644
index 000000000000..553ded815ef8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/stm32flash/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "stm32flash-0.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/stm32flash/${name}.tar.gz";
+    sha256 = "01p396daqw3zh6nijffbfbwyqza33bi2k4q3m5yjzs02xwi99alp";
+  };
+
+  buildFlags = [ "CC=cc" ];
+
+  installPhase = ''
+    # Manually copy, make install copies to /usr/local/bin
+    mkdir -pv $out/bin/
+    cp stm32flash $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Open source flash program for the STM32 ARM processors using the ST bootloader";
+    homepage = https://sourceforge.net/projects/stm32flash/;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = platforms.all; # Should work on all platforms
+    maintainers = with maintainers; [ the-kenny elitak ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/strace/default.nix b/nixpkgs/pkgs/development/tools/misc/strace/default.nix
new file mode 100644
index 000000000000..49b12b60b146
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/strace/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, perl, libunwind, buildPackages }:
+
+stdenv.mkDerivation rec {
+  name = "strace-${version}";
+  version = "5.1";
+
+  src = fetchurl {
+    url = "https://strace.io/files/${version}/${name}.tar.xz";
+    sha256 = "12wsga1v3rab24gr0mpfip7j7gwr90m8f9h6fviqxa3xgnwl38zm";
+  };
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ perl ];
+
+  buildInputs = stdenv.lib.optional libunwind.supportsHost libunwind; # support -k
+
+  configureFlags = stdenv.lib.optional (!stdenv.hostPlatform.isx86) "--enable-mpers=check";
+
+  # fails 1 out of 523 tests with
+  # "strace-k.test: failed test: ../../strace -e getpid -k ../stack-fcall output mismatch"
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://strace.io/;
+    description = "A system call tracer for Linux";
+    license =  with licenses; [ lgpl21Plus gpl2Plus ]; # gpl2Plus is for the test suite
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/swig/2.x.nix b/nixpkgs/pkgs/development/tools/misc/swig/2.x.nix
new file mode 100644
index 000000000000..9f0e767c3d0b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/swig/2.x.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, bison, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "swig";
+  version = "2.0.12";
+
+  src = fetchFromGitHub {
+    owner = "swig";
+    repo = "swig";
+    rev = "rel-${version}";
+    sha256 = "0khm9gh5pczfcihr0pbicaicc4v9kjm5ip2alvkhmbb3ga6njkcm";
+  };
+
+  nativeBuildInputs = [ autoconf automake libtool bison ];
+  buildInputs = [ pcre ];
+
+  configureFlags = [ "--without-tcl" ];
+
+  # Disable ccache documentation as it needs yodl
+  postPatch = ''
+    sed -i '/man1/d' CCache/Makefile.in
+  '';
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with stdenv.lib; {
+    description = "SWIG, an interface compiler that connects C/C++ code to higher-level languages";
+    homepage = http://swig.org/;
+    # Different types of licenses available: http://www.swig.org/Release/LICENSE .
+    license = licenses.gpl3Plus;
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/swig/3.x.nix b/nixpkgs/pkgs/development/tools/misc/swig/3.x.nix
new file mode 100644
index 000000000000..bec855f3cee6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/swig/3.x.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, libtool, bison, pcre, buildPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "swig";
+  version = "3.0.12";
+
+  src = fetchFromGitHub {
+    owner = "swig";
+    repo = "swig";
+    rev = "rel-${version}";
+    sha256 = "1wyffskbkzj5zyhjnnpip80xzsjcr3p0q5486z3wdwabnysnhn8n";
+  };
+
+  PCRE_CONFIG = "${pcre.dev}/bin/pcre-config";
+  nativeBuildInputs = [ autoconf automake libtool bison ];
+  buildInputs = [ pcre ];
+
+  configureFlags = [ "--without-tcl" ];
+
+  # Disable ccache documentation as it needs yodl
+  postPatch = ''
+    sed -i '/man1/d' CCache/Makefile.in
+  '';
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with stdenv.lib; {
+    description = "SWIG, an interface compiler that connects C/C++ code to higher-level languages";
+    homepage = http://swig.org/;
+    # Different types of licenses available: http://www.swig.org/Release/LICENSE .
+    license = licenses.gpl3Plus;
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/swig/default.nix b/nixpkgs/pkgs/development/tools/misc/swig/default.nix
new file mode 100644
index 000000000000..e74b2898498c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/swig/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, boost, tcl }:
+
+stdenv.mkDerivation rec {
+  pname = "swig";
+  version = "1.3.40";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/swig/${pname}-${version}.tar.gz";
+    sha256 = "02dc8g8wy75nd2is1974rl24c6mdl0ai1vszs1xpg9nd7dlv6i8r";
+  };
+
+  doCheck = !stdenv.isCygwin;
+  # 'make check' uses boost and tcl
+  buildInputs = stdenv.lib.optionals doCheck [ boost tcl ];
+
+  configureFlags = [ "--disable-ccache" ];
+
+
+  meta = with stdenv.lib; {
+    description = "SWIG, an interface compiler that connects C/C++ code to higher-level languages";
+    homepage = http://swig.org/;
+    # Different types of licenses available: http://www.swig.org/Release/LICENSE .
+    license = licenses.gpl3Plus;
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/sysbench/default.nix b/nixpkgs/pkgs/development/tools/misc/sysbench/default.nix
new file mode 100644
index 000000000000..7b6048eb475d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/sysbench/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, vim, mysql
+, libaio }:
+
+stdenv.mkDerivation rec {
+  name = "sysbench-1.0.17";
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ vim mysql.connector-c libaio ];
+
+  src = fetchFromGitHub {
+    owner = "akopytov";
+    repo = "sysbench";
+    rev = "1.0.17";
+    sha256 = "02i9knvp0bjw6ri848xxiy2dbww2xv70nah9yn67a6zgw617hwa6";
+  };
+
+  meta = {
+    description = "Modular, cross-platform and multi-threaded benchmark tool";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/tcptrack/default.nix b/nixpkgs/pkgs/development/tools/misc/tcptrack/default.nix
new file mode 100644
index 000000000000..b50aa088ac57
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tcptrack/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, ncurses, libpcap }:
+
+stdenv.mkDerivation rec {
+  name = "tcptrack-${version}";
+  version = "1.4.3";
+
+  src = fetchFromGitHub {
+    owner = "bchretien";
+    repo = "tcptrack";
+    rev = "d05fe08154ff1e46578e92be49e4cfa2c6543283";
+    sha256 = "08lh3l67wn4kq9q0nfspc7rj0jvp9dzwjgxpvqliwcif8cy5mi45";
+  };
+
+  buildInputs = [ ncurses libpcap ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=cpp";
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "libpcap based program for live TCP connection monitoring";
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor maintainers.vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/teensy-loader-cli/default.nix b/nixpkgs/pkgs/development/tools/misc/teensy-loader-cli/default.nix
new file mode 100644
index 000000000000..91f2a5c58fc2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/teensy-loader-cli/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, unzip, libusb, fetchgit }:
+let
+  version = "2.1";
+in
+stdenv.mkDerivation {
+  name = "teensy-loader-cli-${version}";
+  src = fetchgit {
+    url = "git://github.com/PaulStoffregen/teensy_loader_cli.git";
+    rev = "f5b6d7aafda9a8b014b4bb08660833ca45c136d2";
+    sha256 = "1a663bv3lvm7bsf2wcaj2c0vpmniak7w5hwix5qgz608bvm2v781";
+  };
+
+  buildInputs = [ libusb ];
+
+  installPhase = ''
+    install -Dm755 teensy_loader_cli $out/bin/teensy-loader-cli
+  '';
+
+  meta = with stdenv.lib; {
+    license = licenses.gpl3;
+    description = "Firmware uploader for the Teensy microcontroller boards";
+    homepage = https://www.pjrc.com/teensy/;
+    maintainers = with maintainers; [ the-kenny ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/tet/default.nix b/nixpkgs/pkgs/development/tools/misc/tet/default.nix
new file mode 100644
index 000000000000..77b362c712c2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tet/default.nix
@@ -0,0 +1,29 @@
+{ fetchurl, stdenv }:
+
+stdenv.mkDerivation (rec {
+  version = "3.8";
+  name = "tet-${version}";
+
+  src = fetchurl {
+    url = http://tetworks.opengroup.org/downloads/38/software/Sources/3.8/tet3.8-src.tar.gz ;
+    sha256 = "1j57hv56df38w249l595b8rsgmsyvjkbysai03a9724gax5jl9av" ;
+  };
+
+  buildInputs = [ ];
+
+  patchPhase = ''chmod +x configure'';
+
+  configurePhase = ''./configure -t lite'';
+
+  buildPhase = ''cd src; make; cd -'';
+
+  installPhase = ''cd src; make install; cd -; cp -vr $PWD $out'';
+
+  meta = {
+    description = "The Test Environment Toolkit is used in test applications like The Open Group's UNIX Certification program and the Free Standards Group's LSB Certification program";
+    homepage = http://tetworks.opengroup.org/Products/tet.htm ;
+    license = stdenv.lib.licenses.artistic1;
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/misc/texi2html/default.nix b/nixpkgs/pkgs/development/tools/misc/texi2html/default.nix
new file mode 100644
index 000000000000..b094f05e9516
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texi2html/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  name = "texi2html-1.82";
+
+  src = fetchurl {
+    url = "mirror://savannah/texi2html/${name}.tar.bz2";
+    sha256 = "1wdli2szkgm3l0vx8rf6lylw0b0m47dlz9iy004n928nqkzix76n";
+  };
+
+  buildInputs = [perl];
+
+  meta = { 
+    description = "Perl script which converts Texinfo source files to HTML output";
+    homepage = https://www.nongnu.org/texi2html/;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [stdenv.lib.maintainers.marcweber];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/4.13a.nix b/nixpkgs/pkgs/development/tools/misc/texinfo/4.13a.nix
new file mode 100644
index 000000000000..63e5bea19d74
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/4.13a.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, texinfo, ncurses, lzma }:
+
+stdenv.mkDerivation rec {
+  name = "texinfo-${version}";
+  version = "4.13a";
+
+  src = fetchurl {
+    url = "mirror://gnu/texinfo/${name}.tar.lzma";
+    sha256 = "1rf9ckpqwixj65bw469i634897xwlgkm5i9g2hv3avl6mv7b0a3d";
+  };
+
+  buildInputs = [ ncurses ];
+  nativeBuildInputs = [ lzma ];
+
+  # Disabled because we don't have zdiff in the stdenv bootstrap.
+  #doCheck = true;
+
+  meta = texinfo.meta // { branch = version; };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/5.2.nix b/nixpkgs/pkgs/development/tools/misc/texinfo/5.2.nix
new file mode 100644
index 000000000000..d395494984d5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/5.2.nix
@@ -0,0 +1,4 @@
+import ./common.nix {
+  version = "5.2";
+  sha256 = "1njfwh2z34r2c4r0iqa7v24wmjzvsfyz4vplzry8ln3479lfywal";
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/6.5.nix b/nixpkgs/pkgs/development/tools/misc/texinfo/6.5.nix
new file mode 100644
index 000000000000..34596f306581
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/6.5.nix
@@ -0,0 +1,4 @@
+import ./common.nix {
+  version = "6.5";
+  sha256 = "0qjzvbvnv9003xdrcpi3jp7y68j4hq2ciw9frh2hghh698zlnxvp";
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/common.nix b/nixpkgs/pkgs/development/tools/misc/texinfo/common.nix
new file mode 100644
index 000000000000..613fd2673d56
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/common.nix
@@ -0,0 +1,68 @@
+{ version, sha256 }:
+
+{ stdenv, buildPackages, fetchurl, perl, xz
+
+# we are a dependency of gcc, this simplifies bootstraping
+, interactive ? false, ncurses, procps
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  name = "texinfo-${optionalString interactive "interactive-"}${version}";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://gnu/texinfo/texinfo-${version}.tar.xz";
+    inherit sha256;
+  };
+
+  patches = optional (version == "6.5") ./perl.patch;
+
+  # We need a native compiler to build perl XS extensions
+  # when cross-compiling.
+  depsBuildBuild = [ buildPackages.stdenv.cc perl ];
+
+  buildInputs = [ xz.bin ]
+    ++ optionals stdenv.isSunOS [ libiconv gawk ]
+    ++ optional interactive ncurses;
+
+  configureFlags = [ "PERL=${buildPackages.perl}/bin/perl" ]
+    ++ stdenv.lib.optional stdenv.isSunOS "AWK=${gawk}/bin/awk";
+
+  preInstall = ''
+    installFlags="TEXMF=$out/texmf-dist";
+    installTargets="install install-tex";
+  '';
+
+  checkInputs = [ procps ];
+
+  doCheck = interactive
+    && !stdenv.isDarwin
+    && !stdenv.isSunOS; # flaky
+
+  meta = {
+    homepage = https://www.gnu.org/software/texinfo/;
+    description = "The GNU documentation system";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ vrthra oxij ];
+
+    longDescription = ''
+      Texinfo is the official documentation format of the GNU project.
+      It was invented by Richard Stallman and Bob Chassell many years
+      ago, loosely based on Brian Reid's Scribe and other formatting
+      languages of the time.  It is used by many non-GNU projects as
+      well.
+
+      Texinfo uses a single source file to produce output in a number
+      of formats, both online and printed (dvi, html, info, pdf, xml,
+      etc.).  This means that instead of writing different documents
+      for online information and another for a printed manual, you
+      need write only one document.  And when the work is revised, you
+      need revise only that one document.  The Texinfo system is
+      well-integrated with GNU Emacs.
+    '';
+    branch = version;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/perl.patch b/nixpkgs/pkgs/development/tools/misc/texinfo/perl.patch
new file mode 100644
index 000000000000..e651b37371c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/perl.patch
@@ -0,0 +1,43 @@
+Adapted from http://svn.savannah.gnu.org/viewvc/texinfo/
+Author: gavin
+--- trunk/tp/Texinfo/Parser.pm  2018-06-04 19:51:36 UTC (rev 8006)
++++ trunk/tp/Texinfo/Parser.pm  2018-07-13 15:31:28 UTC (rev 8007)
+@@ -5531,11 +5531,11 @@
+     }
+   } elsif ($command eq 'clickstyle') {
+     # REMACRO
+-    if ($line =~ /^\s+@([[:alnum:]][[:alnum:]\-]*)({})?\s*/) {
++    if ($line =~ /^\s+@([[:alnum:]][[:alnum:]\-]*)(\{\})?\s*/) {
+       $args = ['@'.$1];
+       $self->{'clickstyle'} = $1;
+       $remaining = $line;
+-      $remaining =~ s/^\s+@([[:alnum:]][[:alnum:]\-]*)({})?\s*(\@(c|comment)((\@|\s+).*)?)?//;
++      $remaining =~ s/^\s+@([[:alnum:]][[:alnum:]\-]*)(\{\})?\s*(\@(c|comment)((\@|\s+).*)?)?//;
+       $has_comment = 1 if (defined($4));
+     } else {
+       $self->line_error (sprintf($self->__(
+--- trunk/tp/Texinfo/Convert/XSParagraph/xspara.c       2018-07-13 15:31:28 UTC (rev 8007)
++++ trunk/tp/Texinfo/Convert/XSParagraph/xspara.c       2018-07-13 15:39:29 UTC (rev 8008)
+@@ -248,6 +248,11 @@
+ 
+   dTHX;
+ 
++#if PERL_VERSION > 27 || (PERL_VERSION == 27 && PERL_SUBVERSION > 8)
++  /* needed due to thread-safe locale handling in newer perls */
++  switch_to_global_locale();
++#endif
++
+   if (setlocale (LC_CTYPE, "en_US.UTF-8")
+       || setlocale (LC_CTYPE, "en_US.utf8"))
+     goto success;
+@@ -320,6 +325,10 @@
+     {
+ success: ;
+       free (utf8_locale);
++#if PERL_VERSION > 27 || (PERL_VERSION == 27 && PERL_SUBVERSION > 8)
++      /* needed due to thread-safe locale handling in newer perls */
++      sync_locale();
++#endif
+       /*
+       fprintf (stderr, "tried to set LC_CTYPE to UTF-8.\n");
+       fprintf (stderr, "character encoding is: %s\n",
diff --git a/nixpkgs/pkgs/development/tools/misc/tie/default.nix b/nixpkgs/pkgs/development/tools/misc/tie/default.nix
new file mode 100644
index 000000000000..c380243a898b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tie/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "tie-${version}";
+  version = "2.4";
+
+  src = fetchurl {
+    url = "http://mirrors.ctan.org/web/tie/${name}.tar.gz";
+    sha256 = "1m5952kdfffiz33p1jw0wv7dh272mmw28mpxw9v7lkb352zv4xsj";
+  };
+
+  buildPhase = ''
+    cc tie.c -o tie
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp tie $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.ctan.org/tex-archive/web/tie;
+    description = "Allow multiple web change files";
+    platforms = with platforms; unix;
+    maintainers = with maintainers; [ vrthra ];
+    license = licenses.abstyles;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/tokei/default.nix b/nixpkgs/pkgs/development/tools/misc/tokei/default.nix
new file mode 100644
index 000000000000..f77e30b45ae9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tokei/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, rustPlatform, libiconv, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tokei";
+  version = "9.1.1";
+
+  src = fetchFromGitHub {
+    owner = "XAMPPRocky";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0gz8m5j9p7hwylyl7cdxbli9rpy1p6lsrbym4zk647819pg4k1jp";
+  };
+
+  cargoSha256 = "19h0ybi9qq5shvr7zix0gb24a29lqkvyfc5xbgps8wqgfrhx4nqa";
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [
+    libiconv darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Program that displays statistics about your code";
+    homepage = https://github.com/XAMPPRocky/tokei;
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ gebner ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/travis/Gemfile b/nixpkgs/pkgs/development/tools/misc/travis/Gemfile
new file mode 100644
index 000000000000..9b1967e6b9b6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/travis/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "travis", "1.8.9"
diff --git a/nixpkgs/pkgs/development/tools/misc/travis/Gemfile.lock b/nixpkgs/pkgs/development/tools/misc/travis/Gemfile.lock
new file mode 100644
index 000000000000..3dc948a7cd89
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/travis/Gemfile.lock
@@ -0,0 +1,51 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.4.0)
+    backports (3.11.4)
+    ethon (0.11.0)
+      ffi (>= 1.3.0)
+    faraday (0.15.2)
+      multipart-post (>= 1.2, < 3)
+    faraday_middleware (0.12.2)
+      faraday (>= 0.7.4, < 1.0)
+    ffi (1.9.25)
+    gh (0.15.1)
+      addressable (~> 2.4.0)
+      backports
+      faraday (~> 0.8)
+      multi_json (~> 1.0)
+      net-http-persistent (~> 2.9)
+      net-http-pipeline
+    highline (1.7.10)
+    json (2.1.0)
+    launchy (2.4.3)
+      addressable (~> 2.3)
+    multi_json (1.13.1)
+    multipart-post (2.0.0)
+    net-http-persistent (2.9.4)
+    net-http-pipeline (1.0.1)
+    pusher-client (0.6.2)
+      json
+      websocket (~> 1.0)
+    travis (1.8.9)
+      backports
+      faraday (~> 0.9)
+      faraday_middleware (~> 0.9, >= 0.9.1)
+      gh (~> 0.13)
+      highline (~> 1.6)
+      launchy (~> 2.1)
+      pusher-client (~> 0.4)
+      typhoeus (~> 0.6, >= 0.6.8)
+    typhoeus (0.8.0)
+      ethon (>= 0.8.0)
+    websocket (1.2.8)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  travis (= 1.8.9)
+
+BUNDLED WITH
+   1.14.6
diff --git a/nixpkgs/pkgs/development/tools/misc/travis/default.nix b/nixpkgs/pkgs/development/tools/misc/travis/default.nix
new file mode 100644
index 000000000000..b5c5740e80ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/travis/default.nix
@@ -0,0 +1,19 @@
+{ lib, bundlerEnv, ruby }:
+
+# Maintainer notes for updating
+# 1. increment version number in Gemfile
+# 2. run $ nix-shell --command "bundler install && bundix"
+#    in the travis directory in nixpkgs
+
+bundlerEnv {
+  inherit ruby;
+  pname = "travis";
+  gemdir = ./.;
+
+  meta = with lib; {
+    description = "CLI and Ruby client library for Travis CI";
+    homepage    = https://github.com/travis-ci/travis.rb;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/travis/gemset.nix b/nixpkgs/pkgs/development/tools/misc/travis/gemset.nix
new file mode 100644
index 000000000000..2ca55dbdee3e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/travis/gemset.nix
@@ -0,0 +1,154 @@
+{
+  addressable = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mpn7sbjl477h56gmxsjqb89r5s3w7vx5af994ssgc3iamvgzgvs";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  backports = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hshjxww2h7s0dk57njrygq4zpp0nlqrjfya7zwm27iq3rhc3y8g";
+      type = "gem";
+    };
+    version = "3.11.4";
+  };
+  ethon = {
+    dependencies = ["ffi"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y70szwm2p0b9qfvpqrzjrgm3jz0ig65vlbfr6ppc3z0m1h7kv48";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14lg0c4bphk16rccc5jmaan6nfcvmy0caiahpc61f9zfwpsj7ymg";
+      type = "gem";
+    };
+    version = "0.15.2";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p7icfl28nvl8qqdsngryz1snqic9l8x6bk0dxd7ygn230y0k41d";
+      type = "gem";
+    };
+    version = "0.12.2";
+  };
+  ffi = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jpm2dis1j7zvvy3lg7axz9jml316zrn7s0j59vyq3qr127z0m7q";
+      type = "gem";
+    };
+    version = "1.9.25";
+  };
+  gh = {
+    dependencies = ["addressable" "backports" "faraday" "multi_json" "net-http-persistent" "net-http-pipeline"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g4df0jsscq16g6f27flfmvk7p4sbq81d5mdylbz4ikqq60kywzg";
+      type = "gem";
+    };
+    version = "0.15.1";
+  };
+  highline = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01ib7jp85xjc4gh4jg0wyzllm46hwv8p0w1m4c75pbgi41fps50y";
+      type = "gem";
+    };
+    version = "1.7.10";
+  };
+  json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  launchy = {
+    dependencies = ["addressable"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "190lfbiy1vwxhbgn4nl4dcbzxvm049jwc158r2x7kq3g5khjrxa2";
+      type = "gem";
+    };
+    version = "2.4.3";
+  };
+  multi_json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  multipart-post = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  net-http-persistent = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y9fhaax0d9kkslyiqi1zys6cvpaqx9a0y0cywp24rpygwh4s9r4";
+      type = "gem";
+    };
+    version = "2.9.4";
+  };
+  net-http-pipeline = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bxjy33yhxwsbnld8xj3zv64ibgfjn9rjpiqkyd5ipmz50pww8v9";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  pusher-client = {
+    dependencies = ["json" "websocket"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18ymxz34gmg7jff3h0nyzp5vdg5i06dbdxlrdl2nq4hf14qwj1f4";
+      type = "gem";
+    };
+    version = "0.6.2";
+  };
+  travis = {
+    dependencies = ["backports" "faraday" "faraday_middleware" "gh" "highline" "launchy" "pusher-client" "typhoeus"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lw206zr2waic1kmm6x9qj91975g035wfsvbqs09z1cy8cvp63yw";
+      type = "gem";
+    };
+    version = "1.8.9";
+  };
+  typhoeus = {
+    dependencies = ["ethon"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03x3fxjsnhgayl4s96h0a9975awlvx2v9nmx2ba0cnliglyczdr8";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  websocket = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f11rcn4qgffb1rq4kjfwi7di79w8840x9l74pkyif5arp0mb08x";
+      type = "gem";
+    };
+    version = "1.2.8";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/misc/travis/shell.nix b/nixpkgs/pkgs/development/tools/misc/travis/shell.nix
new file mode 100644
index 000000000000..ddcf493bb468
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/travis/shell.nix
@@ -0,0 +1,11 @@
+# Env to update Gemfile.lock / gemset.nix
+
+with import <nixpkgs> {};
+stdenv.mkDerivation {
+  name = "env";
+  buildInputs = [
+    ruby.devEnv
+    gnumake
+    bundix
+  ];
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/trv/default.nix b/nixpkgs/pkgs/development/tools/misc/trv/default.nix
new file mode 100644
index 000000000000..11caf8e7b20e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/trv/default.nix
@@ -0,0 +1,37 @@
+{stdenv, fetchFromGitHub, ocaml, findlib, camlp4, core_p4, async_p4, async_unix_p4
+, re2_p4, async_extra_p4, sexplib_p4, async_shell, core_extended_p4, async_find
+, cohttp, conduit, magic-mime
+}:
+
+assert stdenv.lib.versionOlder "4.02" ocaml.version;
+
+stdenv.mkDerivation rec {
+  name = "trv-${version}";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "afiniate";
+    repo = "trv";
+    rev = "${version}";
+    sha256 = "0fv0zh76djqhkzfzwv6k60rnky50pw9gn01lwhijrggrcxrrphz1";
+  };
+
+
+  buildInputs = [ ocaml findlib camlp4 ];
+  propagatedBuildInputs = [ core_p4 async_p4 async_unix_p4
+                            async_extra_p4 sexplib_p4 async_shell core_extended_p4
+                            async_find cohttp conduit magic-mime re2_p4 ];
+
+  createFindlibDestdir = true;
+  dontStrip = true;
+
+  installFlags = "SEMVER=${version} PREFIX=$(out)";
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/afiniate/trv;
+    description = "Shim for vrt to enable bootstrapping";
+    license = licenses.asl20;
+    maintainers = [ maintainers.ericbmerritt ];
+    platforms = ocaml.meta.platforms or [];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/uisp/default.nix b/nixpkgs/pkgs/development/tools/misc/uisp/default.nix
new file mode 100644
index 000000000000..1727f772006e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/uisp/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "uisp-20050207";
+
+  src = fetchurl {
+    url = http://mirror.switch.ch/mirror/gentoo/distfiles/uisp-20050207.tar.gz;
+    sha256 = "1bncxp5yxh9r1yrp04vvhfiva8livi1pwic7v8xj99q09zrwahvw";
+  };
+
+  NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  meta = {
+    description = "Tool for AVR microcontrollers which can interface to many hardware in-system programmers";
+    license = stdenv.lib.licenses.gpl2;
+    homepage = https://savannah.nongnu.org/projects/uisp;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/uncrustify/default.nix b/nixpkgs/pkgs/development/tools/misc/uncrustify/default.nix
new file mode 100644
index 000000000000..d85cd1a82164
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/uncrustify/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  name = "${product}-${version}";
+  product = "uncrustify";
+  version = "0.67";
+
+  src = fetchFromGitHub {
+    owner = product;
+    repo = product;
+    rev = name;
+    sha256 = "0hf8c93aj1hjg6cc77x6p7nf7ddp8mn4b6a9gpcrvmx8w81afpd3";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Source code beautifier for C, C++, C#, ObjectiveC, D, Java, Pawn and VALA";
+    homepage = http://uncrustify.sourceforge.net/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/unifdef/default.nix b/nixpkgs/pkgs/development/tools/misc/unifdef/default.nix
new file mode 100644
index 000000000000..8fc268423505
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/unifdef/default.nix
@@ -0,0 +1,31 @@
+{ fetchurl, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "unifdef-2.6";
+
+  src = fetchurl {
+    url    = "https://github.com/fanf2/unifdef/archive/${name}.tar.gz";
+    sha256 = "1p5wr5ms9w8kijy9h7qs1mz36dlavdj6ngz2bks588w7a20kcqxj";
+  };
+
+  postUnpack = ''
+    substituteInPlace $sourceRoot/unifdef.c \
+      --replace '#include "version.h"' ""
+
+    substituteInPlace $sourceRoot/Makefile \
+      --replace "unifdef.c: version.h" "unifdef.c:"
+  '';
+
+  preBuild = ''
+    unset HOME
+    export DESTDIR=$out
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://dotat.at/prog/unifdef/;
+    description = "Selectively remove C preprocessor conditionals";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/universal-ctags/default.nix b/nixpkgs/pkgs/development/tools/misc/universal-ctags/default.nix
new file mode 100644
index 000000000000..57de59605f30
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/universal-ctags/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, perl, pythonPackages, libiconv }:
+
+stdenv.mkDerivation rec {
+  name = "universal-ctags-${version}";
+  version = "2018-07-23";
+
+  src = fetchFromGitHub {
+    owner = "universal-ctags";
+    repo = "ctags";
+    rev = "3522685695ad3312cf4b19399e0c44f3395dd089";
+    sha256 = "1f67hy8c2yr9z4ydsqd7wg8iagzn01qjw2ccx6g8mngv3i3jz9mv";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig pythonPackages.docutils ];
+  buildInputs = stdenv.lib.optional stdenv.isDarwin libiconv;
+
+  # to generate makefile.in
+  autoreconfPhase = ''
+    ./autogen.sh
+  '';
+
+  configureFlags = [ "--enable-tmpdir=/tmp" ];
+
+  postConfigure = ''
+    sed -i 's|/usr/bin/env perl|${perl}/bin/perl|' misc/optlib2c
+  '';
+
+  doCheck = true;
+
+  checkFlags = "units";
+
+  meta = with stdenv.lib; {
+    description = "A maintained ctags implementation";
+    homepage = https://ctags.io/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    # universal-ctags is preferred over emacs's ctags
+    priority = 1;
+    maintainers = [ maintainers.mimadrid ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/universal-ctags/sed-test.patch b/nixpkgs/pkgs/development/tools/misc/universal-ctags/sed-test.patch
new file mode 100644
index 000000000000..7c44d699d79a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/universal-ctags/sed-test.patch
@@ -0,0 +1,12 @@
+--- a/Tmain/sorted-help-message.d/run.sh	2017-01-10 11:20:51.515093465 +0100
++++ b/Tmain/sorted-help-message.d/run.sh	2017-01-10 11:17:56.639213720 +0100
+@@ -27,7 +27,7 @@
+ extract_long_options()
+ {
+     sed -n '/Usage:/,$p'  | \
+-    sed -n 's/\(^  --[:alnum:][<>[:alnum:]_-]*\).*/\1/p'
++    sed -n 's/\(^  --[[:alnum:]][<>[:alnum:]_-]*\).*/\1/p'
+ }
+
+ extract_debug_options()
+
diff --git a/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/data.nix b/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/data.nix
new file mode 100644
index 000000000000..0fa854f9b2a1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/data.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, tcl, usb-modeswitch }:
+
+stdenv.mkDerivation rec {
+  name = "usb-modeswitch-data-${version}";
+  version = "20170806";
+
+  src = fetchurl {
+    url    = "http://www.draisberghof.de/usb_modeswitch/${name}.tar.bz2";
+    sha256 = "0b1wari3aza6qjggqd0hk2zsh93k1q8scgmwh6f8wr0flpr3whff";
+  };
+
+  inherit (usb-modeswitch) makeFlags;
+
+  prePatch = ''
+    sed -i 's@usb_modeswitch@${usb-modeswitch}/bin/usb_modeswitch@g' 40-usb_modeswitch.rules
+  '';
+
+  # we add tcl here so we can patch in support for new devices by dropping config into
+  # the usb_modeswitch.d directory
+  nativeBuildInputs = [ tcl ];
+
+  meta = with stdenv.lib; {
+    description = "Device database and the rules file for 'multi-mode' USB devices";
+    inherit (usb-modeswitch.meta) license maintainers platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/default.nix b/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/default.nix
new file mode 100644
index 000000000000..d34a94e04670
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, pkgconfig, libusb1 }:
+
+stdenv.mkDerivation rec {
+  name = "usb-modeswitch-${version}";
+  version = "2.5.2";
+
+  src = fetchurl {
+    url    = "http://www.draisberghof.de/usb_modeswitch/${name}.tar.bz2";
+    sha256 = "19ifi80g9ns5dmspchjvfj4ykxssq9yrci8m227dgb3yr04srzxb";
+  };
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX=$(out)"
+  ];
+
+  # make clean: we always build from source. It should be necessary on x86_64 only
+  preConfigure = ''
+    find -type f | xargs sed 's@/bin/rm@rm@g' -i
+    make clean
+  '';
+
+  buildInputs = [ libusb1 ];
+  nativeBuildInputs = [ pkgconfig ];
+
+  meta = with stdenv.lib; {
+    description = "A mode switching tool for controlling 'multi-mode' USB devices";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ marcweber peterhoeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/vtable-dumper/default.nix b/nixpkgs/pkgs/development/tools/misc/vtable-dumper/default.nix
new file mode 100644
index 000000000000..e806a7796386
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/vtable-dumper/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, libelf }:
+
+stdenv.mkDerivation rec {
+  name = "vtable-dumper-${version}";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "lvc";
+    repo = "vtable-dumper";
+    rev = version;
+    sha256 = "0sl7lnjr2l4c2f7qaazvpwpzsp4gckkvccfam88wcq9f7j9xxbyp";
+  };
+
+  buildInputs = [ libelf ];
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/lvc/vtable-dumper;
+    description = "A tool to list content of virtual tables in a C++ shared library";
+    license = licenses.lgpl21;
+    maintainers = [ maintainers.bhipple ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile b/nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile
new file mode 100644
index 000000000000..fc739389e84e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'watson-ruby'
diff --git a/nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile.lock b/nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile.lock
new file mode 100644
index 000000000000..fa157d794f73
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/watson-ruby/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    json (2.1.0)
+    watson-ruby (1.6.3)
+      json
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  watson-ruby
+
+BUNDLED WITH
+   1.14.4
diff --git a/nixpkgs/pkgs/development/tools/misc/watson-ruby/default.nix b/nixpkgs/pkgs/development/tools/misc/watson-ruby/default.nix
new file mode 100644
index 000000000000..32f94a1f2285
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/watson-ruby/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, bundlerEnv, ruby }:
+
+
+stdenv.mkDerivation rec {
+  name = "watson-ruby-${version}";
+  version = (import ./gemset.nix).watson-ruby.version;
+
+  env = bundlerEnv rec {
+    name = "watson-ruby-gems-${version}";
+    inherit ruby;
+    # expects Gemfile, Gemfile.lock and gemset.nix in the same directory
+    gemdir = ./.;
+  };
+
+  phases = [ "installPhase" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    ln -s ${env}/bin/watson $out/bin/watson
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An inline issue manager";
+    homepage    = http://goosecode.com/watson/;
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ robertodr ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/watson-ruby/gemset.nix b/nixpkgs/pkgs/development/tools/misc/watson-ruby/gemset.nix
new file mode 100644
index 000000000000..a3bb144899c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/watson-ruby/gemset.nix
@@ -0,0 +1,18 @@
+{
+  json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  watson-ruby = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d5m29nr0i030q8ygmbapwri5ndcg2q6lf8a15bk79lfcp9xyj9w";
+      type = "gem";
+    };
+    version = "1.6.3";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/misc/whatstyle/default.nix b/nixpkgs/pkgs/development/tools/misc/whatstyle/default.nix
new file mode 100644
index 000000000000..0c6e4f568ffc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/whatstyle/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, python3, fetchFromGitHub, clang-unwrapped }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "whatstyle";
+  version = "0.1.7";
+  src = fetchFromGitHub {
+    owner = "mikr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "16ak4g149cr764c1lqakiyzmf5s98w8bdc4gk69m8qacimfg3mzm";
+  };
+
+  # Fix references to previous version, to avoid confusion:
+  postPatch = ''
+    substituteInPlace setup.py --replace 0.1.6 ${version}
+    substituteInPlace ${pname}.py --replace 0.1.6 ${version}
+  '';
+
+  checkInputs = [ clang-unwrapped /* clang-format */ ];
+
+  doCheck = false; # 3 or 4 failures depending on version, haven't investigated.
+
+  meta = with stdenv.lib; {
+    description = "Find a code format style that fits given source files";
+    homepage = https://github.com/mikr/whatstyle;
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/xc3sprog/default.nix b/nixpkgs/pkgs/development/tools/misc/xc3sprog/default.nix
new file mode 100644
index 000000000000..8f3f6c1b22a7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/xc3sprog/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchsvn, cmake, libusb, libftdi }:
+
+# The xc3sprog project doesn't seem to make proper releases, they only put out
+# prebuilt binary subversion snapshots on sourceforge.
+
+stdenv.mkDerivation rec {
+  version = "787";
+  name = "xc3sprog-${version}";
+
+  src = fetchsvn rec {
+    url = "https://svn.code.sf.net/p/xc3sprog/code/trunk";
+    sha256 = "1rfhms3i7375kdlg0sdg5k52ix3xv5llj2dr30vamyg7pk74y8rx";
+    rev = "${version}";
+  };
+
+  buildInputs = [ cmake libusb libftdi ];
+
+  meta = with stdenv.lib; {
+    description = "Command-line tools for programming FPGAs, microcontrollers and PROMs via JTAG";
+    homepage = http://xc3sprog.sourceforge.net/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/xxdiff/default.nix b/nixpkgs/pkgs/development/tools/misc/xxdiff/default.nix
new file mode 100644
index 000000000000..51f4de8eacce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/xxdiff/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, qt4, flex, bison, docutils }:
+
+stdenv.mkDerivation rec {
+  name = "xxdiff-4.0.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/xxdiff/${name}.tar.bz2";
+    sha256 = "0050qd12fvlcfdh0iwjsaxgxdq7jsl70f85fbi7pz23skpddsn5z";
+  };
+
+  nativeBuildInputs = [ flex bison qt4 docutils ];
+
+  buildInputs = [ qt4 ];
+
+  QMAKE = "qmake";
+
+  configurePhase = "cd src; make -f Makefile.bootstrap";
+
+  installPhase = "mkdir -pv $out/bin; cp -v ../bin/xxdiff $out/bin";
+
+  meta = with stdenv.lib; {
+    homepage = http://furius.ca/xxdiff/;
+    description = "Graphical file and directories comparator and merge tool";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/xxdiff/tip.nix b/nixpkgs/pkgs/development/tools/misc/xxdiff/tip.nix
new file mode 100644
index 000000000000..1424b8fe1974
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/xxdiff/tip.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromBitbucket, qtbase, flex, bison, docutils }:
+
+stdenv.mkDerivation rec {
+  name = "xxdiff-5.0b1";
+
+  src = fetchFromBitbucket {
+    owner = "blais";
+    repo = "xxdiff";
+    rev = "5e5f885dfc43559549a81c59e9e8c9525306356a";
+    sha256 = "0gbvxrkwkbvag3298j89smszghpr8ilxxfb0cvsknfqdf15b296w";
+  };
+
+  nativeBuildInputs = [ flex bison docutils ];
+
+  buildInputs = [ qtbase ];
+
+  # Fixes build with Qt 5.9
+  NIX_CFLAGS_COMPILE = [ "-std=c++11" ];
+
+  preConfigure = ''
+    cd src
+    make -f Makefile.bootstrap
+  '';
+
+  postInstall = ''
+    install -D ../bin/xxdiff $out/bin/xxdiff
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://furius.ca/xxdiff/;
+    description = "Graphical file and directories comparator and merge tool";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub raskin ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ycmd/default.nix b/nixpkgs/pkgs/development/tools/misc/ycmd/default.nix
new file mode 100644
index 000000000000..062f90e3389d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ycmd/default.nix
@@ -0,0 +1,83 @@
+{ stdenv, lib, fetchgit, cmake, llvmPackages, boost, python
+, gocode ? null
+, godef ? null
+, rustracerd ? null
+, fixDarwinDylibNames, Cocoa ? null
+}:
+
+stdenv.mkDerivation rec {
+  name = "ycmd-${version}";
+  version = "2018-09-20";
+
+  src = fetchgit {
+    url = "https://github.com/Valloric/ycmd.git";
+    rev = "bf658fd78722c517674c0aaf2381e199bca8f163";
+    sha256 = "1lwa8xr76vapfpncvp81cn3m9219yw14fl7fzk5gnly60zkphbbl";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ boost llvmPackages.libclang ]
+    ++ stdenv.lib.optional stdenv.isDarwin [ fixDarwinDylibNames Cocoa ];
+
+  buildPhase = ''
+    export EXTRA_CMAKE_ARGS=-DPATH_TO_LLVM_ROOT=${llvmPackages.clang-unwrapped}
+    ${python.interpreter} build.py --system-libclang --clang-completer --system-boost
+  '';
+
+  configurePhase = ":";
+
+  # remove the tests
+  #
+  # make __main__.py executable and add shebang
+  #
+  # copy over third-party libs
+  # note: if we switch to using our packaged libs, we'll need to symlink them
+  # into the same spots, as YouCompleteMe (the vim plugin) expects those paths
+  # to be available
+  #
+  # symlink completion backends where ycmd expects them
+  installPhase = ''
+    rm -rf ycmd/tests
+
+    chmod +x ycmd/__main__.py
+    sed -i "1i #!${python.interpreter}\
+    " ycmd/__main__.py
+
+    mkdir -p $out/lib/ycmd
+    cp -r ycmd/ CORE_VERSION libclang.so.* libclang.dylib* ycm_core.so $out/lib/ycmd/
+
+    mkdir -p $out/bin
+    ln -s $out/lib/ycmd/ycmd/__main__.py $out/bin/ycmd
+
+    mkdir -p $out/lib/ycmd/third_party/{gocode,godef,racerd/target/release}
+
+    for p in jedi waitress frozendict bottle parso python-future requests; do
+      cp -r third_party/$p $out/lib/ycmd/third_party
+    done
+
+  '' + lib.optionalString (gocode != null) ''
+    ln -s ${gocode}/bin/gocode $out/lib/ycmd/third_party/gocode
+  '' + lib.optionalString (godef != null) ''
+    ln -s ${godef}/bin/godef $out/lib/ycmd/third_party/godef
+  '' + lib.optionalString (rustracerd != null) ''
+    ln -s ${rustracerd}/bin/racerd $out/lib/ycmd/third_party/racerd/target/release
+  '';
+
+  # fixup the argv[0] and replace __file__ with the corresponding path so
+  # python won't be thrown off by argv[0]
+  postFixup = ''
+    substituteInPlace $out/lib/ycmd/ycmd/__main__.py \
+      --replace $out/lib/ycmd/ycmd/__main__.py \
+                $out/bin/ycmd \
+      --replace __file__ \
+                "'$out/lib/ycmd/ycmd/__main__.py'"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A code-completion and comprehension server";
+    homepage = https://github.com/Valloric/ycmd;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ rasendubi cstrahan lnl7 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/yodl/default.nix b/nixpkgs/pkgs/development/tools/misc/yodl/default.nix
new file mode 100644
index 000000000000..76130f255fde
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/yodl/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchFromGitLab, perl, icmake, utillinux }:
+
+stdenv.mkDerivation rec {
+  name = "yodl-${version}";
+  version = "4.02.01";
+
+  nativeBuildInputs = [ icmake ];
+
+  buildInputs = [ perl ];
+
+  src = fetchFromGitLab {
+    sha256 = "0m8idd8m3z27rix55avchm21sd2spcxgrdf63w65zpvnywq0ydax";
+    rev = version;
+    repo = "yodl";
+    owner = "fbb-git";
+  };
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */yodl)
+  '';
+
+  preConfigure = ''
+    patchShebangs ./build
+    patchShebangs scripts/
+    substituteInPlace INSTALL.im --replace /usr $out
+    substituteInPlace macros/rawmacros/startdoc.pl --replace /usr/bin/perl ${perl}/bin/perl
+    substituteInPlace scripts/yodl2whatever.in --replace getopt ${utillinux}/bin/getopt
+  '';
+
+  # Set TERM because icmbuild calls tput.
+  TERM = "xterm";
+
+  buildPhase = ''
+    ./build programs
+    ./build macros
+    ./build man
+  '';
+
+  installPhase = ''
+    ./build install programs
+    ./build install macros
+    ./build install man
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A package that implements a pre-document language and tools to process it";
+    homepage = https://fbb-git.gitlab.io/yodl/;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mod/default.nix b/nixpkgs/pkgs/development/tools/mod/default.nix
new file mode 100644
index 000000000000..6390c1d7fd24
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mod/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  name = "mod-${version}";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "marwan-at-work";
+    repo = "mod";
+    rev = "v${version}";
+    sha256 = "1v7qy0q6fb9amcggwzdygl290zhr3w3zgmig2rm5zx91kw973sqc";
+  };
+
+  modSha256 = "1s33i4kp1vzfp97909pyzdlvi69siw1i2lbi2kbp9yrn163w6928";
+
+  subPackages = [ "cmd/mod" ];
+
+  meta = with lib; {
+    description = "Automated Semantic Import Versioning Upgrades for Go";
+    longDescription = ''
+      Command line tool to upgrade/downgrade Semantic Import Versioning in Go
+      Modules.
+      '';
+    homepage = https://github.com/marwan-at-work/mod;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/modd/default.nix b/nixpkgs/pkgs/development/tools/modd/default.nix
new file mode 100644
index 000000000000..47beb1a22418
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/modd/default.nix
@@ -0,0 +1,22 @@
+{ buildGoPackage, fetchFromGitHub, stdenv }:
+
+buildGoPackage rec {
+  pname = "modd";
+  version = "0.8";
+  src = fetchFromGitHub {
+    owner = "cortesi";
+    repo = "modd";
+    rev = "v${version}";
+    sha256 = "1dmfpbpcvbx4sl4q1hwbfpalq1ml03w1cca7x40y18g570qk7aq5";
+  };
+  goPackagePath = "github.com/cortesi/modd";
+  subPackages = [ "cmd/modd" ];
+  goDeps = ./deps.nix;
+  meta = with stdenv.lib; {
+    description = "A flexible developer tool that runs processes and responds to filesystem changes";
+    homepage = https://github.com/cortesi/modd;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kierdavis ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/modd/deps.nix b/nixpkgs/pkgs/development/tools/modd/deps.nix
new file mode 100644
index 000000000000..42190e655778
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/modd/deps.nix
@@ -0,0 +1,138 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    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/bmatcuk/doublestar";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bmatcuk/doublestar";
+      rev =  "85a78806aa1b4707d1dbace9be592cf1ece91ab3";
+      sha256 = "01fd5j142pgsj5gfba43646aa6vd09fzvjhhik2r30nj4lsyy3z8";
+    };
+  }
+  {
+    goPackagePath  = "github.com/cortesi/moddwatch";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cortesi/moddwatch";
+      rev =  "d27f53de245eb09b9e475d498cc01c91ba8e89c8";
+      sha256 = "1ivxk6zxrc5rhd0p5kqi8jg58ql2mwdvrxvfzz8fkj1lxz975p9p";
+    };
+  }
+  {
+    goPackagePath  = "github.com/cortesi/termlog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cortesi/termlog";
+      rev =  "87cefd5ac843f65364f70a1fd2477bb6437690e8";
+      sha256 = "1mygv1bv6dkm5p1wsvzrsyq771k6apdcxlyfqdp5ay8vl75jxvmb";
+    };
+  }
+  {
+    goPackagePath  = "github.com/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev =  "3f9d52f7176a6927daacff70a3e8d1dc2025c53e";
+      sha256 = "165ww24x6ba47ji4j14mp3f006ksnmi53ws9280pgd2zcw91nbn8";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev =  "167de6bfdfba052fa6b2d3664c8f5272e23c9072";
+      sha256 = "1nwjmsppsjicr7anq8na6md7b1z84l9ppnlr045hhxjvbkqwalvx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev =  "6ca4dbf54d38eea1a992b3c722a76a5d1c4cb25c";
+      sha256 = "0zs92j2cqaw9j8qx1sdxpv3ap0rgbs0vrvi72m40mg8aa36gd39w";
+    };
+  }
+  {
+    goPackagePath  = "github.com/rjeczalik/notify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rjeczalik/notify";
+      rev =  "629144ba06a1c6af28c1e42c228e3d42594ce081";
+      sha256 = "0745w0mdr9xfr4rxw4pfr1sl8apc7wr7mvfykdl4wslq3mdj8a91";
+    };
+  }
+  {
+    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 =  "927f97764cc334a6575f4b7a1584a147864d5723";
+      sha256 = "0np7b766gb92vbm514yhdl7cjmqvn0dxdxskd84aas2ri1fkpgw5";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev =  "37e7f081c4d4c64e13b10787722085407fe5d15f";
+      sha256 = "1bb0mw6ckb1k7z8v3iil2qlqwfj408fvvp8m1cik2b46p7snyjhm";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "b4a75ba826a64a70990f11a225237acd6ef35c9f";
+      sha256 = "0kzrd2wywkcq35iakbzplqyma4bvf2ng3mzi7917kxcbdq3fflrj";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/alecthomas/kingpin.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/kingpin";
+      rev =  "947dcec5ba9c011838740e680966fd7087a71d0d";
+      sha256 = "0mndnv3hdngr3bxp7yxfd47cas4prv98sqw534mx7vp38gd88n5r";
+    };
+  }
+  {
+    goPackagePath  = "mvdan.cc/sh";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mvdan/sh";
+      rev =  "8aeb0734cd0f08b7a473c9ac816be8687ca909cc";
+      sha256 = "1mj8qfkyb6k490qjy3riq6pm440qajf5lc8m74x7xhq5059qkgxx";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/mpfshell/default.nix b/nixpkgs/pkgs/development/tools/mpfshell/default.nix
new file mode 100644
index 000000000000..b44e52aa2bf5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mpfshell/default.nix
@@ -0,0 +1,23 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonPackage rec {
+  name = "mpfshell-${version}";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "wendlers";
+    repo = "mpfshell";
+    rev = version;
+    sha256 = "1n4ap4yfii54y125f9n9krc0lc0drwg3hsq4z6g89xbswdx9sygr";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    pyserial colorama websocket_client
+  ];
+
+  meta = with lib; {
+    homepage = https://github.com/wendlers/mpfshell;
+    description = "A simple shell based file explorer for ESP8266 Micropython based devices";
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/msgpack-tools/default.nix b/nixpkgs/pkgs/development/tools/msgpack-tools/default.nix
new file mode 100644
index 000000000000..2b5f42b2cbe5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/msgpack-tools/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchurl, fetchFromGitHub, cmake, unzip }:
+stdenv.mkDerivation rec {
+  name = "msgpack-tools-${version}";
+  version = "0.6";
+
+  src = fetchFromGitHub {
+    owner = "ludocode";
+    repo = "msgpack-tools";
+    rev = "v${version}";
+    sha256 = "1ygjk25zlpqjckxgqmahnz999704zy2bd9id6hp5jych1szkjgs5";
+  };
+
+  libb64 = fetchurl {
+    url = "mirror://sourceforge/libb64/libb64-1.2.1.zip";
+    sha256 = "1chlcc8qggzxnbpy5wrda533xyz38dk20w9wl4srrzawm45ny410";
+  };
+
+  rapidjson = fetchurl {
+    url = "https://github.com/miloyip/rapidjson/archive/99ba17bd66a85ec64a2f322b68c2b9c3b77a4391.tar.gz";
+    sha256 = "0jxgyy5n0lf9w36dycwwgz2wici4z9dnxlsn0z6m23zaa47g3wyw";
+  };
+
+  mpack = fetchurl {
+    url = "https://github.com/ludocode/mpack/archive/df17e83f0fa8571b9cd0d8ccf38144fa90e244d1.tar.gz";
+    sha256 = "1br8g3rf86h8z8wbqkd50aq40953862lgn0xk7cy68m07fhqc3pg";
+  };
+
+  postUnpack = ''
+    mkdir $sourceRoot/contrib
+    cp ${rapidjson} $sourceRoot/contrib/rapidjson-99ba17bd66a85ec64a2f322b68c2b9c3b77a4391.tar.gz
+    cp ${libb64} $sourceRoot/contrib/libb64-1.2.1.zip
+    cp ${mpack} $sourceRoot/contrib/mpack-df17e83f0fa8571b9cd0d8ccf38144fa90e244d1.tar.gz
+  '';
+
+
+  buildInputs = [ cmake unzip ];
+
+  meta = with stdenv.lib; {
+    description = "Command-line tools for converting between MessagePack and JSON";
+    homepage = https://github.com/ludocode/msgpack-tools;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ alibabzo ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mustache-go/default.nix b/nixpkgs/pkgs/development/tools/mustache-go/default.nix
new file mode 100644
index 000000000000..0b060624de3d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mustache-go/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "mustache-go-${version}";
+  version = "1.0.1";
+
+  goPackagePath = "github.com/cbroglie/mustache";
+
+  src = fetchFromGitHub {
+    owner = "cbroglie";
+    repo = "mustache";
+    rev = "v${version}";
+    sha256 = "1aywj4fijsv66n6gjiz3l8g1vg0fqzwbf8dcdcgfsvsdb056p90v";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/cbroglie/mustache;
+    description = "The mustache template language in Go";
+    license = [ licenses.mit ];
+    maintainers = [ maintainers.Zimmi48 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nailgun/default.nix b/nixpkgs/pkgs/development/tools/nailgun/default.nix
new file mode 100644
index 000000000000..07005131fb5e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nailgun/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchMavenArtifact, fetchFromGitHub, jre, makeWrapper }:
+
+let
+  version = "1.0.0";
+  nailgun-server = fetchMavenArtifact {
+    groupId = "com.facebook";
+    artifactId = "nailgun-server";
+    inherit version;
+    sha256 = "1mk8pv0g2xg9m0gsb96plbh6mc24xrlyrmnqac5mlbl4637l4q95";
+  };
+in
+stdenv.mkDerivation rec {
+  name = "nailgun-${version}";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = "nailgun";
+    rev = "nailgun-all-v${version}";
+    sha256 = "1syyk4ss5vq1zf0ma00svn56lal53ffpikgqgzngzbwyksnfdlh6";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    makeWrapper ${jre}/bin/java $out/bin/ng-server \
+      --add-flags '-classpath ${nailgun-server.jar}:$CLASSPATH com.facebook.nailgun.NGServer'
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Client, protocol, and server for running Java programs from the command line without incurring the JVM startup overhead";
+    homepage = http://www.martiansoftware.com/nailgun/;
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ volth ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/neoload/default.nix b/nixpkgs/pkgs/development/tools/neoload/default.nix
new file mode 100644
index 000000000000..06945f10eb23
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/neoload/default.nix
@@ -0,0 +1,95 @@
+{ stdenv, fetchurl, writeTextFile, jre, makeWrapper, fontsConf, licenseAccepted ? false }:
+
+# If you happen to use this software on the XMonad window manager, you will have issues with
+# grey windows, no resizing, menus not showing and other glitches.
+# This can be fixed by setting a different WM name:
+# http://www.haskell.org/haskellwiki/Xmonad/Frequently_asked_questions#Using_SetWMName
+
+if !licenseAccepted then throw ''
+    You have to accept the neoload EULA at
+    https://www.neotys.com/documents/legal/eula/neoload/eula_en.html
+    by setting nixpkgs config option 'neoload.accept_license = true';
+  ''
+else assert licenseAccepted;
+
+# the installer is very picky and demands 1.7.0.07
+let dotInstall4j = path: writeTextFile { name = "dot-install4j"; text = ''
+      JRE_VERSION	${path}	1	7	0	7
+      JRE_INFO	${path}	94
+    ''; };
+
+    responseVarfile = writeTextFile { name = "response.varfile"; text = ''
+      sys.programGroupDisabled$Boolean=false
+      sys.component.Monitor\ Agent$Boolean=true
+      sys.component.Common$Boolean=true
+      sys.component.Controller$Boolean=true
+      sys.languageId=en
+      sys.component.Load\ Generator$Boolean=true
+      sys.installationTypeId=Controller
+      sys.installationDir=INSTALLDIR/lib/neoload
+      sys.symlinkDir=INSTALLDIR/bin
+    ''; };
+
+in stdenv.mkDerivation rec {
+  name = "neoload-4.1.4";
+
+  src = fetchurl (
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      { url = http://neoload.installers.neotys.com/documents/download/neoload/v4.1/neoload_4_1_4_linux_x64.sh;
+        sha256 = "199jcf5a0nwfm8wfld2rcjgq64g91vvz2bkmki8dxfzf1yasifcd"; }
+    else
+      { url = http://neoload.installers.neotys.com/documents/download/neoload/v4.1/neoload_4_1_4_linux_x86.sh;
+        sha256 = "1z66jiwcxixsqqwa0f4q8m2p5kna4knq6lic8y8l74dgv25mw912"; } );
+
+  buildInputs = [ makeWrapper ];
+  phases = [ "installPhase" ];
+
+  # TODO: load generator / monitoring agent only builds
+
+  installPhase = ''
+    mkdir -p $out/lib/neoload
+
+    # the installer wants to use its internal JRE
+    # disable this. The extra spaces are needed because the installer carries
+    # a binary payload, so should not change in size
+    sed -e 's/^if \[ -f jre.tar.gz/if false          /' $src > installer
+    chmod a+x installer
+
+    cp ${dotInstall4j jre} .install4j
+    chmod u+w .install4j
+
+    sed -e "s|INSTALLDIR|$out|" ${responseVarfile} > response.varfile
+
+    export HOME=`pwd`
+    export INSTALL4J_JAVA_HOME=${jre.home}
+    export FONTCONFIG_FILE=${fontsConf}
+    bash -ic './installer -q -varfile response.varfile'
+
+    sed -i 's/Xmx450m/Xmx900m/;s/Xss192k/Xss384k/' $out/lib/neoload/conf/agent.properties
+
+    for i in $out/bin/*; do
+      wrapProgram $i --run 'cp ${dotInstall4j "${jre.home}/jre"} ~/.install4j' \
+                     --run 'chmod u+w ~/.install4j'
+    done
+
+    mkdir -p $out/share/applications
+    for i in $out/lib/neoload/*.desktop; do
+      name=$(basename "$i")
+      sed -e 's|/lib/neoload/bin|/bin|' "$i" > "$out/share/applications/$name"
+    done
+    rm -r $out/lib/neoload/*.desktop $out/lib/neoload/uninstall
+
+  '';
+
+  meta = {
+    description = "Load testing software for Web applications to realistically simulate user activity and analyze server behavior";
+
+    homepage = https://www.neotys.com/product/overview-neoload.html;
+
+    # https://www.neotys.com/documents/legal/eula/neoload/eula_en.html
+    license = stdenv.lib.licenses.unfree;
+
+    maintainers = [ stdenv.lib.maintainers.bluescreen303 ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/node-webkit/nw12.nix b/nixpkgs/pkgs/development/tools/node-webkit/nw12.nix
new file mode 100644
index 000000000000..099e31b8d62d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/node-webkit/nw12.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl, buildEnv, makeWrapper
+, xorg, alsaLib, dbus, glib, gtk2, atk, pango, freetype, fontconfig
+, gdk_pixbuf, cairo, nss, nspr, gconf, expat, systemd, libcap
+, libnotify}:
+let
+  bits = if stdenv.hostPlatform.system == "x86_64-linux" then "x64"
+         else "ia32";
+
+  nwEnv = buildEnv {
+    name = "nwjs-env";
+    paths = [
+      xorg.libX11 xorg.libXrender glib gtk2 atk pango cairo gdk_pixbuf
+      freetype fontconfig xorg.libXcomposite alsaLib xorg.libXdamage
+      xorg.libXext xorg.libXfixes nss nspr gconf expat dbus
+      xorg.libXtst xorg.libXi xorg.libXcursor xorg.libXrandr libcap
+      libnotify
+    ];
+
+    extraOutputsToInstall = [ "lib" "out" ];
+  };
+
+in stdenv.mkDerivation rec {
+  name = "nwjs-${version}";
+  version = "0.12.3";
+
+  src = fetchurl {
+    url = "https://dl.nwjs.io/v${version}/nwjs-v${version}-linux-${bits}.tar.gz";
+    sha256 = if bits == "x64" then
+      "1i5ipn5x188cx54pbbmjj1bz89vvcfx5z1c7pqy2xzglkyb2xsyg" else
+      "117gx6yjbcya64yg2vybcfyp591sid209pg8a33k9afbsmgz684c";
+  };
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  installPhase = ''
+    mkdir -p $out/share/nwjs
+    cp -R * $out/share/nwjs
+
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/share/nwjs/nw
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/share/nwjs/nwjc
+
+    ln -s ${systemd.lib}/lib/libudev.so $out/share/nwjs/libudev.so.0
+
+    patchelf --set-rpath "${nwEnv}/lib:${nwEnv}/lib64:${stdenv.lib.makeLibraryPath [ stdenv.cc.cc ]}:$out/share/nwjs" $out/share/nwjs/nw
+    patchelf --set-rpath "${nwEnv}/lib:${nwEnv}/lib64:$out/share/nwjs" $out/share/nwjs/nwjc
+
+    mkdir -p $out/bin
+    ln -s $out/share/nwjs/nw $out/bin
+    ln -s $out/share/nwjs/nwjc $out/bin
+  '';
+
+  buildInputs = [ makeWrapper ];
+
+  meta = with stdenv.lib; {
+    description = "An app runtime based on Chromium and node.js";
+    homepage = https://nwjs.io/;
+    platforms = ["i686-linux" "x86_64-linux"];
+    maintainers = [ maintainers.offline ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nrpl/default.nix b/nixpkgs/pkgs/development/tools/nrpl/default.nix
new file mode 100644
index 000000000000..234f5a5bfae7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nrpl/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch, makeWrapper, nim, pcre, tinycc }:
+
+stdenv.mkDerivation rec {
+  name = "nrpl-${version}";
+  version = "20150522";
+
+  src = fetchFromGitHub {
+    owner  = "wheineman";
+    repo   = "nrpl";
+    rev    = "6d6c189ab7d1c905cc29dc678d66e9e132026f69";
+    sha256 = "1cly9lhrawnc42r31b7r0p0i6hcx8r00aa17gv7w9pcpj8ngb4v2";
+  };
+
+  buildInputs = [ makeWrapper nim pcre ];
+
+  patches = [
+    (fetchpatch {
+      url    = https://patch-diff.githubusercontent.com/raw/wheineman/nrpl/pull/12.patch;
+      name   = "update_for_new_nim.patch";
+      sha256 = "1zff7inhn3l1jnxcnidy705lzi3wqib1chf4rayh1g9i23an7wg1";
+    })
+  ];
+
+  NIX_LDFLAGS = [
+    "-lpcre"
+  ];
+
+  buildPhase = ''
+    HOME=$TMPDIR
+    nim c -d:release nrpl.nim
+  '';
+
+  installPhase = "install -Dt $out/bin nrpl";
+
+  postFixup = ''
+    wrapProgram $out/bin/nrpl \
+      --prefix PATH : ${lib.makeBinPath [ nim tinycc ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "REPL for the Nim programming language";
+    homepage = https://github.com/wheineman/nrpl;
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nsis/default.nix b/nixpkgs/pkgs/development/tools/nsis/default.nix
new file mode 100644
index 000000000000..7117d7dd628f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nsis/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, fetchzip, scons, zlib }:
+
+stdenv.mkDerivation rec {
+  name = "nsis-${version}";
+  version = "3.04";
+
+  src =
+    fetchurl {
+      url = "mirror://sourceforge/project/nsis/NSIS%203/${version}/nsis-${version}-src.tar.bz2";
+      sha256 = "1xgllk2mk36ll2509hd31mfq6blgncmdzmwxj3ymrwshdh23d5b0";
+    };
+  srcWinDistributable =
+    fetchzip {
+      url = "mirror://sourceforge/project/nsis/NSIS%203/${version}/nsis-${version}.zip";
+      sha256 = "1g31vz73x4d3cmsw2wfk43qa06bpqp5815fb5qq9vmwms6hym6y2";
+    };
+
+  postUnpack = ''
+    mkdir -p $out/share/nsis
+    cp -avr ${srcWinDistributable}/{Contrib,Include,Plugins,Stubs} \
+      $out/share/nsis
+  '';
+
+  nativeBuildInputs = [ scons ];
+  buildInputs = [ zlib ];
+
+  sconsFlags = [
+    "SKIPSTUBS=all"
+    "SKIPPLUGINS=all"
+    "SKIPUTILS=all"
+    "SKIPMISC=all"
+    "APPEND_CPPPATH=${zlib.dev}/include"
+    "APPEND_LIBPATH=${zlib}/lib"
+    "NSIS_CONFIG_CONST_DATA=no"
+  ];
+
+  preBuild = ''
+    sconsFlagsArray+=("PATH=$PATH")
+  '';
+
+  prefixKey = "PREFIX=";
+  installTargets = "install-compiler";
+
+  meta = with stdenv.lib; {
+    description = "NSIS is a free scriptable win32 installer/uninstaller system that doesn't suck and isn't huge";
+    homepage = https://nsis.sourceforge.io/;
+    license = licenses.zlib;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pombeirp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nwjs/default.nix b/nixpkgs/pkgs/development/tools/nwjs/default.nix
new file mode 100644
index 000000000000..211934080c8f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nwjs/default.nix
@@ -0,0 +1,95 @@
+{ stdenv, fetchurl, buildEnv, makeWrapper
+
+, xorg, alsaLib, dbus, glib, gtk3, atk, pango, freetype, fontconfig
+, gdk_pixbuf, cairo, nss, nspr, gconf, expat, systemd, libcap
+, libnotify
+, ffmpeg, libxcb, cups
+, sqlite, udev
+, libuuid
+, sdk ? false
+}:
+let
+  bits = if stdenv.hostPlatform.system == "x86_64-linux" then "x64"
+         else "ia32";
+
+  nwEnv = buildEnv {
+    name = "nwjs-env";
+    paths = [
+      xorg.libX11 xorg.libXrender glib /*gtk2*/ gtk3 atk pango cairo gdk_pixbuf
+      freetype fontconfig xorg.libXcomposite alsaLib xorg.libXdamage
+      xorg.libXext xorg.libXfixes nss nspr gconf expat dbus
+      xorg.libXtst xorg.libXi xorg.libXcursor xorg.libXrandr
+      xorg.libXScrnSaver cups
+      libcap libnotify
+      # libnw-specific (not chromium dependencies)
+      ffmpeg libxcb
+      # chromium runtime deps (dlopen’d)
+      sqlite udev
+      libuuid
+    ];
+
+    extraOutputsToInstall = [ "lib" "out" ];
+  };
+
+in stdenv.mkDerivation rec {
+  name = "nwjs-${version}";
+  version = "0.33.4";
+
+  src = if sdk then fetchurl {
+    url = "https://dl.nwjs.io/v${version}/nwjs-sdk-v${version}-linux-${bits}.tar.gz";
+    sha256 = if bits == "x64" then
+      "1hi6xispxvyb6krm5j11mv8509dwpw5ikpbkvq135gsk3gm29c9y" else
+      "00p4clbfinrj5gp2i84a263l3h00z8g7mnx61qwmr0z02kvswz9s";
+  } else fetchurl {
+    url = "https://dl.nwjs.io/v${version}/nwjs-v${version}-linux-${bits}.tar.gz";
+    sha256 = if bits == "x64" then
+      "09zd6gja3l20xx03h2gawpmh9f8nxqjp8qdkds5nz9kbbckhkj52" else
+      "0nlpdz76k1p1pq4xygfr2an91m0d7p5fjyg2xhiggyy8b7sp4964";
+  };
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  # we have runtime deps like sqlite3 that should remain
+  dontPatchELF = true;
+
+  installPhase =
+    let ccPath = stdenv.lib.makeLibraryPath [ stdenv.cc.cc ];
+    in ''
+      mkdir -p $out/share/nwjs
+      cp -R * $out/share/nwjs
+      find $out/share/nwjs
+
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/share/nwjs/nw
+
+      ln -s ${systemd.lib}/lib/libudev.so $out/share/nwjs/libudev.so.0
+
+      libpath="$out/share/nwjs/lib/"
+      for f in "$libpath"/*.so; do
+        patchelf --set-rpath "${nwEnv}/lib:${ccPath}:$libpath" "$f"
+      done
+      patchelf --set-rpath "${nwEnv}/lib:${nwEnv}/lib64:${ccPath}:$libpath" $out/share/nwjs/nw
+      # check, whether all RPATHs are correct (all dependencies found)
+      checkfile=$(mktemp)
+      for f in "$libpath"/*.so "$out/share/nwjs/nw"; do
+         (echo "$f:";
+          ldd "$f"  ) > "$checkfile"
+      done
+      if <"$checkfile" grep -e "not found"; then
+        cat "$checkfile"
+        exit 1
+      fi
+
+      mkdir -p $out/bin
+      ln -s $out/share/nwjs/nw $out/bin
+  '';
+
+  buildInputs = [ makeWrapper ];
+
+  meta = with stdenv.lib; {
+    description = "An app runtime based on Chromium and node.js";
+    homepage = https://nwjs.io/;
+    platforms = ["i686-linux" "x86_64-linux"];
+    maintainers = [ maintainers.offline ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/camlidl/default.nix b/nixpkgs/pkgs/development/tools/ocaml/camlidl/default.nix
new file mode 100644
index 000000000000..7c7bf79acc7d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/camlidl/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, ocaml, writeText }:
+
+let
+  pname = "camlidl";
+  webpage = "http://caml.inria.fr/pub/old_caml_site/camlidl/";
+in
+stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+  version = "1.05";
+
+  src = fetchurl {
+    url = "http://caml.inria.fr/pub/old_caml_site/distrib/bazar-ocaml/${pname}-${version}.tar.gz";
+    sha256 = "0483cs66zsxsavcllpw1qqvyhxb39ddil3h72clcd69g7fyxazl5";
+  };
+
+  buildInputs = [ ocaml ];
+
+  preBuild = ''
+    mv config/Makefile.unix config/Makefile
+    substituteInPlace config/Makefile --replace BINDIR=/usr/local/bin BINDIR=$out
+    substituteInPlace config/Makefile --replace OCAMLLIB=/usr/local/lib/ocaml OCAMLLIB=$out/lib/ocaml/${ocaml.version}/site-lib/camlidl
+    substituteInPlace config/Makefile --replace CPP=/lib/cpp CPP=${stdenv.cc}/bin/cpp
+    substituteInPlace config/Makefile --replace "OCAMLC=ocamlc -g" "OCAMLC=ocamlc -g -warn-error -31"
+    mkdir -p $out/lib/ocaml/${ocaml.version}/site-lib/camlidl/caml
+  '';
+
+  postInstall = ''
+    cat >$out/lib/ocaml/${ocaml.version}/site-lib/camlidl/META <<EOF
+    # Courtesy of GODI
+    description = "Stub generator"
+    version = "${version}"
+    archive(byte) = "com.cma"
+    archive(native) = "com.cmxa"
+    EOF
+    mkdir -p $out/bin
+    ln -s $out/camlidl $out/bin
+  '';
+
+  setupHook = writeText "setupHook.sh" ''
+    export CAML_LD_LIBRARY_PATH="''${CAML_LD_LIBRARY_PATH}''${CAML_LD_LIBRARY_PATH:+:}''$1/lib/ocaml/${ocaml.version}/site-lib/${name}/"
+    export NIX_CFLAGS_COMPILE+=" -isystem $1/lib/ocaml/${ocaml.version}/site-lib/camlidl"
+    export NIX_LDFLAGS+=" -L $1/lib/ocaml/${ocaml.version}/site-lib/camlidl"
+  '';
+
+  meta = {
+    description = "A stub code generator and COM binding for Objective Caml";
+    homepage = "${webpage}";
+    license = "LGPL";
+    maintainers = [ stdenv.lib.maintainers.roconnor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/camlp4/default.nix b/nixpkgs/pkgs/development/tools/ocaml/camlp4/default.nix
new file mode 100644
index 000000000000..2974ca965fdc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/camlp4/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, fetchzip, which, ocaml, ocamlbuild }:
+
+let param = {
+  "4.02" = {
+     version = "4.02+6";
+     sha256 = "06yl4q0qazl7g25b0axd1gdkfd4qpqzs1gr5fkvmkrcbz113h1hj"; };
+  "4.03" = {
+     version = "4.03+1";
+     sha256 = "1f2ndch6f1m4fgnxsjb94qbpwjnjgdlya6pard44y6n0dqxi1wsq"; };
+  "4.04" = {
+     version = "4.04+1";
+     sha256 = "1ad7rygqjxrc1im95gw9lp8q83nhdaf383f2808f1p63yl42xm7k"; };
+  "4.05" = {
+     version = "4.05+1";
+     sha256 = "0wm795hpwvwpib9c9z6p8kw2fh7p7b2hml6g15z8zry3y7w738sv"; };
+  "4.06" = {
+     version = "4.06+1";
+     sha256 = "0fazfw2l7wdmbwnqc22xby5n4ri1wz27lw9pfzhsbcdrighykysf"; };
+  "4.07" = {
+     version = "4.07+1";
+     sha256 = "0cxl4hkqcvspvkx4f2k83217rh6051fll9i2yz7cw6m3bq57mdvl"; };
+  }."${ocaml.meta.branch}";
+in
+
+stdenv.mkDerivation rec {
+  name = "camlp4-${version}";
+  inherit (param) version;
+
+  src = fetchzip {
+    url = "https://github.com/ocaml/camlp4/archive/${version}.tar.gz";
+    inherit (param) sha256;
+  };
+
+  buildInputs = [ which ocaml ocamlbuild ];
+
+  dontAddPrefix = true;
+
+  preConfigure = ''
+    configureFlagsArray=(
+      --bindir=$out/bin
+      --libdir=$out/lib/ocaml/${ocaml.version}/site-lib
+      --pkgdir=$out/lib/ocaml/${ocaml.version}/site-lib
+    )
+  '';
+
+  postConfigure = ''
+    substituteInPlace camlp4/META.in \
+    --replace +camlp4 $out/lib/ocaml/${ocaml.version}/site-lib/camlp4
+  '';
+
+  makeFlags = "all";
+
+  installTargets = "install install-META";
+
+  dontStrip = true;
+
+  meta = with stdenv.lib; {
+    description = "A software system for writing extensible parsers for programming languages";
+    homepage = https://github.com/ocaml/camlp4;
+    platforms = ocaml.meta.platforms or [];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/camlp5/default.nix b/nixpkgs/pkgs/development/tools/ocaml/camlp5/default.nix
new file mode 100644
index 000000000000..efd6e562c29a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/camlp5/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchzip, ocaml }:
+
+stdenv.mkDerivation {
+
+  name = "camlp5-7.07";
+
+  src = fetchzip {
+    url = "https://github.com/camlp5/camlp5/archive/rel707.tar.gz";
+    sha256 = "1c8v45553ccbqha2ypfranqlgw06rr5wjr2hlnrx5bf9jfq0h0dn";
+  };
+
+  buildInputs = [ ocaml ];
+
+  prefixKey = "-prefix ";
+
+  preConfigure = "configureFlagsArray=(--strict" +
+                  " --libdir $out/lib/ocaml/${ocaml.version}/site-lib)";
+
+  buildFlags = "world.opt";
+
+  dontStrip = true;
+
+  meta = with stdenv.lib; {
+    description = "Preprocessor-pretty-printer for OCaml";
+    longDescription = ''
+      Camlp5 is a preprocessor and pretty-printer for OCaml programs.
+      It also provides parsing and printing tools.
+    '';
+    homepage = https://camlp5.github.io/;
+    license = licenses.bsd3;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = with maintainers; [
+      z77z vbgl
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/cppo/default.nix b/nixpkgs/pkgs/development/tools/ocaml/cppo/default.nix
new file mode 100644
index 000000000000..159260750a25
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/cppo/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchFromGitHub, ocaml, findlib, ocamlbuild, dune }:
+let
+  pname = "cppo";
+  webpage = "http://mjambon.com/${pname}.html";
+in
+assert stdenv.lib.versionAtLeast ocaml.version "3.12";
+
+let param =
+  if stdenv.lib.versionAtLeast ocaml.version "4.02" then {
+    version = "1.6.5";
+    sha256 = "03c0amszy28shinvz61hm340jz446zz5763a1pdqlza36kwcj0p0";
+    buildInputs = [ dune ];
+    extra = {
+      inherit (dune) installPhase;
+    };
+  } else {
+    version = "1.5.0";
+    sha256 = "1xqldjz9risndnabvadw41fdbi5sa2hl4fnqls7j9xfbby1izbg8";
+    extra = {
+      createFindlibDestdir = true;
+      makeFlags = "PREFIX=$(out)";
+      preBuild = ''
+        mkdir $out/bin
+      '';
+    };
+  }
+; in
+
+stdenv.mkDerivation (rec {
+
+  name = "${pname}-${param.version}";
+
+  src = fetchFromGitHub {
+    owner = "mjambon";
+    repo = pname;
+    rev = "v${param.version}";
+    inherit (param) sha256;
+  };
+
+  buildInputs = [ ocaml findlib ocamlbuild ] ++ (param.buildInputs or []);
+
+  meta = with stdenv.lib; {
+    description = "The C preprocessor for OCaml";
+    longDescription = ''
+      Cppo is an equivalent of the C preprocessor targeted at the OCaml language and its variants.
+    '';
+    homepage = "${webpage}";
+    maintainers = [ maintainers.vbgl ];
+    license = licenses.bsd3;
+  };
+} // param.extra)
diff --git a/nixpkgs/pkgs/development/tools/ocaml/dune/default.nix b/nixpkgs/pkgs/development/tools/ocaml/dune/default.nix
new file mode 100644
index 000000000000..cf82b391ff96
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/dune/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, ocaml, findlib, opaline }:
+
+stdenv.mkDerivation rec {
+  name = "dune-${version}";
+  version = "1.9.2";
+  src = fetchurl {
+    url = "https://github.com/ocaml/dune/releases/download/${version}/dune-${version}.tbz";
+    sha256 = "0l27d13wh3i1450kgxnhr6r977sgby1dqwsfc8cqd9mqic1mr9f2";
+  };
+
+  buildInputs = [ ocaml findlib ];
+
+  buildFlags = "release";
+
+  dontAddPrefix = true;
+
+  installPhase = ''
+    runHook preInstall
+    ${opaline}/bin/opaline -prefix $out -libdir $OCAMLFIND_DESTDIR
+    runHook postInstall
+  '';
+
+  meta = {
+    homepage = https://github.com/ocaml/dune;
+    description = "A composable build system";
+    maintainers = [ stdenv.lib.maintainers.vbgl ];
+    license = stdenv.lib.licenses.mit;
+    inherit (ocaml.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/findlib/default.nix b/nixpkgs/pkgs/development/tools/ocaml/findlib/default.nix
new file mode 100644
index 000000000000..18b84e2c961d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/findlib/default.nix
@@ -0,0 +1,77 @@
+{ stdenv, fetchurl, fetchpatch, m4, ncurses, ocaml, writeText }:
+
+let param =
+  if stdenv.lib.versionAtLeast ocaml.version "4"
+  then {
+    version = "1.8.0";
+    sha256 = "1b97zqjdriqd2ikgh4rmqajgxwdwn013riji5j53y3xvcmnpsyrb";
+  } else {
+    version = "1.7.3";
+    sha256 = "12xx8si1qv3xz90qsrpazjjk4lc1989fzm97rsmc4diwla7n15ni";
+    patches = [ (fetchpatch {
+      url = "https://raw.githubusercontent.com/ocaml/opam-repository/1f29c5ef8eccd373e5ff2169a30bfd95a9ae6050/packages/ocamlfind/ocamlfind.1.7.3-1/files/threads.patch";
+      sha256 = "0cqgpjqpmfbr0ph3jr25gw8hgckj4qlfwmir6vkgi5hvn2qnjpx3";
+    }) ];
+  };
+in
+
+stdenv.mkDerivation rec {
+  name = "ocaml-findlib-${version}";
+  inherit (param) version;
+
+  src = fetchurl {
+    url = "http://download.camlcity.org/download/findlib-${version}.tar.gz";
+    inherit (param) sha256;
+  };
+
+  buildInputs = [m4 ncurses ocaml];
+
+  patches = [ ./ldconf.patch ./install_topfind.patch ]
+  ++ (param.patches or []);
+
+  dontAddPrefix=true;
+
+  preConfigure=''
+    configureFlagsArray=(
+      -bindir $out/bin
+      -mandir $out/share/man
+      -sitelib $out/lib/ocaml/${ocaml.version}/site-lib
+      -config $out/etc/findlib.conf
+    )
+  '';
+
+  buildPhase = ''
+    make all
+    make opt
+  '';
+
+  setupHook = writeText "setupHook.sh" ''
+    addOCamlPath () {
+        if test -d "''$1/lib/ocaml/${ocaml.version}/site-lib"; then
+            export OCAMLPATH="''${OCAMLPATH}''${OCAMLPATH:+:}''$1/lib/ocaml/${ocaml.version}/site-lib/"
+        fi
+        if test -d "''$1/lib/ocaml/${ocaml.version}/site-lib/stublibs"; then
+            export CAML_LD_LIBRARY_PATH="''${CAML_LD_LIBRARY_PATH}''${CAML_LD_LIBRARY_PATH:+:}''$1/lib/ocaml/${ocaml.version}/site-lib/stublibs"
+        fi
+        export OCAMLFIND_DESTDIR="''$out/lib/ocaml/${ocaml.version}/site-lib/"
+        if test -n "$createFindlibDestdir"; then
+          mkdir -p $OCAMLFIND_DESTDIR
+        fi
+    }
+
+    addEnvHooks "$targetOffset" addOCamlPath
+  '';
+
+  meta = {
+    homepage = http://projects.camlcity.org/projects/findlib.html;
+    description = "O'Caml library manager";
+    license = stdenv.lib.licenses.mit;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = [
+      stdenv.lib.maintainers.z77z
+      stdenv.lib.maintainers.vbmithr
+    ];
+  };
+}
+
+
diff --git a/nixpkgs/pkgs/development/tools/ocaml/findlib/install_topfind.patch b/nixpkgs/pkgs/development/tools/ocaml/findlib/install_topfind.patch
new file mode 100644
index 000000000000..7cd32991d0eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/findlib/install_topfind.patch
@@ -0,0 +1,12 @@
+--- a/src/findlib/Makefile
++++ b/src/findlib/Makefile
+@@ -123,7 +123,7 @@ clean:
+ install: all
+ 	mkdir -p "$(prefix)$(OCAML_SITELIB)/$(NAME)"
+ 	mkdir -p "$(prefix)$(OCAMLFIND_BIN)"
+-	test $(INSTALL_TOPFIND) -eq 0 || cp topfind "$(prefix)$(OCAML_CORE_STDLIB)"
++	test $(INSTALL_TOPFIND) -eq 0 || cp topfind "$(prefix)$(OCAML_SITELIB)"
+	files=`$(SH) $(TOP)/tools/collect_files $(TOP)/Makefile.config findlib.cmi findlib.mli findlib.cma findlib.cmxa findlib.a findlib.cmxs topfind.cmi topfind.mli fl_package_base.mli fl_package_base.cmi fl_metascanner.mli fl_metascanner.cmi fl_metatoken.cmi findlib_top.cma findlib_top.cmxa findlib_top.a findlib_top.cmxs findlib_dynload.cma findlib_dynload.cmxa findlib_dynload.a findlib_dynload.cmxs fl_dynload.mli fl_dynload.cmi META` && \
+	cp $$files "$(prefix)$(OCAML_SITELIB)/$(NAME)"
+	f="ocamlfind$(EXEC_SUFFIX)"; { test -f ocamlfind_opt$(EXEC_SUFFIX) && f="ocamlfind_opt$(EXEC_SUFFIX)"; }; \
+
diff --git a/nixpkgs/pkgs/development/tools/ocaml/findlib/ldconf.patch b/nixpkgs/pkgs/development/tools/ocaml/findlib/ldconf.patch
new file mode 100644
index 000000000000..7718cb673925
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/findlib/ldconf.patch
@@ -0,0 +1,8 @@
+Setting paths to search for dnynmic libraries isn't very useful in Nix.
+
+--- findlib-1.2.6/findlib.conf.in	2010-08-17 14:50:28.000000000 -0400
++++ findlib-1.2.6/findlib.conf.in	2010-11-24 09:46:55.179648354 -0500
+@@ -1,2 +1,3 @@
+ destdir="@SITELIB@"
+ path="@SITELIB@"
++ldconf="ignore"
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/3.0.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/3.0.nix
new file mode 100644
index 000000000000..1307635abb99
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/3.0.nix
@@ -0,0 +1,17 @@
+{ stdenv, ocaml, findlib, dune, js_of_ocaml-compiler
+, ocaml-migrate-parsetree, ppx_tools_versioned, uchar
+}:
+
+stdenv.mkDerivation rec {
+	name = "js_of_ocaml-${version}"; 
+
+	inherit (js_of_ocaml-compiler) version src installPhase meta;
+
+	buildInputs = [ ocaml findlib dune ocaml-migrate-parsetree ppx_tools_versioned ];
+
+  postPatch = "patchShebangs lib/generate_stubs.sh";
+
+	propagatedBuildInputs = [ js_of_ocaml-compiler uchar ];
+
+	buildPhase = "dune build -p js_of_ocaml";
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/Makefile.conf.diff b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/Makefile.conf.diff
new file mode 100644
index 000000000000..e6fc96038ff8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/Makefile.conf.diff
@@ -0,0 +1,10 @@
+--- old/Makefile.conf	2014-05-19 16:53:09.263564921 +0200
++++ new/Makefile.conf	2014-05-19 16:53:42.213152994 +0200
+@@ -1,6 +1,6 @@
+ 
+ # Where binaries are installed:
+-BINDIR := `dirname  \`which ocamlc\``
++BINDIR := $(out)/bin
+ 
+ ####
+ 
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/camlp4.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/camlp4.nix
new file mode 100644
index 000000000000..ff59fa7cf8a3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/camlp4.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchFromGitHub, ocaml, findlib, dune, js_of_ocaml-compiler
+, camlp4, ocsigen_deriving
+}:
+
+stdenv.mkDerivation rec {
+	version = "3.2.1";
+	name = "js_of_ocaml-camlp4-${version}"; 
+
+	src = fetchFromGitHub {
+		owner = "ocsigen";
+		repo = "js_of_ocaml";
+		rev = version;
+		sha256 = "1v2hfq0ra9j07yz6pj6m03hrvgys4vmx0gclchv94yywpb2wc7ik";
+	};
+
+	inherit (js_of_ocaml-compiler) installPhase meta;
+
+	buildInputs = [ ocaml findlib dune camlp4 ocsigen_deriving ];
+
+	buildPhase = "dune build -p js_of_ocaml-camlp4";
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/compiler.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/compiler.nix
new file mode 100644
index 000000000000..c5a345f505b7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/compiler.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, ocaml, findlib, dune
+, cmdliner, cppo, yojson
+}:
+
+if !stdenv.lib.versionAtLeast ocaml.version "4.02"
+then throw "js_of_ocaml-compiler is not available for OCaml ${ocaml.version}"
+else
+
+stdenv.mkDerivation rec {
+	name = "js_of_ocaml-compiler-${version}";
+	version = "3.3.0";
+
+	src = fetchFromGitHub {
+		owner = "ocsigen";
+		repo = "js_of_ocaml";
+		rev = version;
+		sha256 = "0bg8x2s3f24c8ia2g293ikd5yg0yjw3hkdgdql59c8k2amqin8f8";
+	};
+
+	buildInputs = [ ocaml findlib dune cmdliner cppo ];
+
+	propagatedBuildInputs = [ yojson ];
+
+	buildPhase = "dune build -p js_of_ocaml-compiler";
+
+	inherit (dune) installPhase;
+
+	meta = {
+		description = "Compiler from OCaml bytecode to Javascript";
+		license = stdenv.lib.licenses.gpl2;
+		maintainers = [ stdenv.lib.maintainers.vbgl ];
+		inherit (src.meta) homepage;
+		inherit (ocaml.meta) platforms;
+	};
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/default.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/default.nix
new file mode 100644
index 000000000000..f88811855a2e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, ocaml, findlib, lwt, menhir, ocsigen_deriving, ppx_deriving, camlp4, ocamlbuild
+, cmdliner, tyxml, reactivedata, cppo, which, base64, uchar, yojson
+}:
+
+let version = if stdenv.lib.versionAtLeast ocaml.version "4.02"
+  then "2.8.4" else "2.7";
+in
+
+stdenv.mkDerivation {
+  name = "js_of_ocaml-${version}";
+  src = fetchurl {
+    url = "https://github.com/ocsigen/js_of_ocaml/archive/${version}.tar.gz";
+    sha256 = {
+      "2.7" = "1dali1akyd4zmkwav0d957ynxq2jj6cc94r4xiaql7ca89ajz4jj";
+      "2.8.4" = "098ph50s9kqw6rc3qjn39zv9b5swdf4qr44afwqfkkjgjs5d7vbl";
+    }."${version}";
+  };
+
+  buildInputs = [ ocaml findlib menhir ocsigen_deriving ocamlbuild
+                 cmdliner reactivedata cppo which base64 ]
+  ++ stdenv.lib.optionals (stdenv.lib.versionAtLeast ocaml.version "4.02") [ yojson tyxml ];
+  propagatedBuildInputs = [ lwt camlp4 ppx_deriving ]
+  ++ stdenv.lib.optional (version == "2.8.4") uchar;
+
+  patches = [ ./Makefile.conf.diff ];
+
+  createFindlibDestdir = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://ocsigen.org/js_of_ocaml/;
+    description = "Compiler of OCaml bytecode to Javascript. It makes it possible to run Ocaml programs in a Web browser";
+    license = licenses.lgpl2;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = [
+      maintainers.gal_bolle
+    ];
+    broken = versionAtLeast ocaml.version "4.05";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/lwt.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/lwt.nix
new file mode 100644
index 000000000000..e7a31c1ce2e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/lwt.nix
@@ -0,0 +1,16 @@
+{ stdenv, ocaml, findlib, dune, js_of_ocaml-compiler, js_of_ocaml-ppx
+, ocaml-migrate-parsetree, ppx_tools_versioned
+, js_of_ocaml, ocaml_lwt, lwt_log
+}:
+
+stdenv.mkDerivation rec {
+	name = "js_of_ocaml-lwt-${version}"; 
+
+	inherit (js_of_ocaml-compiler) version src installPhase meta;
+
+	buildInputs = [ ocaml findlib dune js_of_ocaml-ppx ocaml-migrate-parsetree ppx_tools_versioned ];
+
+	propagatedBuildInputs = [ js_of_ocaml ocaml_lwt lwt_log ];
+
+	buildPhase = "dune build -p js_of_ocaml-lwt";
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ocamlbuild.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ocamlbuild.nix
new file mode 100644
index 000000000000..bf33b4e59e52
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ocamlbuild.nix
@@ -0,0 +1,15 @@
+{ stdenv, ocaml, findlib, dune, js_of_ocaml-compiler
+, ocamlbuild
+}:
+
+stdenv.mkDerivation rec {
+	name = "js_of_ocaml-ocamlbuild-${version}"; 
+
+	inherit (js_of_ocaml-compiler) version src installPhase meta;
+
+	buildInputs = [ ocaml findlib dune ];
+
+	propagatedBuildInputs = [ ocamlbuild ];
+
+	buildPhase = "dune build -p js_of_ocaml-ocamlbuild";
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx.nix
new file mode 100644
index 000000000000..0649aee162a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx.nix
@@ -0,0 +1,14 @@
+{ stdenv, ocaml, findlib, dune, js_of_ocaml-compiler
+, ocaml-migrate-parsetree, ppx_tools_versioned
+, js_of_ocaml
+}:
+
+stdenv.mkDerivation rec {
+	name = "js_of_ocaml-ppx-${version}"; 
+
+	inherit (js_of_ocaml-compiler) version src installPhase meta;
+
+	buildInputs = [ ocaml findlib dune ocaml-migrate-parsetree ppx_tools_versioned js_of_ocaml ];
+
+	buildPhase = "dune build -p js_of_ocaml-ppx";
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx_deriving_json.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx_deriving_json.nix
new file mode 100644
index 000000000000..ddea73b3c766
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx_deriving_json.nix
@@ -0,0 +1,15 @@
+{ stdenv, ocaml, findlib, dune, js_of_ocaml-compiler
+, js_of_ocaml, ppx_deriving
+}:
+
+stdenv.mkDerivation rec {
+	name = "js_of_ocaml-ppx_deriving_json-${version}";
+
+	inherit (js_of_ocaml-compiler) version src installPhase meta;
+
+	buildInputs = [ ocaml findlib dune ];
+
+	propagatedBuildInputs = [ js_of_ocaml ppx_deriving ];
+
+	buildPhase = "dune build -p js_of_ocaml-ppx_deriving_json";
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/tyxml.nix b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/tyxml.nix
new file mode 100644
index 000000000000..1ba9ddd0ab7f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/tyxml.nix
@@ -0,0 +1,16 @@
+{ stdenv, ocaml, findlib, dune, js_of_ocaml-compiler
+, js_of_ocaml-ppx, ocaml-migrate-parsetree, ppx_tools_versioned
+, js_of_ocaml, reactivedata, tyxml
+}:
+
+stdenv.mkDerivation rec {
+	name = "js_of_ocaml-tyxml-${version}";
+
+	inherit (js_of_ocaml-compiler) version src installPhase meta;
+
+	buildInputs = [ ocaml findlib dune js_of_ocaml-ppx ocaml-migrate-parsetree ppx_tools_versioned ];
+
+	propagatedBuildInputs = [ js_of_ocaml reactivedata tyxml ];
+
+	buildPhase = "dune build -p js_of_ocaml-tyxml";
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/merlin/default.nix b/nixpkgs/pkgs/development/tools/ocaml/merlin/default.nix
new file mode 100644
index 000000000000..ca98daa8c28c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/merlin/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, buildDunePackage, yojson }:
+
+buildDunePackage rec {
+  pname = "merlin";
+  version = "3.3.0";
+
+  minimumOCamlVersion = "4.02.1";
+
+  src = fetchFromGitHub {
+    owner = "ocaml";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1s4y7jz581hj4gqv4pkk3980khw4lm0qzcj416b4ckji40q7nf9d";
+  };
+
+  buildInputs = [ yojson ];
+
+  meta = with stdenv.lib; {
+    description = "An editor-independent tool to ease the development of programs in OCaml";
+    homepage = "https://github.com/ocaml/merlin";
+    license = licenses.mit;
+    maintainers = [ maintainers.vbgl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/oasis/default.nix b/nixpkgs/pkgs/development/tools/ocaml/oasis/default.nix
new file mode 100644
index 000000000000..2364058729e8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/oasis/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, ocaml, findlib, ocamlbuild, ocamlmod, ocamlify }:
+
+stdenv.mkDerivation rec {
+  version = "0.4.10";
+  name = "ocaml-oasis-${version}";
+
+  # You must manually update the url, not just the version. OCamlforge keys off
+  # the number after download.php, not the filename.
+  src = fetchurl {
+    url = https://forge.ocamlcore.org/frs/download.php/1694/oasis-0.4.10.tar.gz;
+    sha256 = "13ah03pbcvrjv5lmx971hvkm9rvbvimska5wmjfvgvd20ca0gn8w";
+  };
+
+  createFindlibDestdir = true;
+
+  buildInputs =
+    [
+      ocaml findlib ocamlbuild ocamlmod ocamlify
+    ];
+
+  configurePhase = "ocaml setup.ml -configure --prefix $out";
+  buildPhase     = "ocaml setup.ml -build";
+  installPhase   = "ocaml setup.ml -install";
+
+  meta = with stdenv.lib; {
+    homepage = http://oasis.forge.ocamlcore.org/;
+    description = "Configure, build and install system for OCaml projects";
+    license = licenses.lgpl21;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = with maintainers; [
+      vbgl z77z
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/obelisk/default.nix b/nixpkgs/pkgs/development/tools/ocaml/obelisk/default.nix
new file mode 100644
index 000000000000..87d592bd1126
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/obelisk/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, ocamlPackages }:
+
+stdenv.mkDerivation rec {
+	name = "obelisk-${version}";
+	version = "0.4.0";
+	src = fetchFromGitHub {
+		owner = "lelio-brun";
+		repo = "obelisk";
+		rev = "v${version}";
+		sha256 = "0rw85knbwqj2rys1hh5qy8sfdqb4mb1wsriy38n7zcpbwim47vb8";
+	};
+
+	buildInputs = with ocamlPackages; [ ocaml findlib ocamlbuild menhir ];
+
+	installFlags = [ "BINDIR=$(out)/bin" ];
+
+	meta = {
+		description = "A simple tool which produces pretty-printed output from a Menhir parser file (.mly)";
+		license = stdenv.lib.licenses.mit;
+		maintainers = [ stdenv.lib.maintainers.vbgl ];
+		inherit (src.meta) homepage;
+		inherit (ocamlPackages.ocaml.meta) platforms;
+	};
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/obuild/default.nix b/nixpkgs/pkgs/development/tools/ocaml/obuild/default.nix
new file mode 100644
index 000000000000..41cde6f8ab73
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/obuild/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchzip, ocaml }:
+
+let version = "0.1.10"; in
+
+stdenv.mkDerivation {
+  name = "obuild-${version}";
+
+  src = fetchzip {
+    url = "https://github.com/ocaml-obuild/obuild/archive/obuild-v${version}.tar.gz";
+    sha256 = "15arsgbhk1c39vd8qhpa3pag94m44bwvzggdvkibx6hnpkv8z9bn";
+  };
+
+  buildInputs = [ ocaml ];
+
+  buildPhase = ''
+    patchShebangs ./bootstrap
+    ./bootstrap
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp dist/build/obuild/obuild dist/build/obuild-from-oasis/obuild-from-oasis dist/build/obuild-simple/obuild-simple $out/bin/
+  '';
+
+  meta = {
+    homepage = https://github.com/ocaml-obuild/obuild;
+    platforms = ocaml.meta.platforms or [];
+    description = "Simple package build system for OCaml";
+    license = stdenv.lib.licenses.lgpl21;
+    maintainers = with stdenv.lib.maintainers; [ volth ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocaml-top/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocaml-top/default.nix
new file mode 100644
index 000000000000..7336439240d5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocaml-top/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchzip, ncurses, ocamlPackages }:
+
+with ocamlPackages; buildDunePackage rec {
+  pname = "ocaml-top";
+  version = "1.1.5";
+
+  src = fetchzip {
+    url = "https://github.com/OCamlPro/ocaml-top/archive/${version}.tar.gz";
+    sha256 = "1d4i6aanrafgrgk4mh154k6lkwk0b6mh66rykz33awlf5pfqd8yv";
+  };
+
+  buildInputs = [ ncurses ocp-build lablgtk ocp-index ];
+
+  configurePhase = ''
+    export TERM=xterm
+    ocp-build -init
+  '';
+
+  meta = {
+    homepage = https://www.typerex.org/ocaml-top.html;
+    license = stdenv.lib.licenses.gpl3;
+    description = "A simple cross-platform OCaml code editor built for top-level evaluation";
+    maintainers = with stdenv.lib.maintainers; [ vbgl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocamlbuild/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocamlbuild/default.nix
new file mode 100644
index 000000000000..ec9ff6f4ba90
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlbuild/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, ocaml, findlib }:
+let
+  version = "0.14.0";
+in
+stdenv.mkDerivation {
+  name = "ocamlbuild-${version}";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "ocaml";
+    repo = "ocamlbuild";
+    rev = version;
+    sha256 = "1hb5mcdz4wv7sh1pj7dq9q4fgz5h3zg7frpiya6s8zd3ypwzq0kh";
+  };
+
+  createFindlibDestdir = true;
+
+  buildInputs = [ ocaml findlib ];
+
+  configurePhase = ''
+  make -f configure.make Makefile.config \
+    "OCAMLBUILD_PREFIX=$out" \
+    "OCAMLBUILD_BINDIR=$out/bin" \
+    "OCAMLBUILD_MANDIR=$out/share/man" \
+    "OCAMLBUILD_LIBDIR=$OCAMLFIND_DESTDIR"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/ocaml/ocamlbuild/;
+    description = "A build system with builtin rules to easily build most OCaml projects";
+    license = licenses.lgpl2;
+    inherit (ocaml.meta) platforms;
+    maintainers = with maintainers; [ vbgl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocamlformat/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocamlformat/default.nix
new file mode 100644
index 000000000000..694f4b6e89a0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlformat/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, ocamlPackages }:
+
+with ocamlPackages; buildDunePackage rec {
+  pname = "ocamlformat";
+  version = "0.8";
+
+  minimumOCamlVersion = "4.05";
+
+  src = fetchFromGitHub {
+    owner = "ocaml-ppx";
+    repo = pname;
+    rev = version;
+    sha256 = "1i7rsbs00p43362yv7z7dw0qsnv7vjf630qk676qvfg7kg422w6j";
+  };
+
+  buildInputs = [
+    base
+    cmdliner
+    fpath
+    ocaml-migrate-parsetree
+    stdio
+  ];
+
+  configurePhase = ''
+    patchShebangs tools/gen_version.sh
+    tools/gen_version.sh src/Version.ml version
+  '';
+
+  meta = {
+    inherit (src.meta) homepage;
+    description = "Auto-formatter for OCaml code";
+    maintainers = [ stdenv.lib.maintainers.Zimmi48 ];
+    license = stdenv.lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocamlify/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocamlify/default.nix
new file mode 100644
index 000000000000..df480903d154
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlify/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, ocaml, findlib, ocamlbuild }:
+
+stdenv.mkDerivation {
+  name = "ocamlify-0.0.2";
+
+  src = fetchurl {
+    url = http://forge.ocamlcore.org/frs/download.php/1209/ocamlify-0.0.2.tar.gz;
+    sha256 = "1f0fghvlbfryf5h3j4as7vcqrgfjb4c8abl5y0y5h069vs4kp5ii";
+  };
+
+  buildInputs = [ ocaml findlib ocamlbuild ];
+
+  configurePhase = ''
+    substituteInPlace src/ocamlify.ml --replace 'OCamlifyConfig.version' '"0.0.2"'
+  '';
+
+  buildPhase = "ocamlbuild src/ocamlify.native";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv _build/src/ocamlify.native $out/bin/ocamlify
+  '';
+
+  dontStrip = true;
+
+  meta = {
+    homepage = http://forge.ocamlcore.org/projects/ocamlmod/ocamlmod;
+    description = "Generate OCaml modules from source files";
+    platforms = ocaml.meta.platforms or [];
+    license = stdenv.lib.licenses.lgpl21;
+    maintainers = with stdenv.lib.maintainers; [
+      z77z
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocamlmod/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocamlmod/default.nix
new file mode 100644
index 000000000000..74dee630d295
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlmod/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, ocaml, findlib, ocamlbuild, ounit }:
+
+stdenv.mkDerivation rec {
+  name = "ocamlmod-${version}";
+  version = "0.0.9";
+
+  src = fetchurl {
+    url = "https://forge.ocamlcore.org/frs/download.php/1702/ocamlmod-0.0.9.tar.gz";
+    sha256 = "0cgp9qqrq7ayyhddrmqmq1affvfqcn722qiakjq4dkywvp67h4aa";
+  };
+
+  buildInputs = [ ocaml findlib ocamlbuild ounit ];
+
+  configurePhase = "ocaml setup.ml -configure --prefix $out --enable-tests";
+  buildPhase     = "ocaml setup.ml -build";
+  installPhase   = "ocaml setup.ml -install";
+
+  doCheck = true;
+
+  checkPhase = "ocaml setup.ml -test";
+
+  dontStrip = true;
+
+  meta = {
+    homepage = http://forge.ocamlcore.org/projects/ocamlmod/ocamlmod;
+    description = "Generate OCaml modules from source files";
+    platforms = ocaml.meta.platforms or [];
+    maintainers = with stdenv.lib.maintainers; [
+      z77z
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocamlscript/Makefile.patch b/nixpkgs/pkgs/development/tools/ocaml/ocamlscript/Makefile.patch
new file mode 100644
index 000000000000..4fc887c070d7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlscript/Makefile.patch
@@ -0,0 +1,70 @@
+--- a/Makefile	2012-02-04 01:24:21.000000000 +0000
++++ b/Makefile	2014-10-29 14:42:08.690188302 +0000
+@@ -4,6 +4,8 @@
+   version.ml pipeline.mli pipeline.ml common.mli common.ml \
+   utils.mli utils.ml ocaml.mli ocaml.ml
+ 
++CAMLP4 := $(shell ocamlfind query camlp4)
++
+ STDBIN = $(shell dirname `which ocamlfind`)
+ ifndef PREFIX
+   PREFIX = $(shell dirname $(STDBIN))
+@@ -15,7 +17,7 @@
+ endif
+ export BINDIR
+ 
+-PACKS = unix str
++PACKS = unix str findlib
+ PP = camlp4o -I . -parser pa_tryfinally.cmo -parser pa_opt.cmo
+ export PP
+ 
+@@ -36,11 +38,11 @@
+ 
+ common: version.ml
+ 	ocamlc -pp 'camlp4orf -loc _loc' -c \
+-		-I +camlp4 pa_opt310.ml && \
++		-I $(CAMLP4) pa_opt310.ml && \
+ 		cp pa_opt310.cmo pa_opt.cmo && \
+ 		cp pa_opt310.cmi pa_opt.cmi
+ 	ocamlc -pp 'camlp4orf -loc _loc' -c \
+-		-I +camlp4 pa_tryfinally310.ml && \
++		-I $(CAMLP4) pa_tryfinally310.ml && \
+ 		cp pa_tryfinally310.cmo pa_tryfinally.cmo && \
+ 		cp pa_tryfinally310.cmi pa_tryfinally.cmi
+ 
+--- a/main.ml	2014-11-08 09:05:12.516401313 +0000
++++ b/main.ml	2014-11-08 09:09:59.801311230 +0000
+@@ -250,9 +250,15 @@
+ 			Sys.getcwd ())
+       | `File script_name -> "", get_dir script_name in
+ 
++  let findlibdir =
++    Filename.(
++      concat (Findlib.package_directory "findlib") parent_dir_name
++    ) in
++
+   let file, oc = Filename.open_temp_file "meta" ".ml" in
+   fprintf oc "\
+ #%i %S;;
++#directory \"%s\";;
+ #use \"topfind\";;
+ #require \"ocamlscript\";;
+ Ocamlscript.Common.verbose := %s;;
+@@ -261,7 +267,7 @@
+ open Ocamlscript;;
+ open Utils;;
+ #%i %S;;\n"
+-     pos source verbose script_dir extra_args trash pos source;
++     pos source findlibdir verbose script_dir extra_args trash pos source;
+   
+   List.iter (output_line oc) lines;
+ 
+@@ -544,6 +550,7 @@
+       exit compilation_status
+ 
+ let _ =
++  Findlib.init ();
+   try main ()
+   with Failure s ->
+     eprintf "ocamlscript: %s\n%!" s;
+ 
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocamlscript/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocamlscript/default.nix
new file mode 100644
index 000000000000..28efaf4cf3d2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlscript/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchurl, ocaml, findlib, camlp4}:
+stdenv.mkDerivation {
+  name = "ocamlscript-2.0.3";
+  src = fetchurl {
+    url = http://mjambon.com/releases/ocamlscript/ocamlscript-2.0.3.tar.gz;
+    sha256 = "1v1i24gijxwris8w4hi95r9swld6dm7jbry0zp72767a3g5ivlrd";
+  };
+
+  propagatedBuildInputs = [ ocaml findlib camlp4 ];
+
+  patches = [ ./Makefile.patch ];
+
+  buildFlags = "PREFIX=$(out)";
+  installFlags = "PREFIX=$(out)";
+
+  preInstall = "mkdir $out/bin";
+  createFindlibDestdir = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://martin.jambon.free.fr/ocamlscript.html;
+    license = licenses.boost;
+    platforms = ocaml.meta.platforms or [];
+    description = "Natively-compiled OCaml scripts";
+    maintainers = [ maintainers.vbgl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocp-build/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocp-build/default.nix
new file mode 100644
index 000000000000..0ed7312660a1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocp-build/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, ocaml, findlib, ncurses }:
+let
+  version = "1.99.19-beta";
+in
+stdenv.mkDerivation rec {
+
+  name = "ocaml${ocaml.version}-ocp-build-${version}";
+
+  src = fetchFromGitHub {
+    owner = "OCamlPro";
+    repo = "ocp-build";
+    rev = version;
+    sha256 = "162k5l0cxyqanxlml5v8mqapdq5qbqc9m4b8wdjq7mf523b3h2zj";
+  };
+
+  buildInputs = [ ocaml findlib ];
+  propagatedBuildInputs = [ ncurses ];
+  preInstall = "mkdir -p $out/bin";
+  preConfigure = ''
+  export configureFlags="$configureFlags --with-metadir=$OCAMLFIND_DESTDIR"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.typerex.org/ocp-build.html;
+    description = "A build tool for OCaml";
+    longDescription = ''
+      ocp-build is a build system for OCaml application, based on simple
+      descriptions of packages. ocp-build combines the descriptions of
+      packages, and optimize the parallel compilation of files depending on
+      the number of cores and the automatically-inferred dependencies
+      between source files.
+    '';
+    license = licenses.gpl3;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = [ maintainers.jirkamarsik ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocp-indent/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocp-indent/default.nix
new file mode 100644
index 000000000000..7ecc15da2b50
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocp-indent/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchzip, buildDunePackage, cmdliner }:
+
+buildDunePackage rec {
+  version = "1.7.0";
+  pname = "ocp-indent";
+
+  src = fetchzip {
+    url = "https://github.com/OCamlPro/ocp-indent/archive/${version}.tar.gz";
+    sha256 = "006x3fsd61vxnxj4chlakyk3b2s10pb0bdl46g0ghf3j8h33x7hc";
+  };
+
+  minimumOCamlVersion = "4.02";
+
+  buildInputs = [ cmdliner ];
+
+  meta = with lib; {
+    homepage = http://typerex.ocamlpro.com/ocp-indent.html;
+    description = "A customizable tool to indent OCaml code";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.jirkamarsik ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocp-index/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocp-index/default.nix
new file mode 100644
index 000000000000..79be6a8170ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocp-index/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, ocaml, findlib, dune, ocp-build, ocp-indent, cmdliner, re }:
+
+stdenv.mkDerivation rec {
+
+  version = "1.1.9";
+  name = "ocaml${ocaml.version}-ocp-index-${version}";
+
+  src = fetchFromGitHub {
+    owner = "OCamlPro";
+    repo = "ocp-index";
+    rev = version;
+    sha256 = "0dq1kap16xfajc6gg9hbiadax782winpvxnr3dkm2ncznnxds37p";
+  };
+
+  buildInputs = [ ocaml findlib dune ocp-build cmdliner re ];
+  propagatedBuildInputs = [ ocp-indent ];
+
+  buildPhase = "dune build -p ocp-index";
+
+  inherit (dune) installPhase;
+
+  meta = {
+    homepage = http://typerex.ocamlpro.com/ocp-index.html;
+    description = "A simple and light-weight documentation extractor for OCaml";
+    license = stdenv.lib.licenses.lgpl3;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = with stdenv.lib.maintainers; [ vbgl ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocsigen-i18n/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocsigen-i18n/default.nix
new file mode 100644
index 000000000000..f91ae7132005
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocsigen-i18n/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, ocamlPackages }:
+
+stdenv.mkDerivation rec
+{
+  pname = "ocsigen-i18n";
+  name = "${pname}-${version}";
+  version = "3.4.0";
+
+  buildInputs = with ocamlPackages; [ ocaml findlib ];
+
+
+  dontStrip = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    make bindir=$out/bin install
+  '';
+
+  src = fetchurl {
+    url = "https://github.com/besport/${pname}/archive/${version}.tar.gz";
+    sha256 = "0i7cck6zlgwjpksb4s1jpy193h85jixf4d0nmqj09y3zcpn2i8gb";
+  };
+
+  meta = {
+    homepage = https://github.com/besport/ocsigen-i18n;
+    description = "I18n made easy for web sites written with eliom";
+    license = stdenv.lib.licenses.lgpl21;
+    maintainers = [ stdenv.lib.maintainers.gal_bolle ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/omake/0.9.8.6-rc1.nix b/nixpkgs/pkgs/development/tools/ocaml/omake/0.9.8.6-rc1.nix
new file mode 100644
index 000000000000..182250f9a744
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/omake/0.9.8.6-rc1.nix
@@ -0,0 +1,43 @@
+{stdenv, fetchurl, makeWrapper, ocaml, ncurses}:
+let
+  pname = "omake";
+  version = "0.9.8.6-0.rc1";
+  webpage = "http://omake.metaprl.org";
+in
+
+if stdenv.lib.versionAtLeast ocaml.version "4.06"
+then throw "${pname}-${version} is not available for OCaml ${ocaml.version}"
+else
+
+stdenv.mkDerivation {
+
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://src.fedoraproject.org/repo/pkgs/ocaml-omake/${pname}-${version}.tar.gz/fe39a476ef4e33b7ba2ca77a6bcaded2/${pname}-${version}.tar.gz";
+    sha256 = "1sas02pbj56m7wi5vf3vqrrpr4ynxymw2a8ybvfj2dkjf7q9ii13";
+  };
+  patchFlags = "-p0";
+  patches = [ ./warn.patch ];
+
+  buildInputs = [ ocaml makeWrapper ncurses ];
+
+  phases = "unpackPhase patchPhase buildPhase";
+  buildPhase = ''
+    make bootstrap
+    make PREFIX=$out all
+    make PREFIX=$out install
+  '';
+#  prefixKey = "-prefix ";
+#
+#  configureFlags = if transitional then "--transitional" else "--strict";
+#
+#  buildFlags = "world.opt";		
+
+  meta = {
+    description = "Omake build system";
+    homepage = "${webpage}";
+    license = "GPL";
+    platforms = ocaml.meta.platforms or [];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/omake/default.nix b/nixpkgs/pkgs/development/tools/ocaml/omake/default.nix
new file mode 100644
index 000000000000..0f536c489eb6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/omake/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, ocaml, ncurses }:
+
+stdenv.mkDerivation rec {
+
+  name = "omake-${version}";
+  version = "0.10.3";
+
+  src = fetchurl {
+    url = "http://download.camlcity.org/download/${name}.tar.gz";
+    sha256 = "07bdg1h5i7qnlv9xq81ad5hfypl10hxm771h4rjyl5cn8plhfcgz";
+  };
+
+  buildInputs = [ ocaml ncurses ];
+
+  meta = {
+    description = "A build system designed for scalability and portability";
+    homepage = http://projects.camlcity.org/projects/omake.html;
+    license = with stdenv.lib.licenses; [
+      mit /* scripts */
+      gpl2 /* program */
+    ];
+    inherit (ocaml.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/omake/warn.patch b/nixpkgs/pkgs/development/tools/ocaml/omake/warn.patch
new file mode 100644
index 000000000000..4459e89d7f9c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/omake/warn.patch
@@ -0,0 +1,10 @@
+diff -p1 -aur ../omake-0.9.8.6.ori/lib/build/OCaml.om ./lib/build/OCaml.om
+--- ../omake-0.9.8.6.ori/lib/build/OCaml.om	2008-03-05 01:07:25.000000000 +0000
++++ ./lib/build/OCaml.om	2013-06-01 15:52:37.000000000 +0000
+@@ -178,3 +178,3 @@ declare OCAMLDEPFLAGS
+ public.OCAMLPPFLAGS  =
+-public.OCAMLFLAGS    = -warn-error A
++public.OCAMLFLAGS    =
+ public.OCAMLCFLAGS   = -g
+Seulement dans ./lib/build: OCaml.om~
+Seulement dans .: warn.patch
diff --git a/nixpkgs/pkgs/development/tools/ocaml/opaline/default.nix b/nixpkgs/pkgs/development/tools/ocaml/opaline/default.nix
new file mode 100644
index 000000000000..fa5393c1871c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opaline/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, ocamlPackages }:
+
+stdenv.mkDerivation rec {
+  version = "0.3.2";
+  name = "opaline-${version}";
+
+  src = fetchFromGitHub {
+    owner = "jaapb";
+    repo = "opaline";
+    rev = "v${version}";
+    sha256 = "1aj1fdqymq3pnr39h47hn3kxk5v9pnwx0jap1z2jzh78x970z21m";
+  };
+
+  buildInputs = with ocamlPackages; [ ocaml findlib ocamlbuild opam-file-format ];
+
+  preInstall = "mkdir -p $out/bin";
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "OPAm Light INstaller Engine";
+    license = stdenv.lib.licenses.mit;
+    maintainers = [ stdenv.lib.maintainers.vbgl ];
+    inherit (src.meta) homepage;
+    inherit (ocamlPackages.ocaml.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/opam/1.2.2.nix b/nixpkgs/pkgs/development/tools/ocaml/opam/1.2.2.nix
new file mode 100644
index 000000000000..ddd8d4b9920b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam/1.2.2.nix
@@ -0,0 +1,92 @@
+{ stdenv, lib, fetchurl, makeWrapper,
+  ocaml, unzip, ncurses, curl, aspcud
+}:
+
+assert lib.versionAtLeast ocaml.version "3.12.1";
+
+let
+  srcs = {
+    cudf = fetchurl {
+      url = "https://gforge.inria.fr/frs/download.php/file/33593/cudf-0.7.tar.gz";
+      sha256 = "92c8a9ed730bbac73f3513abab41127d966c9b9202ab2aaffcd02358c030a701";
+    };
+    extlib = fetchurl {
+      url = "http://ocaml-extlib.googlecode.com/files/extlib-1.5.3.tar.gz";
+      sha256 = "c095eef4202a8614ff1474d4c08c50c32d6ca82d1015387785cf03d5913ec021";
+    };
+    ocaml_re = fetchurl {
+      url = "https://github.com/ocaml/ocaml-re/archive/ocaml-re-1.2.0.tar.gz";
+      sha256 = "a34dd9d6136731436a963bbab5c4bbb16e5d4e21b3b851d34887a3dec451999f";
+    };
+    ocamlgraph = fetchurl {
+      url = "http://ocamlgraph.lri.fr/download/ocamlgraph-1.8.5.tar.gz";
+      sha256 = "d167466435a155c779d5ec25b2db83ad851feb42ebc37dca8ffa345ddaefb82f";
+    };
+    dose3 = fetchurl {
+      url = "https://gforge.inria.fr/frs/download.php/file/34277/dose3-3.3.tar.gz";
+      sha256 = "8dc4dae9b1a81bb3a42abb283df785ba3eb00ade29b13875821c69f03e00680e";
+    };
+    cmdliner = fetchurl {
+      url = "https://erratique.ch/software/cmdliner/releases/cmdliner-0.9.7.tbz";
+      sha256 = "9c19893cffb5d3c3469ee0cce85e3eeeba17d309b33b9ace31aba06f68f0bf7a";
+    };
+    uutf = fetchurl {
+      url = "https://erratique.ch/software/uutf/releases/uutf-0.9.3.tbz";
+      sha256 = "1f364f89b1179e5182a4d3ad8975f57389d45548735d19054845e06a27107877";
+    };
+    jsonm = fetchurl {
+      url = "https://erratique.ch/software/jsonm/releases/jsonm-0.9.1.tbz";
+      sha256 = "3fd4dca045d82332da847e65e981d8b504883571d299a3f7e71447d46bc65f73";
+    };
+    opam = fetchurl {
+      url = "https://github.com/ocaml/opam/archive/1.2.2.zip";
+      sha256 = "c590ce55ae69ec74f46215cf16a156a02b23c5f3ecb22f23a3ad9ba3d91ddb6e";
+    };
+  };
+in stdenv.mkDerivation rec {
+  name = "opam-${version}";
+  version = "1.2.2";
+
+  buildInputs = [ unzip curl ncurses ocaml makeWrapper ];
+
+  src = srcs.opam;
+
+  postUnpack = ''
+    ln -sv ${srcs.cudf} $sourceRoot/src_ext/${srcs.cudf.name}
+    ln -sv ${srcs.extlib} $sourceRoot/src_ext/${srcs.extlib.name}
+    ln -sv ${srcs.ocaml_re} $sourceRoot/src_ext/${srcs.ocaml_re.name}
+    ln -sv ${srcs.ocamlgraph} $sourceRoot/src_ext/${srcs.ocamlgraph.name}
+    ln -sv ${srcs.dose3} $sourceRoot/src_ext/${srcs.dose3.name}
+    ln -sv ${srcs.cmdliner} $sourceRoot/src_ext/${srcs.cmdliner.name}
+    ln -sv ${srcs.uutf} $sourceRoot/src_ext/${srcs.uutf.name}
+    ln -sv ${srcs.jsonm} $sourceRoot/src_ext/${srcs.jsonm.name}
+  '';
+
+  preConfigure = ''
+    substituteInPlace ./src_ext/Makefile --replace "%.stamp: %.download" "%.stamp:"
+  '';
+
+  postConfigure = "make lib-ext";
+
+  # Dirty, but apparently ocp-build requires a TERM
+  makeFlags = ["TERM=screen"];
+
+  # change argv0 to "opam" as a workaround for
+  # https://github.com/ocaml/opam/issues/2142
+  postInstall = ''
+    mv $out/bin/opam $out/bin/.opam-wrapped
+    makeWrapper $out/bin/.opam-wrapped $out/bin/opam \
+      --argv0 "opam" \
+      --suffix PATH : ${aspcud}/bin:${unzip}/bin:${curl}/bin
+  '';
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A package manager for OCaml";
+    homepage = http://opam.ocamlpro.com/;
+    maintainers = [ maintainers.henrytill ];
+    platforms = platforms.all;
+    license = licenses.lgpl21Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/opam/default.nix b/nixpkgs/pkgs/development/tools/ocaml/opam/default.nix
new file mode 100644
index 000000000000..f844b369eb32
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam/default.nix
@@ -0,0 +1,120 @@
+{ stdenv, lib, fetchurl, makeWrapper, getconf,
+  ocaml, unzip, ncurses, curl, aspcud, bubblewrap
+}:
+
+assert lib.versionAtLeast ocaml.version "4.02.3";
+
+let
+  srcs = {
+    cmdliner = fetchurl {
+      url = "https://erratique.ch/software/cmdliner/releases/cmdliner-1.0.2.tbz";
+      sha256 = "18jqphjiifljlh9jg8zpl6310p3iwyaqphdkmf89acyaix0s4kj1";
+    };
+    cppo = fetchurl {
+      url = "https://github.com/mjambon/cppo/archive/v1.6.5.tar.gz";
+      sha256 = "1dkm3d5h6h56y937gcdk2wixlpzl59vv5pmiafglr89p20kf7gqf";
+    };
+    cudf = fetchurl {
+      url = "https://gforge.inria.fr/frs/download.php/36602/cudf-0.9.tar.gz";
+      sha256 = "0771lwljqwwn3cryl0plny5a5dyyrj4z6bw66ha5n8yfbpcy8clr";
+    };
+    dose3 = fetchurl {
+      url = "https://gforge.inria.fr/frs/download.php/file/36063/dose3-5.0.1.tar.gz";
+      sha256 = "00yvyfm4j423zqndvgc1ycnmiffaa2l9ab40cyg23pf51qmzk2jm";
+    };
+    dune-local = fetchurl {
+      url = "https://github.com/ocaml/dune/releases/download/1.2.1/dune-1.2.1.tbz";
+      sha256 = "00c5dbm4hkdapc2i7pg07b2lj8sv6ly38qr7zid58cdmbmzq21z9";
+    };
+    extlib = fetchurl {
+      url = "http://ygrek.org.ua/p/release/ocaml-extlib/extlib-1.7.5.tar.gz";
+      sha256 = "19slqf5bdj0rrph2w41giwmn6df2qm07942jn058pjkjrnk30d4s";
+    };
+    mccs = fetchurl {
+      url = "https://github.com/AltGr/ocaml-mccs/archive/1.1+9.tar.gz";
+      sha256 = "0gf86c65jdxxcwd96kcmrqxrmnnzc0570gb9ad6c57rl3fyy8yhv";
+    };
+    ocamlgraph = fetchurl {
+      url = "http://ocamlgraph.lri.fr/download/ocamlgraph-1.8.8.tar.gz";
+      sha256 = "0m9g16wrrr86gw4fz2fazrh8nkqms0n863w7ndcvrmyafgxvxsnr";
+    };
+    opam-file-format = fetchurl {
+      url = "https://github.com/ocaml/opam-file-format/archive/2.0.0.tar.gz";
+      sha256 = "0cjw69r7iilidi7b6arr92kjnjspchvwnmwr1b1gyaxqxpr2s98m";
+    };
+    re = fetchurl {
+      url = "https://github.com/ocaml/ocaml-re/releases/download/1.8.0/re-1.8.0.tbz";
+      sha256 = "0qkv42a4hpqpxvqa4kdkkcbhbg7aym9kv4mqgm3m51vxbd0pq0lv";
+    };
+    result = fetchurl {
+      url = "https://github.com/janestreet/result/releases/download/1.3/result-1.3.tbz";
+      sha256 = "1lrnbxdq80gbhnp85mqp1kfk0bkh6q1c93sfz2qgnq2qyz60w4sk";
+    };
+    seq = fetchurl {
+      url = "https://github.com/c-cube/seq/archive/0.1.tar.gz";
+      sha256 = "02lb2d9i12bxrz2ba5wygk2bycan316skqlyri0597q7j9210g8r";
+    };
+    opam = fetchurl {
+      url = "https://github.com/ocaml/opam/archive/2.0.4.zip";
+      sha256 = "1312nc9s4h0vksiimz7jsv3zw17fa05p6mdx23s5sii0qspvnx8c";
+    };
+  };
+in stdenv.mkDerivation rec {
+  name = "opam-${version}";
+  version = "2.0.4";
+
+  buildInputs = [ unzip curl ncurses ocaml makeWrapper getconf ] ++ lib.optional stdenv.isLinux bubblewrap;
+
+  src = srcs.opam;
+
+  postUnpack = ''
+    ln -sv ${srcs.cmdliner} $sourceRoot/src_ext/cmdliner.tbz
+    ln -sv ${srcs.cppo} $sourceRoot/src_ext/cppo.tar.gz
+    ln -sv ${srcs.cudf} $sourceRoot/src_ext/cudf.tar.gz
+    ln -sv ${srcs.dose3} $sourceRoot/src_ext/dose3.tar.gz
+    ln -sv ${srcs.dune-local} $sourceRoot/src_ext/dune-local.tbz
+    ln -sv ${srcs.extlib} $sourceRoot/src_ext/extlib.tar.gz
+    ln -sv ${srcs.mccs} $sourceRoot/src_ext/mccs.tar.gz
+    ln -sv ${srcs.ocamlgraph} $sourceRoot/src_ext/ocamlgraph.tar.gz
+    ln -sv ${srcs.opam-file-format} $sourceRoot/src_ext/opam-file-format.tar.gz
+    ln -sv ${srcs.re} $sourceRoot/src_ext/re.tbz
+    ln -sv ${srcs.result} $sourceRoot/src_ext/result.tbz
+    ln -sv ${srcs.seq} $sourceRoot/src_ext/seq.tar.gz
+  '';
+
+  patches = [ ./opam-shebangs.patch ];
+
+  preConfigure = ''
+    substituteInPlace ./src_ext/Makefile --replace "%.stamp: %.download" "%.stamp:"
+    patchShebangs src/state/shellscripts
+  '';
+
+  postConfigure = "make lib-ext";
+
+  # Dirty, but apparently ocp-build requires a TERM
+  makeFlags = ["TERM=screen"];
+
+  outputs = [ "out" "installer" ];
+  setOutputFlags = false;
+
+  # change argv0 to "opam" as a workaround for
+  # https://github.com/ocaml/opam/issues/2142
+  postInstall = ''
+    mv $out/bin/opam $out/bin/.opam-wrapped
+    makeWrapper $out/bin/.opam-wrapped $out/bin/opam \
+      --argv0 "opam" \
+      --suffix PATH : ${aspcud}/bin:${unzip}/bin:${curl}/bin:${lib.optionalString stdenv.isLinux "${bubblewrap}/bin:"}${getconf}/bin \
+      --set OPAM_USER_PATH_RO /run/current-system/sw/bin:/nix/
+    $out/bin/opam-installer --prefix=$installer opam-installer.install
+  '';
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A package manager for OCaml";
+    homepage = http://opam.ocamlpro.com/;
+    maintainers = [ maintainers.henrytill ];
+    platforms = platforms.all;
+  };
+}
+# Generated by: ./opam.nix.pl -v 2.0.4 -p opam-shebangs.patch
diff --git a/nixpkgs/pkgs/development/tools/ocaml/opam/opam-shebangs.patch b/nixpkgs/pkgs/development/tools/ocaml/opam/opam-shebangs.patch
new file mode 100644
index 000000000000..f74ac84ca6b2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam/opam-shebangs.patch
@@ -0,0 +1,128 @@
+diff --git a/src/client/opamInitDefaults.ml b/src/client/opamInitDefaults.ml
+index eca13a7c..1fd66f43 100644
+--- a/src/client/opamInitDefaults.ml
++++ b/src/client/opamInitDefaults.ml
+@@ -35,11 +35,15 @@ let eval_variables = [
+ let os_filter os =
+   FOp (FIdent ([], OpamVariable.of_string "os", None), `Eq, FString os)
+ 
++let os_distribution_filter distro =
++  FOp (FIdent ([], OpamVariable.of_string "os-distribution", None), `Eq, FString distro)
++
+ let linux_filter = os_filter "linux"
+ let macos_filter = os_filter "macos"
+ let openbsd_filter = os_filter "openbsd"
+ let freebsd_filter = os_filter "freebsd"
+ let sandbox_filter = FOr (linux_filter, macos_filter)
++let nixos_filter = os_distribution_filter "nixos"
+ 
+ let gpatch_filter = FOr (openbsd_filter, freebsd_filter)
+ let patch_filter = FNot gpatch_filter
+@@ -50,6 +54,11 @@ let wrappers ~sandboxing () =
+     CString t, None;
+   ] in
+   let w = OpamFile.Wrappers.empty in
++  let w = { w with
++            OpamFile.Wrappers.
++            pre_build = [[CString "%{hooks}%/shebangs.sh", None], Some nixos_filter];
++          }
++  in
+   if sandboxing then
+     { w with
+       OpamFile.Wrappers.
+@@ -113,6 +122,7 @@ let required_tools ~sandboxing () =
+ let init_scripts () = [
+   ("sandbox.sh", OpamScript.bwrap), Some bwrap_filter;
+   ("sandbox.sh", OpamScript.sandbox_exec), Some macos_filter;
++  ("shebangs.sh", OpamScript.patch_shebangs), Some nixos_filter;
+ ]
+ 
+ module I = OpamFile.InitConfig
+diff --git a/src/state/opamScript.mli b/src/state/opamScript.mli
+index 03449970..83de0b53 100644
+--- a/src/state/opamScript.mli
++++ b/src/state/opamScript.mli
+@@ -20,3 +20,4 @@ val env_hook : string
+ val env_hook_zsh : string
+ val env_hook_csh : string
+ val env_hook_fish : string
++val patch_shebangs : string
+diff --git a/src/state/shellscripts/patch_shebangs.sh b/src/state/shellscripts/patch_shebangs.sh
+new file mode 100755
+index 00000000..3ea84e2d
+--- /dev/null
++++ b/src/state/shellscripts/patch_shebangs.sh
+@@ -0,0 +1,73 @@
++#!/usr/bin/env bash
++# This setup hook causes the fixup phase to rewrite all script
++# interpreter file names (`#!  /path') to paths found in $PATH.  E.g.,
++# /bin/sh will be rewritten to /nix/store/<hash>-some-bash/bin/sh.
++# /usr/bin/env gets special treatment so that ".../bin/env python" is
++# rewritten to /nix/store/<hash>/bin/python.  Interpreters that are
++# already in the store are left untouched.
++
++header() { echo "$1"; }
++stopNest() { true; }
++
++fixupOutputHooks+=('if [ -z "$dontPatchShebangs" -a -e "$prefix" ]; then patchShebangs "$prefix"; fi')
++
++patchShebangs() {
++    local dir="$1"
++    header "patching script interpreter paths in $dir"
++    local f
++    local oldPath
++    local newPath
++    local arg0
++    local args
++    local oldInterpreterLine
++    local newInterpreterLine
++
++    find "$dir" -type f -perm -0100 | while read f; do
++        if [ "$(head -1 "$f" | head -c+2)" != '#!' ]; then
++            # missing shebang => not a script
++            continue
++        fi
++
++        oldInterpreterLine=$(head -1 "$f" | tail -c+3)
++        read -r oldPath arg0 args <<< "$oldInterpreterLine"
++
++        if $(echo "$oldPath" | grep -q "/bin/env$"); then
++            # Check for unsupported 'env' functionality:
++            # - options: something starting with a '-'
++            # - environment variables: foo=bar
++            if $(echo "$arg0" | grep -q -- "^-.*\|.*=.*"); then
++                echo "unsupported interpreter directive \"$oldInterpreterLine\" (set dontPatchShebangs=1 and handle shebang patching yourself)"
++                exit 1
++            fi
++            newPath="$(command -v "$arg0" || true)"
++        else
++            if [ "$oldPath" = "" ]; then
++                # If no interpreter is specified linux will use /bin/sh. Set
++                # oldpath="/bin/sh" so that we get /nix/store/.../sh.
++                oldPath="/bin/sh"
++            fi
++            newPath="$(command -v "$(basename "$oldPath")" || true)"
++            args="$arg0 $args"
++        fi
++
++        # Strip trailing whitespace introduced when no arguments are present
++        newInterpreterLine="$(echo "$newPath $args" | sed 's/[[:space:]]*$//')"
++
++        if [ -n "$oldPath" -a "${oldPath:0:${#NIX_STORE}}" != "$NIX_STORE" ]; then
++            if [ -n "$newPath" -a "$newPath" != "$oldPath" ]; then
++                echo "$f: interpreter directive changed from \"$oldInterpreterLine\" to \"$newInterpreterLine\""
++                # escape the escape chars so that sed doesn't interpret them
++                escapedInterpreterLine=$(echo "$newInterpreterLine" | sed 's|\\|\\\\|g')
++                # Preserve times, see: https://github.com/NixOS/nixpkgs/pull/33281
++                touch -r "$f" "$f.timestamp"
++                sed -i -e "1 s|.*|#\!$escapedInterpreterLine|" "$f"
++                touch -r "$f.timestamp" "$f"
++                rm "$f.timestamp"
++            fi
++        fi
++    done
++
++    stopNest
++}
++
++patchShebangs .
diff --git a/nixpkgs/pkgs/development/tools/ocaml/opam/opam.nix.pl b/nixpkgs/pkgs/development/tools/ocaml/opam/opam.nix.pl
new file mode 100755
index 000000000000..59a1cd223b5d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam/opam.nix.pl
@@ -0,0 +1,131 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings qw<all>;
+use Getopt::Std;
+
+my $gencmd = "# Generated by: " . join(" ", $0, @ARGV) . "\n";
+
+our $opt_v;
+our $opt_p;
+our $opt_r;
+our $opt_t;
+getopts "v:p:t:r:";
+
+my $OPAM_RELEASE = $opt_v // "2.0.0";
+my $OPAM_TAG = $opt_t // $OPAM_RELEASE;
+my $OPAM_GITHUB_REPO = $opt_r // "ocaml/opam";
+my $OPAM_RELEASE_URL = "https://github.com/$OPAM_GITHUB_REPO/archive/$OPAM_TAG.zip";
+my $OPAM_RELEASE_SHA256 = `nix-prefetch-url \Q$OPAM_RELEASE_URL\E`;
+chomp $OPAM_RELEASE_SHA256;
+
+my $OPAM_BASE_URL = "https://raw.githubusercontent.com/$OPAM_GITHUB_REPO/$OPAM_TAG";
+my $OPAM_OPAM = `curl -L --url \Q$OPAM_BASE_URL\E/opam-devel.opam`;
+my($OCAML_MIN_VERSION) = $OPAM_OPAM =~ /^available: ocaml-version >= "(.*)"$/m
+  or die "could not parse ocaml version bound\n";
+
+print <<"EOF";
+{ stdenv, lib, fetchurl, makeWrapper, getconf,
+  ocaml, unzip, ncurses, curl, aspcud, bubblewrap
+}:
+
+assert lib.versionAtLeast ocaml.version "$OCAML_MIN_VERSION";
+
+let
+  srcs = {
+EOF
+
+my %urls = ();
+my %md5s = ();
+
+open(SOURCES, "-|", "curl", "-L", "--url", "$OPAM_BASE_URL/src_ext/Makefile.sources");
+while (<SOURCES>) {
+  if (/^URL_(?!PKG_)([-\w]+)\s*=\s*(\S+)$/) {
+    $urls{$1} = $2;
+  } elsif (/^MD5_(?!PKG_)([-\w]+)\s*=\s*(\S+)$/) {
+    $md5s{$1} = $2;
+  }
+}
+for my $src (sort keys %urls) {
+  my ($sha256,$store_path) = split /\n/, `nix-prefetch-url --print-path \Q$urls{$src}\E`;
+  system "echo \Q$md5s{$src}\E' *'\Q$store_path\E | md5sum -c 1>&2";
+  die "md5 check failed for $urls{$src}\n" if $?;
+  print <<"EOF";
+    $src = fetchurl {
+      url = "$urls{$src}";
+      sha256 = "$sha256";
+    };
+EOF
+}
+
+print <<"EOF";
+    opam = fetchurl {
+      url = "$OPAM_RELEASE_URL";
+      sha256 = "$OPAM_RELEASE_SHA256";
+    };
+  };
+in stdenv.mkDerivation rec {
+  name = "opam-\${version}";
+  version = "$OPAM_RELEASE";
+
+  buildInputs = [ unzip curl ncurses ocaml makeWrapper getconf ] ++ lib.optional stdenv.isLinux bubblewrap;
+
+  src = srcs.opam;
+
+  postUnpack = ''
+EOF
+for my $src (sort keys %urls) {
+  my($ext) = $urls{$src} =~ /(\.(?:t(?:ar\.|)|)(?:gz|bz2?))$/
+    or die "could not find extension for $urls{$src}\n";
+  print <<"EOF";
+    ln -sv \${srcs.$src} \$sourceRoot/src_ext/$src$ext
+EOF
+}
+print <<'EOF';
+  '';
+
+EOF
+if (defined $opt_p) {
+  print "  patches = [ ";
+  for my $patch (split /[, ]/, $opt_p) {
+    $patch =~ s/^(?=[^\/]*$)/.\//;
+    print "$patch ";
+  }
+  print "];\n\n";
+}
+print <<'EOF';
+  preConfigure = ''
+    substituteInPlace ./src_ext/Makefile --replace "%.stamp: %.download" "%.stamp:"
+    patchShebangs src/state/shellscripts
+  '';
+
+  postConfigure = "make lib-ext";
+
+  # Dirty, but apparently ocp-build requires a TERM
+  makeFlags = ["TERM=screen"];
+
+  outputs = [ "out" "installer" ];
+  setOutputFlags = false;
+
+  # change argv0 to "opam" as a workaround for
+  # https://github.com/ocaml/opam/issues/2142
+  postInstall = ''
+    mv $out/bin/opam $out/bin/.opam-wrapped
+    makeWrapper $out/bin/.opam-wrapped $out/bin/opam \
+      --argv0 "opam" \
+      --suffix PATH : ${aspcud}/bin:${unzip}/bin:${curl}/bin:${lib.optionalString stdenv.isLinux "${bubblewrap}/bin:"}${getconf}/bin \
+      --set OPAM_USER_PATH_RO /run/current-system/sw/bin:/nix/
+    $out/bin/opam-installer --prefix=$installer opam-installer.install
+  '';
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A package manager for OCaml";
+    homepage = http://opam.ocamlpro.com/;
+    maintainers = [ maintainers.henrytill ];
+    platforms = platforms.all;
+  };
+}
+EOF
+print $gencmd;
diff --git a/nixpkgs/pkgs/development/tools/ocaml/utop/default.nix b/nixpkgs/pkgs/development/tools/ocaml/utop/default.nix
new file mode 100644
index 000000000000..d9e563952ea7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/utop/default.nix
@@ -0,0 +1,77 @@
+{ stdenv, fetchurl, ocaml, findlib, ocamlbuild, dune
+, lambdaTerm, cppo, makeWrapper
+}:
+
+if !stdenv.lib.versionAtLeast ocaml.version "4.03"
+then throw "utop is not available for OCaml ${ocaml.version}"
+else
+
+stdenv.mkDerivation rec {
+  version = "2.3.0";
+  name = "utop-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/diml/utop/archive/${version}.tar.gz";
+    sha256 = "1g1xf19fhzwsikp33pv1wf6wb2qdc5y7dzqi46h8c4l850cwscjh";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ ocaml findlib ocamlbuild cppo dune ];
+
+  propagatedBuildInputs = [ lambdaTerm ];
+
+  inherit (dune) installPhase;
+
+  postFixup =
+   let
+     path = "etc/utop/env";
+
+     # derivation of just runtime deps so env vars created by
+     # setup-hooks can be saved for use at runtime
+     runtime = stdenv.mkDerivation rec {
+       name = "utop-runtime-env-${version}";
+
+       buildInputs = [ findlib ] ++ propagatedBuildInputs;
+
+       phases = [ "installPhase" ];
+
+       installPhase = ''
+         mkdir -p "$out"/${path}
+         for e in OCAMLPATH CAML_LD_LIBRARY_PATH; do
+           printf %s "''${!e}" > "$out"/${path}/$e
+         done
+       '';
+     };
+
+     get = key: ''$(cat "${runtime}/${path}/${key}")'';
+   in ''
+   for prog in "$out"/bin/*
+   do
+
+    # Note: wrapProgram by default calls 'exec -a $0 ...', but this
+    # breaks utop on Linux with OCaml 4.04, and is disabled with
+    # '--argv0 ""' flag. See https://github.com/NixOS/nixpkgs/issues/24496
+    wrapProgram "$prog" \
+      --argv0 "" \
+      --prefix CAML_LD_LIBRARY_PATH ":" "${get "CAML_LD_LIBRARY_PATH"}" \
+      --prefix OCAMLPATH ":" "${get "OCAMLPATH"}" \
+      --prefix OCAMLPATH ":" $(unset OCAMLPATH; addOCamlPath "$out"; printf %s "$OCAMLPATH") \
+      --add-flags "-I ${findlib}/lib/ocaml/${stdenv.lib.getVersion ocaml}/site-lib"
+   done
+   '';
+
+  meta = {
+    description = "Universal toplevel for OCaml";
+    longDescription = ''
+    utop is an improved toplevel for OCaml. It can run in a terminal or in Emacs. It supports line edition, history, real-time and context sensitive completion, colors, and more.
+
+    It integrates with the tuareg mode in Emacs.
+    '';
+    homepage = https://github.com/diml/utop;
+    license = stdenv.lib.licenses.bsd3;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = [
+      stdenv.lib.maintainers.gal_bolle
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/omniorb/default.nix b/nixpkgs/pkgs/development/tools/omniorb/default.nix
new file mode 100644
index 000000000000..725219c3d7c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/omniorb/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, python2 }:
+stdenv.mkDerivation rec {
+
+  name = "omniorb-${version}";
+
+  version = "4.2.3";
+
+  src = fetchurl rec {
+    url = "mirror://sourceforge/project/omniorb/omniORB/omniORB-${version}/omniORB-${version}.tar.bz2";
+    sha256 = "1jlb0wps6311dmhnphn64gv46z0bl8grch4fd9dcx5dlib02lh96";
+  };
+
+  buildInputs = [ python2 ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with stdenv.lib; {
+    description = "omniORB is a robust high performance CORBA ORB for C++ and Python. It is freely available under the terms of the GNU Lesser General Public License (for the libraries), and GNU General Public License (for the tools). omniORB is largely CORBA 2.6 compliant";
+    homepage    = "http://omniorb.sourceforge.net/";
+    license     = licenses.gpl2Plus;
+    maintainers = with maintainers; [ smironov ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/omnisharp-roslyn/default.nix b/nixpkgs/pkgs/development/tools/omnisharp-roslyn/default.nix
new file mode 100644
index 000000000000..6f8b4f824b3f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/omnisharp-roslyn/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, fetchurl
+, mono5
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+
+  name = "omnisharp-roslyn-${version}";
+  version = "1.32.8";
+  
+  src = fetchurl {
+    url = "https://github.com/OmniSharp/omnisharp-roslyn/releases/download/v${version}/omnisharp-mono.tar.gz";
+    sha256 = "0k2a4awmzb7ppll2skyzaa94n3hxqm35ffibl0sygldk3symzwgp";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  preUnpack = ''
+    mkdir src
+    cd src
+    sourceRoot=.
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cd ..
+		cp -r src $out/
+    ls -al $out/src
+    makeWrapper ${mono5}/bin/mono $out/bin/omnisharp \
+    --add-flags "$out/src/OmniSharp.exe"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "OmniSharp based on roslyn workspaces";
+    platforms = platforms.linux;
+    license = licenses.mit;
+    maintainers = with maintainers; [ tesq0 ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/packer/default.nix b/nixpkgs/pkgs/development/tools/packer/default.nix
new file mode 100644
index 000000000000..24a6404dc039
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/packer/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+buildGoPackage rec {
+  name = "packer-${version}";
+  version = "1.4.1";
+
+  goPackagePath = "github.com/hashicorp/packer";
+
+  subPackages = [ "." ];
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = "packer";
+    rev = "v${version}";
+    sha256 = "13pj48pbhl47rwyi6gd6dhq9wq0z2h8kzjkahhqhf62dfssv35db";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A tool for creating identical machine images for multiple platforms from a single source configuration";
+    homepage    = https://www.packer.io;
+    license     = licenses.mpl20;
+    maintainers = with maintainers; [ cstrahan zimbatm ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/packet/default.nix b/nixpkgs/pkgs/development/tools/packet/default.nix
new file mode 100644
index 000000000000..4c30d000ce20
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/packet/default.nix
@@ -0,0 +1,25 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+{ stdenv, buildGoPackage, fetchgit, fetchhg, fetchbzr, fetchsvn }:
+
+buildGoPackage rec {
+  name = "packet-${version}";
+  version = "v2.2.2";
+
+  goPackagePath = "github.com/ebsarr/packet";
+
+  src = fetchgit {
+    rev = version;
+    url = "https://github.com/ebsarr/packet";
+    sha256 = "18n8f2rlab4icb28k1b9gnh30zy382v792x07fmcdqq4nkw6wvwf";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = {
+    description = "a CLI tool to manage packet.net services";
+    homepage = https://github.com/ebsarr/packet;
+    license = stdenv.lib.licenses.mit;
+    maintainers = [ stdenv.lib.maintainers.grahamc ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/packet/deps.nix b/nixpkgs/pkgs/development/tools/packet/deps.nix
new file mode 100644
index 000000000000..53a9bef73207
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/packet/deps.nix
@@ -0,0 +1,156 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/cpuguy83/go-md2man";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cpuguy83/go-md2man";
+      rev = "691ee98543af2f262f35fbb54bdd42f00b9b9cc5";
+      sha256 = "1864g10y9n6ni0p1yqjhvwyjdh0lgxnf7dlb0c4njazdg5rppww9";
+    };
+  }
+  {
+    goPackagePath = "github.com/ebsarr/packngo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ebsarr/packngo";
+      rev = "bc067ae8c334d03f246fd5537dac6d4ed4192ada";
+      sha256 = "1q7w8pdw87ifmkpcayk5qri4lb81bh82jrzh3fdmnbldwmjynyj2";
+    };
+  }
+  {
+    goPackagePath = "github.com/fsnotify/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify";
+      rev = "ccc981bf80385c528a65fbfdd49bf2d8da22aa23";
+      sha256 = "0hcrfmiyx27izac3v0ii0qq2kfjvhr9ma1i79hrl6a6y2ayagzz7";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/hcl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/hcl";
+      rev = "8cb6e5b959231cc1119e43259c4a608f9c51a241";
+      sha256 = "0q6ml0qqs0yil76mpn4mdx4lp94id8vbv575qm60jzl1ijcl5i66";
+    };
+  }
+  {
+    goPackagePath = "github.com/magiconair/properties";
+    fetch = {
+      type = "git";
+      url = "https://github.com/magiconair/properties";
+      rev = "c2353362d570a7bfa228149c62842019201cfb71";
+      sha256 = "1a10362wv8a8qwb818wygn2z48lgzch940hvpv81hv8gc747ajxn";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/mapstructure";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/mapstructure";
+      rev = "fa473d140ef3c6adf42d6b391fe76707f1f243c8";
+      sha256 = "0f06q4fpzg0c370cvmpsl0iq2apl5nkbz5cd3nba5x5ysmshv1lm";
+    };
+  }
+  {
+    goPackagePath = "github.com/packethost/packngo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/packethost/packngo";
+      rev = "2100ba98e6dc4ca18563d91edfdbba3c4bf46ddb";
+      sha256 = "03iav4lxiir9dphygh5jgqvygs59ci80yfqws34vzy47pxb1wsc8";
+    };
+  }
+  {
+    goPackagePath = "github.com/pelletier/go-toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pelletier/go-toml";
+      rev = "c2dbbc24a97911339e01bda0b8cabdbd8f13b602";
+      sha256 = "0v1dsqnk5zmn6ir8jgxijx14s47jvijlqfz3aq435snfrgybd5rz";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/afero";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/afero";
+      rev = "787d034dfe70e44075ccc060d346146ef53270ad";
+      sha256 = "0138rjiacl71h7kvhzinviwvy6qa2m6rflpv9lgqv15hnjvhwvg1";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cast";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cast";
+      rev = "8965335b8c7107321228e3e3702cab9832751bac";
+      sha256 = "177bk7lq40jbgv9p9r80aydpaccfk8ja3a7jjhfwiwk9r1pa4rr2";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cobra";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cobra";
+      rev = "99dc123558852f67743bd0b2caf8383cb3c6d720";
+      sha256 = "0b2rjgycgpkpvpsqgvilqkr66bfk477lyd6l0jxmgxb1h0za5s25";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/jwalterweatherman";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/jwalterweatherman";
+      rev = "14d3d4c518341bea657dd8a226f5121c0ff8c9f2";
+      sha256 = "1f9154lijbz0kkgqwmbphykwl4adv4fvkx6n1p7fdq3x5j9g8i17";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev = "298182f68c66c05229eb03ac171abe6e309ee79a";
+      sha256 = "1cj3cjm7d3zk0mf1xdybh0jywkbbw7a6yr3y22x9sis31scprswd";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/viper";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/viper";
+      rev = "0ac2068de99fd349edc4954d0e9b4a600d75da44";
+      sha256 = "1h33gm0m0d4mrwf097v2mpwjza1zmmkqy67a51jjdcrqx1zys8gj";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "fa5fdf94c78965f1aa8423f0cc50b8b8d728b05a";
+      sha256 = "1wrf7y6a1ar1r8yd88zlmic55alx91k5nqks7f8w1d5j7hp1if35";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "6e3c4e7365ddcc329f090f96e4348398f6310088";
+      sha256 = "1r511ncipn7sdlssn06fpzcpy4mp4spagni4ryxq86p2b0bi8pn4";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "5420a8b6744d3b0345ab293f6fcba19c978f1183";
+      sha256 = "0dwjrs2lp2gdlscs7bsrmyc5yf6mm4fvgw71bzr9mv2qrd2q73s1";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/parinfer-rust/default.nix b/nixpkgs/pkgs/development/tools/parinfer-rust/default.nix
new file mode 100644
index 000000000000..6f96b81e7a46
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parinfer-rust/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  name = "parinfer-rust-${version}";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "eraserhd";
+    repo = "parinfer-rust";
+    rev = "v${version}";
+    sha256 = "0w7fcg33k8k16q8wzax44ck8csa2dr7bmwcz1g57dz33vhxi8ajc";
+  };
+
+  cargoSha256 = "17fkzpvfaxixllr9nxx7dnpqxkiighggryxf30j3lafghyrx987f";
+
+  postInstall = ''
+    mkdir -p $out/share/kak/autoload/plugins
+    cp rc/parinfer.kak $out/share/kak/autoload/plugins/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Infer parentheses for Clojure, Lisp, and Scheme.";
+    homepage = "https://github.com/eraserhd/parinfer-rust";
+    license = licenses.isc;
+    maintainers = with maintainers; [ eraserhd ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parse-cli-bin/default.nix b/nixpkgs/pkgs/development/tools/parse-cli-bin/default.nix
new file mode 100644
index 000000000000..616a2049c778
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parse-cli-bin/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "parse-cli-bin-${version}";
+  version = "3.0.5";
+
+  src = fetchurl {
+    url = "https://github.com/ParsePlatform/parse-cli/releases/download/release_${version}/parse_linux";
+    sha256 = "1iyfizbbxmr87wjgqiwqds51irgw6l3vm9wn89pc3zpj2zkyvf5h";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Parse Command Line Interface";
+    homepage    = "https://parse.com";
+    platforms   = platforms.linux;
+    license     = licenses.bsd3;
+  };
+
+  phases = "installPhase";
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp "$src" "$out/bin/parse"
+    chmod +x "$out/bin/parse"
+  '';
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7-fixes.patch b/nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7-fixes.patch
new file mode 100644
index 000000000000..a71b7718e3bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7-fixes.patch
@@ -0,0 +1,26 @@
+diff --git a/lib/cpp/antlr/CharScanner.hpp b/lib/cpp/antlr/CharScanner.hpp
+index 8a97e97..1835a3e 100644
+--- a/lib/cpp/antlr/CharScanner.hpp
++++ b/lib/cpp/antlr/CharScanner.hpp
+@@ -11,6 +11,8 @@
+ #include <antlr/config.hpp>
+ 
+ #include <map>
++#include <cstdio>
++#include <cstring>
+ 
+ #ifdef HAS_NOT_CCTYPE_H
+ #include <ctype.h>
+diff --git a/scripts/config.make.in b/scripts/config.make.in
+index c23dd5c..6057309 100644
+--- a/scripts/config.make.in
++++ b/scripts/config.make.in
+@@ -38,7 +38,7 @@ MAKEOVERRIDES := $(patsubst SUBDIRS=%,,$(MAKEOVERRIDES))
+ all clean distclean test install force-target clean-target :: 
+ 	@dirs="$(SUBDIRS)" ; \
+ 	test -z "$${dirs}" && { \
+-		dirs=`/bin/ls` ; \
++		dirs=`ls` ; \
+   } ; \
+ 	for d in . $${dirs} ; do \
+ 		case $${d} in \
diff --git a/nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7.nix b/nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7.nix
new file mode 100644
index 000000000000..a054bc82d45d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, jdk, python2 }:
+
+stdenv.mkDerivation {
+  name = "antlr-2.7.7";
+  src = fetchurl {
+    url = "https://www.antlr2.org/download/antlr-2.7.7.tar.gz";
+    sha256 = "1ffvcwdw73id0dk6pj2mlxjvbg0662qacx4ylayqcxgg381fnfl5";
+  };
+  patches = [ ./2.7.7-fixes.patch ];
+  buildInputs = [ jdk ];
+  nativeBuildInputs = [ python2 ];
+
+  meta = with stdenv.lib; {
+    description = "Powerful parser generator";
+    longDescription = ''
+      ANTLR (ANother Tool for Language Recognition) is a powerful parser
+      generator for reading, processing, executing, or translating structured
+      text or binary files. It's widely used to build languages, tools, and
+      frameworks. From a grammar, ANTLR generates a parser that can build and
+      walk parse trees.
+    '';
+    homepage = https://www.antlr.org/;
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/antlr/3.4.nix b/nixpkgs/pkgs/development/tools/parsing/antlr/3.4.nix
new file mode 100644
index 000000000000..ad0ebbdebba0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/3.4.nix
@@ -0,0 +1,39 @@
+{stdenv, fetchurl, jre}:
+
+stdenv.mkDerivation rec {
+  name = "antlr-${version}";
+  version = "3.4";
+  src = fetchurl {
+    url ="https://www.antlr3.org/download/antlr-${version}-complete.jar";
+    sha256 = "1xqbam8vf04q5fasb0m2n1pn5dbp2yw763sj492ncq04c5mqcglx";
+  };
+
+  unpackPhase = "true";
+
+  installPhase = ''
+    mkdir -p "$out"/{lib/antlr,bin}
+    cp "$src" "$out/lib/antlr/antlr-${version}-complete.jar"
+
+    echo "#! ${stdenv.shell}" >> "$out/bin/antlr"
+    echo "'${jre}/bin/java' -cp '$out/lib/antlr/antlr-${version}-complete.jar' -Xms200M -Xmx400M org.antlr.Tool \"\$@\"" >> "$out/bin/antlr"
+
+    chmod a+x "$out/bin/antlr"
+    ln -s "$out/bin/antlr"{,3}
+  '';
+
+  inherit jre;
+
+  meta = with stdenv.lib; {
+    description = "Powerful parser generator";
+    longDescription = ''
+      ANTLR (ANother Tool for Language Recognition) is a powerful parser
+      generator for reading, processing, executing, or translating structured
+      text or binary files. It's widely used to build languages, tools, and
+      frameworks. From a grammar, ANTLR generates a parser that can build and
+      walk parse trees.
+    '';
+    homepage = https://www.antlr.org/;
+    license = licenses.bsd3;
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/antlr/3.5.nix b/nixpkgs/pkgs/development/tools/parsing/antlr/3.5.nix
new file mode 100644
index 000000000000..cf37287beff8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/3.5.nix
@@ -0,0 +1,39 @@
+{stdenv, fetchurl, jre}:
+
+stdenv.mkDerivation rec {
+  name = "antlr-${version}";
+  version = "3.5.2";
+  src = fetchurl {
+    url ="https://www.antlr3.org/download/antlr-${version}-complete.jar";
+    sha256 = "0srjwxipwsfzmpi0v32d1l5lzk9gi5in8ayg33sq8wyp8ygnbji6";
+  };
+
+  unpackPhase = "true";
+
+  installPhase = ''
+    mkdir -p "$out"/{lib/antlr,bin}
+    cp "$src" "$out/lib/antlr/antlr-${version}-complete.jar"
+
+    echo "#! ${stdenv.shell}" >> "$out/bin/antlr"
+    echo "'${jre}/bin/java' -cp '$out/lib/antlr/antlr-${version}-complete.jar' -Xms200M -Xmx400M org.antlr.Tool \"\$@\"" >> "$out/bin/antlr"
+
+    chmod a+x "$out/bin/antlr"
+    ln -s "$out/bin/antlr"{,3}
+  '';
+
+  inherit jre;
+
+  meta = with stdenv.lib; {
+    description = "Powerful parser generator";
+    longDescription = ''
+      ANTLR (ANother Tool for Language Recognition) is a powerful parser
+      generator for reading, processing, executing, or translating structured
+      text or binary files. It's widely used to build languages, tools, and
+      frameworks. From a grammar, ANTLR generates a parser that can build and
+      walk parse trees.
+    '';
+    homepage = https://www.antlr.org/;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/antlr/4.7.nix b/nixpkgs/pkgs/development/tools/parsing/antlr/4.7.nix
new file mode 100644
index 000000000000..40f9bf74ac40
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/4.7.nix
@@ -0,0 +1,81 @@
+{ stdenv, fetchurl, jre
+, fetchFromGitHub, cmake, ninja, pkgconfig, libuuid, darwin }:
+
+let
+  version = "4.7.1";
+  source = fetchFromGitHub {
+    owner = "antlr";
+    repo = "antlr4";
+    rev = version;
+    sha256 = "1xb4d9bd4hw406v85s64gg8gwcrrsrw171vhga1gz4xj6pzfwxz7";
+  };
+
+  runtime = {
+    cpp = stdenv.mkDerivation {
+      name = "antlr-runtime-cpp-${version}";
+      src = source;
+
+      outputs = [ "out" "dev" "doc" ];
+
+      nativeBuildInputs = [ cmake ninja pkgconfig ];
+      buildInputs = stdenv.lib.optional stdenv.isLinux libuuid
+        ++ stdenv.lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.CoreFoundation;
+
+      postUnpack = ''
+        export sourceRoot=$sourceRoot/runtime/Cpp
+      '';
+
+      meta = with stdenv.lib; {
+        description = "C++ target for ANTLR 4";
+        homepage = https://www.antlr.org/;
+        license = licenses.bsd3;
+        platforms = platforms.unix;
+      };
+    };
+  };
+
+  antlr = stdenv.mkDerivation {
+    name = "antlr-${version}";
+    src = fetchurl {
+      url ="https://www.antlr.org/download/antlr-${version}-complete.jar";
+      sha256 = "1236gwnzchama92apb2swmklnypj01m7bdwwfvwvl8ym85scw7gl";
+    };
+
+    unpackPhase = "true";
+
+    installPhase = ''
+      mkdir -p "$out"/{share/java,bin}
+      cp "$src" "$out/share/java/antlr-${version}-complete.jar"
+
+      echo "#! ${stdenv.shell}" >> "$out/bin/antlr"
+      echo "'${jre}/bin/java' -cp '$out/share/java/antlr-${version}-complete.jar:$CLASSPATH' -Xmx500M org.antlr.v4.Tool \"\$@\"" >> "$out/bin/antlr"
+
+      echo "#! ${stdenv.shell}" >> "$out/bin/grun"
+      echo "'${jre}/bin/java' -cp '$out/share/java/antlr-${version}-complete.jar:$CLASSPATH' org.antlr.v4.gui.TestRig \"\$@\"" >> "$out/bin/grun"
+
+      chmod a+x "$out/bin/antlr" "$out/bin/grun"
+      ln -s "$out/bin/antlr"{,4}
+    '';
+
+    inherit jre;
+
+    passthru = {
+      inherit runtime;
+      jarLocation = "${antlr}/share/java/antlr-${version}-complete.jar";
+    };
+
+    meta = with stdenv.lib; {
+      description = "Powerful parser generator";
+      longDescription = ''
+        ANTLR (ANother Tool for Language Recognition) is a powerful parser
+        generator for reading, processing, executing, or translating structured
+        text or binary files. It's widely used to build languages, tools, and
+        frameworks. From a grammar, ANTLR generates a parser that can build and
+        walk parse trees.
+      '';
+      homepage = https://www.antlr.org/;
+      license = licenses.bsd3;
+      platforms = platforms.unix;
+    };
+  };
+in antlr
diff --git a/nixpkgs/pkgs/development/tools/parsing/antlr/builder.sh b/nixpkgs/pkgs/development/tools/parsing/antlr/builder.sh
new file mode 100644
index 000000000000..b8e7791b6fc9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/builder.sh
@@ -0,0 +1,23 @@
+source $stdenv/setup
+
+tar zxvf $src
+cd antlr-*
+cd lib
+
+mkdir -p $out/lib/antlr
+mkdir -p $out/bin
+
+cp *.jar $out/lib/antlr
+
+classpath=""
+for jar in $out/lib/antlr/*.jar; do
+  classpath="$classpath:$jar"
+done
+
+cat > $out/bin/antlr <<EOF
+#! $SHELL
+
+$jre/bin/java -cp $classpath -Xms200M -Xmx400M org.antlr.Tool \$*
+EOF
+
+chmod u+x $out/bin/antlr
diff --git a/nixpkgs/pkgs/development/tools/parsing/bison/2.x.nix b/nixpkgs/pkgs/development/tools/parsing/bison/2.x.nix
new file mode 100644
index 000000000000..e9aa33d2f60b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/bison/2.x.nix
@@ -0,0 +1,43 @@
+{ stdenv, lib, fetchurl, m4, perl }:
+
+stdenv.mkDerivation rec {
+  name = "bison-2.7.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/bison/${name}.tar.gz";
+    sha256 = "0c9li3iaslzzr3zig6m3zlmb4r8i0wfvkcrvdyiqxasb09mjkqh8";
+  };
+
+  nativeBuildInputs = [ m4 ];
+  propagatedBuildInputs = [ m4 ];
+  checkInputs = [ perl ];
+
+  patches = lib.optional stdenv.isDarwin ./darwin-vasnprintf.patch;
+
+  doCheck = true;
+  # M4 = "${m4}/bin/m4";
+
+  meta = {
+    homepage = https://www.gnu.org/software/bison/;
+    description = "Yacc-compatible parser generator";
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    longDescription = ''
+      Bison is a general-purpose parser generator that converts an
+      annotated context-free grammar into an LALR(1) or GLR parser for
+      that grammar.  Once you are proficient with Bison, you can use
+      it to develop a wide range of language parsers, from those used
+      in simple desk calculators to complex programming languages.
+
+      Bison is upward compatible with Yacc: all properly-written Yacc
+      grammars ought to work with Bison with no change.  Anyone
+      familiar with Yacc should be able to use Bison with little
+      trouble.  You need to be fluent in C or C++ programming in order
+      to use Bison.
+    '';
+
+    platforms = stdenv.lib.platforms.unix;
+  };
+
+  passthru = { glrSupport = true; };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/bison/3.x.nix b/nixpkgs/pkgs/development/tools/parsing/bison/3.x.nix
new file mode 100644
index 000000000000..57fed5c9e8d1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/bison/3.x.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, m4, perl, help2man }:
+
+stdenv.mkDerivation rec {
+  pname = "bison";
+  version = "3.3.2";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1lfvns1f6xamz9905fakzkxh4zmk1wa9w33vxcq78fc5841ivnhg";
+  };
+
+  nativeBuildInputs = [ m4 perl ] ++ stdenv.lib.optional stdenv.isSunOS help2man;
+  propagatedBuildInputs = [ m4 ];
+
+  doCheck = false; # fails
+  doInstallCheck = false; # fails
+
+  meta = {
+    homepage = https://www.gnu.org/software/bison/;
+    description = "Yacc-compatible parser generator";
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    longDescription = ''
+      Bison is a general-purpose parser generator that converts an
+      annotated context-free grammar into an LALR(1) or GLR parser for
+      that grammar.  Once you are proficient with Bison, you can use
+      it to develop a wide range of language parsers, from those used
+      in simple desk calculators to complex programming languages.
+
+      Bison is upward compatible with Yacc: all properly-written Yacc
+      grammars ought to work with Bison with no change.  Anyone
+      familiar with Yacc should be able to use Bison with little
+      trouble.  You need to be fluent in C or C++ programming in order
+      to use Bison.
+    '';
+
+    platforms = stdenv.lib.platforms.unix;
+  };
+
+  passthru = { glrSupport = true; };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/bison/darwin-vasnprintf.patch b/nixpkgs/pkgs/development/tools/parsing/bison/darwin-vasnprintf.patch
new file mode 100644
index 000000000000..84b0e6d39d87
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/bison/darwin-vasnprintf.patch
@@ -0,0 +1,12 @@
+diff -ur bison-2.7-pristine/lib/vasnprintf.c bison-2.7/lib/vasnprintf.c
+--- bison-2.7-pristine/lib/vasnprintf.c	2012-11-30 20:48:23.000000000 +0900
++++ bison-2.7/lib/vasnprintf.c	2018-06-28 16:55:31.000000000 +0900
+@@ -4870,7 +4870,7 @@
+ #endif
+                   *fbp = dp->conversion;
+ #if USE_SNPRINTF
+-# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
++# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) || (defined __APPLE__ && defined __MACH__))
+                 fbp[1] = '%';
+                 fbp[2] = 'n';
+                 fbp[3] = '\0';
diff --git a/nixpkgs/pkgs/development/tools/parsing/byacc/default.nix b/nixpkgs/pkgs/development/tools/parsing/byacc/default.nix
new file mode 100644
index 000000000000..4e73c820912b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/byacc/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "byacc-${version}";
+  version = "20180609";
+
+  src = fetchurl {
+    urls = [
+      "ftp://ftp.invisible-island.net/byacc/${name}.tgz"
+      "https://invisible-mirror.net/archives/byacc/${name}.tgz"
+    ];
+    sha256 = "173l9yai5yndbyn8nzdl6q11wv4x959bd0w392i82nfsqcz0pfsv";
+  };
+
+  configureFlags = [
+    "--program-transform-name='s,^,b,'"
+  ];
+
+  doCheck = true;
+
+  postInstall = ''
+    ln -s $out/bin/byacc $out/bin/yacc
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Berkeley YACC";
+    homepage = https://invisible-island.net/byacc/byacc.html;
+    license = licenses.publicDomain;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/flex/2.5.35.nix b/nixpkgs/pkgs/development/tools/parsing/flex/2.5.35.nix
new file mode 100644
index 000000000000..7e09b0a8cd38
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/flex/2.5.35.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, autoreconfHook, flex, bison, texinfo, help2man, m4 }:
+
+stdenv.mkDerivation rec {
+  name = "flex-2.5.35";
+
+  src = fetchurl {
+    url = https://github.com/westes/flex/archive/flex-2-5-35.tar.gz;
+    sha256 = "0wh06nix8bd4w1aq4k2fbbkdq5i30a9lxz3xczf3ff28yy0kfwzm";
+  };
+
+  postPatch = ''
+    patchShebangs tests
+  '';
+
+  nativeBuildInputs = [ flex bison texinfo help2man autoreconfHook ];
+
+  propagatedBuildInputs = [ m4 ];
+
+  preConfigure = stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    "ac_cv_func_malloc_0_nonnull=yes"
+    "ac_cv_func_realloc_0_nonnull=yes"
+  ];
+
+  doCheck = false; # fails 2 out of 46 tests
+
+  meta = with stdenv.lib; {
+    branch = "2.5.35";
+    homepage = http://flex.sourceforge.net/;
+    description = "A fast lexical analyser generator";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/flex/2.6.1.nix b/nixpkgs/pkgs/development/tools/parsing/flex/2.6.1.nix
new file mode 100644
index 000000000000..3a46c6c8f01e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/flex/2.6.1.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, bison, m4 }:
+
+stdenv.mkDerivation rec {
+  name = "flex-2.6.1";
+
+  src = fetchurl {
+    url = "https://github.com/westes/flex/releases/download/v2.6.1/flex-2.6.1.tar.gz";
+    sha256 = "0fy14c35yz2m1n1m4f02by3501fn0cca37zn7jp8lpp4b3kgjhrw";
+  };
+
+  postPatch = ''
+    patchShebangs tests
+  '' + stdenv.lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    substituteInPlace Makefile.in --replace "tests" " ";
+  '';
+
+  buildInputs = [ bison ];
+
+  propagatedBuildInputs = [ m4 ];
+
+  preConfigure = stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    "ac_cv_func_malloc_0_nonnull=yes"
+    "ac_cv_func_realloc_0_nonnull=yes"
+  ];
+
+  postConfigure = stdenv.lib.optionalString (stdenv.isDarwin || stdenv.isCygwin) ''
+    sed -i Makefile -e 's/-no-undefined//;'
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/westes/flex;
+    description = "A fast lexical analyser generator";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/flex/default.nix b/nixpkgs/pkgs/development/tools/parsing/flex/default.nix
new file mode 100644
index 000000000000..d7d27ac9a1cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/flex/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, buildPackages, fetchurl, bison, m4
+, fetchpatch, autoreconfHook, help2man
+}:
+
+stdenv.mkDerivation rec {
+  name = "flex-${version}";
+  version = "2.6.4";
+
+  src = fetchurl {
+    url = "https://github.com/westes/flex/releases/download/v${version}/flex-${version}.tar.gz";
+    sha256 = "15g9bv236nzi665p9ggqjlfn4dwck5835vf0bbw2cz7h5c1swyp8";
+  };
+
+  # Also upstream, will be part of 2.6.5
+  # https://github.com/westes/flex/commit/24fd0551333e
+  patches = [(fetchpatch {
+    name = "glibc-2.26.patch";
+    url = "https://raw.githubusercontent.com/lede-project/source/0fb14a2b1ab2f82c"
+        + "/tools/flex/patches/200-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch";
+    sha256 = "1aarhcmz7mfrgh15pkj6f7ikxa2m0mllw1i1vscsf1kw5d05lw6f";
+  })];
+
+  postPatch = ''
+    patchShebangs tests
+  '' + stdenv.lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+    substituteInPlace Makefile.in --replace "tests" " "
+
+    substituteInPlace doc/Makefile.am --replace 'flex.1: $(top_srcdir)/configure.ac' 'flex.1: '
+  '';
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ autoreconfHook help2man ];
+  buildInputs = [ bison ];
+  propagatedBuildInputs = [ m4 ];
+
+  preConfigure = stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    "ac_cv_func_malloc_0_nonnull=yes"
+    "ac_cv_func_realloc_0_nonnull=yes"
+  ];
+
+  postConfigure = stdenv.lib.optionalString (stdenv.isDarwin || stdenv.isCygwin) ''
+    sed -i Makefile -e 's/-no-undefined//;'
+  '';
+
+  dontDisableStatic = stdenv.buildPlatform != stdenv.hostPlatform;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/westes/flex;
+    description = "A fast lexical analyser generator";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/flexc++/default.nix b/nixpkgs/pkgs/development/tools/parsing/flexc++/default.nix
new file mode 100644
index 000000000000..681f90bbe5a6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/flexc++/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchFromGitHub, bobcat, icmake, yodl }:
+
+stdenv.mkDerivation rec {
+  name = "flexc++-${version}";
+  version = "2.05.00";
+
+  src = fetchFromGitHub {
+    sha256 = "0s25d9jsfsqvm34rwf48cxwz23aq1zja3cqlzfz3z33p29wwazwz";
+    rev = version;
+    repo = "flexcpp";
+    owner = "fbb-git";
+  };
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */flexc++)
+  '';
+
+  buildInputs = [ bobcat ];
+  nativeBuildInputs = [ icmake yodl ];
+
+  postPatch = ''
+    substituteInPlace INSTALL.im --replace /usr $out
+    patchShebangs .
+  '';
+
+  buildPhase = ''
+    ./build man
+    ./build manual
+    ./build program
+  '';
+
+  installPhase = ''
+    ./build install x
+  '';
+
+  meta = with stdenv.lib; {
+    description = "C++ tool for generating lexical scanners";
+    longDescription = ''
+      Flexc++ was designed after `flex'. Flexc++ offers a cleaner class design
+      and requires simpler specification files than offered by flex's C++
+      option.
+    '';
+    homepage = https://fbb-git.github.io/flexcpp/;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/hammer/default.nix b/nixpkgs/pkgs/development/tools/parsing/hammer/default.nix
new file mode 100644
index 000000000000..bf5a2374fdef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/hammer/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchgit, glib, pkgconfig, python, scons }:
+
+stdenv.mkDerivation rec {
+  name = "hammer-${version}";
+  version = "e7aa734";
+
+  src = fetchgit {
+    url = "git://github.com/UpstandingHackers/hammer";
+    sha256 = "01l0wbhz7dymxlndacin2vi8sqwjlw81ds2i9xyi200w51nsdm38";
+    rev = "47f34b81e4de834fd3537dd71928c4f3cdb7f533";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ glib python scons ];
+
+  meta = with stdenv.lib; {
+    description = "A bit-oriented parser combinator library";
+    longDescription = ''
+      Hammer is a parsing library. Like many modern parsing libraries,
+      it provides a parser combinator interface for writing grammars
+      as inline domain-specific languages, but Hammer also provides a
+      variety of parsing backends. It's also bit-oriented rather than
+      character-oriented, making it ideal for parsing binary data such
+      as images, network packets, audio, and executables.
+    '';
+    homepage = https://github.com/UpstandingHackers/hammer;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/jikespg/default.nix b/nixpkgs/pkgs/development/tools/parsing/jikespg/default.nix
new file mode 100644
index 000000000000..6f0eb3735ffb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/jikespg/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  name = "jikespg-1.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/jikes/${name}.tar.gz";
+    sha256 = "083ibfxaiw1abxmv1crccx1g6sixkbyhxn2hsrlf6fwii08s6rgw";
+  };
+
+  sourceRoot = "jikespg/src";
+
+  installPhase =
+    ''
+      mkdir -p $out/bin
+      cp jikespg $out/bin
+    '';
+
+  meta = with stdenv.lib; {
+    homepage = http://jikes.sourceforge.net/;
+    description = "The Jikes Parser Generator";
+    platforms = platforms.linux;
+    license = licenses.ipl10;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/jshon/default.nix b/nixpkgs/pkgs/development/tools/parsing/jshon/default.nix
new file mode 100644
index 000000000000..359daad2d517
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/jshon/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch, jansson }:
+
+stdenv.mkDerivation rec {
+  name = "jshon-20160111.2";
+
+  rev = "a61d7f2f85f4627bc3facdf951746f0fd62334b7";
+  sha256 = "1053w7jbl90q3p5y34pi4i8an1ddsjzwaib5cfji75ivamc5wdmh";
+
+  src = fetchFromGitHub {
+    inherit rev sha256;
+    owner = "keenerd";
+    repo = "jshon";
+  };
+
+  patches = [
+    # Fix null termination in read_stream.
+    # https://github.com/keenerd/jshon/issues/53
+    (fetchpatch {
+      url = https://github.com/mbrock/jshon/commit/32288dd186573ceb58164f30be1782d4580466d8.patch;
+      sha256 = "04rss2nprl9nqblc7smq0477n54hm801xgnnmvyzni313i1n6vhl";
+    })
+  ];
+
+  buildInputs = [ jansson ];
+
+  patchPhase =
+    ''
+      substituteInPlace Makefile --replace "/usr/" "/"
+    '';
+
+  preInstall =
+    ''
+      export DESTDIR=$out
+    '';
+
+  meta = with lib; {
+    homepage = http://kmkeen.com/jshon;
+    description = "JSON parser designed for maximum convenience within the shell";
+    license = licenses.free;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ rushmorem ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/lemon/default.nix b/nixpkgs/pkgs/development/tools/parsing/lemon/default.nix
new file mode 100644
index 000000000000..108576d0b11c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/lemon/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchurl }:
+
+let
+
+  srcs = {
+    lemon = fetchurl {
+      sha256 = "1c5pk2hz7j9hix5mpc38rwnm8dnlr2jqswf4lan6v78ccbyqzkjx";
+      url = "http://www.sqlite.org/src/raw/tool/lemon.c?name=680980c7935bfa1edec20c804c9e5ba4b1dd96f5";
+      name = "lemon.c";
+    };
+    lempar = fetchurl {
+      sha256 = "1ba13a6yh9j2cs1aw2fh4dxqvgf399gxq1gpp4sh8q0f2w6qiw3i";
+      url = "http://www.sqlite.org/src/raw/tool/lempar.c?name=01ca97f87610d1dac6d8cd96ab109ab1130e76dc";
+      name = "lempar.c";
+    };
+  };
+
+in stdenv.mkDerivation rec {
+  name = "lemon-${version}";
+  version = "1.69";
+
+  phases = [ "buildPhase" "installPhase" ];
+
+  buildPhase = ''
+    sh -xc "$CC ${srcs.lemon} -o lemon"
+  '';
+
+  installPhase = ''
+    install -Dvm755 lemon $out/bin/lemon
+    install -Dvm644 ${srcs.lempar} $out/bin/lempar.c
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An LALR(1) parser generator";
+    longDescription = ''
+      The Lemon program is an LALR(1) parser generator that takes a
+      context-free grammar and converts it into a subroutine that will parse a
+      file using that grammar. Lemon is similar to the much more famous
+      programs "yacc" and "bison", but is not compatible with either.
+    '';
+    homepage = http://www.hwaci.com/sw/lemon/;
+    license = licenses.publicDomain;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/peg/default.nix b/nixpkgs/pkgs/development/tools/parsing/peg/default.nix
new file mode 100644
index 000000000000..5b8b16ef1922
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/peg/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "peg-0.1.18";
+
+  src = fetchurl {
+    url = "${meta.homepage}/${name}.tar.gz";
+    sha256 = "114h1y4k8fwcq9m0hfk33dsp7ah8zxzjjzlk71x4iirzczfkn690";
+  };
+
+  preBuild="makeFlagsArray+=( PREFIX=$out )";
+
+  meta = with stdenv.lib; {
+    homepage = http://piumarta.com/software/peg/;
+    platforms = platforms.all;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/ragel/default.nix b/nixpkgs/pkgs/development/tools/parsing/ragel/default.nix
new file mode 100644
index 000000000000..d08df8265b0a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/ragel/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchurl, transfig, tex, ghostscript, colm
+, build-manual ? false
+}:
+
+let
+  generic = { version, sha256, license }:
+    stdenv.mkDerivation rec {
+      name = "ragel-${version}";
+
+      src = fetchurl {
+        url = "https://www.colm.net/files/ragel/${name}.tar.gz";
+        inherit sha256;
+      };
+
+      buildInputs = stdenv.lib.optional build-manual [ transfig ghostscript tex ];
+
+      preConfigure = stdenv.lib.optional build-manual ''
+        sed -i "s/build_manual=no/build_manual=yes/g" DIST
+      '';
+
+      configureFlags = [ "--with-colm=${colm}" ];
+
+      NIX_CFLAGS_COMPILE = stdenv.lib.optional stdenv.cc.isGNU "-std=gnu++98";
+
+      doCheck = true;
+
+      meta = with stdenv.lib; {
+        homepage = https://www.colm.net/open-source/ragel/;
+        description = "State machine compiler";
+        inherit license;
+        platforms = platforms.unix;
+        maintainers = with maintainers; [ pSub ];
+      };
+    };
+
+in
+
+{
+  ragelStable = generic {
+    version = "6.10";
+    sha256 = "0gvcsl62gh6sg73nwaxav4a5ja23zcnyxncdcdnqa2yjcpdnw5az";
+    license = stdenv.lib.licenses.gpl2;
+  };
+
+  ragelDev = generic {
+    version = "7.0.0.12";
+    sha256 = "0x3si355lv6q051lgpg8bpclpiq5brpri5lv3p8kk2qhzfbyz69r";
+    license = stdenv.lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/re2c/default.nix b/nixpkgs/pkgs/development/tools/parsing/re2c/default.nix
new file mode 100644
index 000000000000..1d0545f6889e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/re2c/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  name = "re2c-${version}";
+  version = "1.0.3";
+
+  sourceRoot = "${src.name}/re2c";
+
+  src = fetchFromGitHub {
+    owner  = "skvadrik";
+    repo   = "re2c";
+    rev    = version;
+    sha256 = "0grx7nl9fwcn880v5ssjljhcb9c5p2a6xpwil7zxpmv0rwnr3yqi";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  preCheck = ''
+    patchShebangs run_tests.sh
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tool for writing very fast and very flexible scanners";
+    homepage    = "http://re2c.org";
+    license     = licenses.publicDomain;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pax-rs/default.nix b/nixpkgs/pkgs/development/tools/pax-rs/default.nix
new file mode 100644
index 000000000000..ee6a7ec78c20
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pax-rs/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, fetchurl, rustPlatform, runCommand } :
+with rustPlatform;
+
+buildRustPackage rec {
+  name = "pax-rs-${version}";
+  version = "0.4.0";
+
+  meta = with stdenv.lib; {
+    description = "The fastest JavaScript bundler in the galaxy.";
+    longDescription = ''
+      The fastest JavaScript bundler in the galaxy. Fully supports ECMAScript module syntax (import/export) in addition to CommonJS require(<string>).
+    '';
+    homepage = https://github.com/nathan/pax;
+    license = licenses.mit;
+    maintainers = [ maintainers.klntsky ];
+    platforms = platforms.linux;
+  };
+
+  src =
+    let
+      source = fetchFromGitHub {
+        owner = "nathan";
+        repo = "pax";
+        rev = "pax-v${version}";
+        sha256 = "1l2xpgsms0bfc0i3l0hyw4dbp6d4qdxa9vxyp704p27vvn4ndhv2";
+      };
+
+      cargo-lock = fetchurl {
+        url = "https://gist.github.com/klntsky/c7863424d7df0c379782015f6bb3b399/raw/1cf7481e33984fd1510dc77ed677606d08fa8eb6/Cargo.lock";
+        sha256 = "0ff1b64b99cbca1cc2ceabcd2e4f7bc3411e3a2a9fbb9db2204d9240fe38ddeb";
+      };
+    in
+    runCommand "pax-rs-src" {} ''
+      cp -R ${source} $out
+      chmod +w $out
+      cp ${cargo-lock} $out/Cargo.lock
+    '';
+
+  cargoSha256 = "132a9vnlyp78zxiw5xrazadvx0scs7h2vbm5wz612dmh436mwnxg";
+}
diff --git a/nixpkgs/pkgs/development/tools/pet/default.nix b/nixpkgs/pkgs/development/tools/pet/default.nix
new file mode 100644
index 000000000000..93eea81d0438
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pet/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  name = "pet-${version}";
+  version = "0.3.4";
+
+  src = fetchFromGitHub {
+    owner = "knqyf263";
+    repo = "pet";
+    rev = "v${version}";
+    sha256 = "0m2fzpqxk7hrbxsgqplkg7h2p7gv6s1miymv3gvw0cz039skag0s";
+  };
+
+  modSha256 = "06ham8lsx5c1vk5jkwp1aa9g4q4g7sfq7gxz2gkffa98x2vlawyf";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Simple command-line snippet manager, written in Go";
+    homepage = https://github.com/knqyf263/pet;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pew/default.nix b/nixpkgs/pkgs/development/tools/pew/default.nix
new file mode 100644
index 000000000000..6f26a48b9c43
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pew/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, python3Packages }:
+with python3Packages; buildPythonApplication rec {
+    name = "${pname}-${version}";
+    pname = "pew";
+    version = "1.1.2";
+
+    src = fetchPypi {
+      inherit pname version;
+      sha256 = "04anak82p4v9w0lgfs55s7diywxil6amq8c8bhli143ca8l2fcdq";
+    };
+
+    propagatedBuildInputs = [ virtualenv virtualenv-clone setuptools ];
+
+    LC_ALL = "en_US.UTF-8";
+
+    postFixup = ''
+      set -euo pipefail
+      PEW_SITE="$out/lib/${python.libPrefix}/site-packages"
+      SETUPTOOLS="${setuptools}/lib/${python.libPrefix}/site-packages"
+      SETUPTOOLS_SITE=$SETUPTOOLS/$(cat $SETUPTOOLS/setuptools.pth)
+      CLONEVENV_SITE="${virtualenv-clone}/lib/${python.libPrefix}/site-packages"
+      SITE_PACKAGES="[\'$PEW_SITE\',\'$SETUPTOOLS_SITE\',\'$CLONEVENV_SITE\']"
+      substituteInPlace $PEW_SITE/pew/pew.py \
+        --replace "from pew.pew" "import sys; sys.path.extend($SITE_PACKAGES); from pew.pew" \
+        --replace 'sys.executable, "-m", "virtualenv"' "'${virtualenv}/bin/virtualenv'"
+    '';
+
+    meta = with stdenv.lib; {
+      homepage = https://github.com/berdario/pew;
+      description = "Tools to manage multiple virtualenvs written in pure python";
+      license = licenses.mit;
+      platforms = platforms.all;
+      maintainers = with maintainers; [ berdario ];
+    };
+  }
diff --git a/nixpkgs/pkgs/development/tools/pgloader/default.nix b/nixpkgs/pkgs/development/tools/pgloader/default.nix
new file mode 100644
index 000000000000..47b426604da0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pgloader/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, makeWrapper, sbcl, sqlite, freetds, libzip, curl, git, cacert, openssl }:
+stdenv.mkDerivation rec {
+  pname = "pgloader";
+  version = "3.6.1";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/dimitri/pgloader/releases/download/v3.6.1/pgloader-bundle-3.6.1.tgz";
+    sha256 = "1sm8xmq30d1biin5br0y3vrv4fydbrzfqglz1hnvrkdyxrg7d6f9";
+  };
+
+  nativeBuildInputs = [ git makeWrapper ];
+  buildInputs = [ sbcl cacert sqlite freetds libzip curl openssl ];
+
+  LD_LIBRARY_PATH = stdenv.lib.makeLibraryPath [ sqlite libzip curl git openssl freetds ];
+
+  buildPhase = ''
+    export PATH=$PATH:$out/bin
+    export HOME=$TMPDIR
+
+    make pgloader
+  '';
+
+  dontStrip = true;
+  enableParallelBuilding = false;
+
+  installPhase = ''
+    install -Dm755 bin/pgloader "$out/bin/pgloader"
+    wrapProgram $out/bin/pgloader --prefix LD_LIBRARY_PATH : "${LD_LIBRARY_PATH}"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://pgloader.io/;
+    description = "pgloader loads data into PostgreSQL and allows you to implement Continuous Migration from your current database to PostgreSQL";
+    maintainers = with maintainers; [ mguentner ];
+    license = licenses.postgresql;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/phantomjs/default.nix b/nixpkgs/pkgs/development/tools/phantomjs/default.nix
new file mode 100644
index 000000000000..43fdeff9090b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/phantomjs/default.nix
@@ -0,0 +1,70 @@
+{ stdenv, lib, fetchurl, freetype, fontconfig, openssl, unzip }:
+
+let
+  platforms = [ "i686-linux" "x86_64-linux" "x86_64-darwin" ];
+in
+
+stdenv.mkDerivation rec {
+  name = "phantomjs-1.9.8";
+
+  # I chose to use the binary build for now.
+  # The source version is quite nasty to compile
+  # because it has bundled a lot of external libraries (like QT and Webkit)
+  # and no easy/nice way to use the system versions of these
+
+  src = if stdenv.hostPlatform.system == "i686-linux" then
+          fetchurl {
+            url = "https://bitbucket.org/ariya/phantomjs/downloads/${name}-linux-i686.tar.bz2";
+            sha256 = "11fzmssz9pqf3arh4f36w06sl2nyz8l9h8iyxyd7w5aqnq5la0j1";
+          }
+        else
+          if stdenv.hostPlatform.system == "x86_64-linux" then
+            fetchurl {
+              url = "https://bitbucket.org/ariya/phantomjs/downloads/${name}-linux-x86_64.tar.bz2";
+              sha256 = "0fhnqxxsxhy125fmif1lwgnlhfx908spy7fx9mng4w72320n5nd1";
+            }
+          else # x86_64-darwin
+            fetchurl {
+              url = "https://bitbucket.org/ariya/phantomjs/downloads/${name}-macosx.zip";
+              sha256 = "0j0aq8dgzmb210xdrh0v3d4nblskl3zsckl8bzf1a603wcx085cg";
+            };
+
+  buildInputs = lib.optional stdenv.isDarwin unzip;
+
+  buildPhase = lib.optionalString (!stdenv.isDarwin) ''
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${stdenv.lib.makeLibraryPath [ freetype fontconfig stdenv.cc.cc stdenv.cc.cc openssl ]}" \
+      bin/phantomjs
+  '';
+
+  dontPatchELF = true;
+  dontStrip    = true;
+
+  installPhase = ''
+    mkdir -p $out/share/doc/phantomjs
+    cp -a bin $out
+    cp -a ChangeLog examples LICENSE.BSD README.md third-party.txt $out/share/doc/phantomjs
+  '';
+
+  meta = {
+    description = "Headless WebKit with JavaScript API";
+    longDescription = ''
+      PhantomJS is a headless WebKit with JavaScript API.
+      It has fast and native support for various web standards:
+      DOM handling, CSS selector, JSON, Canvas, and SVG.
+
+      PhantomJS is an optimal solution for:
+      - Headless Website Testing
+      - Screen Capture
+      - Page Automation
+      - Network Monitoring
+    '';
+
+    homepage = http://phantomjs.org/;
+    license = lib.licenses.bsd3;
+
+    maintainers = [ lib.maintainers.bluescreen303 ];
+    inherit platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/phantomjs2/default.nix b/nixpkgs/pkgs/development/tools/phantomjs2/default.nix
new file mode 100644
index 000000000000..51cecd81ecac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/phantomjs2/default.nix
@@ -0,0 +1,114 @@
+{ stdenv, fetchFromGitHub, fetchpatch
+, bison2, flex, fontconfig, freetype, gperf, icu, openssl, libjpeg
+, libpng, perl, python, ruby, sqlite, qtwebkit, qmake, qtbase
+, darwin, writeScriptBin, cups, makeWrapper
+}:
+
+let
+  fakeClang = writeScriptBin "clang" ''
+    #!${stdenv.shell}
+    if [[ "$@" == *.c ]]; then
+      exec "${stdenv.cc}/bin/clang" "$@"
+    else
+      exec "${stdenv.cc}/bin/clang++" "$@"
+    fi
+  '';
+
+in stdenv.mkDerivation rec {
+  name = "phantomjs-${version}";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "ariya";
+    repo = "phantomjs";
+    rev = version;
+    sha256 = "1zsbpk1sgh9a16f1a5nx3qvk77ibjn812wqkxqck8n6fia85m5iq";
+  };
+
+  nativeBuildInputs = [ qmake ];
+  buildInputs = [
+    bison2 flex fontconfig freetype gperf icu openssl
+    libjpeg libpng perl python ruby sqlite qtwebkit qtbase
+    makeWrapper
+  ] ++ stdenv.lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
+    AGL ApplicationServices AppKit Cocoa OpenGL
+    darwin.libobjc fakeClang cups
+  ]);
+
+  patches = [
+    (fetchpatch {
+      url = https://salsa.debian.org/debian/phantomjs/raw/0b20f0dd/debian/patches/build-hardening.patch;
+      sha256 = "1qs1r76w90qgpw742i7lf0y3b7m9zh5wxcbrhrak6mq1kqaphqb5";
+    })
+    (fetchpatch {
+      url = https://salsa.debian.org/debian/phantomjs/raw/0b20f0dd/debian/patches/build-qt-components.patch;
+      sha256 = "1fw2q59aqcks3abvwkqg9903yif6aivdsznc0h6frhhjvpp19vsb";
+    })
+    (fetchpatch {
+      url = https://salsa.debian.org/debian/phantomjs/raw/0b20f0dd/debian/patches/build-qt55-evaluateJavaScript.patch;
+      sha256 = "1avig9cfny8kv3s4mf3mdzvf3xlzgyh351yzwc4bkpnjvzv4fmq6";
+    })
+    (fetchpatch {
+      url = https://salsa.debian.org/debian/phantomjs/raw/0b20f0dd/debian/patches/build-qt55-no-websecurity.patch;
+      sha256 = "1nykqpxa7lcf9iarz5lywgg3v3b1h19iwvjdg4kgq0ai6idhcab8";
+    })
+    (fetchpatch {
+      url = https://salsa.debian.org/debian/phantomjs/raw/0b20f0dd/debian/patches/build-qt55-print.patch;
+      sha256 = "1fydmdjxnplglpbd3ypaih5l237jkxjirpdhzz92mcpy29yla6jw";
+    })
+    (fetchpatch {
+      url = https://salsa.debian.org/debian/phantomjs/raw/0b20f0dd/debian/patches/unlock-qt.patch;
+      sha256 = "13bwz4iw17d6hq5pwkbpcckqyw7fhc6648lvs26m39pp31zwyp03";
+    })
+    ./system-qtbase.patch
+  ];
+
+  postPatch = ''
+    patchShebangs .
+    substituteInPlace src/phantomjs.pro \
+      --replace "QT_MINOR_VERSION, 5" "QT_MINOR_VERSION, 9"
+  '';
+
+  __impureHostDeps = stdenv.lib.optional stdenv.isDarwin "/usr/lib/libicucore.dylib";
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    mkdir -p $out/share/doc/phantomjs
+    cp -a bin $out
+    cp -a ChangeLog examples LICENSE.BSD README.md third-party.txt $out/share/doc/phantomjs
+  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+    install_name_tool -change \
+        ${darwin.CF}/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation \
+        /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation \
+      -change \
+        ${darwin.configd}/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration \
+        /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration \
+    $out/bin/phantomjs
+  '' + ''
+    wrapProgram $out/bin/phantomjs \
+    --set QT_QPA_PLATFORM offscreen \
+    --prefix PATH : ${stdenv.lib.makeBinPath [ qtbase ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Headless WebKit with JavaScript API";
+    longDescription = ''
+      PhantomJS2 is a headless WebKit with JavaScript API.
+      It has fast and native support for various web standards:
+      DOM handling, CSS selector, JSON, Canvas, and SVG.
+
+      PhantomJS is an optimal solution for:
+      - Headless Website Testing
+      - Screen Capture
+      - Page Automation
+      - Network Monitoring
+    '';
+
+    homepage = http://phantomjs.org/;
+    license = licenses.bsd3;
+
+    maintainers = [ maintainers.aflatter ];
+    platforms = platforms.darwin ++ platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/phantomjs2/system-qtbase.patch b/nixpkgs/pkgs/development/tools/phantomjs2/system-qtbase.patch
new file mode 100644
index 000000000000..743372b0f0bc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/phantomjs2/system-qtbase.patch
@@ -0,0 +1,13 @@
+--- a/build.py
++++ b/build.py
+@@ -80,9 +80,9 @@
+ def qmakePath():
+     exe = "qmake"
+     if platform.system() == "Windows":
+         exe += ".exe"
+-    return os.path.abspath("src/qt/qtbase/bin/" + exe)
++    return os.path.abspath("@qtbase@" + exe)
+ 
+ # returns paths for 3rd party libraries (Windows only)
+ def findThirdPartyDeps():
+     include_dirs = []
diff --git a/nixpkgs/pkgs/development/tools/pipenv/default.nix b/nixpkgs/pkgs/development/tools/pipenv/default.nix
new file mode 100644
index 000000000000..cb8e61e119d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pipenv/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildPythonApplication
+, flake8
+, invoke
+, parver
+, pip
+, requests
+, virtualenv
+, fetchPypi
+, virtualenv-clone
+}:
+
+buildPythonApplication rec {
+  pname = "pipenv";
+  version = "2018.11.26";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0ip8zsrwmhrankrix0shig9g8q2knmr7b63sh7lqa8a5x03fcwx6";
+  };
+
+  LC_ALL = "en_US.UTF-8";
+
+  propagatedBuildInputs = [
+    flake8
+    invoke
+    parver
+    pip
+    requests
+    virtualenv
+    virtualenv-clone
+  ];
+
+  doCheck = false;
+
+  makeWrapperArgs = [
+    "--set PYTHONPATH \".:$PYTHONPATH\""
+    "--set PIP_IGNORE_INSTALLED 1"
+  ];
+
+  meta = with lib; {
+    description = "Python Development Workflow for Humans";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ berdario ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/postiats-utilities/default.nix b/nixpkgs/pkgs/development/tools/postiats-utilities/default.nix
new file mode 100644
index 000000000000..40cd133032fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/postiats-utilities/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, python3, python3Packages }:
+
+stdenv.mkDerivation {
+  name = "postiats-utilities-2.0.1";
+  src = fetchurl {
+    url = "https://github.com/Hibou57/PostiATS-Utilities/archive/v2.0.1.tar.gz";
+    sha256 = "12jlzqigmaa9m37x0nq5v3gq8v61m73i5kzdnsm06chf0przpaix";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/Hibou57/PostiATS-Utilities;
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.ttuegel ];
+  };
+
+  buildInputs = [ python3 python3Packages.wrapPython ];
+
+  phases = "unpackPhase patchPhase installPhase";
+
+  postPatch = ''
+    for f in pats-* postiats/*.py; do
+      sed -i "$f" -e "1 s,python3,python,"
+    done
+  '';
+
+  installPhase = ''
+    libdir="$out/lib/${python3.libPrefix}/site-packages"
+    mkdir -p "$libdir"
+    cp -r postiats "$libdir"
+
+    mkdir -p "$out/bin"
+    install pats-* "$out/bin"
+
+    wrapPythonPrograms
+  '';
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/EZTrace/default.nix b/nixpkgs/pkgs/development/tools/profiling/EZTrace/default.nix
new file mode 100644
index 000000000000..8155f3016c3f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/EZTrace/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, fetchurl, autoconf, gfortran
+, libelf, libiberty, zlib, libbfd, libopcodes
+, buildPackages
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.1-7";
+  name = "EZTrace-${version}";
+
+  src = fetchurl {
+    url = "https://gforge.inria.fr/frs/download.php/file/37155/eztrace-${version}.tar.gz";
+    sha256 = "0cr2d4fdv4ljvag55dsz3rpha1jan2gc3jhr06ycyk43450pl58p";
+  };
+
+  # Goes past the rpl_malloc linking failure; fixes silent file breakage
+  preConfigure = ''
+    export ac_cv_func_malloc_0_nonnull=yes
+    substituteInPlace ./configure \
+      --replace "/usr/bin/file" "${buildPackages.file}/bin/file"
+  '';
+
+  nativeBuildInputs = [ autoconf gfortran ];
+  buildInputs = [ libelf libiberty zlib libbfd libopcodes ];
+
+  meta = {
+    description = "Tool that aims at generating automatically execution trace from HPC programs";
+    license = stdenv.lib.licenses.cecill-b;
+    maintainers = with stdenv.lib.maintainers; [ fuuzetsu ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/heaptrack/default.nix b/nixpkgs/pkgs/development/tools/profiling/heaptrack/default.nix
new file mode 100644
index 000000000000..5ff0d2ca2b1e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/heaptrack/default.nix
@@ -0,0 +1,31 @@
+{
+  stdenv, fetchFromGitHub, cmake, extra-cmake-modules,
+  zlib, boost, libunwind, elfutils, sparsehash,
+  qtbase, kio, kitemmodels, threadweaver, kconfigwidgets, kcoreaddons, kdiagram
+}:
+
+stdenv.mkDerivation rec {
+  name = "heaptrack-${version}";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "KDE";
+    repo = "heaptrack";
+    rev = "v${version}";
+    sha256 = "0vgwldl5n41r4y3pv8w29gmyln0k2w6m59zrfw9psm4hkxvivzlx";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+  buildInputs = [
+    zlib boost libunwind elfutils sparsehash
+    qtbase kio kitemmodels threadweaver kconfigwidgets kcoreaddons kdiagram
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Heap memory profiler for Linux";
+    homepage = https://github.com/KDE/heaptrack;
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ gebner ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/oprofile/default.nix b/nixpkgs/pkgs/development/tools/profiling/oprofile/default.nix
new file mode 100644
index 000000000000..0b2b49717645
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/oprofile/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, buildPackages
+, fetchurl, pkgconfig
+, libbfd, popt, zlib, linuxHeaders, libiberty_static
+, withGUI ? false, qt4 ? null
+}:
+
+# libX11 is needed because the Qt build stuff automatically adds `-lX11'.
+assert withGUI -> qt4 != null;
+
+stdenv.mkDerivation rec {
+  name = "oprofile-1.3.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/oprofile/${name}.tar.gz";
+    sha256 = "1rj76vvkhpfn9k04s7jhb813ximfcwd9h5gh18pr4fgcw6yxiplm";
+  };
+
+  postPatch = ''
+    substituteInPlace opjitconv/opjitconv.c \
+      --replace "/bin/rm" "${buildPackages.coreutils}/bin/rm" \
+      --replace "/bin/cp" "${buildPackages.coreutils}/bin/cp"
+  '';
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libbfd zlib popt linuxHeaders libiberty_static ]
+    ++ stdenv.lib.optionals withGUI [ qt4 ];
+
+  configureFlags = [
+      "--with-kernel=${linuxHeaders}"
+      "--disable-shared"   # needed because only the static libbfd is available
+    ]
+    ++ stdenv.lib.optional withGUI "--with-qt-dir=${qt4} --enable-gui=qt4";
+
+  meta = {
+    description = "System-wide profiler for Linux";
+    longDescription = ''
+      OProfile is a system-wide profiler for Linux systems, capable of
+      profiling all running code at low overhead.  It consists of a
+      kernel driver and a daemon for collecting sample data, and
+      several post-profiling tools for turning data into information.
+
+      OProfile leverages the hardware performance counters of the CPU
+      to enable profiling of a wide variety of interesting statistics,
+      which can also be used for basic time-spent profiling. All code
+      is profiled: hardware and software interrupt handlers, kernel
+      modules, the kernel, shared libraries, and applications.
+    '';
+    license = stdenv.lib.licenses.gpl2;
+    homepage = http://oprofile.sourceforge.net/;
+
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/pprof/default.nix b/nixpkgs/pkgs/development/tools/profiling/pprof/default.nix
new file mode 100644
index 000000000000..9130f31f21d3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/pprof/default.nix
@@ -0,0 +1,35 @@
+# This file was originally generated by https://github.com/kamilchm/go2nix v1.2.1
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  name = "pprof-unstable-${version}";
+  version = "2018-08-15";
+  rev = "781f11b1fcf71fae9d185e7189b5e686f575075a";
+
+  goPackagePath = "github.com/google/pprof";
+
+  src = fetchgit {
+    inherit rev;
+    url = "git://github.com/google/pprof";
+    sha256 = "1nvzwcj6h4q0lsjlri3bym4axgv848w3xz57iz5p0wz9lcd5jsmf";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "A tool for visualization and analysis of profiling data";
+    homepage = https://github.com/google/pprof;
+    license = licenses.asl20;
+    longDescription = ''
+      pprof reads a collection of profiling samples in profile.proto format and generates reports to visualize and help analyze the data. It can generate both text and graphical reports (through the use of the dot visualization package).
+
+      profile.proto is a protocol buffer that describes a set of callstacks and symbolization information. A common usage is to represent a set of sampled callstacks from statistical profiling. The format is described on the proto/profile.proto file. For details on protocol buffers, see https://developers.google.com/protocol-buffers
+
+      Profiles can be read from a local file, or over http. Multiple profiles of the same type can be aggregated or compared.
+
+      If the profile samples contain machine addresses, pprof can symbolize them through the use of the native binutils tools (addr2line and nm).
+
+      This is not an official Google product.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/pprof/deps.nix b/nixpkgs/pkgs/development/tools/profiling/pprof/deps.nix
new file mode 100644
index 000000000000..e76f6367996b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/pprof/deps.nix
@@ -0,0 +1,21 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/chzyer/readline";
+    fetch = {
+      type = "git";
+      url = "https://github.com/chzyer/readline";
+      rev = "2972be24d48e78746da79ba8e24e8b488c9880de";
+      sha256 = "104q8dazj8yf6b089jjr82fy9h1g80zyyzvp3g8b44a7d8ngjj6r";
+    };
+  }
+  {
+    goPackagePath = "github.com/ianlancetaylor/demangle";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ianlancetaylor/demangle";
+      rev = "fcd258a6f0b45dc345a407ee5568cf9a4d24a0ae";
+      sha256 = "10hdzq6n4mb13g8ddqvwjwx14djfyxhh0gjc888vdihzvhyqhvrp";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/profiling/pyflame/default.nix b/nixpkgs/pkgs/development/tools/profiling/pyflame/default.nix
new file mode 100644
index 000000000000..acb5d9d943cb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/pyflame/default.nix
@@ -0,0 +1,116 @@
+{ stdenv, autoreconfHook, coreutils, fetchFromGitHub, fetchpatch, pkgconfig
+# pyflame needs one python version per ABI
+# are currently supported
+# * 2.6 or 2.7 for 2.x ABI
+# * 3.4 or 3.5 for 3.{4,5} ABI
+# * 3.6        for 3.6 ABI
+# * 3.7        for 3.7+ ABI
+# to disable support for an ABI, make the corresponding argument null
+, python2, python35, python36, python37, python3
+}:
+stdenv.mkDerivation rec {
+  pname = "pyflame";
+  version = "1.6.7";
+  src = fetchFromGitHub {
+    owner = "uber";
+    repo = "pyflame";
+    rev = "v${version}";
+    sha256 = "0hz1ryimh0w8zyxx4y8chcn54d6b02spflj5k9rcg26an2chkg2w";
+  };
+
+  # Uber's abandoned this since Jun 2018, so we have to patch a lot.
+  # Yay.
+  patches = let
+    # "Add support for Python3.7 (#151)":
+    py37-support = [ # https://github.com/uber/pyflame/pull/153
+      (fetchpatch { # "Add support for python3.7"
+        url = "https://github.com/uber/pyflame/commit/5ee674c4b09a29b82a0e2d7a4ce064fea3df1f4c.patch";
+        sha256 = "19v0yl8frbsq1dkvcmr1zsxf9v75bs8hvlkiv2x8cwylndvz2g5n";
+      })
+      (fetchpatch { # "Add python3.7 to travis test matrix"
+        url = "https://github.com/uber/pyflame/commit/610b5281502ff6d57471e84071f17a33d30f3bcf.patch";
+        sha256 = "13kwzrz0zwmdiirg061wvz7zvdl2w9dnrc81xbkxpm1hh8h0mi9z";
+      })
+      (fetchpatch { # "Update ppa and Ubuntu version"
+        url = "https://github.com/uber/pyflame/commit/ec82a43c90da64815a87d4e3fe2a12ec3c93dc38.patch";
+        sha256 = "1rrcsj5095ns5iyk6ij9kylv8hsrflxjld7b4s5dbpk8jqkf3ndi";
+      })
+      (fetchpatch { # "Clang-Format"
+        url = "https://github.com/uber/pyflame/commit/fb81e40398d6209c38d49d0b6758d9581b3c2bba.patch";
+        sha256 = "024namalrsai8ppl87lqsalfgd2fbqsnbkhpg8q93bvsdxldwc6r";
+      })
+    ];
+
+    # "Fix pyflame for code compiled with ld -z separate-code":
+    separate-code-support = [ # https://github.com/uber/pyflame/pull/170
+      (fetchpatch { # "Fix for code compiled with ld -z separate-code"
+        url = "https://github.com/uber/pyflame/commit/739a77d9b9abf9599f633d49c9ec98a201bfe058.patch";
+        sha256 = "03xhdysr5s73bw3a7nj2h45dylj9a4c1f1i3xqm1nngpd6arq4y6";
+      })
+    ];
+
+    # "Improve PtraceSeize error output"
+    full-ptrace-seize-errors = [ # https://github.com/uber/pyflame/pull/152
+      (fetchpatch { # "Print whole error output from PtraceSeize"
+        url = "https://github.com/uber/pyflame/commit/4b0e2c1b442b0f0c6ac5f56471359cea9886aa0f.patch";
+        sha256 = "0nkqs5zszf78cna0bavcdg18g7rdmn72li3091ygpkgxn77cnvis";
+      })
+      (fetchpatch { # "Print whole error for PtraceSeize"
+        url = "https://github.com/uber/pyflame/commit/1abb23abe4912c4a27553f0b3b5c934753f41f6d.patch";
+        sha256 = "07razp9rlq3s92j8a3iak3qk2h4x4xwz4y915h52ivvnxayscj89";
+      })
+    ];
+  in stdenv.lib.concatLists [
+    py37-support
+    # Without this, tests will leak memory and run forever.
+    separate-code-support
+    full-ptrace-seize-errors
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ python37 python36 python2 python35 ];
+
+  postPatch = ''
+    patchShebangs .
+    # some tests will fail in the sandbox
+    substituteInPlace tests/test_end_to_end.py \
+      --replace 'skipif(IS_DOCKER' 'skipif(True'
+
+    # don't use patchShebangs here to be explicit about the python version
+    substituteInPlace utils/flame-chart-json \
+      --replace '#!usr/bin/env python' '#!${python3.interpreter}'
+  '';
+
+  postInstall = ''
+    install -D utils/flame-chart-json $out/bin/flame-chart-json
+  '';
+
+  doCheck = true;
+  # reproduces the logic of their test script, but without downloading pytest
+  # from the internet with pip
+  checkPhase = let inherit (stdenv) lib; in
+    lib.concatMapStringsSep "\n" (python: ''
+      set -x
+      PYMAJORVERSION=${lib.substring 0 1 python.version} \
+        PATH=${lib.makeBinPath [ coreutils ]}\
+        PYTHONPATH= \
+        ${python.pkgs.pytest}/bin/pytest tests/
+      set +x
+    '') (lib.filter (x: x != null) buildInputs);
+
+  meta = with stdenv.lib; {
+    description = "A ptracing profiler for Python ";
+    longDescription = ''
+      Pyflame is a high performance profiling tool that generates flame graphs
+      for Python. Pyflame uses the Linux ptrace(2) system call to collect
+      profiling information. It can take snapshots of the Python call stack
+      without explicit instrumentation, meaning you can profile a program
+      without modifying its source code.
+    '';
+    homepage = https://github.com/uber/pyflame;
+    license = licenses.asl20;
+    maintainers = [ maintainers.symphorien ];
+    # arm: https://github.com/uber/pyflame/issues/136
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/pyprof2calltree/default.nix b/nixpkgs/pkgs/development/tools/profiling/pyprof2calltree/default.nix
new file mode 100644
index 000000000000..a2d98bcf2387
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/pyprof2calltree/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildPythonApplication, fetchFromGitHub }:
+
+buildPythonApplication rec {
+  pname = "pyprof2calltree";
+  version = "1.4.4";
+
+  # Fetch from GitHub because the PyPi packaged version does not
+  # include all test files.
+  src = fetchFromGitHub {
+    owner = "pwaller";
+    repo = "pyprof2calltree";
+    rev = "v" + version;
+    sha256 = "1vrip41ib7nmkwa8rjny1na1wyp7nvvgvm0h9bd21i262kbm4nqx";
+  };
+
+  meta = with lib; {
+    description = "Help visualize profiling data from cProfile with kcachegrind and qcachegrind";
+    homepage = https://pypi.python.org/pypi/pyprof2calltree/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ sfrijters ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/sysprof/default.nix b/nixpkgs/pkgs/development/tools/profiling/sysprof/default.nix
new file mode 100644
index 000000000000..720544f4b6c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/sysprof/default.nix
@@ -0,0 +1,68 @@
+{ stdenv
+, desktop-file-utils
+, fetchurl
+, gettext
+, glib
+, gtk3
+, itstool
+, libxml2
+, meson, ninja
+, pango
+, pkgconfig
+, polkit
+, shared-mime-info
+, systemd
+, wrapGAppsHook
+, gnome3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sysprof";
+  version = "3.32.0";
+
+  outputs = [ "out" "lib" "dev" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "0kamsnnig56lzs4ziwcxm3b1xyis4z361s9nj3nca0c78sgac8pw";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gettext
+    itstool
+    libxml2
+    meson
+    ninja
+    pkgconfig
+    shared-mime-info
+    wrapGAppsHook
+    gnome3.adwaita-icon-theme
+  ];
+  buildInputs = [ glib gtk3 pango polkit systemd.dev systemd.lib ];
+
+  mesonFlags = [
+    "-Dsystemdunitdir=lib/systemd/system"
+  ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "System-wide profiler for Linux";
+    homepage = https://wiki.gnome.org/Apps/Sysprof;
+    longDescription = ''
+      Sysprof is a sampling CPU profiler for Linux that uses the perf_event_open
+      system call to profile the entire system, not just a single
+      application.  Sysprof handles shared libraries and applications
+      do not need to be recompiled.  In fact they don't even have to
+      be restarted.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = gnome3.maintainers;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/profiling/systemtap/default.nix b/nixpkgs/pkgs/development/tools/profiling/systemtap/default.nix
new file mode 100644
index 000000000000..6b1918a5d982
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/systemtap/default.nix
@@ -0,0 +1,59 @@
+{ fetchgit, pkgconfig, gettext, runCommand, makeWrapper
+, elfutils, kernel, gnumake, python2, python2Packages
+}:
+
+let
+  ## fetchgit info
+  url = git://sourceware.org/git/systemtap.git;
+  rev = "release-${version}";
+  sha256 = "075p45ndr4pzrf5679hcsw1ws4x0xqvx3m037v04545762hki6la";
+  version = "4.0";
+
+  inherit (kernel) stdenv;
+  inherit (stdenv) lib;
+
+  ## stap binaries
+  stapBuild = stdenv.mkDerivation {
+    name = "systemtap-${version}";
+    src = fetchgit { inherit url rev sha256; };
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ elfutils gettext python2 python2Packages.setuptools ];
+    enableParallelBuilding = true;
+  };
+
+  ## a kernel build dir as expected by systemtap
+  kernelBuildDir = runCommand "kbuild-${kernel.version}-merged" { } ''
+    mkdir -p $out
+    for f in \
+        ${kernel}/System.map \
+        ${kernel.dev}/vmlinux \
+        ${kernel.dev}/lib/modules/${kernel.modDirVersion}/build/{*,.*}
+    do
+      ln -s $(readlink -f $f) $out
+    done
+  '';
+
+  pypkgs = with python2Packages; makePythonPath [ pyparsing ];
+
+in runCommand "systemtap-${kernel.version}-${version}" {
+  inherit stapBuild kernelBuildDir;
+  buildInputs = [ makeWrapper ];
+  meta = {
+    homepage = https://sourceware.org/systemtap/;
+    repositories.git = url;
+    description = "Provides a scripting language for instrumentation on a live kernel plus user-space";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+} ''
+  mkdir -p $out/bin
+  for bin in $stapBuild/bin/*; do
+    ln -s $bin $out/bin
+  done
+  rm $out/bin/stap $out/bin/dtrace
+  makeWrapper $stapBuild/bin/stap $out/bin/stap \
+    --add-flags "-r $kernelBuildDir" \
+    --prefix PATH : ${lib.makeBinPath [ stdenv.cc.cc stdenv.cc.bintools elfutils gnumake ]}
+  makeWrapper $stapBuild/bin/dtrace $out/bin/dtrace \
+    --prefix PYTHONPATH : ${pypkgs}
+''
diff --git a/nixpkgs/pkgs/development/tools/proto-contrib/default.nix b/nixpkgs/pkgs/development/tools/proto-contrib/default.nix
new file mode 100644
index 000000000000..836683895565
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/proto-contrib/default.nix
@@ -0,0 +1,23 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "proto-contrib";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "emicklei";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0ksxic7cypv9gg8q5lkl5bla1n9i65z7b03cx9lwq6252glmf2jk";
+  };
+
+  modSha256 = "19cqz13jd95d5vibd10420gg69ldgf6afc51mkglhafgmmif56b0";
+
+  meta = with lib; {
+    description = "Contributed tools and other packages on top of the Go proto package";
+    homepage = https://github.com/emicklei/proto-contrib;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pup/default.nix b/nixpkgs/pkgs/development/tools/pup/default.nix
new file mode 100644
index 000000000000..10a10fa21efb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pup/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  name = "pup-${version}";
+  version = "0.4.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/ericchiang/pup";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://${goPackagePath}";
+    sha256 = "0mnhw0yph5fvcnrcmj1kfbyw1a4lcg3k9f6y28kf44ihlq8h1dfz";
+  };
+
+  meta = with lib; {
+    description = "Streaming HTML processor/selector";
+    license = licenses.mit;
+    maintainers = with maintainers; [ yegortimoshenko ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile
new file mode 100644
index 000000000000..105049819129
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gem "puppet-lint"
diff --git a/nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile.lock b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile.lock
new file mode 100644
index 000000000000..8c5d369fb371
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/Gemfile.lock
@@ -0,0 +1,13 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    puppet-lint (2.3.6)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  puppet-lint
+
+BUNDLED WITH
+   1.16.3
diff --git a/nixpkgs/pkgs/development/tools/puppet/puppet-lint/default.nix b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/default.nix
new file mode 100644
index 000000000000..2940605b1b08
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/default.nix
@@ -0,0 +1,7 @@
+{ bundlerApp }:
+
+bundlerApp {
+  pname = "puppet-lint";
+  gemdir = ./.;
+  exes = [ "puppet-lint" ];
+}
diff --git a/nixpkgs/pkgs/development/tools/puppet/puppet-lint/gemset.nix b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/gemset.nix
new file mode 100644
index 000000000000..86d18b0c554c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/gemset.nix
@@ -0,0 +1,10 @@
+{
+  puppet-lint = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wyk2l440d96ps3x127r52n51kqpqi2nzb3xlg92qn6aksqhnkis";
+      type = "gem";
+    };
+    version = "2.3.6";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/pydb/default.nix b/nixpkgs/pkgs/development/tools/pydb/default.nix
new file mode 100644
index 000000000000..e174184835a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pydb/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, python2, emacs }:
+
+stdenv.mkDerivation {
+  name = "pydb-1.26";
+
+  src = fetchurl {
+    url =  "mirror://sourceforge/sourceforge/bashdb/pydb-1.26.tar.bz2";
+    sha256 = "1wlkz1hd5d4gkzhkjkzcm650c1lchj28hj36jx96mklglm41h4q1";
+  };
+
+  buildInputs = [ python2 emacs /* emacs is optional */ ];
+
+  preConfigure = ''
+    p="$(toPythonPath $out)"
+    configureFlags="$configureFlags --with-python=${python2.interpreter} --with-site-packages=$p"
+  '';
+
+  meta = {
+    description = "Python debugger with GDB-like commands and Emacs bindings";
+    homepage = http://bashdb.sourceforge.net/pydb/;
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pypi2nix/default.nix b/nixpkgs/pkgs/development/tools/pypi2nix/default.nix
new file mode 100644
index 000000000000..e3d458fc6483
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pypi2nix/default.nix
@@ -0,0 +1,106 @@
+{ stdenv, fetchFromGitHub, fetchurl, pythonPackages, zip, makeWrapper, nix, nix-prefetch-git
+, nix-prefetch-hg
+}:
+
+let
+
+  version = "1.8.1";
+
+  src = fetchFromGitHub {
+    owner = "garbas";
+    repo = "pypi2nix";
+    rev = "v${version}";
+    sha256 = "039a2ys7ijzi2sa2haa6a8lbhncvd1wfsi6gcy9vm02gi31ghzyb";
+  };
+
+  click = fetchurl {
+    url = "https://pypi.python.org/packages/95/d9/c3336b6b5711c3ab9d1d3a80f1a3e2afeb9d8c02a7166462f6cc96570897/click-6.7.tar.gz";
+    sha256 = "02qkfpykbq35id8glfgwc38yc430427yd05z1wc5cnld8zgicmgi";
+  };
+
+  requests = fetchurl {
+    url = "https://pypi.python.org/packages/16/09/37b69de7c924d318e51ece1c4ceb679bf93be9d05973bb30c35babd596e2/requests-2.13.0.tar.gz";
+    sha256 = "1s0wg4any4dsv5l3hqjxqk2zgb7pdbqhy9rhc8kh3aigfq4ws8jp";
+  };
+
+in stdenv.mkDerivation rec {
+  name = "pypi2nix-${version}";
+  srcs = [
+    src
+    click
+    requests
+  ];
+  buildInputs = [
+    pythonPackages.python pythonPackages.flake8
+    zip makeWrapper nix.out nix-prefetch-git nix-prefetch-hg
+  ];
+
+  sourceRoot = ".";
+
+  postUnpack = ''
+    mkdir -p $out/pkgs
+
+    mv click-*/click                    $out/pkgs/click
+    mv requests-*/requests              $out/pkgs/
+
+    if [ -z "$IN_NIX_SHELL" ]; then
+      if [ -e git-export ]; then
+        mv git-export/src/pypi2nix      $out/pkgs/pypi2nix
+      else
+        mv source/src/pypi2nix          $out/pkgs/pypi2nix
+      fi
+    fi
+  '';
+
+  patchPhase = ''
+    sed -i -e "s|default='nix-shell',|default='${nix.out}/bin/nix-shell',|" $out/pkgs/pypi2nix/cli.py
+    sed -i -e "s|nix-prefetch-git|${nix-prefetch-git}/bin/nix-prefetch-git|" $out/pkgs/pypi2nix/stage2.py
+    sed -i -e "s|nix-prefetch-hg|${nix-prefetch-hg}/bin/nix-prefetch-hg|" $out/pkgs/pypi2nix/stage2.py
+  '';
+
+  commonPhase = ''
+    mkdir -p $out/bin
+
+    echo "#!${pythonPackages.python.interpreter}" >  $out/bin/pypi2nix
+    echo "import pypi2nix.cli" >> $out/bin/pypi2nix
+    echo "pypi2nix.cli.main()" >> $out/bin/pypi2nix
+
+    chmod +x $out/bin/pypi2nix
+
+    export PYTHONPATH=$out/pkgs:$PYTHONPATH
+  '';
+
+  # flake8 doesn't run on python3
+  doCheck = false;
+  checkPhase = ''
+    flake8 ${src}/src
+  '';
+
+  installPhase = commonPhase + ''
+    wrapProgram $out/bin/pypi2nix \
+        --prefix PYTHONPATH : "$PYTHONPATH" \
+        --prefix PATH : "${nix-prefetch-git}/bin:${nix-prefetch-hg}/bin"
+  '';
+
+  shellHook = ''
+    export home=`pwd`
+    export out=/tmp/`pwd | md5sum | cut -f 1 -d " "`-$name
+
+    rm -rf $out
+    mkdir -p $out
+
+    cd $out
+    runHook unpackPhase
+    runHook commonPhase
+    cd $home
+
+    export PATH=$out/bin:$PATH
+    export PYTHONPATH=`pwd`/src:$PYTHONPATH
+  '';
+
+  meta = {
+    homepage = https://github.com/garbas/pypi2nix;
+    description = "A tool that generates nix expressions for your python packages, so you don't have to.";
+    maintainers = with stdenv.lib.maintainers; [ garbas ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pyre/default.nix b/nixpkgs/pkgs/development/tools/pyre/default.nix
new file mode 100644
index 000000000000..b5dfe3c8bfd9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pyre/default.nix
@@ -0,0 +1,137 @@
+{ stdenv, fetchFromGitHub, ocamlPackages, writeScript
+, dune, python3, rsync, buck, watchman, sqlite }:
+let
+  # Manually set version - the setup script requires
+  # hg and git + keeping the .git directory around.
+  pyre-version = "0.0.22";  # also change typeshed revision below with $pyre-src/.typeshed-version
+  pyre-src = fetchFromGitHub {
+    owner = "facebook";
+    repo = "pyre-check";
+    rev = "v${pyre-version}";
+    sha256 = "057vy6zmgwsi0ag9n4m6sszhahmfk2s1ywm36nyfs7w4d0wnk92s";
+  };
+  versionFile = writeScript "version.ml" ''
+    cat > "./version.ml" <<EOF
+    open Core
+    let build_info () =
+    "pyre-nixpkgs ${pyre-version}"
+    let version () =
+    "${pyre-version}"
+
+    let log_version_banner () =
+      Log.info "Running as pid: %d" (Pid.to_int (Unix.getpid ()));
+      Log.info "Version: %s" (version ());
+      Log.info "Build info: %s" (build_info ())
+    EOF
+  '';
+ pyre-bin = stdenv.mkDerivation {
+  name = "pyre-${pyre-version}";
+
+  src = pyre-src;
+
+  buildInputs = with ocamlPackages; [
+    ocaml
+    findlib
+    menhir
+    yojson
+    core
+    sedlex
+    ppx_deriving_yojson
+    ocamlbuild
+    ppxlib
+    dune
+    ounit
+    base64
+    sqlite.dev
+    # python36Packages.python36Full # TODO
+  ];
+
+  preBuild = ''
+    # build requires HOME to be set
+    export HOME=$TMPDIR
+
+    # "external" because https://github.com/facebook/pyre-check/pull/8/files
+    sed "s/%VERSION%/external/" dune.in > dune
+
+    ln -sf ${versionFile} ./scripts/generate-version-number.sh
+
+    mkdir $(pwd)/build
+    export OCAMLFIND_DESTDIR=$(pwd)/build
+    export OCAMLPATH=$OCAMLPATH:$(pwd)/build
+  '';
+
+  buildFlags = [ "release" ];
+
+  doCheck = true;
+  # ./scripts/run-python-tests.sh # TODO: once typeshed and python bits are added
+
+  # Note that we're not installing the typeshed yet.
+  # Improvement for a future version.
+  installPhase = ''
+    install -D ./_build/default/main.exe $out/bin/pyre.bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A performant type-checker for Python 3";
+    homepage = https://pyre-check.org;
+    license = licenses.mit;
+    platforms = ocamlPackages.ocaml.meta.platforms;
+    maintainers = with maintainers; [ teh ];
+  };
+};
+typeshed = stdenv.mkDerivation {
+  pname = "typeshed";
+  version = pyre-version;
+  src = fetchFromGitHub {
+    owner = "python";
+    repo = "typeshed";
+    rev = "0b49ce75b478fdf283dda5dd1368759ac342dfe2";
+    sha256 = "1w5aqbbcfk5ki8n9fgdikkyadjb318ipqyi517s9xnwlzi1jv0fh";
+  };
+  phases = [ "unpackPhase" "installPhase" ];
+  installPhase = "cp -r $src $out";
+};
+in python3.pkgs.buildPythonApplication rec {
+  pname = "pyre-check";
+  version = pyre-version;
+  src = pyre-src;
+  patches = [ ./pyre-bdist-wheel.patch ];
+
+  # The build-pypi-package script does some funky stuff with build
+  # directories - easier to patch it a bit than to replace it
+  # completely though:
+  postPatch = ''
+    mkdir ./build
+    substituteInPlace scripts/build-pypi-package.sh \
+        --replace 'NIX_BINARY_FILE' '${pyre-bin}/bin/pyre.bin' \
+        --replace 'BUILD_ROOT="$(mktemp -d)"' "BUILD_ROOT=$PWD/build"
+    for file in client/pyre.py client/commands/initialize.py client/commands/tests/initialize_test.py; do
+      substituteInPlace "$file" \
+          --replace '"watchman"' '"${watchman}/bin/watchman"'
+    done
+    substituteInPlace client/buck.py \
+        --replace '"buck"' '"${buck}/bin/buck"'
+    substituteInPlace client/tests/buck_test.py \
+        --replace '"buck"' '"${buck}/bin/buck"'
+  '';
+
+  buildInputs = [ pyre-bin ];
+  nativeBuildInputs = [ rsync ]; # only required for build-pypi-package.sh
+  propagatedBuildInputs = with python3.pkgs; [
+    docutils
+    typeshed
+    click-log
+    ipython
+    sqlalchemy
+    munch
+    xxhash
+    ujson
+  ];
+  buildPhase = ''
+    bash scripts/build-pypi-package.sh --version ${pyre-version} --bundle-typeshed ${typeshed}
+    cp -r build/dist dist
+  '';
+  checkPhase = ''
+    bash scripts/run-python-tests.sh
+  '';
+}
diff --git a/nixpkgs/pkgs/development/tools/pyre/pyre-bdist-wheel.patch b/nixpkgs/pkgs/development/tools/pyre/pyre-bdist-wheel.patch
new file mode 100644
index 000000000000..1b6fea024e03
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pyre/pyre-bdist-wheel.patch
@@ -0,0 +1,43 @@
+diff --git a/scripts/build-pypi-package.sh b/scripts/build-pypi-package.sh
+index 1035591..bb8cbae 100755
+--- a/scripts/build-pypi-package.sh
++++ b/scripts/build-pypi-package.sh
+@@ -98,7 +98,7 @@ rsync -avm --filter='- tests/' --filter='+ */' --filter='-! *.py' "${SCRIPTS_DIR
+ sed -i -e "/__version__/s/= \".*\"/= \"${PACKAGE_VERSION}\"/" "${BUILD_ROOT}/${MODULE_NAME}/version.py"
+ 
+ # Copy binary files.
+-BINARY_FILE="${SCRIPTS_DIRECTORY}/../_build/default/main.exe"
++BINARY_FILE="NIX_BINARY_FILE"
+ if [[ ! -f "${BINARY_FILE}" ]]; then
+   echo "The binary file ${BINARY_FILE} does not exist."
+   echo "Have you run 'make' in the toplevel directory?"
+@@ -146,7 +146,7 @@ def find_typeshed_files(base):
+         result.append((target, files))
+     return result
+ 
+-with open('README.md') as f:
++with open('README.md', encoding='utf8') as f:
+     long_description = f.read()
+ 
+ setup(
+@@ -205,20 +205,3 @@ fi
+ 
+ # Build.
+ python3 setup.py bdist_wheel
+-
+-# Move artifact outside the build directory.
+-mkdir -p "${SCRIPTS_DIRECTORY}/dist"
+-files_count="$(find "${BUILD_ROOT}/dist/" -type f | wc -l | tr -d ' ')"
+-[[ "${files_count}" == '1' ]] || \
+-  die "${files_count} files created in ${BUILD_ROOT}/dist, but only one was expected"
+-source_file="$(find "${BUILD_ROOT}/dist/" -type f)"
+-destination="$(basename "${source_file}")"
+-destination="${destination/%-any.whl/-${WHEEL_DISTRIBUTION_PLATFORM}.whl}"
+-mv "${source_file}" "${SCRIPTS_DIRECTORY}/dist/${destination}"
+-
+-# Cleanup.
+-cd "${SCRIPTS_DIRECTORY}"
+-rm -rf "${BUILD_ROOT}"
+-
+-printf '\nAll done. Build artifact available at:\n  %s\n' "${SCRIPTS_DIRECTORY}/dist/${destination}"
+-exit 0
diff --git a/nixpkgs/pkgs/development/tools/qtcreator/default.nix b/nixpkgs/pkgs/development/tools/qtcreator/default.nix
new file mode 100644
index 000000000000..3c892592d889
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/qtcreator/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, fetchurl, makeWrapper
+, qtbase, qtquickcontrols, qtscript, qtdeclarative, qmake
+, withDocumentation ? false
+}:
+
+with stdenv.lib;
+
+let
+  baseVersion = "4.9";
+  revision = "1";
+in
+
+stdenv.mkDerivation rec {
+  pname = "qtcreator";
+  version = "${baseVersion}.${revision}";
+
+  src = fetchurl {
+    url = "http://download.qt-project.org/official_releases/${pname}/${baseVersion}/${version}/qt-creator-opensource-src-${version}.tar.xz";
+    sha256 = "10ddp1365rf0z4bs7yzc9hajisp3j6mzjshyd0vpi4ki126j5f3r";
+  };
+
+  buildInputs = [ qtbase qtscript qtquickcontrols qtdeclarative ];
+
+  nativeBuildInputs = [ qmake makeWrapper ];
+
+  doCheck = true;
+
+  enableParallelBuilding = true;
+
+  buildFlags = optional withDocumentation "docs";
+
+  installFlags = [ "INSTALL_ROOT=$(out)" ] ++ optional withDocumentation "install_docs";
+
+  preConfigure = ''
+    substituteInPlace src/plugins/plugins.pro \
+      --replace '$$[QT_INSTALL_QML]/QtQuick/Controls' '${qtquickcontrols}/${qtbase.qtQmlPrefix}/QtQuick/Controls'
+  '';
+
+  preBuild = optional withDocumentation ''
+    ln -s ${getLib qtbase}/$qtDocPrefix $NIX_QT5_TMP/share
+  '';
+
+  postInstall = ''
+    substituteInPlace $out/share/applications/org.qt-project.qtcreator.desktop \
+      --replace "Exec=qtcreator" "Exec=$out/bin/qtcreator"
+  '';
+
+  meta = {
+    description = "Cross-platform IDE tailored to the needs of Qt developers";
+    longDescription = ''
+      Qt Creator is a cross-platform IDE (integrated development environment)
+      tailored to the needs of Qt developers. It includes features such as an
+      advanced code editor, a visual debugger and a GUI designer.
+    '';
+    homepage = https://wiki.qt.io/Category:Tools::QtCreator;
+    license = "LGPL";
+    maintainers = [ maintainers.akaWolf ];
+    platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" "armv7l-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/quicktemplate/default.nix b/nixpkgs/pkgs/development/tools/quicktemplate/default.nix
new file mode 100644
index 000000000000..9292d124545a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/quicktemplate/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "quicktemplate-unstable-${version}";
+  version = "2019-01-31";
+  goPackagePath = "github.com/valyala/quicktemplate";
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "valyala";
+    repo = "quicktemplate";
+    rev = "d08324ac14fa81325830fae7eb30188ec68427f8";
+    sha256 = "0gpc1kcqvcn1f9mz2dww8bhrspnsk2fgxzvx398vy7a0xhxq8vhx";
+  };
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/valyala/quicktemplate";
+    description = "Fast, powerful, yet easy to use template engine for Go";
+    license = licenses.mit;
+    maintainers = with maintainers; [ chiiruno ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/quicktemplate/deps.nix b/nixpkgs/pkgs/development/tools/quicktemplate/deps.nix
new file mode 100644
index 000000000000..6c042966c23f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/quicktemplate/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/valyala/bytebufferpool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/valyala/bytebufferpool";
+      rev = "cdfbe9377474227bb42120c1e22fd4433e7f69bf";
+      sha256 = "0c6cixd85dvl2gvs7sdh0k2wm8r3grl4fw0jg4w7d78cp8s2k7ag";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/quilt/default.nix b/nixpkgs/pkgs/development/tools/quilt/default.nix
new file mode 100644
index 000000000000..d5059aa6b93b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/quilt/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, makeWrapper, bash, perl, diffstat, diffutils, patch, findutils }:
+
+stdenv.mkDerivation rec {
+
+  name = "quilt-0.66";
+
+  src = fetchurl {
+    url = "mirror://savannah/quilt/${name}.tar.gz";
+    sha256 = "01vfvk4pqigahx82fhaaffg921ivd3k7rylz1yfvy4zbdyd32jri";
+  };
+
+  buildInputs = [ makeWrapper perl bash diffutils patch findutils diffstat ];
+
+  postInstall = ''
+    wrapProgram $out/bin/quilt --prefix PATH : \
+      ${perl}/bin:${bash}/bin:${diffstat}/bin:${diffutils}/bin:${findutils}/bin:${patch}/bin
+  '';
+
+  meta = {
+    homepage = https://savannah.nongnu.org/projects/quilt;
+    description = "Easily manage large numbers of patches";
+
+    longDescription = ''
+      Quilt allows you to easily manage large numbers of
+      patches by keeping track of the changes each patch
+      makes. Patches can be applied, un-applied, refreshed,
+      and more.
+    '';
+
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.all;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/rdocker/default.nix b/nixpkgs/pkgs/development/tools/rdocker/default.nix
new file mode 100644
index 000000000000..a5683e7a953d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rdocker/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, makeWrapper, openssh }:
+
+stdenv.mkDerivation rec {
+  name = "rdocker-${version}";
+  version = "unstable-2018-07-17";
+
+  src = fetchFromGitHub {
+    owner = "dvddarias";
+    repo = "rdocker";
+    rev = "949377de0154ade2d28c6d4c4ec33b65ea813b5a";
+    sha256 = "1mwg9zh144q4fqk9016v2d347vzch8sxlixaxrz0ci9dxvs6ibd4";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm755 rdocker.sh $out/bin/rdocker
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/rdocker \
+      --prefix PATH : ${stdenv.lib.makeBinPath [ openssh ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Securely control a remote docker daemon CLI using ssh forwarding, no SSL setup needed";
+    homepage = https://github.com/dvddarias/rdocker;
+    maintainers = [ stdenv.lib.maintainers.pneumaticat ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/react-native-debugger/default.nix b/nixpkgs/pkgs/development/tools/react-native-debugger/default.nix
new file mode 100644
index 000000000000..3b6c7940384a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/react-native-debugger/default.nix
@@ -0,0 +1,83 @@
+{ stdenv, fetchurl, unzip, cairo, xorg, gdk_pixbuf, fontconfig, pango, gnome2, atk, gtk2, glib
+, freetype, dbus, nss, nspr, alsaLib, cups, expat, udev, makeDesktopItem
+}:
+
+let
+  rpath = stdenv.lib.makeLibraryPath [
+    cairo
+    stdenv.cc.cc
+    gdk_pixbuf
+    fontconfig
+    pango
+    atk
+    gtk2
+    glib
+    freetype
+    dbus
+    nss
+    nspr
+    alsaLib
+    cups
+    expat
+    udev
+
+    gnome2.GConf
+
+    xorg.libX11
+    xorg.libXcursor
+    xorg.libXtst
+    xorg.libxcb
+    xorg.libXext
+    xorg.libXi
+    xorg.libXdamage
+    xorg.libXrandr
+    xorg.libXcomposite
+    xorg.libXfixes
+    xorg.libXrender
+    xorg.libXScrnSaver
+  ];
+in stdenv.mkDerivation rec {
+  name = "react-native-debugger-${version}";
+  version = "0.9.8";
+
+  src = fetchurl {
+    url = "https://github.com/jhen0409/react-native-debugger/releases/download/v${version}/rn-debugger-linux-x64.zip";
+    sha256 = "07mcliy5f3kcqr76izqirqzwb2rwbnl3k1al9dln1izim0lhx06r";
+  };
+
+  buildInputs = [ unzip ];
+  buildCommand = ''
+    shopt -s extglob
+    mkdir -p $out
+    unzip $src -d $out
+
+    mkdir $out/{lib,bin,share}
+    mv $out/lib{node,ffmpeg}.so $out/lib
+    mv $out/!(lib|share|bin) $out/share
+
+    patchelf \
+      --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+      --set-rpath ${rpath}:$out/lib \
+      $out/share/React\ Native\ Debugger
+
+    ln -s $out/share/React\ Native\ Debugger $out/bin/React\ Native\ Debugger
+
+    install -Dm644 "${desktopItem}/share/applications/"* \
+      -t $out/share/applications/
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = "rndebugger";
+    exec = "React\\ Native\\ Debugger";
+    desktopName = "React Native Debugger";
+    genericName = "React Native Debugger";
+    categories = "Development;Tools;";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/jhen0409/react-native-debugger;
+    license = licenses.mit;
+    description = "The standalone app based on official debugger of React Native, and includes React Inspector / Redux DevTools";
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/redis-dump/.bundle/config b/nixpkgs/pkgs/development/tools/redis-dump/.bundle/config
new file mode 100644
index 000000000000..b81abe028c3c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/redis-dump/.bundle/config
@@ -0,0 +1,3 @@
+---
+BUNDLE_PATH: vendor
+BUNDLE_DISABLE_SHARED_GEMS: '1'
diff --git a/nixpkgs/pkgs/development/tools/redis-dump/Gemfile b/nixpkgs/pkgs/development/tools/redis-dump/Gemfile
new file mode 100644
index 000000000000..f78cb0873c08
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/redis-dump/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'redis-dump'
diff --git a/nixpkgs/pkgs/development/tools/redis-dump/Gemfile.lock b/nixpkgs/pkgs/development/tools/redis-dump/Gemfile.lock
new file mode 100644
index 000000000000..364bdb778f51
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/redis-dump/Gemfile.lock
@@ -0,0 +1,21 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    drydock (0.6.9)
+    redis (4.1.0)
+    redis-dump (0.4.0)
+      drydock (>= 0.6.9)
+      redis (>= 4.0)
+      uri-redis (>= 0.4.0)
+      yajl-ruby (>= 0.1)
+    uri-redis (0.4.2)
+    yajl-ruby (1.4.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  redis-dump
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/development/tools/redis-dump/default.nix b/nixpkgs/pkgs/development/tools/redis-dump/default.nix
new file mode 100644
index 000000000000..c83117860100
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/redis-dump/default.nix
@@ -0,0 +1,15 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "redis-dump";
+  gemdir = ./.;
+  exes = [ "redis-dump" ];
+
+  meta = with lib; {
+    description = "Backup and restore your Redis data to and from JSON";
+    homepage    = http://delanotes.com/redis-dump/;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ offline manveru ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/redis-dump/gemset.nix b/nixpkgs/pkgs/development/tools/redis-dump/gemset.nix
new file mode 100644
index 000000000000..2bfaa1fb9529
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/redis-dump/gemset.nix
@@ -0,0 +1,53 @@
+{
+  drydock = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grf3361mh93lczljmnwafl7gbcp9kk1bjpfwx4ykpd43fzdbfyj";
+      type = "gem";
+    };
+    version = "0.6.9";
+  };
+  redis = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rk6mmy3y2jd34llrf591ribl1p54ghkw7m96wrbamy8fwva5zqv";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  redis-dump = {
+    dependencies = ["drydock" "redis" "uri-redis" "yajl-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gvip73kgm8xvyjmjkz4b986wni9blsmrnpvp5jrsxjz3g0sqzwg";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  uri-redis = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13n8ak41rikkbmml054pir4i1xbgjpmf3dbqihc2kcrgmz3dg81a";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  yajl-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16v0w5749qjp13xhjgr2gcsvjv6mf35br7iqwycix1n2h7kfcckf";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/reflex/default.nix b/nixpkgs/pkgs/development/tools/reflex/default.nix
new file mode 100644
index 000000000000..3e69b4ffa073
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/reflex/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+
+
+buildGoPackage rec {
+  name = "reflex-${version}";
+  version = "0.2.0";
+
+  goPackagePath = "github.com/cespare/reflex";
+
+  src = fetchFromGitHub {
+    owner = "cespare";
+    repo = "reflex";
+    rev = "v${version}";
+    sha256 = "0ccwjmf8rjh03hpbmfiy70ai9dhgvb5vp7albffq0cmv2sl69dqr";
+  };
+
+  meta = with lib; {
+    description = "A small tool to watch a directory and rerun a command when certain files change";
+    homepage = https://github.com/cespare/reflex;
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ nicknovitski ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/reftools/default.nix b/nixpkgs/pkgs/development/tools/reftools/default.nix
new file mode 100644
index 000000000000..6ef724022e8c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/reftools/default.nix
@@ -0,0 +1,29 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "reftools-unstable-${version}";
+  version = "2018-09-14";
+  rev = "654d0ba4f96d62286ca33cd46f7674b84f76d399";
+
+  goPackagePath = "github.com/davidrjenni/reftools";
+  excludedPackages = "\\(cmd/fillswitch/test-fixtures\\)";
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "davidrjenni";
+    repo = "reftools";
+    sha256 = "12y2h1h15xadc8pa3xsj11hpdxz5dss6k7xaa4h1ifkvnasjp5w2";
+  };
+
+  meta = with lib; {
+    description = "reftools - refactoring tools for Go";
+    homepage = https://github.com/davidrjenni/reftools;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/remarshal/default.nix b/nixpkgs/pkgs/development/tools/remarshal/default.nix
new file mode 100644
index 000000000000..10bfd0c2f2d0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/remarshal/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "remarshal";
+  version = "0.9.1";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "564ffe9cbde85bd28a9c184b90c764abd2003abd6101a30802262198b5c7fc40";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    dateutil pytoml pyyaml
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Convert between TOML, YAML and JSON";
+    license = licenses.mit;
+    homepage = https://github.com/dbohdan/remarshal;
+    maintainers = with maintainers; [ offline ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/reno/default.nix b/nixpkgs/pkgs/development/tools/reno/default.nix
new file mode 100644
index 000000000000..35aab138292d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/reno/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, pythonPackages }:
+
+with pythonPackages; buildPythonApplication rec {
+  name = "reno-${version}";
+  version = "2.3.2";
+
+  src = fetchurl {
+    url = "mirror://pypi/r/reno/${name}.tar.gz";
+    sha256 = "018vl9fj706jjf07xdx8q6761s53mrihjn69yjq09gp0vmp1g7i4";
+  };
+
+  # Don't know how to make tests pass
+  doCheck = false;
+
+  # Nothing to strip (python files)
+  dontStrip = true;
+
+  propagatedBuildInputs = [ pbr six pyyaml dulwich ];
+  buildInputs = [ Babel ];
+
+  meta = with stdenv.lib; {
+    description = "Release Notes Manager";
+    homepage    = http://docs.openstack.org/developer/reno/;
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ guillaumekoenig ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/repository-managers/nexus/default.nix b/nixpkgs/pkgs/development/tools/repository-managers/nexus/default.nix
new file mode 100644
index 000000000000..ffd9774ee447
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/repository-managers/nexus/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, makeWrapper, jre_headless, gawk }:
+
+stdenv.mkDerivation rec {
+  name = "nexus-${version}";
+  version = "3.16.1-02";
+
+  src = fetchurl {
+    url = "https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-${version}-unix.tar.gz";
+    sha256 = "0nfcpsb7byykiwrdz01c99a6hr5ww2d4471spzpgs9i64kbjj7ln";
+  };
+
+  sourceRoot = name;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  patches = [ ./nexus-bin.patch ./nexus-vm-opts.patch ];
+
+  postPatch = ''
+    substituteInPlace bin/nexus.vmoptions \
+      --replace etc/karaf $out/etc/karaf \
+      --replace =. =$out
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    cp -rfv * .install4j $out
+    rm -fv $out/bin/nexus.bat
+
+    wrapProgram $out/bin/nexus \
+      --set JAVA_HOME ${jre_headless} \
+      --set ALTERNATIVE_NAME "nexus" \
+      --prefix PATH "${stdenv.lib.makeBinPath [ gawk ]}"
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Repository manager for binary software components";
+    homepage = http://www.sonatype.org/nexus;
+    license = licenses.epl10;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ aespinosa ironpinguin ma27 zaninime ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-bin.patch b/nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-bin.patch
new file mode 100644
index 000000000000..14bcc973aae7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-bin.patch
@@ -0,0 +1,48 @@
+diff --git a/bin/nexus b/bin/nexus
+index d06cb44..37c606e 100755
+--- a/bin/nexus
++++ b/bin/nexus
+@@ -88,7 +88,7 @@ create_db_entry() {
+   fi
+   db_new_file=${db_file}_new
+   if [ -f "$db_file" ]; then
+-    awk '$2 != "'"$test_dir"'" {print $0}' $db_file > $db_new_file
++    awk '$2 != "'"$test_dir"'" {print $scriptname}' $db_file > $db_new_file
+     rm "$db_file"
+     mv "$db_new_file" "$db_file"
+   fi
+@@ -246,7 +246,7 @@ read_vmoptions() {
+ 
+ unpack_file() {
+   if [ -f "$1" ]; then
+-    jar_file=`echo "$1" | awk '{ print substr($0,1,length-5) }'`
++    jar_file=`echo "$1" | awk '{ print substr($scriptname,1,length-5) }'`
+     bin/unpack200 -r "$1" "$jar_file"
+ 
+     if [ $? -ne 0 ]; then
+@@ -377,9 +377,14 @@ fi
+ 
+ old_pwd=`pwd`
+ 
+-progname=`basename "$0"`
+-linkdir=`dirname "$0"`
++scriptname=$0
+ 
++if [ ! -z "$ALTERNATIVE_NAME" ]; then
++  scriptname=`dirname "$0"`"/"$ALTERNATIVE_NAME
++fi
++
++progname=`basename "$scriptname"`
++linkdir=`dirname "$scriptname"`
+ cd "$linkdir"
+ prg="$progname"
+ 
+@@ -590,7 +595,7 @@ return_code=$?
+ 
+     ;;
+     *)
+-        echo "Usage: $0 {start|stop|run|run-redirect|status|restart|force-reload}"
++        echo "Usage: $scriptname {start|stop|run|run-redirect|status|restart|force-reload}"
+         exit 1
+     ;;
+ esac
diff --git a/nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-vm-opts.patch b/nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-vm-opts.patch
new file mode 100644
index 000000000000..744b4b96a56b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/repository-managers/nexus/nexus-vm-opts.patch
@@ -0,0 +1,14 @@
+diff --git a/bin/nexus b/bin/nexus
+index e7ed3fb..8db766b 100755
+--- a/bin/nexus
++++ b/bin/nexus
+@@ -440,7 +440,8 @@ add_class_path "$app_home/lib/boot/org.apache.karaf.diagnostic.boot-4.0.9.jar"
+ add_class_path "$app_home/lib/boot/org.apache.karaf.jaas.boot-4.0.9.jar"
+ 
+ vmoptions_val=""
+-read_vmoptions "$prg_dir/$progname.vmoptions"
++VM_OPTS=${VM_OPTS_FILE:-"$prg_dir/$progname.vmoptions"}
++read_vmoptions "$VM_OPTS"
+ INSTALL4J_ADD_VM_PARAMS="$INSTALL4J_ADD_VM_PARAMS $vmoptions_val"
+ 
+ 
diff --git a/nixpkgs/pkgs/development/tools/rhc/default.nix b/nixpkgs/pkgs/development/tools/rhc/default.nix
new file mode 100644
index 000000000000..634ca28aaf13
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rhc/default.nix
@@ -0,0 +1,29 @@
+{ lib, bundlerEnv, ruby_2_2, stdenv, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "rhc-1.38.7";
+
+  env = bundlerEnv {
+    name = "rhc-1.38.7-gems";
+
+    ruby = ruby_2_2;
+
+    gemdir = ./.;
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  phases = [ "installPhase" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/rhc $out/bin/rhc
+  '';
+
+  meta = with lib; {
+    homepage = https://github.com/openshift/rhc;
+    description = "OpenShift client tools";
+    license = licenses.asl20;
+    maintainers = [ maintainers.szczyp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/richgo/default.nix b/nixpkgs/pkgs/development/tools/richgo/default.nix
new file mode 100644
index 000000000000..aa537df15084
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/richgo/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "richgo-${version}";
+  version = "0.2.8";
+  goPackagePath = "github.com/kyoh86/richgo";
+
+  src = fetchFromGitHub {
+    owner = "kyoh86";
+    repo = "richgo";
+    rev = "v${version}";
+    sha256 = "0kbwl3a2gima23zmahk0jxp7wga91bs927a1rp5xl889ikng1n4j";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Enrich `go test` outputs with text decorations.";
+    homepage = https://github.com/kyoh86/richgo;
+    license = licenses.unlicense; # NOTE: The project switched to MIT in https://git.io/fA1ik
+    maintainers = with maintainers; [ rvolosatovs ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ronn/Gemfile b/nixpkgs/pkgs/development/tools/ronn/Gemfile
new file mode 100644
index 000000000000..64f1df743abc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ronn/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "ronn"
diff --git a/nixpkgs/pkgs/development/tools/ronn/Gemfile.lock b/nixpkgs/pkgs/development/tools/ronn/Gemfile.lock
new file mode 100644
index 000000000000..c2b90f634948
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ronn/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    hpricot (0.8.6)
+    mustache (1.0.3)
+    rdiscount (2.2.0.1)
+    ronn (0.7.3)
+      hpricot (>= 0.8.2)
+      mustache (>= 0.7.0)
+      rdiscount (>= 1.5.8)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  ronn
+
+BUNDLED WITH
+   1.11.2
diff --git a/nixpkgs/pkgs/development/tools/ronn/default.nix b/nixpkgs/pkgs/development/tools/ronn/default.nix
new file mode 100644
index 000000000000..5f20e89d4083
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ronn/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, lib, bundlerEnv, makeWrapper, groff }:
+
+stdenv.mkDerivation rec {
+  name = "ronn-${version}";
+  version = env.gems.ronn.version;
+
+  env = bundlerEnv rec {
+    name = "ronn-gems";
+    gemdir = ./.;
+  };
+
+  phases = ["installPhase"];
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/ronn $out/bin/ronn \
+      --set PATH ${groff}/bin
+  '';
+
+  meta = with lib; {
+    description = "markdown-based tool for building manpages";
+    homepage = https://rtomayko.github.io/ronn/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+    platforms = env.ruby.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ronn/gemset.nix b/nixpkgs/pkgs/development/tools/ronn/gemset.nix
new file mode 100644
index 000000000000..ce804e1f9f5b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ronn/gemset.nix
@@ -0,0 +1,34 @@
+{
+  hpricot = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jn8x9ch79gqmnzgyz78kppavjh5lqx0y0r6frykga2b86rz9s6z";
+      type = "gem";
+    };
+    version = "0.8.6";
+  };
+  mustache = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1v4pdvgvs8gw0zbh5sy3l308amlsjg8sdfrkml0g0m0wwj4x7naf";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  rdiscount = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1arvk3k06prxasq1djbj065ixar4zl171340g7wr1ww4gj9makx3";
+      type = "gem";
+    };
+    version = "2.2.0.1";
+  };
+  ronn = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07plsxxfx5bxdk72ii9za6km0ziqlq8jh3bicr4774dalga6zpw2";
+      type = "gem";
+    };
+    version = "0.7.3";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/rq/default.nix b/nixpkgs/pkgs/development/tools/rq/default.nix
new file mode 100644
index 000000000000..72b9406211cb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rq/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, rustPlatform, llvmPackages, v8 }:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  name = "rq-${version}";
+  version = "0.10.4";
+
+  src = fetchFromGitHub {
+    owner = "dflemstr";
+    repo = "rq";
+    rev = "v${version}";
+    sha256 = "066f6sdy0vrp113wlg18q9p0clyrg9iqbj17ly0yn8dxr5iar002";
+  };
+
+  cargoSha256 = "1n92d82l9wqrpsbkqiir6zsgf12xp4xb6bxq2nywg4lmwrnyapbh";
+
+  buildInputs = [ llvmPackages.clang-unwrapped v8 ];
+
+  configurePhase = ''
+    export LIBCLANG_PATH="${llvmPackages.clang-unwrapped}/lib"
+    export V8_SOURCE="${v8}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A tool for doing record analysis and transformation";
+    homepage = https://github.com/dflemstr/rq ;
+    license = with licenses; [ asl20 ];
+    maintainers = [ maintainers.aristid ];
+    platforms = platforms.all;
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rshell/default.nix b/nixpkgs/pkgs/development/tools/rshell/default.nix
new file mode 100644
index 000000000000..421aeb9ad91c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rshell/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildPythonApplication, fetchPypi, pyserial, pyudev }:
+
+buildPythonApplication rec {
+  pname = "rshell";
+  version = "0.0.25";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "f6857cdc3c53c8ce9ba7a560c2759c10b988f3d9fafde912d3fa4deecb4d4664";
+  };
+
+  propagatedBuildInputs = [ pyserial pyudev ];
+
+  meta = with lib; {
+    homepage = https://github.com/dhylands/rshell;
+    description = "Remote Shell for MicroPython";
+    license = licenses.mit;
+    maintainers = with maintainers; [ c0deaddict ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rtags/default.nix b/nixpkgs/pkgs/development/tools/rtags/default.nix
new file mode 100644
index 000000000000..da3b27ebacc5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rtags/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, lib, fetchgit, cmake, llvmPackages, openssl, apple_sdk, emacs, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  name = "rtags-${version}";
+  version = "2.16";
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs = [ llvmPackages.llvm openssl emacs ]
+    ++ lib.optionals stdenv.cc.isGNU [ llvmPackages.clang-unwrapped ]
+    ++ lib.optionals stdenv.isDarwin [ apple_sdk.libs.xpc apple_sdk.frameworks.CoreServices ];
+
+  src = fetchgit {
+    rev = "refs/tags/v${version}";
+    fetchSubmodules = true;
+    url = "https://github.com/andersbakken/rtags.git";
+    sha256 = "15qmwkajw2zzfnw9hnv08p0asa6prg88nvqlxmv56c0dyhldjpkm";
+    # unicode file names lead to different checksums on HFS+ vs. other
+    # filesystems because of unicode normalisation
+    postFetch = ''
+      rm $out/src/rct/tests/testfile_*.txt
+    '';
+  };
+
+  preConfigure = ''
+    export LIBCLANG_CXXFLAGS="-isystem ${llvmPackages.clang.cc}/include $(llvm-config --cxxflags) -fexceptions" \
+           LIBCLANG_LIBDIR="${llvmPackages.clang.cc}/lib"
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "C/C++ client-server indexer based on clang";
+    homepage = https://github.com/andersbakken/rtags;
+    license = stdenv.lib.licenses.gpl3;
+    platforms = with stdenv.lib.platforms; x86_64 ++ aarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rubocop/Gemfile b/nixpkgs/pkgs/development/tools/rubocop/Gemfile
new file mode 100644
index 000000000000..18a39cab1c3e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rubocop/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'rubocop'
diff --git a/nixpkgs/pkgs/development/tools/rubocop/Gemfile.lock b/nixpkgs/pkgs/development/tools/rubocop/Gemfile.lock
new file mode 100644
index 000000000000..314daff01c26
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rubocop/Gemfile.lock
@@ -0,0 +1,27 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    ast (2.4.0)
+    jaro_winkler (1.5.2)
+    parallel (1.17.0)
+    parser (2.6.3.0)
+      ast (~> 2.4.0)
+    rainbow (3.0.0)
+    rubocop (0.71.0)
+      jaro_winkler (~> 1.5.1)
+      parallel (~> 1.10)
+      parser (>= 2.6)
+      rainbow (>= 2.2.2, < 4.0)
+      ruby-progressbar (~> 1.7)
+      unicode-display_width (>= 1.4.0, < 1.7)
+    ruby-progressbar (1.10.1)
+    unicode-display_width (1.6.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  rubocop
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/development/tools/rubocop/default.nix b/nixpkgs/pkgs/development/tools/rubocop/default.nix
new file mode 100644
index 000000000000..288ccfa1524b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rubocop/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerEnv, ruby }:
+
+bundlerEnv rec {
+  pname = "rubocop";
+
+  inherit ruby;
+
+  gemdir = ./.;
+
+  meta = with lib; {
+    description = "Automatic Ruby code style checking tool";
+    homepage = "https://docs.rubocop.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ leemachin ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rubocop/gemset.nix b/nixpkgs/pkgs/development/tools/rubocop/gemset.nix
new file mode 100644
index 000000000000..89428cdab0b9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rubocop/gemset.nix
@@ -0,0 +1,84 @@
+{
+  ast = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "184ssy3w93nkajlz2c70ifm79jp3j737294kbc5fjw69v1w0n9x7";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  jaro_winkler = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zz27z88qznix4r65gd9h56gl177snlfpgv10b0s69vi8qpl909l";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  parallel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x1gzgjrdlkm1aw0hfpyphsxcx90qgs3y4gmp9km3dvf4hc4qm8r";
+      type = "gem";
+    };
+    version = "1.17.0";
+  };
+  parser = {
+    dependencies = ["ast"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pnks149x0fzgqiw53qlmvcd8bi746cxdw03sjljby5s97p1fskn";
+      type = "gem";
+    };
+    version = "2.6.3.0";
+  };
+  rainbow = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  rubocop = {
+    dependencies = ["jaro_winkler" "parallel" "parser" "rainbow" "ruby-progressbar" "unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mjyrf1dmf58i40izs8rp2j4mqnyd4qpah9svmkwhs33ckxsjh6b";
+      type = "gem";
+    };
+    version = "0.71.0";
+  };
+  ruby-progressbar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k77i0d4wsn23ggdd2msrcwfy0i376cglfqypkk2q77r2l3408zf";
+      type = "gem";
+    };
+    version = "1.10.1";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08kfiniak1pvg3gn5k6snpigzvhvhyg7slmm0s2qx5zkj62c1z2w";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/rucksack/default.nix b/nixpkgs/pkgs/development/tools/rucksack/default.nix
new file mode 100644
index 000000000000..09008c9d63d8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rucksack/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, liblaxjson, cmake, freeimage }:
+
+stdenv.mkDerivation rec {
+  version = "3.1.0";
+  name = "rucksack-${version}";
+
+  src = fetchFromGitHub {
+    owner = "andrewrk";
+    repo = "rucksack";
+    rev = "${version}";
+    sha256 = "0bcm20hqxqnq1j0zghb9i7z9frri6bbf7rmrv5g8dd626sq07vyv";
+  };
+
+  buildInputs = [ cmake liblaxjson freeimage ];
+
+  meta = with stdenv.lib; {
+    description = "Texture packer and resource bundler";
+    platforms = platforms.unix;
+    homepage = https://github.com/andrewrk/rucksack;
+    license = licenses.mit;
+    maintainers = [ maintainers.andrewrk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/bindgen/default.nix b/nixpkgs/pkgs/development/tools/rust/bindgen/default.nix
new file mode 100644
index 000000000000..d0cd28379d6c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/bindgen/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, fetchFromGitHub, rustPlatform, clang, llvmPackages, rustfmt, writeScriptBin,
+  runtimeShell }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-bindgen";
+  version = "0.49.0";
+
+  src = fetchFromGitHub {
+    owner = "rust-lang";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0i1lh8z0jpf8gcfqxig8kl6wzjrkwb3jkad5ghb6ppkdkpr94jq4";
+  };
+
+  cargoSha256 = "0v3slbah0s1w75s38x1akvshcxsi1s810yybd9faday7biwmdbmj";
+
+  libclang = llvmPackages.libclang.lib; #for substituteAll
+
+  buildInputs = [ libclang ];
+
+  propagatedBuildInputs = [ clang ]; # to populate NIX_CXXSTDLIB_COMPILE
+
+  configurePhase = ''
+    export LIBCLANG_PATH="${libclang}/lib"
+  '';
+
+  postInstall = ''
+    mv $out/bin/{bindgen,.bindgen-wrapped};
+    substituteAll ${./wrapper.sh} $out/bin/bindgen
+    chmod +x $out/bin/bindgen
+  '';
+
+  doCheck = true;
+  checkInputs =
+    let fakeRustup = writeScriptBin "rustup" ''
+      #!${runtimeShell}
+      shift
+      shift
+      exec "$@"
+    '';
+  in [
+    rustfmt
+    fakeRustup # the test suite insists in calling `rustup run nightly rustfmt`
+    clang
+  ];
+  preCheck = ''
+    # for the ci folder, notably
+    patchShebangs .
+  '';
+
+  meta = with stdenv.lib; {
+    description = "C and C++ binding generator";
+    longDescription = ''
+      Bindgen takes a c or c++ header file and turns them into
+      rust ffi declarations.
+      As with most compiler related software, this will only work
+      inside a nix-shell with the required libraries as buildInputs.
+    '';
+    homepage = https://github.com/rust-lang/rust-bindgen;
+    license = with licenses; [ bsd3 ];
+    maintainers = [ maintainers.ralith ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/bindgen/wrapper.sh b/nixpkgs/pkgs/development/tools/rust/bindgen/wrapper.sh
new file mode 100755
index 000000000000..95cd0901cec8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/bindgen/wrapper.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+sep='--'   # whether to add -- before new options
+cxx=0      # whether cxx was explicitly requested
+lastWasx=0 # whether the last argument passed was -x
+for e in "$@"; do
+  if [[ "$e" == "--" ]]; then
+    sep=
+  fi;
+  if [[ "$sep" == "" ]]; then
+    # we look for -x c++ after -- only
+    if [[ "$e" == "-x" ]]; then
+      lastWasx=1
+    fi;
+    if [[ $lastWasx -eq 1 && "$e" == "c++" ]]; then
+      lastWasx=0
+      cxx=1
+    fi;
+    if [[ "$e" == "-xc++" || "$e" == -std=c++* ]]; then
+      cxx=1
+    fi;
+  fi;
+done;
+cxxflags=
+if [[ $cxx -eq 1 ]]; then
+  cxxflags=$NIX_CXXSTDLIB_COMPILE
+fi;
+if [[ -n "$NIX_DEBUG" ]]; then
+  set -x;
+fi;
+export LIBCLANG_PATH="@libclang@/lib"
+# shellcheck disable=SC2086
+# cxxflags and NIX_CFLAGS_COMPILE should be word-split
+exec -a "$0" @out@/bin/.bindgen-wrapped "$@" $sep $cxxflags $NIX_CFLAGS_COMPILE
+# note that we add the flags after $@ which is incorrect. This is only for the sake
+# of simplicity.
+
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-asm/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-asm/default.nix
new file mode 100644
index 000000000000..8fb0b63727a2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-asm/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  name = "cargo-asm-${version}";
+  version = "0.1.17";
+
+  src = fetchFromGitHub {
+    owner = "gnzlbg";
+    repo = "cargo-asm";
+    rev = "7f69a17e9c36dfe1f0d7080d7974c72ecc87a145";
+    sha256 = "0zn5p95hsmhvk2slc9hakrpvim6l4zbpgkks2x64ndwyfmzyykws";
+  };
+
+  cargoSha256 = "1k9mc29y4487ssf5whvr8xig7j4jh0rpcrhclp6siw8xamygijdm";
+
+  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+
+  # Test checks against machine code output, which fails with some
+  # LLVM/compiler versions.
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Display the assembly or LLVM-IR generated for Rust source code";
+    homepage = https://github.com/gnzlbg/cargo-asm;
+    license = licenses.mit;
+    maintainers = [ maintainers.danieldk ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-bloat/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-bloat/default.nix
new file mode 100644
index 000000000000..f611bb69046e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-bloat/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-bloat";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "RazrFalcon";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "169x90jrd2izj29xczja8pca984i6jgyx3ihfpd7cb1gw30rggbg";
+  };
+
+  cargoSha256 = "12cbc5bdzvcjh2d00d1ma91crbjwzas9rv8xxnnh850rjz8h684h";
+
+  meta = with stdenv.lib; {
+    description = "A tool and Cargo subcommand that helps you find out what takes most of the space in your executable";
+    homepage = https://github.com/RazrFalcon/cargo-bloat;
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ xrelkd ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-expand/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-expand/default.nix
new file mode 100644
index 000000000000..3e2128ff0850
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-expand/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-expand";
+  version = "0.4.12";
+
+  src = fetchFromGitHub {
+    owner = "dtolnay";
+    repo = pname;
+    rev = version;
+    sha256 = "0m57v7mh7wdl0rdbad7vkvcgy93p9gcb971wap8i5nzjvzmp4wlb";
+  };
+
+  cargoSha256 = "1wvqxj2w02d6zhyw3z5v0w4bfmbmldh63ygmvfxa3ngfb36gcacz";
+
+  meta = with stdenv.lib; {
+    description = "A utility and Cargo subcommand designed to let people expand macros in their Rust source code";
+    homepage = https://github.com/dtolnay/cargo-expand;
+    license = with licenses; [ mit asl20 ];
+    platforms = platforms.all;
+    maintainers = with maintainers; [ xrelkd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-fuzz/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-fuzz/default.nix
new file mode 100644
index 000000000000..f19aabae7a18
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-fuzz/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, fetchurl, runCommand, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  name = "cargo-fuzz-${version}";
+  version = "0.5.3"; # Note to self: on 0.5.4, remove the hand-added Cargo.lock
+
+  src =
+    let
+      source = fetchFromGitHub {
+        owner = "rust-fuzz";
+        repo = "cargo-fuzz";
+        rev = version;
+        sha256 = "1l452fnjw7i10nrd4y4rssi5d457vgjp6rhdr9cnq32bjhdkprrs";
+      };
+      cargo-lock = fetchurl {
+        url = "https://gist.githubusercontent.com/Ekleog/7d5b62d13b7207aafa4c37d1bbdf2de7/raw/c6027fc1c531947f4d6836a3c4cba1b3e24df24c/Cargo.lock";
+        sha256 = "0d7b6kxfbfvwksybzrihylamg2zv5fmsk9m6xshryhwipskzzvmd";
+      };
+    in
+    runCommand "cargo-fuzz-src" {} ''
+      cp -R ${source} $out
+      chmod +w $out
+      cp ${cargo-lock} $out/Cargo.lock
+    '';
+
+  cargoSha256 = "19kldw2sx0jd89q5q9cwmdcaan148s45fxlb2m0vdxwb69crb7yp";
+
+  meta = with stdenv.lib; {
+    description = "Command line helpers for fuzzing";
+    homepage = https://github.com/rust-fuzz/cargo-fuzz;
+    license = with licenses; [ mit asl20 ];
+    maintainers = [ maintainers.ekleog ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-make/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-make/default.nix
new file mode 100644
index 000000000000..ab625d7ea357
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-make/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, runCommand, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-make";
+  version = "0.19.4";
+
+  src =
+    let
+      source = fetchFromGitHub {
+        owner = "sagiegurari";
+        repo = pname;
+        rev = version;
+        sha256 = "019dn401p4bds144fbvqxbnn8vswcj0lxr8cvgpxb2y22640z60l";
+      };
+      cargo-lock = fetchurl {
+        url = "https://gist.githubusercontent.com/xrelkd/e4c9c7738b21f284d97cb7b1d181317d/raw/c5b9fde279a9f6d55d97e0ba4e0b4cd62e0ab2bf/cargo-make-Cargo.lock";
+        sha256 = "1d5md3m8hxwf3pwvx059fsk1b3vvqm17pxbbyiisn9v4psrsmld5";
+      };
+    in
+    runCommand "cargo-make-src" {} ''
+      cp -R ${source} $out
+      chmod +w $out
+      cp ${cargo-lock} $out/Cargo.lock
+    '';
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ Security ];
+
+  cargoSha256 = "0wf60ck0w3m9fa19dz99q84kw05sxlj2pp6bd8r1db3cfy8f8h8j";
+
+  # Some tests fail because they need network access.
+  # However, Travis ensures a proper build.
+  # See also:
+  #   https://travis-ci.org/sagiegurari/cargo-make
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A Rust task runner and build tool";
+    homepage = https://github.com/sagiegurari/cargo-make;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ xrelkd ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-sweep/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-sweep/default.nix
new file mode 100644
index 000000000000..a6068a96dc7e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-sweep/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-sweep";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "holmgr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1zp0x0jy5bjqbxawlwvpj6vb3y602mnh19p48rw70kdx6vripbvj";
+  };
+
+  cargoSha256 = "1j5i4gp5mspgb8l6a25lqlyr5c16pchbh3g3yn8h1qlxj8g2vgnh";
+
+  meta = with stdenv.lib; {
+    description = "A Cargo subcommand for cleaning up unused build files generated by Cargo";
+    homepage = https://github.com/holmgr/cargo-sweep;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ xrelkd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-xbuild/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-xbuild/default.nix
new file mode 100644
index 000000000000..5f74932a6920
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-xbuild/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-xbuild";
+  version = "0.5.11";
+
+  src = fetchFromGitHub {
+    owner = "rust-osdev";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "04vgb443bmrfklvzhjfidpi3pp2svbc3bwq674m9fn7sbdp6rnwm";
+  };
+
+  cargoSha256 = "1r9i79lymfwpbcx2lp509v435qpkl9bqly1ya369p41n5yprrcjv";
+
+  meta = with stdenv.lib; {
+    description = "Automatically cross-compiles the sysroot crates core, compiler_builtins, and alloc";
+    homepage = https://github.com/rust-osdev/cargo-xbuild;
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ xrelkd ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cbindgen/default.nix b/nixpkgs/pkgs/development/tools/rust/cbindgen/default.nix
new file mode 100644
index 000000000000..bce1e273cc41
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cbindgen/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  name = "rust-cbindgen-${version}";
+  version = "0.8.3";
+
+  src = fetchFromGitHub {
+    owner = "eqrion";
+    repo = "cbindgen";
+    rev = "v${version}";
+    sha256 = "08zlnk1k1nddjciccfdcplxqngsnz6ml3zxm57mijabzybry8zz1";
+  };
+
+  cargoSha256 = "1nig4891p7ii4z4f4j4d4pxx39f501g7yrsygqbpkr1nrgjip547";
+
+  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+
+  meta = with stdenv.lib; {
+    description = "A project for generating C bindings from Rust code";
+    homepage = https://github.com/eqrion/cbindgen;
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ jtojnar andir ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/pyo3-pack/default.nix b/nixpkgs/pkgs/development/tools/rust/pyo3-pack/default.nix
new file mode 100644
index 000000000000..91d25fe68071
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/pyo3-pack/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, rustPlatform, dbus, gmp, openssl, pkgconfig
+, darwin }:
+
+let
+  inherit (darwin.apple_sdk.frameworks) Security;
+in rustPlatform.buildRustPackage rec {
+  name = "pyo3-pack-${version}";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "PyO3";
+    repo = "pyo3-pack";
+    rev = "v${version}";
+    sha256 = "0577v8nqjbb7l7fqvac706bg9zrcp8fbh9ca1mkj44db12v02kgb";
+  };
+
+  cargoSha256 = "1prwgkgvg11cbpx086irrafg59mfvnykadagcp3qgyry6d82blsv";
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ gmp openssl ]
+    ++ stdenv.lib.optional stdenv.isDarwin Security
+    ++ stdenv.lib.optional stdenv.isLinux dbus;
+
+  # Requires network access, fails in sandbox.
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Build and publish crates with pyo3 bindings as python packages";
+    homepage = https://github.com/PyO3/pyo3-pack;
+    license = licenses.mit;
+    maintainers = [ maintainers.danieldk ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/racer/default.nix b/nixpkgs/pkgs/development/tools/rust/racer/default.nix
new file mode 100644
index 000000000000..fabd61018afe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/racer/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, rustPlatform, makeWrapper, substituteAll }:
+
+rustPlatform.buildRustPackage rec {
+  name = "racer-${version}";
+  version = "2.0.14";
+
+  src = fetchFromGitHub {
+    owner = "racer-rust";
+    repo = "racer";
+    rev = version;
+    sha256 = "0kgax74qa09axq7b175ph3psprgidwgsml83wm1qwdq16gpxiaif";
+  };
+
+  cargoSha256 = "119xfkglpfq26bz411rjj31i088vr0847p571cxph5v3dfxbgz4y";
+
+  buildInputs = [ makeWrapper ];
+
+  preCheck = ''
+    export RUST_SRC_PATH="${rustPlatform.rustcSrc}"
+  '';
+  patches = [
+    (substituteAll {
+      src = ./rust-src.patch;
+      inherit (rustPlatform) rustcSrc;
+    })
+    ./ignore-tests.patch
+  ];
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "A utility intended to provide Rust code completion for editors and IDEs";
+    homepage = https://github.com/racer-rust/racer;
+    license = licenses.mit;
+    maintainers = with maintainers; [ jagajaga globin ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/racer/ignore-tests.patch b/nixpkgs/pkgs/development/tools/rust/racer/ignore-tests.patch
new file mode 100644
index 000000000000..021217b4094e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/racer/ignore-tests.patch
@@ -0,0 +1,22 @@
+diff -Naur --strip-trailing-cr source.org/src/racer/nameres.rs source/src/racer/nameres.rs
+--- source.org/src/racer/nameres.rs	2017-11-15 20:37:38.571644733 +0000
++++ source/src/racer/nameres.rs	2017-11-15 20:23:20.521324031 +0000
+@@ -577,6 +577,7 @@
+     out.into_iter()
+ }
+ 
++#[ignore]
+ #[test]
+ fn test_do_file_search() {
+     let cache = core::FileCache::default();
+diff -Naur --strip-trailing-cr source.org/src/racer/util.rs source/src/racer/util.rs
+--- source.org/src/racer/util.rs	2017-11-15 19:37:55.095344120 +0000
++++ source/src/racer/util.rs	2017-11-15 20:22:53.746624158 +0000
+@@ -475,6 +475,7 @@
+ 
+ }
+ 
++#[ignore]
+ #[test]
+ fn test_get_rust_src_path_missing() {
+     use std::env;
diff --git a/nixpkgs/pkgs/development/tools/rust/racer/rust-src.patch b/nixpkgs/pkgs/development/tools/rust/racer/rust-src.patch
new file mode 100644
index 000000000000..2e794ac88874
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/racer/rust-src.patch
@@ -0,0 +1,10 @@
+--- source.org/src/racer/util.rs	1970-01-01 01:00:01.000000000 +0100
++++ source/src/racer/util.rs	2017-11-15 16:50:12.904216242 +0000
+@@ -384,6 +384,7 @@
+     debug!("Nope. Trying default paths: /usr/local/src/rust/src and /usr/src/rust/src");
+ 
+     let default_paths = [
++        "@rustcSrc@",
+         "/usr/local/src/rust/src",
+         "/usr/src/rust/src",
+     ];
diff --git a/nixpkgs/pkgs/development/tools/rust/racerd/default.nix b/nixpkgs/pkgs/development/tools/rust/racerd/default.nix
new file mode 100644
index 000000000000..ae282584aaff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/racerd/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, rustPlatform, makeWrapper }:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  name = "racerd-${version}";
+  version = "2017-09-15";
+  src = fetchFromGitHub {
+    owner = "jwilm";
+    repo = "racerd";
+    rev = "29cd4c6fd2a9301e49931c2e065b2e10c4b587e4";
+    sha256 = "0knz881mjhd8q2i8ydggaa7lfpiqy11wjmnv5p80n1d8zca6yb7z";
+  };
+
+  doCheck = false;
+
+  cargoSha256 = "0rxr8l5fhryxqf141sb2j4bjxdikj2hd7bnhbicgm35c9f6cir4m";
+
+  buildInputs = [ makeWrapper ];
+
+  RUST_SRC_PATH = rustPlatform.rustcSrc;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -p target/release/racerd $out/bin/
+    wrapProgram $out/bin/racerd --set RUST_SRC_PATH "$RUST_SRC_PATH"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "JSON/HTTP Server based on racer for adding Rust support to editors and IDEs";
+    homepage = https://github.com/jwilm/racerd;
+    license = licenses.asl20;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rainicorn/default.nix b/nixpkgs/pkgs/development/tools/rust/rainicorn/default.nix
new file mode 100644
index 000000000000..fd5bc6978310
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rainicorn/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  name = "rainicorn-${version}";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "RustDT";
+    repo = "Rainicorn";
+    rev = "0f8594079a7f302f4940cc4320f5e4f39f95cdc4";
+    sha256 = "07vh4g120sx569wkzclq91blkkd7q7z582pl8vz0li1l9ij8md01";
+  };
+
+  cargoSha256 = "07zsj12g4ff0cdb9pwz302vxvajr8g6nl3bpz4vdyi84csfvmahz";
+
+  meta = with stdenv.lib; {
+    broken = true;
+    description = "Rust IDEs.  parse-analysis";
+    homepage = https://github.com/RustDT/Rainicorn;
+    license = with licenses; [ mit asl20 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rls/default.nix b/nixpkgs/pkgs/development/tools/rust/rls/default.nix
new file mode 100644
index 000000000000..f52ab0d767a3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rls/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchFromGitHub, rustPlatform
+, openssh, openssl, pkgconfig, cmake, zlib, curl, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  name = "rls-${version}";
+  # with rust 1.x you can only build rls version 1.x.y
+  version = "1.34.0";
+
+  src = fetchFromGitHub {
+    owner = "rust-lang";
+    repo = "rls";
+    rev = "0d6f53e1a4adbaf7d83cdc0cb54720203fcb522e";
+    sha256 = "1aabs0kr87sp68n9893im5wz21dicip9ixir9a9l56nis4qxpm7i";
+  };
+
+  cargoSha256 = "16r9rmjhb0dbdgx9qf740nsckjazz4z663vaajw5z9i4qh0jsy18";
+
+  # a nightly compiler is required unless we use this cheat code.
+  RUSTC_BOOTSTRAP=1;
+
+  # clippy is hard to build with stable rust so we disable clippy lints
+  cargoBuildFlags = [ "--no-default-features" ];
+
+  nativeBuildInputs = [ pkgconfig cmake ];
+  buildInputs = [ openssh openssl curl zlib libiconv ];
+
+  doCheck = true;
+  # the default checkPhase has no way to pass --no-default-features
+  checkPhase = ''
+    runHook preCheck
+
+    # client tests are flaky
+    rm tests/client.rs
+
+    echo "Running cargo test"
+    cargo test --no-default-features
+    runHook postCheck
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Rust Language Server - provides information about Rust programs to IDEs and other tools";
+    homepage = https://github.com/rust-lang/rls/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ symphorien ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rustfmt/default.nix b/nixpkgs/pkgs/development/tools/rust/rustfmt/default.nix
new file mode 100644
index 000000000000..b37292b6afae
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustfmt/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, rustPlatform, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  name = "rustfmt-${version}";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "rust-lang";
+    repo = "rustfmt";
+    rev = "v${version}";
+    sha256 = "153pas7d5fchkmiw6mkbhn75lv3y69k85spzmm5i4lqnq7f0yqap";
+  };
+
+  cargoSha256 = "08x6vy5v2vgrk3gsw3qcvv52a7hifsgcsnsg1phlk1ikaff21y4z";
+
+  buildInputs = stdenv.lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
+
+  # As of 1.0.0 and rustc 1.30 rustfmt requires a nightly compiler
+  RUSTC_BOOTSTRAP = 1;
+
+  # we run tests in debug mode so tests look for a debug build of
+  # rustfmt. Anyway this adds nearly no compilation time.
+  preCheck = ''
+    cargo build
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A tool for formatting Rust code according to style guidelines";
+    homepage = https://github.com/rust-lang-nursery/rustfmt;
+    license = with licenses; [ mit asl20 ];
+    maintainers = [ maintainers.globin ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rustup/0001-dynamically-patchelf-binaries.patch b/nixpkgs/pkgs/development/tools/rust/rustup/0001-dynamically-patchelf-binaries.patch
new file mode 100644
index 000000000000..74da8d6102e7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustup/0001-dynamically-patchelf-binaries.patch
@@ -0,0 +1,41 @@
+diff --git a/src/dist/component/package.rs b/src/dist/component/package.rs
+index e0fdea28..38d9d0e4 100644
+--- a/src/dist/component/package.rs
++++ b/src/dist/component/package.rs
+@@ -104,10 +104,11 @@ impl Package for DirectoryPackage {
+             match &*part.0 {
+                 "file" => {
+                     if self.copy {
+-                        builder.copy_file(path.clone(), &src_path)?
++                        builder.copy_file(path.clone(), &src_path)?;
+                     } else {
+-                        builder.move_file(path.clone(), &src_path)?
++                        builder.move_file(path.clone(), &src_path)?;
+                     }
++                    nix_patchelf_if_needed(&target.prefix().path().join(path.clone()), &src_path)
+                 }
+                 "dir" => {
+                     if self.copy {
+@@ -132,6 +133,22 @@ impl Package for DirectoryPackage {
+     }
+ }
+
++fn nix_patchelf_if_needed(dest_path: &Path, src_path: &Path) {
++    let is_bin = if let Some(p) = src_path.parent() {
++        p.ends_with("bin")
++    } else {
++        false
++    };
++
++    if is_bin {
++        let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++            .arg("--set-interpreter")
++            .arg("@dynamicLinker@")
++            .arg(dest_path)
++            .output();
++    }
++}
++
+ // On Unix we need to set up the file permissions correctly so
+ // binaries are executable and directories readable. This shouldn't be
+ // necessary: the source files *should* have the right permissions,
diff --git a/nixpkgs/pkgs/development/tools/rust/rustup/default.nix b/nixpkgs/pkgs/development/tools/rust/rustup/default.nix
new file mode 100644
index 000000000000..0bf1c61c9598
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustup/default.nix
@@ -0,0 +1,71 @@
+{ stdenv, lib, runCommand, patchelf
+, fetchFromGitHub, rustPlatform
+, pkgconfig, curl, Security, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustup";
+  version = "1.18.3";
+
+  src = fetchFromGitHub {
+    owner = "rust-lang";
+    repo = "rustup.rs";
+    rev = version;
+    sha256 = "062l893i9czm1lm0x3arj3vfnjg3fg8q8xvq3y4adakmk6yrcc4x";
+  };
+
+  cargoSha256 = "1zwlr0zxc97m6xr28ryq5hkrvcns6qg68h7w09sga23xinm3fr11";
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [
+    curl
+  ] ++ stdenv.lib.optionals stdenv.isDarwin [ CoreServices Security ];
+
+  cargoBuildFlags = [ "--features no-self-update" ];
+
+  patches = lib.optionals stdenv.isLinux [
+    (runCommand "0001-dynamically-patchelf-binaries.patch" { CC=stdenv.cc; patchelf = patchelf; } ''
+       export dynamicLinker=$(cat $CC/nix-support/dynamic-linker)
+       substitute ${./0001-dynamically-patchelf-binaries.patch} $out \
+         --subst-var patchelf \
+         --subst-var dynamicLinker
+    '')
+  ];
+
+  doCheck = !stdenv.isAarch64 && !stdenv.isDarwin;
+
+  postInstall = ''
+    pushd $out/bin
+    mv rustup-init rustup
+    binlinks=(
+      cargo rustc rustdoc rust-gdb rust-lldb rls rustfmt cargo-fmt
+      cargo-clippy clippy-driver cargo-miri
+    )
+    for link in ''${binlinks[@]}; do
+      ln -s rustup $link
+    done
+    popd
+
+    # tries to create .rustup
+    export HOME=$(mktemp -d)
+    mkdir -p "$out/share/"{bash-completion/completions,fish/vendor_completions.d,zsh/site-functions}
+
+    # generate completion scripts for rustup
+    $out/bin/rustup completions bash rustup > "$out/share/bash-completion/completions/rustup"
+    $out/bin/rustup completions fish rustup > "$out/share/fish/vendor_completions.d/rustup.fish"
+    $out/bin/rustup completions zsh rustup >  "$out/share/zsh/site-functions/_rustup"
+
+    # generate completion scripts for cargo
+    # Note: fish completion script is not supported.
+    $out/bin/rustup completions bash cargo > "$out/share/bash-completion/completions/cargo"
+    $out/bin/rustup completions zsh cargo >  "$out/share/zsh/site-functions/_cargo"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "The Rust toolchain installer";
+    homepage = https://www.rustup.rs/;
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.mic92 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/svd2rust/cargo-lock.patch b/nixpkgs/pkgs/development/tools/rust/svd2rust/cargo-lock.patch
new file mode 100644
index 000000000000..5cd1f685fc11
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/svd2rust/cargo-lock.patch
@@ -0,0 +1,283 @@
+diff --git a/Cargo.lock b/Cargo.lock
+new file mode 100644
+--- /dev/null
++++ b/Cargo.lock
+@@ -0,0 +1,278 @@
++[[package]]
++name = "ansi_term"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "atty"
++version = "0.2.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
++ "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "autocfg"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "backtrace"
++version = "0.3.13"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rustc-demangle 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "backtrace-sys"
++version = "0.1.28"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "bitflags"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "bitflags"
++version = "1.0.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "cast"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "cc"
++version = "1.0.28"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "cfg-if"
++version = "0.1.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "clap"
++version = "2.32.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "either"
++version = "1.5.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "error-chain"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "backtrace 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "inflections"
++version = "1.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "libc"
++version = "0.2.46"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "quote"
++version = "0.3.15"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "redox_syscall"
++version = "0.1.50"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "redox_termios"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rustc-demangle"
++version = "0.1.13"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "strsim"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "svd-parser"
++version = "0.6.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "xmltree 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "svd2rust"
++version = "0.14.0"
++dependencies = [
++ "cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "inflections 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
++ "svd-parser 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "syn"
++version = "0.11.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
++ "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "synom"
++version = "0.11.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "termion"
++version = "1.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
++ "redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)",
++ "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "textwrap"
++version = "0.10.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "unicode-width"
++version = "0.1.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "unicode-xid"
++version = "0.0.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "vec_map"
++version = "0.8.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi"
++version = "0.3.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "winapi-i686-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi-x86_64-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "xml-rs"
++version = "0.3.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "xmltree"
++version = "0.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "xml-rs 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[metadata]
++"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
++"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652"
++"checksum autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e5f34df7a019573fb8bdc7e24a2bfebe51a2a1d6bfdbaeccedb3c41fc574727"
++"checksum backtrace 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "b5b493b66e03090ebc4343eb02f94ff944e0cbc9ac6571491d170ba026741eb5"
++"checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6"
++"checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d"
++"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
++"checksum cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "926013f2860c46252efceabb19f4a6b308197505082c609025aa6706c011d427"
++"checksum cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4a8b715cb4597106ea87c7c84b2f1d452c7492033765df7f32651e66fcf749"
++"checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4"
++"checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e"
++"checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0"
++"checksum error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff511d5dc435d703f4971bc399647c9bc38e20cb41452e3b9feb4765419ed3f3"
++"checksum inflections 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a"
++"checksum libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)" = "023a4cd09b2ff695f9734c1934145a315594b7986398496841c7031a5a1bbdbd"
++"checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"
++"checksum redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)" = "52ee9a534dc1301776eff45b4fa92d2c39b1d8c3d3357e6eb593e0d795506fc2"
++"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
++"checksum rustc-demangle 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "adacaae16d02b6ec37fdc7acfcddf365978de76d1983d3ee22afc260e1ca9619"
++"checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550"
++"checksum svd-parser 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f22b4579485b26262f36086d6b74903befc043a57f8377dfcf05bcf5335cb251"
++"checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
++"checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"
++"checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"
++"checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6"
++"checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526"
++"checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"
++"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
++"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
++"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
++"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
++"checksum xml-rs 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7ec6c39eaa68382c8e31e35239402c0a9489d4141a8ceb0c716099a0b515b562"
++"checksum xmltree 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "472a9d37c7c53ab2391161df5b89b1f3bf76dab6ab150d7941ecbdd832282082"
diff --git a/nixpkgs/pkgs/development/tools/rust/svd2rust/default.nix b/nixpkgs/pkgs/development/tools/rust/svd2rust/default.nix
new file mode 100644
index 000000000000..4e7032025c3d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/svd2rust/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  name = "svd2rust-${version}";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "rust-embedded";
+    repo = "svd2rust";
+    rev = "v${version}";
+    sha256 = "1a0ldmjkhyv5c52gcq8p8avkj0cgj1b367w6hm85bxdf5j4y8rra";
+  };
+  cargoPatches = [ ./cargo-lock.patch ];
+
+  cargoSha256 = "03rfb8swxbcc9qm4mhxz5nm4b1gw7g7389wrdc91abxl4mw733ac";
+
+  # doc tests fail due to missing dependency
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Generate Rust register maps (`struct`s) from SVD files";
+    homepage = https://github.com/rust-embedded/svd2rust;
+    license = with licenses; [ mit asl20 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sass/Gemfile b/nixpkgs/pkgs/development/tools/sass/Gemfile
new file mode 100644
index 000000000000..e46ea120f725
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sass/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'sass'
diff --git a/nixpkgs/pkgs/development/tools/sass/Gemfile.lock b/nixpkgs/pkgs/development/tools/sass/Gemfile.lock
new file mode 100644
index 000000000000..1b99dd3a1361
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sass/Gemfile.lock
@@ -0,0 +1,21 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    ffi (1.10.0)
+    rb-fsevent (0.10.3)
+    rb-inotify (0.10.0)
+      ffi (~> 1.0)
+    sass (3.7.4)
+      sass-listen (~> 4.0.0)
+    sass-listen (4.0.0)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  sass
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/development/tools/sass/default.nix b/nixpkgs/pkgs/development/tools/sass/default.nix
new file mode 100644
index 000000000000..c204ba8cd406
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sass/default.nix
@@ -0,0 +1,15 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "sass";
+  gemdir = ./.;
+  exes = [ "sass" "sass-convert" "scss" ];
+
+  meta = with lib; {
+    description = "Tools and Ruby libraries for the CSS3 extension languages: Sass and SCSS";
+    homepage    = https://sass-lang.com;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ romildo manveru ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sass/gemset.nix b/nixpkgs/pkgs/development/tools/sass/gemset.nix
new file mode 100644
index 000000000000..f4fdc899abf8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sass/gemset.nix
@@ -0,0 +1,55 @@
+{
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8";
+      type = "gem";
+    };
+    version = "0.10.3";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fs7hxm9g6ywv2yih83b879klhc4fs8i0p9166z795qmd77dk0a4";
+      type = "gem";
+    };
+    version = "0.10.0";
+  };
+  sass = {
+    dependencies = ["sass-listen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p95lhs0jza5l7hqci1isflxakz83xkj97lkvxl919is0lwhv2w0";
+      type = "gem";
+    };
+    version = "3.7.4";
+  };
+  sass-listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/sassc/default.nix b/nixpkgs/pkgs/development/tools/sassc/default.nix
new file mode 100644
index 000000000000..db4d9dcd1aca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sassc/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, libsass }:
+
+stdenv.mkDerivation rec {
+  pname = "sassc";
+  version = "3.6.0";
+
+  src = fetchFromGitHub {
+    owner = "sass";
+    repo = pname;
+    rev = version;
+    sha256 = "14cbprnz70bv9qcs1aglvj9kkhf22as5xxz7gkv2ni8yjy8rp8q2";
+  };
+
+  patchPhase = ''
+    export SASSC_VERSION=${version}
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ libsass ];
+
+  meta = with stdenv.lib; {
+    description = "A front-end for libsass";
+    homepage = https://github.com/sass/sassc/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ codyopel pjones ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sauce-connect/default.nix b/nixpkgs/pkgs/development/tools/sauce-connect/default.nix
new file mode 100644
index 000000000000..50e2bd8dad84
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sauce-connect/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, lib, fetchurl, zlib, unzip }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  name = "sauce-connect-${version}";
+  version = "4.5.1";
+
+  src = fetchurl (
+    if stdenv.hostPlatform.system == "x86_64-linux" then {
+      url = "https://saucelabs.com/downloads/sc-${version}-linux.tar.gz";
+      sha256 = "0lpfvlax7k8r65bh01i3kzrlmx0vnm9vhhir8k1gp2f4rv6z4lyx";
+    } else if stdenv.hostPlatform.system == "i686-linux" then {
+      url = "https://saucelabs.com/downloads/sc-${version}-linux32.tar.gz";
+      sha256 = "1h9n1mzmrmlrbd0921b0sgg7m8z0w71pdb5sif6h1b9f97cp353x";
+    } else {
+      url = "https://saucelabs.com/downloads/sc-${version}-osx.zip";
+      sha256 = "0rkyd402f1n92ad3w1460j1a4m46b29nandv4z6wvg2pasyyf2lj";
+    }
+  );
+
+  buildInputs = [ unzip ];
+
+  patchPhase = stdenv.lib.optionalString stdenv.isLinux ''
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "$out/lib:${makeLibraryPath [zlib]}" \
+      bin/sc
+  '';
+
+  installPhase = ''
+    mkdir -p $out
+    cp -r * $out
+  '';
+
+  dontStrip = true;
+
+  meta = {
+    description = "A secure tunneling app for executing tests securely when testing behind firewalls";
+    license = licenses.unfree;
+    homepage = https://docs.saucelabs.com/reference/sauce-connect/;
+    maintainers = with maintainers; [offline];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/scalafix/default.nix b/nixpkgs/pkgs/development/tools/scalafix/default.nix
new file mode 100644
index 000000000000..bd8a013fe2d0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scalafix/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, jdk, jre, coursier, makeWrapper }:
+
+let
+  baseName = "scalafix";
+  version = "0.9.0";
+  deps = stdenv.mkDerivation {
+    name = "${baseName}-deps-${version}";
+    buildCommand = ''
+      export COURSIER_CACHE=$(pwd)
+      ${coursier}/bin/coursier fetch ch.epfl.scala:scalafix-cli_2.12.7:${version} > deps
+      mkdir -p $out/share/java
+      cp $(< deps) $out/share/java/
+    '';
+    outputHashMode = "recursive";
+    outputHashAlgo = "sha256";
+    outputHash     = "19j260prx7k010nxyvc1m9jj1ncxr73m2cym7if39360v5dc05c0";
+  };
+in
+stdenv.mkDerivation rec {
+  name = "${baseName}-${version}";
+
+  buildInputs = [ jdk makeWrapper deps ];
+
+  doCheck = true;
+
+  phases = [ "installPhase" "checkPhase" ];
+
+  installPhase = ''
+    makeWrapper ${jre}/bin/java $out/bin/${baseName} \
+      --add-flags "-cp $CLASSPATH scalafix.cli.Cli"
+  '';
+
+  checkPhase = ''
+    $out/bin/${baseName} --version | grep -q "${version}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Refactoring and linting tool for Scala";
+    homepage = https://scalacenter.github.io/scalafix/;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.tomahna ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/scalafmt/default.nix b/nixpkgs/pkgs/development/tools/scalafmt/default.nix
new file mode 100644
index 000000000000..a9f8a4cd4b34
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scalafmt/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, jdk, jre, coursier, makeWrapper }:
+
+let
+  baseName = "scalafmt";
+  version = "2.0.0-RC7";
+  deps = stdenv.mkDerivation {
+    name = "${baseName}-deps-${version}";
+    buildCommand = ''
+      export COURSIER_CACHE=$(pwd)
+      ${coursier}/bin/coursier fetch org.scalameta:scalafmt-cli_2.12:${version} > deps
+      mkdir -p $out/share/java
+      cp $(< deps) $out/share/java/
+    '';
+    outputHashMode = "recursive";
+    outputHashAlgo = "sha256";
+    outputHash     = "0scz3pp63z6xfj69kvsfr8l3ll9rq95j4xlhlyrzg1vfl1gf41ig";
+  };
+in
+stdenv.mkDerivation rec {
+  name = "${baseName}-${version}";
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jdk deps ];
+
+  doCheck = true;
+
+  phases = [ "installPhase" "checkPhase" ];
+
+  installPhase = ''
+    makeWrapper ${jre}/bin/java $out/bin/${baseName} \
+      --add-flags "-cp $CLASSPATH org.scalafmt.cli.Cli"
+  '';
+
+  checkPhase = ''
+    $out/bin/${baseName} --version | grep -q "${version}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Opinionated code formatter for Scala";
+    homepage = http://scalameta.org/scalafmt;
+    license = licenses.asl20;
+    maintainers = [ maintainers.markus1189 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/scry/default.nix b/nixpkgs/pkgs/development/tools/scry/default.nix
new file mode 100644
index 000000000000..03e7c64f5496
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scry/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchFromGitHub, crystal, shards, which }:
+
+stdenv.mkDerivation rec {
+  pname = "scry";
+  # 0.7.1 doesn't work with crystal > 0.25
+  version = "0.7.1.20180919";
+
+  src = fetchFromGitHub {
+    owner  = "crystal-lang-tools";
+    repo   = "scry";
+    rev    = "543c1c3f764298f9fff192ca884d10f72338607d";
+    sha256 = "1yq7jap3y5pr2yqc6fn6bxshzwv7dz3w97incq7wpcvi7ibb4lcn";
+  };
+
+  nativeBuildInputs = [ crystal shards which ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    shards build --release
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin bin/scry
+
+    runHook postInstall
+  '';
+
+  # https://github.com/crystal-lang-tools/scry/issues/138
+  doCheck = false;
+
+  checkPhase = ''
+    runHook preCheck
+
+    crystal spec
+
+    runHook postCheck
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Code analysis server for the Crystal programming language";
+    homepage = https://github.com/crystal-lang-tools/scry;
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/scss-lint/Gemfile b/nixpkgs/pkgs/development/tools/scss-lint/Gemfile
new file mode 100644
index 000000000000..05eac2332f5b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scss-lint/Gemfile
@@ -0,0 +1,2 @@
+source "https://rubygems.org"
+gem "scss_lint"
diff --git a/nixpkgs/pkgs/development/tools/scss-lint/Gemfile.lock b/nixpkgs/pkgs/development/tools/scss-lint/Gemfile.lock
new file mode 100644
index 000000000000..546dfabe4d76
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scss-lint/Gemfile.lock
@@ -0,0 +1,25 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    ffi (1.9.25)
+    rake (12.3.1)
+    rb-fsevent (0.10.3)
+    rb-inotify (0.9.10)
+      ffi (>= 0.5.0, < 2)
+    sass (3.7.2)
+      sass-listen (~> 4.0.0)
+    sass-listen (4.0.0)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+    scss_lint (0.57.1)
+      rake (>= 0.9, < 13)
+      sass (~> 3.5, >= 3.5.5)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  scss_lint
+
+BUNDLED WITH
+   1.16.3
diff --git a/nixpkgs/pkgs/development/tools/scss-lint/default.nix b/nixpkgs/pkgs/development/tools/scss-lint/default.nix
new file mode 100644
index 000000000000..d1d0dbababa2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scss-lint/default.nix
@@ -0,0 +1,15 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "scss_lint";
+  gemdir = ./.;
+  exes = [ "scss-lint" ];
+
+  meta = with lib; {
+    description = "A tool to help keep your SCSS files clean and readable";
+    homepage    = https://github.com/brigade/scss-lint;
+    license     = licenses.mit;
+    maintainers = [ maintainers.lovek323 ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/scss-lint/gemset.nix b/nixpkgs/pkgs/development/tools/scss-lint/gemset.nix
new file mode 100644
index 000000000000..46747f049396
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scss-lint/gemset.nix
@@ -0,0 +1,62 @@
+{
+  ffi = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jpm2dis1j7zvvy3lg7axz9jml316zrn7s0j59vyq3qr127z0m7q";
+      type = "gem";
+    };
+    version = "1.9.25";
+  };
+  rake = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1idi53jay34ba9j68c3mfr9wwkg3cd9qh0fn9cg42hv72c6q8dyg";
+      type = "gem";
+    };
+    version = "12.3.1";
+  };
+  rb-fsevent = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8";
+      type = "gem";
+    };
+    version = "0.10.3";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71";
+      type = "gem";
+    };
+    version = "0.9.10";
+  };
+  sass = {
+    dependencies = ["sass-listen"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1phs6hnd8b95m7n5wbh5bsclmwaajd1sqlgw9fmj72bfqldbmcqa";
+      type = "gem";
+    };
+    version = "3.7.2";
+  };
+  sass-listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  scss_lint = {
+    dependencies = ["rake" "sass"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dv4ff1lqbgqdx99nwg059c983dhw67kvvjd21f6vf62cjx09lpn";
+      type = "gem";
+    };
+    version = "0.57.1";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/selenium/chromedriver/default.nix b/nixpkgs/pkgs/development/tools/selenium/chromedriver/default.nix
new file mode 100644
index 000000000000..50aad7a013a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/selenium/chromedriver/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchurl, cairo, fontconfig, freetype, gdk_pixbuf, glib
+, glibc, gtk2, libX11, makeWrapper, nspr, nss, pango, unzip, gconf
+, libXi, libXrender, libXext
+}:
+let
+  allSpecs = {
+    "x86_64-linux" = {
+      system = "linux64";
+      sha256 = "0iq015nyhdn1z50aj6k2d38cf1vbp59x7qi48aikb4z1h3h1j6a6";
+    };
+
+    "x86_64-darwin" = {
+      system = "mac64";
+      sha256 = "0bf59g7vx7qbz9lx6wgk82zjbf8isag1n3lbi0gw4b2bgv8md8ia";
+    };
+  };
+
+  spec = allSpecs."${stdenv.hostPlatform.system}"
+    or (throw "missing chromedriver binary for ${stdenv.hostPlatform.system}");
+
+  libs = stdenv.lib.makeLibraryPath [
+    stdenv.cc.cc.lib
+    cairo fontconfig freetype
+    gdk_pixbuf glib gtk2 gconf
+    libX11 nspr nss pango libXrender
+    gconf libXext libXi
+  ];
+in
+stdenv.mkDerivation rec {
+  name = "chromedriver-${version}";
+  version = "2.46";
+
+  src = fetchurl {
+    url = "https://chromedriver.storage.googleapis.com/${version}/chromedriver_${spec.system}.zip";
+    sha256 = spec.sha256;
+  };
+
+  nativeBuildInputs = [ unzip makeWrapper ];
+
+  unpackPhase = "unzip $src";
+
+  installPhase = ''
+    install -m755 -D chromedriver $out/bin/chromedriver
+  '' + stdenv.lib.optionalString (!stdenv.isDarwin) ''
+    patchelf --set-interpreter ${glibc.out}/lib/ld-linux-x86-64.so.2 $out/bin/chromedriver
+    wrapProgram "$out/bin/chromedriver" --prefix LD_LIBRARY_PATH : "${libs}:\$LD_LIBRARY_PATH"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://sites.google.com/a/chromium.org/chromedriver;
+    description = "A WebDriver server for running Selenium tests on Chrome";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.goibhniu ];
+    platforms = attrNames allSpecs;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/selenium/htmlunit-driver/default.nix b/nixpkgs/pkgs/development/tools/selenium/htmlunit-driver/default.nix
new file mode 100644
index 000000000000..03c3c23c7559
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/selenium/htmlunit-driver/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  name = "htmlunit-driver-standalone-${version}";
+  version = "2.27";
+
+  src = fetchurl {
+    url = "https://github.com/SeleniumHQ/htmlunit-driver/releases/download/${version}/htmlunit-driver-${version}-with-dependencies.jar";
+    sha256 = "1sd3cwpamcbq9pv0mvcm8x6minqrlb4i0r12q3jg91girqswm2dp";
+  };
+
+  unpackPhase = "true";
+
+  installPhase = "install -D $src $out/share/lib/${name}/${name}.jar";
+
+  meta = {
+    homepage = https://github.com/SeleniumHQ/htmlunit-driver;
+    description = "A WebDriver server for running Selenium tests on the HtmlUnit headless browser";
+    maintainers = with maintainers; [ coconnor offline ];
+    platforms = platforms.all;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/selenium/selendroid/default.nix b/nixpkgs/pkgs/development/tools/selenium/selendroid/default.nix
new file mode 100644
index 000000000000..dcc3893ee0de
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/selenium/selendroid/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchurl, makeWrapper, jdk, selenium-server-standalone }:
+
+with stdenv.lib;
+let
+    name = "selendroid-standalone-${version}";
+    pluginName = "selendroid-grid-plugin-${version}";
+    version = "0.17.0";
+    srcs = {
+      jar = fetchurl {
+        url = "https://github.com/selendroid/selendroid/releases/download/${version}/${name}-with-dependencies.jar";
+        sha256 = "10lxdsgp711pv8r6dk2aagnbvnn1b25zfqjvz7plc73zqhx1dxvw";
+      };
+      gridPlugin = fetchurl {
+        url = "https://search.maven.org/remotecontent?filepath=io/selendroid/selendroid-grid-plugin/${version}/${pluginName}.jar";
+        sha256 = "1x6cjmp2hpghbgbf8vss0qaj2n4sfl29wp3bc4k1s3hnnpccvz70";
+      };
+    };
+in
+stdenv.mkDerivation rec {
+
+  inherit name;
+  inherit version;
+
+  unpackPhase = "true";
+
+  buildInputs = [ jdk makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/share/lib/selendroid
+    cp ${srcs.jar} $out/share/lib/selendroid/${name}.jar
+    cp ${srcs.gridPlugin} $out/share/lib/selendroid/${pluginName}.jar
+
+    makeWrapper ${jdk}/bin/java $out/bin/selendroid \
+      --add-flags "-jar $out/share/lib/selendroid/${name}.jar"
+    makeWrapper ${jdk}/bin/java $out/bin/selendroid-selenium \
+      --add-flags "-Dfile.encoding=UTF-8" \
+      --add-flags "-cp ${selenium-server-standalone}/share/lib/${selenium-server-standalone.name}/${selenium-server-standalone.name}.jar:$out/share/lib/selendroid/${pluginName}.jar" \
+      --add-flags "org.openqa.grid.selenium.GridLauncherV3" \
+      --add-flags "-role hub" \
+      --add-flags "-capabilityMatcher io.selendroid.grid.SelendroidCapabilityMatcher"
+  '';
+
+  meta = {
+    homepage = http://selendroid.io/;
+    description = "Test automation for native or hybrid Android apps and the mobile web";
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.all;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/selenium/server/default.nix b/nixpkgs/pkgs/development/tools/selenium/server/default.nix
new file mode 100644
index 000000000000..48bfbdd689b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/selenium/server/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, makeWrapper, jre
+, htmlunit-driver, chromedriver, chromeSupport ? true }:
+
+with stdenv.lib;
+
+let
+  minorVersion = "3.6";
+  patchVersion = "0";
+
+in stdenv.mkDerivation rec {
+  name = "selenium-server-standalone-${version}";
+  version = "${minorVersion}.${patchVersion}";
+
+  src = fetchurl {
+    url = "http://selenium-release.storage.googleapis.com/${minorVersion}/selenium-server-standalone-${version}.jar";
+    sha256 = "11v340nm8vzqc2bkmbjfm9a7j4dj0bi9bfk8wdpfan0fb8prf772";
+  };
+
+  unpackPhase = "true";
+
+  buildInputs = [ jre makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/share/lib/${name}
+    cp $src $out/share/lib/${name}/${name}.jar
+    makeWrapper ${jre}/bin/java $out/bin/selenium-server \
+      --add-flags "-cp $out/share/lib/${name}/${name}.jar:${htmlunit-driver}/share/lib/${htmlunit-driver.name}/${htmlunit-driver.name}.jar" \
+      --add-flags ${optionalString chromeSupport "-Dwebdriver.chrome.driver=${chromedriver}/bin/chromedriver"} \
+      --add-flags "org.openqa.grid.selenium.GridLauncherV3"
+  '';
+
+  meta = {
+    homepage = http://www.seleniumhq.org/;
+    description = "Selenium Server for remote WebDriver";
+    maintainers = with maintainers; [ coconnor offline ];
+    platforms = platforms.all;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/setupcfg2nix/default.nix b/nixpkgs/pkgs/development/tools/setupcfg2nix/default.nix
new file mode 100644
index 000000000000..5d1f015e8052
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/setupcfg2nix/default.nix
@@ -0,0 +1,19 @@
+{ buildSetupcfg, fetchFromGitHub, lib }:
+
+buildSetupcfg rec {
+  info = import ./info.nix;
+  src = fetchFromGitHub {
+    owner = "target";
+    repo = "setupcfg2nix";
+    rev = info.version;
+    sha256 = "1zn9njpzwhwikrirgjlyz6ys3xr8gq61ry8blmnpscqvhsdhxcs6";
+  };
+  application = true;
+  meta = {
+    description = "Generate nix expressions from setup.cfg for a python package.";
+    homepage = https://github.com/target/setupcfg2nix;
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
+    maintainers = [ lib.maintainers.shlevy ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/setupcfg2nix/info.nix b/nixpkgs/pkgs/development/tools/setupcfg2nix/info.nix
new file mode 100644
index 000000000000..b0d5873ed63c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/setupcfg2nix/info.nix
@@ -0,0 +1,7 @@
+{
+  pname = ''setupcfg2nix'';
+  version = ''1.1.0'';
+  install_requires = [
+    ''setuptools''
+  ];
+}
diff --git a/nixpkgs/pkgs/development/tools/sigrok-cli/default.nix b/nixpkgs/pkgs/development/tools/sigrok-cli/default.nix
new file mode 100644
index 000000000000..f5b1399df091
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sigrok-cli/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, pkgconfig, glib, libsigrok, libsigrokdecode }:
+
+stdenv.mkDerivation rec {
+  name = "sigrok-cli-0.7.1";
+
+  src = fetchurl {
+    url = "https://sigrok.org/download/source/sigrok-cli/${name}.tar.gz";
+    sha256 = "15vpn1psriadcbl6v9swwgws7dva85ld03yv6g1mgm27kx11697m";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ glib libsigrok libsigrokdecode ];
+
+  meta = with stdenv.lib; {
+    description = "Command-line frontend for the sigrok signal analysis software suite";
+    homepage = https://sigrok.org/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/simavr/default.nix b/nixpkgs/pkgs/development/tools/simavr/default.nix
new file mode 100644
index 000000000000..f2bbbef71896
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/simavr/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, libelf, which, git, pkgconfig, freeglut
+, avrbinutils, avrgcc, avrlibc
+, libGLU_combined
+, GLUT }:
+
+stdenv.mkDerivation rec {
+  name = "simavr-${version}";
+  version = "1.5";
+
+  src = fetchFromGitHub {
+    owner = "buserror";
+    repo = "simavr";
+    rev = "e0d4de41a72520491a4076b3ed87beb997a395c0";
+    sha256 = "0b2lh6l2niv80dmbm9xkamvnivkbmqw6v97sy29afalrwfxylxla";
+  };
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+    "AVR_ROOT=${avrlibc}/avr"
+    "SIMAVR_VERSION=${version}"
+    "AVR=avr-"
+  ];
+
+  nativeBuildInputs = [ which pkgconfig avrgcc ];
+  buildInputs = [ libelf freeglut libGLU_combined ]
+    ++ stdenv.lib.optional stdenv.isDarwin GLUT;
+
+  # Hack to avoid TMPDIR in RPATHs.
+  preFixup = ''rm -rf "$(pwd)" && mkdir "$(pwd)" '';
+
+  doCheck = true;
+  checkTarget = "-C tests run_tests";
+
+  meta = with stdenv.lib; {
+    description = "A lean and mean Atmel AVR simulator";
+    homepage    = https://github.com/buserror/simavr;
+    license     = licenses.gpl3;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ goodrone ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/skaffold/default.nix b/nixpkgs/pkgs/development/tools/skaffold/default.nix
new file mode 100644
index 000000000000..d5a6f3915f2e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/skaffold/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "skaffold-${version}";
+  version = "0.30.0";
+  # rev is the 0.30.0 commit, mainly for skaffold version command output
+  rev = "fe31429012110e6fd70f97971288bd266ba95bed";
+
+  goPackagePath = "github.com/GoogleContainerTools/skaffold";
+  subPackages = ["cmd/skaffold"];
+
+  buildFlagsArray = let t = "${goPackagePath}/pkg/skaffold"; in  ''
+    -ldflags=
+      -X ${t}/version.version=v${version}
+      -X ${t}/version.gitCommit=${rev}
+      -X ${t}/version.buildDate=unknown
+  '';
+
+  src = fetchFromGitHub {
+    owner = "GoogleContainerTools";
+    repo = "skaffold";
+    rev = "v${version}";
+    sha256 = "1vh7vlz14gfjpxf2wy1pybw5x55mw34j6isyy5zl0rsbs9mf6ci1";
+  };
+
+  meta = {
+    description = "Easy and Repeatable Kubernetes Development";
+    homepage = https://github.com/GoogleContainerTools/skaffold;
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ vdemeester ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/skopeo/default.nix b/nixpkgs/pkgs/development/tools/skopeo/default.nix
new file mode 100644
index 000000000000..6dfda2bbfe6c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/skopeo/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, lib, buildGoPackage, fetchFromGitHub, runCommand
+, gpgme, libgpgerror, lvm2, btrfs-progs, pkgconfig, ostree, libselinux
+, go-md2man }:
+
+with stdenv.lib;
+
+let
+  version = "0.1.36";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "containers";
+    repo = "skopeo";
+    sha256 = "0q0d6dzx9q57fim0drxs7l45500f3228wq50vzj232x5qx5h00sj";
+  };
+
+  defaultPolicyFile = runCommand "skopeo-default-policy.json" {} "cp ${src}/default-policy.json $out";
+
+  goPackagePath = "github.com/containers/skopeo";
+
+in
+buildGoPackage rec {
+  name = "skopeo-${version}";
+  inherit src goPackagePath;
+
+  outputs = [ "bin" "man" "out" ];
+
+  excludedPackages = "integration";
+
+  nativeBuildInputs = [ pkgconfig (lib.getBin go-md2man) ];
+  buildInputs = [ gpgme ] ++ lib.optionals stdenv.isLinux [ libgpgerror lvm2 btrfs-progs ostree libselinux ];
+
+  buildFlagsArray = ''
+    -ldflags=
+    -X github.com/containers/skopeo/vendor/github.com/containers/image/signature.systemDefaultPolicyPath=${defaultPolicyFile}
+    -X github.com/containers/skopeo/vendor/github.com/containers/image/internal/tmpdir.unixTempDirForBigFiles=/tmp
+  '';
+
+  preBuild = ''
+    export CGO_CFLAGS="$CFLAGS"
+    export CGO_LDFLAGS="$LDFLAGS"
+  '';
+
+  postBuild = ''
+    # depends on buildGoPackage not changing …
+    pushd ./go/src/${goPackagePath}
+    make install-docs MANINSTALLDIR="$man/share/man"
+    popd
+  '';
+
+  meta = {
+    description = "A command line utility for various operations on container images and image repositories";
+    homepage = https://github.com/projectatomic/skopeo;
+    maintainers = with stdenv.lib.maintainers; [ vdemeester lewo ];
+    license = stdenv.lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/slimerjs/default.nix b/nixpkgs/pkgs/development/tools/slimerjs/default.nix
new file mode 100644
index 000000000000..534c69200e02
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/slimerjs/default.nix
@@ -0,0 +1,50 @@
+{stdenv, fetchFromGitHub, zip, unzip, firefox, bash}:
+let
+  s = # Generated upstream information
+  rec {
+    baseName="slimerjs";
+    version="1.0.0";
+    name="${baseName}-${version}";
+    owner = "laurentj";
+    repo = "${baseName}";
+    sha256="1w4sfrv520isbs7r1rlzl5y3idrpad7znw9fc92yz40jlwz7sxs4";
+    rev = "${version}";
+  };
+  buildInputs = [
+    unzip zip
+  ];
+in
+stdenv.mkDerivation {
+  inherit (s) name version;
+  inherit buildInputs;
+  #src = fetchurl {
+  #  inherit (s) url sha256;
+  #};
+  #src = fetchgit {
+  #  inherit (s) url sha256 rev;
+  #};
+  src = fetchFromGitHub {
+    inherit (s) owner repo rev sha256;
+  };
+  preConfigure = ''
+    test -d src && cd src
+    test -f omni.ja || zip omni.ja -r */
+  '';
+  installPhase = ''
+    mkdir -p "$out"/{bin,share/doc/slimerjs,lib/slimerjs}
+    cp LICENSE README* "$out/share/doc/slimerjs"
+    cp -r * "$out/lib/slimerjs"
+    echo '#!${bash}/bin/bash' >>  "$out/bin/slimerjs"
+    echo 'export SLIMERJSLAUNCHER=${firefox}/bin/firefox' >>  "$out/bin/slimerjs"
+    echo "'$out/lib/slimerjs/slimerjs' \"\$@\"" >> "$out/bin/slimerjs"
+    chmod a+x "$out/bin/slimerjs"
+    sed -e 's@MaxVersion=[3456][0-9][.]@MaxVersion=99.@' -i "$out/lib/slimerjs/application.ini"
+  '';
+  meta = {
+    inherit (s) version;
+    description = ''Gecko-based programmatically-driven browser'';
+    license = stdenv.lib.licenses.mpl20 ;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/slimerjs/default.upstream b/nixpkgs/pkgs/development/tools/slimerjs/default.upstream
new file mode 100644
index 000000000000..f2d6b89e51b4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/slimerjs/default.upstream
@@ -0,0 +1,2 @@
+url http://slimerjs.org/download.html
+version_link '/slimerjs-[0-9.]+[.]zip$'
diff --git a/nixpkgs/pkgs/development/tools/slimerjs/default.upstream.git b/nixpkgs/pkgs/development/tools/slimerjs/default.upstream.git
new file mode 100644
index 000000000000..3066d5de8293
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/slimerjs/default.upstream.git
@@ -0,0 +1,3 @@
+url https://github.com/laurentj/slimerjs
+target default.nix
+GH_latest
diff --git a/nixpkgs/pkgs/development/tools/solarus-quest-editor/default.nix b/nixpkgs/pkgs/development/tools/solarus-quest-editor/default.nix
new file mode 100644
index 000000000000..991edf9b568f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/solarus-quest-editor/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitLab, cmake, luajit,
+  SDL2, SDL2_image, SDL2_ttf, physfs,
+  openal, libmodplug, libvorbis, solarus,
+  qtbase, qttools, fetchpatch, glm }:
+
+stdenv.mkDerivation rec {
+  name = "solarus-quest-editor-${version}";
+  version = "1.6.0";
+    
+  src = fetchFromGitLab {
+    owner = "solarus-games";
+    repo = "solarus-quest-editor";
+    rev = "v${version}";
+    sha256 = "1a7816kaljfh9ynzy9g36mqzzv2p800nnbrja73q6vjfrsv3vq4c";
+  };
+  
+  buildInputs = [ cmake luajit SDL2
+    SDL2_image SDL2_ttf physfs
+    openal libmodplug libvorbis
+    solarus qtbase qttools glm ];
+
+  meta = with stdenv.lib; {
+    description = "The editor for the Zelda-like ARPG game engine, Solarus";
+    longDescription = ''
+      Solarus is a game engine for Zelda-like ARPG games written in lua.
+      Many full-fledged games have been writen for the engine.
+      Games can be created easily using the editor.
+    '';
+    homepage = http://www.solarus-games.org;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.Nate-Devv ];
+    platforms = platforms.linux;
+  };
+  
+}
diff --git a/nixpkgs/pkgs/development/tools/sourcetrail/default.nix b/nixpkgs/pkgs/development/tools/sourcetrail/default.nix
new file mode 100644
index 000000000000..42042b87198d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sourcetrail/default.nix
@@ -0,0 +1,75 @@
+{ stdenv, fetchurl, autoPatchelfHook
+, icu, zlib, expat, dbus, libheimdal, openssl}:
+
+stdenv.mkDerivation rec {
+  name = "sourcetrail-${version}";
+  version = "2019.1.11";
+
+  src = fetchurl {
+    name = "sourtrail.tar.gz";
+    url = "https://www.sourcetrail.com/downloads/${version}/linux/64bit";
+    sha256 = "09f3qdgdqg6dlai43050qh4iv1d4j43isk81q68swalpnvjn72w0";
+  };
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+  buildInputs = [ zlib expat dbus stdenv.cc.cc openssl ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/opt
+
+    mv -v setup/share $out
+    mv -v data/gui/icon/logo_1024_1024.png $out/share/icons/sourcetrail.png
+    mv -v data/gui/icon/project_256_256.png $out/share/icons/project-sourcetrail.png
+
+    mkdir -p $out/share/sourcetrail/doc
+    mv -v README EULA.txt $out/share/sourcetrail/doc
+    mv -v plugin $out/share/sourcetrail
+
+    cp -rv . $out/opt
+
+    rm $out/opt/lib/libssl.so
+    rm $out/opt/lib/platforms/{libqeglfs.so,libqwebgl.so}
+    ln -s ${openssl}/lib/libssl.so $out/opt/lib/libssl.so
+
+    substituteInPlace \
+      $out/share/applications/sourcetrail.desktop \
+      --replace /usr/bin/ $out/bin/
+
+    cat <<EOF > $out/bin/sourcetrail
+      #! ${stdenv.shell} -e
+
+      # XXX: Sourcetrail somehow copies the initial config files into the home
+      # directory without write permissions. We currently just copy them
+      # ourselves to work around this problem.
+      setup_config() {
+        local src dst
+
+        [ ! -d ~/.config/sourcetrail ] && mkdir -p ~/.config/sourcetrail
+        for src in $out/opt/data/fallback/*; do
+          dst=~/.config/sourcetrail/"\$(basename "\$src")"
+          if [ ! -e "\$dst" ]; then
+            cp -r "\$src" "\$dst"
+          fi
+        done
+
+        chmod -R u+w ~/.config/sourcetrail
+      }
+
+      [ -d "\$HOME" ] && setup_config
+      exec "$out/opt/Sourcetrail.sh" "\$@"
+    EOF
+    chmod +x $out/bin/sourcetrail
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.sourcetrail.com;
+    description = "A cross-platform source explorer for C/C++ and Java";
+    platforms = [ "x86_64-linux" ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ midchildan ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/spirv-tools/default.nix b/nixpkgs/pkgs/development/tools/spirv-tools/default.nix
new file mode 100644
index 000000000000..c9df2703daa5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/spirv-tools/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, cmake, python, spirv-headers }:
+let
+  # Update spirv-headers rev in lockstep according to DEPs file
+  version = "2019.1";
+in
+
+assert version == spirv-headers.version;
+stdenv.mkDerivation rec {
+  name = "spirv-tools-${version}";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "SPIRV-Tools";
+    rev = "v${version}";
+    sha256 = "0vddjzhkrhrm3l3i57nxmq2smv3r1s0ka5ff2kziaahr4hqb479r";
+  };
+  enableParallelBuilding = true;
+
+  buildInputs = [ cmake python ];
+
+  cmakeFlags = [ "-DSPIRV-Headers_SOURCE_DIR=${spirv-headers.src}" ];
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "The SPIR-V Tools project provides an API and commands for processing SPIR-V modules";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.ralith ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sqlint/Gemfile b/nixpkgs/pkgs/development/tools/sqlint/Gemfile
new file mode 100644
index 000000000000..7f045baeaa01
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqlint/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'sqlint'
diff --git a/nixpkgs/pkgs/development/tools/sqlint/Gemfile.lock b/nixpkgs/pkgs/development/tools/sqlint/Gemfile.lock
new file mode 100644
index 000000000000..6fc638615fbf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqlint/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    pg_query (1.1.0)
+    sqlint (0.1.9)
+      pg_query (~> 1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  sqlint
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/development/tools/sqlint/default.nix b/nixpkgs/pkgs/development/tools/sqlint/default.nix
new file mode 100644
index 000000000000..67fbd09f1027
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqlint/default.nix
@@ -0,0 +1,34 @@
+{ lib, bundlerApp, fetchurl, ruby }:
+
+let
+  LIB_PG_QUERY_TAG = "10-1.0.1";
+  libpgQuerySrc = fetchurl {
+    name = "libpg_query.tar.gz";
+    url = "https://codeload.github.com/lfittl/libpg_query/tar.gz/${LIB_PG_QUERY_TAG}";
+    sha256 = "0m5jv134hgw2vcfkqlnw80fr3wmrdvgrvk1ndcx9s44bzi5nsp47";
+  };
+in bundlerApp {
+  pname = "sqlint";
+  gemdir = ./.;
+  inherit ruby;
+
+  exes = [ "sqlint" ];
+
+  gemConfig = {
+    pg_query = attrs: {
+      dontBuild = false;
+      postPatch = ''
+        substituteInPlace ext/pg_query/extconf.rb \
+          --replace "#{workdir}/libpg_query.tar.gz" "${libpgQuerySrc}"
+      '';
+    };
+  };
+
+  meta = with lib; {
+    description = "Simple SQL linter";
+    homepage    = https://github.com/purcell/sqlint;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ ariutta ];
+    platforms   = with platforms; [ "x86_64-linux" "x86_64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sqlint/gemset.nix b/nixpkgs/pkgs/development/tools/sqlint/gemset.nix
new file mode 100644
index 000000000000..b10a56c4c923
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqlint/gemset.nix
@@ -0,0 +1,23 @@
+{
+  pg_query = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "070iy9jdj0snfl42my5n6i2svcnn87cbffcjvvq5068hw0b0296w";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  sqlint = {
+    dependencies = ["pg_query"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pg9c00w520mw1mzq8kls8whwgqva1alksdsv536bh9nq7m2hnky";
+      type = "gem";
+    };
+    version = "0.1.9";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/sqsh/default.nix b/nixpkgs/pkgs/development/tools/sqsh/default.nix
new file mode 100644
index 000000000000..4acfa4a2b0ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqsh/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, autoreconfHook, freetds, readline, libiconv }:
+
+let
+  mainVersion = "2.5";
+
+in stdenv.mkDerivation rec {
+  name = "sqsh-${version}";
+  version = "${mainVersion}.16.1";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/sqsh/sqsh/sqsh-${mainVersion}/${name}.tgz";
+    sha256 = "1wi0hdmhk7l8nrz4j3kaa177mmxyklmzhj7sq1gj4q6fb8v1yr6n";
+  };
+
+  preConfigure = ''
+    export SYBASE=${freetds}
+
+    substituteInPlace src/cmd_connect.c \
+      --replace CS_TDS_80 CS_TDS_73
+  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+    substituteInPlace configure --replace "libct.so" "libct.dylib"
+  '';
+
+  enableParallelBuilding = true;
+
+  buildInputs = [ freetds readline libiconv ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with stdenv.lib; {
+    description = "Command line tool for querying Sybase/MSSQL databases";
+    longDescription = ''
+      Sqsh (pronounced skwish) is short for SQshelL (pronounced s-q-shell),
+      it is intended as a replacement for the venerable 'isql' program supplied
+      by Sybase.
+    '';
+    license = licenses.gpl2;
+    homepage = https://sourceforge.net/projects/sqsh/;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sslmate/default.nix b/nixpkgs/pkgs/development/tools/sslmate/default.nix
new file mode 100644
index 000000000000..8683c75a696d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sslmate/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, perlPackages, makeWrapper, openssl }:
+
+stdenv.mkDerivation rec {
+  name = "sslmate-1.7.0";
+
+  src = fetchurl {
+    url = "https://packages.sslmate.com/other/${name}.tar.gz";
+    sha256 = "0vhppvy5vphipbycfilzxdly7nw12brscz4biawf3bl376yp7ljm";
+  };
+
+  makeFlags = "PREFIX=$(out)";
+
+  buildInputs = [ perlPackages.perl makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/sslmate --prefix PERL5LIB : \
+      "${with perlPackages; makePerlPath [
+        URI
+        JSONPP
+        TermReadKey
+      ]}" \
+      --prefix PATH : "${openssl.bin}/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://sslmate.com;
+    maintainers = [ maintainers.domenkozar ];
+    description = "Easy to buy, deploy, and manage your SSL certs";
+    platforms = platforms.unix;
+    license = licenses.mit; # X11
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/stagit/default.nix b/nixpkgs/pkgs/development/tools/stagit/default.nix
new file mode 100644
index 000000000000..21068a8b05f6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/stagit/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, libgit2, fetchgit }:
+
+stdenv.mkDerivation rec {
+  name = "stagit-${version}";
+  version = "0.9.1";
+
+  src = fetchgit {
+    url = git://git.codemadness.org/stagit;
+    rev = version;
+    sha256 = "0gh28spkry9wbmdj0hmvz3680fvbyzab9cifhj1p76f4fz27rnv9";
+  };
+
+  makeFlags = "PREFIX=$(out)";
+
+  buildInputs = [ libgit2 ];
+
+  meta = with stdenv.lib; {
+    description = "git static site generator";
+    homepage = https://git.codemadness.org/stagit/;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ jb55 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/statik/default.nix b/nixpkgs/pkgs/development/tools/statik/default.nix
new file mode 100644
index 000000000000..0ad7d7f78d4a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/statik/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "statik-unstable-${version}";
+  version = "2018-11-28";
+  goPackagePath = "github.com/rakyll/statik";
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "rakyll";
+    repo = "statik";
+    rev = "79258177a57a85a8ab2eca7ce0936aad80307f4e";
+    sha256 = "14wqh38a7dhm2jgr1lsl2wdvjmkgdapzl2z4a1vl7ncv3x43gkg5";
+  };
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/rakyll/statik";
+    description = "Embed files into a Go executable ";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ chiiruno ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/statik/deps.nix b/nixpkgs/pkgs/development/tools/statik/deps.nix
new file mode 100644
index 000000000000..0429d8876b29
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/statik/deps.nix
@@ -0,0 +1,3 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+]
diff --git a/nixpkgs/pkgs/development/tools/sunxi-tools/default.nix b/nixpkgs/pkgs/development/tools/sunxi-tools/default.nix
new file mode 100644
index 000000000000..b3026cdf84d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sunxi-tools/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, pkgconfig, libusb, zlib }:
+
+stdenv.mkDerivation {
+  name = "sunxi-tools-20181113";
+
+  src = fetchFromGitHub {
+    owner = "linux-sunxi";
+    repo = "sunxi-tools";
+    rev = "6d598a0ed714201380e78130213500be6512942b";
+    sha256 = "1yhl6jfl2cws596ymkyhm8h9qkcvp67v8hlh081lsaqv1i8j9yig";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libusb zlib ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  buildFlags = [ "tools" "misc" ];
+
+  installTargets = [ "install-tools" "install-misc" ];
+
+  meta = with stdenv.lib; {
+    description = "Tools for Allwinner SoC devices";
+    homepage = http://linux-sunxi.org/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ elitak ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/textql/default.nix b/nixpkgs/pkgs/development/tools/textql/default.nix
new file mode 100644
index 000000000000..a3499258a999
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/textql/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, sqlite }:
+
+buildGoPackage rec {
+  name = "textql-${version}";
+  version = "2.0.3";
+
+  goPackagePath = "github.com/dinedal/textql";
+
+  src = fetchFromGitHub {
+    owner  = "dinedal";
+    repo   = "textql";
+    rev    = version;
+    sha256 = "1b61w4pc5gl7m12mphricihzq7ifnzwn0yyw3ypv0d0fj26h5hc3";
+  };
+
+  postInstall = ''
+    install -Dm644 -t $out/share/man/man1 ${src}/man/textql.1
+  '';
+
+  # needed for tests
+  nativeBuildInputs = [ sqlite ];
+
+  goDeps = ./deps.nix;
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Execute SQL against structured text like CSV or TSV";
+    homepage = https://github.com/dinedal/textql;
+    license = licenses.mit;
+    maintainers = with maintainers; [ vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/textql/deps.nix b/nixpkgs/pkgs/development/tools/textql/deps.nix
new file mode 100644
index 000000000000..e166e73a61fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/textql/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "github.com/mattn/go-sqlite3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-sqlite3";
+      rev = "b4142c444a8941d0d92b0b7103a24df9cd815e42";
+      sha256 = "0xq2y4am8dz9w9aaq24s1npg1sn8pf2gn4nki73ylz2fpjwq9vla";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/thrust/default.nix b/nixpkgs/pkgs/development/tools/thrust/default.nix
new file mode 100644
index 000000000000..91a01edc23a6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/thrust/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchurl, buildEnv, makeWrapper, glib, alsaLib , dbus, gtk2, atk
+, pango, freetype, fontconfig, gdk_pixbuf , cairo, cups, expat, nspr, gconf, nss
+, xorg, libcap, unzip
+}:
+
+let
+  thrustEnv = buildEnv {
+    name = "env-thrust";
+    paths = [
+      stdenv.cc.cc glib dbus gtk2 atk pango freetype fontconfig gdk_pixbuf
+      cairo cups expat alsaLib nspr gconf nss xorg.libXrender xorg.libX11
+      xorg.libXext xorg.libXdamage xorg.libXtst xorg.libXcomposite
+      xorg.libXi xorg.libXfixes xorg.libXrandr xorg.libXcursor libcap
+    ];
+  };
+in stdenv.mkDerivation rec {
+  name = "thrust-${version}";
+  version = "0.7.6";
+
+  src = fetchurl {
+    url = "https://github.com/breach/thrust/releases/download/v${version}/thrust-v${version}-linux-x64.zip";
+    sha256 = "07rrnlj0gk500pvar4b1wdqm05p4n9yjwn911x93bd2qwc8r5ymc";
+  };
+
+  buildInputs = [ thrustEnv makeWrapper unzip ];
+
+  phases = [ "installPhase" "fixupPhase" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/libexec/thrust
+    unzip -d $out/libexec/thrust/ $src
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      $out/libexec/thrust/thrust_shell
+    wrapProgram $out/libexec/thrust/thrust_shell \
+      --prefix "LD_LIBRARY_PATH" : "${thrustEnv}/lib:${thrustEnv}/lib64"
+    ln -s $out/libexec/thrust/thrust_shell $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Chromium-based cross-platform / cross-language application framework";
+    homepage = https://github.com/breach/thrust;
+    license = licenses.mit;
+    maintainers = [ maintainers.osener ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/toluapp/default.nix b/nixpkgs/pkgs/development/tools/toluapp/default.nix
new file mode 100644
index 000000000000..90d36c71caa9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/toluapp/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, sconsPackages, lua }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.93";
+  name = "toluapp-${version}";
+
+  src = fetchFromGitHub {
+    owner = "LuaDist";
+    repo  = "toluapp";
+    rev   = "${version}";
+    sha256 = "0zd55bc8smmgk9j4cf0jpibb03lgsvl0knpwhplxbv93mcdnw7s0";
+  };
+
+  nativeBuildInputs = [ sconsPackages.scons_3_0_1 ];
+  buildInputs = [ lua ];
+
+  patches = [ ./environ-and-linux-is-kinda-posix.patch ./headers.patch ];
+
+  preConfigure = ''
+    substituteInPlace config_posix.py \
+      --replace /usr/local $out
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A tool to integrate C/Cpp code with Lua";
+    homepage = http://www.codenix.com/~tolua/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ vrthra ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/toluapp/environ-and-linux-is-kinda-posix.patch b/nixpkgs/pkgs/development/tools/toluapp/environ-and-linux-is-kinda-posix.patch
new file mode 100644
index 000000000000..6743b25cb8ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/toluapp/environ-and-linux-is-kinda-posix.patch
@@ -0,0 +1,36 @@
+As it turns out, scons doesn't inherit environment variables by
+default. Debugging this was very pleasant. -- oxij
+
+diff --git a/SConstruct b/SConstruct
+index 5c1e774..66aa4c8 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -5,13 +5,11 @@ tools = ['default']
+ if os.name == 'nt':
+ 	tools = ['mingw']
+ 
+-env = Environment(tools = tools)
++env = Environment(tools = tools, ENV = os.environ)
+ 
+ options_file = None
+-if sys.platform == 'linux2':
+-	options_file = "linux"
+ 
+-elif 'msvc' in env['TOOLS']:
++if 'msvc' in env['TOOLS']:
+ 	options_file = "msvc"
+ else:
+ 	options_file = "posix"
+diff --git a/config_posix.py b/config_posix.py
+index 2bb696c..eb4eb9b 100644
+--- a/config_posix.py
++++ b/config_posix.py
+@@ -16,7 +16,7 @@ CCFLAGS = ['-O2', '-ansi', '-Wall']
+ prefix = '/usr/local'
+ 
+ # libraries
+-LIBS = ['lua', 'lualib', 'm']
++LIBS = ['lua', 'liblua', 'm']
+ 
+ 
+ 
diff --git a/nixpkgs/pkgs/development/tools/toluapp/headers.patch b/nixpkgs/pkgs/development/tools/toluapp/headers.patch
new file mode 100644
index 000000000000..59a47bb989a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/toluapp/headers.patch
@@ -0,0 +1,15 @@
+diff --git a/include/tolua++.h b/include/tolua++.h
+index ed53449..f57d56d 100644
+--- a/include/tolua++.h
++++ b/include/tolua++.h
+@@ -43,8 +43,8 @@ extern "C" {
+
+ typedef int lua_Object;
+
+-#include "lua.h"
+-#include "lauxlib.h"
++#include <lua.h>
++#include <lauxlib.h>
+
+ struct tolua_Error
+ {
diff --git a/nixpkgs/pkgs/development/tools/tora/default.nix b/nixpkgs/pkgs/development/tools/tora/default.nix
new file mode 100644
index 000000000000..5b46b975cf7f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tora/default.nix
@@ -0,0 +1,67 @@
+{ mkDerivation, lib, fetchFromGitHub, cmake, extra-cmake-modules, makeWrapper
+, boost, doxygen, openssl, mysql, postgresql, graphviz, loki, qscintilla, qtbase }:
+
+let
+  qscintillaLib = (qscintilla.override { withQt5 = true; });
+
+in mkDerivation rec {
+  name = "tora-${version}";
+  version = "3.1";
+
+  src = fetchFromGitHub {
+    owner  = "tora-tool";
+    repo   = "tora";
+    rev    = "v${version}";
+    sha256 = "0wninl10bcgiljf6wnhn2rv8kmzryw78x5qvbw8s2zfjlnxjsbn7";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules makeWrapper ];
+  buildInputs = [
+    boost doxygen graphviz loki mysql.connector-c openssl postgresql qscintillaLib qtbase
+  ];
+
+  preConfigure = ''
+    sed -i \
+      's|defaultGvHome = "/usr/bin"|defaultGvHome = "${lib.getBin graphviz}/bin"|' \
+      src/widgets/toglobalsetting.cpp
+
+    sed -i \
+      's|/usr/bin/dot|${lib.getBin graphviz}/bin/dot|' \
+      extlibs/libermodel/dotgraph.cpp
+  '';
+
+  cmakeFlags = [
+    "-DWANT_INTERNAL_LOKI=0"
+    "-DWANT_INTERNAL_QSCINTILLA=0"
+    # cmake/modules/FindQScintilla.cmake looks in qtbase and for the wrong library name
+    "-DQSCINTILLA_INCLUDE_DIR=${qscintillaLib}/include"
+    "-DQSCINTILLA_LIBRARY=${qscintillaLib}/lib/libqscintilla2.so"
+    "-DENABLE_DB2=0"
+    "-DENABLE_ORACLE=0"
+    "-DENABLE_TERADATA=0"
+    "-DQT5_BUILD=1"
+    "-Wno-dev"
+  ];
+
+  # these libraries are only searched for at runtime so we need to force-link them
+  NIX_LDFLAGS = [
+    "-lgvc"
+    "-lmysqlclient"
+    "-lecpg"
+    "-lssl"
+  ];
+
+  NIX_CFLAGS_COMPILE = [ "-L${mysql.connector-c}/lib/mysql" "-I${mysql.connector-c}/include/mysql" ];
+
+  postFixup = ''
+    wrapProgram $out/bin/tora \
+      --prefix PATH : ${lib.getBin graphviz}/bin
+  '';
+
+  meta = with lib; {
+    description = "Tora SQL tool";
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.linux;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/toxiproxy/default.nix b/nixpkgs/pkgs/development/tools/toxiproxy/default.nix
new file mode 100644
index 000000000000..565ec7904f18
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/toxiproxy/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "toxiproxy-${version}";
+  version = "2.1.3";
+  src = fetchFromGitHub {
+    owner = "Shopify";
+    repo = "toxiproxy";
+    rev = "v${version}";
+    sha256 = "1a7yry846iwi9cs9xam2vjbw73fjy45agjrwk214k0n1ziaawz2f";
+  };
+
+  goPackagePath = "github.com/Shopify/toxiproxy";
+  subPackages = ["cmd" "cli"];
+  buildFlagsArray = "-ldflags=-X github.com/Shopify/toxiproxy.Version=v${version}";
+
+  postInstall = ''
+    mv $bin/bin/cli $bin/bin/toxiproxy-cli
+    mv $bin/bin/cmd $bin/bin/toxiproxy-cmd
+  '';
+
+  meta = {
+    description = "Proxy for for simulating network conditions.";
+    maintainers = with lib.maintainers; [ avnik ];
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tradcpp/aarch64.patch b/nixpkgs/pkgs/development/tools/tradcpp/aarch64.patch
new file mode 100644
index 000000000000..ef7ad9828ace
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tradcpp/aarch64.patch
@@ -0,0 +1,12 @@
+diff a/config.h b/config.h
+--- a/config.h
++++ b/config.h
+@@ -124,6 +124,8 @@
+ #define CONFIG_CPU "__ppc64__"
+ #elif defined(__ARM__)
+ #define CONFIG_CPU "__ARM__"
++#elif defined(__aarch64__)
++#define CONFIG_CPU "__aarch64__"
+ #else
+ /* let it go */
+ #endif
diff --git a/nixpkgs/pkgs/development/tools/tradcpp/default.nix b/nixpkgs/pkgs/development/tools/tradcpp/default.nix
new file mode 100644
index 000000000000..7f395174bb41
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tradcpp/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, autoconf }:
+
+stdenv.mkDerivation {
+  name = "tradcpp-0.5.2";
+
+  src = fetchurl {
+    url = https://ftp.netbsd.org/pub/NetBSD/misc/dholland/tradcpp-0.5.2.tar.gz;
+    sha256 = "1h2bwxwc13rz3g2236l89hm47f72hn3m4h7wjir3j532kq0m68bc";
+  };
+
+  # tradcpp only comes with BSD-make Makefile; the patch adds configure support
+  buildInputs = [ autoconf ];
+  preConfigure = "autoconf";
+  patches = [
+    ./tradcpp-configure.patch
+    ./aarch64.patch
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A traditional (K&R-style) C macro preprocessor";
+    platforms = platforms.all;
+    license = licenses.bsd2;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/tradcpp/tradcpp-configure.patch b/nixpkgs/pkgs/development/tools/tradcpp/tradcpp-configure.patch
new file mode 100644
index 000000000000..39cc499e2180
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tradcpp/tradcpp-configure.patch
@@ -0,0 +1,84 @@
+*** /dev/null	Wed Jan  7 11:47:26 2015
+--- tradcpp-0.4/Makefile.in	Wed Jan  7 11:43:15 2015
+***************
+*** 0 ****
+--- 1,64 ----
++ SHELL = /bin/sh
++ 
++ ### Filled in by `configure' ###
++ srcdir = @srcdir@
++ VPATH = @srcdir@
++ CC = @CC@
++ CFLAGS = @CFLAGS@
++ CPPFLAGS = @CPPFLAGS@
++ 
++ LDFLAGS = @LDFLAGS@
++ 
++ prefix = @prefix@
++ exec_prefix = @exec_prefix@
++ 
++ bindir = @bindir@
++ libdir = @libdir@
++ incdir = @includedir@
++ manext = 1
++ mandir = @mandir@/man$(manext)
++ docdir = @docdir@
++ datarootdir = @datarootdir@
++ datadir = @datadir@
++ 
++ OBJS=	main.o \
++ 	files.o directive.o eval.o macro.o output.o \
++ 	place.o array.o utils.o
++ 
++ .PHONY: all clean install man doc dist
++ 
++ default: all
++ 
++ all: tradcpp
++ 
++ tradcpp: $(OBJS)
++ 	$(CC) $(LDFLAGS) $(CFLAGS) $(CPPFLAGS) -o $@ $(OBJS)
++ 
++ clean:
++ 	rm -f *.o
++ 
++ distclean: clean
++ 	rm -f Makefile config.log config.status config-cache
++ 
++ install: tradcpp
++ 	mkdir -p $(DESTDIR)$(mandir)
++ 	install tradcpp.1 $(DESTDIR)$(mandir)
++ 	mkdir -p $(DESTDIR)$(bindir)
++ 	install tradcpp $(DESTDIR)$(bindir)
++ 
++ .c.o:
++ 	$(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
++ 
++ array.o: array.c array.h inlinedefs.h utils.h
++ directive.o: directive.c utils.h mode.h place.h files.h directive.h \
++  macro.h eval.h output.h
++ eval.o: eval.c utils.h array.h inlinedefs.h mode.h place.h eval.h
++ files.o: files.c array.h inlinedefs.h utils.h mode.h place.h files.h \
++  directive.h
++ macro.o: macro.c array.h inlinedefs.h utils.h mode.h place.h macro.h \
++  output.h
++ main.o: main.c version.h config.h utils.h array.h inlinedefs.h mode.h \
++  place.h files.h directive.h macro.h
++ output.o: output.c utils.h mode.h place.h output.h
++ place.o: place.c utils.h array.h inlinedefs.h place.h
++ utils.o: utils.c utils.h
+*** /dev/null	Wed Jan  7 11:47:26 2015
+--- tradcpp-0.4/configure.ac	Wed Jan  7 11:22:18 2015
+***************
+*** 0 ****
+--- 1,10 ----
++ AC_PREREQ([2.60])dnl
++ AC_INIT(main.c)
++ AC_PROG_CC
++ AC_LANG(C)
++ AC_SUBST(CC)
++ AC_SUBST(CFLAGS)
++ AC_SUBST(CPPFLAGS)
++ AC_SUBST(LDFLAGS)
++ AC_SUBST(LD)
++ AC_OUTPUT(Makefile)
diff --git a/nixpkgs/pkgs/development/tools/trellis/default.nix b/nixpkgs/pkgs/development/tools/trellis/default.nix
new file mode 100644
index 000000000000..a348e295933e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/trellis/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchFromGitHub
+, python3, boost
+, cmake
+}:
+
+let
+  boostWithPython3 = boost.override { python = python3; enablePython = true; };
+in
+stdenv.mkDerivation rec {
+  name = "trellis-${version}";
+  version = "2019.04.22";
+
+  srcs = [
+    (fetchFromGitHub {
+       owner  = "symbiflow";
+       repo   = "prjtrellis";
+       rev    = "5eb0ad870f30422b95d090ac9a476343809c62b9";
+       sha256 = "10jkjfhqdr2bff41mh3w8a7kszf2whqqgk5s1z5z07mlh6zfdjlg";
+       name   = "trellis";
+     })
+    (fetchFromGitHub {
+      owner  = "symbiflow";
+      repo   = "prjtrellis-db";
+      rev    = "d0b219af41ae3da6150645fbc5cc5613b530603f";
+      sha256 = "1mnzvrqrcbfypvbagwyf6arv3kmj6q7n27gcmyk6ap2xnavkx4bq";
+      name   = "database";
+    })
+  ];
+  sourceRoot = "trellis";
+
+  buildInputs = [ boostWithPython3 ];
+  nativeBuildInputs = [ cmake python3 ];
+
+  preConfigure = with builtins; ''
+    rmdir database && ln -sfv ${elemAt srcs 1} ./database
+
+    source environment.sh
+    cd libtrellis
+  '';
+
+  meta = with stdenv.lib; {
+    description     = "Documentation and bitstream tools for Lattice ECP5 FPGAs";
+    longDescription = ''
+      Project Trellis documents the Lattice ECP5 architecture
+      to enable development of open-source tools. Its goal is
+      to provide sufficient information to develop a free and
+      open Verilog to bitstream toolchain for these devices.
+    '';
+    homepage    = https://github.com/symbiflow/prjtrellis;
+    license     = stdenv.lib.licenses.isc;
+    maintainers = with maintainers; [ q3k thoughtpolice ];
+    platforms   = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tychus/default.nix b/nixpkgs/pkgs/development/tools/tychus/default.nix
new file mode 100644
index 000000000000..775e26eb6a8c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tychus/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, buildGoPackage, CoreFoundation }:
+
+buildGoPackage rec {
+  name = "tychus-${version}";
+  version = "0.6.3";
+
+  goPackagePath = "github.com/devlocker/tychus";
+  goDeps = ./deps.nix;
+  subPackages = [];
+
+  src = fetchFromGitHub {
+    owner = "devlocker";
+    repo = "tychus";
+    rev = "v${version}";
+    sha256 = "02ybxjsfga89gpg0k21zmykhhnpx1vy3ny8fcwj0qsg73i11alvw";
+  };
+
+  buildInputs = stdenv.lib.optionals stdenv.hostPlatform.isDarwin [ CoreFoundation ];
+
+  buildFlags = "--tags release";
+
+  meta = {
+    description = "Command line utility to live-reload your application.";
+    homepage = https://github.com/devlocker/tychus;
+    license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tychus/deps.nix b/nixpkgs/pkgs/development/tools/tychus/deps.nix
new file mode 100644
index 000000000000..194aa96ae3ce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tychus/deps.nix
@@ -0,0 +1,30 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/inconshreveable/mousetrap";
+    fetch = {
+      type = "git";
+      url = "https://github.com/inconshreveable/mousetrap";
+      rev =  "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75";
+      sha256 = "1mn0kg48xkd74brf48qf5hzp0bc6g8cf5a77w895rl3qnlpfw152";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/cobra";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cobra";
+      rev =  "f91529fc609202eededff4de2dc0ba2f662240a3";
+      sha256 = "10c3d5dp98rys134dnsl19ldj8bca183z91lj8rkbsy78qzrr9af";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev =  "e57e3eeb33f795204c1ca35f56c44f83227c6e66";
+      sha256 = "13mhx4i913jil32j295m3a36jzvq1y64xig0naadiz7q9ja011r2";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/uftrace/default.nix b/nixpkgs/pkgs/development/tools/uftrace/default.nix
new file mode 100644
index 000000000000..cb10a252d121
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/uftrace/default.nix
@@ -0,0 +1,25 @@
+{stdenv, fetchFromGitHub}:
+
+stdenv.mkDerivation rec {
+  name = "uftrace-${version}";
+  version = "0.9.2";
+
+  src = fetchFromGitHub {
+    owner = "namhyung";
+    repo = "uftrace";
+    rev = "v${version}";
+    sha256 = "0s7yfnf7kcqlfw3zzv4y8akkd12f8di69c4sranympnl7z5srfam";
+  };
+
+  postUnpack = ''
+        patchShebangs .
+  '';
+
+  meta = {
+    description = "Function (graph) tracer for user-space";
+    homepage = https://github.com/namhyung/uftrace;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [stdenv.lib.maintainers.nthorne];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/unconvert/default.nix b/nixpkgs/pkgs/development/tools/unconvert/default.nix
new file mode 100644
index 000000000000..1e81c5b9f86e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/unconvert/default.nix
@@ -0,0 +1,31 @@
+
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "unconvert-unstable-${version}";
+  version = "2018-07-03";
+  rev = "1a9a0a0a3594e9363e49545fb6a4e24ac4c68b7b";
+
+  goPackagePath = "github.com/mdempsky/unconvert";
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "mdempsky";
+    repo = "unconvert";
+    sha256 = "1ww5qk1cmdis4ig5mb0b0w7nzrf3734s51plmgdxqsr35y88q4p9";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "Remove unnecessary type conversions from Go source";
+    homepage = https://github.com/mdempsky/unconvert;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/unconvert/deps.nix b/nixpkgs/pkgs/development/tools/unconvert/deps.nix
new file mode 100644
index 000000000000..333ec7ca3b15
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/unconvert/deps.nix
@@ -0,0 +1,29 @@
+[
+  {
+    goPackagePath = "github.com/kisielk/gotool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kisielk/gotool";
+      rev = "80517062f582ea3340cd4baf70e86d539ae7d84d";
+      sha256 = "14af2pa0ssyp8bp2mvdw184s5wcysk6akil3wzxmr05wwy951iwn";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "6f44c5a2ea40ee3593d98cdcc905cc1fdaa660e2";
+      sha256 = "00mwzxly5isgf0glz7k3k2dkyqkjfc4z55qxajx4lgcp3h8xn9xj";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "96e9e165b75e735822645eff82850b08c377be36";
+      sha256 = "1zj9ck5sg9b0pphxybmvxf64hhcap7v7j37fx3v5aknf18crjjdg";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/unity3d/default.nix b/nixpkgs/pkgs/development/tools/unity3d/default.nix
new file mode 100644
index 000000000000..032865be7f5f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/unity3d/default.nix
@@ -0,0 +1,140 @@
+{ stdenv, lib, fetchurl, makeWrapper, file, getopt
+, gtk2, gtk3, gdk_pixbuf, glib, libGL, libGLU, nss, nspr, udev, tbb
+, alsaLib, GConf, cups, libcap, fontconfig, freetype, pango
+, cairo, dbus, expat, zlib, libpng12, nodejs, gnutar, gcc, gcc_32bit
+, libX11, libXcursor, libXdamage, libXfixes, libXrender, libXi
+, libXcomposite, libXext, libXrandr, libXtst, libSM, libICE, libxcb, chromium
+, libpqxx
+}:
+
+let
+  libPath64 = lib.makeLibraryPath [
+    gcc.cc gtk2 gdk_pixbuf glib libGL libGLU nss nspr
+    alsaLib GConf cups libcap fontconfig freetype pango
+    cairo dbus expat zlib libpng12 udev tbb
+    libX11 libXcursor libXdamage libXfixes libXrender libXi
+    libXcomposite libXext libXrandr libXtst libSM libICE libxcb
+    libpqxx gtk3 
+  ];
+  libPath32 = lib.makeLibraryPath [ gcc_32bit.cc ];
+  binPath = lib.makeBinPath [ nodejs gnutar ];
+
+  ver = "2018.3.0";
+  build = "f2";
+
+in stdenv.mkDerivation rec {
+  name = "unity-editor-${version}";
+  version = "${ver}x${build}";
+
+  src = fetchurl {
+  	url = "https://beta.unity3d.com/download/6e9a27477296/LinuxEditorInstaller/Unity.tar.xz";
+    sha1 = "083imikkrgha5w9sihjvv1m74naxm5yv";
+  };
+
+  nosuidLib = ./unity-nosuid.c;
+
+  nativeBuildInputs = [ makeWrapper file getopt ];
+
+  outputs = [ "out" ];
+
+  sourceRoot = ".";
+
+  buildPhase = ''
+    cd Editor
+
+    $CC -fPIC -shared -o libunity-nosuid.so $nosuidLib -ldl
+    strip libunity-nosuid.so
+
+    cd ..
+  '';
+
+  installPhase = ''
+    unitydir="$out/opt/Unity/Editor"
+    mkdir -p $unitydir
+    mv Editor/* $unitydir
+    ln -sf /run/wrappers/bin/${chromium.sandboxExecutableName} $unitydir/chrome-sandbox
+
+    mkdir -p $out/bin
+    makeWrapper $unitydir/Unity $out/bin/unity-editor \
+      --prefix LD_PRELOAD : "$unitydir/libunity-nosuid.so" \
+      --prefix PATH : "${binPath}"
+  '';
+
+  preFixup = ''
+    patchFile() {
+      ftype="$(file -b "$1")"
+      if [[ "$ftype" =~ LSB\ .*dynamically\ linked ]]; then
+        if [[ "$ftype" =~ 32-bit ]]; then
+          rpath="${libPath32}"
+          intp="$(cat $NIX_CC/nix-support/dynamic-linker-m32)"
+        else
+          rpath="${libPath64}"
+          intp="$(cat $NIX_CC/nix-support/dynamic-linker)"
+        fi
+
+        # Save origin-relative parts of rpath.
+        originRpath="$(patchelf --print-rpath "$1" | sed "s/:/\n/g" | grep "^\$ORIGIN" | paste -sd ":" - || echo "")"
+        rpath="$originRpath:$rpath"
+
+        patchelf --set-rpath "$rpath" "$1"
+        patchelf --set-interpreter "$intp" "$1" 2> /dev/null || true
+      fi
+    }
+
+    upm_linux=$unitydir/Data/Resources/PackageManager/Server/UnityPackageManager
+    
+
+    orig_size=$(stat --printf=%s $upm_linux)
+
+    # Exclude PlaybackEngines to build something that can be run on FHS-compliant Linuxes
+    find $unitydir -name PlaybackEngines -prune -o -type f -print | while read path; do
+      patchFile "$path"
+    done
+
+    new_size=$(stat --printf=%s $upm_linux)
+
+    ###### zeit-pkg fixing starts here.
+    # we're replacing plaintext js code that looks like
+    # PAYLOAD_POSITION = '1234                  ' | 0
+    # [...]
+    # PRELUDE_POSITION = '1234                  ' | 0
+    # ^-----20-chars-----^^------22-chars------^
+    # ^-- grep points here
+    #
+    # var_* are as described above
+    # shift_by seems to be safe so long as all patchelf adjustments occur 
+    # before any locations pointed to by hardcoded offsets
+
+    var_skip=20
+    var_select=22
+    shift_by=$(expr $new_size - $orig_size)
+
+    function fix_offset {
+      # $1 = name of variable to adjust
+      location=$(grep -obUam1 "$1" $upm_linux | cut -d: -f1)
+      location=$(expr $location + $var_skip)
+      value=$(dd if=$upm_linux iflag=count_bytes,skip_bytes skip=$location \
+                 bs=1 count=$var_select status=none)
+      value=$(expr $shift_by + $value)
+      echo -n $value | dd of=$upm_linux bs=1 seek=$location conv=notrunc
+    }
+
+    fix_offset PAYLOAD_POSITION
+    fix_offset PRELUDE_POSITION
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://unity3d.com/;
+    description = "Game development tool";
+    longDescription = ''
+      Popular development platform for creating 2D and 3D multiplatform games
+      and interactive experiences.
+    '';
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ tesq0 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/unity3d/unity-nosuid.c b/nixpkgs/pkgs/development/tools/unity3d/unity-nosuid.c
new file mode 100644
index 000000000000..26a923ab0394
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/unity3d/unity-nosuid.c
@@ -0,0 +1,32 @@
+#define _GNU_SOURCE
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <dlfcn.h>
+
+static const char sandbox_path[] = "/chrome-sandbox";
+
+int __xstat(int ver, const char* path, struct stat* stat_buf) {
+  static int (*original_xstat)(int, const char*, struct stat*) = NULL;
+  if (original_xstat == NULL) {
+    int (*fun)(int, const char*, struct stat*) = dlsym(RTLD_NEXT, "__xstat");
+    if (fun == NULL) {
+      return -1;
+    };
+    original_xstat = fun;
+  };
+
+  int res = (*original_xstat)(ver, path, stat_buf);
+  if (res == 0) {
+    char* pos = strstr(path, sandbox_path);
+    if (pos != NULL && *(pos + sizeof(sandbox_path) - 1) == '\0') {
+      printf("Lying about chrome-sandbox access rights...\n");
+      stat_buf->st_uid = 0;
+      stat_buf->st_gid = 0;
+      stat_buf->st_mode = 0104755;
+    };
+  }
+  return res;
+}
diff --git a/nixpkgs/pkgs/development/tools/vagrant/0004-Support-system-installed-plugins.patch b/nixpkgs/pkgs/development/tools/vagrant/0004-Support-system-installed-plugins.patch
new file mode 100644
index 000000000000..f87ff5135b3f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/0004-Support-system-installed-plugins.patch
@@ -0,0 +1,97 @@
+From: Antonio Terceiro <terceiro@debian.org>
+Date: Wed, 27 May 2015 09:36:17 -0300
+Subject: Support system-installed plugins
+Source: https://salsa.debian.org/ruby-team/vagrant/blob/cb672c6dc0c63f6552c5ec4d6d7d22929d353503/debian/patches/0004-Support-system-installed-plugins.patch
+
+Plugins must be installed as regular Ruby libraries, and they must
+contain /usr/share/vagrant-plugins/plugins.d/$PLUGINNAME.json with the
+following content:
+
+{
+  "${PLUGINNAME}": {
+    "ruby_version":"$(ruby -e 'puts RUBY_VERSION')",
+    "vagrant_version":"$(cat /usr/share/vagrant/version.txt)",
+    "gem_version":"",
+    "require":"",
+    "sources":[]
+  }
+}
+---
+ lib/vagrant/plugin/manager.rb    |  4 ++--
+ lib/vagrant/plugin/state_file.rb | 22 +++++++++++++++++++++-
+ 2 files changed, 23 insertions(+), 3 deletions(-)
+
+diff --git a/lib/vagrant/plugin/manager.rb b/lib/vagrant/plugin/manager.rb
+index 567347d..d9d76a0 100644
+--- a/lib/vagrant/plugin/manager.rb
++++ b/lib/vagrant/plugin/manager.rb
+@@ -18,7 +18,7 @@ module Vagrant
+ 
+       # Returns the path to the [StateFile] for system plugins.
+       def self.system_plugins_file
+-        dir = Vagrant.installer_embedded_dir
++        dir = '@system_plugin_dir@'
+         return nil if !dir
+         Pathname.new(dir).join("plugins.json")
+       end
+@@ -38,7 +38,7 @@ module Vagrant
+ 
+         system_path  = self.class.system_plugins_file
+         @system_file = nil
+-        @system_file = StateFile.new(system_path) if system_path && system_path.file?
++        @system_file = StateFile.new(system_path, true) if system_path && system_path.file?
+ 
+         @local_file = nil
+         @globalized = @localized = false
+diff --git a/lib/vagrant/plugin/state_file.rb b/lib/vagrant/plugin/state_file.rb
+index c6872d4..935d431 100644
+--- a/lib/vagrant/plugin/state_file.rb
++++ b/lib/vagrant/plugin/state_file.rb
+@@ -11,8 +11,9 @@ module Vagrant
+       # @return [Pathname] path to file
+       attr_reader :path
+ 
+-      def initialize(path)
++      def initialize(path, system = false)
+         @path = path
++        @system = system
+ 
+         @data = {}
+         if @path.exist?
+@@ -28,6 +29,21 @@ module Vagrant
+ 
+         @data["version"] ||= "1"
+         @data["installed"] ||= {}
++        load_extra_plugins
++      end
++
++      def load_extra_plugins
++        extra_plugins = Dir.glob(@path.dirname.join('plugins.d', '*.json'))
++        extra_plugins.each do |filename|
++          json = File.read(filename)
++          begin
++            plugin_data = JSON.parse(json)
++            @data["installed"].merge!(plugin_data)
++          rescue JSON::ParserError => e
++            raise Vagrant::Errors::PluginStateFileParseError,
++              path: filename, message: e.message
++          end
++        end
+       end
+ 
+       # Add a plugin that is installed to the state file.
+@@ -107,6 +123,14 @@ module Vagrant
+           f.close
+           FileUtils.mv(f.path, @path)
+         end
++      rescue Errno::EACCES
++        # Ignore permission denied against system-installed plugins; regular
++        # users are not supposed to write there.
++        raise unless @system
++      rescue Errno::EROFS
++        # Ignore read-only filesystem against system-installed plugins; regular
++        # users are not supposed to write there.
++        raise unless @system
+       end
+ 
+       protected
diff --git a/nixpkgs/pkgs/development/tools/vagrant/default.nix b/nixpkgs/pkgs/development/tools/vagrant/default.nix
new file mode 100644
index 000000000000..2d4bae560bde
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/default.nix
@@ -0,0 +1,98 @@
+{ stdenv, lib, fetchurl, buildRubyGem, bundlerEnv, ruby, libarchive
+, libguestfs, qemu, writeText, withLibvirt ? stdenv.isLinux }:
+
+let
+  # NOTE: bumping the version and updating the hash is insufficient;
+  # you must use bundix to generate a new gemset.nix in the Vagrant source.
+  version = "2.2.3";
+  url = "https://github.com/hashicorp/vagrant/archive/v${version}.tar.gz";
+  sha256 = "1j00glqn8b1zsgqg2nyk5as405a6s6vclswg2ri0a229hnsiabvs";
+
+  deps = bundlerEnv rec {
+    name = "${pname}-${version}";
+    pname = "vagrant";
+    inherit version;
+
+    inherit ruby;
+    gemfile = writeText "Gemfile" "";
+    lockfile = writeText "Gemfile.lock" "";
+    gemset = lib.recursiveUpdate (import ./gemset.nix) ({
+      vagrant = {
+        source = {
+          type = "url";
+          inherit url sha256;
+        };
+        inherit version;
+      };
+    } // lib.optionalAttrs withLibvirt (import ./gemset_libvirt.nix));
+  };
+
+in buildRubyGem rec {
+  name = "${gemName}-${version}";
+  gemName = "vagrant";
+  inherit version;
+
+  doInstallCheck = true;
+  dontBuild = false;
+  src = fetchurl { inherit url sha256; };
+
+  patches = [
+    ./unofficial-installation-nowarn.patch
+    ./use-system-bundler-version.patch
+    ./0004-Support-system-installed-plugins.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace lib/vagrant/plugin/manager.rb --subst-var-by \
+      system_plugin_dir "$out/vagrant-plugins"
+  '';
+
+  # PATH additions:
+  #   - libarchive: Make `bsdtar` available for extracting downloaded boxes
+  # withLibvirt only:
+  #   - libguestfs: Make 'virt-sysprep' available for 'vagrant package'
+  #   - qemu: Make 'qemu-img' available for 'vagrant package'
+  postInstall =
+    let
+      pathAdditions = lib.makeSearchPath "bin"
+        (map (x: "${lib.getBin x}") ([
+          libarchive
+        ] ++ lib.optionals withLibvirt [
+          libguestfs
+          qemu
+        ]));
+    in ''
+    wrapProgram "$out/bin/vagrant" \
+      --set GEM_PATH "${deps}/lib/ruby/gems/${ruby.version.libDir}" \
+      --prefix PATH ':' ${pathAdditions}
+
+    mkdir -p "$out/vagrant-plugins/plugins.d"
+    echo '{}' > "$out/vagrant-plugins/plugins.json"
+  '' +
+  lib.optionalString withLibvirt ''
+    substitute ${./vagrant-libvirt.json.in} $out/vagrant-plugins/plugins.d/vagrant-libvirt.json \
+      --subst-var-by ruby_version ${ruby.version} \
+      --subst-var-by vagrant_version ${version}
+  '';
+
+  installCheckPhase = ''
+    if [[ "$("$out/bin/vagrant" --version)" == "Vagrant ${version}" ]]; then
+      echo 'Vagrant smoke check passed'
+    else
+      echo 'Vagrant smoke check failed'
+      return 1
+    fi
+  '';
+
+  passthru = {
+    inherit ruby deps;
+  };
+
+  meta = with lib; {
+    description = "A tool for building complete development environments";
+    homepage = https://www.vagrantup.com/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ aneeshusa ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vagrant/gemset.nix b/nixpkgs/pkgs/development/tools/vagrant/gemset.nix
new file mode 100644
index 000000000000..9d98b3a48bde
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/gemset.nix
@@ -0,0 +1,491 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bcm2hchn897xjhqj9zzsxf3n9xhddymj4lsclz508f4vw3av46l";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  bcrypt_pbkdf = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cj4k13c7qvvck7y25i3xarvyqq8d27vl61jddifkc7llnnap1hv";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  builder = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1";
+      type = "gem";
+    };
+    version = "3.2.3";
+  };
+  childprocess = {
+    dependencies = ["ffi"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p3f43scdzx9zxmy2kw5zsc3az6v46nq4brwcxmnscjy4w4racbv";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  concurrent-ruby = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ixcx9pfissxrga53jbdpza85qd5f6b5nq1sfqa9rnfq82qnlbp1";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  crack = {
+    dependencies = ["safe_yaml"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0abb0fvgw00akyik1zxnq7yv391va148151qxdghnzngv66bl62k";
+      type = "gem";
+    };
+    version = "0.4.3";
+  };
+  diff-lcs = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza";
+      type = "gem";
+    };
+    version = "1.3";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0abdlwb64ns7ssmiqhdwgl27ly40x2l27l8hs8hn0z4kb3zd2x3v";
+      type = "gem";
+    };
+    version = "0.5.20180417";
+  };
+  ed25519 = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f5kr8za7hvla38fc0n9jiv55iq62k5bzclsa5kdb14l3r4w6qnw";
+      type = "gem";
+    };
+    version = "1.2.4";
+  };
+  erubis = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  fake_ftp = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rn7lxdk3sqc2i4v2c5k25b9ca1qnkdf32nv04y760aml9mszwf7";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  ffi = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  gssapi = {
+    dependencies = ["ffi"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j93nsf9j57p7x4aafalvjg8hia2mmqv3aky7fmw2ck5yci343ix";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  gyoku = {
+    dependencies = ["builder"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wn0sl14396g5lyvp8sjmcb1hw9rbyi89gxng91r7w4df4jwiidh";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  hashdiff = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19ykg5pax8798nh1yv71adkx0zzs7gn2rxjj86v7nsw0jba5lask";
+      type = "gem";
+    };
+    version = "0.3.8";
+  };
+  hashicorp-checkpoint = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z6mwzvd7p2wqhmk07dwrhvm0ncgqm7pxn0pr2k025rwsspp9bsd";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  httpclient = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gcp1m1p6dpasycfz2sj82ci9ggz7lsskz9c9q6gvfwxrl8y9dx7";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  listen = {
+    dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx";
+      type = "gem";
+    };
+    version = "3.1.5";
+  };
+  little-plugger = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  log4r = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ri90q0frfmigkirqv5ihyrj59xm8pq5zcmf156cbdv4r4l2jicv";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  logging = {
+    dependencies = ["little-plugger" "multi_json"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06j6iaj89h9jhkx1x3hlswqrfnqds8br05xb1qra69dpvbdmjcwn";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fjxy1jm52ixpnv3vg9ld9pr9f35gy0jp66i1njhqjvmnvq0iwwk";
+      type = "gem";
+    };
+    version = "3.2.2";
+  };
+  mime-types-data = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07wvp0aw2gjm4njibb70as6rh5hi1zzri5vky1q6jx95h8l56idc";
+      type = "gem";
+    };
+    version = "3.2018.0812";
+  };
+  multi_json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  net-scp = {
+    dependencies = ["net-ssh"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b0jqrcsp4bbi4n4mzyf70cp2ysyp6x07j8k8cqgxnvb4i3a134j";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  net-sftp = {
+    dependencies = ["net-ssh"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04674g4n6mryjajlcd82af8g8k95la4b1bj712dh71hw1c9vhw1y";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  net-ssh = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jglf8rxvlw6is5019r6kwsdhw38zm3z39jbghdbj449r6h7h77n";
+      type = "gem";
+    };
+    version = "5.1.0";
+  };
+  netrc = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gzfmcywp1da8nzfqsql2zqi648mfnx6qwkig3cv36n9m0yy676y";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  nori = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  public_suffix = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l";
+      type = "gem";
+    };
+    version = "3.0.3";
+  };
+  rake = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01j8fc9bqjnrsxbppncai05h43315vmz9fwg28qdsgcjw9ck1d7n";
+      type = "gem";
+    };
+    version = "12.0.0";
+  };
+  rb-fsevent = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8";
+      type = "gem";
+    };
+    version = "0.10.3";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fs7hxm9g6ywv2yih83b879klhc4fs8i0p9166z795qmd77dk0a4";
+      type = "gem";
+    };
+    version = "0.10.0";
+  };
+  rb-kqueue = {
+    dependencies = ["ffi"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14mhzrhs2j43vj36i1qq4z29nd860shrslfik015f4kf1jiaqcrw";
+      type = "gem";
+    };
+    version = "0.2.5";
+  };
+  rest-client = {
+    dependencies = ["http-cookie" "mime-types" "netrc"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hzcs2r7b5bjkf2x2z3n8z6082maz0j8vqjiciwgg3hzb63f958j";
+      type = "gem";
+    };
+    version = "2.0.2";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16g3mmih999f0b6vcz2c3qsc7ks5zy4lj1rzjh8hf6wk531nvc6s";
+      type = "gem";
+    };
+    version = "3.5.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nacs062qbr98fx6czf1vwppn1js956nv2c8vfwj6i65axdfs46i";
+      type = "gem";
+    };
+    version = "3.5.4";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bbqfrb1x8gmwf8x2xhhwvvlhwbbafq4isbvlibxi6jk602f09gs";
+      type = "gem";
+    };
+    version = "3.5.0";
+  };
+  rspec-its = {
+    dependencies = ["rspec-core" "rspec-expectations"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pwphny5jawcm1hda3vs9pjv1cybaxy17dc1s75qd7drrvx697p3";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  rspec-mocks = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nl3ksivh9wwrjjd47z5dggrwx40v6gpb3a0gzbp1gs06a5dmk24";
+      type = "gem";
+    };
+    version = "3.5.0";
+  };
+  rspec-support = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10vf3k3d472y573mag2kzfsfrf6rv355s13kadnpryk8d36yq5r0";
+      type = "gem";
+    };
+    version = "3.5.0";
+  };
+  ruby_dep = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v0qznxz999lx4vs76mr590r90i0cm5m76wwvgis7sq4y21l308l";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  rubyntlm = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p6bxsklkbcqni4bcq6jajc2n57g0w5rzn4r49c3lb04wz5xg0dy";
+      type = "gem";
+    };
+    version = "0.6.2";
+  };
+  rubyzip = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n1lb2sdwh9h27y244hxzg1lrxxg2m53pk1vq7p33bna003qkyrj";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  safe_yaml = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  thor = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0d1g37j6sc7fkidf8rqlm3wh9zgyg3g7y8h2x1y34hmil5ywa8c3";
+      type = "gem";
+    };
+    version = "0.18.1";
+  };
+  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 = "06p1i6qhy34bpb8q8ms88y6f2kz86azwm098yvcc0nyqk9y729j1";
+      type = "gem";
+    };
+    version = "0.0.7.5";
+  };
+  vagrant = {
+    dependencies = ["bcrypt_pbkdf" "childprocess" "ed25519" "erubis" "hashicorp-checkpoint" "i18n" "listen" "log4r" "net-scp" "net-sftp" "net-ssh" "rb-kqueue" "rest-client" "ruby_dep" "rubyzip" "vagrant_cloud" "wdm" "winrm" "winrm-elevated" "winrm-fs"];
+  };
+  vagrant-spec = {
+    dependencies = ["childprocess" "log4r" "rspec" "thor"];
+    source = {
+      fetchSubmodules = false;
+      rev = "abfc34474d122235d56e4c6b6fb5d3e35bedfa90";
+      sha256 = "08xy2c82lrxkwjlvrbx1v32968a6psni3952y3knriqgygv2kzbn";
+      type = "git";
+      url = "https://github.com/hashicorp/vagrant-spec.git";
+    };
+    version = "0.0.1";
+  };
+  vagrant_cloud = {
+    dependencies = ["rest-client"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0451x3ab869hbycffcq656dm7mmjwmnxcyhv6g7dpdv3acg64783";
+      type = "gem";
+    };
+    version = "2.0.2";
+  };
+  wdm = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0x5l2pn4x92734k6i2wcjbn2klmwgkiqaajvxadh35k74dgnyh18";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  webmock = {
+    dependencies = ["addressable" "crack" "hashdiff"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04hkcqsmbfnp8g237pisnc834vpgildklicbjbyikqg0bg1rwcy5";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  winrm = {
+    dependencies = ["builder" "erubis" "gssapi" "gyoku" "httpclient" "logging" "nori" "rubyntlm"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l299w172hl023b3v2vnbx4cqfjq9k2pp8blc1dz8n6g9dc6pk9f";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  winrm-elevated = {
+    dependencies = ["winrm" "winrm-fs"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1saqc3ffh075y6fdkc7iqmn0v3pnidvfw0sh09w9cn6jvpsdxizk";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  winrm-fs = {
+    dependencies = ["erubis" "logging" "rubyzip" "winrm"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fy4yj52kssrm5hchq7l2mbry6w6yvi736p1wjpyv8m19rx7k0c3";
+      type = "gem";
+    };
+    version = "1.3.2";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/vagrant/gemset_libvirt.nix b/nixpkgs/pkgs/development/tools/vagrant/gemset_libvirt.nix
new file mode 100644
index 000000000000..2631833dc009
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/gemset_libvirt.nix
@@ -0,0 +1,118 @@
+{
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15l9w0938c19nxmrp09n75qpmm64k12xj69h47yvxzcxcpbgnkb2";
+      type = "gem";
+    };
+    version = "0.62.0";
+  };
+  fog-core = {
+    dependencies = ["builder" "excon" "formatador"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ac25s2wv7m6av7h7vjzd2bg3srhnn5yrz3lq1xpimhnfmp82sw6";
+      type = "gem";
+    };
+    version = "1.43.0";
+  };
+  fog-json = {
+    dependencies = ["fog-core" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zj8llzc119zafbmfa4ai3z5s7c4vp9akfs0f9l2piyvcarmlkyx";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  fog-libvirt = {
+    dependencies = ["fog-core" "fog-json" "fog-xml" "json" "ruby-libvirt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gk16gsjd51x71wla7h5jqr6x5ywpwz5l8jdv76f9mr6fp1j2bkf";
+      type = "gem";
+    };
+    version = "0.5.0";
+  };
+  fog-xml = {
+    dependencies = ["fog-core" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "043lwdw2wsi6d55ifk0w3izi5l1d1h0alwyr3fixic7b94kc812n";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  formatador = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0";
+      type = "gem";
+    };
+    version = "0.2.5";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0byyxrazkfm29ypcx5q4syrv126nvjnf7z6bqi01sqkv4llsi4qz";
+      type = "gem";
+    };
+    version = "1.8.5";
+  };
+  ruby-libvirt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0d754d6pgdqyq52pl9hp0x38q1vn3vf9nz4nm5gqdj5i4fw7pba6";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  vagrant-libvirt = {
+    dependencies = ["fog-core" "fog-libvirt" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wm5yvml3sxdzpnlp4q6yhy695syy8byd1g7cxll4pmj1kwlknym";
+      type = "gem";
+    };
+    version = "0.0.45";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vagrant/unofficial-installation-nowarn.patch b/nixpkgs/pkgs/development/tools/vagrant/unofficial-installation-nowarn.patch
new file mode 100644
index 000000000000..7b4ce471c94d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/unofficial-installation-nowarn.patch
@@ -0,0 +1,16 @@
+diff --git a/bin/vagrant b/bin/vagrant
+index 0e6abdc..cb36e9c 100755
+--- a/bin/vagrant
++++ b/bin/vagrant
+@@ -155,11 +155,6 @@ begin
+     end
+   end
+ 
+-  if !Vagrant.in_installer? && !Vagrant.very_quiet?
+-    # If we're not in the installer, warn.
+-    env.ui.warn(I18n.t("vagrant.general.not_in_installer") + "\n", prefix: false)
+-  end
+-
+   # Acceptable experimental flag values include:
+   #
+   # Unset  - Disables experimental features
diff --git a/nixpkgs/pkgs/development/tools/vagrant/use-system-bundler-version.patch b/nixpkgs/pkgs/development/tools/vagrant/use-system-bundler-version.patch
new file mode 100644
index 000000000000..c386acf4a1c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/use-system-bundler-version.patch
@@ -0,0 +1,13 @@
+diff --git i/lib/vagrant/bundler.rb w/lib/vagrant/bundler.rb
+index 301e40e37..e361ab510 100644
+--- i/lib/vagrant/bundler.rb
++++ w/lib/vagrant/bundler.rb
+@@ -217,7 +217,7 @@ module Vagrant
+       source_list = {}
+       system_plugins = plugins.map do |plugin_name, plugin_info|
+         plugin_name if plugin_info["system"]
+-      end.compact
++      end.compact << "bundler"
+       installer_set = VagrantSet.new(:both)
+       installer_set.system_plugins = system_plugins
+ 
diff --git a/nixpkgs/pkgs/development/tools/vagrant/vagrant-libvirt.json.in b/nixpkgs/pkgs/development/tools/vagrant/vagrant-libvirt.json.in
new file mode 100644
index 000000000000..22060e1c2db7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/vagrant-libvirt.json.in
@@ -0,0 +1,9 @@
+{
+  "vagrant-libvirt": {
+    "ruby_version":"@ruby_version@",
+    "vagrant_version":"@vagrant_version@",
+    "gem_version":"",
+    "require":"",
+    "sources":[]
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/valadoc/default.nix b/nixpkgs/pkgs/development/tools/valadoc/default.nix
new file mode 100644
index 000000000000..ebeb81c90ec5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/valadoc/default.nix
@@ -0,0 +1,27 @@
+{stdenv, fetchurl, gnome3, automake, autoconf, which, libtool, pkgconfig, graphviz, glib, gobject-introspection, expat}:
+stdenv.mkDerivation rec {
+  version = "0.36.2";
+  name = "valadoc-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/valadoc/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "0hfaskbm7y4z4jf6lxm8hg4c0b8621qn1gchxjxcngq0cpx79z9h";
+  };
+
+  nativeBuildInputs = [ automake autoconf which gnome3.vala libtool pkgconfig gobject-introspection ];
+  buildInputs = [ graphviz glib gnome3.libgee expat ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = "valadoc";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "A documentation generator for generating API documentation from Vala source code";
+    homepage    = https://valadoc.org;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ sternenseemann ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vcstool/default.nix b/nixpkgs/pkgs/development/tools/vcstool/default.nix
new file mode 100644
index 000000000000..f6c160de65c3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vcstool/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, python3Packages
+, git, bazaar, subversion }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  name = "${pname}-${version}";
+  pname = "vcstool";
+  version = "0.1.36";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "3c3d347f46cda641344ec5d613896499981b0540e2bfa299baf6026dab7649ca";
+  };
+
+  propagatedBuildInputs = [ pyyaml ];
+
+  makeWrapperArgs = ["--prefix" "PATH" ":" "${stdenv.lib.makeBinPath [ git bazaar subversion ]}"];
+
+  doCheck = false; # requires network
+
+  meta = with stdenv.lib; {
+    description = "Provides a command line tool to invoke vcs commands on multiple repositories";
+    homepage = https://github.com/dirk-thomas/vcstool;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ sivteck ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vgo2nix/default.nix b/nixpkgs/pkgs/development/tools/vgo2nix/default.nix
new file mode 100644
index 000000000000..9601771f75f0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vgo2nix/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, lib
+, buildGoPackage
+, go
+, makeWrapper
+, nix-prefetch-git
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  name = "vgo2nix-${version}";
+  version = "unstable-2019-02-06";
+  goPackagePath = "github.com/adisbladis/vgo2nix";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchFromGitHub {
+    owner = "adisbladis";
+    repo = "vgo2nix";
+    rev = "f2694cd352830f0561bc00bbcaa08cefb2e36439";
+    sha256 = "10cwi67cyhqjq1pwhry2n1v8z7wybl4cawzmjmfgs5mbsvqp0h78";
+  };
+
+  goDeps = ./deps.nix;
+
+  allowGoReference = true;
+
+  postInstall = with stdenv; let
+    binPath = lib.makeBinPath [ nix-prefetch-git go ];
+  in ''
+    wrapProgram $bin/bin/vgo2nix --prefix PATH : ${binPath}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Convert go.mod files to nixpkgs buildGoPackage compatible deps.nix files";
+    homepage = https://github.com/adisbladis/vgo2nix;
+    license = licenses.mit;
+    maintainers = with maintainers; [ adisbladis ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/vgo2nix/deps.nix b/nixpkgs/pkgs/development/tools/vgo2nix/deps.nix
new file mode 100644
index 000000000000..4f8506794d36
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vgo2nix/deps.nix
@@ -0,0 +1,147 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+  {
+    goPackagePath = "github.com/alecthomas/assert";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/assert";
+      rev = "405dbfeb8e38";
+      sha256 = "1l567pi17k593nrd1qlbmiq8z9jy3qs60px2a16fdpzjsizwqx8l";
+    };
+  }
+  {
+    goPackagePath = "github.com/alecthomas/colour";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/colour";
+      rev = "60882d9e2721";
+      sha256 = "0iq566534gbzkd16ixg7fk298wd766821vvs80838yifx9yml5vs";
+    };
+  }
+  {
+    goPackagePath = "github.com/alecthomas/kingpin";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/kingpin";
+      rev = "v2.2.6";
+      sha256 = "0mndnv3hdngr3bxp7yxfd47cas4prv98sqw534mx7vp38gd88n5r";
+    };
+  }
+  {
+    goPackagePath = "github.com/alecthomas/repr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/repr";
+      rev = "117648cd9897";
+      sha256 = "05v1rgzdqc8razf702laagrvhvx68xd9yxxmzd3dyz0d6425pdrp";
+    };
+  }
+  {
+    goPackagePath = "github.com/alecthomas/template";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/template";
+      rev = "a0175ee3bccc";
+      sha256 = "0qjgvvh26vk1cyfq9fadyhfgdj36f1iapbmr5xp6zqipldz8ffxj";
+    };
+  }
+  {
+    goPackagePath = "github.com/alecthomas/units";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/units";
+      rev = "2efee857e7cf";
+      sha256 = "1j65b91qb9sbrml9cpabfrcf07wmgzzghrl7809hjjhrmbzri5bl";
+    };
+  }
+  {
+    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/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev = "v0.0.3";
+      sha256 = "06w45aqz2a6yrk25axbly2k5wmsccv8cspb94bfmz4izvw8h927n";
+    };
+  }
+  {
+    goPackagePath = "github.com/orivej/e";
+    fetch = {
+      type = "git";
+      url = "https://github.com/orivej/e";
+      rev = "ac3492690fda";
+      sha256 = "11jizr28kfkr6zscjxg95pqi6cjp08aqnhs41sdhc98nww78ilkr";
+    };
+  }
+  {
+    goPackagePath = "github.com/orivej/go-nix";
+    fetch = {
+      type = "git";
+      url = "https://github.com/orivej/go-nix";
+      rev = "dae45d921a44";
+      sha256 = "17hfmsz8hs3h2d5c06j1bvbw8ijrhzm3iz911z5zydsl4x7y0cgy";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/profile";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/profile";
+      rev = "v1.2.1";
+      sha256 = "0blqmvgqvdbqmh3fp9pfdxc9w1qfshrr0zy9whj0sn372bw64qnr";
+    };
+  }
+  {
+    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/sergi/go-diff";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sergi/go-diff";
+      rev = "v1.0.0";
+      sha256 = "0swiazj8wphs2zmk1qgq75xza6m19snif94h2m6fi8dqkwqdl7c7";
+    };
+  }
+  {
+    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 = "d99a578cf41b";
+      sha256 = "10q9xx4pmnq92qn6ff4xp7n1hx766wvw2rf7pqcd6rx5plgwz8cm";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "ded554d0681e";
+      sha256 = "04rlq9hc3ccww9sbsrl48fl6wbjprb136rqxyr7dmgfj444aml56";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/vim-vint/default.nix b/nixpkgs/pkgs/development/tools/vim-vint/default.nix
new file mode 100644
index 000000000000..3e8a228bacf1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vim-vint/default.nix
@@ -0,0 +1,38 @@
+{ fetchFromGitHub, lib, python3Packages }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  name = "vim-vint-${version}";
+  version = "0.3.20";
+
+  src = fetchFromGitHub {
+    owner = "kuniwak";
+    repo = "vint";
+    rev = "v${version}";
+    sha256 = "0ij9br4z9h8qay6l41sicr4lbjc38hxsn3lgjrj9zpn2b3585syx";
+  };
+
+  # For python 3.5 > version > 2.7 , a nested dependency (pythonPackages.hypothesis) fails.
+  disabled = ! pythonAtLeast "3.5";
+
+  # Prevent setup.py from adding dependencies in run-time and insisting on specific package versions
+  postPatch = ''
+    substituteInPlace setup.py --replace "return requires" "return []"
+  '';
+  checkInputs = [ pytest ];
+  propagatedBuildInputs = [ ansicolor chardet pyyaml ] ;
+
+  # The acceptance tests check for stdout and location of binary files, which fails in nix-build.
+  checkPhase = ''
+    py.test -k "not acceptance"
+  '';
+
+  meta = with lib; {
+    description = "Fast and Highly Extensible Vim script Language Lint implemented by Python";
+    homepage = https://github.com/Kuniwak/vint;
+    license = licenses.mit;
+    maintainers = with maintainers; [ andsild ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vndr/default.nix b/nixpkgs/pkgs/development/tools/vndr/default.nix
new file mode 100644
index 000000000000..42cf6f07f4d0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vndr/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "vndr-unstable-${version}";
+  version = "2018-06-23";
+  rev = "81cb8916aad3c8d06193f008dba3e16f82851f52";
+
+  goPackagePath = "github.com/LK4D4/vndr";
+  excludedPackages = "test";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "LK4D4";
+    repo = "vndr";
+    sha256 = "0c0k0cic35d1141az72gbf8r0vm9zaq4xi8v1sqpxhlzf28m297l";
+  };
+
+  meta = {
+    description = "Stupid golang vendoring tool, inspired by docker vendor script";
+    homepage = https://github.com/LK4D4/vndr;
+    maintainers = with lib.maintainers; [ vdemeester ];
+    license = lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vogl/default.nix b/nixpkgs/pkgs/development/tools/vogl/default.nix
new file mode 100644
index 000000000000..e87ba2b52c14
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vogl/default.nix
@@ -0,0 +1,56 @@
+{ mkDerivation, lib, fetchFromGitHub
+, cmake, git, pkgconfig, wget, zip
+, qtbase, qtx11extras
+, libdwarf, libjpeg_turbo, libunwind, lzma, tinyxml, libX11
+, SDL2, SDL2_gfx, SDL2_image, SDL2_ttf
+, freeglut, libGLU
+, fetchpatch
+}:
+
+mkDerivation rec {
+  name = "vogl-${version}";
+  version = "2016-05-13";
+
+  src = fetchFromGitHub {
+    owner  = "deepfire";
+    repo   = "vogl";
+    rev    = "cbc5f1853e294b363f16c4e00b3e0c49dbf74559";
+    sha256 = "17gwd73x3lnqv6ccqs48pzqwbzjhbn41c0x0l5zzirhiirb3yh0n";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-qt59.patch";
+      url = "https://github.com/ValveSoftware/vogl/commit/be3d85f.patch";
+      sha256 = "1yh4jd35mds337waqxdw3w22w7ghn05b5jm7fb4iihl39mhq6qyv";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  buildInputs = [
+    git wget zip
+    qtbase qtx11extras
+    libdwarf libjpeg_turbo libunwind lzma tinyxml libX11
+    SDL2 SDL2_gfx SDL2_image SDL2_ttf
+    freeglut libGLU
+  ];
+
+  dontUseCmakeBuildDir = true;
+  preConfigure = ''
+    cmakeDir=$PWD
+    mkdir -p vogl/vogl_build/release64 && cd $_
+  '';
+  cmakeFlags = [
+    "-DCMAKE_VERBOSE=On"
+    "-DBUILD_X64=On"
+  ];
+
+  meta = with lib; {
+    description = "OpenGL capture / playback debugger.";
+    homepage = https://github.com/ValveSoftware/vogl;
+    license = licenses.mit;
+    maintainers = [ maintainers.deepfire ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vulkan-validation-layers/default.nix b/nixpkgs/pkgs/development/tools/vulkan-validation-layers/default.nix
new file mode 100644
index 000000000000..702b7a564b22
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vulkan-validation-layers/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, callPackage, fetchFromGitHub, cmake, writeText, python3
+, vulkan-headers, vulkan-loader, glslang
+, pkgconfig, xlibsWrapper, libxcb, libXrandr, wayland }:
+stdenv.mkDerivation rec {
+  name = "vulkan-validation-layers-${version}";
+  version = "1.1.101.0"; # WARNING: glslang overrides in all-packages.nix must be updated to match known-good.json!
+
+  src = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "Vulkan-ValidationLayers";
+    rev = "sdk-${version}";
+    sha256 = "00gz72m393i3m3rh5hv9d0znzlz39cpw35ifchzb4cr11bi4mzyz";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ cmake python3 vulkan-headers vulkan-loader xlibsWrapper libxcb libXrandr wayland ];
+  enableParallelBuilding = true;
+
+  cmakeFlags = [ "-DGLSLANG_INSTALL_DIR=${glslang}" ];
+
+  # Help vulkan-loader find the validation layers
+  setupHook = writeText "setup-hook" ''
+    export XDG_DATA_DIRS=@out@/share:$XDG_DATA_DIRS
+  '';
+
+  # Include absolute paths to layer libraries in their associated
+  # layer definition json files.
+  patchPhase = ''
+    sed "s|\([[:space:]]*set(INSTALL_DEFINES \''${INSTALL_DEFINES} -DRELATIVE_LAYER_BINARY=\"\)\(\$<TARGET_FILE_NAME:\''${TARGET_NAME}>\")\)|\1$out/lib/\2|" -i layers/CMakeLists.txt
+  '';
+
+  meta = with stdenv.lib; {
+    description = "LunarG Vulkan loader";
+    homepage    = https://www.lunarg.com;
+    platforms   = platforms.linux;
+    license     = licenses.asl20;
+    maintainers = [ maintainers.ralith ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vultr/default.nix b/nixpkgs/pkgs/development/tools/vultr/default.nix
new file mode 100644
index 000000000000..8e17c531547d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vultr/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "vultr-${version}";
+  version = "1.15.0";
+  goPackagePath = "github.com/JamesClonk/vultr";
+
+  src = fetchFromGitHub {
+    owner = "JamesClonk";
+    repo = "vultr";
+    rev = "${version}";
+    sha256 = "1bx2x17aa6wfn4qy9lxk8sh7shs3x5ppz2z49s0xm8qq0rs1qi92";
+  };
+
+  meta = {
+    description = "A command line tool for Vultr services, a provider for cloud virtual private servers";
+    homepage = https://github.com/JamesClonk/vultr;
+    license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [ stdenv.lib.maintainers.zauberpony ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wabt/default.nix b/nixpkgs/pkgs/development/tools/wabt/default.nix
new file mode 100644
index 000000000000..e9ced0e753a0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wabt/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, cmake, python3 }:
+
+stdenv.mkDerivation rec {
+  name = "wabt-${version}";
+  version = "1.0.11";
+
+  src = fetchFromGitHub {
+    owner  = "WebAssembly";
+    repo   = "wabt";
+    rev    = version;
+    sha256 = "0hn88vlqyclpk79v3wg3lrssd9vwhjdgvb41g03jqakygxxgnmp5";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  cmakeFlags = [ "-DBUILD_TESTS=OFF" ];
+  buildInputs = [ python3 ];
+
+  meta = with stdenv.lib; {
+    description = "The WebAssembly Binary Toolkit";
+    longDescription = ''
+      WABT (pronounced "wabbit") is a suite of tools for WebAssembly, including:
+       * wat2wasm: translate from WebAssembly text format to the WebAssembly
+         binary format
+       * wasm2wat: the inverse of wat2wasm, translate from the binary format
+         back to the text format (also known as a .wat)
+       * wasm-objdump: print information about a wasm binary. Similiar to
+         objdump.
+       * wasm-interp: decode and run a WebAssembly binary file using a
+         stack-based interpreter
+       * wat-desugar: parse .wat text form as supported by the spec interpreter
+         (s-expressions, flat syntax, or mixed) and print "canonical" flat
+         format
+       * wasm2c: convert a WebAssembly binary file to a C source and header
+    '';
+    homepage = https://github.com/WebAssembly/wabt;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ekleog ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wasm-pack/default.nix b/nixpkgs/pkgs/development/tools/wasm-pack/default.nix
new file mode 100644
index 000000000000..5827844c1b58
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wasm-pack/default.nix
@@ -0,0 +1,36 @@
+{ stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkgconfig
+, openssl
+}:
+
+rustPlatform.buildRustPackage rec {
+  name = "wasm-pack-${version}";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "rustwasm";
+    repo = "wasm-pack";
+    rev = "v${version}";
+    sha256 = "1z66m16n4r16zqmnv84a5jndr5x6mdqdq4b1wq929sablwqd2rl4";
+  };
+
+  cargoSha256 = "0hp68w5mvk725gzbmlgl8j6wa1dv2fydil7jvq0f09mzxxaqrwcs";
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ openssl ];
+
+  # Tests fetch external resources and build artifacts.
+  # Disabled to work with sandboxing
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A utility that builds rust-generated WebAssembly package";
+    homepage = https://github.com/rustwasm/wasm-pack;
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.dhkl ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/watchman/default.nix b/nixpkgs/pkgs/development/tools/watchman/default.nix
new file mode 100644
index 000000000000..b349ecf61e13
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/watchman/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, lib, config, fetchFromGitHub, autoconf, automake, pcre,
+  libtool, pkgconfig, openssl,
+  confFile ? config.watchman.confFile or null,
+  withApple ? stdenv.isDarwin, CoreServices, CoreFoundation
+}:
+
+stdenv.mkDerivation rec {
+  name = "watchman-${version}";
+
+  version = "4.9.0";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = "watchman";
+    rev = "v${version}";
+    sha256 = "0fdaj5pmicm6j17d5q7px800m5rmam1a400x3hv1iiifnmhgnkal";
+  };
+
+  buildInputs = [ pcre openssl ]
+               ++ lib.optionals withApple [ CoreFoundation CoreServices ];
+  nativeBuildInputs = [ autoconf automake pkgconfig libtool ];
+
+  configureFlags = [
+      "--enable-lenient"
+      "--enable-conffile=${if confFile == null then "no" else confFile}"
+      "--with-pcre=yes"
+
+      # For security considerations re: --disable-statedir, see:
+      # https://github.com/facebook/watchman/issues/178
+      "--disable-statedir"
+  ];
+
+  prePatch = ''
+    patchShebangs .
+  '';
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "Watches files and takes action when they change";
+    homepage    = https://facebook.github.io/watchman;
+    maintainers = with maintainers; [ cstrahan ];
+    platforms   = with platforms; linux ++ darwin;
+    license     = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wiggle/default.nix b/nixpkgs/pkgs/development/tools/wiggle/default.nix
new file mode 100644
index 000000000000..df32d68767fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wiggle/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, ncurses, groff }:
+
+stdenv.mkDerivation {
+
+  name = "wiggle-1.1";
+
+  src = fetchurl {
+    url = "https://github.com/neilbrown/wiggle/archive/v1.1.tar.gz";
+    sha256 = "0gg1c0zcrd5fgawvjccmdscm3fka8h1qz4v807kvy1b2y1cf9c4w";
+  };
+
+  buildInputs = [ ncurses groff ];
+
+  configurePhase = ''
+    makeFlagsArray=( CFLAGS="-I. -O3"
+                     STRIP="-s"
+                     INSTALL="install"
+                     BINDIR="$out/bin"
+                     MANDIR="$out/share/man"
+                   )
+    patchShebangs .
+  '';
+
+  meta = {
+    homepage = http://blog.neil.brown.name/category/wiggle/;
+    description = "Tool for applying patches with conflicts";
+
+    longDescription = ''
+       Wiggle applies patches to a file in a similar manner to the patch(1)
+       program. The distinctive difference is, however, that wiggle will
+       attempt to apply a patch even if the "before" part of the patch doesn't
+       match the target file perfectly. This is achieved by breaking the file
+       and patch into words and finding the best alignment of words in the file
+       with words in the patch. Once this alignment has been found, any
+       differences (word-wise) in the patch are applied to the file as best as
+       possible. Also, wiggle will (in some cases) detect changes that have
+       already been applied, and will ignore them.
+    '';
+
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.all;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/wiiload/default.nix b/nixpkgs/pkgs/development/tools/wiiload/default.nix
new file mode 100644
index 000000000000..aaf1b20ea6f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wiiload/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, zlib }:
+stdenv.mkDerivation rec {
+  version = "v0.5.1";
+  name = "wiiload-${version}";
+
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ zlib ];
+
+  src = fetchFromGitHub {
+    owner = "devkitPro";
+    repo  = "wiiload";
+    rev = version;
+    sha256 = "0dffy603zggkqv7g1a2jninmi64vy519gpgkdfhjnijhdm9gs5m3";
+  };
+
+  preConfigure = "./autogen.sh";
+
+  meta = with stdenv.lib; {
+    description = "Load homebrew apps over network/usbgecko to your Wii";
+    homepage = https://wiibrew.org/wiki/Wiiload;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ tomsmeets ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/winpdb/default.nix b/nixpkgs/pkgs/development/tools/winpdb/default.nix
new file mode 100644
index 000000000000..e0c897499d2a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/winpdb/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, pythonPackages, makeDesktopItem }:
+
+pythonPackages.buildPythonApplication rec {
+  name = "winpdb-1.4.8";
+  namePrefix = "";
+
+  src = fetchurl {
+    url = "https://winpdb.googlecode.com/files/${name}.tar.gz";
+    sha256 = "0vkpd24r40j928vc04c721innv0168sbllg97v4zw10adm24d8fs";
+  };
+
+  propagatedBuildInputs = [ pythonPackages.wxPython ];
+
+  desktopItem = makeDesktopItem {
+    name = "winpdb";
+    exec = "winpdb";
+    icon = "winpdb";
+    comment = "Platform independend Python debugger";
+    desktopName = "Winpdb";
+    genericName = "Python Debugger";
+    categories = "Application;Development;Debugger;";
+  };
+
+  # Don't call gnome-terminal with "--disable-factory" flag, which is
+  # unsupported since GNOME >= 3.10. Apparently, debian also does this fix:
+  # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=757718
+  postPatch = ''
+    sed -i "s/--disable-factory//" rpdb2.py
+  '';
+
+  postInstall = ''
+    mkdir -p "$out"/share/applications
+    cp "$desktopItem"/share/applications/* "$out"/share/applications/
+
+    mkdir -p "$out"/share/icons
+    cp artwork/winpdb-icon.svg "$out"/share/icons/winpdb.svg
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Platform independent Python debugger";
+    longDescription = ''
+      Winpdb is a platform independent GPL Python debugger with support for
+      multiple threads, namespace modification, embedded debugging, encrypted
+      communication and is up to 20 times faster than pdb.
+    '';
+    homepage = http://winpdb.org/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wllvm/default.nix b/nixpkgs/pkgs/development/tools/wllvm/default.nix
new file mode 100644
index 000000000000..18d7be93258b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wllvm/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  version = "1.2.2";
+  pname = "wllvm";
+  name = "${pname}-${version}";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "1zrjcabv41105mmv632gp488kmhya37n0jwgwxhadps4z3jv2qxb";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/travitch/whole-program-llvm;
+    description = "A wrapper script to build whole-program LLVM bitcode files";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mic92 dtzWill ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wp-cli/default.nix b/nixpkgs/pkgs/development/tools/wp-cli/default.nix
new file mode 100644
index 000000000000..211f71693976
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wp-cli/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, lib, fetchurl, writeScript, writeText, php, runtimeShell }:
+
+let
+  version = "2.0.1";
+
+  completion = fetchurl {
+    url    = "https://raw.githubusercontent.com/wp-cli/wp-cli/v${version}/utils/wp-completion.bash";
+    sha256 = "15d330x6d3fizrm6ckzmdknqg6wjlx5fr87bmkbd5s6a1ihs0g24";
+  };
+
+in stdenv.mkDerivation rec {
+  name = "wp-cli-${version}";
+  inherit version;
+
+  src = fetchurl {
+    url    = "https://github.com/wp-cli/wp-cli/releases/download/v${version}/${name}.phar";
+    sha256 = "05lbay4c0477465vv4h8d2j94pk3haz1a7f0ncb127fvxz3a2pcg";
+  };
+
+  buildCommand = ''
+    dir=$out/share/wp-cli
+    mkdir -p $out/bin $dir
+
+    cat <<_EOF > $out/bin/wp
+#!${runtimeShell}
+
+set -euo pipefail
+
+exec ${lib.getBin php}/bin/php \\
+  -c $dir/php.ini \\
+  -f $dir/wp-cli -- "\$@"
+_EOF
+    chmod 0755 $out/bin/wp
+
+    cat <<_EOF > $dir/php.ini
+[PHP]
+memory_limit = -1 ; no limit as composer uses a lot of memory
+
+[Phar]
+phar.readonly = Off
+_EOF
+
+    install -Dm644 ${src}        $dir/wp-cli
+    install -Dm644 ${completion} $out/share/bash-completion/completions/wp
+
+    # this is a very basic run test
+    $out/bin/wp --info
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A command line interface for WordPress";
+    homepage    = https://wp-cli.org;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ws/default.nix b/nixpkgs/pkgs/development/tools/ws/default.nix
new file mode 100644
index 000000000000..17c64f0548b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ws/default.nix
@@ -0,0 +1,26 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  name = "ws-${version}";
+  version = "0.2.1";
+  rev = "e9404cb37e339333088b36f6a7909ff3be76931d";
+
+  goPackagePath = "github.com/hashrocket/ws";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/hashrocket/ws";
+    sha256 = "192slrz1cj1chzmfrl0d9ai8bq6s4w0iwpvxkhxb9krga7mkp9xb";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "websocket command line tool";
+    homepage    = https://github.com/hashrocket/ws;
+    license     = licenses.mit;
+    maintainers = [ maintainers.the-kenny ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ws/deps.nix b/nixpkgs/pkgs/development/tools/ws/deps.nix
new file mode 100644
index 000000000000..82988437145f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ws/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev = "5df930a27be2502f99b292b7cc09ebad4d0891f4";
+      sha256 = "1xqwvpn5jkp1xqvv9hx4h7cxrsnamryhy2pszcqpbm28dpd3airb";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/default.nix b/nixpkgs/pkgs/development/tools/xcbuild/default.nix
new file mode 100644
index 000000000000..29325fad7243
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/default.nix
@@ -0,0 +1,67 @@
+{ stdenv, cmake, fetchFromGitHub, zlib, libxml2, libpng
+, CoreServices, CoreGraphics, ImageIO, ninja }:
+
+let
+  googletest = fetchFromGitHub {
+    owner  = "google";
+    repo   = "googletest";
+    rev    = "43359642a1c16ad3f4fc575c7edd0cb935810815";
+    sha256 = "0y4xaah62fjr3isaryc3vfz3mn9xflr00vchdimj8785milxga4q";
+  };
+
+  linenoise = fetchFromGitHub {
+    owner  = "antirez";
+    repo   = "linenoise";
+    rev    = "c894b9e59f02203dbe4e2be657572cf88c4230c3";
+    sha256 = "0wasql7ph5g473zxhc2z47z3pjp42q0dsn4gpijwzbxawid71b4w";
+  };
+in stdenv.mkDerivation rec {
+  name    = "xcbuild-${version}";
+
+  # Once a version is released that includes
+  # https://github.com/facebook/xcbuild/commit/183c087a6484ceaae860c6f7300caf50aea0d710,
+  # we can stop doing this -pre thing.
+  version = "0.1.2-pre";
+
+  src = fetchFromGitHub {
+    owner  = "facebook";
+    repo   = "xcbuild";
+    rev    = "32b9fbeb69bfa2682bd0351ec2f14548aaedd554";
+    sha256 = "1xxwg2849jizxv0g1hy0b1m3i7iivp9bmc4f5pi76swsn423d41m";
+  };
+
+  prePatch = ''
+    rmdir ThirdParty/*
+    cp -r --no-preserve=all ${googletest} ThirdParty/googletest
+    cp -r --no-preserve=all ${linenoise} ThirdParty/linenoise
+  '';
+
+  # Avoid a glibc >= 2.25 deprecation warning that gets fatal via -Werror.
+  postPatch = stdenv.lib.optionalString (!stdenv.isDarwin) ''
+    sed 1i'#include <sys/sysmacros.h>' \
+      -i Libraries/xcassets/Headers/xcassets/Slot/SystemVersion.h
+  '';
+
+  enableParallelBuilding = true;
+
+  # TODO: instruct cmake not to put it in /usr, rather than cleaning up
+  postInstall = ''
+    mv $out/usr/* $out
+    rmdir $out/usr
+  '';
+
+  NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  cmakeFlags = [ "-GNinja" ];
+
+  buildInputs = [ cmake zlib libxml2 libpng ninja ]
+    ++ stdenv.lib.optionals stdenv.isDarwin [ CoreServices CoreGraphics ImageIO ];
+
+  meta = with stdenv.lib; {
+    description = "Xcode-compatible build tool";
+    homepage = https://github.com/facebook/xcbuild;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ copumpkin matthewbauer ];
+    license = with licenses; [ bsd2 bsd3 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/platforms.nix b/nixpkgs/pkgs/development/tools/xcbuild/platforms.nix
new file mode 100644
index 000000000000..e20dc878b535
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/platforms.nix
@@ -0,0 +1,301 @@
+{ runCommand, lib, sdks, xcodePlatform, writeText }:
+
+let
+
+  inherit (lib.generators) toPlist;
+
+  Info = {
+    CFBundleIdentifier = "com.apple.platform.${lib.toLower xcodePlatform}";
+    Type = "Platform";
+    Name = lib.toLower xcodePlatform;
+  };
+
+  Version = {
+    ProjectName = "OSXPlatformSupport";
+  };
+
+  # These files are all based off of Xcode spec fies found in
+  # /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Speciications/.
+
+  # Based off of the MacOSX Architectures.xcpsec file. All i386 stuff
+  # is removed because NixPkgs only supports darwin-x86_64.
+  Architectures = [
+    {
+      Identifier = "Standard";
+      Type = "Architecture";
+      Name = "Standard Architectures (64-bit Intel)";
+      RealArchitectures = [ "x86_64" ];
+      ArchitectureSetting = "ARCHS_STANDARD";
+    }
+    {
+      Identifier = "Universal";
+      Type = "Architecture";
+      Name = "Universal (64-bit Intel)";
+      RealArchitectures = [ "x86_64" ];
+      ArchitectureSetting = "ARCHS_STANDARD_32_64_BIT";
+    }
+    {
+      Identifier = "Native";
+      Type = "Architecture";
+      Name = "Native Architecture of Build Machine";
+      ArchitectureSetting = "NATIVE_ARCH_ACTUAL";
+    }
+    {
+      Identifier = "Standard64bit";
+      Type = "Architecture";
+      Name = "64-bit Intel";
+      RealArchitectures = [ "x86_64" ];
+      ArchitectureSetting = "ARCHS_STANDARD_64_BIT";
+    }
+    {
+      Identifier = "x86_64";
+      Type = "Architecture";
+      Name = "Intel 64-bit";
+    }
+    {
+      Identifier = "Standard_Including_64_bit";
+      Type = "Architecture";
+      Name = "Standard Architectures (including 64-bit)";
+      RealArchitectures = [ "x86_64" ];
+      ArchitectureSetting = "ARCHS_STANDARD_INCLUDING_64_BIT";
+    }
+  ];
+
+  # Based off of the MacOSX Package Types.xcpsec file. Only keep the
+  # bare minimum needed.
+  PackageTypes = [
+    {
+      Identifier = "com.apple.package-type.mach-o-executable";
+      Type = "PackageType";
+      Name = "Mach-O Executable";
+      DefaultBuildSettings = {
+        EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+        EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+      };
+      ProductReference = {
+        FileType = "compiled.mach-o.executable";
+        Name = "$(EXECUTABLE_NAME)";
+      };
+    }
+    {
+      Identifier = "com.apple.package-type.mach-o-objfile";
+      Type = "PackageType";
+      Name = "Mach-O Object File";
+      DefaultBuildSettings = {
+        EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+        EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+      };
+      ProductReference = {
+        FileType = "compiled.mach-o.objfile";
+        Name = "$(EXECUTABLE_NAME)";
+      };
+    }
+    {
+      Identifier = "com.apple.package-type.mach-o-dylib";
+      Type = "PackageType";
+      Name = "Mach-O Dynamic Library";
+      DefaultBuildSettings = {
+        EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+        EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+      };
+      ProductReference = {
+        FileType = "compiled.mach-o.dylib";
+        Name = "$(EXECUTABLE_NAME)";
+      };
+    }
+    {
+      Identifier = "com.apple.package-type.static-library";
+      Type = "PackageType";
+      Name = "Mach-O Static Library";
+      DefaultBuildSettings = {
+        EXECUTABLE_PREFIX = "lib";
+        EXECUTABLE_SUFFIX = ".a";
+        EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+        EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+      };
+      ProductReference = {
+        FileType = "archive.ar";
+        Name = "$(EXECUTABLE_NAME)";
+        IsLaunchable = "NO";
+      };
+    }
+    {
+      Identifier = "com.apple.package-type.wrapper";
+      Type = "PackageType";
+      Name = "Wrapper";
+      DefaultBuildSettings = {
+        WRAPPER_SUFFIX = ".bundle";
+        WRAPPER_NAME = "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)";
+        CONTENTS_FOLDER_PATH = "$(WRAPPER_NAME)/Contents";
+        EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+        EXECUTABLE_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/MacOS";
+        EXECUTABLE_PATH = "$(EXECUTABLE_FOLDER_PATH)/$(EXECUTABLE_NAME)";
+        INFOPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/Info.plist";
+        INFOSTRINGS_PATH = "$(LOCALIZED_RESOURCES_FOLDER_PATH)/InfoPlist.strings";
+        PKGINFO_PATH = "$(CONTENTS_FOLDER_PATH)/PkgInfo";
+        PBDEVELOPMENTPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/pbdevelopment.plist";
+        VERSIONPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/version.plist";
+        PUBLIC_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Headers";
+        PRIVATE_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PrivateHeaders";
+        EXECUTABLES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Executables";
+        FRAMEWORKS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Frameworks";
+        SHARED_FRAMEWORKS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/SharedFrameworks";
+        SHARED_SUPPORT_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/SharedSupport";
+        UNLOCALIZED_RESOURCES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Resources";
+        LOCALIZED_RESOURCES_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/$(DEVELOPMENT_LANGUAGE).lproj";
+        DOCUMENTATION_FOLDER_PATH = "$(LOCALIZED_RESOURCES_FOLDER_PATH)/Documentation";
+        PLUGINS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PlugIns";
+        SCRIPTS_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/Scripts";
+      };
+      ProductReference = {
+        FileType = "wrapper.cfbundle";
+        Name = "$(WRAPPER_NAME)";
+        IsLaunchable = "NO";
+      };
+    }
+    {
+      Identifier = "com.apple.package-type.wrapper.application";
+      Type = "PackageType";
+      BasedOn = "com.apple.package-type.wrapper";
+      Name = "Application Wrapper";
+      DefaultBuildSettings = {
+        GENERATE_PKGINFO_FILE = "YES";
+      };
+      ProductReference = {
+        FileType = "wrapper.application";
+        Name = "$(WRAPPER_NAME)";
+        IsLaunchable = "YES";
+      };
+    }
+  ];
+
+  # Based off of the MacOSX Product Types.xcpsec file. All
+  # bundles/wrapper are removed, because we prefer dynamic products in
+  # NixPkgs.
+  ProductTypes = [
+    {
+      Identifier = "com.apple.product-type.tool";
+      Type = "ProductType";
+      Name = "Command-line Tool";
+      PackageTypes = [ "com.apple.package-type.mach-o-executable" ];
+    }
+    {
+      Identifier = "com.apple.product-type.objfile";
+      Type = "ProductType";
+      Name = "Object File";
+      PackageTypes = [ "com.apple.package-type.mach-o-objfile" ];
+    }
+    {
+      Identifier = "com.apple.product-type.library.dynamic";
+      Type = "ProductType";
+      Name = "Dynamic Library";
+      PackageTypes = [ "com.apple.package-type.mach-o-dylib" ];
+      DefaultBuildProperties = {
+        FULL_PRODUCT_NAME = "$(EXECUTABLE_NAME)";
+        MACH_O_TYPE = "mh_dylib";
+        REZ_EXECUTABLE = "YES";
+        EXECUTABLE_SUFFIX = ".$(EXECUTABLE_EXTENSION)";
+        EXECUTABLE_EXTENSION = "dylib";
+        DYLIB_COMPATIBILITY_VERSION = "1";
+        DYLIB_CURRENT_VERSION = "1";
+        FRAMEWORK_FLAG_PREFIX = "-framework";
+        LIBRARY_FLAG_PREFIX = "-l";
+        LIBRARY_FLAG_NOSPACE = "YES";
+        STRIP_STYLE = "debugging";
+        GCC_INLINES_ARE_PRIVATE_EXTERN = "YES";
+        CODE_SIGNING_ALLOWED = "YES";
+        CODE_SIGNING_REQUIRED = "NO";
+      };
+    }
+    {
+      Identifier = "com.apple.product-type.library.static";
+      Type = "ProductType";
+      Name = "Static Library";
+      PackageTypes = [ "com.apple.package-type.static-library" ];
+      DefaultBuildProperties = {
+        FULL_PRODUCT_NAME = "$(EXECUTABLE_NAME)";
+        MACH_O_TYPE = "staticlib";
+        REZ_EXECUTABLE = "YES";
+        EXECUTABLE_PREFIX = "lib";
+        EXECUTABLE_SUFFIX = ".$(EXECUTABLE_EXTENSION)";
+        EXECUTABLE_EXTENSION = "a";
+        FRAMEWORK_FLAG_PREFIX = "-framework";
+        LIBRARY_FLAG_PREFIX = "-l";
+        LIBRARY_FLAG_NOSPACE = "YES";
+        STRIP_STYLE = "debugging";
+        SEPARATE_STRIP = "YES";
+        CLANG_ENABLE_MODULE_DEBUGGING = "NO";
+      };
+    }
+    {
+      Type = "ProductType";
+      Identifier = "com.apple.product-type.bundle";
+      Name = "Bundle";
+      DefaultBuildProperties = {
+        FULL_PRODUCT_NAME = "$(WRAPPER_NAME)";
+        MACH_O_TYPE = "mh_bundle";
+        WRAPPER_PREFIX = "";
+        WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
+        WRAPPER_EXTENSION = "bundle";
+        WRAPPER_NAME = "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)";
+        FRAMEWORK_FLAG_PREFIX = "-framework";
+        LIBRARY_FLAG_PREFIX = "-l";
+        LIBRARY_FLAG_NOSPACE = "YES";
+        STRIP_STYLE = "non-global";
+      };
+      PackageTypes = [ "com.apple.package-type.wrapper" ];
+      IsWrapper = "YES";
+      HasInfoPlist = "YES";
+      HasInfoPlistStrings = "YES";
+    }
+    {
+      Identifier = "com.apple.product-type.application";
+      Type = "ProductType";
+      BasedOn = "com.apple.product-type.bundle";
+      Name = "Application";
+      DefaultBuildProperties = {
+        MACH_O_TYPE = "mh_execute";
+        WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
+        WRAPPER_EXTENSION = "app";
+      };
+      PackageTypes = [ "com.apple.package-type.wrapper.application" ];
+    }
+    {
+      Type = "ProductType";
+      Identifier = "com.apple.product-type.framework";
+      Name = "Bundle";
+      DefaultBuildProperties = {
+        FULL_PRODUCT_NAME = "$(WRAPPER_NAME)";
+        MACH_O_TYPE = "mh_bundle";
+        WRAPPER_PREFIX = "";
+        WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
+        WRAPPER_EXTENSION = "bundle";
+        WRAPPER_NAME = "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)";
+        FRAMEWORK_FLAG_PREFIX = "-framework";
+        LIBRARY_FLAG_PREFIX = "-l";
+        LIBRARY_FLAG_NOSPACE = "YES";
+        STRIP_STYLE = "non-global";
+      };
+      PackageTypes = [ "com.apple.package-type.wrapper" ];
+      IsWrapper = "YES";
+      HasInfoPlist = "YES";
+      HasInfoPlistStrings = "YES";
+    }
+  ];
+
+in
+
+runCommand "Platforms" {} ''
+  platform=$out/${xcodePlatform}.platform
+
+  install -D ${writeText "Info.plist" (toPlist {} Info)} $platform/Info.plist
+  install -D ${writeText "version.plist" (toPlist {} Version)} $platform/version.plist
+  install -D ${writeText "Architectures.xcspec" (toPlist {} Architectures)} $platform/Developer/Library/Xcode/Specifications/Architectures.xcspec
+  install -D ${writeText "PackageTypes.xcspec" (toPlist {} PackageTypes)} $platform/Developer/Library/Xcode/Specifications/PackageTypes.xcspec
+  install -D ${writeText "ProductTypes.xcspec" (toPlist {} ProductTypes)} $platform/Developer/Library/Xcode/Specifications/ProductTypes.xcspec
+
+  ln -s $platform $platform/usr
+
+  mkdir -p $platform/Developer
+  ln -s ${sdks} $platform/Developer/SDKs
+''
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/sdks.nix b/nixpkgs/pkgs/development/tools/xcbuild/sdks.nix
new file mode 100644
index 000000000000..74192d9c6744
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/sdks.nix
@@ -0,0 +1,29 @@
+{ stdenv, runCommand, lib, toolchainName, sdkName
+, writeText, version, xcodePlatform, libcxx, symlinkJoin }:
+
+let
+  inherit (lib.generators) toPlist;
+
+  SDKSettings = {
+    CanonicalName = sdkName;
+    DisplayName = sdkName;
+    Toolchains = [ toolchainName ];
+    Version = version;
+    MaximumDeploymentTarget = version;
+    isBaseSDK = "YES";
+  };
+
+  SystemVersion = {
+    ProductName = "Mac OS X";
+    ProductVersion = version;
+  };
+in
+
+runCommand "SDKs" {} ''
+  sdk=$out/${sdkName}.sdk
+  install -D ${writeText "SDKSettings.plist" (toPlist {} SDKSettings)} $sdk/SDKSettings.plist
+  install -D ${writeText "SystemVersion.plist" (toPlist {} SystemVersion)} $sdk/System/Library/CoreServices/SystemVersion.plist
+  ln -s $sdk $sdk/usr
+
+  ln -s $sdk $out/${xcodePlatform}.sdk
+''
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/setup-hook.sh b/nixpkgs/pkgs/development/tools/xcbuild/setup-hook.sh
new file mode 100644
index 000000000000..9dc03a61f62e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/setup-hook.sh
@@ -0,0 +1,29 @@
+xcbuildBuildPhase() {
+    export DSTROOT=$out
+
+    runHook preBuild
+
+    echo "running xcodebuild"
+
+    xcodebuild SYMROOT=$PWD/Products OBJROOT=$PWD/Intermediates $xcbuildFlags build
+
+    runHook postBuild
+}
+
+xcbuildInstallPhase () {
+    runHook preInstall
+
+    # not implemented
+    # xcodebuild install
+
+    runHook postInstall
+}
+
+buildPhase=xcbuildBuildPhase
+if [ -z "$installPhase" ]; then
+    installPhase=xcbuildInstallPhase
+fi
+
+# if [ -d "*.xcodeproj" ]; then
+#     buildPhase=xcbuildPhase
+# fi
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/toolchains.nix b/nixpkgs/pkgs/development/tools/xcbuild/toolchains.nix
new file mode 100644
index 000000000000..e435f0978c5e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/toolchains.nix
@@ -0,0 +1,73 @@
+{ runCommand, toolchainName, fetchurl, stdenv
+, buildPackages, lib, writeText }:
+
+let
+
+  inherit (lib) getBin optionalString;
+  inherit (lib.generators) toPlist;
+
+  ToolchainInfo = {
+    Identifier = toolchainName;
+  };
+
+  # We could pull this out of developer_cmds but it adds an annoying
+  # loop if we want to bootstrap and this is just a tiny script so I'm
+  # not going to bother.
+  mkdep-darwin-src = fetchurl {
+    url        = "https://opensource.apple.com/source/developer_cmds/developer_cmds-63/mkdep/mkdep.sh";
+    sha256     = "0n4wpqfslfjs5zbys5yri8pfi2awyhlmknsf6laa5jzqbzq9x541";
+    executable = true;
+  };
+in
+
+runCommand "Toolchains" {} (''
+  toolchain=$out/XcodeDefault.xctoolchain
+  mkdir -p $toolchain
+
+  install -D ${writeText "ToolchainInfo.plist" (toPlist {} ToolchainInfo)} $toolchain/ToolchainInfo.plist
+
+  ln -s $toolchain $toolchain/usr
+
+  mkdir -p $toolchain/include
+  mkdir -p $toolchain/lib
+  mkdir -p $toolchain/libexec
+  mkdir -p $toolchain/share
+  mkdir -p $toolchain/bin
+
+  for bin in ${getBin stdenv.cc}/bin/*; do
+    ln -s $bin $toolchain/bin
+  done
+
+  for bin in ${getBin stdenv.cc.bintools.bintools}/bin/*; do
+    if ! [ -e "$toolchain/bin/$(basename $bin)" ]; then
+      ln -s $bin $toolchain/bin
+    fi
+  done
+
+  ln -s ${buildPackages.yacc}/bin/yacc $toolchain/bin/yacc
+  ln -s ${buildPackages.yacc}/bin/bison $toolchain/bin/bison
+  ln -s ${buildPackages.flex}/bin/flex $toolchain/bin/flex
+  ln -s ${buildPackages.flex}/bin/flex++ $toolchain/bin/flex++
+  ln -s $toolchain/bin/flex $toolchain/bin/lex
+
+  ln -s ${buildPackages.m4}/bin/m4 $toolchain/bin/m4
+  ln -s $toolchain/bin/m4 $toolchain/bin/gm4
+
+  ln -s ${buildPackages.unifdef}/bin/unifdef $toolchain/bin/unifdef
+  ln -s ${buildPackages.unifdef}/bin/unifdefall $toolchain/bin/unifdefall
+
+  ln -s ${buildPackages.gperf}/bin/gperf $toolchain/bin/gperf
+  ln -s ${buildPackages.indent}/bin/indent $toolchain/bin/indent
+  ln -s ${buildPackages.ctags}/bin/ctags $toolchain/bin/ctags
+'' + optionalString stdenv.isDarwin ''
+  for bin in ${getBin buildPackages.darwin.cctools}/bin/*; do
+    if ! [ -e "$toolchain/bin/$(basename $bin)" ]; then
+      ln -s $bin $toolchain/bin
+    fi
+  done
+
+  ln -s ${buildPackages.darwin.bootstrap_cmds}/bin/mig $toolchain/bin
+  mkdir -p $toolchain/libexec
+  ln -s ${buildPackages.darwin.bootstrap_cmds}/libexec/migcom $toolchain/libexec
+  ln -s ${mkdep-darwin-src} $toolchain/bin/mkdep
+'')
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix b/nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix
new file mode 100644
index 000000000000..bc49a48778fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix
@@ -0,0 +1,138 @@
+{ stdenv, lib, buildPackages, makeWrapper, writeText, runCommand
+, CoreServices, ImageIO, CoreGraphics
+, runtimeShell, callPackage
+, xcodePlatform ? stdenv.targetPlatform.xcodePlatform or "MacOSX"
+, xcodeVer ? stdenv.targetPlatform.xcodeVer or "9.4.1"
+, sdkVer ? stdenv.targetPlatform.sdkVer or "10.12" }:
+
+let
+
+  toolchainName = "com.apple.dt.toolchain.XcodeDefault";
+  sdkName = "${xcodePlatform}${sdkVer}";
+
+  # TODO: expose MACOSX_DEPLOYMENT_TARGET in nix so we can use it here.
+  sdkBuildVersion = "17E189";
+  xcodeSelectVersion = "2349";
+
+  xcbuild = callPackage ./default.nix {
+    inherit CoreServices ImageIO CoreGraphics stdenv;
+  };
+
+  toolchains = callPackage ./toolchains.nix {
+    inherit toolchainName stdenv;
+  };
+
+  sdks = callPackage ./sdks.nix {
+    inherit toolchainName sdkName xcodePlatform;
+    version = sdkVer;
+  };
+
+  platforms = callPackage ./platforms.nix {
+    inherit sdks xcodePlatform;
+  };
+
+  xcconfig = writeText "nix.xcconfig" ''
+    SDKROOT=${sdkName}
+  '';
+
+  xcode-select = writeText "xcode-select" ''
+#!${runtimeShell}
+while [ $# -gt 0 ]; do
+   case "$1" in
+         -h | --help) ;; # noop
+         -s | --switch) shift;; # noop
+         -r | --reset) ;; # noop
+         -v | --version) echo xcode-select version ${xcodeSelectVersion} ;;
+         -p | -print-path | --print-path) echo @DEVELOPER_DIR@ ;;
+         --install) ;; # noop
+    esac
+    shift
+done
+  '';
+
+  xcrun = writeText "xcrun" ''
+#!${runtimeShell}
+while [ $# -gt 0 ]; do
+   case "$1" in
+         --sdk | -sdk) shift ;;
+         --find | -find)
+           shift
+           command -v $1 ;;
+         --log | -log) ;; # noop
+         --verbose | -verbose) ;; # noop
+         --no-cache | -no-cache) ;; # noop
+         --kill-cache | -kill-cache) ;; # noop
+         --show-sdk-path | -show-sdk-path)
+           echo ${sdks}/${sdkName}.sdk ;;
+         --show-sdk-platform-path | -show-sdk-platform-path)
+           echo ${platforms}/${xcodePlatform}.platform ;;
+         --show-sdk-version | -show-sdk-version)
+           echo ${sdkVer} ;;
+         --show-sdk-build-version | -show-sdk-build-version)
+           echo ${sdkBuildVersion} ;;
+         *) break ;;
+    esac
+    shift
+done
+if ! [[ -z "$@" ]]; then
+   exec "$@"
+fi
+  '';
+
+in
+
+runCommand "xcodebuild-${xcbuild.version}" {
+  nativeBuildInputs = [ makeWrapper ];
+  inherit (xcbuild) meta;
+
+  # ensure that the toolchain goes in PATH
+  propagatedBuildInputs = [ "${toolchains}/XcodeDefault.xctoolchain" ];
+
+  passthru = {
+    inherit xcbuild;
+    toolchain = "${toolchains}/XcodeDefault.xctoolchain";
+    sdk = "${sdks}/${sdkName}";
+    platform = "${platforms}/${xcodePlatform}.platform";
+  };
+
+  preferLocalBuild = true;
+} ''
+  mkdir -p $out/bin
+
+  ln -s $out $out/usr
+
+  mkdir -p $out/Library/Xcode
+  ln -s ${xcbuild}/Library/Xcode/Specifications $out/Library/Xcode/Specifications
+
+  ln -s ${platforms} $out/Platforms
+  ln -s ${toolchains} $out/Toolchains
+
+  mkdir -p $out/Applications/Xcode.app/Contents
+  ln -s $out $out/Applications/Xcode.app/Contents/Developer
+
+  makeWrapper ${xcbuild}/bin/xcodebuild $out/bin/xcodebuild \
+    --add-flags "-xcconfig ${xcconfig}" \
+    --add-flags "DERIVED_DATA_DIR=." \
+    --set DEVELOPER_DIR "$out" \
+    --set SDKROOT ${sdkName} \
+    --run '[ "$1" = "-version" ] && [ "$#" -eq 1 ] && (echo Xcode ${xcodeVer}; echo Build version ${sdkBuildVersion}) && exit 0' \
+    --run '[ "$1" = "-license" ] && exit 0'
+
+  substitute ${xcode-select} $out/bin/xcode-select \
+    --subst-var-by DEVELOPER_DIR $out/Applications/Xcode.app/Contents/Developer
+  chmod +x $out/bin/xcode-select
+
+  substitute ${xcrun} $out/bin/xcrun
+  chmod +x $out/bin/xcrun
+
+  for bin in PlistBuddy actool builtin-copy builtin-copyPlist \
+             builtin-copyStrings builtin-copyTiff \
+             builtin-embeddedBinaryValidationUtility \
+             builtin-infoPlistUtility builtin-lsRegisterURL \
+             builtin-productPackagingUtility builtin-validationUtility \
+             lsbom plutil; do
+    ln -s ${xcbuild}/bin/$bin $out/bin/$bin
+  done
+
+  fixupPhase
+''
diff --git a/nixpkgs/pkgs/development/tools/xcpretty/Gemfile b/nixpkgs/pkgs/development/tools/xcpretty/Gemfile
new file mode 100644
index 000000000000..0b37143fe0eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcpretty/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'xcpretty'
diff --git a/nixpkgs/pkgs/development/tools/xcpretty/Gemfile.lock b/nixpkgs/pkgs/development/tools/xcpretty/Gemfile.lock
new file mode 100644
index 000000000000..6f1ba7545a82
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcpretty/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    rouge (2.0.7)
+    xcpretty (0.3.0)
+      rouge (~> 2.0.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  xcpretty
+
+BUNDLED WITH
+   1.16.4
diff --git a/nixpkgs/pkgs/development/tools/xcpretty/default.nix b/nixpkgs/pkgs/development/tools/xcpretty/default.nix
new file mode 100644
index 000000000000..99af752086f6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcpretty/default.nix
@@ -0,0 +1,27 @@
+{ lib, bundlerApp, bundler, bundix }:
+
+bundlerApp {
+  pname = "xcpretty";
+  gemdir = ./.;
+
+  exes = [ "xcpretty" ];
+
+  passthru = {
+    updateScript = ''
+      set -e
+      echo
+      cd ${toString ./.}
+      ${bundler}/bin/bundle lock --update
+      ${bundix}/bin/bundix
+    '';
+  };
+
+  meta = with lib; {
+    description     = "Flexible and fast xcodebuild formatter";
+    homepage        = https://github.com/supermarin/xcpretty;
+    license         = licenses.mit;
+    maintainers     = with maintainers; [
+      nicknovitski
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/xcpretty/gemset.nix b/nixpkgs/pkgs/development/tools/xcpretty/gemset.nix
new file mode 100644
index 000000000000..30c68a93c13f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcpretty/gemset.nix
@@ -0,0 +1,19 @@
+{
+  rouge = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sfikq1q8xyqqx690iiz7ybhzx87am4w50w8f2nq36l3asw4x89d";
+      type = "gem";
+    };
+    version = "2.0.7";
+  };
+  xcpretty = {
+    dependencies = ["rouge"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xq47q2h5llj7b54rws4796904vnnjz7qqnacdv7wlp3gdbwrivm";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/development/tools/xib2nib/default.nix b/nixpkgs/pkgs/development/tools/xib2nib/default.nix
new file mode 100644
index 000000000000..4d62f5b85714
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xib2nib/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchFromGitHub, pugixml, boost, PlistCpp }:
+
+stdenv.mkDerivation {
+  name = "xib2nib-730e177";
+
+  src = fetchFromGitHub {
+    owner = "matthewbauer";
+    repo = "xib2nib";
+    rev = "97c6a53aab83d919805efcae33cf80690e953d1e";
+    sha256 = "08442f4xg7racknj35nr56a4c62gvdgdw55pssbkn2qq0rfzziqq";
+  };
+
+  buildInputs = [ PlistCpp pugixml boost ];
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    maintainers = with maintainers; [ matthewbauer ];
+    description = "Compiles CocoaTouch .xib files into .nib";
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/xqilla/default.nix b/nixpkgs/pkgs/development/tools/xqilla/default.nix
new file mode 100644
index 000000000000..c163c4cbcf69
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xqilla/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, xercesc }:
+
+stdenv.mkDerivation rec {
+  name    = "xqilla-${version}";
+  version = "2.3.4";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/xqilla/XQilla-${version}.tar.gz";
+    sha256 = "0m9z7diw7pdyb4qycbqyr2x55s13v8310xsi7yz0inpw27q4vzdd";
+  };
+
+  configureFlags = [ "--with-xerces=${xercesc}" ];
+
+  meta = with stdenv.lib; {
+    description = "XQilla is an XQuery and XPath 2 library and command line utility written in C++, implemented on top of the Xerces-C library.";
+    license     = licenses.asl20 ;
+    maintainers = with maintainers; [ obadz ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/yaml2json/default.nix b/nixpkgs/pkgs/development/tools/yaml2json/default.nix
new file mode 100644
index 000000000000..1a8d7f13aff5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yaml2json/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+
+buildGoPackage rec {
+  name = "yaml2json-${version}";
+  version = "unstable-2017-05-03";
+  goPackagePath = "github.com/bronze1man/yaml2json";
+
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    rev = "ee8196e587313e98831c040c26262693d48c1a0c";
+    owner = "bronze1man";
+    repo = "yaml2json";
+    sha256 = "16a2sqzbam5adbhfvilnpdabzwncs7kgpr0cn4gp09h2imzsprzw";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/bronze1man/yaml2json;
+    description = "Convert yaml to json";
+    license = with licenses; [ mit ];
+    maintainers = [ maintainers.adisbladis ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/yaml2json/deps.nix b/nixpkgs/pkgs/development/tools/yaml2json/deps.nix
new file mode 100644
index 000000000000..f907520cc872
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yaml2json/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "d670f9405373e636a5a2765eea47fac0c9bc91a4";
+      sha256 = "1w1xid51n8v1mydn2m3vgggw8qgpd5a5sr62snsc77d99fpjsrs0";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/yarn/default.nix b/nixpkgs/pkgs/development/tools/yarn/default.nix
new file mode 100644
index 000000000000..38620863ebfb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, nodejs, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "yarn";
+  version = "1.16.0";
+
+  src = fetchzip {
+    url = "https://github.com/yarnpkg/yarn/releases/download/v${version}/yarn-v${version}.tar.gz";
+    sha256 = "1ki518ppw7bka4bfgvsv9s8x785vy23nvi7ihsw6ivisrg5v0w7w";
+  };
+
+  buildInputs = [ nodejs ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,libexec/yarn/}
+    cp -R . $out/libexec/yarn
+    ln -s $out/libexec/yarn/bin/yarn.js $out/bin/yarn
+    ln -s $out/libexec/yarn/bin/yarn.js $out/bin/yarnpkg
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://yarnpkg.com/;
+    description = "Fast, reliable, and secure dependency management for javascript";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ offline screendriver ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ydiff/default.nix b/nixpkgs/pkgs/development/tools/ydiff/default.nix
new file mode 100644
index 000000000000..c2f72138db5f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ydiff/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, lib, pythonPackages, python3Packages, less, patchutils, git
+, subversion, coreutils, which }:
+
+with pythonPackages;
+
+buildPythonApplication rec {
+  pname = "ydiff";
+  version = "1.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0mxcl17sx1d4vaw22ammnnn3y19mm7r6ljbarcjzi519klz26bnf";
+  };
+
+  patchPhase = ''
+    substituteInPlace tests/test_ydiff.py \
+      --replace /bin/rm ${coreutils}/bin/rm \
+      --replace /bin/sh ${stdenv.shell}
+    substituteInPlace Makefile \
+      --replace "pep8 --ignore" "# pep8 --ignore" \
+      --replace "python3 \`which coverage\`" "${python3Packages.coverage}/bin/coverage3" \
+      --replace /bin/sh ${stdenv.shell} \
+      --replace tests/regression.sh "${stdenv.shell} tests/regression.sh"
+    patchShebangs tests/*.sh
+  '';
+
+  buildInputs = [ docutils pygments ];
+  propagatedBuildInputs = [ less patchutils ];
+  checkInputs = [ coverage coreutils git subversion which ];
+
+  checkTarget = if isPy3k then "test3" else "test";
+
+  meta = {
+    homepage = https://github.com/ymattw/ydiff;
+    description = "View colored, incremental diff in workspace or from stdin";
+    longDescription = ''
+      Term based tool to view colored, incremental diff in a version
+      controlled workspace (supports Git, Mercurial, Perforce and Svn
+      so far) or from stdin, with side by side (similar to diff -y)
+      and auto pager support.
+    '';
+    license = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [ leenaars ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/yq/default.nix b/nixpkgs/pkgs/development/tools/yq/default.nix
new file mode 100644
index 000000000000..f93a24d56f9c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yq/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildPythonApplication, fetchPypi, pyyaml, xmltodict, jq }:
+
+buildPythonApplication rec {
+  pname = "yq";
+  version = "2.7.2";
+
+  propagatedBuildInputs = [ pyyaml xmltodict jq ];
+
+  # ValueError: underlying buffer has been detached
+  doCheck = false;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1fwvwy75n4rqzh6sxyp2jmjqc7939s0xmrhxw7zhdy6iacggvnpp";
+  };
+
+  meta = with lib; {
+    description = "Command-line YAML processor - jq wrapper for YAML documents.";
+    homepage = https://github.com/kislyuk/yq;
+    license = [ licenses.asl20 ];
+    maintainers = [ maintainers.womfoo ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/yuicompressor/default.nix b/nixpkgs/pkgs/development/tools/yuicompressor/default.nix
new file mode 100644
index 000000000000..c157ddd65a87
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yuicompressor/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  name = "yuicompressor-${version}";
+  version = "2.4.8";
+  
+  src = fetchurl {
+    url = "https://github.com/yui/yuicompressor/releases/download/v${version}/${name}.jar";
+    sha256 = "1qjxlak9hbl9zd3dl5ks0w4zx5z64wjsbk7ic73r1r45fasisdrh";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  buildCommand = ''
+    mkdir -p $out/{bin,lib}
+    ln -s $src $out/lib/yuicompressor.jar
+    makeWrapper ${jre}/bin/java $out/bin/yuicompressor --add-flags \
+     "-cp $out/lib/yuicompressor.jar com.yahoo.platform.yui.compressor.YUICompressor"
+  '';
+  
+  meta = with stdenv.lib; {
+    description = "A JavaScript and CSS minifier";
+    homepage = http://yui.github.io/yuicompressor/;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jwiegley ];
+    platforms = platforms.all;
+  };
+}