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/abuild/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/agda-pkg/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/air/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/alloy/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/alloy/icon.pngbin0 -> 17154 bytes
-rw-r--r--nixpkgs/pkgs/development/tools/altair-graphql-client/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/amazon-qldb-shell/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/ameba/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/ammonite/default.nix92
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/actionlint/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/autoflake/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/bingrep/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/binlore/default.nix112
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile.lock13
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/brakeman/default.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/brakeman/gemset.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cargo-tarpaulin/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cccc/cccc.patch24
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cccc/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/checkov/default.nix144
-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.patch35
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/clang-analyzer/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/coan/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/codeql/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cov-build/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/coz/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cppcheck/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cpplint/0001-Remove-pytest-runner-version-pin.patch16
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cpplint/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/cvehound/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/dotenv-linter/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/egypt/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/emma/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/eresi/default.nix66
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/evmdis/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/findbugs/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/flow/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/frama-c/default.nix87
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/gcc7.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilesim/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/hopper/default.nix80
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/hotspot/default.nix80
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/ikos/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/include-what-you-use/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/jdepend/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/kcov/default.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/lcov/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/makefile2graph/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/massif-visualizer/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/nix-linter/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/oclgrind/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/panopticon/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/pev/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/pmd/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/qcachegrind/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/radare2/default.nix119
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/randoop/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/retdec/default.nix233
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/retdec/yaracpp.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rizin/cutter.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rizin/default.nix81
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rr/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rr/unstable.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/rr/zen_workaround.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/smatch/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/snowman/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/sparse/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/sparse/tests.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/spin/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/splint/darwin.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/splint/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/splint/tmpdir.patch16
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/svlint/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/swarm/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/tartan/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/tflint/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/tfsec/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/uefi-firmware-parser/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix104
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/valkyrie/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/analysis/yallback/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/apkid/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/apksigcopier/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/apksigner/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/apktool/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/appthreat-depscan/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/ashpd-demo/default.nix80
-rw-r--r--nixpkgs/pkgs/development/tools/asmfmt/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/asmfmt/deps.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/asn2quickder/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/async-profiler/0001-Fix-darwin-build.patch27
-rw-r--r--nixpkgs/pkgs/development/tools/async-profiler/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/async/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/ats-acc/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/avro-tools/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/aws-sam-cli/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/azcopy/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/azure-functions-core-tools/default.nix74
-rw-r--r--nixpkgs/pkgs/development/tools/b4/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/backblaze-b2/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/bacon/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/bashate/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/bazel-gazelle/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/bazel-kazel/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/bazel-watcher/default.nix85
-rw-r--r--nixpkgs/pkgs/development/tools/bazel-watcher/use-go-in-path.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/bazelisk/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/bingo/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/bingo/version_go.patch17
-rw-r--r--nixpkgs/pkgs/development/tools/biodiff/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/bloaty/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/boomerang/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/boost-build/default.nix70
-rw-r--r--nixpkgs/pkgs/development/tools/buf/default.nix82
-rw-r--r--nixpkgs/pkgs/development/tools/buf/skip_test_requiring_dotgit.patch14
-rw-r--r--nixpkgs/pkgs/development/tools/buf/skip_test_requiring_network.patch15
-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.nix110
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/apache-ant/default.nix110
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/apache-maven/builder.sh18
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/apache-maven/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/arpa2cm/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bam/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/README.md7
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bash-tools-test.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/disable_build_file_generation.patch24
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_26/default.nix390
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_26/glibc.patch78
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_26/python-stub-path-fix.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_29/default.nix564
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_29/glibc.patch78
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_29/src-deps.json506
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_1/default.nix565
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_1/glibc.patch78
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_1/src-deps.json506
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_3/default.nix626
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_3/no-arc.patch34
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_3/src-deps.json861
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/actions_path.patch41
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/default.nix673
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/no-arc.patch34
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/src-deps.json1585
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/update-srcDeps.py54
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/actions_path.patch41
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/default.nix669
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/no-arc.patch42
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/src-deps.json1990
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/update-srcDeps.py54
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_rc.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/buildtools/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/cpp-test.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/java-test.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/nix-hacks.patch43
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/protobuf-test.nix180
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/python-bin-path-test.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/shebang-test.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/strict_action_env.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bazel/trim-last-argument-to-gcc-if-empty.patch37
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/bazel/update-srcDeps.py62
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bear/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bear/no-double-relative.patch22
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bloop/default.nix100
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bmake/bootstrap-fix.patch10
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bmake/default.nix113
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bmake/fix-localtime-test.patch23
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bmake/fix-unexport-env-test.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bmake/setup-hook.sh127
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/bmake/unconditional-ksh-test.patch12
-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.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/buck/pex-mtime.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/build2/bdep.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/build2/bootstrap.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/build2/bpkg.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/build2/default.nix98
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/build2/nix-ldflags-sysdirs.patch42
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/build2/remove-config-store-paths.patch14
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/build2/setup-hook.sh85
-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.patch43
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/cmake/darwin-always-set-runtime-c-flag.patch14
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/cmake/default.nix135
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/cmake/libuv-application-services.patch55
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/cmake/remove-systemconfiguration-dep.patch73
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/cmake/search-path.patch74
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/cmake/setup-hook.sh175
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/colormake/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/conan/default.nix112
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/corrosion/cmake-install-full-dir.patch18
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/corrosion/default.nix57
-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.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/drake/gemset.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/dub/default.nix155
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/ekam/default.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/fac/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gn/default.nix10
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gn/generic.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gn/rev1924.nix8
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gn/setup-hook.sh14
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/0001-No-impure-bin-sh.patch35
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/0002-remove-impure-dirs.patch40
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/default.nix61
-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/glibc-2.33-glob.patch17
-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/gnumake/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/go-mk/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gprbuild/boot.nix90
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gprbuild/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gprbuild/gpr-project-path-hook.sh8
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gprbuild/nixpkgs-gnat.xml56
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix132
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/gradle/update.sh67
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/gup/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/icmake/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/jam/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/jam/ftjam.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/kati/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/kati/version.patch19
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/leiningen/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/mage/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/allow-dirs-outside-of-prefix.patch19
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/boost-Do-not-add-system-paths-on-nix.patch21
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/clear-old-rpath.patch20
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/default.nix113
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/do-not-update-ldconfig-cache.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/fix-rpath.patch24
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/gir-fallback-path.patch21
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/more-env-vars.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/meson/setup-hook.sh37
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/mill/default.nix52
-rwxr-xr-xnixpkgs/pkgs/development/tools/build-managers/msbuild/create-deps.sh57
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/msbuild/default.nix150
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/msbuild/deps.nix1842
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/ninja/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/ninja/setup-hook.sh78
-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.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rake/gemset.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar3/default.nix139
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar3/global-plugins.patch14
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar-deps.nix118
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar_ignore_deps.erl43
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar3/skip-plugins.patch54
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rebar3/tmp-tests-skip.patch17
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/redo-apenwarr/default.nix73
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/redo-c/Makefile10
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/redo-c/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/redo-sh/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/redo/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/remake/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/remake/glibc-2.27-glob.patch34
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/rocm-cmake/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/samurai/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/sbt-extras/default.nix77
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/sbt/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/sbt/scala-native.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scala-cli/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scons/common.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scons/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/scons/setup-hook.sh84
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/shards/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/shards/shards.nix8
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/tup/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/tup/setup-hook.sh44
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/waf/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/wafHook/default.nix9
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/wafHook/setup-hook.sh80
-rw-r--r--nixpkgs/pkgs/development/tools/buildah/default.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/buildah/wrapper.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/buildkit/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/buildpack/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/bunyan-rs/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/butane/default.nix37
-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.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/cadre/gemset.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/capnproto-java/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/cargo-flamegraph/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/cargo-web/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/cask/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/castxml/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/cbor-diag/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/cbor-diag/Gemfile.lock21
-rw-r--r--nixpkgs/pkgs/development/tools/cbor-diag/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/cbor-diag/gemset.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/ccloud-cli/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/cddl/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/cddl/Gemfile.lock30
-rw-r--r--nixpkgs/pkgs/development/tools/cddl/default.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/cddl/gemset.nix95
-rw-r--r--nixpkgs/pkgs/development/tools/cdecl/cdecl-2.5-lex.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/cdecl/default.nix26
-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/checkmake/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/checkmate/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/chefdk/Gemfile17
-rw-r--r--nixpkgs/pkgs/development/tools/chefdk/Gemfile.lock770
-rw-r--r--nixpkgs/pkgs/development/tools/chefdk/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/chefdk/gemset.nix2529
-rw-r--r--nixpkgs/pkgs/development/tools/chit/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/circup/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/clang-tools/default.nix39
-rwxr-xr-xnixpkgs/pkgs/development/tools/clang-tools/wrapper27
-rw-r--r--nixpkgs/pkgs/development/tools/clj-kondo/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/clog-cli/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/cloud-nuke/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/cloudsmith-cli/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/clpm/default.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/cmake-format/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/cmake-language-server/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/cmake-language-server/disable-test-timeouts.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/cocogitto/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/comby/default.nix101
-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.nix17
-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/confluent-cli/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/conftest/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/container-linux-config-transpiler/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/generic.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildkite-cli/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/0001-use-different-upstream-for-gomod.patch23
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-docker/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-exec/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/fly/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/default.nix334
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/deps.nix258
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dir-proj.patch53
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dont-install-systemd-service.patch15
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/host-context-dirs.patch20
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/use-get-directory-for-diag.patch25
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/fix-shell-path.patch25
-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/hci/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix75
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/laminar/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/laminar/patches/no-network.patch39
-rw-r--r--nixpkgs/pkgs/development/tools/convco/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/corgi/default.nix27
-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.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/corundum/gemset.nix154
-rw-r--r--nixpkgs/pkgs/development/tools/coursier/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/cppclean/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/crd2pulumi/default.nix26
-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.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/cucumber/gemset.nix114
-rw-r--r--nixpkgs/pkgs/development/tools/cue/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/dapper/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/dapr/cli/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/database/beekeeper-studio/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/database/cdb/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/database/clickhouse-backup/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/database/dbmate/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/database/ephemeralpg/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/database/gobang/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/database/indradb/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/database/liquibase/default.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/database/litecli/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/database/litestream/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/database/movine/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/database/pg_activity/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/database/pg_checksums/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/database/pgcli/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/database/pgsync/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/database/pgsync/Gemfile.lock23
-rw-r--r--nixpkgs/pkgs/development/tools/database/pgsync/default.nix16
-rw-r--r--nixpkgs/pkgs/development/tools/database/pgsync/gemset.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/database/pgweb/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/database/prisma-engines/default.nix61
-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.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlcheck/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqldeveloper/default.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlfluff/default.nix70
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlite-web/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/database/sqlitebrowser/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/database/squirrel-sql/default.nix77
-rw-r--r--nixpkgs/pkgs/development/tools/database/termdbms/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/database/termdbms/viewer.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/database/timescaledb-parallel-copy/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/database/timescaledb-tune/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/database/timescaledb-tune/fixMinMaxConn.diff13
-rw-r--r--nixpkgs/pkgs/development/tools/database/webdis/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/datree/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/dcadec/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/ddosify/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/deadcode/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/deadnix/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/delve/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/dep/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/dep2nix/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/dep2nix/deps.nix129
-rw-r--r--nixpkgs/pkgs/development/tools/devd/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/devpi-client/default.nix79
-rw-r--r--nixpkgs/pkgs/development/tools/devpi-server/default.nix87
-rw-r--r--nixpkgs/pkgs/development/tools/devtodo/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/diesel-cli/default.nix82
-rw-r--r--nixpkgs/pkgs/development/tools/distgen/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/dive/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/dockfmt/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/dockle/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/doctl/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/antora/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/doxygen/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/gi-docgen/default.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/gnome-doc-utils/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/documentation/gtk-doc/default.nix92
-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.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/dot-http/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/dprint/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/drip/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/drm_info/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/dstp/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/dt-schema/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/dtools/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/dyff/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/earthly/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/easyjson/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/ec2-metadata-mock/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/eclipse-mat/default.nix118
-rw-r--r--nixpkgs/pkgs/development/tools/efm-langserver/default.nix23
-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.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/ejson/gemset.nix188
-rw-r--r--nixpkgs/pkgs/development/tools/electron/default.nix115
-rw-r--r--nixpkgs/pkgs/development/tools/electron/generic.nix118
-rwxr-xr-xnixpkgs/pkgs/development/tools/electron/print-hashes.sh39
-rw-r--r--nixpkgs/pkgs/development/tools/eliot-tree/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/elkhound/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/ent/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/errcheck/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/esbuild/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/esbuild/netlify.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/evans/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/f2c/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/faas-cli/default.nix40
-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.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/fission/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/flamegraph/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/flatpak-builder/default.nix158
-rw-r--r--nixpkgs/pkgs/development/tools/flatpak-builder/fix-paths.patch151
-rw-r--r--nixpkgs/pkgs/development/tools/flatpak-builder/fix-test-paths.patch111
-rw-r--r--nixpkgs/pkgs/development/tools/flatpak-builder/respect-xml-catalog-files-var.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/flawfinder/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/flip-link/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/flock/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/flootty/default.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/flyway/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/fmbt/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/fnlfmt/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/fnm/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/fortran-language-server/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/fprettify/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/fq/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/frugal/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/fundoc/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/fusee-launcher/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/galen/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/gamecube-tools/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/gauge/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/gdm/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/gdm/deps.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/geckodriver/cargo-lock.patch1455
-rw-r--r--nixpkgs/pkgs/development/tools/geckodriver/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/ginkgo/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/gir/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/git-aggregator/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/git-ftp/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/git-privacy/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/git-quick-stats/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/git-repo-updater/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/git-series/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile4
-rw-r--r--nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile.lock101
-rw-r--r--nixpkgs/pkgs/development/tools/github-changelog-generator/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/github-changelog-generator/gemset.nix420
-rw-r--r--nixpkgs/pkgs/development/tools/github-commenter/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/github/bump/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/github/cligh/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/github/github-release/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/glade/default.nix73
-rw-r--r--nixpkgs/pkgs/development/tools/glide/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/gllvm/default.nix22
-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/glpaper/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/glslviewer/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/gnome-desktop-testing/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/gnulib/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/go-bindata-assetfs/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/go-bindata/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/go-containerregistry/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/go-junit-report/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/go-langserver/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/go-migrate/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/go-minimock/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/go-mockery/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/go-motion/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/go-outline/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/go-protobuf/default.nix25
-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-swag/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/go-swagger/default.nix28
-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-task/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/go-toml/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/go-tools/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/go2nix/default.nix45
-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.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/gocode/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/gocode/deps.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/goconst/default.nix28
-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.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/godef/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/godot/default.nix103
-rw-r--r--nixpkgs/pkgs/development/tools/godot/dont_clobber_environment.patch19
-rw-r--r--nixpkgs/pkgs/development/tools/godot/export-templates.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/godot/headless.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/godot/pkg_config_additions.patch32
-rw-r--r--nixpkgs/pkgs/development/tools/godot/server.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/gofumpt/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/gogetdoc/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/gojsontoyaml/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/gokart/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/golangci-lint/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/golint/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/gomacro/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/gomodifytags/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/gomplate/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/google-app-engine-go-sdk/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/google-java-format/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/gopkgs/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/gopls/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/gops/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/gore/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/gosec/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/gotags/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/gotest/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/gotests/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/gotestsum/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/gotools/default.nix56
-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.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/gpp/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/grabserial/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/graphql-client/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/gron/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/gtk-mac-bundler/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/guile/g-wrap/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/guile/guile-lint/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/halfempty/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/dconf2nix/dconf2nix.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/dconf2nix/default.nix32
-rwxr-xr-xnixpkgs/pkgs/development/tools/haskell/dconf2nix/update.sh26
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/hyper-haskell/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/hyper-haskell/server.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/haskell/ihaskell/wrapper.nix27
-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/vaultenv/default.nix99
-rw-r--r--nixpkgs/pkgs/development/tools/hcloud/default.nix35
-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/hjson-go/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/hobbes/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/hors/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/hostess/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/hover/default.nix101
-rw-r--r--nixpkgs/pkgs/development/tools/hover/fix-assets-path.patch78
-rw-r--r--nixpkgs/pkgs/development/tools/htmlq/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/htmltest/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/iaca/2.1.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/iaca/3.0.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/icr/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/icr/shards.nix8
-rw-r--r--nixpkgs/pkgs/development/tools/iferr/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/ijq/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/imatix_gsl/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/img/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/impl/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/ineffassign/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/inferno/default.nix31
-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.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/java/cfr/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/java/dex2jar/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/java/fastjar/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/java/java-language-server/default.nix96
-rw-r--r--nixpkgs/pkgs/development/tools/java/jhiccup/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/java/sawjap/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/java/visualvm/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/jazzy/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/jazzy/Gemfile.lock109
-rw-r--r--nixpkgs/pkgs/development/tools/jazzy/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/jazzy/gemset.nix434
-rw-r--r--nixpkgs/pkgs/development/tools/jbake/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/jbang/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/jd-diff-patch/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/jd/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/jet/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/jfmt/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/jid/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/jid/deps.nix75
-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/jless/default.nix28
-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/jpexs/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/jq/default.nix76
-rw-r--r--nixpkgs/pkgs/development/tools/jql/default.nix22
-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.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/jsduck/gemset.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/json2hcl/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/json2hcl/deps.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/jsonnet-bundler/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/jtc/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/just/default.nix69
-rw-r--r--nixpkgs/pkgs/development/tools/k6/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/kafka-delta-ingest/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/kcat/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/kcli/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/kexpand/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/kgt/default.nix81
-rw-r--r--nixpkgs/pkgs/development/tools/kind/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/kind/kernel-module-path.patch47
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/genkfs/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/kcc/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/kimg/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/kpack/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/mkrom/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/mktiupgrade/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/patchrom/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/regenkfs/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/remkrom/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/scas/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/knightos/z80e/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/ko/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/konstraint/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/kotlin-language-server/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/krankerl/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/krew/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/ktlint/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/kube-aws/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/kube-linter/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/kube-prompt/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/kube-prompt/deps.nix993
-rw-r--r--nixpkgs/pkgs/development/tools/kubectx/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/kubeprompt/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/kubepug/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/kubepug/skip-external-network-tests.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/kubernetes-controller-tools/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/kubicorn/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/kubie/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/kustomize/3.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/kustomize/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/kustomize/kustomize-sops.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/kythe/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/lazygit/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/lc3tools/0001-mangle-configure.patch29
-rw-r--r--nixpkgs/pkgs/development/tools/lc3tools/0002-lc3os-path.patch21
-rw-r--r--nixpkgs/pkgs/development/tools/lc3tools/0003-lc3sim-tk-path.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/lc3tools/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/leaps/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/leaps/deps.nix165
-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.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/libsigrokdecode/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/Literate/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/eweb/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/funnelweb/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/md-tangle/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/literate-programming/noweb/default.nix83
-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/luaformatter/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/luaformatter/fix-lib-paths.patch67
-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/mani/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/manul/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/manul/deps.nix75
-rw-r--r--nixpkgs/pkgs/development/tools/mars-mips/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/mask/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/mbed-cli/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/mblock-mlink/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/mdk/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/metal-cli/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/metals/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/micronaut/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/minizinc/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/minizinc/ide.nix41
-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/act/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/arcanist/default.nix81
-rw-r--r--nixpkgs/pkgs/development/tools/misc/argbash/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/misc/asls/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/astyle/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autobuild/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf-archive/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf/2.13.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf/2.64.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf/2.69.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf/2.71-fix-race.patch36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autoconf/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/misc/autogen/default.nix101
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/automake-1.11.x.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/automake-1.15.x.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/automake-1.16.x.nix42
-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/help2man-SOURCE_DATE_EPOCH-support.patch41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automake/setup-hook.sh5
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automaticcomponenttoolkit/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/automoc4/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/aviator/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/awf/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/misc/babeltrace/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/bashdb/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/CVE-2020-35448.patch77
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/CVE-2021-3487.patch73
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/CVE-2021-45078.patch239
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/R_ARM_COPY.patch29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/always-search-rpath.patch14
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/bfd-elf-Dont-read-non-existing-secondary-relocs.patch26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/build-components-separately.patch164
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/default.nix203
-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-Update-GNU_PROPERTY_X86_XXX-macros.patch292
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/support-ios.patch168
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/windres-locate-gcc.patch19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/blackfire/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/misc/blackfire/php-probe.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/misc/bonnmotion/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/misc/bonnmotion/install.patch75
-rw-r--r--nixpkgs/pkgs/development/tools/misc/bsdbuild/default.nix68
-rw-r--r--nixpkgs/pkgs/development/tools/misc/c2ffi/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cbrowser/backslashes-quotes.diff49
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cbrowser/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ccache/default.nix126
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ccache/force-objdump-on-darwin.patch31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ccls/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ccls/wrapper9
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cflow/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cgdb/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/checkbashisms/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/misc/chrpath/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/chruby-fish/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/chruby/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/chruby/env.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/misc/circleci-cli/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cl-launch/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cli11/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/clojure-lsp/default.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/misc/coccinelle/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/complexity/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/default.nix77
-rw-r--r--nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/stable.nix51
-rwxr-xr-xnixpkgs/pkgs/development/tools/misc/coreboot-toolchain/update.sh36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cppi/default.nix32
-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/creduce/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cscope/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/misc/csmith/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ctags/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ctags/unused-collision.patch246
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ctags/wrapped.nix78
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cvise/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cvise/unifdef.patch8
-rw-r--r--nixpkgs/pkgs/development/tools/misc/cwebbin/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/misc/d-feet/default.nix82
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dbench/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dbench/fix-missing-stdint.patch10
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ddd/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ddd/gcc44.patch11
-rw-r--r--nixpkgs/pkgs/development/tools/misc/debugedit/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dejagnu/default.nix63
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dfu-programmer/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dfu-util/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/direvent/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/misc/distcc/default.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/misc/distcc/masq.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/misc/doclifter/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/docopts/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/docopts/deps.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/misc/drush/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dura/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/misc/dwz/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/edb/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/misc/editorconfig-checker/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/editorconfig-core-c/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/misc/eggdbus/default.nix21
-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.nix93
-rw-r--r--nixpkgs/pkgs/development/tools/misc/elfutils/musl-error_h.patch66
-rw-r--r--nixpkgs/pkgs/development/tools/misc/epm/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/findnewest/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/fsatrace/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/fswatch/default.nix35
-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.patch24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gdb/default.nix128
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gdbgui/default.nix96
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gede/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gengetopt/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/global/default.nix61
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gnum4/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/go-license-detector/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/go-md2man/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gob2/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gperf/3.0.x.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gperf/default.nix34
-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/gpuvis/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/grcov/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/misc/grpc-tools/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gtkdialog/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gtkperf/bench.patch60
-rw-r--r--nixpkgs/pkgs/development/tools/misc/gtkperf/default.nix25
-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.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/misc/hound/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/misc/hydra-cli/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/hydra/common.nix142
-rw-r--r--nixpkgs/pkgs/development/tools/misc/hydra/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/hydra/eval.patch34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/icon-naming-utils/default.nix19
-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.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/inotify-tools/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/intel-gpu-tools/default.nix100
-rw-r--r--nixpkgs/pkgs/development/tools/misc/intltool/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/misc/iozone/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/misc/itm-tools/cargo-lock.patch321
-rw-r--r--nixpkgs/pkgs/development/tools/misc/itm-tools/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/itstool/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/jiq/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/jscoverage/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/misc/jscoverage/jsfalse_to_null.patch26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/k2tf/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/kconfig-frontends/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/kdbg/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/kibana/6.x.nix63
-rw-r--r--nixpkgs/pkgs/development/tools/misc/kibana/7.x.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/misc/kibana/disable-nodejs-version-check-7.patch19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/kibana/disable-nodejs-version-check.patch19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/libtool/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/misc/libtool/libtool2-macos11.patch32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/libtool/libtool2.nix69
-rw-r--r--nixpkgs/pkgs/development/tools/misc/libtree/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/misc/libwhich/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/linuxkit/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lit/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/loccount/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lsof/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lsof/no-build-info.patch43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ltrace/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lttng-tools/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lttng-ust/2.12.nix4
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lttng-ust/default.nix4
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lttng-ust/generic.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/misc/lttv/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/3.7.nix81
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/darwin-3.1.3.patch24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/darwin-3.7.0.patch24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/default.nix81
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/luarocks-nix.nix14
-rw-r--r--nixpkgs/pkgs/development/tools/misc/luarocks/setup-hook.sh16
-rw-r--r--nixpkgs/pkgs/development/tools/misc/macdylibbundler/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdctags/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdl/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdl/Gemfile.lock30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdl/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mdl/gemset.nix97
-rw-r--r--nixpkgs/pkgs/development/tools/misc/micronucleus/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/mkcert/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/msitools/default.nix88
-rw-r--r--nixpkgs/pkgs/development/tools/misc/netcoredbg/default.nix71
-rw-r--r--nixpkgs/pkgs/development/tools/misc/netcoredbg/deps.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/misc/nimlsp/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ninka/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/misc/nix-build-uncached/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/nixbang/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/misc/nrfutil/default.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/misc/nxpmicro-mfgtools/default.nix57
-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.nix17
-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/pahole/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/patchelf/0.9.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/misc/patchelf/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/patchelf/setup-hook.sh22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/patchelf/unstable.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/perfect-hash/default.nix35
-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.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pkg-config/requires-private.patch17
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pkgconf/default.nix46
-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/polylith/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/misc/prelink/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/premake/3.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/premake/5.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/premake/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/premake/setup-hook.sh19
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ptags/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/misc/pwndbg/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/misc/qtspim/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/misc/remarkable/remarkable-toolchain/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/remarkable/remarkable2-toolchain/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/replacement/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/reviewdog/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/rman/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/rolespec/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/rtss/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/saleae-logic-2/default.nix75
-rw-r--r--nixpkgs/pkgs/development/tools/misc/saleae-logic/default.nix97
-rw-r--r--nixpkgs/pkgs/development/tools/misc/saleae-logic/preload.c341
-rw-r--r--nixpkgs/pkgs/development/tools/misc/scc/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/sccache/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/misc/segger-ozone/default.nix84
-rw-r--r--nixpkgs/pkgs/development/tools/misc/semver-tool/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/sipp/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/misc/sloccount/default.nix73
-rw-r--r--nixpkgs/pkgs/development/tools/misc/spruce/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/sqitch/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/srecord/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/stlink/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/misc/strace/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/svls/default.nix25
-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/4.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/misc/swig/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/misc/sysbench/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tcptrack/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/terracognita/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/terraform-ls/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/misc/terraform-lsp/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/terraformer/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tet/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texi2html/default.nix34
-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/6.7.nix4
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/6.8.nix4
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/common.nix87
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texinfo/cross-tools-flags.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/misc/texlab/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tie/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tockloader/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/misc/tokei/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/Gemfile4
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/Gemfile.lock71
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/default.nix16
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/gemset.nix269
-rw-r--r--nixpkgs/pkgs/development/tools/misc/travis/shell.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/misc/uncrustify/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/unifdef/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/misc/universal-ctags/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/misc/universal-ctags/sed-test.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/misc/unused/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/usb-modeswitch/configurable-usb-modeswitch.patch283
-rw-r--r--nixpkgs/pkgs/development/tools/misc/usb-modeswitch/data.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/misc/usb-modeswitch/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/misc/usbsdmux/default.nix22
-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.nix30
-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/wishbone-tool/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/misc/xspim/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/misc/xxdiff/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/misc/xxgdb/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/misc/xxgdb/xxgdb-pty.patch84
-rw-r--r--nixpkgs/pkgs/development/tools/misc/ycmd/default.nix94
-rw-r--r--nixpkgs/pkgs/development/tools/misc/yodl/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/mix2nix/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/mmixware/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/mockgen/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/mod/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/modd/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/mold/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/mpfshell/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/msgpack-tools/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/mustache-go/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/nailgun/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/neil/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/nemiver/default.nix88
-rw-r--r--nixpkgs/pkgs/development/tools/neoload/default.nix96
-rw-r--r--nixpkgs/pkgs/development/tools/node-webkit/nw12.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/nodenv/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/nrpl/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/nsis/default.nix74
-rw-r--r--nixpkgs/pkgs/development/tools/nwjs/default.nix98
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/camlidl/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/camlp4/default.nix92
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/camlp5/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/cppo/default.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/cppo/ocamlbuild.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/crunch/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/dune-release/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/dune/1.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/dune/2.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/dune/3.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/findlib/default.nix68
-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/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.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/default.nix13
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/lwt.nix13
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ocamlbuild.nix13
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx.nix13
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx_deriving_json.nix11
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/tyxml.nix14
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/merlin/4.x.nix89
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/merlin/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/merlin/dot-merlin-reader.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/merlin/fix-paths.patch15
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/merlin/test.patch19
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/oasis/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/obelisk/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/obuild/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocaml-recovery-parser/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocaml-top/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlbuild/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlformat/default.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlformat/generic.nix181
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlify/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlmod/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlscript/Makefile.patch70
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocamlscript/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocp-build/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocp-indent/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocp-index/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/ocsigen-i18n/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/omake/0.9.8.6-rc1.nix44
-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.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/opam/1.2.2.nix93
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/opam/default.nix136
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/opam/installer.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/opam/opam-shebangs.patch131
-rwxr-xr-xnixpkgs/pkgs/development/tools/ocaml/opam/opam.nix.pl132
-rw-r--r--nixpkgs/pkgs/development/tools/ocaml/utop/default.nix76
-rw-r--r--nixpkgs/pkgs/development/tools/ofono-phonesim/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/omniorb/default.nix37
-rwxr-xr-xnixpkgs/pkgs/development/tools/omnisharp-roslyn/create-deps.sh66
-rw-r--r--nixpkgs/pkgs/development/tools/omnisharp-roslyn/default.nix106
-rw-r--r--nixpkgs/pkgs/development/tools/omnisharp-roslyn/deps.nix2738
-rw-r--r--nixpkgs/pkgs/development/tools/open-policy-agent/default.nix81
-rw-r--r--nixpkgs/pkgs/development/tools/operator-sdk/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/oq/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/oshka/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/osslsigncode/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/out-of-tree/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/overcommit/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/overcommit/Gemfile.lock17
-rw-r--r--nixpkgs/pkgs/development/tools/overcommit/default.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/overcommit/gemset.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/packer/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/packet-sd/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/pactorio/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/pandoc/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/parinfer-rust/default.nix36
-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.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/3.4.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/3.5.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/4.8.nix88
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/4.9.nix95
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/antlr/builder.sh23
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/bison/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/bisonc++/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/byacc/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/flex/2.5.35.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/flex/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/flexc++/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/hammer/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/javacc/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/jikespg/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/jshon/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/lemon/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/peg/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/ragel/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/re2c/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/default.nix171
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammar.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/default.nix89
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-agda.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bash.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-beancount.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bibtex.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c-sharp.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-clojure.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cmake.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-comment.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-commonlisp.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cpp.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-css.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cuda.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dart.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-devicetree.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dockerfile.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dot.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elisp.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elixir.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elm.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-embedded-template.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-erlang.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fennel.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fish.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fluent.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fortran.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gdscript.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glimmer.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glsl.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-go.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-godot-resource.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gomod.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-graphql.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-haskell.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-heex.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-hjson.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-html.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-http.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-java.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-javascript.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-jsdoc.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json5.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-julia.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-kotlin.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-latex.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ledger.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-llvm.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-lua.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-make.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-markdown.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nix.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-norg.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ocaml.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-org-nvim.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-perl.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-php.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pioasm.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-prisma.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pug.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-python.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ql.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-query.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-r.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-razor.json10
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-regex.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rst.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ruby.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rust.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scala.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scss.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-sparql.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-supercollider.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-surface.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-svelte.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-swift.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tlaplus.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-toml.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tsq.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-turtle.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-typescript.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-verilog.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vim.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vue.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yaml.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yang.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-zig.json11
-rw-r--r--nixpkgs/pkgs/development/tools/parsing/tree-sitter/update.nix450
-rw-r--r--nixpkgs/pkgs/development/tools/pax-rs/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/perseus-cli/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/pet/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/pew/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/pgformatter/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/pgloader/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/pgtop/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/phantomjs2/default.nix118
-rw-r--r--nixpkgs/pkgs/development/tools/phantomjs2/system-qtbase.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/picotool/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/pigeon/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/pigeon/deps.nix66
-rw-r--r--nixpkgs/pkgs/development/tools/pipenv/default.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/README.md6
-rwxr-xr-xnixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/bin/poetry2nix157
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/cli.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/default.nix454
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/editable.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/extensions.json15
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/fetch-from-pypi.sh24
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/fetch_from_legacy.py119
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/default.nix87
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/fixup-hook.sh8
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/pip-build-hook.sh50
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/pyproject-without-special-deps.py57
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/remove-special-dependencies.sh20
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/wheel-unpack-hook.sh18
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/lib.nix238
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/mk-poetry-dep.nix203
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix2271
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pep425.nix117
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pep508.nix256
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/poetry.lock1645
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/pyproject.toml122
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/src.json7
-rwxr-xr-xnixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/update11
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/plugins.nix70
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/semver.nix87
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/shell-scripts.nix41
-rwxr-xr-xnixpkgs/pkgs/development/tools/poetry2nix/update31
-rw-r--r--nixpkgs/pkgs/development/tools/postiats-utilities/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/pqrs/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/pretty-simple/default.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/EZTrace/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/heaptrack/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/malt/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/oprofile/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/pprof/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/sysprof/capture.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/sysprof/default.nix81
-rw-r--r--nixpkgs/pkgs/development/tools/profiling/systemtap/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/prospector/default.nix69
-rw-r--r--nixpkgs/pkgs/development/tools/prospector/setoptconf.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/proto-contrib/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-doc/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-go-grpc/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-go-grpc/deps.nix333
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-go-vtproto/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-go/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-grpc-web/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-grpc-web/optional-static.patch19
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-twirp/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-twirp_php/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-twirp_swagger/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-twirp_typescript/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/protoc-gen-validate/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/prototool/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/pry/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/pry/Gemfile.lock17
-rw-r--r--nixpkgs/pkgs/development/tools/pry/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/pry/gemset.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/pscale/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/pulumictl/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/pup/default.nix22
-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.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/pur/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/purescript/spago/default.nix61
-rw-r--r--nixpkgs/pkgs/development/tools/purescript/spago/spago.nix46
-rwxr-xr-xnixpkgs/pkgs/development/tools/purescript/spago/update.sh36
-rw-r--r--nixpkgs/pkgs/development/tools/pxview/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/py-spy/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/pydb/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/pylint-exit/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/pypi-mirror/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/pypi2nix/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/qtcreator/0001-Fix-clang-libcpp-regexp.patch15
-rw-r--r--nixpkgs/pkgs/development/tools/qtcreator/0002-Dont-remove-clang-header-paths.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/qtcreator/default.nix96
-rw-r--r--nixpkgs/pkgs/development/tools/quick-lint-js/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/quicktemplate/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/quilt/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/rakkess/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/rdbtools/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/rdocker/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/react-native-debugger/default.nix82
-rw-r--r--nixpkgs/pkgs/development/tools/rebazel/default.nix24
-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.nix17
-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.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/regclient/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/renderizer/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/reno/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/rep/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/repository-managers/nexus/default.nix48
-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/rgp/default.nix76
-rw-r--r--nixpkgs/pkgs/development/tools/rhc/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/richgo/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rnix-lsp/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rocminfo/default.nix53
-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.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/ronn/gemset.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/ronn/test-reproducible-html.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/roswell/0001-get-image-from-environment.patch25
-rw-r--r--nixpkgs/pkgs/development/tools/roswell/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/rq/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/rslint/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/rtags/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/rucksack/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rufo/Gemfile3
-rw-r--r--nixpkgs/pkgs/development/tools/rufo/Gemfile.lock13
-rw-r--r--nixpkgs/pkgs/development/tools/rufo/default.nix16
-rw-r--r--nixpkgs/pkgs/development/tools/rufo/gemset.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/run/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rund/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/rust-code-analysis/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/rust/bindgen/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/rust/bindgen/unwrapped.nix63
-rwxr-xr-xnixpkgs/pkgs/development/tools/rust/bindgen/wrapper.sh36
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-all-features/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-asm/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-binutils/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/0001-dynamically-patchelf-binaries.patch56
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-bitbake/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-bloat/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-c/default.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-cache/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-crev/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-criterion/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-cross/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-deadlinks/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-deny/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-deny/zstd-pkg-config.patch29
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-depgraph/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-dephell/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-diet/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-embed/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-expand/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-feature/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-flash/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-fund/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-fuzz/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-geiger/default.nix58
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-generate/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-inspect/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-insta/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-limit/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-llvm-lines/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-make/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-modules/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-msrv/default.nix53
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-play/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-raze/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-readme/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-rr/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-sort/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-spellcheck/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-supply-chain/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-sweep/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-sync-readme/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-tally/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-udeps/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-valgrind/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-watch/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-whatfeatures/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-wipe/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cargo-xbuild/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/rust/cbindgen/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/rust/crate2nix/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/rust/devserver/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/rust/duckscript/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/rust/maturin/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/Cargo.lock.patch688
-rw-r--r--nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/default.nix12
-rw-r--r--nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/generic.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/rust/panamax/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rust/probe-rs-cli/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/rust/probe-run/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/rust/racer/default.nix48
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rhack/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/rust/roogle/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rust-analyzer/default.nix65
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rust-analyzer/ignore-git-and-rustfmt-tests.patch18
-rwxr-xr-xnixpkgs/pkgs/development/tools/rust/rust-analyzer/update.sh35
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rust-analyzer/wrapper.nix15
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rust-script/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/0001-dynamically-patchelf-binaries.patch61
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/default.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustup/0001-dynamically-patchelf-binaries.patch42
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rustup/default.nix94
-rw-r--r--nixpkgs/pkgs/development/tools/rust/rusty-man/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/rust/sqlx-cli/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/rust/svd2rust/default.nix23
-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.nix17
-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.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/scenebuilder/default.nix115
-rw-r--r--nixpkgs/pkgs/development/tools/scenic-view/default.nix110
-rw-r--r--nixpkgs/pkgs/development/tools/scry/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/scry/shards.nix14
-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.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/scss-lint/gemset.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/sd-local/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/selene/default.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/selenium/chromedriver/default.nix76
-rw-r--r--nixpkgs/pkgs/development/tools/selenium/htmlunit-driver/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/selenium/selendroid/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/selenium/server/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/sentry-cli/default.nix37
-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/shadered/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/shadered/install_path_fix.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/shellcheck/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/shellharden/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/sigrok-cli/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/simavr/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/skaffold/default.nix51
-rw-r--r--nixpkgs/pkgs/development/tools/skjold/default.nix79
-rw-r--r--nixpkgs/pkgs/development/tools/skopeo/default.nix62
-rw-r--r--nixpkgs/pkgs/development/tools/slimerjs/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/so/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/solarus-quest-editor/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/sourcetrail/default.nix275
-rw-r--r--nixpkgs/pkgs/development/tools/sourcetrail/disable-failing-tests.patch48
-rw-r--r--nixpkgs/pkgs/development/tools/sourcetrail/disable-updates.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/sourcetrail/java.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/sourcetrail/jedi.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/sourcetrail/parso.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/sourcetrail/python.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/spicy/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/spicy/deps.nix56
-rw-r--r--nixpkgs/pkgs/development/tools/spirv-tools/default.nix25
-rw-r--r--nixpkgs/pkgs/development/tools/spring-boot-cli/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/sqlint/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/sqlint/Gemfile.lock17
-rw-r--r--nixpkgs/pkgs/development/tools/sqlint/default.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/sqlint/gemset.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/sqsh/default.nix49
-rw-r--r--nixpkgs/pkgs/development/tools/sslmate/default.nix34
-rw-r--r--nixpkgs/pkgs/development/tools/stagit/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/statik/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/stylua/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/summon/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/summon/resolve-paths.patch39
-rw-r--r--nixpkgs/pkgs/development/tools/sumneko-lua-language-server/default.nix83
-rw-r--r--nixpkgs/pkgs/development/tools/sunxi-tools/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/swiftformat/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/symfony-cli/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/systemfd/Cargo.nix215
-rw-r--r--nixpkgs/pkgs/development/tools/systemfd/crates-io.list62
-rw-r--r--nixpkgs/pkgs/development/tools/systemfd/crates-io.nix1890
-rw-r--r--nixpkgs/pkgs/development/tools/systemfd/default.nix18
-rw-r--r--nixpkgs/pkgs/development/tools/tabnine/default.nix60
-rw-r--r--nixpkgs/pkgs/development/tools/taplo-cli/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/taplo-lsp/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/tapview/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/tapview/dont_check_echo.patch44
-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/tf2pulumi/default.nix28
-rw-r--r--nixpkgs/pkgs/development/tools/the-way/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/thrust/default.nix46
-rw-r--r--nixpkgs/pkgs/development/tools/time-ghc-modules/default.nix54
-rw-r--r--nixpkgs/pkgs/development/tools/tokio-console/default.nix29
-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.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/toxiproxy/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/tracy/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/tradcpp/aarch64.patch12
-rw-r--r--nixpkgs/pkgs/development/tools/tradcpp/default.nix26
-rw-r--r--nixpkgs/pkgs/development/tools/tradcpp/tradcpp-configure.patch84
-rw-r--r--nixpkgs/pkgs/development/tools/treefmt/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/trunk/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/turbogit/default.nix44
-rw-r--r--nixpkgs/pkgs/development/tools/tychus/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/tychus/deps.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/typos/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/udis86/default.nix31
-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/uniffi-bindgen/Cargo.lock837
-rw-r--r--nixpkgs/pkgs/development/tools/uniffi-bindgen/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/unity3d/default.nix143
-rw-r--r--nixpkgs/pkgs/development/tools/unity3d/unity-nosuid.c32
-rw-r--r--nixpkgs/pkgs/development/tools/unityhub/default.nix50
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.patch342
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/0004-Support-system-installed-plugins.patch93
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/default.nix118
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/gemset.nix366
-rw-r--r--nixpkgs/pkgs/development/tools/vagrant/gemset_libvirt.nix169
-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/vala-language-server/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/vala-lint/default.nix59
-rw-r--r--nixpkgs/pkgs/development/tools/vcstool/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/vend/default.nix37
-rw-r--r--nixpkgs/pkgs/development/tools/vend/remove_tidy.patch13
-rw-r--r--nixpkgs/pkgs/development/tools/vendir/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/vgo2nix/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/vim-vint/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/vndr/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/vogl/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/vulkan-validation-layers/default.nix78
-rw-r--r--nixpkgs/pkgs/development/tools/vultr-cli/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/vultr/default.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/wabt/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/wails/default.nix78
-rw-r--r--nixpkgs/pkgs/development/tools/wally-cli/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/wasm-bindgen-cli/default.nix40
-rw-r--r--nixpkgs/pkgs/development/tools/wasm-pack/default.nix45
-rw-r--r--nixpkgs/pkgs/development/tools/watchman/default.nix47
-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.nix55
-rw-r--r--nixpkgs/pkgs/development/tools/wire/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/wllvm/default.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/worker-build/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/wp-cli/default.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/wrangler/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/ws/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/wxformbuilder/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/default.nix74
-rw-r--r--nixpkgs/pkgs/development/tools/xcbuild/includes.patch10
-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.nix142
-rw-r--r--nixpkgs/pkgs/development/tools/xcode-install/Gemfile2
-rw-r--r--nixpkgs/pkgs/development/tools/xcode-install/Gemfile.lock204
-rw-r--r--nixpkgs/pkgs/development/tools/xcode-install/default.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/xcode-install/gemset.nix833
-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.nix21
-rw-r--r--nixpkgs/pkgs/development/tools/xcpretty/gemset.nix19
-rw-r--r--nixpkgs/pkgs/development/tools/xib2nib/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/xqilla/default.nix20
-rw-r--r--nixpkgs/pkgs/development/tools/yaml2json/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/yarn/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/LICENSE.txt674
-rwxr-xr-xnixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/bin/yarn2nix.js90
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix449
-rwxr-xr-xnixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_bin.js53
-rwxr-xr-xnixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_yarn_lock.js49
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/fixPkgAddMissingSha1.js66
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/generateNix.js136
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/mapObjIndexedReturnArray.js21
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/urlToName.js29
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/nix/expectShFunctions.sh30
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/package.json47
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.lock3583
-rw-r--r--nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.nix3973
-rw-r--r--nixpkgs/pkgs/development/tools/yj/default.nix24
-rw-r--r--nixpkgs/pkgs/development/tools/yq-go/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/ytt/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/yuicompressor/default.nix29
-rw-r--r--nixpkgs/pkgs/development/tools/zls/default.nix32
-rw-r--r--nixpkgs/pkgs/development/tools/zprint/default.nix32
1641 files changed, 104830 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/tools/abuild/default.nix b/nixpkgs/pkgs/development/tools/abuild/default.nix
new file mode 100644
index 000000000000..144ec8be9d4e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/abuild/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, pkg-config
+, openssl
+, zlib
+, busybox
+}:
+
+stdenv.mkDerivation rec {
+  pname = "abuild";
+  version = "3.7.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.alpinelinux.org";
+    owner = "alpine";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1xsik9hyzzq861bi922sb5r8c6r4wpnpxz5kd30i9f20vvfpp5jx";
+  };
+
+  buildInputs = [
+    openssl
+    zlib
+    busybox
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  patchPhase = ''
+    substituteInPlace ./Makefile \
+      --replace 'chmod 4555' '#chmod 4555'
+  '';
+
+  makeFlags = [
+    "prefix=${placeholder "out"}"
+    "CFLAGS=-Wno-error"
+  ];
+
+  installFlags = [
+    "sysconfdir=${placeholder "out"}/etc"
+  ];
+
+  meta = with lib; {
+    description = "Alpine Linux build tools";
+    homepage = "https://gitlab.alpinelinux.org/alpine/abuild";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ onny ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/agda-pkg/default.nix b/nixpkgs/pkgs/development/tools/agda-pkg/default.nix
new file mode 100644
index 000000000000..7c4ddb8a6883
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/agda-pkg/default.nix
@@ -0,0 +1,44 @@
+{ lib, python3Packages }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "agda-pkg";
+  version = "0.1.51";
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "ee370889a1558caf45930d9f898dbe248048078e1e7e3ee17382bf574dc795f2";
+  };
+
+  # Checks need internet access, so we just check the program executes
+  # At the moment the help page needs to write to $HOME, this can
+  # be removed if https://github.com/agda/agda-pkg/issues/40 is fixed
+  checkPhase = ''
+    HOME=$NIX_BUILD_TOP $out/bin/apkg --help > /dev/null
+  '';
+
+  propagatedBuildInputs = [
+    click
+    GitPython
+    pony
+    whoosh
+    natsort
+    click-log
+    requests
+    humanize
+    distlib
+    jinja2
+    pyyaml
+    ponywhoosh
+  ];
+
+  meta = with lib; {
+    homepage = "https://agda.github.io/agda-pkg/";
+    description = "Package manager for Agda";
+    license = licenses.mit;
+    maintainers = with maintainers; [ alexarice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/air/default.nix b/nixpkgs/pkgs/development/tools/air/default.nix
new file mode 100644
index 000000000000..fcc3671ded5c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/air/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "air";
+  version = "1.27.10";
+
+  src = fetchFromGitHub {
+    owner = "cosmtrek";
+    repo = "air";
+    rev = "v${version}";
+    sha256 = "sha256-mgFLelf0TPjJK/keQz+s52fKlruSn6+KTPj+waJuQdU=";
+  };
+
+  vendorSha256 = "sha256-MEIPkron42OJioV7PPhnLWVevjKDs5Bw3jDmvZbac9s=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Live reload for Go apps";
+    homepage = "https://github.com/cosmtrek/air";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ Gonzih ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/alloy/default.nix b/nixpkgs/pkgs/development/tools/alloy/default.nix
new file mode 100644
index 000000000000..4ec5b28bdd03
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/alloy/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchurl, jre, makeWrapper, makeDesktopItem }:
+
+let generic = { version, sha256 }:
+  stdenv.mkDerivation rec {
+    pname = "alloy${lib.versions.major version}";
+    inherit version;
+
+    src = fetchurl {
+      inherit sha256;
+      url = "https://github.com/AlloyTools/org.alloytools.alloy/releases/download/v${version}/org.alloytools.alloy.dist.jar";
+    };
+
+    desktopItem = makeDesktopItem rec {
+      name = pname;
+      exec = name;
+      icon = name;
+      desktopName = "Alloy ${lib.versions.major version}";
+      genericName = "Relational modelling tool";
+      comment = meta.description;
+      categories = [ "Development" "IDE" "Education" ];
+    };
+
+    nativeBuildInputs = [ makeWrapper ];
+
+    buildCommand = ''
+      jar=$out/share/alloy/${pname}.jar
+      install -Dm644 ${src} $jar
+
+      mkdir -p $out/bin
+      makeWrapper ${jre}/bin/java $out/bin/${pname} --add-flags \
+        "-jar $jar"
+
+      install -Dm644 ${./icon.png} $out/share/pixmaps/${pname}.png
+      cp -r ${desktopItem}/share/applications $out/share
+    '';
+
+    meta = with 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.unix;
+      maintainers = with maintainers; [ notbandali ];
+    };
+  };
+
+in rec {
+  alloy5 = generic rec {
+    version = "5.1.0";
+    sha256 = "02k9khs4k5nc86x9pp5k3vcb0kiwdgcin46mlap4fycnr673xd53";
+  };
+
+  alloy6 = generic rec {
+    version = "6.0.0";
+    sha256 = "sha256-rA7mNxcu0DWkykMyfV4JwFmQqg0HOIcwjjD4jCRxNww=";
+  };
+
+  alloy = alloy5;
+}
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/altair-graphql-client/default.nix b/nixpkgs/pkgs/development/tools/altair-graphql-client/default.nix
new file mode 100644
index 000000000000..febd5515f7c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/altair-graphql-client/default.nix
@@ -0,0 +1,38 @@
+{ lib, appimageTools, fetchurl, gsettings-desktop-schemas, gtk3 }:
+
+let
+  pname = "altair";
+  version = "4.1.0";
+  name = "${pname}-v${version}";
+
+  src = fetchurl {
+    url = "https://github.com/imolorhe/altair/releases/download/v${version}/altair_${version}_x86_64_linux.AppImage";
+    sha256 = "sha256-YuG7H+7FXYGbNNhM5vxps72dqltcj3bA325e7ZbW8aI=";
+  };
+
+  appimageContents = appimageTools.extract { inherit name src; };
+in
+appimageTools.wrapType2 {
+  inherit src name;
+
+  profile = ''
+    export XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_DATA_DIRS
+  '';
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+
+    install -m 444 -D ${appimageContents}/${pname}.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "A feature-rich GraphQL Client IDE";
+    homepage = "https://github.com/imolorhe/altair";
+    license = licenses.mit;
+    maintainers = with maintainers; [ evalexpr ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/amazon-qldb-shell/default.nix b/nixpkgs/pkgs/development/tools/amazon-qldb-shell/default.nix
new file mode 100644
index 000000000000..6f6ef1ca8af7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/amazon-qldb-shell/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, clang
+, cmake
+, fetchFromGitHub
+, llvmPackages
+, rustPlatform
+, testVersion
+}:
+
+let
+  pname = "amazon-qldb-shell";
+  version = "2.0.1";
+  package = rustPlatform.buildRustPackage {
+    inherit pname version;
+
+    src = fetchFromGitHub {
+      owner = "awslabs";
+      repo = pname;
+      rev = "v${version}";
+      sha256 = "sha256-aXScqJ1LijMSAy9YkS5QyXtTqxd19lLt3BbyVXlbw8o=";
+    };
+
+    nativeBuildInputs = [ clang cmake ];
+    buildInputs = [ llvmPackages.libclang ];
+
+    cargoSha256 = "sha256-y3dNEa2U9mwsENPda44zweszlk4UJXGtfeH+er8mi0U=";
+
+    LIBCLANG_PATH = "${llvmPackages.libclang.lib}/lib";
+
+    passthru.tests.version = testVersion { inherit package; };
+
+    meta = with lib; {
+      description = "An interface to send PartiQL statements to Amazon Quantum Ledger Database (QLDB)";
+      homepage = "https://github.com/awslabs/amazon-qldb-shell";
+      license = licenses.asl20;
+      maintainers = [ maintainers.terlar ];
+      mainProgram = "qldb";
+    };
+  };
+in
+package
diff --git a/nixpkgs/pkgs/development/tools/ameba/default.nix b/nixpkgs/pkgs/development/tools/ameba/default.nix
new file mode 100644
index 000000000000..24760051b28c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ameba/default.nix
@@ -0,0 +1,20 @@
+{ lib, fetchFromGitHub, crystal }:
+
+crystal.buildCrystalPackage rec {
+  pname = "ameba";
+  version = "0.14.3";
+
+  src = fetchFromGitHub {
+    owner = "crystal-ameba";
+    repo = "ameba";
+    rev = "v${version}";
+    sha256 = "sha256-oZdaHV+vnYUiCXNMrSuHvZzDYDgFZsoD715DE3tJ2bE=";
+  };
+
+  meta = with lib; {
+    description = "A static code analysis tool for Crystal";
+    homepage = "https://crystal-ameba.github.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kimburgess ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ammonite/default.nix b/nixpkgs/pkgs/development/tools/ammonite/default.nix
new file mode 100644
index 000000000000..080a8362ba70
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ammonite/default.nix
@@ -0,0 +1,92 @@
+{ lib, stdenv, fetchurl, jre, writeScript, common-updater-scripts, git, nixfmt
+, nix, coreutils, gnused, disableRemoteLogging ? true }:
+
+with lib;
+
+let
+  repo = "git@github.com:lihaoyi/Ammonite.git";
+
+  common = { scalaVersion, sha256 }:
+    stdenv.mkDerivation rec {
+      pname = "ammonite";
+      version = "2.5.2";
+
+      src = fetchurl {
+        url =
+          "https://github.com/lihaoyi/Ammonite/releases/download/${version}/${scalaVersion}-${version}";
+        inherit sha256;
+      };
+
+      dontUnpack = true;
+
+      installPhase = ''
+        install -Dm755 $src $out/bin/amm
+        sed -i '0,/java/{s|java|${jre}/bin/java|}' $out/bin/amm
+      '' + optionalString (disableRemoteLogging) ''
+        sed -i "0,/ammonite.Main/{s|ammonite.Main'|ammonite.Main' --no-remote-logging|}" $out/bin/amm
+        sed -i '1i #!/bin/sh' $out/bin/amm
+      '';
+
+      passthru = {
+
+        updateScript = writeScript "update.sh" ''
+          #!${stdenv.shell}
+          set -o errexit
+          PATH=${
+            lib.makeBinPath [
+              common-updater-scripts
+              coreutils
+              git
+              gnused
+              nix
+              nixfmt
+            ]
+          }
+          oldVersion="$(nix-instantiate --eval -E "with import ./. {}; lib.getVersion ${pname}" | tr -d '"')"
+          latestTag="$(git -c 'versionsort.suffix=-' ls-remote --exit-code --refs --sort='version:refname' --tags ${repo} '*.*.*' | tail --lines=1 | cut --delimiter='/' --fields=3)"
+          if [ "$oldVersion" != "$latestTag" ]; then
+            nixpkgs="$(git rev-parse --show-toplevel)"
+            default_nix="$nixpkgs/pkgs/development/tools/ammonite/default.nix"
+            update-source-version ${pname}_2_12 "$latestTag" --version-key=version --print-changes
+            sed -i "s|$latestTag|$oldVersion|g" "$default_nix"
+            update-source-version ${pname}_2_13 "$latestTag" --version-key=version --print-changes
+            nixfmt "$default_nix"
+          else
+            echo "${pname} is already up-to-date"
+          fi
+        '';
+      };
+
+      doInstallCheck = true;
+      installCheckPhase = ''
+        runHook preInstallCheck
+
+        $out/bin/amm -h "$PWD" -c 'val foo = 21; println(foo * 2)' | grep 42
+
+        runHook postInstallCheck
+      '';
+
+      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 = "https://github.com/com-lihaoyi/Ammonite";
+        license = licenses.mit;
+        platforms = platforms.all;
+        maintainers = [ maintainers.nequissimus ];
+      };
+    };
+in {
+  ammonite_2_12 = common {
+    scalaVersion = "2.12";
+    sha256 = "sha256-vj0Ze+Tn8jgq1mIVZWq2q768vW6fNXHB28gMcB9bWHU=";
+  };
+  ammonite_2_13 = common {
+    scalaVersion = "2.13";
+    sha256 = "sha256-ZuPyZFD3/VRP/GegcKqXZm3bveQB/Xr5E39eQktDCJI=";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/actionlint/default.nix b/nixpkgs/pkgs/development/tools/analysis/actionlint/default.nix
new file mode 100644
index 000000000000..68112b01cfb8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/actionlint/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub, ronn, installShellFiles }:
+
+buildGoModule rec {
+  pname = "actionlint";
+  version = "1.6.10";
+
+  subPackages = [ "cmd/actionlint" ];
+
+  src = fetchFromGitHub {
+    owner = "rhysd";
+    repo = "actionlint";
+    rev = "v${version}";
+    sha256 = "sha256-RFsNJiCeSAeEWOUnfBpeIZKoS2mlXazYMQd1M6yFLGU=";
+  };
+
+  vendorSha256 = "sha256-CxNER8aQftMG14M+x6bPwcXgUZRkUDYZtFg1cPxxg+I=";
+
+  nativeBuildInputs = [ ronn installShellFiles ];
+
+  postInstall = ''
+    ronn --roff man/actionlint.1.ronn
+    installManPage man/actionlint.1
+  '';
+
+  ldflags = [ "-s" "-w" "-X github.com/rhysd/actionlint.version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://rhysd.github.io/actionlint/";
+    description = "Static checker for GitHub Actions workflow files";
+    changelog = "https://github.com/rhysd/actionlint/raw/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+    mainProgram = "actionlint";
+  };
+}
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..03e01aadb716
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/autoflake/default.nix
@@ -0,0 +1,23 @@
+{ lib, python3Packages }:
+
+with python3Packages;
+buildPythonApplication rec {
+  pname = "autoflake";
+  version = "1.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "61a353012cff6ab94ca062823d1fb2f692c4acda51c76ff83a8d77915fba51ea";
+  };
+
+  propagatedBuildInputs = [ pyflakes ];
+
+  doCheck = true;
+
+  meta = with 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/bingrep/default.nix b/nixpkgs/pkgs/development/tools/analysis/bingrep/default.nix
new file mode 100644
index 000000000000..2d8348bfc9bc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/bingrep/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bingrep";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "m4b";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-M3BYj1SKQKjEqP9cxaVlh7UeleDbcx6JN+UI6Ez+QJ8=";
+  };
+
+  cargoHash = "sha256-botAoLNg/qTh+cjPXcjo/Ol2Vktj/c5130k5falEuLY=";
+
+  meta = with lib; {
+    description = "Greps through binaries from various OSs and architectures, and colors them";
+    homepage = "https://github.com/m4b/bingrep";
+    license = licenses.mit;
+    maintainers = with maintainers; [ minijackson ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/binlore/default.nix b/nixpkgs/pkgs/development/tools/analysis/binlore/default.nix
new file mode 100644
index 000000000000..ac46bd4c4185
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/binlore/default.nix
@@ -0,0 +1,112 @@
+{ lib
+, fetchFromGitHub
+, runCommand
+, yallback
+, yara
+}:
+
+/* TODO/CAUTION:
+
+I don't want to discourage use, but I'm not sure how stable
+the API is. Have fun, but be prepared to track changes! :)
+
+For _now_, binlore is basically a thin wrapper around
+`<invoke yara> | <postprocess with yallback>` with support
+for running it on a derivation, saving the result in the
+store, and aggregating results from a set of packages.
+
+In the longer term, I suspect there are more uses for this
+general pattern (i.e., run some analysis tool that produces
+a deterministic output and cache the result per package...).
+
+I'm not sure how that'll look and if it'll be the case that
+binlore automatically collects all of them, or if you'll be
+configuring which "kind(s)" of lore it generates. Nailing
+that down will almost certainly mean reworking the API.
+
+*/
+
+let
+  src = fetchFromGitHub {
+    owner = "abathur";
+    repo = "binlore";
+    rev = "v0.1.4";
+    hash = "sha256-+N0Bqyaj/mAwrcgFtUI8czmKo3VW6J8ZRxaPEghp7QM=";
+  };
+  /*
+  binlore has one one more yallbacks responsible for
+  routing the appropriate lore to a named file in the
+  appropriate format. At some point I might try to do
+  something fancy with this, but for now the answer to
+  *all* questions about the lore are: the bare minimum
+  to get resholve over the next feature hump in time to
+  hopefully slip this feature in before the branch-off.
+  */
+  # TODO: feeling really uninspired on the API
+  loreDef = {
+    # YARA rule file
+    rules = (src + /execers.yar);
+    # output filenames; "types" of lore
+    types = [ "execers" "wrappers" ];
+    # shell rule callbacks; see github.com/abathur/yallback
+    yallback = (src + /execers.yall);
+    # TODO:
+    # - echo for debug, can be removed at some point
+    # - I really just wanted to put the bit after the pipe
+    #   in here, but I'm erring on the side of flexibility
+    #   since this form will make it easier to pilot other
+    #   uses of binlore.
+    callback = lore: drv: overrides: ''
+      if [[ -d "${drv}/bin" ]]; then
+        echo generating binlore for $drv by running:
+        echo "${yara}/bin/yara ${lore.rules} ${drv}/bin | ${yallback}/bin/yallback ${lore.yallback}"
+      else
+        echo "failed to generate binlore for $drv (${drv}/bin doesn't exist)"
+      fi
+    '' +
+    /*
+    Override lore for some packages. Unsure, but for now:
+    1. start with the ~name (pname-version)
+    2. remove characters from the end until we find a match
+       in overrides/
+    3. execute the override script with the list of expected
+       lore types
+    */
+    ''
+      i=''${#identifier}
+      filter=
+      while [[ $i > 0 ]] && [[ -z "$filter" ]]; do
+        if [[ -f "${overrides}/''${identifier:0:$i}" ]]; then
+          filter="${overrides}/''${identifier:0:$i}"
+          echo using "${overrides}/''${identifier:0:$i}" to generate overriden binlore for $drv
+          break
+        fi
+        ((i--)) || true # don't break build
+      done # || true # don't break build
+      if [[ -d "${drv}/bin" ]]; then
+        ${yara}/bin/yara ${lore.rules} ${drv}/bin | ${yallback}/bin/yallback ${lore.yallback} "$filter"
+      fi
+    '';
+  };
+  overrides = (src + /overrides);
+
+in rec {
+  collect = { lore ? loreDef, drvs }: (runCommand "more-binlore" { } ''
+    mkdir $out
+    for lorefile in ${toString lore.types}; do
+      cat ${lib.concatMapStrings (x: x + "/$lorefile ") (map (make lore) (map lib.getBin drvs))} > $out/$lorefile
+    done
+  '');
+  # TODO: echo for debug, can be removed at some point
+  make = lore: drv: runCommand "${drv.name}-binlore" {
+      identifier = drv.name;
+      drv = drv;
+    } (''
+    mkdir $out
+    touch $out/{${builtins.concatStringsSep "," lore.types}}
+
+    ${lore.callback lore drv overrides}
+
+    echo binlore for $drv written to $out
+  '');
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile b/nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile
new file mode 100644
index 000000000000..1ff5490b0a77
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile
@@ -0,0 +1,2 @@
+source "https://rubygems.org"
+gem "brakeman"
diff --git a/nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile.lock b/nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile.lock
new file mode 100644
index 000000000000..257d8a7fba1c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/brakeman/Gemfile.lock
@@ -0,0 +1,13 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    brakeman (5.1.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  brakeman
+
+BUNDLED WITH
+   2.2.24
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..72c4b1fbc3e3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/brakeman/default.nix
@@ -0,0 +1,18 @@
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp rec {
+  pname = "brakeman";
+  exes = [ "brakeman" ];
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "brakeman";
+
+  meta = with lib; {
+    description = "Static analysis security scanner for Ruby on Rails";
+    homepage = "https://brakemanscanner.org/";
+    changelog = "https://github.com/presidentbeef/brakeman/blob/v${version}/CHANGES.md";
+    license = [ licenses.unfreeRedistributable ];
+    platforms = ruby.meta.platforms;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/brakeman/gemset.nix b/nixpkgs/pkgs/development/tools/analysis/brakeman/gemset.nix
new file mode 100644
index 000000000000..ea241dbf6e70
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/brakeman/gemset.nix
@@ -0,0 +1,12 @@
+{
+  brakeman = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y71fqqd0azy5rn78fwiz9px0mql23zrl0ij0dzdkx22l4cscpb0";
+      type = "gem";
+    };
+    version = "5.1.1";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/cargo-tarpaulin/default.nix b/nixpkgs/pkgs/development/tools/analysis/cargo-tarpaulin/default.nix
new file mode 100644
index 000000000000..101a4f948fce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cargo-tarpaulin/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, pkg-config, curl, openssl, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-tarpaulin";
+  version = "0.19.1";
+
+  src = fetchFromGitHub {
+    owner = "xd009642";
+    repo = "tarpaulin";
+    rev = version;
+    sha256 = "sha256-H/EQTS+d317icCZdOWTvykzIFQC7ia7/jYFkImgogps=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ curl Security ];
+
+  cargoSha256 = "sha256-A3J5od6yT7eVU66WfvG/umne0RDBZCf8IvQpW6OTZSE=";
+  #checkFlags = [ "--test-threads" "1" ];
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A code coverage tool for Rust projects";
+    homepage = "https://github.com/xd009642/tarpaulin";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ hugoreeves ];
+  };
+}
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..dc7cccd9dc1d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cccc/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "cccc";
+  version = "3.1.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cccc/${version}/cccc-${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 = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.linquize ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/checkov/default.nix b/nixpkgs/pkgs/development/tools/analysis/checkov/default.nix
new file mode 100644
index 000000000000..8862464156f1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/checkov/default.nix
@@ -0,0 +1,144 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+
+      dpath = super.dpath.overridePythonAttrs (oldAttrs: rec {
+        version = "1.5.0";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "06rn91n2izw7czncgql71w7acsa8wwni51njw0c6s8w4xas1arj9";
+        };
+        doCheck = false;
+      });
+
+      jsonschema = super.jsonschema.overridePythonAttrs (oldAttrs: rec {
+        version = "3.2.0";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "sha256-yKhbKNN3zHc35G4tnytPRO48Dh3qxr9G3e/HGH0weXo=";
+        };
+        SETUPTOOLS_SCM_PRETEND_VERSION = version;
+        doCheck = false;
+      });
+
+    };
+  };
+in
+with py.pkgs;
+
+buildPythonApplication rec {
+  pname = "checkov";
+  version = "2.0.941";
+
+  src = fetchFromGitHub {
+    owner = "bridgecrewio";
+    repo = pname;
+    rev = version;
+    hash = "sha256-hNmIJmxzKEaKQzqLl9LSqtMj1dTpFDeztUo2ESCHIw0=";
+  };
+
+  nativeBuildInputs = with py.pkgs; [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = with py.pkgs; [
+    aiodns
+    aiohttp
+    aiomultiprocess
+    argcomplete
+    bc-python-hcl2
+    boto3
+    cachetools
+    cloudsplaining
+    colorama
+    configargparse
+    cyclonedx-python-lib
+    deep_merge
+    detect-secrets
+    docker
+    dockerfile-parse
+    dpath
+    GitPython
+    jmespath
+    jsonpath-ng
+    jsonschema
+    junit-xml
+    networkx
+    packaging
+    policyuniverse
+    prettytable
+    pycep-parser
+    pyyaml
+    semantic-version
+    tabulate
+    termcolor
+    tqdm
+    typing-extensions
+    update_checker
+  ];
+
+  checkInputs = with py.pkgs; [
+    aioresponses
+    mock
+    pytest-asyncio
+    pytest-mock
+    pytest-xdist
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "cyclonedx-python-lib>=0.11.0,<1.0.0" "cyclonedx-python-lib>=0.11.0" \
+      --replace "prettytable>=3.0.0" "prettytable"
+  '';
+
+  preCheck = ''
+    export HOME=$(mktemp -d);
+  '';
+
+  disabledTests = [
+    # No API key available
+    "api_key"
+    # Requires network access
+    "TestSarifReport"
+    # Will probably be fixed in one of the next releases
+    "test_valid_cyclonedx_bom"
+    "test_record_relative_path_with"
+    "test_record_relative_path_with_relative_dir"
+    # Requires prettytable release which is only available in staging
+    "test_skipped_check_exists"
+    # AssertionError: 0 not greater than 0
+    "test_skip_mapping_default"
+  ];
+
+  disabledTestPaths = [
+    # Tests are pulling from external sources
+    # https://github.com/bridgecrewio/checkov/blob/f03a4204d291cf47e3753a02a9b8c8d805bbd1be/.github/workflows/build.yml
+    "integration_tests/"
+    "tests/terraform/"
+    # Performance tests have no value for us
+    "performance_tests/test_checkov_performance.py"
+    # Requires prettytable release which is only available in staging
+    "tests/sca_package/"
+    "tests/test_runner_filter.py"
+  ];
+
+  pythonImportsCheck = [
+    "checkov"
+  ];
+
+  meta = with lib; {
+    description = "Static code analysis tool for infrastructure-as-code";
+    homepage = "https://github.com/bridgecrewio/checkov";
+    longDescription = ''
+      Prevent cloud misconfigurations during build-time for Terraform, Cloudformation,
+      Kubernetes, Serverless framework and other infrastructure-as-code-languages.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ anhdle14 fab ];
+  };
+}
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..6c135beea458
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/checkstyle/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  version = "9.3";
+  pname = "checkstyle";
+
+  src = fetchurl {
+    url = "https://github.com/checkstyle/checkstyle/releases/download/checkstyle-${version}/checkstyle-${version}-all.jar";
+    sha256 = "sha256-Aq0zB+RgWafE+K9sX2H0d7xf2RDlavsUXEWQTJXSE6w=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  dontUnpack = true;
+
+  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 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..87d79a070cd0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/clang-analyzer/0001-Fix-scan-build-to-use-NIX_CFLAGS_COMPILE.patch
@@ -0,0 +1,35 @@
+From 99a7e55a60c8d96e160f9104a3dd31b7914d3488 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
+Date: Fri, 31 Jul 2020 09:22:03 +0100
+Subject: [PATCH] Fix scan-build to use NIX_CFLAGS_COMPILE
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Jörg Thalheim <joerg@thalheim.io>
+---
+ clang/tools/scan-build/libexec/ccc-analyzer | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/clang/tools/scan-build/libexec/ccc-analyzer
+b/clang/tools/scan-build/libexec/ccc-analyzer
+index ed0d4d3d73f3..2d5113435ca5 100755
+--- a/clang/tools/scan-build/libexec/ccc-analyzer
++++ b/clang/tools/scan-build/libexec/ccc-analyzer
+@@ -249,6 +249,14 @@ sub Analyze {
+       push @Args, "-target", $AnalyzerTarget;
+     }
+ 
++    # 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($HtmlDir, "--analyze", \@Args);
+     @CmdArgs = @$AnalysisArgs;
+   }
+-- 
+2.33.0
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..46e04aaf389f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/clang-analyzer/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, clang, llvmPackages, perl, makeWrapper, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "clang-analyzer";
+  inherit (llvmPackages.clang-unwrapped) src version;
+
+  patches = [ ./0001-Fix-scan-build-to-use-NIX_CFLAGS_COMPILE.patch ];
+  buildInputs = [ clang llvmPackages.clang perl python3 ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/share/scan-view $out/bin
+    cp -R clang/tools/scan-view/share/* $out/share/scan-view
+    cp -R clang/tools/scan-view/bin/* $out/bin/scan-view
+    cp -R clang/tools/scan-build/* $out
+
+    rm $out/bin/*.bat $out/libexec/*.bat $out/CMakeLists.txt
+
+    wrapProgram $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";
+    longDescription = ''
+      The Clang Static Analyzer is a source code analysis tool that finds bugs
+      in C, C++, and Objective-C programs.
+    '';
+    homepage    = "https://clang-analyzer.llvm.org/";
+    license     = lib.licenses.bsd3;
+    platforms   = lib.platforms.unix;
+    maintainers = [ 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..3ef6c2b84590
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/coan/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  version = "6.0.1";
+  pname = "coan";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/coan2/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "1d041j0nd1hc0562lbj269dydjm4rbzagdgzdnmwdxr98544yw44";
+  };
+
+  nativeBuildInputs = [ perl ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    mv -v $out/share/man/man1/coan.1.{1,gz}
+  '';
+
+  meta = with 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.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/codeql/default.nix b/nixpkgs/pkgs/development/tools/analysis/codeql/default.nix
new file mode 100644
index 000000000000..a6a95e74e4a1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/codeql/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchzip, zlib, xorg, freetype, jdk11, curl, autoPatchelfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "codeql";
+  version = "2.8.1";
+
+  dontConfigure = true;
+  dontBuild = true;
+  dontStrip = true;
+
+  src = fetchzip {
+    url = "https://github.com/github/codeql-cli-binaries/releases/download/v${version}/codeql.zip";
+    sha256 = "sha256-zZoK5x+nE8AVZWDSMmsVPFuXNnAHBPyu9+1GgSwN19c=";
+  };
+
+  nativeBuildInputs = [
+    zlib
+    xorg.libX11
+    xorg.libXext
+    xorg.libXi
+    xorg.libXtst
+    xorg.libXrender
+    freetype
+    jdk11
+    stdenv.cc.cc.lib
+    curl
+  ];
+
+  installPhase = ''
+    # codeql directory should not be top-level, otherwise,
+    # it'll include /nix/store to resolve extractors.
+    mkdir -p $out/{codeql,bin}
+    cp -R * $out/codeql/
+
+    ln -sf $out/codeql/tools/linux64/lib64trace.so $out/codeql/tools/linux64/libtrace.so
+
+    sed -i 's%\$CODEQL_DIST/tools/\$CODEQL_PLATFORM/java%\${jdk11}%g' $out/codeql/codeql
+
+    ln -s $out/codeql/codeql $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Semantic code analysis engine";
+    homepage = "https://codeql.github.com";
+    maintainers = [ maintainers.dump_stack ];
+    license = licenses.unfree;
+  };
+}
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..93a4ffab388d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cov-build/default.nix
@@ -0,0 +1,48 @@
+{ lib, 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 {
+  pname = "cov-build";
+  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     = lib.licenses.unfreeRedistributable;
+    platforms   = lib.platforms.linux;
+    maintainers = [ lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/coz/default.nix b/nixpkgs/pkgs/development/tools/analysis/coz/default.nix
new file mode 100644
index 000000000000..17968a466bf4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/coz/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv
+, fetchFromGitHub
+, libelfin
+, ncurses
+, python3
+, python3Packages
+, makeWrapper
+}:
+stdenv.mkDerivation rec {
+  pname = "coz";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "plasma-umass";
+    repo = "coz";
+    rev = version;
+    sha256 = "0val36yw987b1558iiyk3nqg0yy5k9y5wh49v91zj3cs58mmfyhc";
+  };
+
+  postPatch = ''
+    sed -i -e '/pid_t gettid/,+2d' libcoz/ccutil/thread.h
+  '';
+
+  postConfigure = ''
+    # This is currently hard-coded. Will be fixed in the next release.
+    sed -e "s|/usr/lib/|$out/lib/|" -i ./coz
+  '';
+
+  nativeBuildInputs = [
+    ncurses
+    makeWrapper
+    python3Packages.wrapPython
+  ];
+
+  buildInputs = [
+    libelfin
+    (python3.withPackages (p: [ p.docutils ]))
+  ];
+
+  installPhase = ''
+    mkdir -p $out/share/man/man1
+    make install prefix=$out
+
+    # fix executable includes
+    chmod -x $out/include/coz.h
+
+    wrapPythonPrograms
+  '';
+
+  meta = {
+    homepage = "https://github.com/plasma-umass/coz";
+    description = "Profiler based on casual profiling";
+    license = lib.licenses.bsd2;
+    maintainers = with lib.maintainers; [ zimbatm ];
+  };
+}
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..7f9e82162ea4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cppcheck/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, libxslt, docbook_xsl, docbook_xml_dtd_45, pcre, withZ3 ? true, z3 }:
+
+stdenv.mkDerivation rec {
+  pname = "cppcheck";
+  version = "2.7";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-rHTAlzxGoFJ2D0/3ymqEYWyleVUQVC0ZWm8SLFMHkpE=";
+  };
+
+  buildInputs = [ pcre ] ++ lib.optionals withZ3 [ z3 ];
+  nativeBuildInputs = [ libxslt docbook_xsl docbook_xml_dtd_45 ];
+
+  makeFlags = [ "PREFIX=$(out)" "FILESDIR=$(out)/cfg" "HAVE_RULES=yes" ]
+   ++ lib.optionals withZ3 [ "USE_Z3=yes" "CPPFLAGS=-DNEW_Z3=1" ];
+
+  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 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/0001-Remove-pytest-runner-version-pin.patch b/nixpkgs/pkgs/development/tools/analysis/cpplint/0001-Remove-pytest-runner-version-pin.patch
new file mode 100644
index 000000000000..3b602421d100
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cpplint/0001-Remove-pytest-runner-version-pin.patch
@@ -0,0 +1,16 @@
+diff --git a/setup.py b/setup.py
+index aef5c4e..030ea14 100755
+--- a/setup.py
++++ b/setup.py
+@@ -73,7 +73,7 @@ setup(name='cpplint',
+       long_description=open('README.rst').read(),
+       license='BSD-3-Clause',
+       setup_requires=[
+-          "pytest-runner==5.2"
++          "pytest-runner"
+       ],
+       tests_require=test_required,
+       # extras_require allow pip install .[dev]
+-- 
+2.31.1
+
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..2f665b8395ba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cpplint/default.nix
@@ -0,0 +1,32 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "cpplint";
+  version = "1.5.5";
+
+  # 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 = "sha256-JXz2Ufo7JSceZVqYwCRkuAsOR08znZlIUk8GCLAyiI4=";
+  };
+
+  patches = [ ./0001-Remove-pytest-runner-version-pin.patch ];
+
+  postPatch = ''
+    patchShebangs cpplint_unittest.py
+  '';
+
+  checkInputs = with python3Packages; [ pytest pytest-runner ];
+  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/cvehound/default.nix b/nixpkgs/pkgs/development/tools/analysis/cvehound/default.nix
new file mode 100644
index 000000000000..05073bba750d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/cvehound/default.nix
@@ -0,0 +1,41 @@
+{ lib, fetchFromGitHub, coccinelle, gnugrep, python3Packages }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "cvehound";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "evdenis";
+    repo = "cvehound";
+    rev = version;
+    sha256 = "sha256-m8vpea02flQ8elSvGWv9FqBhsEcBzRYjcUk+dc4kb2M=";
+  };
+
+  makeWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ coccinelle gnugrep ]}"
+  ];
+
+  propagatedBuildInputs = [
+    psutil
+    setuptools
+    sympy
+  ];
+
+  checkInputs = [
+    GitPython
+    pytestCheckHook
+  ];
+
+  # Tries to clone the kernel sources
+  doCheck = false;
+
+  meta = with lib; {
+    description = "tool to check linux kernel source dump for known CVEs";
+    homepage = "https://github.com/evdenis/cvehound";
+    # See https://github.com/evdenis/cvehound/issues/22
+    license = with licenses; [ gpl2Only gpl3Only ];
+    maintainers = with maintainers; [ ambroisie ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/dotenv-linter/default.nix b/nixpkgs/pkgs/development/tools/analysis/dotenv-linter/default.nix
new file mode 100644
index 000000000000..49331dbfceb5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/dotenv-linter/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dotenv-linter";
+  version = "3.2.0";
+
+  src = fetchFromGitHub {
+    owner = "dotenv-linter";
+    repo = "dotenv-linter";
+    rev = "v${version}";
+    sha256 = "sha256-YWL1aPcMdU4lo7h/T2sdl2H6qnx3lfMtV39Ak4yP88w=";
+  };
+
+  cargoSha256 = "sha256-q59hpnXc00OzrJk1KOWbIPQYfIE+7ku9XtTDXHgwQBg=";
+
+  meta = with lib; {
+    description = "Lightning-fast linter for .env files. Written in Rust";
+    homepage = "https://dotenv-linter.github.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ humancalico ];
+  };
+}
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..026650220991
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/egypt/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchurl, perlPackages }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "egypt";
+  version = "1.10";
+
+  src = fetchurl {
+    sha256 = "0r0wj6v8z9fzlh9pb5617kyjdf92ppmlbzajaarrq729bbb6ln5m";
+    url = "https://www.gson.org/egypt/download/${pname}-${version}.tar.gz";
+  };
+
+  outputs = [ "out" ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with 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..43970497bb48
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/emma/default.nix
@@ -0,0 +1,25 @@
+{lib, stdenv, fetchurl, unzip}:
+
+stdenv.mkDerivation rec {
+  pname = "emma";
+  version = "2.0.5312";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.zip";
+    sha256 = "0xxy39s2lvgs56vicjzpcz936l1vjaplliwa0dm7v3iyvw6jn7vj";
+  };
+
+  nativeBuildInputs = [ 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 = lib.platforms.unix;
+    license = 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..158f6545b714
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/eresi/default.nix
@@ -0,0 +1,66 @@
+{ stdenv, lib, fetchFromGitHub, which, openssl, readline, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "eresi";
+  version = "0.83-a3-phoenix";
+
+  src = fetchFromGitHub {
+    owner = "thorkill";
+    repo = "eresi";
+    rev = version;
+    sha256 = "0a5a7mh2zw9lcdrl8n1mqccrc0xcgj7743l7l4kslkh722fxv625";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/thorkill/eresi/commit/a79406344cc21d594d27fa5ec5922abe9f7475e7.patch";
+      sha256 = "1mjjc6hj7r06iarvai7prcdvjk9g0k5vwrmkwcm7b8ivd5xzxp2z";
+    })
+  ];
+
+  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.gpl2Only;
+    homepage = "https://github.com/thorkill/eresi"; # Formerly http://www.eresi-project.org/
+    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..4061090b1828
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/evmdis/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage {
+  pname = "evmdis-unstable";
+  version = "2018-03-23";
+  goPackagePath = "github.com/Arachnid/evmdis";
+
+  src = fetchFromGitHub {
+    owner = "Arachnid";
+    repo = "evmdis";
+    rev = "0d1406905c5fda6224651fa53260a21c907eb986";
+    sha256 = "09y4j7ipgv8yd99g3xk3f079w8fqfj7kl1y7ry81ainysn0qlqrg";
+  };
+
+  meta = with 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..e07d98998efe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/findbugs/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "findbugs";
+  version = "3.0.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.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 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..6ef9806bf371
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/flow/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, ocamlPackages, CoreServices }:
+
+stdenv.mkDerivation rec {
+  pname = "flow";
+  version = "0.173.0";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = "flow";
+    rev = "v${version}";
+    sha256 = "sha256-F0t85/sq9p+eNEf2XAGxw+ZWeRgUbkhrKFdGASijuAs=";
+  };
+
+  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 ocaml-migrate-parsetree-2 dtoa core_kernel sedlex_2 ocaml_lwt lwt_log lwt_ppx ppx_deriving ppx_gen_rec visitors wtf8 ])
+    ++ lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  meta = with lib; {
+    description = "A static type checker for JavaScript";
+    homepage = "https://flow.org/";
+    changelog = "https://github.com/facebook/flow/raw/v${version}/Changelog.md";
+    license = licenses.mit;
+    platforms = ocamlPackages.ocaml.meta.platforms;
+    maintainers = with maintainers; [ marsam puffnfresh ];
+  };
+}
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..b5ae5055d02d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/frama-c/default.nix
@@ -0,0 +1,87 @@
+{ lib, stdenv, fetchurl, makeWrapper, writeText
+, autoconf, ncurses, graphviz, doxygen
+, ocamlPackages, ltl2ba, coq, why3
+, gdk-pixbuf, wrapGAppsHook
+}:
+
+let
+  mkocamlpath = p: "${p}/lib/ocaml/${ocamlPackages.ocaml.version}/site-lib";
+  runtimeDeps = with ocamlPackages; [
+    apron.dev
+    biniou
+    camlzip
+    easy-format
+    menhirLib
+    mlgmpidl
+    num
+    ocamlgraph
+    stdlib-shims
+    why3
+    re
+    seq
+    sexplib
+    sexplib0
+    parsexp
+    base
+    yojson
+    zarith
+  ];
+  ocamlpath = lib.concatMapStringsSep ":" mkocamlpath runtimeDeps;
+in
+
+stdenv.mkDerivation rec {
+  pname = "frama-c";
+  version = "24.0";
+  slang   = "Chromium";
+
+  src = fetchurl {
+    url    = "https://frama-c.com/download/frama-c-${version}-${slang}.tar.gz";
+    sha256 = "sha256:0x1xgip50jdz1phsb9rzwf2ra8lshn1hmd9g967xia402wrg3sjf";
+  };
+
+  preConfigure = lib.optionalString stdenv.cc.isClang "configureFlagsArray=(\"--with-cpp=clang -E -C\")";
+
+  nativeBuildInputs = [ autoconf wrapGAppsHook ];
+
+  buildInputs = with ocamlPackages; [
+    ncurses ocaml findlib ltl2ba ocamlgraph yojson menhirLib camlzip
+    lablgtk3 lablgtk3-sourceview3 coq graphviz zarith apron why3 mlgmpidl doxygen
+    gdk-pixbuf
+  ];
+
+  enableParallelBuilding = true;
+
+  preFixup = ''
+     gappsWrapperArgs+=(--prefix OCAMLPATH ':' ${ocamlpath})
+  '';
+
+  # Allow loading of external Frama-C plugins
+  setupHook = writeText "setupHook.sh" ''
+    addFramaCPath () {
+      if test -d "''$1/lib/frama-c/plugins"; then
+        export FRAMAC_PLUGIN="''${FRAMAC_PLUGIN-}''${FRAMAC_PLUGIN:+:}''$1/lib/frama-c/plugins"
+        export OCAMLPATH="''${OCAMLPATH-}''${OCAMLPATH:+:}''$1/lib/frama-c/plugins"
+      fi
+
+      if test -d "''$1/lib/frama-c"; then
+        export OCAMLPATH="''${OCAMLPATH-}''${OCAMLPATH:+:}''$1/lib/frama-c"
+      fi
+
+      if test -d "''$1/share/frama-c/"; then
+        export FRAMAC_EXTRA_SHARE="''${FRAMAC_EXTRA_SHARE-}''${FRAMAC_EXTRA_SHARE:+:}''$1/share/frama-c"
+      fi
+
+    }
+
+    addEnvHooks "$targetOffset" addFramaCPath
+  '';
+
+
+  meta = {
+    description = "An extensible and collaborative platform dedicated to source-code analysis of C software";
+    homepage    = "http://frama-c.com/";
+    license     = lib.licenses.lgpl21;
+    maintainers = with lib.maintainers; [ thoughtpolice amiddelk ];
+    platforms   = lib.platforms.unix;
+  };
+}
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..f7f5e84c012b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilegen/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+
+  pname = "tracefilegen";
+  version = "unstable-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/${pname}-${version}/
+    cp -ar $src/Documentation/html $out/share/doc/${pname}-${version}/.
+  '';
+
+  meta = with 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..a76b6b9239e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/garcosim/tracefilesim/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+
+  pname = "tracefilesim";
+  version = "unstable-2015-11-07";
+
+  src = fetchFromGitHub {
+    owner = "GarCoSim";
+    repo = "TraceFileSim";
+    rev = "368aa6b1d6560e7ecbd16fca47000c8f528f3da2";
+    sha256 = "156m92k38ap4bzidbr8dzl065rni8lrib71ih88myk9z5y1x5nxm";
+  };
+
+  hardeningDisable = [ "fortify" ];
+
+  installPhase = ''
+    mkdir --parents "$out/bin"
+    cp ./traceFileSim "$out/bin"
+  '';
+
+  meta = with 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..b169877f5c1f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/hopper/default.nix
@@ -0,0 +1,80 @@
+{ stdenv
+, fetchurl
+, lib
+, autoPatchelfHook
+, wrapQtAppsHook
+, libbsd
+, python27
+, gmpxx
+, ncurses5
+, gnustep
+, libffi
+}:
+stdenv.mkDerivation rec {
+  pname = "hopper";
+  version = "4.5.29";
+  rev = "v${lib.versions.major version}";
+
+  src = fetchurl {
+    url = "https://d2ap6ypl1xbe4k.cloudfront.net/Hopper-${rev}-${version}-Linux.pkg.tar.xz";
+    sha256 = "1v1pff5fiv41khvrnlpdks2vddjnvziyn14qqj6v26snyhwi86zh";
+  };
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+    autoPatchelfHook
+  ];
+
+  buildInputs = [
+    libbsd
+    python27
+    gmpxx
+    ncurses5
+    gnustep.libobjc
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mkdir -p $out/lib
+    mkdir -p $out/share
+
+    cp $sourceRoot/opt/hopper-${rev}/bin/Hopper $out/bin/hopper
+    cp \
+      --archive \
+      $sourceRoot/opt/hopper-${rev}/lib/libBlocksRuntime.so* \
+      $sourceRoot/opt/hopper-${rev}/lib/libdispatch.so* \
+      $sourceRoot/opt/hopper-${rev}/lib/libgnustep-base.so* \
+      $sourceRoot/opt/hopper-${rev}/lib/libHopperCore.so* \
+      $sourceRoot/opt/hopper-${rev}/lib/libkqueue.so* \
+      $sourceRoot/opt/hopper-${rev}/lib/libobjcxx.so* \
+      $sourceRoot/opt/hopper-${rev}/lib/libpthread_workqueue.so* \
+      $out/lib
+
+    # we already ship libffi.so.7
+    ln -s ${lib.getLib libffi}/lib/libffi.so $out/lib/libffi.so.6
+
+    cp -r $sourceRoot/usr/share $out
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    substituteInPlace "$out/share/applications/hopper-${rev}.desktop" \
+      --replace "Exec=/opt/hopper-${rev}/bin/Hopper" "Exec=$out/bin/hopper"
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.hopperapp.com/index.html";
+    description = "A macOS and Linux Disassembler";
+    license = licenses.unfree;
+    maintainers = with maintainers; [
+      luis
+      Enteee
+    ];
+    platforms = 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..5fede1aee5c5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/hotspot/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, mkDerivation
+, cmake
+, elfutils
+, extra-cmake-modules
+, fetchFromGitHub
+, kconfigwidgets
+, ki18n
+, kio
+, kitemmodels
+, kitemviews
+, kwindowsystem
+, libelf
+, qtbase
+, threadweaver
+, qtx11extras
+, zstd
+, kddockwidgets
+, rustc-demangle
+}:
+
+mkDerivation rec {
+  pname = "hotspot";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "KDAB";
+    repo = "hotspot";
+    rev = "v${version}";
+    sha256 = "1f68bssh3p387hkavfjkqcf7qf7w5caznmjfjldicxphap4riqr5";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+  ];
+  buildInputs = [
+    elfutils
+    kconfigwidgets
+    ki18n
+    kio
+    kitemmodels
+    kitemviews
+    kwindowsystem
+    libelf
+    qtbase
+    threadweaver
+    qtx11extras
+    zstd
+    kddockwidgets
+    rustc-demangle
+  ];
+
+  # 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,PrefixTickLabels}/.git
+  '';
+
+  cmakeFlags = [
+    "-DRUSTC_DEMANGLE_INCLUDE_DIR=${rustc-demangle}/include"
+    "-DRUSTC_DEMANGLE_LIBRARY=${rustc-demangle}/lib/librustc_demangle.so"
+  ];
+
+  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 lib.licenses; [ gpl2Only gpl3Only ];
+    platforms = lib.platforms.linux;
+    maintainers = with 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..a1eec36204bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/ikos/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, lib, fetchFromGitHub, cmake, boost, tbb
+, gmp, llvm, clang, sqlite, python3
+, ocamlPackages, mpfr, ppl, doxygen, graphviz
+}:
+
+let
+  python = python3.withPackages (ps: with ps; [
+    pygments
+  ]);
+in
+
+stdenv.mkDerivation rec {
+  pname = "ikos";
+  version = "3.0";
+
+  src = fetchFromGitHub {
+    owner = "NASA-SW-VnV";
+    repo = "ikos";
+    rev = "v${version}";
+    sha256 = "0k3kp1af0qx3l1x6a4sl4fm8qlwchjvwkvs2ck0fhfnc62q2im5f";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ boost tbb 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..bc1be4e5ba5e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/include-what-you-use/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, cmake, llvmPackages, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "include-what-you-use";
+  # Also bump llvmPackages in all-packages.nix to the supported version!
+  version = "0.17";
+
+  src = fetchurl {
+    sha256 = "sha256-7KfAT4tBa2OF7QDjNmmn+kaTzSbLcrUizeVYgo6wxmU=";
+    url = "${meta.homepage}/downloads/${pname}-${version}.src.tar.gz";
+  };
+
+  nativeBuildInputs = with llvmPackages; [ cmake llvm.dev llvm python3];
+  buildInputs = with llvmPackages; [ libclang clang-unwrapped ];
+
+  cmakeFlags = [ "-DIWYU_LLVM_ROOT_PATH=${llvmPackages.clang-unwrapped}" ];
+
+  postInstall = ''
+    substituteInPlace $out/bin/iwyu_tool.py \
+      --replace "'include-what-you-use'" "'$out/bin/include-what-you-use'"
+  '';
+
+  meta = with 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..faa68dadc3b4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/jdepend/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, ant, jdk, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "jdepend";
+  version = "2.10";
+
+  src = fetchFromGitHub {
+    owner = "clarkware";
+    repo = "jdepend";
+    rev = version;
+    sha256 = "1lxf3j9vflky7a2py3i59q7cwd1zvjv2b88l3za39vc90s04dz6k";
+  };
+
+  nativeBuildInputs = [ ant jdk ];
+  buildPhase = "ant jar";
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share
+    install dist/${pname}-${version}.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 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..a708c88ee9ee
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/kcov/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, zlib
+, curl
+, elfutils
+, python3
+, libiberty
+, libopcodes
+, runCommand
+, gcc
+, rustc
+}:
+
+let
+  self =
+    stdenv.mkDerivation rec {
+      pname = "kcov";
+      version = "38";
+
+      src = fetchFromGitHub {
+        owner = "SimonKagstrom";
+        repo = "kcov";
+        rev = "v${version}";
+        sha256 = "sha256-6LoIo2/yMUz8qIpwJVcA3qZjjF+8KEM1MyHuyHsQD38=";
+      };
+
+      preConfigure = "patchShebangs src/bin-to-c-source.py";
+      nativeBuildInputs = [ cmake pkg-config python3 ];
+
+      buildInputs = [ curl zlib elfutils libiberty libopcodes ];
+
+      strictDeps = true;
+
+      passthru.tests = {
+        works-on-c = runCommand "works-on-c" {} ''
+          set -ex
+          cat - > a.c <<EOF
+          int main() {}
+          EOF
+          ${gcc}/bin/gcc a.c -o a.out
+          ${self}/bin/kcov /tmp/kcov ./a.out
+          test -e /tmp/kcov/index.html
+          touch $out
+          set +x
+        '';
+
+        works-on-rust = runCommand "works-on-rust" {} ''
+          set -ex
+          cat - > a.rs <<EOF
+          fn main() {}
+          EOF
+          # Put gcc in the path so that `cc` is found
+          PATH=${gcc}/bin:$PATH ${rustc}/bin/rustc a.rs -o a.out
+          ${self}/bin/kcov /tmp/kcov ./a.out
+          test -e /tmp/kcov/index.html
+          touch $out
+          set +x
+        '';
+      };
+
+      meta = with 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;
+        changelog = "https://github.com/SimonKagstrom/kcov/blob/master/ChangeLog";
+
+        maintainers = with maintainers; [ gal_bolle ekleog ];
+        platforms = platforms.linux;
+      };
+    };
+in
+self
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..30df5daed6ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/lcov/default.nix
@@ -0,0 +1,45 @@
+ {lib, stdenv, fetchFromGitHub, perl, perlPackages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "lcov";
+  version = "1.15";
+
+  src = fetchFromGitHub {
+    owner = "linux-test-project";
+    repo = "lcov";
+    rev = "v${version}";
+    sha256 = "1kvc7fkp45w48f0bxwbxvxkicnjrrydki0hllg294n1wrp80zzyk";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
+
+  preBuild = ''
+    patchShebangs bin/
+    makeFlagsArray=(PREFIX=$out LCOV_PERL_PATH=$(command -v perl))
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/lcov --set PERL5LIB ${perlPackages.makeFullPerlPath [ perlPackages.PerlIOgzip perlPackages.JSON ]}
+    wrapProgram $out/bin/genpng --set PERL5LIB ${perlPackages.makeFullPerlPath [ perlPackages.GD ]}
+  '';
+
+  meta = with 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 = 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..5c286e629547
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/makefile2graph/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, bash, gnumake }:
+
+stdenv.mkDerivation rec {
+  pname = "makefile2graph";
+  version = "unstable-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 ${lib.makeBinPath [ gnumake ]}
+  '';
+
+  meta = with 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.all;
+  };
+}
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..78f8bbeb683e
--- /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 {
+  pname = "massif-visualizer";
+  version = "0.7.0";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/massif-visualizer/${version}/src/${pname}-${version}.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; [ zraexy ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/nix-linter/default.nix b/nixpkgs/pkgs/development/tools/analysis/nix-linter/default.nix
new file mode 100644
index 000000000000..1a6539520d73
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/nix-linter/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, fixplate
+, tasty
+, tasty-hunit
+, tasty-th
+, streamly
+, mtl
+, path
+, pretty-terminal
+, text
+, base
+, aeson
+, path-io
+, cmdargs
+, containers
+, hnix
+, bytestring
+}:
+
+mkDerivation rec {
+  pname = "nix-linter";
+  version = "0.2.0.3";
+
+  src = fetchFromGitHub {
+    owner = "Synthetica9";
+    repo = "nix-linter";
+    rev = "38c4a14681cf3a1e6f098d8b723db503910a28d8";
+    sha256 = "16igk4xnm4mg9mw0zg2zk6s44axia3fs6334fasvjy0c7cjwk4c7";
+  };
+
+  isLibrary = false;
+  isExecutable = true;
+  libraryHaskellDepends = [ fixplate ];
+  executableHaskellDepends = [ streamly mtl path pretty-terminal text base aeson cmdargs containers hnix bytestring path-io ];
+  testHaskellDepends = [ tasty tasty-hunit tasty-th ];
+
+  description = "Linter for Nix(pkgs), based on hnix";
+  homepage = "https://github.com/Synthetica9/nix-linter";
+  license = lib.licenses.bsd3;
+  maintainers = [ lib.maintainers.marsam ];
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/oclgrind/default.nix b/nixpkgs/pkgs/development/tools/analysis/oclgrind/default.nix
new file mode 100644
index 000000000000..3752fa8e251d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/oclgrind/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, cmake, llvmPackages, readline, python2 }:
+
+stdenv.mkDerivation rec {
+  pname = "oclgrind";
+  version = "21.10";
+
+  src = fetchFromGitHub {
+    owner = "jrprice";
+    repo = "oclgrind";
+    rev = "v${version}";
+    sha256 = "sha256-DGCF7X2rPV1w9guxg2bMylRirXQgez24sG7Unlct3ow=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ llvmPackages.llvm llvmPackages.clang-unwrapped readline python2 ];
+
+  cmakeFlags = [
+    "-DCLANG_ROOT=${llvmPackages.clang-unwrapped}"
+  ];
+
+  meta = with lib; {
+    description = "An OpenCL device simulator and debugger";
+    homepage = "https://github.com/jrprice/oclgrind";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ athas ];
+  };
+}
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..500ca632fcf0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/panopticon/default.nix
@@ -0,0 +1,50 @@
+{ lib, fetchFromGitHub, rustPlatform, qt5, git, cmake
+, pkg-config, makeWrapper }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "panopticon";
+  version = "unstable-20171202";
+
+  src = fetchFromGitHub {
+    owner = "das-labor";
+    repo = pname;
+    rev = "33ffec0d6d379d51b38d6ea00d040f54b1356ae4";
+    sha256 = "1zv87nqhrzsxx0m891df4vagzssj3kblfv9yp7j96dw0vn9950qa";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config makeWrapper ];
+  propagatedBuildInputs = with qt5; [
+     qt5.qtbase
+     qtdeclarative
+     qtsvg
+     qtquickcontrols2
+     qtgraphicaleffects
+     git
+  ];
+
+  dontWrapQtApps = true;
+
+  cargoSha256 = "0vhcb3kw1zgchx3nrk8lyrz8p5071y99vsysxvi71klv7dcvn0am";
+  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 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 ];
+  };
+}
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..a46bc067f11b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/pev/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, openssl, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "pev";
+  version = "unstable-2020-05-23";
+
+  src = fetchFromGitHub {
+    owner = "merces";
+    repo = "pev";
+    rev = "beec2b4f09585fea919ed41ce466dee06be0b6bf";
+    sha256 = "sha256-HrMbk9YbuqkoBBM7+rfXpqVEnd1rDl2rMePdcfU1WDg=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ openssl ];
+
+  enableParallelBuilding = true;
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  installFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    description = "A full-featured, open source, multiplatform command line toolkit to work with PE (Portable Executables) binaries";
+    homepage = "https://pev.sourceforge.net/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ jeschli ];
+    platforms = platforms.linux;
+  };
+}
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..503d5c630498
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/pmd/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, unzip, makeWrapper, openjdk }:
+
+stdenv.mkDerivation rec {
+  pname = "pmd";
+  version = "6.43.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pmd/pmd-bin-${version}.zip";
+    sha256 = "sha256-+eJCN890vm4WBcMZ2VCGOS8WUyIckL+DfQVNaUSovGE=";
+  };
+
+  nativeBuildInputs = [ unzip makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out
+    cp -R {bin,lib} $out
+    wrapProgram $out/bin/run.sh --prefix PATH : ${openjdk.jre}/bin
+    runHook postInstall
+  '';
+
+  meta = with 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 ];
+  };
+}
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..5ce79a092488
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/qcachegrind/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, qmake, qtbase, perl, python2, php, kcachegrind, wrapQtAppsHook }:
+
+stdenv.mkDerivation {
+  pname = "qcachegrind";
+  version = kcachegrind.version;
+
+  src = kcachegrind.src;
+
+  buildInputs = [ qtbase perl python2 php ];
+
+  nativeBuildInputs = [ qmake wrapQtAppsHook ];
+
+  dontWrapQtApps = true;
+
+  postInstall = ''
+     mkdir -p $out/bin
+     cp -p converters/dprof2calltree $out/bin/dprof2calltree
+     cp -p converters/hotshot2calltree.in $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"
+  '');
+
+  preFixup = ''
+    wrapQtApp "$out/bin/qcachegrind"
+  '';
+
+  meta = with lib; {
+    description = "A Qt GUI to visualize profiling data";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ periklis ];
+  };
+}
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..d5d393ee96eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/radare2/default.nix
@@ -0,0 +1,119 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, buildPackages
+, pkg-config
+, libusb-compat-0_1
+, readline
+, libewf
+, perl
+, zlib
+, openssl
+, libuv
+, file
+, libzip
+, xxHash
+, gtk2
+, vte
+, gtkdialog
+, python3
+, ruby
+, lua
+, capstone
+, useX11 ? false
+, rubyBindings ? false
+, pythonBindings ? false
+, luaBindings ? false
+}:
+
+let
+  # FIXME: Compare revision with https://github.com/radareorg/radare2/blob/master/libr/asm/arch/arm/v35arm64/Makefile#L20
+  arm64 = fetchFromGitHub {
+    owner = "radareorg";
+    repo = "vector35-arch-arm64";
+    rev = "3c5eaba46dab72ecb7d5f5b865a13fdeee95b464";
+    sha256 = "sha256-alcGEi+D8CptXzfznnuxQKCvU2mbzn2sQge5jSqLVpg=";
+  };
+  armv7 = fetchFromGitHub {
+    owner = "radareorg";
+    repo = "vector35-arch-armv7";
+    rev = "dde39f69ffea19fc37e681874b12cb4707bc4f30";
+
+    sha256 = "sha256-bnWQc0dScM9rhIdzf+iVXvMqYWq/bguEAUQPaZRgdlU=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "radare2";
+  version = "5.6.4";
+
+  src = fetchFromGitHub {
+    owner = "radare";
+    repo = "radare2";
+    rev = version;
+    sha256 = "sha256-rqGlp9fHTF1z8A+DROYfzHXi5xfLMdUWzssGN5uHQmE=";
+  };
+
+  preBuild = ''
+    cp -r ${arm64} libr/asm/arch/arm/v35arm64/arch-arm64
+    chmod -R +w libr/asm/arch/arm/v35arm64/arch-arm64
+
+    cp -r ${armv7} libr/asm/arch/arm/v35arm64/arch-armv7
+    chmod -R +w libr/asm/arch/arm/v35arm64/arch-armv7
+  '';
+
+  postFixup = lib.optionalString stdenv.isDarwin ''
+    for file in $out/bin/rasm2 $out/bin/ragg2 $out/bin/rabin2 $out/lib/libr_asm.${version}.dylib $out/lib/libr_anal.${version}.dylib; do
+      install_name_tool -change libcapstone.4.dylib ${capstone}/lib/libcapstone.4.dylib $file
+    done
+  '';
+
+  WITHOUT_PULL = "1";
+  makeFlags = [
+    "GITTAP=${version}"
+    "RANLIB=${stdenv.cc.bintools.bintools}/bin/${stdenv.cc.bintools.targetPrefix}ranlib"
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "HOST_CC=${stdenv.cc.targetPrefix}cc"
+  ];
+
+  configureFlags = [
+    "--with-sysmagic"
+    "--with-syszip"
+    "--with-sysxxhash"
+    "--with-syscapstone"
+    "--with-openssl"
+  ];
+
+  enableParallelBuilding = true;
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    capstone
+    file
+    readline
+    libusb-compat-0_1
+    libewf
+    perl
+    zlib
+    openssl
+    libuv
+  ] ++ lib.optional useX11 [ gtkdialog vte gtk2 ]
+    ++ lib.optional rubyBindings [ ruby ]
+    ++ lib.optional pythonBindings [ python3 ]
+    ++ lib.optional luaBindings [ lua ];
+
+  propagatedBuildInputs = [
+    # radare2 exposes r_lib which depends on these libraries
+    file # for its list of magic numbers (`libmagic`)
+    libzip
+    xxHash
+  ];
+
+  meta = with lib; {
+    description = "unix-like reverse engineering framework and commandline tools";
+    homepage = "https://radare.org/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin makefu mic92 arkivm ];
+    platforms = platforms.unix;
+  };
+}
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..4c33ef57a47d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/randoop/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  version = "4.3.0";
+  pname = "randoop";
+
+  src = fetchurl {
+    url = "https://github.com/randoop/randoop/releases/download/v${version}/${pname}-${version}.zip";
+    sha256 = "sha256-3svBmXcRvscaK8YD4qm/geQSJ6cAm0en/d7H09h41PQ=";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    mkdir -p $out/lib $out/doc
+
+    cp -R *.jar $out/lib
+    cp README.txt $out/doc
+  '';
+
+  meta = with 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..1701abeb25fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/retdec/default.nix
@@ -0,0 +1,233 @@
+{ stdenv
+, fetchFromGitHub
+, fetchpatch
+, fetchzip
+, lib
+, callPackage
+, openssl
+, cmake
+, autoconf
+, automake
+, libtool
+, pkg-config
+, 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 {
+  pname = "retdec";
+
+  # 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
+  # gcc is pinned to gcc8 in all-packages.nix. That should probably be re-evaluated on update.
+  version = "3.2";
+
+  src = fetchFromGitHub {
+    owner = "avast-tl";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "0chky656lsddn20bnm3pmz6ix20y4a0y8swwr42hrhi01vkhmzrp";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    autoconf
+    automake
+    libtool
+    pkg-config
+    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'"
+  '';
+
+  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..c8bc4ed747b3
--- /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
+  pname = "yaracpp-src";
+  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/rizin/cutter.nix b/nixpkgs/pkgs/development/tools/analysis/rizin/cutter.nix
new file mode 100644
index 000000000000..a6ac4fbce12f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rizin/cutter.nix
@@ -0,0 +1,44 @@
+{ fetchFromGitHub, lib, mkDerivation
+# nativeBuildInputs
+, qmake, pkg-config, cmake
+# Qt
+, qtbase, qtsvg, qtwebengine, qttools
+# buildInputs
+, rizin
+, python3
+, wrapQtAppsHook
+}:
+
+mkDerivation rec {
+  pname = "cutter";
+  version = "2.0.5";
+
+  src = fetchFromGitHub {
+    owner = "rizinorg";
+    repo = "cutter";
+    rev = "v${version}";
+    sha256 = "sha256-ljws9S7ZxZK/Ou8jgGSoR++vtzFTEBywHMhCC/UOLEs=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake qmake pkg-config python3 wrapQtAppsHook ];
+  propagatedBuildInputs = [ python3.pkgs.pyside2 ];
+  buildInputs = [ qtbase qttools qtsvg qtwebengine rizin python3 ];
+
+  cmakeFlags = [
+    "-DCUTTER_USE_BUNDLED_RIZIN=OFF"
+    "-DCUTTER_ENABLE_PYTHON=ON"
+    "-DCUTTER_ENABLE_PYTHON_BINDINGS=ON"
+  ];
+
+  preBuild = ''
+    qtWrapperArgs+=(--prefix PYTHONPATH : "$PYTHONPATH")
+  '';
+
+  meta = with lib; {
+    description = "Free and Open Source Reverse Engineering Platform powered by rizin";
+    homepage = src.meta.homepage;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ mic92 dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/rizin/default.nix b/nixpkgs/pkgs/development/tools/analysis/rizin/default.nix
new file mode 100644
index 000000000000..c4cdf85a7d8a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rizin/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, libusb-compat-0_1
+, readline
+, libewf
+, perl
+, zlib
+, openssl
+, libuv
+, file
+, libzip
+, lz4
+, xxHash
+, meson
+, cmake
+, ninja
+, capstone
+, tree-sitter
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rizin";
+  version = "0.3.4";
+
+  src = fetchurl {
+    url = "https://github.com/rizinorg/rizin/releases/download/v${version}/rizin-src-v${version}.tar.xz";
+    sha256 = "sha256-7qSbOWOHwJ0ZcFqrAqYXzbFWgvymfxAf8rJ+75SnEOk=";
+  };
+
+  mesonFlags = [
+    "-Duse_sys_capstone=enabled"
+    "-Duse_sys_magic=enabled"
+    "-Duse_sys_libzip=enabled"
+    "-Duse_sys_zlib=enabled"
+    "-Duse_sys_xxhash=enabled"
+    "-Duse_sys_lz4=enabled"
+    "-Duse_sys_openssl=enabled"
+    "-Duse_sys_tree_sitter=enabled"
+  ];
+
+  nativeBuildInputs = [ pkg-config meson ninja cmake (python3.withPackages (ps: [ ps.setuptools ])) ];
+
+  # meson's find_library seems to not use our compiler wrapper if static paraemter
+  # is either true/false... We work around by also providing LIBRARY_PATH
+  preConfigure = ''
+    LIBRARY_PATH=""
+    for b in ${toString (map lib.getLib buildInputs)}; do
+      if [[ -d "$b/lib" ]]; then
+        LIBRARY_PATH="$b/lib''${LIBRARY_PATH:+:}$LIBRARY_PATH"
+      fi
+    done
+    export LIBRARY_PATH
+  '';
+
+  buildInputs = [
+    file
+    libzip
+    capstone
+    readline
+    libusb-compat-0_1
+    libewf
+    perl
+    zlib
+    lz4
+    openssl
+    libuv
+    tree-sitter
+    xxHash
+  ];
+
+  meta = {
+    description = "UNIX-like reverse engineering framework and command-line toolset.";
+    homepage = "https://rizin.re/";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ raskin makefu mic92 ];
+    platforms = with lib.platforms; linux;
+  };
+}
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..bda6f7e4e3c5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rr/default.nix
@@ -0,0 +1,59 @@
+{ lib, gcc9Stdenv, fetchFromGitHub, cmake, libpfm, zlib, pkg-config, python3Packages, which, procps, gdb, capnproto }:
+
+gcc9Stdenv.mkDerivation rec {
+  version = "5.5.0";
+  pname = "rr";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = "rr";
+    rev = version;
+    sha256 = "sha256-ZZhkmDWGNWejwXZEcFO9p9NG1dopK7kXRj7OrkJCPR0=";
+  };
+
+  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 = [ cmake pkg-config which ];
+  buildInputs = [
+    libpfm zlib python3Packages.python python3Packages.pexpect procps gdb capnproto
+  ];
+  propagatedBuildInputs = [ gdb ]; # needs GDB to replay programs at runtime
+  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" ];
+
+  # 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 lib.licenses; [ mit bsd2 ];
+    maintainers = with lib.maintainers; [ pierron thoughtpolice ];
+    platforms = lib.platforms.x86;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/rr/unstable.nix b/nixpkgs/pkgs/development/tools/analysis/rr/unstable.nix
new file mode 100644
index 000000000000..35098c1bcfc8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rr/unstable.nix
@@ -0,0 +1,22 @@
+# This is a temporary copy of the default.nix in this folder, with the version
+# updated to the current tip of rr's master branch. This exists because rr has
+# not had a release in a long time. Upstream has stated that it should be fine
+# to use master. This file, and its attribute in all-packages, can be removed
+# once rr makes a release.
+
+{ callPackage, fetchFromGitHub }:
+
+let
+  rr = callPackage ./. {};
+in
+
+  rr.overrideAttrs (old: {
+    version = "unstable-2021-07-06";
+
+    src = fetchFromGitHub {
+      owner = "mozilla";
+      repo = "rr";
+      rev = "0fc21a8d654dabc7fb1991d76343824cb7951ea0";
+      sha256 = "0s851rflxmvxcfw97zmplcwzhv86xmd3my78pi4c7gkj18d621i5";
+    };
+  })
diff --git a/nixpkgs/pkgs/development/tools/analysis/rr/zen_workaround.nix b/nixpkgs/pkgs/development/tools/analysis/rr/zen_workaround.nix
new file mode 100644
index 000000000000..193e70d0d95d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/rr/zen_workaround.nix
@@ -0,0 +1,45 @@
+{ stdenv, lib, fetchzip, kernel }:
+
+/* The python script shouldn't be needed for users of this kernel module.
+  https://github.com/rr-debugger/rr/blob/master/scripts/zen_workaround.py
+  The module itself is called "zen_workaround" (a bit generic unfortunately).
+*/
+stdenv.mkDerivation rec {
+  pname = "rr-zen_workaround";
+  version = "2020-09-22";
+
+  src = fetchzip {
+    url = "https://gist.github.com/glandium/01d54cefdb70561b5f6675e08f2990f2/archive/2f430f0c136a69b0886281d0c76708997d8878af.zip";
+    sha256 = "1mbmbyymgl75wparv3rgnyxnc44rd6n935jziz9anl9apy031ryi";
+  };
+
+  hardeningDisable = [ "pic" ];
+  nativeBuildInputs = kernel.moduleBuildDependencies;
+
+  makeFlags = [
+    "-C${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
+  ];
+  postConfigure = ''
+    makeFlags="$makeFlags M=$(pwd)"
+  '';
+  buildFlags = "modules";
+
+  installPhase = let
+    modDestDir = "$out/lib/modules/${kernel.modDirVersion}/kernel"; #TODO: longer path?
+  in ''
+    runHook preInstall
+    mkdir -p "${modDestDir}"
+    cp *.ko "${modDestDir}/"
+    find ${modDestDir} -name '*.ko' -exec xz -f '{}' \;
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Kernel module supporting the rr debugger on (some) AMD Zen-based CPUs";
+    homepage = "https://github.com/rr-debugger/rr/wiki/Zen#kernel-module";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.vcunat ];
+    platforms = [ "x86_64-linux" ];
+    broken = versionOlder kernel.version "4.19"; # 4.14 breaks and 4.19 works
+  };
+}
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..82a32504d73a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/smatch/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchgit, sqlite, pkg-config, perl
+, buildllvmsparse ? true
+, buildc2xml ? true
+, llvm, libxml2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "smatch";
+  version = "20120924";
+
+  src = fetchgit {
+    url = "git://repo.or.cz/${pname}.git";
+    rev = "23656e3e578b700cbf96d043f039e6341a3ba5b9";
+    sha256 = "0r43qi6vryqg450fj73yjwbb7gzcgx64rhrhb3r1m6a252srijiy";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ sqlite perl ]
+   ++ lib.optional buildllvmsparse llvm
+   ++ lib.optional buildc2xml libxml2;
+
+  preBuild = ''
+    sed -i Makefile \
+      -e "s|^PREFIX=.*|PREFIX = $out|g"
+  '';
+
+  meta = with lib; {
+    description = "A semantic analysis tool for C";
+    homepage = "http://smatch.sourceforge.net/";
+    maintainers = with maintainers; [];
+    license = licenses.free; /* OSL, see http://www.opensource.org */
+    platforms = 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..870f084580b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/snowman/default.nix
@@ -0,0 +1,31 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, boost, qtbase }:
+
+mkDerivation rec {
+  pname = "snowman";
+  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
+  '';
+
+  meta = with 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..780ae828e28c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/sparse/default.nix
@@ -0,0 +1,36 @@
+{ callPackage, fetchurl, lib, stdenv, gtk3, pkg-config, libxml2, llvm, perl, sqlite }:
+
+let
+  GCC_BASE = "${stdenv.cc.cc}/lib/gcc/${stdenv.hostPlatform.uname.processor}-unknown-linux-gnu/${stdenv.cc.cc.version}";
+in stdenv.mkDerivation rec {
+  pname = "sparse";
+  version = "0.6.4";
+
+  src = fetchurl {
+    url = "mirror://kernel/software/devel/sparse/dist/${pname}-${version}.tar.xz";
+    sha256 = "sha256-arKLSZG8au29c1UCkTYKpqs99B9ZIGqb3paQIIpuOHw=";
+  };
+
+  preConfigure = ''
+    sed -i 's|"/usr/include"|"${stdenv.cc.libc.dev}/include"|' pre-process.c
+    sed -i 's|qx(\$ccom -print-file-name=)|"${GCC_BASE}"|' cgcc
+    makeFlags+=" PREFIX=$out"
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk3 libxml2 llvm perl sqlite ];
+  doCheck = true;
+  buildFlags = "GCC_BASE:=${GCC_BASE}";
+
+  passthru.tests = {
+    simple-execution = callPackage ./tests.nix { };
+  };
+
+  meta = with lib; {
+    description = "Semantic parser for C";
+    homepage    = "https://git.kernel.org/cgit/devel/sparse/sparse.git/";
+    license     = licenses.mit;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ thoughtpolice jkarlson ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/sparse/tests.nix b/nixpkgs/pkgs/development/tools/analysis/sparse/tests.nix
new file mode 100644
index 000000000000..5eba254e537a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/sparse/tests.nix
@@ -0,0 +1,24 @@
+{ runCommand, gcc, sparse, writeText }:
+let
+  src = writeText "CODE.c" ''
+    #include <stdio.h>
+    #include <stddef.h>
+    #include <stdlib.h>
+
+    int main(int argc, char *argv[]) {
+      return EXIT_SUCCESS;
+    }
+  '';
+in
+  runCommand "${sparse.pname}-tests" { buildInputs = [ gcc sparse ]; meta.timeout = 3; }
+''
+  set -eu
+  ${sparse}/bin/cgcc ${src} > output 2>&1 || ret=$?
+  if [[ -z $(<output) ]]; then
+    mv output $out
+  else
+    echo "Test build returned $ret"
+    cat output
+    exit 1
+  fi
+''
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..62026d527810
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/spin/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, bison, gcc, tk, swarm, graphviz }:
+
+let
+  binPath = lib.makeBinPath [ gcc graphviz tk swarm ];
+in
+
+stdenv.mkDerivation rec {
+  pname = "spin";
+  version = "6.5.2";
+
+  src = fetchFromGitHub {
+    owner = "nimble-code";
+    repo = "Spin";
+    rev = "version-${version}";
+    sha256 = "sha256-drvQXfDZCZRycBZt/VNngy8zs4XVJg+d1b4dQXVcyFU=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ bison ];
+
+  sourceRoot = "source/Src";
+
+  preBuild = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  enableParallelBuilding = true;
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/spin --prefix PATH : ${binPath}
+  '';
+
+  meta = with lib; {
+    description = "Formal verification tool for distributed software systems";
+    homepage = "https://spinroot.com/";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ pSub siraben ];
+  };
+}
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..954342550eac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/splint/default.nix
@@ -0,0 +1,33 @@
+{ fetchurl, lib, stdenv, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "splint";
+  version = "3.1.2";
+
+  src = fetchurl {
+    url = "https://www.splint.org/downloads/${pname}-${version}.src.tgz";
+    sha256 = "02pv8kscsrkrzip9r08pfs9xs98q74c52mlxzbii6cv6vx1vd3f7";
+  };
+
+  patches = [ ./tmpdir.patch ] ++ lib.optional stdenv.isDarwin ./darwin.patch;
+
+  buildInputs = [ flex ];
+
+  doCheck = true;
+
+  meta = with 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/svlint/default.nix b/nixpkgs/pkgs/development/tools/analysis/svlint/default.nix
new file mode 100644
index 000000000000..ef4e31e9481f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/svlint/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "svlint";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "dalance";
+    repo = "svlint";
+    rev = "v${version}";
+    sha256 = "sha256-BgkzbKRcZkot3qkwPqSE9QkH3A3HNDuLjpFzKsU+Wb0=";
+  };
+
+  cargoSha256 = "sha256-HeFh8H7IN3m4HiEH1QbCBROslzVCzYxGIaeyM4K7gcs=";
+
+  meta = with lib; {
+    description = "SystemVerilog linter";
+    homepage = "https://github.com/dalance/svlint";
+    license = licenses.mit;
+    maintainers = with maintainers; [ trepetti ];
+  };
+}
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..cc67ce8123c8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/swarm/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "swarm";
+  version = "unstable-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 lib; {
+    description = "Verification script generator for Spin";
+    homepage = "http://spinroot.com/";
+    license = licenses.free;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/tartan/default.nix b/nixpkgs/pkgs/development/tools/analysis/tartan/default.nix
new file mode 100644
index 000000000000..0ac4bf325282
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/tartan/default.nix
@@ -0,0 +1,52 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, meson
+, ninja
+, pkg-config
+, llvmPackages
+, gobject-introspection
+, glib
+, unstableGitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tartan";
+  version = "unstable-2021-12-23";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "tartan";
+    repo = "tartan";
+    rev = "bd4ea95d8b3ce1258491e9fac7fcc37d2b241a16";
+    sha256 = "l3duPt8Kh/JljzOV+Dm26XbS7gZ+mmFfYUYofWSJRyo=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    gobject-introspection
+    glib
+    llvmPackages.libclang
+    llvmPackages.libllvm
+  ];
+
+  passthru = {
+    updateScript = unstableGitUpdater {
+      # The updater tries src.url by default, which does not exist for fetchFromGitLab (fetchurl).
+      url = "https://gitlab.freedesktop.org/tartan/tartan.git";
+    };
+  };
+
+  meta = with lib; {
+    description = "Tools and Clang plugins for developing code with GLib";
+    homepage = "https://freedesktop.org/wiki/Software/tartan";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ jtojnar ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/tflint/default.nix b/nixpkgs/pkgs/development/tools/analysis/tflint/default.nix
new file mode 100644
index 000000000000..869d7e464a52
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/tflint/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tflint";
+  version = "0.34.1";
+
+  src = fetchFromGitHub {
+    owner = "terraform-linters";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ltxFduUr+poi4tEjViQXCbe+j3fUdvBG8CTaM7VdpK0=";
+  };
+
+  vendorSha256 = "sha256-xEmDOP2DbTZ8bpK4OCabIpOwORB8EOJZkHCxL5wBeEU=";
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Terraform linter focused on possible errors, best practices, and so on";
+    homepage = "https://github.com/terraform-linters/tflint";
+    changelog = "https://github.com/terraform-linters/tflint/raw/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/analysis/tfsec/default.nix b/nixpkgs/pkgs/development/tools/analysis/tfsec/default.nix
new file mode 100644
index 000000000000..87e7676da899
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/tfsec/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoPackage
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  pname = "tfsec";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "aquasecurity";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-KIS2o2pLus5aohRYsabWRxZs4KfYM6PXSNp0JZhhlZk=";
+  };
+
+  goPackagePath = "github.com/aquasecurity/tfsec";
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X ${goPackagePath}/version.Version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Static analysis powered security scanner for terraform code";
+    homepage = "https://github.com/aquasecurity/tfsec";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab marsam ];
+  };
+}
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..b879a6ef2374
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/uefi-firmware-parser/default.nix
@@ -0,0 +1,30 @@
+{ lib, 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 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/default.nix b/nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix
new file mode 100644
index 000000000000..6e736df235f0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix
@@ -0,0 +1,104 @@
+{ lib, stdenv, fetchurl, fetchpatch
+, autoreconfHook, perl
+, gdb, cctools, xnu, bootstrap_cmds
+}:
+
+stdenv.mkDerivation rec {
+  pname = "valgrind";
+  version = "3.18.1";
+
+  src = fetchurl {
+    url = "https://sourceware.org/pub/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-AIWaoTp3Lt33giIl9LRu4NOa++Bx0yd42k2ZmECB9/U=";
+  };
+
+  patches = [
+    # Fix tests on Musl.
+    # https://bugs.kde.org/show_bug.cgi?id=445300
+    (fetchpatch {
+      url = "https://bugsfiles.kde.org/attachment.cgi?id=143535";
+      sha256 = "036zyk30rixjvpylw3c7n171n4gpn6zcp7h6ya2dz4h5r478l9i6";
+    })
+  ];
+
+  outputs = [ "out" "dev" "man" "doc" ];
+
+  hardeningDisable = [ "pie" "stackprotector" ];
+
+  # GDB is needed to provide a sane default for `--db-command'.
+  # Perl is needed for `callgrind_{annotate,control}'.
+  buildInputs = [ gdb perl ]  ++ lib.optionals (stdenv.isDarwin) [ bootstrap_cmds xnu ];
+
+  # Perl is also a native build input.
+  nativeBuildInputs = [ autoreconfHook perl ];
+
+  enableParallelBuilding = true;
+  separateDebugInfo = stdenv.isLinux;
+
+  preConfigure = 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'
+
+      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 =
+    lib.optional (stdenv.hostPlatform.system == "x86_64-linux" || stdenv.hostPlatform.system == "x86_64-darwin") "--enable-only64bit"
+    ++ lib.optional stdenv.hostPlatform.isDarwin "--with-xcodedir=${xnu}/include";
+
+  doCheck = true;
+
+  postInstall = ''
+    for i in $out/libexec/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 = lib.licenses.gpl2Plus;
+
+    maintainers = [ lib.maintainers.eelco ];
+    platforms = lib.platforms.unix;
+    badPlatforms = [
+      "armv5tel-linux" "armv6l-linux" "armv6m-linux"
+      "sparc-linux" "sparc64-linux"
+      "riscv32-linux" "riscv64-linux"
+      "alpha-linux"
+    ];
+    broken = stdenv.isDarwin || stdenv.hostPlatform.isStatic; # https://hydra.nixos.org/build/128521440/nixlog/2
+  };
+}
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..fd24362bab17
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/valkyrie/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, qt4, qmake4Hook }:
+
+stdenv.mkDerivation rec {
+  pname = "valkyrie";
+  version = "2.0.0";
+
+  src = fetchurl {
+    url = "https://valgrind.org/downloads/${pname}-${version}.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 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/analysis/yallback/default.nix b/nixpkgs/pkgs/development/tools/analysis/yallback/default.nix
new file mode 100644
index 000000000000..4e62ff5b9ed8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/analysis/yallback/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, coreutils
+, bashInteractive
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.2.0";
+  pname = "yallback";
+  src = fetchFromGitHub {
+    owner = "abathur";
+    repo = "yallback";
+    rev = "v${version}";
+    hash = "sha256-t+fdnDJMFiFqN23dSY3TnsZsIDcravtwdNKJ5MiZosE=";
+  };
+
+  buildInputs = [ coreutils bashInteractive ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dv yallback $out/bin/yallback
+    wrapProgram $out/bin/yallback --prefix PATH : ${lib.makeBinPath [ coreutils ]}
+  '';
+
+  meta = with lib; {
+    description = "Callbacks for YARA rule matches";
+    homepage = "https://github.com/abathur/yallback";
+    license = licenses.mit;
+    maintainers = with maintainers; [ abathur ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/apkid/default.nix b/nixpkgs/pkgs/development/tools/apkid/default.nix
new file mode 100644
index 000000000000..2cb1c4e8d00d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/apkid/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "apkid";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "rednaga";
+    repo = "APKiD";
+    rev = "v${version}";
+    sha256 = "1p6kdjjw2jhwr875445w43k46n6zwpz0l0phkl8d3y1v4gi5l6dx";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    yara-python
+  ];
+
+  checkInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  preBuild = ''
+    # Prepare the YARA rules
+    ${python3.interpreter} prep-release.py
+  '';
+
+  postPatch = ''
+    # The next release will have support for later yara-python releases
+    substituteInPlace setup.py \
+      --replace "yara-python==3.11.0" "yara-python"
+  '';
+
+  pythonImportsCheck = [ "apkid" ];
+
+  meta = with lib; {
+    description = "Android Application Identifier";
+    homepage = "https://github.com/rednaga/APKiD";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/apksigcopier/default.nix b/nixpkgs/pkgs/development/tools/apksigcopier/default.nix
new file mode 100644
index 000000000000..cc23081473af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/apksigcopier/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, fetchFromGitHub
+, python3
+, installShellFiles
+, bash
+, pandoc
+, apksigner
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "apksigcopier";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "obfusk";
+    repo = "apksigcopier";
+    rev = "v${version}";
+    sha256 = "07ldq3q1x2lpb15q5s5i1pbg89sn6ah45amskm9pndqlh16z9k2x";
+  };
+
+  nativeBuildInputs = [ installShellFiles pandoc ];
+  propagatedBuildInputs = with python3.pkgs; [ click ];
+  checkInputs = with python3.pkgs; [ flake8 mypy pylint ];
+  makeWrapperArgs = [ "--prefix" "PATH" ":" "${lib.makeBinPath [ apksigner ]}" ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace /bin/bash ${bash}/bin/bash \
+      --replace 'apksigcopier --version' '${python3.interpreter} apksigcopier --version'
+  '';
+
+  postBuild = ''
+    make ${pname}.1
+  '';
+
+  checkPhase = ''
+    make test
+  '';
+
+  postInstall = ''
+    installManPage ${pname}.1
+  '';
+
+  meta = with lib; {
+    description = "Copy/extract/patch android apk signatures & compare apks";
+    longDescription = ''
+      apksigcopier is a tool for copying android APK signatures from a signed APK to an unsigned one (in order to verify reproducible builds).
+      It can also be used to compare two APKs with different signatures.
+      Its command-line tool offers four operations:
+
+      * copy signatures directly from a signed to an unsigned APK
+      * extract signatures from a signed APK to a directory
+      * patch previously extracted signatures onto an unsigned APK
+      * compare two APKs with different signatures (requires apksigner)
+    '';
+    homepage = "https://github.com/obfusk/apksigcopier";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = [ maintainers.obfusk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/apksigner/default.nix b/nixpkgs/pkgs/development/tools/apksigner/default.nix
new file mode 100644
index 000000000000..7b05479ea42f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/apksigner/default.nix
@@ -0,0 +1,15 @@
+{ runCommand
+, makeWrapper
+, jre
+, build-tools
+}:
+let
+  tools = builtins.head build-tools;
+in
+runCommand "apksigner" {
+  nativeBuildInputs = [ makeWrapper ];
+} ''
+  mkdir -p $out/bin
+  makeWrapper "${jre}/bin/java" "$out/bin/apksigner" \
+    --add-flags "-jar ${tools}/libexec/android-sdk/build-tools/${tools.version}/lib/apksigner.jar"
+''
diff --git a/nixpkgs/pkgs/development/tools/apktool/default.nix b/nixpkgs/pkgs/development/tools/apktool/default.nix
new file mode 100644
index 000000000000..3dda078397ea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/apktool/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre, build-tools }:
+
+stdenv.mkDerivation rec {
+  pname = "apktool";
+  version = "2.6.1";
+
+  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 = "sha256-vCuah6xahpBbbKNDwhoNs7w3vdURVLyc32VSPZWJXTQ=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  sourceRoot = ".";
+
+  installPhase =
+    let
+      tools = builtins.head build-tools;
+    in ''
+      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 : "${tools}/libexec/android-sdk/build-tools/${tools.version}"
+    '';
+
+  meta = with 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/appthreat-depscan/default.nix b/nixpkgs/pkgs/development/tools/appthreat-depscan/default.nix
new file mode 100644
index 000000000000..e93dfe845436
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/appthreat-depscan/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "appthreat-depscan";
+  version = "2.1.2";
+
+  src = fetchFromGitHub {
+    owner = "AppThreat";
+    repo = "dep-scan";
+    rev = "v${version}";
+    hash = "sha256-hRmTx0qs/QnDLl4KhGbKw5Mucq4wQCaCIkeObrZlJSI=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appthreat-vulnerability-db
+    defusedxml
+    pyyaml
+    rich
+  ];
+
+  checkInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    substituteInPlace pytest.ini \
+      --replace " --cov-append --cov-report term --cov depscan" ""
+  '';
+
+  preCheck = ''
+    export HOME=$(mktemp -d);
+  '';
+
+  disabledTests = [
+    # Assertion Error
+    "test_query_metadata2"
+  ];
+
+  pythonImportsCheck = [
+    "depscan"
+  ];
+
+  meta = with lib; {
+    description = "Tool to audit dependencies based on known vulnerabilities and advisories";
+    homepage = "https://github.com/AppThreat/dep-scan";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ashpd-demo/default.nix b/nixpkgs/pkgs/development/tools/ashpd-demo/default.nix
new file mode 100644
index 000000000000..9d873b8461f1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ashpd-demo/default.nix
@@ -0,0 +1,80 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, nix-update-script
+, meson
+, ninja
+, rustPlatform
+, pkg-config
+, glib
+, libshumate
+, gst_all_1
+, gtk4
+, libadwaita
+, llvmPackages
+, glibc
+, pipewire
+, wayland
+, wrapGAppsHook4
+, desktop-file-utils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ashpd-demo";
+  version = "0.2.2";
+
+  src =
+    let
+      share = fetchFromGitHub {
+        owner = "bilelmoussaoui";
+        repo = "ashpd";
+        rev = version;
+        sha256 = "9O6XqM4oys/hXgztQQ8tTobJV8U52db/VY6FlTMUvGY=";
+      };
+    in
+    "${share}/ashpd-demo";
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    hash = "sha256-eFq42m16zzrUBbAqv7BsAf4VxyO93WynLjvIzKbZwnQ=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    rustPlatform.rust.cargo
+    rustPlatform.cargoSetupHook
+    rustPlatform.rust.rustc
+    wrapGAppsHook4
+    rustPlatform.bindgenHook
+    desktop-file-utils
+    glib # for glib-compile-schemas
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    libadwaita
+    pipewire
+    wayland
+    libshumate
+  ];
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "Tool for playing with XDG desktop portals";
+    homepage = "https://github.com/bilelmoussaoui/ashpd/tree/master/ashpd-demo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/asmfmt/default.nix b/nixpkgs/pkgs/development/tools/asmfmt/default.nix
new file mode 100644
index 000000000000..dca74fa76b73
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/asmfmt/default.nix
@@ -0,0 +1,32 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  pname = "asmfmt";
+  version = "1.2.3";
+
+  goPackagePath = "github.com/klauspost/asmfmt";
+
+  src = fetchFromGitHub {
+    owner = "klauspost";
+    repo = "asmfmt";
+    rev = "v${version}";
+    sha256 = "0f2cgwxs2b2kpq5348h8hjkcqc40p8ajapzpcy9ia2fsmsn2a2s4";
+  };
+
+  goDeps = ./deps.nix;
+
+  # This package comes with its own version of goimports, gofmt and goreturns
+  # but these binaries are outdated and are offered by other packages.
+  subPackages = [ "cmd/asmfmt" ];
+
+  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..1341017df056
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/asn2quickder/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildPythonApplication, fetchFromGitHub, makeWrapper, cmake
+, pytest-runner, pytest, six, pyparsing, asn1ate }:
+
+buildPythonApplication rec {
+  pname = "asn2quickder";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    sha256 = "15lxv8vcjnsjxg7ywcac5p6mj5vf5pxq1219yap653ci4f1liqfr";
+    rev = "version-${version}";
+    owner = "vanrein";
+    repo = "quick-der";
+  };
+
+  postPatch = ''
+    patchShebangs ./python/scripts/*
+  '';
+
+  dontUseCmakeConfigure = true;
+
+  nativeBuildInputs = [ makeWrapper cmake ];
+  checkInputs = [ pytest-runner pytest ];
+
+  propagatedBuildInputs = [ pyparsing asn1ate six ];
+
+  meta = with 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/async-profiler/0001-Fix-darwin-build.patch b/nixpkgs/pkgs/development/tools/async-profiler/0001-Fix-darwin-build.patch
new file mode 100644
index 000000000000..bfb636bf562a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/async-profiler/0001-Fix-darwin-build.patch
@@ -0,0 +1,27 @@
+From e54c17899118ea940c36bc17a48d8ff759243f16 Mon Sep 17 00:00:00 2001
+From: Uri Baghin <uri@canva.com>
+Date: Sat, 8 May 2021 09:49:18 +1000
+Subject: [PATCH] Fix darwin build.
+
+---
+ src/itimer.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/itimer.cpp b/src/itimer.cpp
+index 08c46d1..52628ef 100644
+--- a/src/itimer.cpp
++++ b/src/itimer.cpp
+@@ -52,8 +52,8 @@ Error ITimer::start(Arguments& args) {
+ 
+     OS::installSignalHandler(SIGPROF, signalHandler);
+ 
+-    long sec = _interval / 1000000000;
+-    long usec = (_interval % 1000000000) / 1000;
++    time_t sec = _interval / 1000000000;
++    suseconds_t usec = (_interval % 1000000000) / 1000;
+     struct itimerval tv = {{sec, usec}, {sec, usec}};
+     
+     if (setitimer(ITIMER_PROF, &tv, NULL) != 0) {
+-- 
+2.31.1
+
diff --git a/nixpkgs/pkgs/development/tools/async-profiler/default.nix b/nixpkgs/pkgs/development/tools/async-profiler/default.nix
new file mode 100644
index 000000000000..8db41ce8bd73
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/async-profiler/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, jdk8 }:
+
+stdenv.mkDerivation rec {
+  pname = "async-profiler";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "jvm-profiling-tools";
+    repo = "async-profiler";
+    rev = "v${version}";
+    sha256 = "sha256-vSBueRNraMgLcaprPsBUriX3WZ7N0UrllnSVLL2F738=";
+  };
+
+  buildInputs = [ jdk8 ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D "$src/profiler.sh" "$out/bin/async-profiler"
+    install -D build/jattach "$out/bin/jattach"
+    install -D build/libasyncProfiler.so "$out/lib/libasyncProfiler.so"
+    install -D -t "$out/share/java/" build/*.jar
+    runHook postInstall
+  '';
+
+  patches = [
+    # https://github.com/jvm-profiling-tools/async-profiler/pull/428
+    ./0001-Fix-darwin-build.patch
+  ];
+
+  fixupPhase = ''
+    substituteInPlace $out/bin/async-profiler \
+      --replace 'JATTACH=$SCRIPT_DIR/build/jattach' \
+                'JATTACH=${placeholder "out"}/bin/jattach' \
+      --replace 'PROFILER=$SCRIPT_DIR/build/libasyncProfiler.so' \
+                'PROFILER=${placeholder "out"}/lib/libasyncProfiler.so'
+  '';
+
+  meta = with lib; {
+    description = "A low overhead sampling profiler for Java that does not suffer from Safepoint bias problem";
+    homepage    = "https://github.com/jvm-profiling-tools/async-profiler";
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ mschuwalow ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/async/default.nix b/nixpkgs/pkgs/development/tools/async/default.nix
new file mode 100644
index 000000000000..ffff8af8b661
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/async/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "async";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "ctbur";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "19ypflbayi5l0mb8yw7w0a4bq9a3w8nl9jsxapp9m3xggzmsvrxx";
+  };
+
+  cargoSha256 = "0y2q46i838gha58p95vcv5r5i14il1kv86k35s30ncfibijgp0lc";
+
+  meta = with lib; {
+    description = "A tool to parallelize shell commands";
+    longDescription = ''
+      `async` is a tool to run shell commands in parallel and is designed to be
+      able to quickly parallelize shell scripts with minimal changes. It was
+      inspired by GNU Parallel, with the main difference being that async
+      retains state between commands by running a server in the background.
+      '';
+    homepage = "https://github.com/ctbur/async";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ minijackson ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ats-acc/default.nix b/nixpkgs/pkgs/development/tools/ats-acc/default.nix
new file mode 100644
index 000000000000..73e475da3942
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ats-acc/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchFromGitHub, ats2 }:
+
+stdenv.mkDerivation rec {
+  pname = "ats-acc";
+  version = "unstable-2018-10-21";
+
+  src = fetchFromGitHub {
+    owner = "sparverius";
+    repo = pname;
+    rev = "2d49f4e76d0fe1f857ceb70deba4aed13c306dcb";
+    sha256 = "sha256-Wp39488YNL40GKp4KaJwhi75PsYP+gMtrZqAvs4Q/sw=";
+  };
+
+  nativeBuildInputs = [ ats2 ];
+
+  meta = with lib; {
+    description = "Pretty-print error messages of the ATS Compiler";
+    homepage = "https://github.com/sparverius/ats-acc";
+    maintainers = with maintainers; [ fortuneteller2k ];
+    license = licenses.unfree; # Upstream has no license
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/avro-tools/default.nix b/nixpkgs/pkgs/development/tools/avro-tools/default.nix
new file mode 100644
index 000000000000..9f19dee156da
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/avro-tools/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, makeWrapper, jre, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "avro-tools";
+  version = "1.11.0";
+
+  src = fetchurl {
+    url =
+    "mirror://maven/org/apache/avro/avro-tools/${version}/${pname}-${version}.jar";
+    sha256 = "sha256-XnfvND5WPojzIS8t0ntwn+3+Zjz9ABEUK2FO6aD4ulw=";
+  };
+
+  dontUnpack = true;
+
+  buildInputs = [ jre ];
+  nativeBuildInputs = [ makeWrapper ];
+  sourceRoot = ".";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/libexec/avro-tools
+    cp $src $out/libexec/avro-tools/${pname}.jar
+
+    makeWrapper ${jre}/bin/java $out/bin/avro-tools \
+    --add-flags "-jar $out/libexec/avro-tools/${pname}.jar"
+  '';
+
+  meta = with lib; {
+    homepage    = "https://avro.apache.org/";
+    description = "Avro command-line tools and utilities";
+    license     = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ ];
+  };
+}
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..0bbe2056be54
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/aws-sam-cli/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, python3
+, enableTelemetry ? false
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "aws-sam-cli";
+  version = "1.37.0";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    hash = "sha256-XE3g2mKwAiaJvi0ShVScnCKrmz7ujaQgOeFXuYwtP4g=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aws-lambda-builders
+    aws-sam-translator
+    chevron
+    click
+    cookiecutter
+    dateparser
+    python-dateutil
+    docker
+    flask
+    jmespath
+    requests
+    serverlessrepo
+    tomlkit
+    watchdog
+    typing-extensions
+    regex
+  ];
+
+  postFixup = if enableTelemetry then "echo aws-sam-cli TELEMETRY IS ENABLED" else ''
+    # Disable telemetry: https://github.com/awslabs/aws-sam-cli/issues/1272
+    wrapProgram $out/bin/sam --set  SAM_CLI_TELEMETRY 0
+  '';
+
+  # fix over-restrictive version bounds
+  postPatch = ''
+    substituteInPlace requirements/base.txt \
+      --replace "aws_lambda_builders==" "aws-lambda-builders #" \
+      --replace "click~=7.1" "click~=8.0" \
+      --replace "dateparser~=1.0" "dateparser>=0.7" \
+      --replace "docker~=4.2.0" "docker>=4.2.0" \
+      --replace "Flask~=1.1.2" "Flask~=2.0" \
+      --replace "PyYAML~=5.3" "PyYAML #" \
+      --replace "regex==" "regex #" \
+      --replace "requests==" "requests #" \
+      --replace "typing_extensions==" "typing-extensions #" \
+      --replace "tzlocal==3.0" "tzlocal #" \
+      --replace "tomlkit==0.7.2" "tomlkit #" \
+      --replace "watchdog==" "watchdog #"
+  '';
+
+  # Tests are not included in the PyPI package
+  doCheck = false;
+
+  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; [ lo1tuma ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/azcopy/default.nix b/nixpkgs/pkgs/development/tools/azcopy/default.nix
new file mode 100644
index 000000000000..27d1c866725a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/azcopy/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "azure-storage-azcopy";
+  version = "10.13.0";
+
+  src = fetchFromGitHub {
+    owner = "Azure";
+    repo = "azure-storage-azcopy";
+    rev = "v${version}";
+    sha256 = "sha256-L5gfS2hwk1uaWEygn+liupdANL9qizHAjxNz25KBwaY=";
+  };
+
+  subPackages = [ "." ];
+
+  vendorSha256 = "sha256-ePEpc18Y99Moe/aj8n1+no6D70vZoIEjC023Uup98Uo=";
+
+  doCheck = false;
+
+  postInstall = ''
+    ln -rs "$out/bin/azure-storage-azcopy" "$out/bin/azcopy"
+  '';
+
+  meta = with 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/azure-functions-core-tools/default.nix b/nixpkgs/pkgs/development/tools/azure-functions-core-tools/default.nix
new file mode 100644
index 000000000000..55720d283110
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/azure-functions-core-tools/default.nix
@@ -0,0 +1,74 @@
+{ stdenv
+, lib
+, config
+, fetchurl
+, unzip
+, makeWrapper
+, icu
+, libunwind
+, curl
+, zlib
+, libuuid
+, dotnetbuildhelpers
+, dotnetCorePackages
+, coreclr
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "azure-functions-core-tools";
+  version = "3.0.3785";
+
+  src = fetchurl {
+    url = "https://github.com/Azure/${pname}/releases/download/${version}/Azure.Functions.Cli.linux-x64.${version}.zip";
+    sha256 = "sha256-NdTEFQaG8eFengjzQr51ezehIHFvQZqmrjpjWk4vZKo=";
+  };
+
+  buildInputs = [
+    unzip
+    makeWrapper
+    dotnetbuildhelpers
+  ];
+
+  nativeBuildInputs = [
+    icu
+    libunwind
+    curl
+    zlib
+    dotnetCorePackages.sdk_3_1
+  ];
+
+  libPath = lib.makeLibraryPath [
+    libunwind
+    libuuid
+    stdenv.cc.cc
+    curl
+    zlib
+    icu
+    openssl
+  ];
+
+  unpackPhase = ''
+    unzip $src
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -prd *.dll *.so gozip func $out/bin
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${libPath}" "$out/bin/func"
+    chmod +x $out/bin/func $out/bin/gozip
+    find $out/bin -type f -name "*.so" -exec patchelf --set-rpath "${libPath}" {} \;
+    wrapProgram "$out/bin/func" --prefix LD_LIBRARY_PATH : ${libPath}
+  '';
+  dontStrip = true; # Causes rpath patching to break if not set
+
+  meta = with lib; {
+    homepage = "https://github.com/Azure/azure-functions-core-tools";
+    description = "Command line tools for Azure Functions";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jshcmpbll ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/b4/default.nix b/nixpkgs/pkgs/development/tools/b4/default.nix
new file mode 100644
index 000000000000..30d38aac2ae0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/b4/default.nix
@@ -0,0 +1,37 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "b4";
+  version = "0.6.2";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "1j904dy9cwxl85k2ngc498q5cdnqwsmw3jibjr1m55w8aqdck68z";
+  };
+
+  preConfigure = ''
+    substituteInPlace setup.py \
+      --replace 'requests~=2.24.0' 'requests~=2.25' \
+      --replace 'dnspython~=2.0.0' 'dnspython~=2.1'
+  '';
+
+  # tests make dns requests and fails
+  doCheck = false;
+
+  propagatedBuildInputs = with python3Packages; [
+    requests
+    dnspython
+    dkimpy
+
+    # These may be required in the future for other patch attestation features
+    #pycryptodomex~=3.9.9
+    #PyNaCl
+  ];
+
+  meta = with lib; {
+    homepage = "https://git.kernel.org/pub/scm/utils/b4/b4.git/about";
+    license = licenses.gpl2Only;
+    description = "A helper utility to work with patches made available via a public-inbox archive";
+    maintainers = with maintainers; [ jb55 ];
+  };
+}
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..b46ad5efc881
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/backblaze-b2/default.nix
@@ -0,0 +1,58 @@
+{ fetchFromGitHub, lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "backblaze-b2";
+  version = "3.2.0";
+
+  src = python3Packages.fetchPypi {
+    inherit version;
+    pname = "b2";
+    sha256 = "sha256-dE4eLTNU6O0DscwN8+m1UaG46dbI0DiWzeJK49GUvKA=";
+  };
+
+  postPatch = ''
+    substituteInPlace requirements.txt \
+      --replace 'docutils==0.16' 'docutils'
+    substituteInPlace setup.py \
+      --replace 'setuptools_scm<6.0' 'setuptools_scm'
+  '';
+
+  propagatedBuildInputs = with python3Packages; [
+    b2sdk
+    phx-class-registry
+    setuptools
+    docutils
+    rst2ansi
+  ];
+
+  nativeBuildInputs = with python3Packages; [
+    setuptools-scm
+  ];
+
+  checkInputs = with python3Packages; [
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    "test_files_headers"
+    "test_integration"
+    "test_get_account_info"
+  ];
+
+  postInstall = ''
+    mv "$out/bin/b2" "$out/bin/backblaze-b2"
+
+    sed 's/b2/backblaze-b2/' -i contrib/bash_completion/b2
+
+    mkdir -p "$out/share/bash-completion/completions"
+    cp contrib/bash_completion/b2 "$out/share/bash-completion/completions/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/bacon/default.nix b/nixpkgs/pkgs/development/tools/bacon/default.nix
new file mode 100644
index 000000000000..093a37e2b96d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bacon/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bacon";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "Canop";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-aOxwM9ur0E/biLOzhDyTCWYBwdbpsTQ49aCfkFea5ck=";
+  };
+
+  cargoSha256 = "sha256-AUoLwryuEdUdWasaHuap6qff8DRi90iq/v4afyG9beo=";
+
+  buildInputs = lib.optional stdenv.isDarwin CoreServices;
+
+  meta = with lib; {
+    description = "Background rust code checker";
+    homepage = "https://github.com/Canop/bacon";
+    license = licenses.agpl3Only;
+    maintainers = [ maintainers.FlorianFranzen ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bashate/default.nix b/nixpkgs/pkgs/development/tools/bashate/default.nix
new file mode 100644
index 000000000000..76e523170ca7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bashate/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, Babel
+, buildPythonApplication
+, fetchPypi
+, fixtures
+, mock
+, pbr
+, pytestCheckHook
+, pythonOlder
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "bashate";
+  version = "2.1.0";
+  disabled = pythonOlder "3.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "a0df143639715dc2fb6cf9aa6907e4a372d6f0a43afeffc55c5fb3ecfe3523c8";
+  };
+
+  propagatedBuildInputs = [
+    Babel
+    pbr
+    setuptools
+  ];
+
+  checkInputs = [
+    fixtures
+    mock
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "bashate" ];
+
+  meta = with lib; {
+    description = "Style enforcement for bash programs";
+    homepage = "https://opendev.org/openstack/bashate";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bazel-gazelle/default.nix b/nixpkgs/pkgs/development/tools/bazel-gazelle/default.nix
new file mode 100644
index 000000000000..f78125ae990b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bazel-gazelle/default.nix
@@ -0,0 +1,33 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "bazel-gazelle";
+  version = "0.24.0";
+
+  src = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-WWAOhV1H/OnARjhoWQYNmd9/y8pD3bRkhncmzt/36mA=";
+  };
+
+  vendorSha256 = null;
+
+  doCheck = false;
+
+  subPackages = [ "cmd/gazelle" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bazelbuild/bazel-gazelle";
+    description = ''
+      Gazelle is a Bazel build file generator for Bazel projects. It natively
+      supports Go and protobuf, and it may be extended to support new languages
+      and custom rule sets.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bazel-kazel/default.nix b/nixpkgs/pkgs/development/tools/bazel-kazel/default.nix
new file mode 100644
index 000000000000..b3f58262b1dd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bazel-kazel/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "bazel-kazel";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes";
+    repo = "repo-infra";
+    rev = "v${version}";
+    sha256 = "sha256-Y9VOlFrFmJQCQuwf3UztHGuJqmq/lSibTbI3oGjtNuE=";
+  };
+
+  vendorSha256 = "sha256-1+7Mx1Zh1WolqTpWNe560PRzRYaWVUVLvNvUOysaW5I=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/kazel" ];
+
+  meta = with lib; {
+    description = "kazel - a BUILD file generator for go and bazel";
+    homepage = "https://github.com/kubernetes/repo-infra";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
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..5b0dd0349439
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bazel-watcher/default.nix
@@ -0,0 +1,85 @@
+{ buildBazelPackage
+, fetchFromGitHub
+, git
+, go
+, python3
+, lib, stdenv
+}:
+
+let
+  patches = [
+    ./use-go-in-path.patch
+  ];
+in
+buildBazelPackage rec {
+  pname = "bazel-watcher";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = "bazel-watcher";
+    rev = "v${version}";
+    sha256 = "0gigl1lg8sb4bj5crvj54329ws4yirldbncs15f96db6vhp0ig7r";
+  };
+
+  nativeBuildInputs = [ go git python3 ];
+  removeRulesCC = false;
+
+  bazelTarget = "//ibazel";
+
+  fetchAttrs = {
+    inherit patches;
+
+    preBuild = ''
+      patchShebangs .
+    '';
+
+    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
+
+      # Retains go build input markers
+      chmod -R 755 $bazelOut/external/{bazel_gazelle_go_repository_cache,@\bazel_gazelle_go_repository_cache.marker}
+      rm -rf $bazelOut/external/{bazel_gazelle_go_repository_cache,@\bazel_gazelle_go_repository_cache.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 = "1j175z3d4fbi4pl35py7yjq7ywrvwin6id131jv32hx0ck4g1m46";
+  };
+
+  buildAttrs = {
+    inherit patches;
+
+    preBuild = ''
+      patchShebangs .
+
+      substituteInPlace ibazel/BUILD --replace '{STABLE_GIT_VERSION}' ${version}
+    '';
+
+    installPhase = ''
+      install -Dm755 bazel-bin/ibazel/*_pure_stripped/ibazel $out/bin/ibazel
+    '';
+  };
+
+  meta = with 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;
+    # broken on darwin, see https://github.com/NixOS/nixpkgs/issues/105573
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bazel-watcher/use-go-in-path.patch b/nixpkgs/pkgs/development/tools/bazel-watcher/use-go-in-path.patch
new file mode 100644
index 000000000000..010ba56165d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bazel-watcher/use-go-in-path.patch
@@ -0,0 +1,13 @@
+diff --git a/WORKSPACE b/WORKSPACE
+index 51273b6..fcf9ffb 100644
+--- a/WORKSPACE
++++ b/WORKSPACE
+@@ -61,7 +61,7 @@ load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_depe
+ 
+ go_rules_dependencies()
+ 
+-go_register_toolchains()
++go_register_toolchains(go_version = "host")
+ 
+ load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository")
+ 
diff --git a/nixpkgs/pkgs/development/tools/bazelisk/default.nix b/nixpkgs/pkgs/development/tools/bazelisk/default.nix
new file mode 100644
index 000000000000..2ba077fa9439
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bazelisk/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "bazelisk";
+  version = "1.11.0";
+
+  src = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-9J49+1fI3wmHQqYgdoGgaAuVMA9eG7wrFe7dQEectvI=";
+  };
+
+  vendorSha256 = "sha256-+zJEB9FyVvxHdwR/dAn56jrMbgVBhlbziVFe2WCQFfE=";
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X main.BazeliskVersion=${version}" ];
+
+  meta = with lib; {
+    description = "A user-friendly launcher for Bazel";
+    longDescription = ''
+      BEWARE: This package does not work on NixOS.
+    '';
+    homepage = "https://github.com/bazelbuild/bazelisk";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ elasticdog ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bingo/default.nix b/nixpkgs/pkgs/development/tools/bingo/default.nix
new file mode 100644
index 000000000000..8fe1dbaa4bea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bingo/default.nix
@@ -0,0 +1,41 @@
+{ lib, buildGoModule, fetchFromGitHub, testVersion, bingo }:
+
+buildGoModule rec {
+  pname = "bingo";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "bwplotka";
+    repo = "bingo";
+    rev = "v${version}";
+    sha256 = "sha256-4D8YaA/AH1gIp5iwD7WEAdBl73sqwHpfOe7bnxVcRcw=";
+  };
+
+  vendorSha256 = "sha256-xrz9FpwZd+FboVVTWSqGHRguGwrwE9cSFEEtulzbfDQ=";
+
+  patches = [
+    # Do not execute `go` command when invoking `bingo version`.
+    ./version_go.patch
+  ];
+
+  postPatch = ''
+    rm get_e2e_test.go get_e2e_utils_test.go
+  '';
+
+  CGO_ENABLED = 0;
+
+  ldflags = [ "-s" "-w" ];
+
+  passthru.tests.version = testVersion {
+    package = bingo;
+    command = "bingo version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "Like `go get` but for Go tools! CI Automating versioning of Go binaries in a nested, isolated Go modules.";
+    homepage = "https://github.com/bwplotka/bingo";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ aaronjheng ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bingo/version_go.patch b/nixpkgs/pkgs/development/tools/bingo/version_go.patch
new file mode 100644
index 000000000000..2898326a0547
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bingo/version_go.patch
@@ -0,0 +1,17 @@
+diff --git a/main.go b/main.go
+index 5600f7e..662ed1b 100644
+--- a/main.go
++++ b/main.go
+@@ -201,10 +201,8 @@ func main() {
+ 			return pkgs.PrintTab(target, os.Stdout)
+ 		}
+ 	case "version":
+-		cmdFunc = func(ctx context.Context, r *runner.Runner) error {
+-			_, err := fmt.Fprintln(os.Stdout, version.Version)
+-			return err
+-		}
++		_, _ = fmt.Fprintln(os.Stdout, version.Version)
++		return
+ 	default:
+ 		exitOnUsageError(flags.Usage, "No such command", flags.Arg(0))
+ 	}
diff --git a/nixpkgs/pkgs/development/tools/biodiff/default.nix b/nixpkgs/pkgs/development/tools/biodiff/default.nix
new file mode 100644
index 000000000000..340c3b736caf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/biodiff/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "biodiff";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "8051Enthusiast";
+    repo = "biodiff";
+    rev = "v${version}";
+    sha256 = "sha256-M1hwuIe5+quxcvFAacBkxQMiQyN6lhtWA6hEi5Buoho=";
+  };
+
+  cargoSha256 = "sha256-NIt4D2/T7Zl7rgksbQeVo6cNBt6cZkUGTJGztnp6SB0=";
+
+  meta = with lib; {
+    description = "Hex diff viewer using alignment algorithms from biology";
+    homepage = "https://github.com/8051Enthusiast/biodiff";
+    changelog = "https://github.com/8051Enthusiast/biodiff/blob/v${version}/CHANGELOG";
+    license = licenses.mit;
+    maintainers = with maintainers; [ newam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bloaty/default.nix b/nixpkgs/pkgs/development/tools/bloaty/default.nix
new file mode 100644
index 000000000000..ff24e7b7c1cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bloaty/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, cmake, zlib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  version = "1.1";
+  pname = "bloaty";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "bloaty";
+    rev = "v${version}";
+    sha256 = "1556gb8gb8jwf5mwxppcqz3mp269b5jhd51kj341iqkbn27zzngk";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ zlib ];
+
+  doCheck = true;
+
+  installPhase = ''
+    install -Dm755 {.,$out/bin}/bloaty
+  '';
+
+  meta = with lib; {
+    description = "a size profiler for binaries";
+    homepage = "https://github.com/google/bloaty";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with 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..b37ab9a2d3f9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/boomerang/default.nix
@@ -0,0 +1,33 @@
+{ mkDerivation, lib, fetchFromGitHub, fetchpatch, cmake, qtbase, capstone, bison, flex }:
+
+mkDerivation rec {
+  pname = "boomerang";
+  version = "0.5.2";
+  # NOTE: When bumping version beyond 0.5.2, you likely need to remove
+  #       the cstdint.patch below. The patch does a fix that has already
+  #       been done upstream but is not yet part of a release
+
+  src = fetchFromGitHub {
+    owner = "BoomerangDecompiler";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0xncdp0z8ry4lkzmvbj5d7hlzikivghpwicgywlv47spgh8ny0ix";
+  };
+
+  nativeBuildInputs = [ cmake bison flex ];
+  buildInputs = [ qtbase capstone ];
+  patches = [
+    (fetchpatch {
+      name = "include-missing-cstdint.patch";
+      url = "https://github.com/BoomerangDecompiler/boomerang/commit/3342b0eac6b7617d9913226c06c1470820593e74.patch";
+      sha256 = "sha256-941IydcV3mqj7AWvXTM6GePW5VgawEcL0wrBCXqeWvc=";
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/BoomerangDecompiler/boomerang";
+    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..044589a9664b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/boost-build/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, bison
+# boost derivation to use for the src and version.
+# This is used by the boost derivation to build
+# a b2 matching their version (by overriding this
+# argument). Infinite recursion is not an issue
+# since we only look at src and version of boost.
+, useBoost ? {}
+}:
+
+let
+  defaultVersion = "4.4.1";
+in
+
+stdenv.mkDerivation {
+  pname = "boost-build";
+  version =
+    if useBoost ? version
+    then "boost-${useBoost.version}"
+    else defaultVersion;
+
+  src = useBoost.src or (fetchFromGitHub {
+    owner = "boostorg";
+    repo = "build";
+    rev = defaultVersion;
+    sha256 = "1r4rwlq87ydmsdqrik4ly5iai796qalvw7603mridg2nwcbbnf54";
+  });
+
+  # b2 is in a subdirectory of boost source tarballs
+  postUnpack = lib.optionalString (useBoost ? src) ''
+    sourceRoot="$sourceRoot/tools/build"
+  '';
+
+  # Upstream defaults to gcc on darwin, but we use clang.
+  postPatch = ''
+    substituteInPlace src/build-system.jam \
+    --replace "default-toolset = darwin" "default-toolset = clang-darwin"
+  '';
+
+  nativeBuildInputs = [
+    bison
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    ./bootstrap.sh
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    ./b2 install --prefix="$out"
+
+    # older versions of b2 created this symlink,
+    # which we want to support building via useBoost.
+    test -e "$out/bin/bjam" || ln -s b2 "$out/bin/bjam"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.boost.org/build/";
+    license = lib.licenses.boost;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ivan-tkatchev ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/buf/default.nix b/nixpkgs/pkgs/development/tools/buf/default.nix
new file mode 100644
index 000000000000..1b0ccab29644
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/buf/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, protobuf
+, git
+, testVersion
+, buf
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "buf";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "bufbuild";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-8GwZsFvxaTtG/q7DaWvZcGdbyJ4Cm41BqSvwq3SqoEg=";
+  };
+
+  vendorSha256 = "sha256-g3bvfNF0XkC12/tRZsO+o2z20w+riWiHOer8Pzp1QF0=";
+
+  patches = [
+    # Skip a test that requires networking to be available to work.
+    ./skip_test_requiring_network.patch
+    # Skip TestWorkspaceGit which requires .git and commits.
+    ./skip_test_requiring_dotgit.patch
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" ];
+
+  checkInputs = [
+    git # Required for TestGitCloner
+    protobuf # Required for buftesting.GetProtocFilePaths
+  ];
+
+  preCheck = ''
+    # The tests need access to some of the built utilities
+    export PATH="$PATH:$GOPATH/bin"
+    # To skip TestCloneBranchAndRefToBucket
+    export CI=true
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # Binaries
+    mkdir -p "$out/bin"
+    # Only install required binaries, don't install testing binaries
+    for FILE in \
+      "buf" \
+      "protoc-gen-buf-breaking" \
+      "protoc-gen-buf-lint"; do
+      cp "$GOPATH/bin/$FILE" "$out/bin/"
+    done
+
+    # Completions
+    installShellCompletion --cmd buf \
+      --bash <($GOPATH/bin/buf completion bash) \
+      --fish <($GOPATH/bin/buf completion fish) \
+      --zsh <($GOPATH/bin/buf completion zsh)
+
+    # Man Pages
+    mkdir man && $GOPATH/bin/buf manpages man
+    installManPage man/*
+
+    runHook postInstall
+  '';
+
+  passthru.tests.version = testVersion { package = buf; };
+
+  meta = with lib; {
+    homepage = "https://buf.build";
+    changelog = "https://github.com/bufbuild/buf/releases/tag/v${version}";
+    description = "Create consistent Protobuf APIs that preserve compatibility and comply with design best-practices";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ raboof jk lrewega ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/buf/skip_test_requiring_dotgit.patch b/nixpkgs/pkgs/development/tools/buf/skip_test_requiring_dotgit.patch
new file mode 100644
index 000000000000..92626b72eff7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/buf/skip_test_requiring_dotgit.patch
@@ -0,0 +1,14 @@
+diff --git a/private/buf/cmd/buf/workspace_test.go b/private/buf/cmd/buf/workspace_test.go
+index 25e33dd..f593beb 100644
+--- a/private/buf/cmd/buf/workspace_test.go
++++ b/private/buf/cmd/buf/workspace_test.go
+@@ -340,6 +340,9 @@ func TestWorkspaceNestedArchive(t *testing.T) {
+ }
+ 
+ func TestWorkspaceGit(t *testing.T) {
++	// Requires .git directory which we do not retain due to
++	// `leaveDotGit` non-determinism
++	t.Skip()
+ 	t.Skip("skip until the move to private/buf is merged")
+ 	// Directory paths specified as a git reference within a workspace.
+ 	t.Parallel()
diff --git a/nixpkgs/pkgs/development/tools/buf/skip_test_requiring_network.patch b/nixpkgs/pkgs/development/tools/buf/skip_test_requiring_network.patch
new file mode 100644
index 000000000000..1b0cdfb12c03
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/buf/skip_test_requiring_network.patch
@@ -0,0 +1,15 @@
+diff --git a/private/bufpkg/buftesting/buftesting.go b/private/bufpkg/buftesting/buftesting.go
+index 82b3ec4..ef8263a 100644
+--- a/private/bufpkg/buftesting/buftesting.go
++++ b/private/bufpkg/buftesting/buftesting.go
+@@ -99,6 +99,10 @@ func RunActualProtoc(
+ 
+ // GetGoogleapisDirPath gets the path to a clone of googleapis.
+ func GetGoogleapisDirPath(t *testing.T, buftestingDirPath string) string {
++	// Requires network access, which is not available during
++	// the nixpkgs sandboxed build
++	t.Skip()
++
+ 	googleapisDirPath := filepath.Join(buftestingDirPath, testGoogleapisDirPath)
+ 	require.NoError(
+ 		t,
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..ad9813cde6fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/alibuild/default.nix
@@ -0,0 +1,24 @@
+{ lib, python}:
+
+python.pkgs.buildPythonApplication rec {
+  pname = "alibuild";
+  version = "1.5.5";
+
+  src = python.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "1sh02avpab4qlyin3p928xw91l4fgs8x5x2rzl623ayqsnfjv19j";
+  };
+
+  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..14b16b6cc82f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/apache-ant/1.9.nix
@@ -0,0 +1,110 @@
+{ fetchurl, lib, stdenv, coreutils, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "ant";
+  version = "1.9.16";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchurl {
+    url = "mirror://apache/ant/binaries/apache-ant-${version}-bin.tar.bz2";
+    sha256 = "0rif9kj6njajy951w3aapk27y1mbaxb08whs126v533h96rb1kjp";
+  };
+
+  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 = "https://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 = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.eelco ];
+    platforms = 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..e75260472140
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/apache-ant/default.nix
@@ -0,0 +1,110 @@
+{ fetchurl, lib, stdenv, coreutils, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "ant";
+  version = "1.10.11";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchurl {
+    url = "mirror://apache/ant/binaries/apache-ant-${version}-bin.tar.bz2";
+    sha256 = "19m8xb7h6xm4jykzb79kakbx1pa4awaglw6z31pbfg8m5pmwkipz";
+  };
+
+  contrib = fetchurl {
+    url = "mirror://sourceforge/ant-contrib/ant-contrib-1.0b3-bin.tar.bz2";
+    sha256 = "1l8say86bz9gxp4yy777z7nm4j6m905pg342li1aphc14p5grvwn";
+  };
+
+  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 = "https://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 = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.eelco ];
+    platforms = 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..dcc38b9ec74a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/apache-maven/builder.sh
@@ -0,0 +1,18 @@
+source $stdenv/setup
+
+unpackPhase
+
+mkdir -p $out/maven
+cp -r $name/* $out/maven
+
+makeWrapper $out/maven/bin/mvn $out/bin/mvn --set-default JAVA_HOME "$jdk"
+makeWrapper $out/maven/bin/mvnDebug $out/bin/mvnDebug --set-default 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..3cc3f374045f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/apache-maven/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, jdk, makeWrapper }:
+
+assert jdk != null;
+
+stdenv.mkDerivation rec {
+  pname = "apache-maven";
+  version = "3.8.4";
+
+  builder = ./builder.sh;
+
+  src = fetchurl {
+    url = "mirror://apache/maven/maven-3/${version}/binaries/${pname}-${version}-bin.tar.gz";
+    sha256 = "sha256-LNycUZQnuyD9wlvvWpBjt5Dkq9kw57FLTp9IY9b58Tw=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  inherit jdk;
+
+  meta = with lib; {
+    description = "Build automation tool (used primarily for Java projects)";
+    homepage = "https://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..500afa7c959f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/arpa2cm/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitLab, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "arpa2cm";
+  version = "0.9.0";
+
+  src = fetchFromGitLab {
+    sha256 = "sha256-1z0fH8vZJiPkY/C654us9s2BULM1tlvvYcszNqk34yI=";
+    rev = "v${version}";
+    repo = pname;
+    owner = "arpa2";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "CMake Module library for the ARPA2 project";
+    longDescription = ''
+      The CMake module library for the ARPA2 project, including the LillyDAP,
+      TLSPool and IdentityHub software stacks. Like the KDE Extra CMake Modules (ECM)
+      which is a large-ish collection of curated CMake modules of particular
+      interest to Qt-based and KDE Frameworks-based applications, the ARPA2
+      CMake Modules (ARPA2CM) is a collection of modules for the software
+      stack from the ARPA2 project. This is largely oriented towards
+      TLS, SSL, X509, DER and LDAP technologies. The ARPA2 CMake Modules
+      also include modules used for product release and deployment of
+      the ARPA2 software stack.
+    '';
+    homepage = "https://gitlab.com/arpa2/arpa2cm";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ leenaars fufexan ];
+  };
+}
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..556725cca6c4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bam/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, lua5_3, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "bam";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "matricks";
+    repo = "bam";
+    rev = "v${version}";
+    sha256 = "13br735ig7lygvzyfd15fc2rdygrqm503j6xj5xkrl1r7w2wipq6";
+  };
+
+  nativeBuildInputs = [ lua5_3 python3 ];
+
+  buildPhase = "${stdenv.shell} make_unix.sh";
+
+  checkPhase = "${python3.interpreter} scripts/test.py";
+
+  strictDeps = true;
+
+  installPhase = ''
+    mkdir -p "$out/share/bam"
+    cp -r docs examples tests  "$out/share/bam"
+    mkdir -p "$out/bin"
+    cp bam "$out/bin"
+  '';
+
+  meta = with 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/README.md b/nixpkgs/pkgs/development/tools/build-managers/bazel/README.md
new file mode 100644
index 000000000000..69ec0e30e157
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/README.md
@@ -0,0 +1,7 @@
+# The Bazel build tool
+
+https://bazel.build/
+
+The bazel tool requires regular maintenance, especially under darwin, so we created a maintainers team.
+
+Please ping @NixOS/bazel in your github PR/issue to increase your chance of a quick turnaround, thanks!
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..b67a5ab22341
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bash-tools-test.nix
@@ -0,0 +1,44 @@
+{ writeText, bazel, runLocal, bazelTest, distDir }:
+
+# 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/' > $@",
+    )
+  '';
+
+  workspaceDir = runLocal "our_workspace" {} ''
+    mkdir $out
+    cp ${WORKSPACE} $out/WORKSPACE
+    cp ${fileIn} $out/input.txt
+    cp ${fileBUILD} $out/BUILD
+  '';
+
+  testBazel = bazelTest {
+    name = "bazel-test-bash-tools";
+    bazelPkg = bazel;
+    inherit workspaceDir;
+
+    bazelScript = ''
+      ${bazel}/bin/bazel build :tool_usage --distdir=${distDir}
+      cp bazel-bin/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-remote/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/default.nix
new file mode 100644
index 000000000000..44e8b9e44147
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/default.nix
@@ -0,0 +1,28 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "bazel-remote";
+  version = "2.3.4";
+
+  src = fetchFromGitHub {
+    owner = "buchgr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ijR3RjGzm0HtVp5lSKGJemCGkRzhgQqaDOgg+MjDB1c=";
+  };
+
+  vendorSha256 = "sha256-NmTdS5xgv0o7AT4lBJk472Lq1e73EcrcfnI8RIxKEoc=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/buchgr/bazel-remote";
+    description = "A remote HTTP/1.1 cache for Bazel";
+    license = licenses.asl20;
+    maintainers = lib.teams.bazel.members;
+    platforms = platforms.darwin ++ platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/disable_build_file_generation.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/disable_build_file_generation.patch
new file mode 100644
index 000000000000..67df8f559a20
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel-remote/disable_build_file_generation.patch
@@ -0,0 +1,24 @@
+From 3f5abd591b93ebdbc1ae82e5c29cf26024222f5f Mon Sep 17 00:00:00 2001
+From: Uri Baghin <uri@canva.com>
+Date: Thu, 30 Jan 2020 16:47:36 +1100
+Subject: [PATCH] Disable build file generation for remote apis.
+
+---
+ WORKSPACE | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/WORKSPACE b/WORKSPACE
+index f9ebafa..52e4e0b 100644
+--- a/WORKSPACE
++++ b/WORKSPACE
+@@ -208,6 +208,7 @@ http_archive(
+ 
+ go_repository(
+     name = "com_github_bazelbuild_remote_apis",
++    build_file_generation = "off",
+     importpath = "github.com/bazelbuild/remote-apis",
+     sum = "h1:OPH+hf+ICw8WEp2CV2ncfdyWPC30Cmw8b5NKun0n5IQ=",
+     version = "v0.0.0-20191119143007-b5123b1bb285",
+-- 
+2.25.0
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_26/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_26/default.nix
new file mode 100644
index 000000000000..6168c4a477f6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_26/default.nix
@@ -0,0 +1,390 @@
+{ stdenv, callPackage, lib, fetchurl, fetchpatch, runCommand, makeWrapper
+, zip, unzip, bash, writeCBin, coreutils
+, which, python3, perl, gawk, gnused, gnutar, gnugrep, gzip, findutils
+# Apple dependencies
+, cctools, llvmPackages_8, 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 = [
+    # From: $REPO_ROOT/WORKSPACE
+    (fetchurl {
+      url = "https://github.com/google/desugar_jdk_libs/archive/915f566d1dc23bc5a8975320cd2ff71be108eb9c.zip";
+      sha256 = "0b926df7yxyyyiwm9cmdijy6kplf0sghm23sf163zh8wrk87wfi7";
+    })
+    (fetchurl {
+        url = "https://mirror.bazel.build/github.com/bazelbuild/skydoc/archive/2d9566b21fbe405acf5f7bf77eda30df72a4744c.tar.gz";
+        sha256 = "4a1318fed4831697b83ce879b3ab70ae09592b167e5bda8edaff45132d1c3b3f";
+    })
+    (fetchurl {
+        url = "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/archive/f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz";
+        sha256 = "ba5d15ca230efca96320085d8e4d58da826d1f81b444ef8afccd8b23e0799b52";
+    })
+    (fetchurl {
+      url = "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/8ccf4f1c351928b55d5dddf3672e3667f6978d60.tar.gz";
+      sha256 = "d868ce50d592ef4aad7dec4dd32ae68d2151261913450fac8390b3fd474bb898";
+    })
+     (fetchurl {
+         url = "https://mirror.bazel.build/bazel_java_tools/releases/javac10/v3.1/java_tools_javac10_linux-v3.1.zip";
+         sha256 = "a0cd51f9db1bf05a722ff7f5c60a07fa1c7d27428fff0815c342d32aa6c53576";
+     })
+    (fetchurl {
+        url = "https://mirror.bazel.build/bazel_java_tools/releases/javac10/v3.1/java_tools_javac10_darwin-v3.1.zip";
+        sha256 = "c646aad8808b8ec5844d6a80a1287fc8e13203375fe40d6af4819eff48b9bbaf";
+    })
+    (fetchurl {
+        url = "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v1.0.zip";
+        sha256 = "cc470e529fafb6165b5be3929ff2d99b38429b386ac100878687416603a67889";
+    })
+    (fetchurl {
+        url = "https://github.com/bazelbuild/rules_nodejs/archive/0.16.2.zip";
+        sha256 = "9b72bb0aea72d7cbcfc82a01b1e25bf3d85f791e790ddec16c65e2d906382ee0";
+    })
+    (fetchurl {
+        url = "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.2.tar.gz";
+        sha256 = "04f85f2dd049e87805511e3babc5cea3f5e72332b1627e34f3a5461cc38e815f";
+    })
+  ];
+
+  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}";
+  stdenv' = if stdenv.isDarwin then llvmPackages_8.libcxxStdenv else stdenv;
+
+in
+stdenv'.mkDerivation rec {
+
+  version = "0.26.0";
+
+  meta = with lib; {
+    homepage = "https://github.com/bazelbuild/bazel/";
+    description = "Build tool that builds code quickly and reliably";
+    license = licenses.asl20;
+    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 {};
+  };
+
+  pname = "bazel";
+
+  src = fetchurl {
+    url = "https://github.com/bazelbuild/bazel/releases/download/${version}/bazel-${version}-dist.zip";
+    sha256 = "d26dadf62959255d58e523da3448a6222af768fe1224e321b120c1d5bbe4b4f2";
+  };
+
+  # 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 = [
+    ./glibc.patch
+    ./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 = ''
+      bazelLinkFlags () {
+        eval set -- "$NIX_LDFLAGS"
+        local flag
+        for flag in "$@"; do
+          printf ' -Wl,%s' "$flag"
+        done
+      }
+
+      # 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+=" -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 ${llvmPackages_8.libcxx}/include/c++/v1"
+
+      # don't use system installed Xcode to run clang, use Nix clang instead
+      sed -i -E "s;/usr/bin/xcrun (--sdk macosx )?clang;${stdenv'.cc}/bin/clang $NIX_CFLAGS_COMPILE $(bazelLinkFlags) -framework CoreFoundation;g" \
+        scripts/bootstrap/compile.sh \
+        src/tools/xcode/realpath/BUILD \
+        src/tools/xcode/stdredirect/BUILD \
+        tools/osx/BUILD
+
+      # nixpkgs's libSystem cannot use pthread headers directly, must import GCD headers instead
+      sed -i -e "/#include <pthread\/spawn.h>/i #include <dispatch/dispatch.h>" src/main/cpp/blaze_util_darwin.cc
+
+      # 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" "${python3.interpreter}" \
+          --replace "NIX_STORE_PYTHON_PATH" "${python3.interpreter}" \
+
+      # 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/bash ${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="$(echo $(< ${stdenv'.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt="/g')"
+      build --host_linkopt="$(echo $(< ${stdenv'.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt="/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=\"$(echo $(< ${stdenv'.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_linkopt=\"$(echo $(< ${stdenv'.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt=\"/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
+  ];
+
+  strictDeps = true;
+
+  # when a command can’t be found in a bazel build, you might also
+  # need to add it to `defaultShellPath`.
+  nativeBuildInputs = [
+    zip
+    python3
+    unzip
+    makeWrapper
+    which
+    customBash
+  ] ++ lib.optionals (stdenv.isDarwin) [ cctools 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/
+  '';
+
+  # Temporarily disabling for now. A new approach is needed for this derivation as Bazel
+  # accesses the internet during the tests which fails in a sandbox.
+  doInstallCheck = false;
+  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 "${python3}" >> $out/nix-support/depends
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_26/glibc.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_26/glibc.patch
new file mode 100644
index 000000000000..c4de48068f11
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_26/glibc.patch
@@ -0,0 +1,78 @@
+From https://github.com/grpc/grpc/commit/57586a1ca7f17b1916aed3dea4ff8de872dbf853
+From: Benjamin Peterson <benjamin@dropbox.com>
+Date: Fri, 3 May 2019 08:11:00 -0700
+Subject: [PATCH] Rename gettid() functions.
+
+glibc 2.30 will declare its own gettid; see https://sourceware.org/git/?p=glibc.git;a=commit;h=1d0fc213824eaa2a8f8c4385daaa698ee8fb7c92. Rename the grpc versions to avoid naming conflicts.
+---
+ src/core/lib/gpr/log_linux.cc          | 6 ++----
+ src/core/lib/gpr/log_posix.cc          | 4 ++--
+ src/core/lib/iomgr/ev_epollex_linux.cc | 4 ++--
+ 3 files changed, 6 insertions(+), 8 deletions(-)
+
+diff --git a/third_party/grpc/src/core/lib/gpr/log_linux.cc b/src/core/lib/gpr/log_linux.cc
+index 81026e5689b..8b597b4cf2f 100644
+--- a/third_party/grpc/src/core/lib/gpr/log_linux.cc
++++ b/third_party/grpc/src/core/lib/gpr/log_linux.cc
+@@ -40,7 +40,7 @@
+ #include <time.h>
+ #include <unistd.h>
+
+-static long gettid(void) { return syscall(__NR_gettid); }
++static long sys_gettid(void) { return syscall(__NR_gettid); }
+
+ void gpr_log(const char* file, int line, gpr_log_severity severity,
+              const char* format, ...) {
+@@ -70,7 +70,7 @@ void gpr_default_log(gpr_log_func_args* args) {
+   gpr_timespec now = gpr_now(GPR_CLOCK_REALTIME);
+   struct tm tm;
+   static __thread long tid = 0;
+-  if (tid == 0) tid = gettid();
++  if (tid == 0) tid = sys_gettid();
+
+   timer = static_cast<time_t>(now.tv_sec);
+   final_slash = strrchr(args->file, '/');
+diff --git a/third_party/grpc/src/core/lib/gpr/log_posix.cc b/src/core/lib/gpr/log_posix.cc
+index b6edc14ab6b..2f7c6ce3760 100644
+--- a/third_party/grpc/src/core/lib/gpr/log_posix.cc
++++ b/third_party/grpc/src/core/lib/gpr/log_posix.cc
+@@ -31,7 +31,7 @@
+ #include <string.h>
+ #include <time.h>
+
+-static intptr_t gettid(void) { return (intptr_t)pthread_self(); }
++static intptr_t sys_gettid(void) { return (intptr_t)pthread_self(); }
+
+ void gpr_log(const char* file, int line, gpr_log_severity severity,
+              const char* format, ...) {
+@@ -86,7 +86,7 @@ void gpr_default_log(gpr_log_func_args* args) {
+   char* prefix;
+   gpr_asprintf(&prefix, "%s%s.%09d %7" PRIdPTR " %s:%d]",
+                gpr_log_severity_string(args->severity), time_buffer,
+-               (int)(now.tv_nsec), gettid(), display_file, args->line);
++               (int)(now.tv_nsec), sys_gettid(), display_file, args->line);
+
+   fprintf(stderr, "%-70s %s\n", prefix, args->message);
+   gpr_free(prefix);
+diff --git a/third_party/grpc/src/core/lib/iomgr/ev_epollex_linux.cc b/src/core/lib/iomgr/ev_epollex_linux.cc
+index c2d80c08ddb..4a83cb6c215 100644
+--- a/third_party/grpc/src/core/lib/iomgr/ev_epollex_linux.cc
++++ b/third_party/grpc/src/core/lib/iomgr/ev_epollex_linux.cc
+@@ -1077,7 +1077,7 @@ static void end_worker(grpc_pollset* pollset, grpc_pollset_worker* worker,
+ }
+
+ #ifndef NDEBUG
+-static long gettid(void) { return syscall(__NR_gettid); }
++static long sys_gettid(void) { return syscall(__NR_gettid); }
+ #endif
+
+ /* pollset->mu lock must be held by the caller before calling this.
+@@ -1097,7 +1097,7 @@ static grpc_error* pollset_work(grpc_pollset* pollset,
+ #define WORKER_PTR (&worker)
+ #endif
+ #ifndef NDEBUG
+-  WORKER_PTR->originator = gettid();
++  WORKER_PTR->originator = sys_gettid();
+ #endif
+   if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
+     gpr_log(GPR_INFO,
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_26/python-stub-path-fix.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_26/python-stub-path-fix.patch
new file mode 100644
index 000000000000..cbc4192d2d9b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_26/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/bazel/bazel_0_29/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_29/default.nix
new file mode 100644
index 000000000000..0ecf6300eb23
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_29/default.nix
@@ -0,0 +1,564 @@
+{ stdenv, callPackage, lib, fetchurl, fetchFromGitHub
+, runCommand, runCommandCC, makeWrapper, recurseIntoAttrs
+# this package (through the fixpoint glass)
+, bazel_self
+, lr, xe, zip, unzip, bash, writeCBin, coreutils
+, which, gawk, gnused, gnutar, gnugrep, gzip, findutils
+# updater
+, python27, python3, writeScript
+# Apple dependencies
+, cctools, llvmPackages_8, CoreFoundation, CoreServices, Foundation
+# Allow to independently override the jdks used to build and run respectively
+, buildJdk, runJdk
+, buildJdkName
+, runtimeShell
+# Downstream packages for tests
+, bazel-watcher
+# Always assume all markers valid (this is needed because we remove markers; they are non-deterministic).
+# Also, don't clean up environment variables (so that NIX_ environment variables are passed to compilers).
+, enableNixHacks ? false
+, gcc-unwrapped
+, autoPatchelfHook
+, file
+, substituteAll
+, writeTextFile
+}:
+
+let
+  version = "0.29.1";
+
+  src = fetchurl {
+    url = "https://github.com/bazelbuild/bazel/releases/download/${version}/bazel-${version}-dist.zip";
+    sha256 = "1rcd6xy61n07n7m6dgcw23275r8z3gkwmqdkd48nwrq8yb7m4al7";
+  };
+
+  # Update with `eval $(nix-build -A bazel.updater)`,
+  # then add new dependencies from the dict in ./src-deps.json as required.
+  srcDeps = lib.attrsets.attrValues srcDepsSet;
+  srcDepsSet =
+    let
+      srcs = lib.importJSON ./src-deps.json;
+      toFetchurl = d: lib.attrsets.nameValuePair d.name (fetchurl {
+        urls = d.urls;
+        sha256 = d.sha256;
+        });
+        in builtins.listToAttrs (map toFetchurl [
+      srcs.desugar_jdk_libs
+      srcs.io_bazel_skydoc
+      srcs.bazel_skylib
+      srcs.io_bazel_rules_sass
+      srcs.platforms
+      (if stdenv.hostPlatform.isDarwin
+       then srcs."java_tools_javac11_darwin-v4.0.zip"
+       else srcs."java_tools_javac11_linux-v4.0.zip")
+      srcs."coverage_output_generator-v1.0.zip"
+      srcs.build_bazel_rules_nodejs
+      srcs."android_tools_pkg-0.8.tar.gz"
+      srcs."0.27.1.tar.gz"
+      srcs.rules_pkg
+      srcs.rules_cc
+      srcs.rules_java
+      srcs.rules_proto
+      ]);
+
+  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 file zip ];
+
+  # Java toolchain used for the build and tests
+  javaToolchain = "@bazel_tools//tools/jdk:toolchain_host${buildJdkName}";
+
+  platforms = lib.platforms.linux ++ lib.platforms.darwin;
+
+  # This repository is fetched by bazel at runtime
+  # however it contains prebuilt java binaries, with wrong interpreter
+  # and libraries path.
+  # We prefetch it, patch it, and override it in a global bazelrc.
+  system = if stdenv.hostPlatform.isDarwin then "darwin" else "linux";
+
+  remote_java_tools = stdenv.mkDerivation {
+    name = "remote_java_tools_${system}";
+
+    src = srcDepsSet."java_tools_javac11_${system}-v4.0.zip";
+
+    nativeBuildInputs = [ autoPatchelfHook unzip ];
+    buildInputs = [ gcc-unwrapped ];
+
+    sourceRoot = ".";
+
+    buildPhase = ''
+      mkdir $out;
+    '';
+
+    installPhase = ''
+      cp -Ra * $out/
+      touch $out/WORKSPACE
+    '';
+  };
+
+  bazelRC = writeTextFile {
+    name = "bazel-rc";
+    text = ''
+      build --override_repository=${remote_java_tools.name}=${remote_java_tools}
+      build --distdir=${distDir}
+      startup --server_javabase=${runJdk}
+
+      # load default location for the system wide configuration
+      try-import /etc/bazel.bazelrc
+    '';
+  };
+  stdenv' = if stdenv.isDarwin then llvmPackages_8.libcxxStdenv else stdenv;
+
+in
+stdenv'.mkDerivation rec {
+  pname = "bazel";
+  inherit version;
+
+  meta = with lib; {
+    homepage = "https://github.com/bazelbuild/bazel/";
+    description = "Build tool that builds code quickly and reliably";
+    license = licenses.asl20;
+    maintainers = lib.teams.bazel.members;
+    inherit platforms;
+  };
+
+  inherit src;
+  sourceRoot = ".";
+
+  patches = [
+    # On Darwin, the last argument to gcc is coming up as an empty string. i.e: ''
+    # This is breaking the build of any C target. This patch removes the last
+    # argument if it's found to be an empty string.
+    ../trim-last-argument-to-gcc-if-empty.patch
+    ./glibc.patch
+
+    # --experimental_strict_action_env (which may one day become the default
+    # see bazelbuild/bazel#2574) hardcodes the default
+    # action environment to a non hermetic value (e.g. "/usr/local/bin").
+    # This is non hermetic on non-nixos systems. On NixOS, bazel cannot find the required binaries.
+    # So we are replacing this bazel paths by defaultShellPath,
+    # improving hermeticity and making it work in nixos.
+    (substituteAll {
+      src = ../strict_action_env.patch;
+      strictActionEnvPatch = defaultShellPath;
+    })
+
+    # bazel reads its system bazelrc in /etc
+    # override this path to a builtin one
+    (substituteAll {
+      src = ../bazel_rc.patch;
+      bazelSystemBazelRCPath = bazelRC;
+    })
+  ] ++ lib.optional enableNixHacks ../nix-hacks.patch;
+
+
+  # Additional tests that check bazel’s functionality. Execute
+  #
+  #     nix-build . -A bazel.tests
+  #
+  # in the nixpkgs checkout root to exercise them locally.
+  passthru.tests =
+    let
+      runLocal = name: attrs: script:
+      let
+        attrs' = removeAttrs attrs [ "buildInputs" ];
+        buildInputs = [ python3 ] ++ (attrs.buildInputs or []);
+      in
+      runCommandCC name ({
+        inherit buildInputs;
+        preferLocalBuild = true;
+        meta.platforms = platforms;
+      } // attrs') script;
+
+      # bazel wants to extract itself into $install_dir/install every time it runs,
+      # so let’s do that only once.
+      extracted = bazelPkg:
+        let install_dir =
+          # `install_base` field printed by `bazel info`, minus the hash.
+          # yes, this path is kinda magic. Sorry.
+          "$HOME/.cache/bazel/_bazel_nixbld";
+        in runLocal "bazel-extracted-homedir" { passthru.install_dir = install_dir; } ''
+            export HOME=$(mktemp -d)
+            touch WORKSPACE # yeah, everything sucks
+            install_base="$(${bazelPkg}/bin/bazel info | grep install_base)"
+            # assert it’s actually below install_dir
+            [[ "$install_base" =~ ${install_dir} ]] \
+              || (echo "oh no! $install_base but we are \
+            trying to copy ${install_dir} to $out instead!"; exit 1)
+            cp -R ${install_dir} $out
+          '';
+
+      bazelTest = { name, bazelScript, workspaceDir, bazelPkg, buildInputs ? [] }:
+        let
+          be = extracted bazelPkg;
+        in runLocal name { inherit buildInputs; } (
+          # skip extraction caching on Darwin, because nobody knows how Darwin works
+          (lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
+            # set up home with pre-unpacked bazel
+            export HOME=$(mktemp -d)
+            mkdir -p ${be.install_dir}
+            cp -R ${be}/install ${be.install_dir}
+
+            # https://stackoverflow.com/questions/47775668/bazel-how-to-skip-corrupt-installation-on-centos6
+            # Bazel checks whether the mtime of the install dir files
+            # is >9 years in the future, otherwise it extracts itself again.
+            # see PosixFileMTime::IsUntampered in src/main/cpp/util
+            # What the hell bazel.
+            ${lr}/bin/lr -0 -U ${be.install_dir} | ${xe}/bin/xe -N0 -0 touch --date="9 years 6 months" {}
+          '')
+          +
+          ''
+            # 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
+
+            ${bazelScript}
+
+            touch $out
+          '');
+
+      bazelWithNixHacks = bazel_self.override { enableNixHacks = true; };
+
+      bazel-examples = fetchFromGitHub {
+        owner = "bazelbuild";
+        repo = "examples";
+        rev = "5d8c8961a2516ebf875787df35e98cadd08d43dc";
+        sha256 = "03c1bwlq5bs3hg96v4g4pg2vqwhqq6w538h66rcpw02f83yy7fs8";
+      };
+
+    in (if !stdenv.hostPlatform.isDarwin then {
+      # `extracted` doesn’t work on darwin
+      shebang = callPackage ../shebang-test.nix { inherit runLocal extracted bazelTest distDir; };
+    } else {}) // {
+      bashTools = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; };
+      cpp = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; };
+      java = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; };
+      protobuf = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; };
+      pythonBinPath = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; };
+
+      bashToolsWithNixHacks = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+
+      cppWithNixHacks = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      javaWithNixHacks = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      protobufWithNixHacks = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+      pythonBinPathWithNixHacks = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+
+      # downstream packages using buildBazelPackage
+      # fixed-output hashes of the fetch phase need to be spot-checked manually
+      downstream = recurseIntoAttrs ({
+        inherit bazel-watcher;
+      }
+          # dm-sonnet is only packaged for linux
+      // (lib.optionalAttrs stdenv.isLinux {
+          # TODO(timokau) dm-sonnet is broken currently
+          # dm-sonnet-linux = python3.pkgs.dm-sonnet;
+      }));
+    };
+
+  # update the list of workspace dependencies
+  passthru.updater = writeScript "update-bazel-deps.sh" ''
+    #!${runtimeShell}
+    cat ${runCommand "bazel-deps.json" {} ''
+        ${unzip}/bin/unzip ${src} WORKSPACE
+        ${python3}/bin/python3 ${../update-srcDeps.py} ./WORKSPACE > $out
+    ''} > ${builtins.toString ./src-deps.json}
+  '';
+
+  # 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;
+
+  # 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 = ''
+      bazelLinkFlags () {
+        eval set -- "$NIX_LDFLAGS"
+        local flag
+        for flag in "$@"; do
+          printf ' -Wl,%s' "$flag"
+        done
+      }
+
+      # 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+=" -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 ${llvmPackages_8.libcxx}/include/c++/v1"
+
+      # don't use system installed Xcode to run clang, use Nix clang instead
+      sed -i -E "s;/usr/bin/xcrun (--sdk macosx )?clang;${stdenv'.cc}/bin/clang $NIX_CFLAGS_COMPILE $(bazelLinkFlags) -framework CoreFoundation;g" \
+        scripts/bootstrap/compile.sh \
+        src/tools/xcode/realpath/BUILD \
+        src/tools/xcode/stdredirect/BUILD \
+        tools/osx/BUILD
+
+      # nixpkgs's libSystem cannot use pthread headers directly, must import GCD headers instead
+      sed -i -e "/#include <pthread\/spawn.h>/i #include <dispatch/dispatch.h>" src/main/cpp/blaze_util_darwin.cc
+
+      # 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 j2objc and objc wrapper's python shebang to plain python path.
+      # These scripts explicitly depend on Python 2.7, hence we use python27.
+      # See also `postFixup` where python27 is added to $out/nix-support
+      substituteInPlace tools/j2objc/j2objc_header_map.py --replace "$!/usr/bin/python2.7" "#!${python27}/bin/python"
+      substituteInPlace tools/j2objc/j2objc_wrapper.py --replace "$!/usr/bin/python2.7" "#!${python27}/bin/python"
+      substituteInPlace tools/objc/j2objc_dead_code_pruner.py --replace "$!/usr/bin/python2.7" "#!${python27}/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.
+        # We default to python3 where possible. See also `postFixup` where
+        # python3 is added to $out/nix-support
+        substituteInPlace "$path" \
+          --replace /bin/bash ${customBash}/bin/bash \
+          --replace "/usr/bin/env bash" ${customBash}/bin/bash \
+          --replace "/usr/bin/env python" ${python3}/bin/python \
+          --replace /usr/bin/env ${coreutils}/bin/env \
+          --replace /bin/true ${coreutils}/bin/true
+      done
+
+      # bazel test runner include references to /bin/bash
+      substituteInPlace tools/build_rules/test_rules.bzl \
+        --replace /bin/bash ${customBash}/bin/bash
+
+      for i in $(find tools/cpp/ -type f)
+      do
+        substituteInPlace $i \
+          --replace /bin/bash ${customBash}/bin/bash
+      done
+
+      # Fixup scripts that generate scripts. Not fixed up by patchShebangs below.
+      substituteInPlace scripts/bootstrap/compile.sh \
+          --replace /bin/bash ${customBash}/bin/bash
+
+      # add nix environment vars to .bazelrc
+      cat >> .bazelrc <<EOF
+      build --distdir=${distDir}
+      fetch --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="$(echo $(< ${stdenv'.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt="/g')"
+      build --host_linkopt="$(echo $(< ${stdenv'.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt="/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=\"$(echo $(< ${stdenv'.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_linkopt=\"$(echo $(< ${stdenv'.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt=\"/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
+
+      # 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
+    python3
+  ];
+
+  # when a command can’t be found in a bazel build, you might also
+  # need to add it to `defaultShellPath`.
+  nativeBuildInputs = [
+    zip
+    python3
+    unzip
+    makeWrapper
+    which
+    customBash
+  ] ++ lib.optionals (stdenv.isDarwin) [ cctools 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
+
+    # 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 --distdir=${distDir} \
+        --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
+    # Some of the scripts explicitly depend on Python 2.7. Otherwise, we
+    # default to using python3. Therefore, both python27 and python3 are
+    # runtime dependencies.
+    echo "${python27}" >> $out/nix-support/depends
+    echo "${python3}" >> $out/nix-support/depends
+  '' + lib.optionalString stdenv.isDarwin ''
+    echo "${cctools}" >> $out/nix-support/depends
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_29/glibc.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_29/glibc.patch
new file mode 100644
index 000000000000..c4de48068f11
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_29/glibc.patch
@@ -0,0 +1,78 @@
+From https://github.com/grpc/grpc/commit/57586a1ca7f17b1916aed3dea4ff8de872dbf853
+From: Benjamin Peterson <benjamin@dropbox.com>
+Date: Fri, 3 May 2019 08:11:00 -0700
+Subject: [PATCH] Rename gettid() functions.
+
+glibc 2.30 will declare its own gettid; see https://sourceware.org/git/?p=glibc.git;a=commit;h=1d0fc213824eaa2a8f8c4385daaa698ee8fb7c92. Rename the grpc versions to avoid naming conflicts.
+---
+ src/core/lib/gpr/log_linux.cc          | 6 ++----
+ src/core/lib/gpr/log_posix.cc          | 4 ++--
+ src/core/lib/iomgr/ev_epollex_linux.cc | 4 ++--
+ 3 files changed, 6 insertions(+), 8 deletions(-)
+
+diff --git a/third_party/grpc/src/core/lib/gpr/log_linux.cc b/src/core/lib/gpr/log_linux.cc
+index 81026e5689b..8b597b4cf2f 100644
+--- a/third_party/grpc/src/core/lib/gpr/log_linux.cc
++++ b/third_party/grpc/src/core/lib/gpr/log_linux.cc
+@@ -40,7 +40,7 @@
+ #include <time.h>
+ #include <unistd.h>
+
+-static long gettid(void) { return syscall(__NR_gettid); }
++static long sys_gettid(void) { return syscall(__NR_gettid); }
+
+ void gpr_log(const char* file, int line, gpr_log_severity severity,
+              const char* format, ...) {
+@@ -70,7 +70,7 @@ void gpr_default_log(gpr_log_func_args* args) {
+   gpr_timespec now = gpr_now(GPR_CLOCK_REALTIME);
+   struct tm tm;
+   static __thread long tid = 0;
+-  if (tid == 0) tid = gettid();
++  if (tid == 0) tid = sys_gettid();
+
+   timer = static_cast<time_t>(now.tv_sec);
+   final_slash = strrchr(args->file, '/');
+diff --git a/third_party/grpc/src/core/lib/gpr/log_posix.cc b/src/core/lib/gpr/log_posix.cc
+index b6edc14ab6b..2f7c6ce3760 100644
+--- a/third_party/grpc/src/core/lib/gpr/log_posix.cc
++++ b/third_party/grpc/src/core/lib/gpr/log_posix.cc
+@@ -31,7 +31,7 @@
+ #include <string.h>
+ #include <time.h>
+
+-static intptr_t gettid(void) { return (intptr_t)pthread_self(); }
++static intptr_t sys_gettid(void) { return (intptr_t)pthread_self(); }
+
+ void gpr_log(const char* file, int line, gpr_log_severity severity,
+              const char* format, ...) {
+@@ -86,7 +86,7 @@ void gpr_default_log(gpr_log_func_args* args) {
+   char* prefix;
+   gpr_asprintf(&prefix, "%s%s.%09d %7" PRIdPTR " %s:%d]",
+                gpr_log_severity_string(args->severity), time_buffer,
+-               (int)(now.tv_nsec), gettid(), display_file, args->line);
++               (int)(now.tv_nsec), sys_gettid(), display_file, args->line);
+
+   fprintf(stderr, "%-70s %s\n", prefix, args->message);
+   gpr_free(prefix);
+diff --git a/third_party/grpc/src/core/lib/iomgr/ev_epollex_linux.cc b/src/core/lib/iomgr/ev_epollex_linux.cc
+index c2d80c08ddb..4a83cb6c215 100644
+--- a/third_party/grpc/src/core/lib/iomgr/ev_epollex_linux.cc
++++ b/third_party/grpc/src/core/lib/iomgr/ev_epollex_linux.cc
+@@ -1077,7 +1077,7 @@ static void end_worker(grpc_pollset* pollset, grpc_pollset_worker* worker,
+ }
+
+ #ifndef NDEBUG
+-static long gettid(void) { return syscall(__NR_gettid); }
++static long sys_gettid(void) { return syscall(__NR_gettid); }
+ #endif
+
+ /* pollset->mu lock must be held by the caller before calling this.
+@@ -1097,7 +1097,7 @@ static grpc_error* pollset_work(grpc_pollset* pollset,
+ #define WORKER_PTR (&worker)
+ #endif
+ #ifndef NDEBUG
+-  WORKER_PTR->originator = gettid();
++  WORKER_PTR->originator = sys_gettid();
+ #endif
+   if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
+     gpr_log(GPR_INFO,
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_29/src-deps.json b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_29/src-deps.json
new file mode 100644
index 000000000000..f93794249ec7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_0_29/src-deps.json
@@ -0,0 +1,506 @@
+{
+    "0.16.2.zip": {
+        "name": "0.16.2.zip",
+        "sha256": "9b72bb0aea72d7cbcfc82a01b1e25bf3d85f791e790ddec16c65e2d906382ee0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/archive/0.16.2.zip",
+            "https://github.com/bazelbuild/rules_nodejs/archive/0.16.2.zip"
+        ]
+    },
+    "0.27.1.tar.gz": {
+        "name": "0.27.1.tar.gz",
+        "sha256": "28cb3666da80fbc62d4c46814f5468dd5d0b59f9064c0b933eee3140d706d330",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/0.27.1.tar.gz",
+            "https://github.com/bazelbuild/bazel-toolchains/archive/0.27.1.tar.gz"
+        ]
+    },
+    "0d5f3f2768c6ca2faca0079a997a97ce22997a0c.zip": {
+        "name": "0d5f3f2768c6ca2faca0079a997a97ce22997a0c.zip",
+        "sha256": "36fa66d4d49debd71d05fba55c1353b522e8caef4a20f8080a3d17cdda001d89",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_cc/archive/0d5f3f2768c6ca2faca0079a997a97ce22997a0c.zip",
+            "https://github.com/bazelbuild/rules_cc/archive/0d5f3f2768c6ca2faca0079a997a97ce22997a0c.zip"
+        ]
+    },
+    "41c28e43dffbae39c52dd4b91932d1209e5a8893.tar.gz": {
+        "name": "41c28e43dffbae39c52dd4b91932d1209e5a8893.tar.gz",
+        "sha256": "fdc34621839104b57363a258eab9d821b02ff7837923cfe7fb6fd67182780829",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/skydoc/archive/41c28e43dffbae39c52dd4b91932d1209e5a8893.tar.gz",
+            "https://github.com/bazelbuild/skydoc/archive/41c28e43dffbae39c52dd4b91932d1209e5a8893.tar.gz"
+        ]
+    },
+    "441afe1bfdadd6236988e9cac159df6b5a9f5a98.zip": {
+        "name": "441afe1bfdadd6236988e9cac159df6b5a9f5a98.zip",
+        "sha256": "a07fe5e75964361885db725039c2ba673f0ee0313d971ae4f50c9b18cd28b0b5",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/archive/441afe1bfdadd6236988e9cac159df6b5a9f5a98.zip",
+            "https://github.com/bazelbuild/platforms/archive/441afe1bfdadd6236988e9cac159df6b5a9f5a98.zip"
+        ]
+    },
+    "7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip": {
+        "name": "7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+        "sha256": "bc81f1ba47ef5cc68ad32225c3d0e70b8c6f6077663835438da8d5733f917598",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+            "https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip"
+        ]
+    },
+    "8ccf4f1c351928b55d5dddf3672e3667f6978d60.tar.gz": {
+        "name": "8ccf4f1c351928b55d5dddf3672e3667f6978d60.tar.gz",
+        "sha256": "d868ce50d592ef4aad7dec4dd32ae68d2151261913450fac8390b3fd474bb898",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/8ccf4f1c351928b55d5dddf3672e3667f6978d60.tar.gz",
+            "https://github.com/bazelbuild/rules_sass/archive/8ccf4f1c351928b55d5dddf3672e3667f6978d60.tar.gz"
+        ]
+    },
+    "android_tools_pkg-0.8.tar.gz": {
+        "name": "android_tools_pkg-0.8.tar.gz",
+        "sha256": "a9eac6e1b27d5549edaaa724b20eb1cdae6253b84f44d5744c30372bd523cfcd",
+        "urls": [
+            "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.8.tar.gz"
+        ]
+    },
+    "b0cc14be5da05168b01db282fe93bdf17aa2b9f4.tar.gz": {
+        "name": "b0cc14be5da05168b01db282fe93bdf17aa2b9f4.tar.gz",
+        "sha256": "88b0a90433866b44bb4450d4c30bc5738b8c4f9c9ba14e9661deb123f56a833d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/b0cc14be5da05168b01db282fe93bdf17aa2b9f4.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/b0cc14be5da05168b01db282fe93bdf17aa2b9f4.tar.gz"
+        ]
+    },
+    "bazel_j2objc": {
+        "name": "bazel_j2objc",
+        "sha256": "8d3403b5b7db57e347c943d214577f6879e5b175c2b59b7e075c0b6453330e9b",
+        "strip_prefix": "j2objc-2.5",
+        "urls": [
+            "https://miirror.bazel.build/github.com/google/j2objc/releases/download/2.5/j2objc-2.5.zip",
+            "https://github.com/google/j2objc/releases/download/2.5/j2objc-2.5.zip"
+        ]
+    },
+    "bazel_skylib": {
+        "name": "bazel_skylib",
+        "sha256": "ba5d15ca230efca96320085d8e4d58da826d1f81b444ef8afccd8b23e0799b52",
+        "strip_prefix": "bazel-skylib-f83cb8dd6f5658bc574ccd873e25197055265d1c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/archive/f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/archive/f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz"
+        ]
+    },
+    "bazel_toolchains": {
+        "name": "bazel_toolchains",
+        "sha256": "28cb3666da80fbc62d4c46814f5468dd5d0b59f9064c0b933eee3140d706d330",
+        "strip_prefix": "bazel-toolchains-0.27.1",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/0.27.1.tar.gz",
+            "https://github.com/bazelbuild/bazel-toolchains/archive/0.27.1.tar.gz"
+        ]
+    },
+    "build_bazel_rules_nodejs": {
+        "name": "build_bazel_rules_nodejs",
+        "sha256": "9b72bb0aea72d7cbcfc82a01b1e25bf3d85f791e790ddec16c65e2d906382ee0",
+        "strip_prefix": "rules_nodejs-0.16.2",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/archive/0.16.2.zip",
+            "https://github.com/bazelbuild/rules_nodejs/archive/0.16.2.zip"
+        ]
+    },
+    "com_google_googletest": {
+        "name": "com_google_googletest",
+        "sha256": "0fb00ff413f6b9b80ccee44a374ca7a18af7315aea72a43c62f2acd1ca74e9b5",
+        "strip_prefix": "googletest-f13bbe2992d188e834339abe6f715b2b2f840a77",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/googletest/archive/f13bbe2992d188e834339abe6f715b2b2f840a77.tar.gz",
+            "https://github.com/google/googletest/archive/f13bbe2992d188e834339abe6f715b2b2f840a77.tar.gz"
+        ]
+    },
+    "coverage_output_generator-v1.0.zip": {
+        "name": "coverage_output_generator-v1.0.zip",
+        "sha256": "cc470e529fafb6165b5be3929ff2d99b38429b386ac100878687416603a67889",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v1.0.zip"
+        ]
+    },
+    "desugar_jdk_libs": {
+        "name": "desugar_jdk_libs",
+        "sha256": "fe2e04f91ce8c59d49d91b8102edc6627c6fa2906c1b0e7346f01419ec4f419d",
+        "strip_prefix": "desugar_jdk_libs-e0b0291b2c51fbe5a7cfa14473a1ae850f94f021",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip"
+        ]
+    },
+    "e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip": {
+        "name": "e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+        "sha256": "fe2e04f91ce8c59d49d91b8102edc6627c6fa2906c1b0e7346f01419ec4f419d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip"
+        ]
+    },
+    "f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz": {
+        "name": "f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz",
+        "sha256": "ba5d15ca230efca96320085d8e4d58da826d1f81b444ef8afccd8b23e0799b52",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/archive/f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/archive/f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz"
+        ]
+    },
+    "io_bazel_rules_sass": {
+        "name": "io_bazel_rules_sass",
+        "sha256": "d868ce50d592ef4aad7dec4dd32ae68d2151261913450fac8390b3fd474bb898",
+        "strip_prefix": "rules_sass-8ccf4f1c351928b55d5dddf3672e3667f6978d60",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/8ccf4f1c351928b55d5dddf3672e3667f6978d60.tar.gz",
+            "https://github.com/bazelbuild/rules_sass/archive/8ccf4f1c351928b55d5dddf3672e3667f6978d60.tar.gz"
+        ]
+    },
+    "io_bazel_skydoc": {
+        "name": "io_bazel_skydoc",
+        "sha256": "fdc34621839104b57363a258eab9d821b02ff7837923cfe7fb6fd67182780829",
+        "strip_prefix": "skydoc-41c28e43dffbae39c52dd4b91932d1209e5a8893",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/skydoc/archive/41c28e43dffbae39c52dd4b91932d1209e5a8893.tar.gz",
+            "https://github.com/bazelbuild/skydoc/archive/41c28e43dffbae39c52dd4b91932d1209e5a8893.tar.gz"
+        ]
+    },
+    "java_tools_javac11_darwin-v4.0.zip": {
+        "name": "java_tools_javac11_darwin-v4.0.zip",
+        "sha256": "fbf5bf22e9aab9c622e4c8c59314a1eef5ea09eafc5672b4f3250dc0b971bbcc",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v4.0/java_tools_javac11_darwin-v4.0.zip"
+        ]
+    },
+    "java_tools_javac11_linux-v4.0.zip": {
+        "name": "java_tools_javac11_linux-v4.0.zip",
+        "sha256": "96e223094a12c842a66db0bb7bb6866e88e26e678f045842911f9bd6b47161f5",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v4.0/java_tools_javac11_linux-v4.0.zip"
+        ]
+    },
+    "java_tools_javac11_windows-v4.0.zip": {
+        "name": "java_tools_javac11_windows-v4.0.zip",
+        "sha256": "a1de51447b2ba2eab923d589ba6c72c289c16e6091e6a3bb3e67a05ef4ad200c",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v4.0/java_tools_javac11_windows-v4.0.zip"
+        ]
+    },
+    "java_tools_langtools_javac10": {
+        "name": "java_tools_langtools_javac10",
+        "sha256": "0e9c9ac5ef17869de3cb8c3497c4c0d31836ef7b63efe1690506f53783adb212",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/jdk_langtools/langtools_jdk10_v2.zip"
+        ]
+    },
+    "java_tools_langtools_javac11": {
+        "name": "java_tools_langtools_javac11",
+        "sha256": "cf0814fa002ef3d794582bb086516d8c9ed0958f83f19799cdb08949019fe4c7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/jdk_langtools/langtools_jdk11_v2.zip"
+        ]
+    },
+    "java_tools_langtools_javac12": {
+        "name": "java_tools_langtools_javac12",
+        "sha256": "99b107105165a91df82cd7cf82a8efb930d803fb7de1663cf7f780142104cd14",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/jdk_langtools/langtools_jdk12.zip"
+        ]
+    },
+    "java_tools_langtools_javac9": {
+        "name": "java_tools_langtools_javac9",
+        "sha256": "d94befcfb325a9a62aebc2052e631fde2322b4df5c82a19ed260b38ba12a0ad1",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/jdk_langtools/langtools_jdk9_v2.zip"
+        ]
+    },
+    "jdk10-server-release-1804.tar.xz": {
+        "name": "jdk10-server-release-1804.tar.xz",
+        "sha256": "b7098b7aaf6ee1ffd4a2d0371a0be26c5a5c87f6aebbe46fe9a92c90583a84be",
+        "urls": [
+            "https://mirror.bazel.build/openjdk.linaro.org/releases/jdk10-server-release-1804.tar.xz"
+        ]
+    },
+    "jdk9-server-release-1708.tar.xz": {
+        "name": "jdk9-server-release-1708.tar.xz",
+        "sha256": "72e7843902b0395e2d30e1e9ad2a5f05f36a4bc62529828bcbc698d54aec6022",
+        "urls": [
+            "https://mirror.bazel.build/openjdk.linaro.org/releases/jdk9-server-release-1708.tar.xz"
+        ]
+    },
+    "openjdk10_linux_archive": {
+        "build_file_content": "java_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])",
+        "name": "openjdk10_linux_archive",
+        "sha256": "b3c2d762091a615b0c1424ebbd05d75cc114da3bf4f25a0dec5c51ea7e84146f",
+        "strip_prefix": "zulu10.2+3-jdk10.0.1-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu10.2+3-jdk10.0.1/zulu10.2+3-jdk10.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk11_linux_archive": {
+        "build_file_content": "java_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])",
+        "name": "openjdk11_linux_archive",
+        "sha256": "ddb0fd4526089cf1ce2db36282c282263f587a9e8be373fa02f511a12923cc48",
+        "strip_prefix": "zulu11.31.11-ca-jdk11.0.3-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.31.11-ca-jdk11.0.3/zulu11.31.11-ca-jdk11.0.3-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk12_linux_archive": {
+        "build_file_content": "java_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])",
+        "name": "openjdk12_linux_archive",
+        "sha256": "529c99841d69e11a85aea967ccfb9d0fd40b98c5b68dbe1d059002655e0a9c13",
+        "strip_prefix": "zulu12.2.3-ca-jdk12.0.1-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu12.2.3-ca-jdk12.0.1/zulu12.2.3-ca-jdk12.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk9_linux_archive": {
+        "build_file_content": "java_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])",
+        "name": "openjdk9_linux_archive",
+        "sha256": "45f2dfbee93b91b1468cf81d843fc6d9a47fef1f831c0b7ceff4f1eb6e6851c8",
+        "strip_prefix": "zulu9.0.7.1-jdk9.0.7-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu-9.0.7.1-jdk9.0.7/zulu9.0.7.1-jdk9.0.7-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk_linux": {
+        "downloaded_file_path": "zulu-linux.tar.gz",
+        "name": "openjdk_linux",
+        "sha256": "460d8a4f0c0204160b48086e341b22943c9cca471b195340e75b38ae9eb33c1c",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-linux_x64-allmodules-90755145cb6e6418584d8603cd5fa9afbb30aecc-1549209950.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64": {
+        "downloaded_file_path": "zulu-linux-aarch64.tar.gz",
+        "name": "openjdk_linux_aarch64",
+        "sha256": "23c37c0c3a8fdcbc68e96e70ff5c5c020c14db76deaae9b547849afda4586e5e",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.31.15-ca-jdk11.0.3/zulu11.31.15-ca-jdk11.0.3-linux_aarch64-allmodules-c82eb4878c7dc829455caeb915affe36c89df06f-1561630858.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_minimal": {
+        "downloaded_file_path": "zulu-linux-aarch64-minimal.tar.gz",
+        "name": "openjdk_linux_aarch64_minimal",
+        "sha256": "7af2583fe5ef0a781d4a9dca0c0160d42e7db1305ec1b66f98aa44c91cc875df",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.31.15-ca-jdk11.0.3/zulu11.31.15-ca-jdk11.0.3-linux_aarch64-minimal-c82eb4878c7dc829455caeb915affe36c89df06f-1561630858.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_vanilla": {
+        "downloaded_file_path": "zulu-linux-aarch64-vanilla.tar.gz",
+        "name": "openjdk_linux_aarch64_vanilla",
+        "sha256": "3b0d91611b1bdc4d409afcf9eab4f0e7f4ae09f88fc01bd9f2b48954882ae69b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.31.15-ca-jdk11.0.3/zulu11.31.15-ca-jdk11.0.3-linux_aarch64.tar.gz"
+        ]
+    },
+    "openjdk_linux_minimal": {
+        "downloaded_file_path": "zulu-linux-minimal.tar.gz",
+        "name": "openjdk_linux_minimal",
+        "sha256": "5123bc8dd21886761d1fd9ca0fb1898b3372d7243064a070ec81ca9c9d1a6791",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-linux_x64-minimal-524ae2ca2a782c9f15e00f08bd35b3f8ceacbd7f-1556011926.tar.gz"
+        ]
+    },
+    "openjdk_linux_vanilla": {
+        "downloaded_file_path": "zulu-linux-vanilla.tar.gz",
+        "name": "openjdk_linux_vanilla",
+        "sha256": "f3f44b6235508e87b760bf37a49e186cc1fa4e9cd28384c4dbf5a33991921e08",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk_macos": {
+        "downloaded_file_path": "zulu-macos.tar.gz",
+        "name": "openjdk_macos",
+        "sha256": "8fa61d85ca6f657d646fdb50cfc8634987f8f7d8a3250ed39fb7364647633252",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-macosx_x64-allmodules-90755145cb6e6418584d8603cd5fa9afbb30aecc-1549209951.tar.gz"
+        ]
+    },
+    "openjdk_macos_minimal": {
+        "downloaded_file_path": "zulu-macos-minimal.tar.gz",
+        "name": "openjdk_macos_minimal",
+        "sha256": "ac56e44db46fd56ac78b39b6823daed4faa74a2677ac340c7d217f863884ec0f",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-macosx_x64-minimal-524ae2ca2a782c9f15e00f08bd35b3f8ceacbd7f-1556003114.tar.gz"
+        ]
+    },
+    "openjdk_macos_vanilla": {
+        "downloaded_file_path": "zulu-macos-vanilla.tar.gz",
+        "name": "openjdk_macos_vanilla",
+        "sha256": "059f8e3484bf07b63a8f2820d5f528f473eff1befdb1896ee4f8ff06be3b8d8f",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-macosx_x64.zip"
+        ]
+    },
+    "openjdk_win": {
+        "downloaded_file_path": "zulu-win.zip",
+        "name": "openjdk_win",
+        "sha256": "e6ddb361309f8e84eb5fb5ad8b0f5cc031ba3679910139262c31efd8f7579d05",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-win_x64-allmodules-90755145cb6e6418584d8603cd5fa9afbb30aecc-1549209972.zip"
+        ]
+    },
+    "openjdk_win_minimal": {
+        "downloaded_file_path": "zulu-win-minimal.zip",
+        "name": "openjdk_win_minimal",
+        "sha256": "8e5dada6e9ebcc9ce29b4d051449bb95d3ee1e620e166da862224bbf15211f8b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-win_x64-minimal-524ae2ca2a782c9f15e00f08bd35b3f8ceacbd7f-1556003136.zip"
+        ]
+    },
+    "openjdk_win_vanilla": {
+        "downloaded_file_path": "zulu-win-vanilla.zip",
+        "name": "openjdk_win_vanilla",
+        "sha256": "e1f5b4ce1b9148140fae2fcfb8a96d1c9b7eac5b8df0e13fbcad9b8561284880",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-win_x64.zip"
+        ]
+    },
+    "platforms": {
+        "name": "platforms",
+        "sha256": "a07fe5e75964361885db725039c2ba673f0ee0313d971ae4f50c9b18cd28b0b5",
+        "strip_prefix": "platforms-441afe1bfdadd6236988e9cac159df6b5a9f5a98",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/archive/441afe1bfdadd6236988e9cac159df6b5a9f5a98.zip",
+            "https://github.com/bazelbuild/platforms/archive/441afe1bfdadd6236988e9cac159df6b5a9f5a98.zip"
+        ]
+    },
+    "rules_cc": {
+        "name": "rules_cc",
+        "sha256": "36fa66d4d49debd71d05fba55c1353b522e8caef4a20f8080a3d17cdda001d89",
+        "strip_prefix": "rules_cc-0d5f3f2768c6ca2faca0079a997a97ce22997a0c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_cc/archive/0d5f3f2768c6ca2faca0079a997a97ce22997a0c.zip",
+            "https://github.com/bazelbuild/rules_cc/archive/0d5f3f2768c6ca2faca0079a997a97ce22997a0c.zip"
+        ]
+    },
+    "rules_java": {
+        "name": "rules_java",
+        "sha256": "bc81f1ba47ef5cc68ad32225c3d0e70b8c6f6077663835438da8d5733f917598",
+        "strip_prefix": "rules_java-7cf3cefd652008d0a64a419c34c13bdca6c8f178",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+            "https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip"
+        ]
+    },
+    "rules_pkg": {
+        "name": "rules_pkg",
+        "sha256": "5bdc04987af79bd27bc5b00fe30f59a858f77ffa0bd2d8143d5b31ad8b1bd71c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/rules_pkg-0.2.0.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.2.0/rules_pkg-0.2.0.tar.gz"
+        ]
+    },
+    "rules_pkg-0.2.0.tar.gz": {
+        "name": "rules_pkg-0.2.0.tar.gz",
+        "sha256": "5bdc04987af79bd27bc5b00fe30f59a858f77ffa0bd2d8143d5b31ad8b1bd71c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/rules_pkg-0.2.0.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.2.0/rules_pkg-0.2.0.tar.gz"
+        ]
+    },
+    "rules_proto": {
+        "name": "rules_proto",
+        "sha256": "88b0a90433866b44bb4450d4c30bc5738b8c4f9c9ba14e9661deb123f56a833d",
+        "strip_prefix": "rules_proto-b0cc14be5da05168b01db282fe93bdf17aa2b9f4",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/b0cc14be5da05168b01db282fe93bdf17aa2b9f4.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/b0cc14be5da05168b01db282fe93bdf17aa2b9f4.tar.gz"
+        ]
+    },
+    "zulu10.2+3-jdk10.0.1-linux_x64-allmodules.tar.gz": {
+        "name": "zulu10.2+3-jdk10.0.1-linux_x64-allmodules.tar.gz",
+        "sha256": "57fad3602e74c79587901d6966d3b54ef32cb811829a2552163185d5064fe9b5",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu10.2+3-jdk10.0.1/zulu10.2+3-jdk10.0.1-linux_x64-allmodules.tar.gz"
+        ]
+    },
+    "zulu10.2+3-jdk10.0.1-macosx_x64-allmodules.tar.gz": {
+        "name": "zulu10.2+3-jdk10.0.1-macosx_x64-allmodules.tar.gz",
+        "sha256": "e669c9a897413d855b550b4e39d79614392e6fb96f494e8ef99a34297d9d85d3",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu10.2+3-jdk10.0.1/zulu10.2+3-jdk10.0.1-macosx_x64-allmodules.tar.gz"
+        ]
+    },
+    "zulu10.2+3-jdk10.0.1-win_x64-allmodules.zip": {
+        "name": "zulu10.2+3-jdk10.0.1-win_x64-allmodules.zip",
+        "sha256": "c39e7700a8d41794d60985df5a20352435196e78ecbc6a2b30df7be8637bffd5",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu10.2+3-jdk10.0.1/zulu10.2+3-jdk10.0.1-win_x64-allmodules.zip"
+        ]
+    },
+    "zulu11.2.3-jdk11.0.1-linux_x64.tar.gz": {
+        "name": "zulu11.2.3-jdk11.0.1-linux_x64.tar.gz",
+        "sha256": "232b1c3511f0d26e92582b7c3cc363be7ac633e371854ca2f2e9f2b50eb72a75",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.2.3-jdk11.0.1/zulu11.2.3-jdk11.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "zulu11.2.3-jdk11.0.1-macosx_x64.tar.gz": {
+        "name": "zulu11.2.3-jdk11.0.1-macosx_x64.tar.gz",
+        "sha256": "1edf366ee821e5db8e348152fcb337b28dfd6bf0f97943c270dcc6747cedb6cb",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.2.3-jdk11.0.1/zulu11.2.3-jdk11.0.1-macosx_x64.tar.gz"
+        ]
+    },
+    "zulu11.2.3-jdk11.0.1-win_x64.zip": {
+        "name": "zulu11.2.3-jdk11.0.1-win_x64.zip",
+        "sha256": "8e1e2b8347de6746f3fd1538840dd643201533ab113abc4ed93678e342d28aa3",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.2.3-jdk11.0.1/zulu11.2.3-jdk11.0.1-win_x64.zip"
+        ]
+    },
+    "zulu11.29.3-ca-jdk11.0.2-linux_x64.tar.gz": {
+        "name": "zulu11.29.3-ca-jdk11.0.2-linux_x64.tar.gz",
+        "sha256": "f3f44b6235508e87b760bf37a49e186cc1fa4e9cd28384c4dbf5a33991921e08",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-linux_x64.tar.gz"
+        ]
+    },
+    "zulu11.29.3-ca-jdk11.0.2-macosx_x64.zip": {
+        "name": "zulu11.29.3-ca-jdk11.0.2-macosx_x64.zip",
+        "sha256": "059f8e3484bf07b63a8f2820d5f528f473eff1befdb1896ee4f8ff06be3b8d8f",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-macosx_x64.zip"
+        ]
+    },
+    "zulu11.29.3-ca-jdk11.0.2-win_x64.zip": {
+        "name": "zulu11.29.3-ca-jdk11.0.2-win_x64.zip",
+        "sha256": "e1f5b4ce1b9148140fae2fcfb8a96d1c9b7eac5b8df0e13fbcad9b8561284880",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-win_x64.zip"
+        ]
+    },
+    "zulu11.31.15-ca-jdk11.0.3-linux_aarch64.tar.gz": {
+        "name": "zulu11.31.15-ca-jdk11.0.3-linux_aarch64.tar.gz",
+        "sha256": "3b0d91611b1bdc4d409afcf9eab4f0e7f4ae09f88fc01bd9f2b48954882ae69b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.31.15-ca-jdk11.0.3/zulu11.31.15-ca-jdk11.0.3-linux_aarch64.tar.gz"
+        ]
+    },
+    "zulu9.0.7.1-jdk9.0.7-linux_x64-allmodules.tar.gz": {
+        "name": "zulu9.0.7.1-jdk9.0.7-linux_x64-allmodules.tar.gz",
+        "sha256": "f27cb933de4f9e7fe9a703486cf44c84bc8e9f138be0c270c9e5716a32367e87",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu-9.0.7.1-jdk9.0.7/zulu9.0.7.1-jdk9.0.7-linux_x64-allmodules.tar.gz"
+        ]
+    },
+    "zulu9.0.7.1-jdk9.0.7-macosx_x64-allmodules.tar.gz": {
+        "name": "zulu9.0.7.1-jdk9.0.7-macosx_x64-allmodules.tar.gz",
+        "sha256": "404e7058ff91f956612f47705efbee8e175a38b505fb1b52d8c1ea98718683de",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu-9.0.7.1-jdk9.0.7/zulu9.0.7.1-jdk9.0.7-macosx_x64-allmodules.tar.gz"
+        ]
+    },
+    "zulu9.0.7.1-jdk9.0.7-win_x64-allmodules.zip": {
+        "name": "zulu9.0.7.1-jdk9.0.7-win_x64-allmodules.zip",
+        "sha256": "e738829017f107e7a7cd5069db979398ec3c3f03ef56122f89ba38e7374f63ed",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu-9.0.7.1-jdk9.0.7/zulu9.0.7.1-jdk9.0.7-win_x64-allmodules.zip"
+        ]
+    }
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_1/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_1/default.nix
new file mode 100644
index 000000000000..3adf52ec905e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_1/default.nix
@@ -0,0 +1,565 @@
+{ stdenv, callPackage, lib, fetchurl, fetchFromGitHub
+, runCommand, runCommandCC, makeWrapper, recurseIntoAttrs
+# this package (through the fixpoint glass)
+, bazel_self
+, lr, xe, zip, unzip, bash, writeCBin, coreutils
+, which, gawk, gnused, gnutar, gnugrep, gzip, findutils
+# updater
+, python27, python3, writeScript
+# Apple dependencies
+, cctools, llvmPackages_8, CoreFoundation, CoreServices, Foundation
+# Allow to independently override the jdks used to build and run respectively
+, buildJdk, runJdk
+, buildJdkName
+, runtimeShell
+# Downstream packages for tests
+, bazel-watcher
+# Always assume all markers valid (this is needed because we remove markers; they are non-deterministic).
+# Also, don't clean up environment variables (so that NIX_ environment variables are passed to compilers).
+, enableNixHacks ? false
+, gcc-unwrapped
+, autoPatchelfHook
+, file
+, substituteAll
+, writeTextFile
+}:
+
+let
+  version = "1.2.1";
+
+  src = fetchurl {
+    url = "https://github.com/bazelbuild/bazel/releases/download/${version}/bazel-${version}-dist.zip";
+    sha256 = "1qfk14mgx1m454b4w4ldggljzqkqwpdwrlynq7rc8aq11yfs8p95";
+  };
+
+  # Update with `eval $(nix-build -A bazel.updater)`,
+  # then add new dependencies from the dict in ./src-deps.json as required.
+  srcDeps = lib.attrsets.attrValues srcDepsSet;
+  srcDepsSet =
+    let
+      srcs = lib.importJSON ./src-deps.json;
+      toFetchurl = d: lib.attrsets.nameValuePair d.name (fetchurl {
+        urls = d.urls;
+        sha256 = d.sha256;
+        });
+        in builtins.listToAttrs (map toFetchurl [
+      srcs.desugar_jdk_libs
+      srcs.io_bazel_skydoc
+      srcs.bazel_skylib
+      srcs.io_bazel_rules_sass
+      srcs.platforms
+      (if stdenv.hostPlatform.isDarwin
+       then srcs."java_tools_javac11_darwin-v6.1.zip"
+       else srcs."java_tools_javac11_linux-v6.1.zip")
+      srcs."coverage_output_generator-v2.0.zip"
+      srcs.build_bazel_rules_nodejs
+      srcs."android_tools_pkg-0.12.tar.gz"
+      srcs."0.28.3.tar.gz"
+      srcs.rules_pkg
+      srcs.rules_cc
+      srcs.rules_java
+      srcs.rules_proto
+      ]);
+
+  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 file zip ];
+
+  # Java toolchain used for the build and tests
+  javaToolchain = "@bazel_tools//tools/jdk:toolchain_host${buildJdkName}";
+
+  platforms = lib.platforms.linux ++ lib.platforms.darwin;
+
+  # This repository is fetched by bazel at runtime
+  # however it contains prebuilt java binaries, with wrong interpreter
+  # and libraries path.
+  # We prefetch it, patch it, and override it in a global bazelrc.
+  system = if stdenv.hostPlatform.isDarwin then "darwin" else "linux";
+
+  remote_java_tools = stdenv.mkDerivation {
+    name = "remote_java_tools_${system}";
+
+    src = srcDepsSet."java_tools_javac11_${system}-v6.1.zip";
+
+    nativeBuildInputs = [ autoPatchelfHook unzip ];
+    buildInputs = [ gcc-unwrapped ];
+
+    sourceRoot = ".";
+
+    buildPhase = ''
+      mkdir $out;
+    '';
+
+    installPhase = ''
+      cp -Ra * $out/
+      touch $out/WORKSPACE
+    '';
+  };
+
+  bazelRC = writeTextFile {
+    name = "bazel-rc";
+    text = ''
+      build --override_repository=${remote_java_tools.name}=${remote_java_tools}
+      build --distdir=${distDir}
+      startup --server_javabase=${runJdk}
+
+      # load default location for the system wide configuration
+      try-import /etc/bazel.bazelrc
+    '';
+  };
+
+  stdenv' = if stdenv.isDarwin then llvmPackages_8.libcxxStdenv else stdenv;
+
+in
+stdenv'.mkDerivation rec {
+  pname = "bazel";
+  inherit version;
+
+  meta = with lib; {
+    homepage = "https://github.com/bazelbuild/bazel/";
+    description = "Build tool that builds code quickly and reliably";
+    license = licenses.asl20;
+    maintainers = lib.teams.bazel.members;
+    inherit platforms;
+  };
+
+  inherit src;
+  sourceRoot = ".";
+
+  patches = [
+    # On Darwin, the last argument to gcc is coming up as an empty string. i.e: ''
+    # This is breaking the build of any C target. This patch removes the last
+    # argument if it's found to be an empty string.
+    ../trim-last-argument-to-gcc-if-empty.patch
+    ./glibc.patch
+
+    # --experimental_strict_action_env (which may one day become the default
+    # see bazelbuild/bazel#2574) hardcodes the default
+    # action environment to a non hermetic value (e.g. "/usr/local/bin").
+    # This is non hermetic on non-nixos systems. On NixOS, bazel cannot find the required binaries.
+    # So we are replacing this bazel paths by defaultShellPath,
+    # improving hermeticity and making it work in nixos.
+    (substituteAll {
+      src = ../strict_action_env.patch;
+      strictActionEnvPatch = defaultShellPath;
+    })
+
+    # bazel reads its system bazelrc in /etc
+    # override this path to a builtin one
+    (substituteAll {
+      src = ../bazel_rc.patch;
+      bazelSystemBazelRCPath = bazelRC;
+    })
+  ] ++ lib.optional enableNixHacks ../nix-hacks.patch;
+
+
+  # Additional tests that check bazel’s functionality. Execute
+  #
+  #     nix-build . -A bazel.tests
+  #
+  # in the nixpkgs checkout root to exercise them locally.
+  passthru.tests =
+    let
+      runLocal = name: attrs: script:
+      let
+        attrs' = removeAttrs attrs [ "buildInputs" ];
+        buildInputs = [ python3 ] ++ (attrs.buildInputs or []);
+      in
+      runCommandCC name ({
+        inherit buildInputs;
+        preferLocalBuild = true;
+        meta.platforms = platforms;
+      } // attrs') script;
+
+      # bazel wants to extract itself into $install_dir/install every time it runs,
+      # so let’s do that only once.
+      extracted = bazelPkg:
+        let install_dir =
+          # `install_base` field printed by `bazel info`, minus the hash.
+          # yes, this path is kinda magic. Sorry.
+          "$HOME/.cache/bazel/_bazel_nixbld";
+        in runLocal "bazel-extracted-homedir" { passthru.install_dir = install_dir; } ''
+            export HOME=$(mktemp -d)
+            touch WORKSPACE # yeah, everything sucks
+            install_base="$(${bazelPkg}/bin/bazel info | grep install_base)"
+            # assert it’s actually below install_dir
+            [[ "$install_base" =~ ${install_dir} ]] \
+              || (echo "oh no! $install_base but we are \
+            trying to copy ${install_dir} to $out instead!"; exit 1)
+            cp -R ${install_dir} $out
+          '';
+
+      bazelTest = { name, bazelScript, workspaceDir, bazelPkg, buildInputs ? [] }:
+        let
+          be = extracted bazelPkg;
+        in runLocal name { inherit buildInputs; } (
+          # skip extraction caching on Darwin, because nobody knows how Darwin works
+          (lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
+            # set up home with pre-unpacked bazel
+            export HOME=$(mktemp -d)
+            mkdir -p ${be.install_dir}
+            cp -R ${be}/install ${be.install_dir}
+
+            # https://stackoverflow.com/questions/47775668/bazel-how-to-skip-corrupt-installation-on-centos6
+            # Bazel checks whether the mtime of the install dir files
+            # is >9 years in the future, otherwise it extracts itself again.
+            # see PosixFileMTime::IsUntampered in src/main/cpp/util
+            # What the hell bazel.
+            ${lr}/bin/lr -0 -U ${be.install_dir} | ${xe}/bin/xe -N0 -0 touch --date="9 years 6 months" {}
+          '')
+          +
+          ''
+            # 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
+
+            ${bazelScript}
+
+            touch $out
+          '');
+
+      bazelWithNixHacks = bazel_self.override { enableNixHacks = true; };
+
+      bazel-examples = fetchFromGitHub {
+        owner = "bazelbuild";
+        repo = "examples";
+        rev = "5d8c8961a2516ebf875787df35e98cadd08d43dc";
+        sha256 = "03c1bwlq5bs3hg96v4g4pg2vqwhqq6w538h66rcpw02f83yy7fs8";
+      };
+
+    in (if !stdenv.hostPlatform.isDarwin then {
+      # `extracted` doesn’t work on darwin
+      shebang = callPackage ../shebang-test.nix { inherit runLocal extracted bazelTest distDir; };
+    } else {}) // {
+      bashTools = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; };
+      cpp = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; };
+      java = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; };
+      protobuf = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; };
+      pythonBinPath = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; };
+
+      bashToolsWithNixHacks = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+
+      cppWithNixHacks = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      javaWithNixHacks = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      protobufWithNixHacks = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+      pythonBinPathWithNixHacks = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+
+      # downstream packages using buildBazelPackage
+      # fixed-output hashes of the fetch phase need to be spot-checked manually
+      downstream = recurseIntoAttrs ({
+        inherit bazel-watcher;
+      }
+          # dm-sonnet is only packaged for linux
+      // (lib.optionalAttrs stdenv.isLinux {
+          # TODO(timokau) dm-sonnet is broken currently
+          # dm-sonnet-linux = python3.pkgs.dm-sonnet;
+      }));
+    };
+
+  # update the list of workspace dependencies
+  passthru.updater = writeScript "update-bazel-deps.sh" ''
+    #!${runtimeShell}
+    cat ${runCommand "bazel-deps.json" {} ''
+        ${unzip}/bin/unzip ${src} WORKSPACE
+        ${python3}/bin/python3 ${../update-srcDeps.py} ./WORKSPACE > $out
+    ''} > ${builtins.toString ./src-deps.json}
+  '';
+
+  # 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;
+
+  # 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 = ''
+      bazelLinkFlags () {
+        eval set -- "$NIX_LDFLAGS"
+        local flag
+        for flag in "$@"; do
+          printf ' -Wl,%s' "$flag"
+        done
+      }
+
+      # 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+=" -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 ${llvmPackages_8.libcxx}/include/c++/v1"
+
+      # don't use system installed Xcode to run clang, use Nix clang instead
+      sed -i -E "s;/usr/bin/xcrun --sdk macosx clang -mmacosx-version-min=10.9;${stdenv'.cc}/bin/clang $NIX_CFLAGS_COMPILE $(bazelLinkFlags) -framework CoreFoundation;g" \
+        scripts/bootstrap/compile.sh \
+        src/tools/xcode/realpath/BUILD \
+        src/tools/xcode/stdredirect/BUILD \
+        tools/osx/BUILD
+
+      # nixpkgs's libSystem cannot use pthread headers directly, must import GCD headers instead
+      sed -i -e "/#include <pthread\/spawn.h>/i #include <dispatch/dispatch.h>" src/main/cpp/blaze_util_darwin.cc
+
+      # 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 j2objc and objc wrapper's python shebang to plain python path.
+      # These scripts explicitly depend on Python 2.7, hence we use python27.
+      # See also `postFixup` where python27 is added to $out/nix-support
+      substituteInPlace tools/j2objc/j2objc_header_map.py --replace "$!/usr/bin/python2.7" "#!${python27}/bin/python"
+      substituteInPlace tools/j2objc/j2objc_wrapper.py --replace "$!/usr/bin/python2.7" "#!${python27}/bin/python"
+      substituteInPlace tools/objc/j2objc_dead_code_pruner.py --replace "$!/usr/bin/python2.7" "#!${python27}/bin/python"
+
+      # md5sum is part of coreutils
+      sed -i 's|/sbin/md5|md5sum|g' \
+        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.
+        # We default to python3 where possible. See also `postFixup` where
+        # python3 is added to $out/nix-support
+        substituteInPlace "$path" \
+          --replace /bin/bash ${customBash}/bin/bash \
+          --replace "/usr/bin/env bash" ${customBash}/bin/bash \
+          --replace "/usr/bin/env python" ${python3}/bin/python \
+          --replace /usr/bin/env ${coreutils}/bin/env \
+          --replace /bin/true ${coreutils}/bin/true
+      done
+
+      # bazel test runner include references to /bin/bash
+      substituteInPlace tools/build_rules/test_rules.bzl \
+        --replace /bin/bash ${customBash}/bin/bash
+
+      for i in $(find tools/cpp/ -type f)
+      do
+        substituteInPlace $i \
+          --replace /bin/bash ${customBash}/bin/bash
+      done
+
+      # Fixup scripts that generate scripts. Not fixed up by patchShebangs below.
+      substituteInPlace scripts/bootstrap/compile.sh \
+          --replace /bin/bash ${customBash}/bin/bash
+
+      # add nix environment vars to .bazelrc
+      cat >> .bazelrc <<EOF
+      build --distdir=${distDir}
+      fetch --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="$(echo $(< ${stdenv'.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt="/g')"
+      build --host_linkopt="$(echo $(< ${stdenv'.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt="/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=\"$(echo $(< ${stdenv'.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_linkopt=\"$(echo $(< ${stdenv'.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt=\"/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
+
+      # 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
+    python3
+  ];
+
+  # when a command can’t be found in a bazel build, you might also
+  # need to add it to `defaultShellPath`.
+  nativeBuildInputs = [
+    zip
+    python3
+    unzip
+    makeWrapper
+    which
+    customBash
+  ] ++ lib.optionals (stdenv.isDarwin) [ cctools 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
+
+    # 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 --distdir=${distDir} \
+        --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
+    # Some of the scripts explicitly depend on Python 2.7. Otherwise, we
+    # default to using python3. Therefore, both python27 and python3 are
+    # runtime dependencies.
+    echo "${python27}" >> $out/nix-support/depends
+    echo "${python3}" >> $out/nix-support/depends
+  '' + lib.optionalString stdenv.isDarwin ''
+    echo "${cctools}" >> $out/nix-support/depends
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_1/glibc.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_1/glibc.patch
new file mode 100644
index 000000000000..c4de48068f11
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_1/glibc.patch
@@ -0,0 +1,78 @@
+From https://github.com/grpc/grpc/commit/57586a1ca7f17b1916aed3dea4ff8de872dbf853
+From: Benjamin Peterson <benjamin@dropbox.com>
+Date: Fri, 3 May 2019 08:11:00 -0700
+Subject: [PATCH] Rename gettid() functions.
+
+glibc 2.30 will declare its own gettid; see https://sourceware.org/git/?p=glibc.git;a=commit;h=1d0fc213824eaa2a8f8c4385daaa698ee8fb7c92. Rename the grpc versions to avoid naming conflicts.
+---
+ src/core/lib/gpr/log_linux.cc          | 6 ++----
+ src/core/lib/gpr/log_posix.cc          | 4 ++--
+ src/core/lib/iomgr/ev_epollex_linux.cc | 4 ++--
+ 3 files changed, 6 insertions(+), 8 deletions(-)
+
+diff --git a/third_party/grpc/src/core/lib/gpr/log_linux.cc b/src/core/lib/gpr/log_linux.cc
+index 81026e5689b..8b597b4cf2f 100644
+--- a/third_party/grpc/src/core/lib/gpr/log_linux.cc
++++ b/third_party/grpc/src/core/lib/gpr/log_linux.cc
+@@ -40,7 +40,7 @@
+ #include <time.h>
+ #include <unistd.h>
+
+-static long gettid(void) { return syscall(__NR_gettid); }
++static long sys_gettid(void) { return syscall(__NR_gettid); }
+
+ void gpr_log(const char* file, int line, gpr_log_severity severity,
+              const char* format, ...) {
+@@ -70,7 +70,7 @@ void gpr_default_log(gpr_log_func_args* args) {
+   gpr_timespec now = gpr_now(GPR_CLOCK_REALTIME);
+   struct tm tm;
+   static __thread long tid = 0;
+-  if (tid == 0) tid = gettid();
++  if (tid == 0) tid = sys_gettid();
+
+   timer = static_cast<time_t>(now.tv_sec);
+   final_slash = strrchr(args->file, '/');
+diff --git a/third_party/grpc/src/core/lib/gpr/log_posix.cc b/src/core/lib/gpr/log_posix.cc
+index b6edc14ab6b..2f7c6ce3760 100644
+--- a/third_party/grpc/src/core/lib/gpr/log_posix.cc
++++ b/third_party/grpc/src/core/lib/gpr/log_posix.cc
+@@ -31,7 +31,7 @@
+ #include <string.h>
+ #include <time.h>
+
+-static intptr_t gettid(void) { return (intptr_t)pthread_self(); }
++static intptr_t sys_gettid(void) { return (intptr_t)pthread_self(); }
+
+ void gpr_log(const char* file, int line, gpr_log_severity severity,
+              const char* format, ...) {
+@@ -86,7 +86,7 @@ void gpr_default_log(gpr_log_func_args* args) {
+   char* prefix;
+   gpr_asprintf(&prefix, "%s%s.%09d %7" PRIdPTR " %s:%d]",
+                gpr_log_severity_string(args->severity), time_buffer,
+-               (int)(now.tv_nsec), gettid(), display_file, args->line);
++               (int)(now.tv_nsec), sys_gettid(), display_file, args->line);
+
+   fprintf(stderr, "%-70s %s\n", prefix, args->message);
+   gpr_free(prefix);
+diff --git a/third_party/grpc/src/core/lib/iomgr/ev_epollex_linux.cc b/src/core/lib/iomgr/ev_epollex_linux.cc
+index c2d80c08ddb..4a83cb6c215 100644
+--- a/third_party/grpc/src/core/lib/iomgr/ev_epollex_linux.cc
++++ b/third_party/grpc/src/core/lib/iomgr/ev_epollex_linux.cc
+@@ -1077,7 +1077,7 @@ static void end_worker(grpc_pollset* pollset, grpc_pollset_worker* worker,
+ }
+
+ #ifndef NDEBUG
+-static long gettid(void) { return syscall(__NR_gettid); }
++static long sys_gettid(void) { return syscall(__NR_gettid); }
+ #endif
+
+ /* pollset->mu lock must be held by the caller before calling this.
+@@ -1097,7 +1097,7 @@ static grpc_error* pollset_work(grpc_pollset* pollset,
+ #define WORKER_PTR (&worker)
+ #endif
+ #ifndef NDEBUG
+-  WORKER_PTR->originator = gettid();
++  WORKER_PTR->originator = sys_gettid();
+ #endif
+   if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
+     gpr_log(GPR_INFO,
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_1/src-deps.json b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_1/src-deps.json
new file mode 100644
index 000000000000..7cf939daa72b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_1/src-deps.json
@@ -0,0 +1,506 @@
+{
+    "0.16.2.zip": {
+        "name": "0.16.2.zip",
+        "sha256": "9b72bb0aea72d7cbcfc82a01b1e25bf3d85f791e790ddec16c65e2d906382ee0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/archive/0.16.2.zip",
+            "https://github.com/bazelbuild/rules_nodejs/archive/0.16.2.zip"
+        ]
+    },
+    "0.28.3.tar.gz": {
+        "name": "0.28.3.tar.gz",
+        "sha256": "d8c2f20deb2f6143bac792d210db1a4872102d81529fe0ea3476c1696addd7ff",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/0.28.3.tar.gz",
+            "https://github.com/bazelbuild/bazel-toolchains/archive/0.28.3.tar.gz"
+        ]
+    },
+    "0d5f3f2768c6ca2faca0079a997a97ce22997a0c.zip": {
+        "name": "0d5f3f2768c6ca2faca0079a997a97ce22997a0c.zip",
+        "sha256": "36fa66d4d49debd71d05fba55c1353b522e8caef4a20f8080a3d17cdda001d89",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_cc/archive/0d5f3f2768c6ca2faca0079a997a97ce22997a0c.zip",
+            "https://github.com/bazelbuild/rules_cc/archive/0d5f3f2768c6ca2faca0079a997a97ce22997a0c.zip"
+        ]
+    },
+    "441afe1bfdadd6236988e9cac159df6b5a9f5a98.zip": {
+        "name": "441afe1bfdadd6236988e9cac159df6b5a9f5a98.zip",
+        "sha256": "a07fe5e75964361885db725039c2ba673f0ee0313d971ae4f50c9b18cd28b0b5",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/archive/441afe1bfdadd6236988e9cac159df6b5a9f5a98.zip",
+            "https://github.com/bazelbuild/platforms/archive/441afe1bfdadd6236988e9cac159df6b5a9f5a98.zip"
+        ]
+    },
+    "7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip": {
+        "name": "7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+        "sha256": "bc81f1ba47ef5cc68ad32225c3d0e70b8c6f6077663835438da8d5733f917598",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+            "https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip"
+        ]
+    },
+    "8ccf4f1c351928b55d5dddf3672e3667f6978d60.tar.gz": {
+        "name": "8ccf4f1c351928b55d5dddf3672e3667f6978d60.tar.gz",
+        "sha256": "d868ce50d592ef4aad7dec4dd32ae68d2151261913450fac8390b3fd474bb898",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/8ccf4f1c351928b55d5dddf3672e3667f6978d60.tar.gz",
+            "https://github.com/bazelbuild/rules_sass/archive/8ccf4f1c351928b55d5dddf3672e3667f6978d60.tar.gz"
+        ]
+    },
+    "97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz": {
+        "name": "97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz",
+        "sha256": "602e7161d9195e50246177e7c55b2f39950a9cf7366f74ed5f22fd45750cd208",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz"
+        ]
+    },
+    "android_tools_pkg-0.12.tar.gz": {
+        "name": "android_tools_pkg-0.12.tar.gz",
+        "sha256": "96c4eef4d195dd95e43a4259cf5b82a1e34f67333439e91955bbdc0e1c8e7a31",
+        "urls": [
+            "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.12.tar.gz"
+        ]
+    },
+    "bazel_j2objc": {
+        "name": "bazel_j2objc",
+        "sha256": "8d3403b5b7db57e347c943d214577f6879e5b175c2b59b7e075c0b6453330e9b",
+        "strip_prefix": "j2objc-2.5",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/j2objc/releases/download/2.5/j2objc-2.5.zip",
+            "https://github.com/google/j2objc/releases/download/2.5/j2objc-2.5.zip"
+        ]
+    },
+    "bazel_skylib": {
+        "name": "bazel_skylib",
+        "sha256": "ba5d15ca230efca96320085d8e4d58da826d1f81b444ef8afccd8b23e0799b52",
+        "strip_prefix": "bazel-skylib-f83cb8dd6f5658bc574ccd873e25197055265d1c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/archive/f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/archive/f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz"
+        ]
+    },
+    "bazel_toolchains": {
+        "name": "bazel_toolchains",
+        "sha256": "d8c2f20deb2f6143bac792d210db1a4872102d81529fe0ea3476c1696addd7ff",
+        "strip_prefix": "bazel-toolchains-0.28.3",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/0.28.3.tar.gz",
+            "https://github.com/bazelbuild/bazel-toolchains/archive/0.28.3.tar.gz"
+        ]
+    },
+    "build_bazel_rules_nodejs": {
+        "name": "build_bazel_rules_nodejs",
+        "sha256": "9b72bb0aea72d7cbcfc82a01b1e25bf3d85f791e790ddec16c65e2d906382ee0",
+        "strip_prefix": "rules_nodejs-0.16.2",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/archive/0.16.2.zip",
+            "https://github.com/bazelbuild/rules_nodejs/archive/0.16.2.zip"
+        ]
+    },
+    "c7bbde2950769aac9a99364b0926230060a3ce04.tar.gz": {
+        "name": "c7bbde2950769aac9a99364b0926230060a3ce04.tar.gz",
+        "sha256": "e6a76586b264f30679688f65f7e71ac112d1446681010a13bf22d9ca071f34b7",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/skydoc/archive/c7bbde2950769aac9a99364b0926230060a3ce04.tar.gz",
+            "https://github.com/bazelbuild/skydoc/archive/c7bbde2950769aac9a99364b0926230060a3ce04.tar.gz"
+        ]
+    },
+    "com_google_googletest": {
+        "name": "com_google_googletest",
+        "sha256": "9dc9157a9a1551ec7a7e43daea9a694a0bb5fb8bec81235d8a1e6ef64c716dcb",
+        "strip_prefix": "googletest-release-1.10.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/googletest/archive/release-1.10.0.tar.gz",
+            "https://github.com/google/googletest/archive/release-1.10.0.tar.gz"
+        ]
+    },
+    "coverage_output_generator-v2.0.zip": {
+        "name": "coverage_output_generator-v2.0.zip",
+        "sha256": "3a6951051272d51613ac4c77af6ce238a3db321bf06506fde1b8866eb18a89dd",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.0.zip"
+        ]
+    },
+    "desugar_jdk_libs": {
+        "name": "desugar_jdk_libs",
+        "sha256": "fe2e04f91ce8c59d49d91b8102edc6627c6fa2906c1b0e7346f01419ec4f419d",
+        "strip_prefix": "desugar_jdk_libs-e0b0291b2c51fbe5a7cfa14473a1ae850f94f021",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip"
+        ]
+    },
+    "e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip": {
+        "name": "e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+        "sha256": "fe2e04f91ce8c59d49d91b8102edc6627c6fa2906c1b0e7346f01419ec4f419d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip"
+        ]
+    },
+    "f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz": {
+        "name": "f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz",
+        "sha256": "ba5d15ca230efca96320085d8e4d58da826d1f81b444ef8afccd8b23e0799b52",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/archive/f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/archive/f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz"
+        ]
+    },
+    "io_bazel_rules_sass": {
+        "name": "io_bazel_rules_sass",
+        "sha256": "d868ce50d592ef4aad7dec4dd32ae68d2151261913450fac8390b3fd474bb898",
+        "strip_prefix": "rules_sass-8ccf4f1c351928b55d5dddf3672e3667f6978d60",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/8ccf4f1c351928b55d5dddf3672e3667f6978d60.tar.gz",
+            "https://github.com/bazelbuild/rules_sass/archive/8ccf4f1c351928b55d5dddf3672e3667f6978d60.tar.gz"
+        ]
+    },
+    "io_bazel_skydoc": {
+        "name": "io_bazel_skydoc",
+        "sha256": "e6a76586b264f30679688f65f7e71ac112d1446681010a13bf22d9ca071f34b7",
+        "strip_prefix": "skydoc-c7bbde2950769aac9a99364b0926230060a3ce04",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/skydoc/archive/c7bbde2950769aac9a99364b0926230060a3ce04.tar.gz",
+            "https://github.com/bazelbuild/skydoc/archive/c7bbde2950769aac9a99364b0926230060a3ce04.tar.gz"
+        ]
+    },
+    "java_tools_javac11_darwin-v6.1.zip": {
+        "name": "java_tools_javac11_darwin-v6.1.zip",
+        "sha256": "f0c488dac18f18ab1a0d18bbd65288c7a128e90a24d9c16f65bd8243f79483a0",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v6.1/java_tools_javac11_darwin-v6.1.zip"
+        ]
+    },
+    "java_tools_javac11_linux-v6.1.zip": {
+        "name": "java_tools_javac11_linux-v6.1.zip",
+        "sha256": "12f7940ed0bc4c2e82238951cdf19b4179c7dcc361d16fe40fe4266538fb4ac6",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v6.1/java_tools_javac11_linux-v6.1.zip"
+        ]
+    },
+    "java_tools_javac11_windows-v6.1.zip": {
+        "name": "java_tools_javac11_windows-v6.1.zip",
+        "sha256": "e2deb2efff684de78787e0bdc7620f9672d13f04a12856d8e7f677369a8e286b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v6.1/java_tools_javac11_windows-v6.1.zip"
+        ]
+    },
+    "java_tools_langtools_javac10": {
+        "name": "java_tools_langtools_javac10",
+        "sha256": "0e9c9ac5ef17869de3cb8c3497c4c0d31836ef7b63efe1690506f53783adb212",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/jdk_langtools/langtools_jdk10_v2.zip"
+        ]
+    },
+    "java_tools_langtools_javac11": {
+        "name": "java_tools_langtools_javac11",
+        "sha256": "cf0814fa002ef3d794582bb086516d8c9ed0958f83f19799cdb08949019fe4c7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/jdk_langtools/langtools_jdk11_v2.zip"
+        ]
+    },
+    "java_tools_langtools_javac12": {
+        "name": "java_tools_langtools_javac12",
+        "sha256": "99b107105165a91df82cd7cf82a8efb930d803fb7de1663cf7f780142104cd14",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/jdk_langtools/langtools_jdk12.zip"
+        ]
+    },
+    "java_tools_langtools_javac9": {
+        "name": "java_tools_langtools_javac9",
+        "sha256": "d94befcfb325a9a62aebc2052e631fde2322b4df5c82a19ed260b38ba12a0ad1",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/jdk_langtools/langtools_jdk9_v2.zip"
+        ]
+    },
+    "jdk10-server-release-1804.tar.xz": {
+        "name": "jdk10-server-release-1804.tar.xz",
+        "sha256": "b7098b7aaf6ee1ffd4a2d0371a0be26c5a5c87f6aebbe46fe9a92c90583a84be",
+        "urls": [
+            "https://mirror.bazel.build/openjdk.linaro.org/releases/jdk10-server-release-1804.tar.xz"
+        ]
+    },
+    "jdk9-server-release-1708.tar.xz": {
+        "name": "jdk9-server-release-1708.tar.xz",
+        "sha256": "72e7843902b0395e2d30e1e9ad2a5f05f36a4bc62529828bcbc698d54aec6022",
+        "urls": [
+            "https://mirror.bazel.build/openjdk.linaro.org/releases/jdk9-server-release-1708.tar.xz"
+        ]
+    },
+    "openjdk10_linux_archive": {
+        "build_file_content": "java_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])",
+        "name": "openjdk10_linux_archive",
+        "sha256": "b3c2d762091a615b0c1424ebbd05d75cc114da3bf4f25a0dec5c51ea7e84146f",
+        "strip_prefix": "zulu10.2+3-jdk10.0.1-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu10.2+3-jdk10.0.1/zulu10.2+3-jdk10.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk11_linux_archive": {
+        "build_file_content": "java_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])",
+        "name": "openjdk11_linux_archive",
+        "sha256": "ddb0fd4526089cf1ce2db36282c282263f587a9e8be373fa02f511a12923cc48",
+        "strip_prefix": "zulu11.31.11-ca-jdk11.0.3-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.31.11-ca-jdk11.0.3/zulu11.31.11-ca-jdk11.0.3-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk12_linux_archive": {
+        "build_file_content": "java_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])",
+        "name": "openjdk12_linux_archive",
+        "sha256": "529c99841d69e11a85aea967ccfb9d0fd40b98c5b68dbe1d059002655e0a9c13",
+        "strip_prefix": "zulu12.2.3-ca-jdk12.0.1-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu12.2.3-ca-jdk12.0.1/zulu12.2.3-ca-jdk12.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk9_linux_archive": {
+        "build_file_content": "java_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])",
+        "name": "openjdk9_linux_archive",
+        "sha256": "45f2dfbee93b91b1468cf81d843fc6d9a47fef1f831c0b7ceff4f1eb6e6851c8",
+        "strip_prefix": "zulu9.0.7.1-jdk9.0.7-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu-9.0.7.1-jdk9.0.7/zulu9.0.7.1-jdk9.0.7-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk_linux": {
+        "downloaded_file_path": "zulu-linux.tar.gz",
+        "name": "openjdk_linux",
+        "sha256": "460d8a4f0c0204160b48086e341b22943c9cca471b195340e75b38ae9eb33c1c",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-linux_x64-allmodules-90755145cb6e6418584d8603cd5fa9afbb30aecc-1549209950.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64": {
+        "downloaded_file_path": "zulu-linux-aarch64.tar.gz",
+        "name": "openjdk_linux_aarch64",
+        "sha256": "23c37c0c3a8fdcbc68e96e70ff5c5c020c14db76deaae9b547849afda4586e5e",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.31.15-ca-jdk11.0.3/zulu11.31.15-ca-jdk11.0.3-linux_aarch64-allmodules-c82eb4878c7dc829455caeb915affe36c89df06f-1561630858.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_minimal": {
+        "downloaded_file_path": "zulu-linux-aarch64-minimal.tar.gz",
+        "name": "openjdk_linux_aarch64_minimal",
+        "sha256": "7af2583fe5ef0a781d4a9dca0c0160d42e7db1305ec1b66f98aa44c91cc875df",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.31.15-ca-jdk11.0.3/zulu11.31.15-ca-jdk11.0.3-linux_aarch64-minimal-c82eb4878c7dc829455caeb915affe36c89df06f-1561630858.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_vanilla": {
+        "downloaded_file_path": "zulu-linux-aarch64-vanilla.tar.gz",
+        "name": "openjdk_linux_aarch64_vanilla",
+        "sha256": "3b0d91611b1bdc4d409afcf9eab4f0e7f4ae09f88fc01bd9f2b48954882ae69b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.31.15-ca-jdk11.0.3/zulu11.31.15-ca-jdk11.0.3-linux_aarch64.tar.gz"
+        ]
+    },
+    "openjdk_linux_minimal": {
+        "downloaded_file_path": "zulu-linux-minimal.tar.gz",
+        "name": "openjdk_linux_minimal",
+        "sha256": "5123bc8dd21886761d1fd9ca0fb1898b3372d7243064a070ec81ca9c9d1a6791",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-linux_x64-minimal-524ae2ca2a782c9f15e00f08bd35b3f8ceacbd7f-1556011926.tar.gz"
+        ]
+    },
+    "openjdk_linux_vanilla": {
+        "downloaded_file_path": "zulu-linux-vanilla.tar.gz",
+        "name": "openjdk_linux_vanilla",
+        "sha256": "f3f44b6235508e87b760bf37a49e186cc1fa4e9cd28384c4dbf5a33991921e08",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk_macos": {
+        "downloaded_file_path": "zulu-macos.tar.gz",
+        "name": "openjdk_macos",
+        "sha256": "8fa61d85ca6f657d646fdb50cfc8634987f8f7d8a3250ed39fb7364647633252",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-macosx_x64-allmodules-90755145cb6e6418584d8603cd5fa9afbb30aecc-1549209951.tar.gz"
+        ]
+    },
+    "openjdk_macos_minimal": {
+        "downloaded_file_path": "zulu-macos-minimal.tar.gz",
+        "name": "openjdk_macos_minimal",
+        "sha256": "ac56e44db46fd56ac78b39b6823daed4faa74a2677ac340c7d217f863884ec0f",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-macosx_x64-minimal-524ae2ca2a782c9f15e00f08bd35b3f8ceacbd7f-1556003114.tar.gz"
+        ]
+    },
+    "openjdk_macos_vanilla": {
+        "downloaded_file_path": "zulu-macos-vanilla.tar.gz",
+        "name": "openjdk_macos_vanilla",
+        "sha256": "059f8e3484bf07b63a8f2820d5f528f473eff1befdb1896ee4f8ff06be3b8d8f",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-macosx_x64.zip"
+        ]
+    },
+    "openjdk_win": {
+        "downloaded_file_path": "zulu-win.zip",
+        "name": "openjdk_win",
+        "sha256": "e6ddb361309f8e84eb5fb5ad8b0f5cc031ba3679910139262c31efd8f7579d05",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-win_x64-allmodules-90755145cb6e6418584d8603cd5fa9afbb30aecc-1549209972.zip"
+        ]
+    },
+    "openjdk_win_minimal": {
+        "downloaded_file_path": "zulu-win-minimal.zip",
+        "name": "openjdk_win_minimal",
+        "sha256": "8e5dada6e9ebcc9ce29b4d051449bb95d3ee1e620e166da862224bbf15211f8b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-win_x64-minimal-524ae2ca2a782c9f15e00f08bd35b3f8ceacbd7f-1556003136.zip"
+        ]
+    },
+    "openjdk_win_vanilla": {
+        "downloaded_file_path": "zulu-win-vanilla.zip",
+        "name": "openjdk_win_vanilla",
+        "sha256": "e1f5b4ce1b9148140fae2fcfb8a96d1c9b7eac5b8df0e13fbcad9b8561284880",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-win_x64.zip"
+        ]
+    },
+    "platforms": {
+        "name": "platforms",
+        "sha256": "a07fe5e75964361885db725039c2ba673f0ee0313d971ae4f50c9b18cd28b0b5",
+        "strip_prefix": "platforms-441afe1bfdadd6236988e9cac159df6b5a9f5a98",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/archive/441afe1bfdadd6236988e9cac159df6b5a9f5a98.zip",
+            "https://github.com/bazelbuild/platforms/archive/441afe1bfdadd6236988e9cac159df6b5a9f5a98.zip"
+        ]
+    },
+    "rules_cc": {
+        "name": "rules_cc",
+        "sha256": "36fa66d4d49debd71d05fba55c1353b522e8caef4a20f8080a3d17cdda001d89",
+        "strip_prefix": "rules_cc-0d5f3f2768c6ca2faca0079a997a97ce22997a0c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_cc/archive/0d5f3f2768c6ca2faca0079a997a97ce22997a0c.zip",
+            "https://github.com/bazelbuild/rules_cc/archive/0d5f3f2768c6ca2faca0079a997a97ce22997a0c.zip"
+        ]
+    },
+    "rules_java": {
+        "name": "rules_java",
+        "sha256": "bc81f1ba47ef5cc68ad32225c3d0e70b8c6f6077663835438da8d5733f917598",
+        "strip_prefix": "rules_java-7cf3cefd652008d0a64a419c34c13bdca6c8f178",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+            "https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip"
+        ]
+    },
+    "rules_pkg": {
+        "name": "rules_pkg",
+        "sha256": "5bdc04987af79bd27bc5b00fe30f59a858f77ffa0bd2d8143d5b31ad8b1bd71c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/rules_pkg-0.2.0.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.2.0/rules_pkg-0.2.0.tar.gz"
+        ]
+    },
+    "rules_pkg-0.2.0.tar.gz": {
+        "name": "rules_pkg-0.2.0.tar.gz",
+        "sha256": "5bdc04987af79bd27bc5b00fe30f59a858f77ffa0bd2d8143d5b31ad8b1bd71c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/rules_pkg-0.2.0.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.2.0/rules_pkg-0.2.0.tar.gz"
+        ]
+    },
+    "rules_proto": {
+        "name": "rules_proto",
+        "sha256": "602e7161d9195e50246177e7c55b2f39950a9cf7366f74ed5f22fd45750cd208",
+        "strip_prefix": "rules_proto-97d8af4dc474595af3900dd85cb3a29ad28cc313",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz"
+        ]
+    },
+    "zulu10.2+3-jdk10.0.1-linux_x64-allmodules.tar.gz": {
+        "name": "zulu10.2+3-jdk10.0.1-linux_x64-allmodules.tar.gz",
+        "sha256": "57fad3602e74c79587901d6966d3b54ef32cb811829a2552163185d5064fe9b5",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu10.2+3-jdk10.0.1/zulu10.2+3-jdk10.0.1-linux_x64-allmodules.tar.gz"
+        ]
+    },
+    "zulu10.2+3-jdk10.0.1-macosx_x64-allmodules.tar.gz": {
+        "name": "zulu10.2+3-jdk10.0.1-macosx_x64-allmodules.tar.gz",
+        "sha256": "e669c9a897413d855b550b4e39d79614392e6fb96f494e8ef99a34297d9d85d3",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu10.2+3-jdk10.0.1/zulu10.2+3-jdk10.0.1-macosx_x64-allmodules.tar.gz"
+        ]
+    },
+    "zulu10.2+3-jdk10.0.1-win_x64-allmodules.zip": {
+        "name": "zulu10.2+3-jdk10.0.1-win_x64-allmodules.zip",
+        "sha256": "c39e7700a8d41794d60985df5a20352435196e78ecbc6a2b30df7be8637bffd5",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu10.2+3-jdk10.0.1/zulu10.2+3-jdk10.0.1-win_x64-allmodules.zip"
+        ]
+    },
+    "zulu11.2.3-jdk11.0.1-linux_x64.tar.gz": {
+        "name": "zulu11.2.3-jdk11.0.1-linux_x64.tar.gz",
+        "sha256": "232b1c3511f0d26e92582b7c3cc363be7ac633e371854ca2f2e9f2b50eb72a75",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.2.3-jdk11.0.1/zulu11.2.3-jdk11.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "zulu11.2.3-jdk11.0.1-macosx_x64.tar.gz": {
+        "name": "zulu11.2.3-jdk11.0.1-macosx_x64.tar.gz",
+        "sha256": "1edf366ee821e5db8e348152fcb337b28dfd6bf0f97943c270dcc6747cedb6cb",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.2.3-jdk11.0.1/zulu11.2.3-jdk11.0.1-macosx_x64.tar.gz"
+        ]
+    },
+    "zulu11.2.3-jdk11.0.1-win_x64.zip": {
+        "name": "zulu11.2.3-jdk11.0.1-win_x64.zip",
+        "sha256": "8e1e2b8347de6746f3fd1538840dd643201533ab113abc4ed93678e342d28aa3",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.2.3-jdk11.0.1/zulu11.2.3-jdk11.0.1-win_x64.zip"
+        ]
+    },
+    "zulu11.29.3-ca-jdk11.0.2-linux_x64.tar.gz": {
+        "name": "zulu11.29.3-ca-jdk11.0.2-linux_x64.tar.gz",
+        "sha256": "f3f44b6235508e87b760bf37a49e186cc1fa4e9cd28384c4dbf5a33991921e08",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-linux_x64.tar.gz"
+        ]
+    },
+    "zulu11.29.3-ca-jdk11.0.2-macosx_x64.zip": {
+        "name": "zulu11.29.3-ca-jdk11.0.2-macosx_x64.zip",
+        "sha256": "059f8e3484bf07b63a8f2820d5f528f473eff1befdb1896ee4f8ff06be3b8d8f",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-macosx_x64.zip"
+        ]
+    },
+    "zulu11.29.3-ca-jdk11.0.2-win_x64.zip": {
+        "name": "zulu11.29.3-ca-jdk11.0.2-win_x64.zip",
+        "sha256": "e1f5b4ce1b9148140fae2fcfb8a96d1c9b7eac5b8df0e13fbcad9b8561284880",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.29.3-ca-jdk11.0.2/zulu11.29.3-ca-jdk11.0.2-win_x64.zip"
+        ]
+    },
+    "zulu11.31.15-ca-jdk11.0.3-linux_aarch64.tar.gz": {
+        "name": "zulu11.31.15-ca-jdk11.0.3-linux_aarch64.tar.gz",
+        "sha256": "3b0d91611b1bdc4d409afcf9eab4f0e7f4ae09f88fc01bd9f2b48954882ae69b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.31.15-ca-jdk11.0.3/zulu11.31.15-ca-jdk11.0.3-linux_aarch64.tar.gz"
+        ]
+    },
+    "zulu9.0.7.1-jdk9.0.7-linux_x64-allmodules.tar.gz": {
+        "name": "zulu9.0.7.1-jdk9.0.7-linux_x64-allmodules.tar.gz",
+        "sha256": "f27cb933de4f9e7fe9a703486cf44c84bc8e9f138be0c270c9e5716a32367e87",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu-9.0.7.1-jdk9.0.7/zulu9.0.7.1-jdk9.0.7-linux_x64-allmodules.tar.gz"
+        ]
+    },
+    "zulu9.0.7.1-jdk9.0.7-macosx_x64-allmodules.tar.gz": {
+        "name": "zulu9.0.7.1-jdk9.0.7-macosx_x64-allmodules.tar.gz",
+        "sha256": "404e7058ff91f956612f47705efbee8e175a38b505fb1b52d8c1ea98718683de",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu-9.0.7.1-jdk9.0.7/zulu9.0.7.1-jdk9.0.7-macosx_x64-allmodules.tar.gz"
+        ]
+    },
+    "zulu9.0.7.1-jdk9.0.7-win_x64-allmodules.zip": {
+        "name": "zulu9.0.7.1-jdk9.0.7-win_x64-allmodules.zip",
+        "sha256": "e738829017f107e7a7cd5069db979398ec3c3f03ef56122f89ba38e7374f63ed",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu-9.0.7.1-jdk9.0.7/zulu9.0.7.1-jdk9.0.7-win_x64-allmodules.zip"
+        ]
+    }
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_3/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_3/default.nix
new file mode 100644
index 000000000000..3c71c8cc0891
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_3/default.nix
@@ -0,0 +1,626 @@
+{ stdenv, callPackage, lib, fetchurl, fetchFromGitHub, installShellFiles
+, runCommand, runCommandCC, makeWrapper, recurseIntoAttrs
+# this package (through the fixpoint glass)
+, bazel_self
+, lr, xe, zip, unzip, bash, writeCBin, coreutils
+, which, gawk, gnused, gnutar, gnugrep, gzip, findutils
+# updater
+, python27, python3, writeScript
+# Apple dependencies
+, cctools, libcxx, CoreFoundation, CoreServices, Foundation
+# Allow to independently override the jdks used to build and run respectively
+, buildJdk, runJdk
+, buildJdkName
+, runtimeShell
+# Downstream packages for tests
+, bazel-watcher
+# Always assume all markers valid (this is needed because we remove markers; they are non-deterministic).
+# Also, don't clean up environment variables (so that NIX_ environment variables are passed to compilers).
+, enableNixHacks ? false
+, gcc-unwrapped
+, autoPatchelfHook
+, file
+, substituteAll
+, writeTextFile
+}:
+
+let
+  version = "3.7.2";
+
+  src = fetchurl {
+    url = "https://github.com/bazelbuild/bazel/releases/download/${version}/bazel-${version}-dist.zip";
+    sha256 = "1cfrbs23lg0jnl22ddylx3clcjw7bdpbix7r5lqibab346s5n9fy";
+  };
+
+  # Update with `eval $(nix-build -A bazel.updater)`,
+  # then add new dependencies from the dict in ./src-deps.json as required.
+  srcDeps = lib.attrsets.attrValues srcDepsSet;
+  srcDepsSet =
+    let
+      srcs = lib.importJSON ./src-deps.json;
+      toFetchurl = d: lib.attrsets.nameValuePair d.name (fetchurl {
+        urls = d.urls;
+        sha256 = d.sha256;
+        });
+        in builtins.listToAttrs (map toFetchurl [
+      srcs.desugar_jdk_libs
+      srcs.io_bazel_skydoc
+      srcs.bazel_skylib
+      srcs.io_bazel_rules_sass
+      srcs.platforms
+      # `bazel query` wants all of these to be available regardless of platform.
+      srcs."java_tools_javac11_darwin-v10.0.zip"
+      srcs."java_tools_javac11_linux-v10.0.zip"
+      srcs."java_tools_javac11_windows-v10.0.zip"
+      srcs."coverage_output_generator-v2.5.zip"
+      srcs.build_bazel_rules_nodejs
+      srcs."android_tools_pkg-0.19.0rc3.tar.gz"
+      srcs."bazel-toolchains-3.1.0.tar.gz"
+      srcs."com_github_grpc_grpc"
+      srcs.upb
+      srcs.rules_pkg
+      srcs.rules_cc
+      srcs.rules_java
+      srcs.rules_proto
+      srcs.com_google_protobuf
+      ]);
+
+  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 file zip ];
+
+  # Java toolchain used for the build and tests
+  javaToolchain = "@bazel_tools//tools/jdk:toolchain_${buildJdkName}";
+
+  platforms = lib.platforms.linux ++ lib.platforms.darwin;
+
+  # This repository is fetched by bazel at runtime
+  # however it contains prebuilt java binaries, with wrong interpreter
+  # and libraries path.
+  # We prefetch it, patch it, and override it in a global bazelrc.
+  system = if stdenv.hostPlatform.isDarwin then "darwin" else "linux";
+  arch = stdenv.hostPlatform.parsed.cpu.name;
+
+  remote_java_tools = stdenv.mkDerivation {
+    name = "remote_java_tools_${system}";
+
+    src = srcDepsSet."java_tools_javac11_${system}-v10.0.zip";
+
+    nativeBuildInputs = [ autoPatchelfHook unzip ];
+    buildInputs = [ gcc-unwrapped ];
+
+    sourceRoot = ".";
+
+    buildPhase = ''
+      mkdir $out;
+    '';
+
+    installPhase = ''
+      cp -Ra * $out/
+      touch $out/WORKSPACE
+    '';
+  };
+
+  bazelRC = writeTextFile {
+    name = "bazel-rc";
+    text = ''
+      startup --server_javabase=${runJdk}
+
+      # Can't use 'common'; https://github.com/bazelbuild/bazel/issues/3054
+      # Most commands inherit from 'build' anyway.
+      build --distdir=${distDir}
+      fetch --distdir=${distDir}
+      query --distdir=${distDir}
+
+      build --override_repository=${remote_java_tools.name}=${remote_java_tools}
+      fetch --override_repository=${remote_java_tools.name}=${remote_java_tools}
+      query --override_repository=${remote_java_tools.name}=${remote_java_tools}
+
+      # Provide a default java toolchain, this will be the same as ${runJdk}
+      build --host_javabase='@local_jdk//:jdk'
+
+      # load default location for the system wide configuration
+      try-import /etc/bazel.bazelrc
+    '';
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "bazel";
+  inherit version;
+
+  meta = with lib; {
+    homepage = "https://github.com/bazelbuild/bazel/";
+    description = "Build tool that builds code quickly and reliably";
+    license = licenses.asl20;
+    maintainers = lib.teams.bazel.members;
+    inherit platforms;
+  };
+
+  inherit src;
+  sourceRoot = ".";
+
+  patches = [
+    # On Darwin, the last argument to gcc is coming up as an empty string. i.e: ''
+    # This is breaking the build of any C target. This patch removes the last
+    # argument if it's found to be an empty string.
+    ../trim-last-argument-to-gcc-if-empty.patch
+
+    # On Darwin, using clang 6 to build fails because of a linker error (see #105573),
+    # but using clang 7 fails because libarclite_macosx.a cannot be found when linking
+    # the xcode_locator tool.
+    # This patch removes using the -fobjc-arc compiler option and makes the code
+    # compile without automatic reference counting. Caveat: this leaks memory, but
+    # we accept this fact because xcode_locator is only a short-lived process used during the build.
+    ./no-arc.patch
+
+    # --experimental_strict_action_env (which may one day become the default
+    # see bazelbuild/bazel#2574) hardcodes the default
+    # action environment to a non hermetic value (e.g. "/usr/local/bin").
+    # This is non hermetic on non-nixos systems. On NixOS, bazel cannot find the required binaries.
+    # So we are replacing this bazel paths by defaultShellPath,
+    # improving hermeticity and making it work in nixos.
+    (substituteAll {
+      src = ../strict_action_env.patch;
+      strictActionEnvPatch = defaultShellPath;
+    })
+
+    # bazel reads its system bazelrc in /etc
+    # override this path to a builtin one
+    (substituteAll {
+      src = ../bazel_rc.patch;
+      bazelSystemBazelRCPath = bazelRC;
+    })
+  ] ++ lib.optional enableNixHacks ../nix-hacks.patch;
+
+
+  # Additional tests that check bazel’s functionality. Execute
+  #
+  #     nix-build . -A bazel.tests
+  #
+  # in the nixpkgs checkout root to exercise them locally.
+  passthru.tests =
+    let
+      runLocal = name: attrs: script:
+      let
+        attrs' = removeAttrs attrs [ "buildInputs" ];
+        buildInputs = [ python3 ] ++ (attrs.buildInputs or []);
+      in
+      runCommandCC name ({
+        inherit buildInputs;
+        preferLocalBuild = true;
+        meta.platforms = platforms;
+      } // attrs') script;
+
+      # bazel wants to extract itself into $install_dir/install every time it runs,
+      # so let’s do that only once.
+      extracted = bazelPkg:
+        let install_dir =
+          # `install_base` field printed by `bazel info`, minus the hash.
+          # yes, this path is kinda magic. Sorry.
+          "$HOME/.cache/bazel/_bazel_nixbld";
+        in runLocal "bazel-extracted-homedir" { passthru.install_dir = install_dir; } ''
+            export HOME=$(mktemp -d)
+            touch WORKSPACE # yeah, everything sucks
+            install_base="$(${bazelPkg}/bin/bazel info | grep install_base)"
+            # assert it’s actually below install_dir
+            [[ "$install_base" =~ ${install_dir} ]] \
+              || (echo "oh no! $install_base but we are \
+            trying to copy ${install_dir} to $out instead!"; exit 1)
+            cp -R ${install_dir} $out
+          '';
+
+      bazelTest = { name, bazelScript, workspaceDir, bazelPkg, buildInputs ? [] }:
+        let
+          be = extracted bazelPkg;
+        in runLocal name { inherit buildInputs; } (
+          # skip extraction caching on Darwin, because nobody knows how Darwin works
+          (lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
+            # set up home with pre-unpacked bazel
+            export HOME=$(mktemp -d)
+            mkdir -p ${be.install_dir}
+            cp -R ${be}/install ${be.install_dir}
+
+            # https://stackoverflow.com/questions/47775668/bazel-how-to-skip-corrupt-installation-on-centos6
+            # Bazel checks whether the mtime of the install dir files
+            # is >9 years in the future, otherwise it extracts itself again.
+            # see PosixFileMTime::IsUntampered in src/main/cpp/util
+            # What the hell bazel.
+            ${lr}/bin/lr -0 -U ${be.install_dir} | ${xe}/bin/xe -N0 -0 touch --date="9 years 6 months" {}
+          '')
+          +
+          ''
+            # 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
+
+            ${bazelScript}
+
+            touch $out
+          '');
+
+      bazelWithNixHacks = bazel_self.override { enableNixHacks = true; };
+
+      bazel-examples = fetchFromGitHub {
+        owner = "bazelbuild";
+        repo = "examples";
+        rev = "5d8c8961a2516ebf875787df35e98cadd08d43dc";
+        sha256 = "03c1bwlq5bs3hg96v4g4pg2vqwhqq6w538h66rcpw02f83yy7fs8";
+      };
+
+    in (if !stdenv.hostPlatform.isDarwin then {
+      # `extracted` doesn’t work on darwin
+      shebang = callPackage ../shebang-test.nix { inherit runLocal extracted bazelTest distDir; };
+    } else {}) // {
+      bashTools = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; };
+      cpp = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; };
+      java = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; };
+      protobuf = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; };
+      pythonBinPath = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; };
+
+      bashToolsWithNixHacks = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+
+      cppWithNixHacks = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      javaWithNixHacks = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      protobufWithNixHacks = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+      pythonBinPathWithNixHacks = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+
+      # downstream packages using buildBazelPackage
+      # fixed-output hashes of the fetch phase need to be spot-checked manually
+      downstream = recurseIntoAttrs ({
+        inherit bazel-watcher;
+      }
+          # dm-sonnet is only packaged for linux
+      // (lib.optionalAttrs stdenv.isLinux {
+          # TODO(timokau) dm-sonnet is broken currently
+          # dm-sonnet-linux = python3.pkgs.dm-sonnet;
+      }));
+    };
+
+  # update the list of workspace dependencies
+  passthru.updater = writeScript "update-bazel-deps.sh" ''
+    #!${runtimeShell}
+    cat ${runCommand "bazel-deps.json" {} ''
+        ${unzip}/bin/unzip ${src} WORKSPACE
+        ${python3}/bin/python3 ${../update-srcDeps.py} ./WORKSPACE > $out
+    ''} > ${builtins.toString ./src-deps.json}
+  '';
+
+  # 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;
+
+  # 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 = ''
+      bazelLinkFlags () {
+        eval set -- "$NIX_LDFLAGS"
+        local flag
+        for flag in "$@"; do
+          printf ' -Wl,%s' "$flag"
+        done
+      }
+
+      # 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+=" -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 ${lib.getDev libcxx}/include/c++/v1"
+
+      # don't use system installed Xcode to run clang, use Nix clang instead
+      sed -i -E "s;/usr/bin/xcrun (--sdk macosx )?clang;${stdenv.cc}/bin/clang $NIX_CFLAGS_COMPILE $(bazelLinkFlags) -framework CoreFoundation;g" \
+        scripts/bootstrap/compile.sh \
+        src/tools/xcode/realpath/BUILD \
+        src/tools/xcode/stdredirect/BUILD \
+        tools/osx/BUILD
+
+      substituteInPlace scripts/bootstrap/compile.sh --replace ' -mmacosx-version-min=10.9' ""
+
+      # nixpkgs's libSystem cannot use pthread headers directly, must import GCD headers instead
+      sed -i -e "/#include <pthread\/spawn.h>/i #include <dispatch/dispatch.h>" src/main/cpp/blaze_util_darwin.cc
+
+      # 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 j2objc and objc wrapper's python shebang to plain python path.
+      # These scripts explicitly depend on Python 2.7, hence we use python27.
+      # See also `postFixup` where python27 is added to $out/nix-support
+      substituteInPlace tools/j2objc/j2objc_header_map.py --replace "$!/usr/bin/python2.7" "#!${python27}/bin/python"
+      substituteInPlace tools/j2objc/j2objc_wrapper.py --replace "$!/usr/bin/python2.7" "#!${python27}/bin/python"
+      substituteInPlace tools/objc/j2objc_dead_code_pruner.py --replace "$!/usr/bin/python2.7" "#!${python27}/bin/python"
+
+      # md5sum is part of coreutils
+      sed -i 's|/sbin/md5|md5sum|g' \
+        src/BUILD third_party/ijar/test/testenv.sh tools/objc/libtool.sh
+
+      # replace initial value of pythonShebang variable in BazelPythonSemantics.java
+      substituteInPlace src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java \
+        --replace '"#!/usr/bin/env " + pythonExecutableName' "\"#!${python3}/bin/python\""
+
+      # 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.
+        # We default to python3 where possible. See also `postFixup` where
+        # python3 is added to $out/nix-support
+        substituteInPlace "$path" \
+          --replace /bin/bash ${customBash}/bin/bash \
+          --replace "/usr/bin/env bash" ${customBash}/bin/bash \
+          --replace "/usr/bin/env python" ${python3}/bin/python \
+          --replace /usr/bin/env ${coreutils}/bin/env \
+          --replace /bin/true ${coreutils}/bin/true
+      done
+
+      # bazel test runner include references to /bin/bash
+      substituteInPlace tools/build_rules/test_rules.bzl \
+        --replace /bin/bash ${customBash}/bin/bash
+
+      for i in $(find tools/cpp/ -type f)
+      do
+        substituteInPlace $i \
+          --replace /bin/bash ${customBash}/bin/bash
+      done
+
+      # Fixup scripts that generate scripts. Not fixed up by patchShebangs below.
+      substituteInPlace scripts/bootstrap/compile.sh \
+          --replace /bin/bash ${customBash}/bin/bash
+
+      # add nix environment vars to .bazelrc
+      cat >> .bazelrc <<EOF
+      # Limit the resources Bazel is allowed to use during the build to 1/2 the
+      # available RAM and 3/4 the available CPU cores. This should help avoid
+      # overwhelming the build machine.
+      build --local_ram_resources=HOST_RAM*.5
+      build --local_cpu_resources=HOST_CPUS*.75
+
+      build --distdir=${distDir}
+      fetch --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="$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt="/g')"
+      build --host_linkopt="$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt="/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=\"$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_linkopt=\"$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt=\"/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
+
+      # 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
+    python3
+  ];
+
+  # when a command can’t be found in a bazel build, you might also
+  # need to add it to `defaultShellPath`.
+  nativeBuildInputs = [
+    installShellFiles
+    zip
+    python3
+    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
+
+    # need to change directory for bazel to find the workspace
+    cd ./bazel_src
+    # build execlog tooling
+    export HOME=$(mktemp -d)
+    ./output/bazel build  src/tools/execlog:parser_deploy.jar
+    cd -
+  '';
+
+  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-{version}-{os_arch}
+    # The binary _must_ exist with this naming if your project contains a .bazelversion
+    # file.
+    cp ./bazel_src/scripts/packages/bazel.sh $out/bin/bazel
+
+    mkdir $out/share
+    cp ./bazel_src/bazel-bin/src/tools/execlog/parser_deploy.jar $out/share/parser_deploy.jar
+    mv ./bazel_src/output/bazel $out/bin/bazel-${version}-${system}-${arch}
+    cat <<EOF > $out/bin/bazel-execlog
+    #!${runtimeShell} -e
+    ${runJdk}/bin/java -jar $out/share/parser_deploy.jar \$@
+    EOF
+    chmod +x $out/bin/bazel-execlog
+
+    # shell completion files
+    installShellCompletion --bash \
+      --name bazel.bash \
+      ./bazel_src/output/bazel-complete.bash
+    installShellCompletion --zsh \
+      --name _bazel \
+      ./bazel_src/scripts/zsh_completion/_bazel
+    installShellCompletion --fish \
+      --name bazel.fish \
+      ./bazel_src/scripts/fish/completions/bazel.fish
+  '';
+
+  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-{version}-{os_arch}
+    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
+    # Some of the scripts explicitly depend on Python 2.7. Otherwise, we
+    # default to using python3. Therefore, both python27 and python3 are
+    # runtime dependencies.
+    echo "${python27}" >> $out/nix-support/depends
+    echo "${python3}" >> $out/nix-support/depends
+    # The string literal specifying the path to the bazel-rc file is sometimes
+    # stored non-contiguously in the binary due to gcc optimisations, which leads
+    # Nix to miss the hash when scanning for dependencies
+    echo "${bazelRC}" >> $out/nix-support/depends
+  '' + lib.optionalString stdenv.isDarwin ''
+    echo "${cctools}" >> $out/nix-support/depends
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_3/no-arc.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_3/no-arc.patch
new file mode 100644
index 000000000000..012e613c2f19
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_3/no-arc.patch
@@ -0,0 +1,34 @@
+--- a/tools/osx/xcode_locator.m	2020-12-10 13:27:29.000000000 +0100
++++ b/tools/osx/xcode_locator.m	2021-02-01 09:09:32.159557051 +0100
+@@ -21,10 +21,6 @@
+ // 6,6.4,6.4.1 = 6.4.1
+ // 6.3,6.3.0 = 6.3
+ 
+-#if !defined(__has_feature) || !__has_feature(objc_arc)
+-#error "This file requires ARC support."
+-#endif
+-
+ #import <CoreServices/CoreServices.h>
+ #import <Foundation/Foundation.h>
+ 
+--- a/tools/osx/xcode_configure.bzl	1980-01-01 01:00:00.000000000 +0100
++++ b/tools/osx/xcode_configure.bzl	2021-02-01 09:36:57.773418444 +0100
+@@ -123,7 +123,6 @@
+         "macosx",
+         "clang",
+         "-mmacosx-version-min=10.9",
+-        "-fobjc-arc",
+         "-framework",
+         "CoreServices",
+         "-framework",
+--- a/tools/osx/BUILD	2021-02-01 11:01:02.191659553 +0100
++++ b/tools/osx/BUILD	2021-02-01 11:04:29.735071019 +0100
+@@ -27,7 +27,7 @@
+ ])
+ 
+ DARWIN_XCODE_LOCATOR_COMPILE_COMMAND = """
+-  /usr/bin/xcrun --sdk macosx clang -mmacosx-version-min=10.9 -fobjc-arc -framework CoreServices \
++  /usr/bin/xcrun --sdk macosx clang -mmacosx-version-min=10.9 -framework CoreServices \
+       -framework Foundation -o $@ $<
+ """
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_3/src-deps.json b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_3/src-deps.json
new file mode 100644
index 000000000000..96553d9d8859
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_3/src-deps.json
@@ -0,0 +1,861 @@
+{
+    "1.25.0.zip": {
+        "name": "1.25.0.zip",
+        "sha256": "c78be58f5e0a29a04686b628cf54faaee0094322ae0ac99da5a8a8afca59a647",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/1.25.0.zip",
+            "https://github.com/bazelbuild/rules_sass/archive/1.25.0.zip"
+        ]
+    },
+    "1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz": {
+        "name": "1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+        "sha256": "5a725b777976b77aa122b707d1b6f0f39b6020f66cd427bb111a585599c857b1",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+            "https://github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz"
+        ]
+    },
+    "2d4c9528e0f453b5950eeaeac11d8d09f5a504d4.tar.gz": {
+        "name": "2d4c9528e0f453b5950eeaeac11d8d09f5a504d4.tar.gz",
+        "sha256": "c00ceec469dbcf7929972e3c79f20c14033824538038a554952f5c31d8832f96",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/archive/2d4c9528e0f453b5950eeaeac11d8d09f5a504d4.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/archive/2d4c9528e0f453b5950eeaeac11d8d09f5a504d4.tar.gz"
+        ]
+    },
+    "46993efdd33b73649796c5fc5c9efb193ae19d51.zip": {
+        "name": "46993efdd33b73649796c5fc5c9efb193ae19d51.zip",
+        "sha256": "66184688debeeefcc2a16a2f80b03f514deac8346fe888fb7e691a52c023dd88",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/archive/46993efdd33b73649796c5fc5c9efb193ae19d51.zip",
+            "https://github.com/bazelbuild/platforms/archive/46993efdd33b73649796c5fc5c9efb193ae19d51.zip"
+        ]
+    },
+    "7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip": {
+        "name": "7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+        "sha256": "bc81f1ba47ef5cc68ad32225c3d0e70b8c6f6077663835438da8d5733f917598",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+            "https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip"
+        ]
+    },
+    "97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz": {
+        "name": "97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz",
+        "sha256": "602e7161d9195e50246177e7c55b2f39950a9cf7366f74ed5f22fd45750cd208",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz"
+        ]
+    },
+    "9effcbcb27f0a665f9f345030188c0b291e32482.tar.gz": {
+        "name": "9effcbcb27f0a665f9f345030188c0b291e32482.tar.gz",
+        "sha256": "61d0417abd60e65ed589c9deee7c124fe76a4106831f6ad39464e1525cef1454",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/upb/archive/9effcbcb27f0a665f9f345030188c0b291e32482.tar.gz",
+            "https://github.com/protocolbuffers/upb/archive/9effcbcb27f0a665f9f345030188c0b291e32482.tar.gz"
+        ]
+    },
+    "android_tools_for_testing": {
+        "name": "android_tools_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "ea5c0589a01e2a9f43c20e5c145d3530e3b3bdbe7322789bc5da38d0ca49b837",
+        "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.19.0rc3.tar.gz"
+    },
+    "android_tools_pkg-0.19.0rc3.tar.gz": {
+        "name": "android_tools_pkg-0.19.0rc3.tar.gz",
+        "sha256": "ea5c0589a01e2a9f43c20e5c145d3530e3b3bdbe7322789bc5da38d0ca49b837",
+        "urls": [
+            "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.19.0rc3.tar.gz"
+        ]
+    },
+    "b1c40e1de81913a3c40e5948f78719c28152486d.zip": {
+        "name": "b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+        "sha256": "d0c573b94a6ef20ef6ff20154a23d0efcb409fb0e1ff0979cec318dfe42f0cdd",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+            "https://github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip"
+        ]
+    },
+    "bazel-toolchains-3.1.0.tar.gz": {
+        "name": "bazel-toolchains-3.1.0.tar.gz",
+        "sha256": "726b5423e1c7a3866a3a6d68e7123b4a955e9fcbe912a51e0f737e6dab1d0af2",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/releases/download/3.1.0/bazel-toolchains-3.1.0.tar.gz",
+            "https://github.com/bazelbuild/bazel-toolchains/releases/download/3.1.0/bazel-toolchains-3.1.0.tar.gz"
+        ]
+    },
+    "bazel_j2objc": {
+        "name": "bazel_j2objc",
+        "sha256": "8d3403b5b7db57e347c943d214577f6879e5b175c2b59b7e075c0b6453330e9b",
+        "strip_prefix": "j2objc-2.5",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/j2objc/releases/download/2.5/j2objc-2.5.zip",
+            "https://github.com/google/j2objc/releases/download/2.5/j2objc-2.5.zip"
+        ]
+    },
+    "bazel_skylib": {
+        "name": "bazel_skylib",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "c00ceec469dbcf7929972e3c79f20c14033824538038a554952f5c31d8832f96",
+        "strip_prefix": "bazel-skylib-2d4c9528e0f453b5950eeaeac11d8d09f5a504d4",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/archive/2d4c9528e0f453b5950eeaeac11d8d09f5a504d4.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/archive/2d4c9528e0f453b5950eeaeac11d8d09f5a504d4.tar.gz"
+        ]
+    },
+    "bazel_toolchains": {
+        "name": "bazel_toolchains",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "726b5423e1c7a3866a3a6d68e7123b4a955e9fcbe912a51e0f737e6dab1d0af2",
+        "strip_prefix": "bazel-toolchains-3.1.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/releases/download/3.1.0/bazel-toolchains-3.1.0.tar.gz",
+            "https://github.com/bazelbuild/bazel-toolchains/releases/download/3.1.0/bazel-toolchains-3.1.0.tar.gz"
+        ]
+    },
+    "bazel_website": {
+        "build_file_content": "\nexports_files([\"_sass/style.scss\"])\n",
+        "name": "bazel_website",
+        "sha256": "a5f531dd1d62e6947dcfc279656ffc2fdf6f447c163914c5eabf7961b4cb6eb4",
+        "strip_prefix": "bazel-website-c174fa288aa079b68416d2ce2cc97268fa172f42",
+        "urls": [
+            "https://github.com/bazelbuild/bazel-website/archive/c174fa288aa079b68416d2ce2cc97268fa172f42.tar.gz"
+        ]
+    },
+    "build_bazel_rules_nodejs": {
+        "name": "build_bazel_rules_nodejs",
+        "sha256": "b6670f9f43faa66e3009488bbd909bc7bc46a5a9661a33f6bc578068d1837f37",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/1.3.0/rules_nodejs-1.3.0.tar.gz",
+            "https://github.com/bazelbuild/rules_nodejs/releases/download/1.3.0/rules_nodejs-1.3.0.tar.gz"
+        ]
+    },
+    "com_github_grpc_grpc": {
+        "name": "com_github_grpc_grpc",
+        "patch_args": [
+            "-p1"
+        ],
+        "patches": [
+            "//third_party/grpc:grpc_1.26.0.patch"
+        ],
+        "sha256": "2fcb7f1ab160d6fd3aaade64520be3e5446fc4c6fa7ba6581afdc4e26094bd81",
+        "strip_prefix": "grpc-1.26.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/grpc/grpc/archive/v1.26.0.tar.gz",
+            "https://github.com/grpc/grpc/archive/v1.26.0.tar.gz"
+        ]
+    },
+    "com_google_googletest": {
+        "name": "com_google_googletest",
+        "sha256": "9dc9157a9a1551ec7a7e43daea9a694a0bb5fb8bec81235d8a1e6ef64c716dcb",
+        "strip_prefix": "googletest-release-1.10.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/googletest/archive/release-1.10.0.tar.gz",
+            "https://github.com/google/googletest/archive/release-1.10.0.tar.gz"
+        ]
+    },
+    "com_google_protobuf": {
+        "name": "com_google_protobuf",
+        "patch_args": [
+            "-p1"
+        ],
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "patches": [
+            "//third_party/protobuf:3.13.0.patch"
+        ],
+        "sha256": "9b4ee22c250fe31b16f1a24d61467e40780a3fbb9b91c3b65be2a376ed913a1a",
+        "strip_prefix": "protobuf-3.13.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz",
+            "https://github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz"
+        ]
+    },
+    "coverage_output_generator-v2.5.zip": {
+        "name": "coverage_output_generator-v2.5.zip",
+        "sha256": "cd14f1cb4559e4723e63b7e7b06d09fcc3bd7ba58d03f354cdff1439bd936a7d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.5.zip"
+        ]
+    },
+    "desugar_jdk_libs": {
+        "name": "desugar_jdk_libs",
+        "sha256": "fe2e04f91ce8c59d49d91b8102edc6627c6fa2906c1b0e7346f01419ec4f419d",
+        "strip_prefix": "desugar_jdk_libs-e0b0291b2c51fbe5a7cfa14473a1ae850f94f021",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip"
+        ]
+    },
+    "e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip": {
+        "name": "e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+        "sha256": "fe2e04f91ce8c59d49d91b8102edc6627c6fa2906c1b0e7346f01419ec4f419d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip"
+        ]
+    },
+    "e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz": {
+        "name": "e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
+        "sha256": "e8c2751ddc70fed9dc6f999acd92e232d5846f009ee1674f8aee81f19b2b915a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
+            "https://github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz"
+        ]
+    },
+    "io_bazel_rules_sass": {
+        "name": "io_bazel_rules_sass",
+        "sha256": "c78be58f5e0a29a04686b628cf54faaee0094322ae0ac99da5a8a8afca59a647",
+        "strip_prefix": "rules_sass-1.25.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/1.25.0.zip",
+            "https://github.com/bazelbuild/rules_sass/archive/1.25.0.zip"
+        ]
+    },
+    "io_bazel_skydoc": {
+        "name": "io_bazel_skydoc",
+        "sha256": "5a725b777976b77aa122b707d1b6f0f39b6020f66cd427bb111a585599c857b1",
+        "strip_prefix": "stardoc-1ef781ced3b1443dca3ed05dec1989eca1a4e1cd",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+            "https://github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz"
+        ]
+    },
+    "java_tools_javac11_darwin-v10.0.zip": {
+        "name": "java_tools_javac11_darwin-v10.0.zip",
+        "sha256": "64e5de2175dfccb96831573946b80d106edf3801d9db38b564514bf3581d466b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_darwin-v10.0.zip"
+        ]
+    },
+    "java_tools_javac11_linux-v10.0.zip": {
+        "name": "java_tools_javac11_linux-v10.0.zip",
+        "sha256": "69e65353c2cd65780abcbcce4daae973599298273b0f8b4d469eed822cb220d1",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_linux-v10.0.zip"
+        ]
+    },
+    "java_tools_javac11_windows-v10.0.zip": {
+        "name": "java_tools_javac11_windows-v10.0.zip",
+        "sha256": "d2f62af8daa0a3d55789b605f6582e37038329c64843337c71e64515468e55c4",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_windows-v10.0.zip"
+        ]
+    },
+    "java_tools_langtools_javac11": {
+        "name": "java_tools_langtools_javac11",
+        "sha256": "cf0814fa002ef3d794582bb086516d8c9ed0958f83f19799cdb08949019fe4c7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/jdk_langtools/langtools_jdk11_v2.zip"
+        ]
+    },
+    "openjdk11_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_darwin_archive",
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk11_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_linux_archive",
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk11_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_windows_archive",
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "openjdk14_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk14_darwin_archive",
+        "sha256": "088bd4d0890acc9f032b738283bf0f26b2a55c50b02d1c8a12c451d8ddf080dd",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk14_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk14_linux_archive",
+        "sha256": "48bb8947034cd079ad1ef83335e7634db4b12a26743a0dc314b6b861480777aa",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk14_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk14_windows_archive",
+        "sha256": "9cb078b5026a900d61239c866161f0d9558ec759aa15c5b4c7e905370e868284",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-win_x64.zip"
+        ]
+    },
+    "openjdk_linux": {
+        "downloaded_file_path": "zulu-linux.tar.gz",
+        "name": "openjdk_linux",
+        "sha256": "65bfe4e0ffa74a680ee4410db46b17e30cd9397b664a92a886599fe1f3530969",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64-linux_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689070.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64": {
+        "downloaded_file_path": "zulu-linux-aarch64.tar.gz",
+        "name": "openjdk_linux_aarch64",
+        "sha256": "6b245793087300db3ee82ab0d165614f193a73a60f2f011e347756c1e6ca5bac",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581690750.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_minimal": {
+        "downloaded_file_path": "zulu-linux-aarch64-minimal.tar.gz",
+        "name": "openjdk_linux_aarch64_minimal",
+        "sha256": "06f6520a877704c77614bcfc4f846cc7cbcbf5eaad149bf7f19f4f16e285c9de",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581690750.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_vanilla": {
+        "downloaded_file_path": "zulu-linux-aarch64-vanilla.tar.gz",
+        "name": "openjdk_linux_aarch64_vanilla",
+        "sha256": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"
+        ]
+    },
+    "openjdk_linux_minimal": {
+        "downloaded_file_path": "zulu-linux-minimal.tar.gz",
+        "name": "openjdk_linux_minimal",
+        "sha256": "91f7d52f695c681d4e21499b4319d548aadef249a6b3053e306308992e1e29ae",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689068.tar.gz"
+        ]
+    },
+    "openjdk_linux_ppc64le_vanilla": {
+        "downloaded_file_path": "adoptopenjdk-ppc64le-vanilla.tar.gz",
+        "name": "openjdk_linux_ppc64le_vanilla",
+        "sha256": "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "openjdk_linux_s390x_vanilla": {
+        "downloaded_file_path": "adoptopenjdk-s390x-vanilla.tar.gz",
+        "name": "openjdk_linux_s390x_vanilla",
+        "sha256": "d9b72e87a1d3ebc0c9552f72ae5eb150fffc0298a7cb841f1ce7bfc70dcd1059",
+        "urls": [
+            "https://mirror.bazel.build/github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "openjdk_linux_vanilla": {
+        "downloaded_file_path": "zulu-linux-vanilla.tar.gz",
+        "name": "openjdk_linux_vanilla",
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk_macos": {
+        "downloaded_file_path": "zulu-macos.tar.gz",
+        "name": "openjdk_macos",
+        "sha256": "8e283cfd23c7555be8e17295ed76eb8f00324c88ab904b8de37bbe08f90e569b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689066.tar.gz"
+        ]
+    },
+    "openjdk_macos_minimal": {
+        "downloaded_file_path": "zulu-macos-minimal.tar.gz",
+        "name": "openjdk_macos_minimal",
+        "sha256": "1bacb1c07035d4066d79f0b65b4ea0ebd1954f3662bdfe3618da382ac8fd23a6",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689063.tar.gz"
+        ]
+    },
+    "openjdk_macos_vanilla": {
+        "downloaded_file_path": "zulu-macos-vanilla.tar.gz",
+        "name": "openjdk_macos_vanilla",
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk_win": {
+        "downloaded_file_path": "zulu-win.zip",
+        "name": "openjdk_win",
+        "sha256": "8e1604b3a27dcf639bc6d1a73103f1211848139e4cceb081d0a74a99e1e6f995",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689080.zip"
+        ]
+    },
+    "openjdk_win_minimal": {
+        "downloaded_file_path": "zulu-win-minimal.zip",
+        "name": "openjdk_win_minimal",
+        "sha256": "b90a713c9c2d9ea23cad44d2c2dfcc9af22faba9bde55dedc1c3bb9f556ac1ae",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689080.zip"
+        ]
+    },
+    "openjdk_win_vanilla": {
+        "downloaded_file_path": "zulu-win-vanilla.zip",
+        "name": "openjdk_win_vanilla",
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "platforms": {
+        "name": "platforms",
+        "sha256": "66184688debeeefcc2a16a2f80b03f514deac8346fe888fb7e691a52c023dd88",
+        "strip_prefix": "platforms-46993efdd33b73649796c5fc5c9efb193ae19d51",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/archive/46993efdd33b73649796c5fc5c9efb193ae19d51.zip",
+            "https://github.com/bazelbuild/platforms/archive/46993efdd33b73649796c5fc5c9efb193ae19d51.zip"
+        ]
+    },
+    "remote_coverage_tools_for_testing": {
+        "name": "remote_coverage_tools_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "cd14f1cb4559e4723e63b7e7b06d09fcc3bd7ba58d03f354cdff1439bd936a7d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.5.zip"
+        ]
+    },
+    "remote_java_tools_darwin_for_testing": {
+        "name": "remote_java_tools_darwin_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "64e5de2175dfccb96831573946b80d106edf3801d9db38b564514bf3581d466b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_darwin-v10.0.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.0/java_tools_javac11_darwin-v10.0.zip"
+        ]
+    },
+    "remote_java_tools_javac11_test_darwin": {
+        "name": "remote_java_tools_javac11_test_darwin",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "64e5de2175dfccb96831573946b80d106edf3801d9db38b564514bf3581d466b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_darwin-v10.0.zip"
+        ]
+    },
+    "remote_java_tools_javac11_test_linux": {
+        "name": "remote_java_tools_javac11_test_linux",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "69e65353c2cd65780abcbcce4daae973599298273b0f8b4d469eed822cb220d1",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_linux-v10.0.zip"
+        ]
+    },
+    "remote_java_tools_javac11_test_windows": {
+        "name": "remote_java_tools_javac11_test_windows",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d2f62af8daa0a3d55789b605f6582e37038329c64843337c71e64515468e55c4",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_windows-v10.0.zip"
+        ]
+    },
+    "remote_java_tools_linux_for_testing": {
+        "name": "remote_java_tools_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "69e65353c2cd65780abcbcce4daae973599298273b0f8b4d469eed822cb220d1",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_linux-v10.0.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.0/java_tools_javac11_linux-v10.0.zip"
+        ]
+    },
+    "remote_java_tools_windows_for_testing": {
+        "name": "remote_java_tools_windows_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d2f62af8daa0a3d55789b605f6582e37038329c64843337c71e64515468e55c4",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_windows-v10.0.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.0/java_tools_javac11_windows-v10.0.zip"
+        ]
+    },
+    "remotejdk11_linux_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
+        "strip_prefix": "zulu11.37.48-ca-jdk11.0.6-linux_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_ppc64le_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_ppc64le_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_s390x_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_s390x_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d9b72e87a1d3ebc0c9552f72ae5eb150fffc0298a7cb841f1ce7bfc70dcd1059",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "remotejdk14_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk14_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "48bb8947034cd079ad1ef83335e7634db4b12a26743a0dc314b6b861480777aa",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk14_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk14_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "088bd4d0890acc9f032b738283bf0f26b2a55c50b02d1c8a12c451d8ddf080dd",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk14_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk14_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "9cb078b5026a900d61239c866161f0d9558ec759aa15c5b4c7e905370e868284",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-win_x64.zip"
+        ]
+    },
+    "rules_cc": {
+        "name": "rules_cc",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d0c573b94a6ef20ef6ff20154a23d0efcb409fb0e1ff0979cec318dfe42f0cdd",
+        "strip_prefix": "rules_cc-b1c40e1de81913a3c40e5948f78719c28152486d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+            "https://github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip"
+        ]
+    },
+    "rules_java": {
+        "name": "rules_java",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "bc81f1ba47ef5cc68ad32225c3d0e70b8c6f6077663835438da8d5733f917598",
+        "strip_prefix": "rules_java-7cf3cefd652008d0a64a419c34c13bdca6c8f178",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+            "https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip"
+        ]
+    },
+    "rules_nodejs-1.3.0.tar.gz": {
+        "name": "rules_nodejs-1.3.0.tar.gz",
+        "sha256": "b6670f9f43faa66e3009488bbd909bc7bc46a5a9661a33f6bc578068d1837f37",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/1.3.0/rules_nodejs-1.3.0.tar.gz",
+            "https://github.com/bazelbuild/rules_nodejs/releases/download/1.3.0/rules_nodejs-1.3.0.tar.gz"
+        ]
+    },
+    "rules_pkg": {
+        "name": "rules_pkg",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "4ba8f4ab0ff85f2484287ab06c0d871dcb31cc54d439457d28fd4ae14b18450a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.2.4/rules_pkg-0.2.4.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.2.4/rules_pkg-0.2.4.tar.gz"
+        ]
+    },
+    "rules_pkg-0.2.4.tar.gz": {
+        "name": "rules_pkg-0.2.4.tar.gz",
+        "sha256": "4ba8f4ab0ff85f2484287ab06c0d871dcb31cc54d439457d28fd4ae14b18450a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.2.4/rules_pkg-0.2.4.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.2.4/rules_pkg-0.2.4.tar.gz"
+        ]
+    },
+    "rules_proto": {
+        "name": "rules_proto",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "602e7161d9195e50246177e7c55b2f39950a9cf7366f74ed5f22fd45750cd208",
+        "strip_prefix": "rules_proto-97d8af4dc474595af3900dd85cb3a29ad28cc313",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz"
+        ]
+    },
+    "upb": {
+        "name": "upb",
+        "patch_args": [
+            "-p1"
+        ],
+        "patches": [
+            "//third_party/grpc:upb_gcc10_fix.patch"
+        ],
+        "sha256": "61d0417abd60e65ed589c9deee7c124fe76a4106831f6ad39464e1525cef1454",
+        "strip_prefix": "upb-9effcbcb27f0a665f9f345030188c0b291e32482",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/upb/archive/9effcbcb27f0a665f9f345030188c0b291e32482.tar.gz",
+            "https://github.com/protocolbuffers/upb/archive/9effcbcb27f0a665f9f345030188c0b291e32482.tar.gz"
+        ]
+    },
+    "v1.26.0.tar.gz": {
+        "name": "v1.26.0.tar.gz",
+        "sha256": "2fcb7f1ab160d6fd3aaade64520be3e5446fc4c6fa7ba6581afdc4e26094bd81",
+        "urls": [
+            "https://mirror.bazel.build/github.com/grpc/grpc/archive/v1.26.0.tar.gz",
+            "https://github.com/grpc/grpc/archive/v1.26.0.tar.gz"
+        ]
+    },
+    "v3.13.0.tar.gz": {
+        "name": "v3.13.0.tar.gz",
+        "sha256": "9b4ee22c250fe31b16f1a24d61467e40780a3fbb9b91c3b65be2a376ed913a1a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz",
+            "https://github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz"
+        ]
+    },
+    "zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz": {
+        "name": "zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz",
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz": {
+        "name": "zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz",
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "zulu11.37.17-ca-jdk11.0.6-win_x64.zip": {
+        "name": "zulu11.37.17-ca-jdk11.0.6-win_x64.zip",
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz": {
+        "name": "zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz",
+        "sha256": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"
+        ]
+    }
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/actions_path.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/actions_path.patch
new file mode 100644
index 000000000000..1fa1e5748333
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/actions_path.patch
@@ -0,0 +1,41 @@
+diff --git a/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java b/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
+index 6fff2af..7e2877e 100644
+--- a/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
++++ b/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
+@@ -47,6 +47,16 @@ public final class PosixLocalEnvProvider implements LocalEnvProvider {
+       Map<String, String> env, BinTools binTools, String fallbackTmpDir) {
+     ImmutableMap.Builder<String, String> result = ImmutableMap.builder();
+     result.putAll(Maps.filterKeys(env, k -> !k.equals("TMPDIR")));
++
++    // In case we are running on NixOS.
++    // If bash is called with an unset PATH on this platform,
++    // it will set it to /no-such-path and default tools will be missings.
++    // See, https://github.com/NixOS/nixpkgs/issues/94222
++    // So we ensure that minimal dependencies are present.
++    if (!env.containsKey("PATH")){
++        result.put("PATH", "@actionsPathPatch@");
++    }
++ 
+     String p = clientEnv.get("TMPDIR");
+     if (Strings.isNullOrEmpty(p)) {
+       // Do not use `fallbackTmpDir`, use `/tmp` instead. This way if the user didn't export TMPDIR
+index 95642767c6..39d3c62461 100644
+--- a/src/main/java/com/google/devtools/build/lib/exec/local/XcodeLocalEnvProvider.java
++++ b/src/main/java/com/google/devtools/build/lib/exec/local/XcodeLocalEnvProvider.java
+@@ -74,6 +74,16 @@ public final class XcodeLocalEnvProvider implements LocalEnvProvider {
+
+     ImmutableMap.Builder<String, String> newEnvBuilder = ImmutableMap.builder();
+     newEnvBuilder.putAll(Maps.filterKeys(env, k -> !k.equals("TMPDIR")));
++
++    // In case we are running on NixOS.
++    // If bash is called with an unset PATH on this platform,
++    // it will set it to /no-such-path and default tools will be missings.
++    // See, https://github.com/NixOS/nixpkgs/issues/94222
++    // So we ensure that minimal dependencies are present.
++    if (!env.containsKey("PATH")){
++      newEnvBuilder.put("PATH", "@actionsPathPatch@");
++    }
++
+     String p = clientEnv.get("TMPDIR");
+     if (Strings.isNullOrEmpty(p)) {
+       // Do not use `fallbackTmpDir`, use `/tmp` instead. This way if the user didn't export TMPDIR
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/default.nix
new file mode 100644
index 000000000000..72c971d1334d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/default.nix
@@ -0,0 +1,673 @@
+{ stdenv, callPackage, lib, fetchurl, fetchpatch, fetchFromGitHub, installShellFiles
+, runCommand, runCommandCC, makeWrapper, recurseIntoAttrs
+# this package (through the fixpoint glass)
+, bazel_self
+# needed only for the updater
+, bazel_3
+, lr, xe, zip, unzip, bash, writeCBin, coreutils
+, which, gawk, gnused, gnutar, gnugrep, gzip, findutils
+# updater
+, python27, python3, writeScript
+# Apple dependencies
+, cctools, libcxx, CoreFoundation, CoreServices, Foundation
+# Allow to independently override the jdks used to build and run respectively
+, buildJdk, runJdk
+, buildJdkName
+, runtimeShell
+# Downstream packages for tests
+, bazel-watcher
+# Always assume all markers valid (this is needed because we remove markers; they are non-deterministic).
+# Also, don't clean up environment variables (so that NIX_ environment variables are passed to compilers).
+, enableNixHacks ? false
+, gcc-unwrapped
+, autoPatchelfHook
+, file
+, substituteAll
+, writeTextFile
+}:
+
+let
+  version = "4.2.2";
+  sourceRoot = ".";
+
+  src = fetchurl {
+    url = "https://github.com/bazelbuild/bazel/releases/download/${version}/bazel-${version}-dist.zip";
+    sha256 = "mYHQ1To1bE6HlihHdQqXyegFTkYIVHSABsgPDX4rLTM=";
+  };
+
+  # Update with `eval $(nix-build -A bazel.updater)`,
+  # then add new dependencies from the dict in ./src-deps.json as required.
+  srcDeps = lib.attrsets.attrValues srcDepsSet;
+  srcDepsSet =
+    let
+      srcs = lib.importJSON ./src-deps.json;
+      toFetchurl = d: lib.attrsets.nameValuePair d.name (fetchurl {
+        urls = d.urls;
+        sha256 = d.sha256;
+        });
+        in builtins.listToAttrs (map toFetchurl [
+      srcs.desugar_jdk_libs
+      srcs.io_bazel_skydoc
+      srcs.bazel_skylib
+      srcs.io_bazel_rules_sass
+      srcs.platforms
+      (if stdenv.hostPlatform.isDarwin
+       then srcs."java_tools_javac11_darwin-v10.6.zip"
+       else srcs."java_tools_javac11_linux-v10.6.zip")
+      srcs."coverage_output_generator-v2.5.zip"
+      srcs.build_bazel_rules_nodejs
+      srcs."android_tools_pkg-0.23.0.tar.gz"
+      srcs.bazel_toolchains
+      srcs.com_github_grpc_grpc
+      srcs.upb
+      srcs.com_google_protobuf
+      srcs.rules_pkg
+      srcs.rules_cc
+      srcs.rules_java
+      srcs.rules_proto
+      srcs.com_google_absl
+      srcs.com_github_google_re2
+      srcs.com_github_cares_cares
+      ]);
+
+  distDir = runCommand "bazel-deps" {} ''
+    mkdir -p $out
+    for i in ${builtins.toString srcDeps}; do cp $i $out/$(stripHash $i); done
+  '';
+
+  defaultShellUtils =
+    # 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",
+    #        ],
+    #     )
+    #
+    # Some of the scripts explicitly depend on Python 2.7. Otherwise, we
+    # default to using python3. Therefore, both python27 and python3 are
+    # runtime dependencies.
+    [
+      bash
+      coreutils
+      file
+      findutils
+      gawk
+      gnugrep
+      gnused
+      gnutar
+      gzip
+      python27
+      python3
+      unzip
+      which
+      zip
+    ];
+
+  defaultShellPath = lib.makeBinPath defaultShellUtils;
+
+  # Java toolchain used for the build and tests
+  javaToolchain = "@bazel_tools//tools/jdk:toolchain_${buildJdkName}";
+
+  platforms = lib.platforms.linux ++ lib.platforms.darwin;
+
+  # This repository is fetched by bazel at runtime
+  # however it contains prebuilt java binaries, with wrong interpreter
+  # and libraries path.
+  # We prefetch it, patch it, and override it in a global bazelrc.
+  system = if stdenv.hostPlatform.isDarwin then "darwin" else "linux";
+  arch = stdenv.hostPlatform.parsed.cpu.name;
+
+  remote_java_tools = stdenv.mkDerivation {
+    name = "remote_java_tools_${system}";
+
+    src = srcDepsSet."java_tools_javac11_${system}-v10.6.zip";
+
+    nativeBuildInputs = [ autoPatchelfHook unzip ];
+    buildInputs = [ gcc-unwrapped ];
+
+    sourceRoot = ".";
+
+    buildPhase = ''
+      runHook preBuild
+
+      mkdir $out;
+
+      runHook postBuild
+    '';
+
+    installPhase = ''
+      runHook preInstall
+
+      cp -Ra * $out/
+      touch $out/WORKSPACE
+
+      runHook postInstall
+    '';
+  };
+
+  bazelRC = writeTextFile {
+    name = "bazel-rc";
+    text = ''
+      startup --server_javabase=${runJdk}
+
+      # Can't use 'common'; https://github.com/bazelbuild/bazel/issues/3054
+      # Most commands inherit from 'build' anyway.
+      build --distdir=${distDir}
+      fetch --distdir=${distDir}
+      query --distdir=${distDir}
+
+      build --override_repository=${remote_java_tools.name}=${remote_java_tools}
+      fetch --override_repository=${remote_java_tools.name}=${remote_java_tools}
+      query --override_repository=${remote_java_tools.name}=${remote_java_tools}
+
+      # Provide a default java toolchain, this will be the same as ${runJdk}
+      build --host_javabase='@local_jdk//:jdk'
+
+      # load default location for the system wide configuration
+      try-import /etc/bazel.bazelrc
+    '';
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "bazel";
+  inherit version;
+
+  meta = with lib; {
+    homepage = "https://github.com/bazelbuild/bazel/";
+    description = "Build tool that builds code quickly and reliably";
+    license = licenses.asl20;
+    maintainers = lib.teams.bazel.members;
+    inherit platforms;
+  };
+
+  inherit src;
+  inherit sourceRoot;
+  patches = [
+    # On Darwin, the last argument to gcc is coming up as an empty string. i.e: ''
+    # This is breaking the build of any C target. This patch removes the last
+    # argument if it's found to be an empty string.
+    ../trim-last-argument-to-gcc-if-empty.patch
+
+    # On Darwin, using clang 6 to build fails because of a linker error (see #105573),
+    # but using clang 7 fails because libarclite_macosx.a cannot be found when linking
+    # the xcode_locator tool.
+    # This patch removes using the -fobjc-arc compiler option and makes the code
+    # compile without automatic reference counting. Caveat: this leaks memory, but
+    # we accept this fact because xcode_locator is only a short-lived process used during the build.
+    ./no-arc.patch
+
+    # --experimental_strict_action_env (which may one day become the default
+    # see bazelbuild/bazel#2574) hardcodes the default
+    # action environment to a non hermetic value (e.g. "/usr/local/bin").
+    # This is non hermetic on non-nixos systems. On NixOS, bazel cannot find the required binaries.
+    # So we are replacing this bazel paths by defaultShellPath,
+    # improving hermeticity and making it work in nixos.
+    (substituteAll {
+      src = ../strict_action_env.patch;
+      strictActionEnvPatch = defaultShellPath;
+    })
+
+    (substituteAll {
+      src = ./actions_path.patch;
+      actionsPathPatch = defaultShellPath;
+    })
+
+    # bazel reads its system bazelrc in /etc
+    # override this path to a builtin one
+    (substituteAll {
+      src = ../bazel_rc.patch;
+      bazelSystemBazelRCPath = bazelRC;
+    })
+  ] ++ lib.optional enableNixHacks ../nix-hacks.patch;
+
+
+  # Additional tests that check bazel’s functionality. Execute
+  #
+  #     nix-build . -A bazel.tests
+  #
+  # in the nixpkgs checkout root to exercise them locally.
+  passthru.tests =
+    let
+      runLocal = name: attrs: script:
+      let
+        attrs' = removeAttrs attrs [ "buildInputs" ];
+        buildInputs = [ python3 which ] ++ (attrs.buildInputs or []);
+      in
+      runCommandCC name ({
+        inherit buildInputs;
+        preferLocalBuild = true;
+        meta.platforms = platforms;
+      } // attrs') script;
+
+      # bazel wants to extract itself into $install_dir/install every time it runs,
+      # so let’s do that only once.
+      extracted = bazelPkg:
+        let install_dir =
+          # `install_base` field printed by `bazel info`, minus the hash.
+          # yes, this path is kinda magic. Sorry.
+          "$HOME/.cache/bazel/_bazel_nixbld";
+        in runLocal "bazel-extracted-homedir" { passthru.install_dir = install_dir; } ''
+            export HOME=$(mktemp -d)
+            touch WORKSPACE # yeah, everything sucks
+            install_base="$(${bazelPkg}/bin/bazel info | grep install_base)"
+            # assert it’s actually below install_dir
+            [[ "$install_base" =~ ${install_dir} ]] \
+              || (echo "oh no! $install_base but we are \
+            trying to copy ${install_dir} to $out instead!"; exit 1)
+            cp -R ${install_dir} $out
+          '';
+
+      bazelTest = { name, bazelScript, workspaceDir, bazelPkg, buildInputs ? [] }:
+        let
+          be = extracted bazelPkg;
+        in runLocal name { inherit buildInputs; } (
+          # skip extraction caching on Darwin, because nobody knows how Darwin works
+          (lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
+            # set up home with pre-unpacked bazel
+            export HOME=$(mktemp -d)
+            mkdir -p ${be.install_dir}
+            cp -R ${be}/install ${be.install_dir}
+
+            # https://stackoverflow.com/questions/47775668/bazel-how-to-skip-corrupt-installation-on-centos6
+            # Bazel checks whether the mtime of the install dir files
+            # is >9 years in the future, otherwise it extracts itself again.
+            # see PosixFileMTime::IsUntampered in src/main/cpp/util
+            # What the hell bazel.
+            ${lr}/bin/lr -0 -U ${be.install_dir} | ${xe}/bin/xe -N0 -0 touch --date="9 years 6 months" {}
+          '')
+          +
+          ''
+            # 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
+
+            ${bazelScript}
+
+            touch $out
+          '');
+
+      bazelWithNixHacks = bazel_self.override { enableNixHacks = true; };
+
+      bazel-examples = fetchFromGitHub {
+        owner = "bazelbuild";
+        repo = "examples";
+        rev = "4183fc709c26a00366665e2d60d70521dc0b405d";
+        sha256 = "1mm4awx6sa0myiz9j4hwp71rpr7yh8vihf3zm15n2ii6xb82r31k";
+      };
+
+    in (if !stdenv.hostPlatform.isDarwin then {
+      # `extracted` doesn’t work on darwin
+      shebang = callPackage ../shebang-test.nix { inherit runLocal extracted bazelTest distDir; };
+    } else {}) // {
+      bashTools = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; };
+      cpp = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; };
+      java = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; };
+      protobuf = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; };
+      pythonBinPath = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; };
+
+      bashToolsWithNixHacks = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+
+      cppWithNixHacks = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      javaWithNixHacks = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      protobufWithNixHacks = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+      pythonBinPathWithNixHacks = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+
+      # downstream packages using buildBazelPackage
+      # fixed-output hashes of the fetch phase need to be spot-checked manually
+      downstream = recurseIntoAttrs ({
+        inherit bazel-watcher;
+      }
+          # dm-sonnet is only packaged for linux
+      // (lib.optionalAttrs stdenv.isLinux {
+          # TODO(timokau) dm-sonnet is broken currently
+          # dm-sonnet-linux = python3.pkgs.dm-sonnet;
+      }));
+    };
+
+  src_for_updater = stdenv.mkDerivation rec {
+    name = "updater-sources";
+    inherit src;
+    nativeBuildInputs = [ unzip ];
+    inherit sourceRoot;
+    installPhase = ''
+      runHook preInstall
+
+      cp -r . "$out"
+
+      runHook postInstall
+    '';
+  };
+  # update the list of workspace dependencies
+  passthru.updater = writeScript "update-bazel-deps.sh" ''
+    #!${runtimeShell}
+    (cd "${src_for_updater}" &&
+        BAZEL_USE_CPP_ONLY_TOOLCHAIN=1 \
+        "${bazel_3}"/bin/bazel \
+            query 'kind(http_archive, //external:all) + kind(http_file, //external:all) + kind(distdir_tar, //external:all) + kind(git_repository, //external:all)' \
+            --loading_phase_threads=1 \
+            --output build) \
+    | "${python3}"/bin/python3 "${./update-srcDeps.py}" \
+      "${builtins.toString ./src-deps.json}"
+  '';
+
+  # 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;
+
+  postPatch = let
+
+    darwinPatches = ''
+      bazelLinkFlags () {
+        eval set -- "$NIX_LDFLAGS"
+        local flag
+        for flag in "$@"; do
+          printf ' -Wl,%s' "$flag"
+        done
+      }
+
+      # 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+=" -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 ${lib.getDev libcxx}/include/c++/v1"
+
+      # don't use system installed Xcode to run clang, use Nix clang instead
+      sed -i -E "s;/usr/bin/xcrun (--sdk macosx )?clang;${stdenv.cc}/bin/clang $NIX_CFLAGS_COMPILE $(bazelLinkFlags) -framework CoreFoundation;g" \
+        scripts/bootstrap/compile.sh \
+        src/tools/xcode/realpath/BUILD \
+        src/tools/xcode/stdredirect/BUILD \
+        tools/osx/BUILD
+
+      substituteInPlace scripts/bootstrap/compile.sh --replace ' -mmacosx-version-min=10.9' ""
+
+      # nixpkgs's libSystem cannot use pthread headers directly, must import GCD headers instead
+      sed -i -e "/#include <pthread\/spawn.h>/i #include <dispatch/dispatch.h>" src/main/cpp/blaze_util_darwin.cc
+
+      # 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 j2objc and objc wrapper's python shebang to plain python path.
+      # These scripts explicitly depend on Python 2.7, hence we use python27.
+      # See also `postFixup` where python27 is added to $out/nix-support
+      substituteInPlace tools/j2objc/j2objc_header_map.py --replace "$!/usr/bin/python2.7" "#!${python27}/bin/python"
+      substituteInPlace tools/j2objc/j2objc_wrapper.py --replace "$!/usr/bin/python2.7" "#!${python27}/bin/python"
+      substituteInPlace tools/objc/j2objc_dead_code_pruner.py --replace "$!/usr/bin/python2.7" "#!${python27}/bin/python"
+
+      # md5sum is part of coreutils
+      sed -i 's|/sbin/md5|md5sum|g' \
+        src/BUILD third_party/ijar/test/testenv.sh tools/objc/libtool.sh
+
+      # replace initial value of pythonShebang variable in BazelPythonSemantics.java
+      substituteInPlace src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java \
+        --replace '"#!/usr/bin/env " + pythonExecutableName' "\"#!${python3}/bin/python\""
+
+      # 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.
+        # We default to python3 where possible. See also `postFixup` where
+        # python3 is added to $out/nix-support
+        substituteInPlace "$path" \
+          --replace /bin/bash ${bash}/bin/bash \
+          --replace "/usr/bin/env bash" ${bash}/bin/bash \
+          --replace "/usr/bin/env python" ${python3}/bin/python \
+          --replace /usr/bin/env ${coreutils}/bin/env \
+          --replace /bin/true ${coreutils}/bin/true
+      done
+
+      # bazel test runner include references to /bin/bash
+      substituteInPlace tools/build_rules/test_rules.bzl \
+        --replace /bin/bash ${bash}/bin/bash
+
+      for i in $(find tools/cpp/ -type f)
+      do
+        substituteInPlace $i \
+          --replace /bin/bash ${bash}/bin/bash
+      done
+
+      # Fixup scripts that generate scripts. Not fixed up by patchShebangs below.
+      substituteInPlace scripts/bootstrap/compile.sh \
+          --replace /bin/bash ${bash}/bin/bash
+
+      # add nix environment vars to .bazelrc
+      cat >> .bazelrc <<EOF
+      # Limit the resources Bazel is allowed to use during the build to 1/2 the
+      # available RAM and 3/4 the available CPU cores. This should help avoid
+      # overwhelming the build machine.
+      build --local_ram_resources=HOST_RAM*.5
+      build --local_cpu_resources=HOST_CPUS*.75
+
+      build --distdir=${distDir}
+      fetch --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="$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt="/g')"
+      build --host_linkopt="$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt="/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}'
+      build --verbose_failures
+      build --curses=no
+      build --sandbox_debug
+      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=\"$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_linkopt=\"$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt=\"/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}' \\\\" \
+          -e "/\$command \\\\$/a --verbose_failures \\\\" \
+          -e "/\$command \\\\$/a --curses=no \\\\" \
+          -e "/\$command \\\\$/a --sandbox_debug \\\\" \
+          -i scripts/bootstrap/compile.sh
+
+      # 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] ++ defaultShellUtils;
+
+  # when a command can’t be found in a bazel build, you might also
+  # need to add it to `defaultShellPath`.
+  nativeBuildInputs = [
+    coreutils
+    installShellFiles
+    makeWrapper
+    python3
+    unzip
+    which
+    zip
+    python3.pkgs.absl-py   # Needed to build fish completion
+  ] ++ 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 = ''
+    runHook preBuild
+
+    # Increasing memory during compilation might be necessary.
+    # export BAZEL_JAVAC_OPTS="-J-Xmx2g -J-Xms200m"
+
+    # If EMBED_LABEL isn't set, it'd be auto-detected from CHANGELOG.md
+    # and `git rev-parse --short HEAD` which would result in
+    # "3.7.0- (@non-git)" due to non-git build and incomplete changelog.
+    # Actual bazel releases use scripts/release/common.sh which is based
+    # on branch/tag information which we don't have with tarball releases.
+    # Note that .bazelversion is always correct and is based on bazel-*
+    # executable name, version checks should work fine
+    export EMBED_LABEL="${version}- (@non-git)"
+    ${bash}/bin/bash ./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
+    ${python3}/bin/python3 ./bazel_src/scripts/generate_fish_completion.py \
+        --bazel=./bazel_src/output/bazel \
+        --output=./bazel_src/output/bazel-complete.fish
+
+    # need to change directory for bazel to find the workspace
+    cd ./bazel_src
+    # build execlog tooling
+    export HOME=$(mktemp -d)
+    ./output/bazel build  src/tools/execlog:parser_deploy.jar
+    cd -
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    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-{version}-{os_arch}
+    # The binary _must_ exist with this naming if your project contains a .bazelversion
+    # file.
+    cp ./bazel_src/scripts/packages/bazel.sh $out/bin/bazel
+    mv ./bazel_src/output/bazel $out/bin/bazel-${version}-${system}-${arch}
+
+    mkdir $out/share
+    cp ./bazel_src/bazel-bin/src/tools/execlog/parser_deploy.jar $out/share/parser_deploy.jar
+    cat <<EOF > $out/bin/bazel-execlog
+    #!${runtimeShell} -e
+    ${runJdk}/bin/java -jar $out/share/parser_deploy.jar \$@
+    EOF
+    chmod +x $out/bin/bazel-execlog
+
+    # shell completion files
+    installShellCompletion --bash \
+      --name bazel.bash \
+      ./bazel_src/output/bazel-complete.bash
+    installShellCompletion --zsh \
+      --name _bazel \
+      ./bazel_src/scripts/zsh_completion/_bazel
+    installShellCompletion --fish \
+      --name bazel.fish \
+      ./bazel_src/output/bazel-complete.fish
+  '';
+
+  # Install check fails on `aarch64-darwin`
+  # https://github.com/NixOS/nixpkgs/issues/145587
+  doInstallCheck = stdenv.hostPlatform.system != "aarch64-darwin";
+  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-{version}-{os_arch}
+    hello_test
+
+    runHook postInstall
+  '';
+
+  # Save paths to hardcoded dependencies so Nix can detect them.
+  # This is needed because the templates get tar’d up into a .jar.
+  postFixup = ''
+    mkdir -p $out/nix-support
+    echo "${defaultShellPath}" >> $out/nix-support/depends
+    # The string literal specifying the path to the bazel-rc file is sometimes
+    # stored non-contiguously in the binary due to gcc optimisations, which leads
+    # Nix to miss the hash when scanning for dependencies
+    echo "${bazelRC}" >> $out/nix-support/depends
+  '' + lib.optionalString stdenv.isDarwin ''
+    echo "${cctools}" >> $out/nix-support/depends
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/no-arc.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/no-arc.patch
new file mode 100644
index 000000000000..012e613c2f19
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/no-arc.patch
@@ -0,0 +1,34 @@
+--- a/tools/osx/xcode_locator.m	2020-12-10 13:27:29.000000000 +0100
++++ b/tools/osx/xcode_locator.m	2021-02-01 09:09:32.159557051 +0100
+@@ -21,10 +21,6 @@
+ // 6,6.4,6.4.1 = 6.4.1
+ // 6.3,6.3.0 = 6.3
+ 
+-#if !defined(__has_feature) || !__has_feature(objc_arc)
+-#error "This file requires ARC support."
+-#endif
+-
+ #import <CoreServices/CoreServices.h>
+ #import <Foundation/Foundation.h>
+ 
+--- a/tools/osx/xcode_configure.bzl	1980-01-01 01:00:00.000000000 +0100
++++ b/tools/osx/xcode_configure.bzl	2021-02-01 09:36:57.773418444 +0100
+@@ -123,7 +123,6 @@
+         "macosx",
+         "clang",
+         "-mmacosx-version-min=10.9",
+-        "-fobjc-arc",
+         "-framework",
+         "CoreServices",
+         "-framework",
+--- a/tools/osx/BUILD	2021-02-01 11:01:02.191659553 +0100
++++ b/tools/osx/BUILD	2021-02-01 11:04:29.735071019 +0100
+@@ -27,7 +27,7 @@
+ ])
+ 
+ DARWIN_XCODE_LOCATOR_COMPILE_COMMAND = """
+-  /usr/bin/xcrun --sdk macosx clang -mmacosx-version-min=10.9 -fobjc-arc -framework CoreServices \
++  /usr/bin/xcrun --sdk macosx clang -mmacosx-version-min=10.9 -framework CoreServices \
+       -framework Foundation -o $@ $<
+ """
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/src-deps.json b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/src-deps.json
new file mode 100644
index 000000000000..4496343ec691
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/src-deps.json
@@ -0,0 +1,1585 @@
+{
+    "1.25.0.zip": {
+        "name": "1.25.0.zip",
+        "sha256": "c78be58f5e0a29a04686b628cf54faaee0094322ae0ac99da5a8a8afca59a647",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/1.25.0.zip",
+            "https://github.com/bazelbuild/rules_sass/archive/1.25.0.zip"
+        ]
+    },
+    "1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz": {
+        "name": "1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+        "sha256": "5a725b777976b77aa122b707d1b6f0f39b6020f66cd427bb111a585599c857b1",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+            "https://github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz"
+        ]
+    },
+    "382d5afc60e05470c23e8de19b19fc5ad231e732.tar.gz": {
+        "name": "382d5afc60e05470c23e8de19b19fc5ad231e732.tar.gz",
+        "sha256": "7992217989f3156f8109931c1fc6db3434b7414957cb82371552377beaeb9d6c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/upb/archive/382d5afc60e05470c23e8de19b19fc5ad231e732.tar.gz",
+            "https://github.com/protocolbuffers/upb/archive/382d5afc60e05470c23e8de19b19fc5ad231e732.tar.gz"
+        ]
+    },
+    "7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip": {
+        "name": "7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+        "sha256": "bc81f1ba47ef5cc68ad32225c3d0e70b8c6f6077663835438da8d5733f917598",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+            "https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip"
+        ]
+    },
+    "7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz": {
+        "name": "7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+        "sha256": "8e7d59a5b12b233be5652e3d29f42fba01c7cbab09f6b3a8d0a57ed6d1e9a0da",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz"
+        ]
+    },
+    "aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz": {
+        "name": "aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz",
+        "sha256": "9f385e146410a8150b6f4cb1a57eab7ec806ced48d427554b1e754877ff26c3e",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz",
+            "https://github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz"
+        ]
+    },
+    "android_tools": {
+        "name": "android_tools",
+        "sha256": "ea5c0589a01e2a9f43c20e5c145d3530e3b3bdbe7322789bc5da38d0ca49b837",
+        "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.19.0rc3.tar.gz"
+    },
+    "android_tools_for_testing": {
+        "name": "android_tools_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "ed5290594244c2eeab41f0104519bcef51e27c699ff4b379fcbd25215270513e",
+        "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.23.0.tar.gz"
+    },
+    "android_tools_pkg-0.23.0.tar.gz": {
+        "name": "android_tools_pkg-0.23.0.tar.gz",
+        "sha256": "ed5290594244c2eeab41f0104519bcef51e27c699ff4b379fcbd25215270513e",
+        "urls": [
+            "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.23.0.tar.gz"
+        ]
+    },
+    "b1c40e1de81913a3c40e5948f78719c28152486d.zip": {
+        "name": "b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+        "sha256": "d0c573b94a6ef20ef6ff20154a23d0efcb409fb0e1ff0979cec318dfe42f0cdd",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+            "https://github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip"
+        ]
+    },
+    "bazel-skylib-1.0.3.tar.gz": {
+        "name": "bazel-skylib-1.0.3.tar.gz",
+        "sha256": "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz"
+        ]
+    },
+    "bazel-toolchains-3.1.0.tar.gz": {
+        "name": "bazel-toolchains-3.1.0.tar.gz",
+        "sha256": "726b5423e1c7a3866a3a6d68e7123b4a955e9fcbe912a51e0f737e6dab1d0af2",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/releases/download/3.1.0/bazel-toolchains-3.1.0.tar.gz",
+            "https://github.com/bazelbuild/bazel-toolchains/releases/download/3.1.0/bazel-toolchains-3.1.0.tar.gz"
+        ]
+    },
+    "bazel_j2objc": {
+        "name": "bazel_j2objc",
+        "sha256": "8d3403b5b7db57e347c943d214577f6879e5b175c2b59b7e075c0b6453330e9b",
+        "strip_prefix": "j2objc-2.5",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/j2objc/releases/download/2.5/j2objc-2.5.zip",
+            "https://github.com/google/j2objc/releases/download/2.5/j2objc-2.5.zip"
+        ]
+    },
+    "bazel_skylib": {
+        "name": "bazel_skylib",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz"
+        ]
+    },
+    "bazel_toolchains": {
+        "name": "bazel_toolchains",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "726b5423e1c7a3866a3a6d68e7123b4a955e9fcbe912a51e0f737e6dab1d0af2",
+        "strip_prefix": "bazel-toolchains-3.1.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/releases/download/3.1.0/bazel-toolchains-3.1.0.tar.gz",
+            "https://github.com/bazelbuild/bazel-toolchains/releases/download/3.1.0/bazel-toolchains-3.1.0.tar.gz"
+        ]
+    },
+    "bazel_website": {
+        "build_file_content": "\nexports_files([\"_sass/style.scss\"])\n",
+        "name": "bazel_website",
+        "sha256": "a5f531dd1d62e6947dcfc279656ffc2fdf6f447c163914c5eabf7961b4cb6eb4",
+        "strip_prefix": "bazel-website-c174fa288aa079b68416d2ce2cc97268fa172f42",
+        "urls": [
+            "https://github.com/bazelbuild/bazel-website/archive/c174fa288aa079b68416d2ce2cc97268fa172f42.tar.gz"
+        ]
+    },
+    "boringssl": {
+        "generator_function": "grpc_deps",
+        "generator_name": "boringssl",
+        "name": "boringssl",
+        "sha256": "cb0fd3eda612d4ae4be21108938800a19b015717a7627ea7f530e3469d207707",
+        "strip_prefix": "boringssl-88aeb757f1a415c71fb4cbf5af936ecae4bc8179",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/boringssl/archive/88aeb757f1a415c71fb4cbf5af936ecae4bc8179.tar.gz",
+            "https://github.com/google/boringssl/archive/88aeb757f1a415c71fb4cbf5af936ecae4bc8179.tar.gz"
+        ]
+    },
+    "build_bazel_apple_support": {
+        "generator_function": "grpc_deps",
+        "generator_name": "build_bazel_apple_support",
+        "name": "build_bazel_apple_support",
+        "sha256": "122ebf7fe7d1c8e938af6aeaee0efe788a3a2449ece5a8d6a428cb18d6f88033",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/apple_support/releases/download/0.7.1/apple_support.0.7.1.tar.gz",
+            "https://github.com/bazelbuild/apple_support/releases/download/0.7.1/apple_support.0.7.1.tar.gz"
+        ]
+    },
+    "build_bazel_rules_apple": {
+        "generator_function": "grpc_deps",
+        "generator_name": "build_bazel_rules_apple",
+        "name": "build_bazel_rules_apple",
+        "sha256": "bdc8e66e70b8a75da23b79f1f8c6207356df07d041d96d2189add7ee0780cf4e",
+        "strip_prefix": "rules_apple-b869b0d3868d78a1d4ffd866ccb304fb68aa12c3",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/rules_apple/archive/b869b0d3868d78a1d4ffd866ccb304fb68aa12c3.tar.gz",
+            "https://github.com/bazelbuild/rules_apple/archive/b869b0d3868d78a1d4ffd866ccb304fb68aa12c3.tar.gz"
+        ]
+    },
+    "build_bazel_rules_nodejs": {
+        "name": "build_bazel_rules_nodejs",
+        "sha256": "f2194102720e662dbf193546585d705e645314319554c6ce7e47d8b59f459e9c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz",
+            "https://github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz"
+        ]
+    },
+    "com_github_cares_cares": {
+        "build_file": "@com_github_grpc_grpc//third_party:cares/cares.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_cares_cares",
+        "name": "com_github_cares_cares",
+        "sha256": "e8c2751ddc70fed9dc6f999acd92e232d5846f009ee1674f8aee81f19b2b915a",
+        "strip_prefix": "c-ares-e982924acee7f7313b4baa4ee5ec000c5e373c30",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
+            "https://github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz"
+        ]
+    },
+    "com_github_gflags_gflags": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_gflags_gflags",
+        "name": "com_github_gflags_gflags",
+        "sha256": "63ae70ea3e05780f7547d03503a53de3a7d2d83ad1caaa443a31cb20aea28654",
+        "strip_prefix": "gflags-28f50e0fed19872e0fd50dd23ce2ee8cd759338e",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/gflags/gflags/archive/28f50e0fed19872e0fd50dd23ce2ee8cd759338e.tar.gz",
+            "https://github.com/gflags/gflags/archive/28f50e0fed19872e0fd50dd23ce2ee8cd759338e.tar.gz"
+        ]
+    },
+    "com_github_google_benchmark": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_google_benchmark",
+        "name": "com_github_google_benchmark",
+        "sha256": "f68aec93154d010324c05bcd8c5cc53468b87af88d87acb5ddcfaa1bba044837",
+        "strip_prefix": "benchmark-090faecb454fbd6e6e17a75ef8146acb037118d4",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/benchmark/archive/090faecb454fbd6e6e17a75ef8146acb037118d4.tar.gz",
+            "https://github.com/google/benchmark/archive/090faecb454fbd6e6e17a75ef8146acb037118d4.tar.gz"
+        ]
+    },
+    "com_github_google_re2": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_google_re2",
+        "name": "com_github_google_re2",
+        "sha256": "9f385e146410a8150b6f4cb1a57eab7ec806ced48d427554b1e754877ff26c3e",
+        "strip_prefix": "re2-aecba11114cf1fac5497aeb844b6966106de3eb6",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz",
+            "https://github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz"
+        ]
+    },
+    "com_github_grpc_grpc": {
+        "name": "com_github_grpc_grpc",
+        "patch_args": [
+            "-p1"
+        ],
+        "patches": [
+            "//third_party/grpc:grpc_1.33.1.patch"
+        ],
+        "sha256": "58eaee5c0f1bd0b92ebe1fa0606ec8f14798500620e7444726afcaf65041cb63",
+        "strip_prefix": "grpc-1.33.1",
+        "urls": [
+            "https://mirror.bazel.build/github.com/grpc/grpc/archive/v1.33.1.tar.gz",
+            "https://github.com/grpc/grpc/archive/v1.33.1.tar.gz"
+        ]
+    },
+    "com_google_absl": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_google_absl",
+        "name": "com_google_absl",
+        "sha256": "f368a8476f4e2e0eccf8a7318b98dafbe30b2600f4e3cf52636e5eb145aba06a",
+        "strip_prefix": "abseil-cpp-df3ea785d8c30a9503321a3d35ee7d35808f190d",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/abseil/abseil-cpp/archive/df3ea785d8c30a9503321a3d35ee7d35808f190d.tar.gz",
+            "https://github.com/abseil/abseil-cpp/archive/df3ea785d8c30a9503321a3d35ee7d35808f190d.tar.gz"
+        ]
+    },
+    "com_google_googletest": {
+        "name": "com_google_googletest",
+        "sha256": "9dc9157a9a1551ec7a7e43daea9a694a0bb5fb8bec81235d8a1e6ef64c716dcb",
+        "strip_prefix": "googletest-release-1.10.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/googletest/archive/release-1.10.0.tar.gz",
+            "https://github.com/google/googletest/archive/release-1.10.0.tar.gz"
+        ]
+    },
+    "com_google_protobuf": {
+        "name": "com_google_protobuf",
+        "patch_args": [
+            "-p1"
+        ],
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "patches": [
+            "//third_party/protobuf:3.13.0.patch"
+        ],
+        "sha256": "9b4ee22c250fe31b16f1a24d61467e40780a3fbb9b91c3b65be2a376ed913a1a",
+        "strip_prefix": "protobuf-3.13.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz",
+            "https://github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz"
+        ]
+    },
+    "coverage_output_generator-v2.5.zip": {
+        "name": "coverage_output_generator-v2.5.zip",
+        "sha256": "cd14f1cb4559e4723e63b7e7b06d09fcc3bd7ba58d03f354cdff1439bd936a7d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.5.zip"
+        ]
+    },
+    "cython": {
+        "build_file": "@com_github_grpc_grpc//third_party:cython.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "cython",
+        "name": "cython",
+        "sha256": "d68138a2381afbdd0876c3cb2a22389043fa01c4badede1228ee073032b07a27",
+        "strip_prefix": "cython-c2b80d87658a8525ce091cbe146cb7eaa29fed5c",
+        "urls": [
+            "https://github.com/cython/cython/archive/c2b80d87658a8525ce091cbe146cb7eaa29fed5c.tar.gz"
+        ]
+    },
+    "desugar_jdk_libs": {
+        "name": "desugar_jdk_libs",
+        "sha256": "fe2e04f91ce8c59d49d91b8102edc6627c6fa2906c1b0e7346f01419ec4f419d",
+        "strip_prefix": "desugar_jdk_libs-e0b0291b2c51fbe5a7cfa14473a1ae850f94f021",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip"
+        ]
+    },
+    "df3ea785d8c30a9503321a3d35ee7d35808f190d.tar.gz": {
+        "name": "df3ea785d8c30a9503321a3d35ee7d35808f190d.tar.gz",
+        "sha256": "f368a8476f4e2e0eccf8a7318b98dafbe30b2600f4e3cf52636e5eb145aba06a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/abseil/abseil-cpp/archive/df3ea785d8c30a9503321a3d35ee7d35808f190d.tar.gz",
+            "https://github.com/abseil/abseil-cpp/archive/df3ea785d8c30a9503321a3d35ee7d35808f190d.tar.gz"
+        ]
+    },
+    "e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip": {
+        "name": "e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+        "sha256": "fe2e04f91ce8c59d49d91b8102edc6627c6fa2906c1b0e7346f01419ec4f419d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip"
+        ]
+    },
+    "e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz": {
+        "name": "e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
+        "sha256": "e8c2751ddc70fed9dc6f999acd92e232d5846f009ee1674f8aee81f19b2b915a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
+            "https://github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz"
+        ]
+    },
+    "enum34": {
+        "build_file": "@com_github_grpc_grpc//third_party:enum34.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "enum34",
+        "name": "enum34",
+        "sha256": "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1",
+        "strip_prefix": "enum34-1.1.6",
+        "urls": [
+            "https://files.pythonhosted.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz"
+        ]
+    },
+    "envoy_api": {
+        "generator_function": "grpc_deps",
+        "generator_name": "envoy_api",
+        "name": "envoy_api",
+        "sha256": "466585f253471259ce17641348149f458270316e81ec6702fdd8bf0b1b681256",
+        "strip_prefix": "data-plane-api-9997e1137cdb59e622af13e57ca915a2f3c9f84f",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/envoyproxy/data-plane-api/archive/9997e1137cdb59e622af13e57ca915a2f3c9f84f.tar.gz",
+            "https://github.com/envoyproxy/data-plane-api/archive/9997e1137cdb59e622af13e57ca915a2f3c9f84f.tar.gz"
+        ]
+    },
+    "futures": {
+        "build_file": "@com_github_grpc_grpc//third_party:futures.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "futures",
+        "name": "futures",
+        "sha256": "7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794",
+        "strip_prefix": "futures-3.3.0",
+        "urls": [
+            "https://files.pythonhosted.org/packages/47/04/5fc6c74ad114032cd2c544c575bffc17582295e9cd6a851d6026ab4b2c00/futures-3.3.0.tar.gz"
+        ]
+    },
+    "io_bazel_rules_go": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_bazel_rules_go",
+        "name": "io_bazel_rules_go",
+        "sha256": "a82a352bffae6bee4e95f68a8d80a70e87f42c4741e6a448bec11998fcc82329",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/rules_go/releases/download/0.18.5/rules_go-0.18.5.tar.gz",
+            "https://github.com/bazelbuild/rules_go/releases/download/0.18.5/rules_go-0.18.5.tar.gz"
+        ]
+    },
+    "io_bazel_rules_python": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_bazel_rules_python",
+        "name": "io_bazel_rules_python",
+        "sha256": "aa96a691d3a8177f3215b14b0edc9641787abaaa30363a080165d06ab65e1161",
+        "url": "https://github.com/bazelbuild/rules_python/releases/download/0.0.1/rules_python-0.0.1.tar.gz"
+    },
+    "io_bazel_rules_sass": {
+        "name": "io_bazel_rules_sass",
+        "sha256": "c78be58f5e0a29a04686b628cf54faaee0094322ae0ac99da5a8a8afca59a647",
+        "strip_prefix": "rules_sass-1.25.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/1.25.0.zip",
+            "https://github.com/bazelbuild/rules_sass/archive/1.25.0.zip"
+        ]
+    },
+    "io_bazel_skydoc": {
+        "name": "io_bazel_skydoc",
+        "sha256": "5a725b777976b77aa122b707d1b6f0f39b6020f66cd427bb111a585599c857b1",
+        "strip_prefix": "stardoc-1ef781ced3b1443dca3ed05dec1989eca1a4e1cd",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+            "https://github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz"
+        ]
+    },
+    "io_opencensus_cpp": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_opencensus_cpp",
+        "name": "io_opencensus_cpp",
+        "sha256": "90d6fafa8b1a2ea613bf662731d3086e1c2ed286f458a95c81744df2dbae41b1",
+        "strip_prefix": "opencensus-cpp-c9a4da319bc669a772928ffc55af4a61be1a1176",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/census-instrumentation/opencensus-cpp/archive/c9a4da319bc669a772928ffc55af4a61be1a1176.tar.gz",
+            "https://github.com/census-instrumentation/opencensus-cpp/archive/c9a4da319bc669a772928ffc55af4a61be1a1176.tar.gz"
+        ]
+    },
+    "java_tools_javac11_darwin-v10.6.zip": {
+        "name": "java_tools_javac11_darwin-v10.6.zip",
+        "sha256": "d15b05d2061382748f779dc566537ea567a46bcba6fa34b56d7cb6e6d668adab",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_darwin-v10.6.zip"
+        ]
+    },
+    "java_tools_javac11_linux-v10.6.zip": {
+        "name": "java_tools_javac11_linux-v10.6.zip",
+        "sha256": "085c0ba53ba764e81d4c195524f3c596085cbf9cdc01dd8e6d2ae677e726af35",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_linux-v10.6.zip"
+        ]
+    },
+    "java_tools_javac11_windows-v10.6.zip": {
+        "name": "java_tools_javac11_windows-v10.6.zip",
+        "sha256": "873f1e53d1fa9c8e46b717673816cd822bb7acc474a194a18ff849fd8fa6ff00",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_windows-v10.6.zip"
+        ]
+    },
+    "java_tools_langtools_javac11": {
+        "name": "java_tools_langtools_javac11",
+        "sha256": "cf0814fa002ef3d794582bb086516d8c9ed0958f83f19799cdb08949019fe4c7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/jdk_langtools/langtools_jdk11_v2.zip"
+        ]
+    },
+    "jekyll_tree_0_17_1": {
+        "name": "jekyll_tree_0_17_1",
+        "sha256": "02256ddd20eeaf70cf8fcfe9b2cdddd7be87aedd5848d549474fb0358e0031d3",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.17.1.tar"
+        ]
+    },
+    "jekyll_tree_0_17_2": {
+        "name": "jekyll_tree_0_17_2",
+        "sha256": "13b35dd309a0d52f0a2518a1193f42729c75255f5fae40cea68e4d4224bfaa2e",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.17.2.tar"
+        ]
+    },
+    "jekyll_tree_0_18_1": {
+        "name": "jekyll_tree_0_18_1",
+        "sha256": "98b77f48e37a50fc6f83100bf53f661e10732bb3ddbc226e02d0225cb7a9a7d8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.18.1.tar"
+        ]
+    },
+    "jekyll_tree_0_19_1": {
+        "name": "jekyll_tree_0_19_1",
+        "sha256": "ec892c59ba18bb8de1f9ae2bde937db144e45f28d6d1c32a2cee847ee81b134d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.19.1.tar"
+        ]
+    },
+    "jekyll_tree_0_19_2": {
+        "name": "jekyll_tree_0_19_2",
+        "sha256": "3c2d9f21ec2fd1c0b8a310f6eb6043027c838810cdfc2457d4346a0e5cdcaa7a",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.19.2.tar"
+        ]
+    },
+    "jekyll_tree_0_20_0": {
+        "name": "jekyll_tree_0_20_0",
+        "sha256": "bb79a63810bf1b0aa1f89bd3bbbeb4a547a30ab9af70c9be656cc6866f4b015b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.20.0.tar"
+        ]
+    },
+    "jekyll_tree_0_21_0": {
+        "name": "jekyll_tree_0_21_0",
+        "sha256": "23ec39c0138d358c544151e5c81586716d5d1c6124f10a742bead70516e6eb93",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.21.0.tar"
+        ]
+    },
+    "jekyll_tree_0_22_0": {
+        "name": "jekyll_tree_0_22_0",
+        "sha256": "bec5cfaa5560e082e41e33bde276cf93f0f7bcfd2914a3e868f921df8b3ab725",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.22.0.tar"
+        ]
+    },
+    "jekyll_tree_0_23_0": {
+        "name": "jekyll_tree_0_23_0",
+        "sha256": "56c80fcf49dc606fab8ed5e737a7409e9a486585b7b98673be69b5a4984dd774",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.23.0.tar"
+        ]
+    },
+    "jekyll_tree_0_24_0": {
+        "name": "jekyll_tree_0_24_0",
+        "sha256": "988fa567906a73e50d3669909285187ef88c76ecd4aa277f4d1f355fc06a90c8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.24.0.tar"
+        ]
+    },
+    "jekyll_tree_0_25_0": {
+        "name": "jekyll_tree_0_25_0",
+        "sha256": "e8ab61c047225e808982a564ecd692fd63bd243dccc88a8768ed069a5362a685",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.25.0.tar"
+        ]
+    },
+    "jekyll_tree_0_26_0": {
+        "name": "jekyll_tree_0_26_0",
+        "sha256": "3907dfc6fb27d246e67877e553e8951fac239bb49f2dec7e06b6b09cb0b98b8d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.26.0.tar"
+        ]
+    },
+    "jekyll_tree_0_27_0": {
+        "name": "jekyll_tree_0_27_0",
+        "sha256": "97e2633fefee389daade775da43907aa68699b32212f4e48cb095abe18aa7e65",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.27.0.tar"
+        ]
+    },
+    "jekyll_tree_0_28_0": {
+        "name": "jekyll_tree_0_28_0",
+        "sha256": "64b3fc267fb1f4c56345d96f0ad9f07a2efe43bd15361f818368849cf941b3b7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.28.0.tar"
+        ]
+    },
+    "jekyll_tree_0_29_0": {
+        "name": "jekyll_tree_0_29_0",
+        "sha256": "99d7a6bf9ef0145c59c54b4319fb31cb855681782080a5490909c4a5463c7215",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.29.0.tar"
+        ]
+    },
+    "jekyll_tree_0_29_1": {
+        "name": "jekyll_tree_0_29_1",
+        "sha256": "cf0a517f1660a7c4fd26a7ef6f3594bbefcf2b670bc0ed610bf3bb6ec3a9fdc3",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.29.1.tar"
+        ]
+    },
+    "jekyll_tree_1_0_0": {
+        "name": "jekyll_tree_1_0_0",
+        "sha256": "61ef65c738a8cd65059f58f2ee5f7eef493136ac4d5e5c3464787d17043febdf",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-1.0.0.tar"
+        ]
+    },
+    "jekyll_tree_1_1_0": {
+        "name": "jekyll_tree_1_1_0",
+        "sha256": "46d82c9249896903ee6be2295fc52a1346a9ee82f61f89b8a2181232c3bd999b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-1.1.0.tar"
+        ]
+    },
+    "jekyll_tree_1_2_0": {
+        "name": "jekyll_tree_1_2_0",
+        "sha256": "d402a8391ca2624673f124ff42ba8d0d40d4139e5d23111f3995dc6c5f70f63d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-1.2.0.tar"
+        ]
+    },
+    "jekyll_tree_2_0_0": {
+        "name": "jekyll_tree_2_0_0",
+        "sha256": "7d7c424ede503856c61b645d8fdc2513ec6ea8600d76c5e87c45a9a45c16de3e",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-2.0.0.tar"
+        ]
+    },
+    "jekyll_tree_2_1_0": {
+        "name": "jekyll_tree_2_1_0",
+        "sha256": "b0fd257b1d6b1b05705742d55a13b9a20d3e99f49c89334750c872d620e5b88f",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-2.1.0.tar"
+        ]
+    },
+    "jekyll_tree_2_2_0": {
+        "name": "jekyll_tree_2_2_0",
+        "sha256": "4c1506786ab98df8039ec7354b82da7b586b2ae4ab7f7e7d08f3caf74ff28e3d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-2.2.0.tar"
+        ]
+    },
+    "jekyll_tree_3_0_0": {
+        "name": "jekyll_tree_3_0_0",
+        "sha256": "bd1096ad609c253fa7b1473edf4a3aa51f36243e188dbb62c68d8ed4aca2419d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.0.0.tar"
+        ]
+    },
+    "jekyll_tree_3_1_0": {
+        "name": "jekyll_tree_3_1_0",
+        "sha256": "f9d2e22e24af426d6c9de163d91abe6d8af7eb1eabb1d7ff5e9cf4bededf465a",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.1.0-807b377.tar"
+        ]
+    },
+    "jekyll_tree_3_2_0": {
+        "name": "jekyll_tree_3_2_0",
+        "sha256": "6cff8654e739a0c3062183a5a6cc82fcf9a77323051f8c007866d7f4101052a6",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.2.0.tar"
+        ]
+    },
+    "jekyll_tree_3_3_0": {
+        "name": "jekyll_tree_3_3_0",
+        "sha256": "36b81e8ddf4f3caccf41acc82d9e49f000c1be9e92c9cc82793d60ff70636176",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.3.0.tar"
+        ]
+    },
+    "jekyll_tree_3_4_0": {
+        "name": "jekyll_tree_3_4_0",
+        "sha256": "af82e775d911135bcff76e500bb003c4a9fccb949f8ddf4d93c58eca195bf5e8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.4.0.tar"
+        ]
+    },
+    "jekyll_tree_3_5_0": {
+        "name": "jekyll_tree_3_5_0",
+        "sha256": "aa96cbad14cfab0b422d1d17eac3107a75eb05854d40ab4f1379a6fc87b2e1f8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.5.0.tar"
+        ]
+    },
+    "jekyll_tree_3_5_1": {
+        "name": "jekyll_tree_3_5_1",
+        "sha256": "1c949ba8da353c93c74a70638e5cb321ea1cd5582eda1b6ad88c6d2d0b569f2f",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.5.1.tar"
+        ]
+    },
+    "jekyll_tree_3_6_0": {
+        "name": "jekyll_tree_3_6_0",
+        "sha256": "1b7a16a2098ca0c290c208a11db886e950d6c523b2cac2d0a0cba4a04aa832f3",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.6.0.tar"
+        ]
+    },
+    "jekyll_tree_3_7_0": {
+        "name": "jekyll_tree_3_7_0",
+        "sha256": "a534d37ef3867c92fae8692852f92820a34f63a5f9092bbbec6505c0f69d8094",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.7.0.tar"
+        ]
+    },
+    "openjdk11_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_darwin_aarch64_archive",
+        "sha256": "3dcc636e64ae58b922269c2dc9f20f6f967bee90e3f6847d643c4a566f1e8d8a",
+        "strip_prefix": "zulu11.45.27-ca-jdk11.0.10-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk11_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_darwin_archive",
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk11_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_linux_archive",
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk11_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_windows_archive",
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "openjdk14_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk14_darwin_archive",
+        "sha256": "088bd4d0890acc9f032b738283bf0f26b2a55c50b02d1c8a12c451d8ddf080dd",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk14_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk14_linux_archive",
+        "sha256": "48bb8947034cd079ad1ef83335e7634db4b12a26743a0dc314b6b861480777aa",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk14_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk14_windows_archive",
+        "sha256": "9cb078b5026a900d61239c866161f0d9558ec759aa15c5b4c7e905370e868284",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-win_x64.zip"
+        ]
+    },
+    "openjdk15_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_darwin_aarch64_archive",
+        "sha256": "2613c3f15eef6b6ecd0fd102da92282b985e4573905dc902f1783d8059c1efc5",
+        "strip_prefix": "zulu15.29.15-ca-jdk15.0.2-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk15_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_darwin_archive",
+        "sha256": "f80b2e0512d9d8a92be24497334c974bfecc8c898fc215ce0e76594f00437482",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk15_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_linux_archive",
+        "sha256": "0a38f1138c15a4f243b75eb82f8ef40855afcc402e3c2a6de97ce8235011b1ad",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk15_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_windows_archive",
+        "sha256": "f535a530151e6c20de8a3078057e332b08887cb3ba1a4735717357e72765cad6",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip"
+        ]
+    },
+    "openjdk_linux": {
+        "downloaded_file_path": "zulu-linux.tar.gz",
+        "name": "openjdk_linux",
+        "sha256": "65bfe4e0ffa74a680ee4410db46b17e30cd9397b664a92a886599fe1f3530969",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64-linux_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689070.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64": {
+        "downloaded_file_path": "zulu-linux-aarch64.tar.gz",
+        "name": "openjdk_linux_aarch64",
+        "sha256": "6b245793087300db3ee82ab0d165614f193a73a60f2f011e347756c1e6ca5bac",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581690750.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_minimal": {
+        "downloaded_file_path": "zulu-linux-aarch64-minimal.tar.gz",
+        "name": "openjdk_linux_aarch64_minimal",
+        "sha256": "06f6520a877704c77614bcfc4f846cc7cbcbf5eaad149bf7f19f4f16e285c9de",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581690750.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_vanilla": {
+        "downloaded_file_path": "zulu-linux-aarch64-vanilla.tar.gz",
+        "name": "openjdk_linux_aarch64_vanilla",
+        "sha256": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"
+        ]
+    },
+    "openjdk_linux_minimal": {
+        "downloaded_file_path": "zulu-linux-minimal.tar.gz",
+        "name": "openjdk_linux_minimal",
+        "sha256": "91f7d52f695c681d4e21499b4319d548aadef249a6b3053e306308992e1e29ae",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689068.tar.gz"
+        ]
+    },
+    "openjdk_linux_ppc64le_vanilla": {
+        "downloaded_file_path": "adoptopenjdk-ppc64le-vanilla.tar.gz",
+        "name": "openjdk_linux_ppc64le_vanilla",
+        "sha256": "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "openjdk_linux_s390x_vanilla": {
+        "downloaded_file_path": "adoptopenjdk-s390x-vanilla.tar.gz",
+        "name": "openjdk_linux_s390x_vanilla",
+        "sha256": "d9b72e87a1d3ebc0c9552f72ae5eb150fffc0298a7cb841f1ce7bfc70dcd1059",
+        "urls": [
+            "https://mirror.bazel.build/github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "openjdk_linux_vanilla": {
+        "downloaded_file_path": "zulu-linux-vanilla.tar.gz",
+        "name": "openjdk_linux_vanilla",
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64": {
+        "downloaded_file_path": "zulu-macos-aarch64.tar.gz",
+        "name": "openjdk_macos_aarch64",
+        "sha256": "a900ef793cb34b03ac5d93ea2f67291b6842e99d500934e19393a8d8f9bfa6ff",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.45.27-ca-jdk11.0.10/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64-allmodules-1611665569.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64_minimal": {
+        "downloaded_file_path": "zulu-macos-aarch64-minimal.tar.gz",
+        "name": "openjdk_macos_aarch64_minimal",
+        "sha256": "f4f606926e6deeaa8b8397e299313d9df87642fe464b0ccf1ed0432aeb00640b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.45.27-ca-jdk11.0.10/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64-minimal-1611665562.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64_vanilla": {
+        "downloaded_file_path": "zulu-macos-aarch64-vanilla.tar.gz",
+        "name": "openjdk_macos_aarch64_vanilla",
+        "sha256": "3dcc636e64ae58b922269c2dc9f20f6f967bee90e3f6847d643c4a566f1e8d8a",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64": {
+        "downloaded_file_path": "zulu-macos.tar.gz",
+        "name": "openjdk_macos_x86_64",
+        "sha256": "8e283cfd23c7555be8e17295ed76eb8f00324c88ab904b8de37bbe08f90e569b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689066.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64_minimal": {
+        "downloaded_file_path": "zulu-macos-minimal.tar.gz",
+        "name": "openjdk_macos_x86_64_minimal",
+        "sha256": "1bacb1c07035d4066d79f0b65b4ea0ebd1954f3662bdfe3618da382ac8fd23a6",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689063.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64_vanilla": {
+        "downloaded_file_path": "zulu-macos-vanilla.tar.gz",
+        "name": "openjdk_macos_x86_64_vanilla",
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk_win": {
+        "downloaded_file_path": "zulu-win.zip",
+        "name": "openjdk_win",
+        "sha256": "8e1604b3a27dcf639bc6d1a73103f1211848139e4cceb081d0a74a99e1e6f995",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689080.zip"
+        ]
+    },
+    "openjdk_win_minimal": {
+        "downloaded_file_path": "zulu-win-minimal.zip",
+        "name": "openjdk_win_minimal",
+        "sha256": "b90a713c9c2d9ea23cad44d2c2dfcc9af22faba9bde55dedc1c3bb9f556ac1ae",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689080.zip"
+        ]
+    },
+    "openjdk_win_vanilla": {
+        "downloaded_file_path": "zulu-win-vanilla.zip",
+        "name": "openjdk_win_vanilla",
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "platforms": {
+        "name": "platforms",
+        "sha256": "079945598e4b6cc075846f7fd6a9d0857c33a7afc0de868c2ccb96405225135d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.4/platforms-0.0.4.tar.gz",
+            "https://github.com/bazelbuild/platforms/releases/download/0.0.4/platforms-0.0.4.tar.gz"
+        ]
+    },
+    "platforms-0.0.4.tar.gz": {
+        "name": "platforms-0.0.4.tar.gz",
+        "sha256": "079945598e4b6cc075846f7fd6a9d0857c33a7afc0de868c2ccb96405225135d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.4/platforms-0.0.4.tar.gz",
+            "https://github.com/bazelbuild/platforms/releases/download/0.0.4/platforms-0.0.4.tar.gz"
+        ]
+    },
+    "remote_coverage_tools": {
+        "name": "remote_coverage_tools",
+        "sha256": "cd14f1cb4559e4723e63b7e7b06d09fcc3bd7ba58d03f354cdff1439bd936a7d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.5.zip"
+        ]
+    },
+    "remote_coverage_tools_for_testing": {
+        "name": "remote_coverage_tools_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "cd14f1cb4559e4723e63b7e7b06d09fcc3bd7ba58d03f354cdff1439bd936a7d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.5.zip"
+        ]
+    },
+    "remote_java_tools_darwin": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_darwin",
+        "name": "remote_java_tools_darwin",
+        "sha256": "64e5de2175dfccb96831573946b80d106edf3801d9db38b564514bf3581d466b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_darwin-v10.0.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.0/java_tools_javac11_darwin-v10.0.zip"
+        ]
+    },
+    "remote_java_tools_darwin_for_testing": {
+        "name": "remote_java_tools_darwin_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d15b05d2061382748f779dc566537ea567a46bcba6fa34b56d7cb6e6d668adab",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_darwin-v10.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.6/java_tools_javac11_darwin-v10.6.zip"
+        ]
+    },
+    "remote_java_tools_javac11_test_darwin": {
+        "name": "remote_java_tools_javac11_test_darwin",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d15b05d2061382748f779dc566537ea567a46bcba6fa34b56d7cb6e6d668adab",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_darwin-v10.6.zip"
+        ]
+    },
+    "remote_java_tools_javac11_test_linux": {
+        "name": "remote_java_tools_javac11_test_linux",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "085c0ba53ba764e81d4c195524f3c596085cbf9cdc01dd8e6d2ae677e726af35",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_linux-v10.6.zip"
+        ]
+    },
+    "remote_java_tools_javac11_test_windows": {
+        "name": "remote_java_tools_javac11_test_windows",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "873f1e53d1fa9c8e46b717673816cd822bb7acc474a194a18ff849fd8fa6ff00",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_windows-v10.6.zip"
+        ]
+    },
+    "remote_java_tools_linux": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_linux",
+        "name": "remote_java_tools_linux",
+        "sha256": "69e65353c2cd65780abcbcce4daae973599298273b0f8b4d469eed822cb220d1",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_linux-v10.0.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.0/java_tools_javac11_linux-v10.0.zip"
+        ]
+    },
+    "remote_java_tools_linux_for_testing": {
+        "name": "remote_java_tools_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "085c0ba53ba764e81d4c195524f3c596085cbf9cdc01dd8e6d2ae677e726af35",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_linux-v10.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.6/java_tools_javac11_linux-v10.6.zip"
+        ]
+    },
+    "remote_java_tools_windows": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_windows",
+        "name": "remote_java_tools_windows",
+        "sha256": "d2f62af8daa0a3d55789b605f6582e37038329c64843337c71e64515468e55c4",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.0/java_tools_javac11_windows-v10.0.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.0/java_tools_javac11_windows-v10.0.zip"
+        ]
+    },
+    "remote_java_tools_windows_for_testing": {
+        "name": "remote_java_tools_windows_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "873f1e53d1fa9c8e46b717673816cd822bb7acc474a194a18ff849fd8fa6ff00",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_windows-v10.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.6/java_tools_javac11_windows-v10.6.zip"
+        ]
+    },
+    "remotejdk11_linux": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux",
+        "name": "remotejdk11_linux",
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_aarch64": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_aarch64",
+        "name": "remotejdk11_linux_aarch64",
+        "sha256": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
+        "strip_prefix": "zulu11.37.48-ca-jdk11.0.6-linux_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
+        "strip_prefix": "zulu11.37.48-ca-jdk11.0.6-linux_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_ppc64le": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_ppc64le",
+        "name": "remotejdk11_linux_ppc64le",
+        "sha256": "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_ppc64le_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_ppc64le_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_s390x": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_s390x",
+        "name": "remotejdk11_linux_s390x",
+        "sha256": "d9b72e87a1d3ebc0c9552f72ae5eb150fffc0298a7cb841f1ce7bfc70dcd1059",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_s390x_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_s390x_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d9b72e87a1d3ebc0c9552f72ae5eb150fffc0298a7cb841f1ce7bfc70dcd1059",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_macos": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_macos",
+        "name": "remotejdk11_macos",
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "3dcc636e64ae58b922269c2dc9f20f6f967bee90e3f6847d643c4a566f1e8d8a",
+        "strip_prefix": "zulu11.45.27-ca-jdk11.0.10-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_win": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_win",
+        "name": "remotejdk11_win",
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "remotejdk11_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "remotejdk14_linux": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk14_linux",
+        "name": "remotejdk14_linux",
+        "sha256": "48bb8947034cd079ad1ef83335e7634db4b12a26743a0dc314b6b861480777aa",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk14_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk14_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "48bb8947034cd079ad1ef83335e7634db4b12a26743a0dc314b6b861480777aa",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk14_macos": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk14_macos",
+        "name": "remotejdk14_macos",
+        "sha256": "088bd4d0890acc9f032b738283bf0f26b2a55c50b02d1c8a12c451d8ddf080dd",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk14_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk14_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "088bd4d0890acc9f032b738283bf0f26b2a55c50b02d1c8a12c451d8ddf080dd",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk14_win": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk14_win",
+        "name": "remotejdk14_win",
+        "sha256": "9cb078b5026a900d61239c866161f0d9558ec759aa15c5b4c7e905370e868284",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-win_x64.zip"
+        ]
+    },
+    "remotejdk14_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk14_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "9cb078b5026a900d61239c866161f0d9558ec759aa15c5b4c7e905370e868284",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-win_x64.zip"
+        ]
+    },
+    "remotejdk15_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "0a38f1138c15a4f243b75eb82f8ef40855afcc402e3c2a6de97ce8235011b1ad",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk15_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "2613c3f15eef6b6ecd0fd102da92282b985e4573905dc902f1783d8059c1efc5",
+        "strip_prefix": "zulu15.29.15-ca-jdk15.0.2-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk15_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "f80b2e0512d9d8a92be24497334c974bfecc8c898fc215ce0e76594f00437482",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk15_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "f535a530151e6c20de8a3078057e332b08887cb3ba1a4735717357e72765cad6",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip"
+        ]
+    },
+    "rules_cc": {
+        "name": "rules_cc",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d0c573b94a6ef20ef6ff20154a23d0efcb409fb0e1ff0979cec318dfe42f0cdd",
+        "strip_prefix": "rules_cc-b1c40e1de81913a3c40e5948f78719c28152486d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+            "https://github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip"
+        ]
+    },
+    "rules_java": {
+        "name": "rules_java",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "bc81f1ba47ef5cc68ad32225c3d0e70b8c6f6077663835438da8d5733f917598",
+        "strip_prefix": "rules_java-7cf3cefd652008d0a64a419c34c13bdca6c8f178",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+            "https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip"
+        ]
+    },
+    "rules_nodejs-2.2.2.tar.gz": {
+        "name": "rules_nodejs-2.2.2.tar.gz",
+        "sha256": "f2194102720e662dbf193546585d705e645314319554c6ce7e47d8b59f459e9c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz",
+            "https://github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz"
+        ]
+    },
+    "rules_pkg": {
+        "name": "rules_pkg",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "4ba8f4ab0ff85f2484287ab06c0d871dcb31cc54d439457d28fd4ae14b18450a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.2.4/rules_pkg-0.2.4.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.2.4/rules_pkg-0.2.4.tar.gz"
+        ]
+    },
+    "rules_pkg-0.2.4.tar.gz": {
+        "name": "rules_pkg-0.2.4.tar.gz",
+        "sha256": "4ba8f4ab0ff85f2484287ab06c0d871dcb31cc54d439457d28fd4ae14b18450a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.2.4/rules_pkg-0.2.4.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.2.4/rules_pkg-0.2.4.tar.gz"
+        ]
+    },
+    "rules_proto": {
+        "name": "rules_proto",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "8e7d59a5b12b233be5652e3d29f42fba01c7cbab09f6b3a8d0a57ed6d1e9a0da",
+        "strip_prefix": "rules_proto-7e4afce6fe62dbff0a4a03450143146f9f2d7488",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz"
+        ]
+    },
+    "six": {
+        "build_file": "@com_github_grpc_grpc//third_party:six.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "six",
+        "name": "six",
+        "sha256": "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73",
+        "urls": [
+            "https://files.pythonhosted.org/packages/dd/bf/4138e7bfb757de47d1f4b6994648ec67a51efe58fa907c1e11e350cddfca/six-1.12.0.tar.gz"
+        ]
+    },
+    "upb": {
+        "generator_function": "grpc_deps",
+        "generator_name": "upb",
+        "name": "upb",
+        "sha256": "7992217989f3156f8109931c1fc6db3434b7414957cb82371552377beaeb9d6c",
+        "strip_prefix": "upb-382d5afc60e05470c23e8de19b19fc5ad231e732",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/protocolbuffers/upb/archive/382d5afc60e05470c23e8de19b19fc5ad231e732.tar.gz",
+            "https://github.com/protocolbuffers/upb/archive/382d5afc60e05470c23e8de19b19fc5ad231e732.tar.gz"
+        ]
+    },
+    "v1.33.1.tar.gz": {
+        "name": "v1.33.1.tar.gz",
+        "sha256": "58eaee5c0f1bd0b92ebe1fa0606ec8f14798500620e7444726afcaf65041cb63",
+        "urls": [
+            "https://mirror.bazel.build/github.com/grpc/grpc/archive/v1.33.1.tar.gz",
+            "https://github.com/grpc/grpc/archive/v1.33.1.tar.gz"
+        ]
+    },
+    "v3.13.0.tar.gz": {
+        "name": "v3.13.0.tar.gz",
+        "sha256": "9b4ee22c250fe31b16f1a24d61467e40780a3fbb9b91c3b65be2a376ed913a1a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz",
+            "https://github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz"
+        ]
+    },
+    "zlib": {
+        "build_file": "@com_github_grpc_grpc//third_party:zlib.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "zlib",
+        "name": "zlib",
+        "sha256": "6d4d6640ca3121620995ee255945161821218752b551a1a180f4215f7d124d45",
+        "strip_prefix": "zlib-cacf7f1d4e3d44d871b605da3b647f07d718623f",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/madler/zlib/archive/cacf7f1d4e3d44d871b605da3b647f07d718623f.tar.gz",
+            "https://github.com/madler/zlib/archive/cacf7f1d4e3d44d871b605da3b647f07d718623f.tar.gz"
+        ]
+    },
+    "zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz": {
+        "name": "zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz",
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz": {
+        "name": "zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz",
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "zulu11.37.17-ca-jdk11.0.6-win_x64.zip": {
+        "name": "zulu11.37.17-ca-jdk11.0.6-win_x64.zip",
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz": {
+        "name": "zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz",
+        "sha256": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"
+        ]
+    },
+    "zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz": {
+        "name": "zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz",
+        "sha256": "3dcc636e64ae58b922269c2dc9f20f6f967bee90e3f6847d643c4a566f1e8d8a",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz"
+        ]
+    }
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/update-srcDeps.py b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/update-srcDeps.py
new file mode 100755
index 000000000000..9e998e05875e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_4/update-srcDeps.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python3
+import sys
+import json
+
+if len(sys.argv) != 2:
+    print("usage: ./this-script src-deps.json < WORKSPACE", file=sys.stderr)
+    print("Takes the bazel WORKSPACE file and reads all archives into a json dict (by evaling it as python code)", file=sys.stderr)
+    print("Hail Eris.", file=sys.stderr)
+    sys.exit(1)
+
+http_archives = []
+
+# just the kw args are the dict { name, sha256, urls … }
+def http_archive(**kw):
+    http_archives.append(kw)
+# like http_file
+def http_file(**kw):
+    http_archives.append(kw)
+
+# this is inverted from http_archive/http_file and bundles multiple archives
+def distdir_tar(**kw):
+    for archive_name in kw['archives']:
+        http_archives.append({
+            "name": archive_name,
+            "sha256": kw['sha256'][archive_name],
+            "urls": kw['urls'][archive_name]
+        })
+
+# TODO?
+def git_repository(**kw):
+    print(json.dumps(kw, sort_keys=True, indent=4), file=sys.stderr)
+    sys.exit(1)
+
+# execute the WORKSPACE like it was python code in this module,
+# using all the function stubs from above.
+exec(sys.stdin.read())
+
+# transform to a dict with the names as keys
+d = { el['name']: el for el in http_archives }
+
+def has_urls(el):
+    return ('url' in el and el['url']) or ('urls' in el and el['urls'])
+def has_sha256(el):
+    return 'sha256' in el and el['sha256']
+bad_archives = list(filter(lambda el: not has_urls(el) or not has_sha256(el), d.values()))
+if bad_archives:
+    print('Following bazel dependencies are missing url or sha256', file=sys.stderr)
+    print('Check bazel sources for master or non-checksummed dependencies', file=sys.stderr)
+    for el in bad_archives:
+        print(json.dumps(el, sort_keys=True, indent=4), file=sys.stderr)
+    sys.exit(1)
+
+with open(sys.argv[1], "w") as f:
+    print(json.dumps(d, sort_keys=True, indent=4), file=f)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/actions_path.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/actions_path.patch
new file mode 100644
index 000000000000..1fa1e5748333
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/actions_path.patch
@@ -0,0 +1,41 @@
+diff --git a/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java b/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
+index 6fff2af..7e2877e 100644
+--- a/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
++++ b/src/main/java/com/google/devtools/build/lib/exec/local/PosixLocalEnvProvider.java
+@@ -47,6 +47,16 @@ public final class PosixLocalEnvProvider implements LocalEnvProvider {
+       Map<String, String> env, BinTools binTools, String fallbackTmpDir) {
+     ImmutableMap.Builder<String, String> result = ImmutableMap.builder();
+     result.putAll(Maps.filterKeys(env, k -> !k.equals("TMPDIR")));
++
++    // In case we are running on NixOS.
++    // If bash is called with an unset PATH on this platform,
++    // it will set it to /no-such-path and default tools will be missings.
++    // See, https://github.com/NixOS/nixpkgs/issues/94222
++    // So we ensure that minimal dependencies are present.
++    if (!env.containsKey("PATH")){
++        result.put("PATH", "@actionsPathPatch@");
++    }
++ 
+     String p = clientEnv.get("TMPDIR");
+     if (Strings.isNullOrEmpty(p)) {
+       // Do not use `fallbackTmpDir`, use `/tmp` instead. This way if the user didn't export TMPDIR
+index 95642767c6..39d3c62461 100644
+--- a/src/main/java/com/google/devtools/build/lib/exec/local/XcodeLocalEnvProvider.java
++++ b/src/main/java/com/google/devtools/build/lib/exec/local/XcodeLocalEnvProvider.java
+@@ -74,6 +74,16 @@ public final class XcodeLocalEnvProvider implements LocalEnvProvider {
+
+     ImmutableMap.Builder<String, String> newEnvBuilder = ImmutableMap.builder();
+     newEnvBuilder.putAll(Maps.filterKeys(env, k -> !k.equals("TMPDIR")));
++
++    // In case we are running on NixOS.
++    // If bash is called with an unset PATH on this platform,
++    // it will set it to /no-such-path and default tools will be missings.
++    // See, https://github.com/NixOS/nixpkgs/issues/94222
++    // So we ensure that minimal dependencies are present.
++    if (!env.containsKey("PATH")){
++      newEnvBuilder.put("PATH", "@actionsPathPatch@");
++    }
++
+     String p = clientEnv.get("TMPDIR");
+     if (Strings.isNullOrEmpty(p)) {
+       // Do not use `fallbackTmpDir`, use `/tmp` instead. This way if the user didn't export TMPDIR
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/default.nix
new file mode 100644
index 000000000000..8770174ab26c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/default.nix
@@ -0,0 +1,669 @@
+{ stdenv, callPackage, lib, fetchurl, fetchpatch, fetchFromGitHub, installShellFiles
+, runCommand, runCommandCC, makeWrapper, recurseIntoAttrs
+# this package (through the fixpoint glass)
+, bazel_self
+# needed only for the updater
+, bazel_4
+, lr, xe, zip, unzip, bash, writeCBin, coreutils
+, which, gawk, gnused, gnutar, gnugrep, gzip, findutils
+# updater
+, python27, python3, writeScript
+# Apple dependencies
+, cctools, libcxx, CoreFoundation, CoreServices, Foundation
+# Allow to independently override the jdks used to build and run respectively
+, buildJdk, runJdk
+, runtimeShell
+# Downstream packages for tests
+, bazel-watcher
+# Always assume all markers valid (this is needed because we remove markers; they are non-deterministic).
+# Also, don't clean up environment variables (so that NIX_ environment variables are passed to compilers).
+, enableNixHacks ? false
+, gcc-unwrapped
+, autoPatchelfHook
+, file
+, substituteAll
+, writeTextFile
+}:
+
+let
+  version = "5.0.0";
+  sourceRoot = ".";
+
+  src = fetchurl {
+    url = "https://github.com/bazelbuild/bazel/releases/download/${version}/bazel-${version}-dist.zip";
+    sha256 = "By3WLSN9vBHgusAuEY2MLbTQujugnxoOseKkYPuEGds=";
+  };
+
+  # Update with `eval $(nix-build -A bazel.updater)`,
+  # then add new dependencies from the dict in ./src-deps.json as required.
+  srcDeps = lib.attrsets.attrValues srcDepsSet;
+  srcDepsSet =
+    let
+      srcs = lib.importJSON ./src-deps.json;
+      toFetchurl = d: lib.attrsets.nameValuePair d.name (fetchurl {
+        urls = d.urls;
+        sha256 = d.sha256;
+        });
+        in builtins.listToAttrs (map toFetchurl [
+      srcs.desugar_jdk_libs
+      srcs.io_bazel_skydoc
+      srcs.bazel_skylib
+      srcs.bazelci_rules
+      srcs.io_bazel_rules_sass
+      srcs.platforms
+      srcs."remote_java_tools_for_testing"
+      srcs."coverage_output_generator-v2.5.zip"
+      srcs.build_bazel_rules_nodejs
+      srcs."android_tools_pkg-0.23.0.tar.gz"
+      srcs.bazel_toolchains
+      srcs.com_github_grpc_grpc
+      srcs.upb
+      srcs.com_google_protobuf
+      srcs.rules_pkg
+      srcs.rules_cc
+      srcs.rules_java
+      srcs.rules_proto
+      srcs.com_google_absl
+      srcs.com_googlesource_code_re2
+      srcs.com_github_cares_cares
+      ]);
+
+  distDir = runCommand "bazel-deps" {} ''
+    mkdir -p $out
+    for i in ${builtins.toString srcDeps}; do cp $i $out/$(stripHash $i); done
+  '';
+
+  defaultShellUtils =
+    # 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",
+    #        ],
+    #     )
+    #
+    # Some of the scripts explicitly depend on Python 2.7. Otherwise, we
+    # default to using python3. Therefore, both python27 and python3 are
+    # runtime dependencies.
+    [
+      bash
+      coreutils
+      file
+      findutils
+      gawk
+      gnugrep
+      gnused
+      gnutar
+      gzip
+      python27
+      python3
+      unzip
+      which
+      zip
+    ];
+
+  defaultShellPath = lib.makeBinPath defaultShellUtils;
+
+  platforms = lib.platforms.linux ++ lib.platforms.darwin;
+
+  system = if stdenv.hostPlatform.isDarwin then "darwin" else "linux";
+  arch = stdenv.hostPlatform.parsed.cpu.name;
+
+  bazelRC = writeTextFile {
+    name = "bazel-rc";
+    text = ''
+      startup --server_javabase=${runJdk}
+
+      # Can't use 'common'; https://github.com/bazelbuild/bazel/issues/3054
+      # Most commands inherit from 'build' anyway.
+      build --distdir=${distDir}
+      fetch --distdir=${distDir}
+      query --distdir=${distDir}
+
+      build --extra_toolchains=@bazel_tools//tools/jdk:nonprebuilt_toolchain_definition
+      build --tool_java_runtime_version=local_jdk_11
+      build --java_runtime_version=local_jdk_11
+
+      # load default location for the system wide configuration
+      try-import /etc/bazel.bazelrc
+    '';
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "bazel";
+  inherit version;
+
+  meta = with lib; {
+    homepage = "https://github.com/bazelbuild/bazel/";
+    description = "Build tool that builds code quickly and reliably";
+    license = licenses.asl20;
+    maintainers = lib.teams.bazel.members;
+    inherit platforms;
+  };
+
+  inherit src;
+  inherit sourceRoot;
+  patches = [
+    # On Darwin, the last argument to gcc is coming up as an empty string. i.e: ''
+    # This is breaking the build of any C target. This patch removes the last
+    # argument if it's found to be an empty string.
+    ../trim-last-argument-to-gcc-if-empty.patch
+
+    # On Darwin, using clang 6 to build fails because of a linker error (see #105573),
+    # but using clang 7 fails because libarclite_macosx.a cannot be found when linking
+    # the xcode_locator tool.
+    # This patch removes using the -fobjc-arc compiler option and makes the code
+    # compile without automatic reference counting. Caveat: this leaks memory, but
+    # we accept this fact because xcode_locator is only a short-lived process used during the build.
+    (substituteAll {
+      src = ./no-arc.patch;
+      multiBinPatch = if stdenv.hostPlatform.system == "aarch64-darwin" then "arm64" else "x86_64";
+    })
+
+    # --experimental_strict_action_env (which may one day become the default
+    # see bazelbuild/bazel#2574) hardcodes the default
+    # action environment to a non hermetic value (e.g. "/usr/local/bin").
+    # This is non hermetic on non-nixos systems. On NixOS, bazel cannot find the required binaries.
+    # So we are replacing this bazel paths by defaultShellPath,
+    # improving hermeticity and making it work in nixos.
+    (substituteAll {
+      src = ../strict_action_env.patch;
+      strictActionEnvPatch = defaultShellPath;
+    })
+
+    (substituteAll {
+      src = ./actions_path.patch;
+      actionsPathPatch = defaultShellPath;
+    })
+
+    # bazel reads its system bazelrc in /etc
+    # override this path to a builtin one
+    (substituteAll {
+      src = ../bazel_rc.patch;
+      bazelSystemBazelRCPath = bazelRC;
+    })
+  ] ++ lib.optional enableNixHacks ../nix-hacks.patch;
+
+
+  # Additional tests that check bazel’s functionality. Execute
+  #
+  #     nix-build . -A bazel.tests
+  #
+  # in the nixpkgs checkout root to exercise them locally.
+  passthru.tests =
+    let
+      runLocal = name: attrs: script:
+      let
+        attrs' = removeAttrs attrs [ "buildInputs" ];
+        buildInputs = [ python3 which ] ++ (attrs.buildInputs or []);
+      in
+      runCommandCC name ({
+        inherit buildInputs;
+        preferLocalBuild = true;
+        meta.platforms = platforms;
+      } // attrs') script;
+
+      # bazel wants to extract itself into $install_dir/install every time it runs,
+      # so let’s do that only once.
+      extracted = bazelPkg:
+        let install_dir =
+          # `install_base` field printed by `bazel info`, minus the hash.
+          # yes, this path is kinda magic. Sorry.
+          "$HOME/.cache/bazel/_bazel_nixbld";
+        in runLocal "bazel-extracted-homedir" { passthru.install_dir = install_dir; } ''
+            export HOME=$(mktemp -d)
+            touch WORKSPACE # yeah, everything sucks
+            install_base="$(${bazelPkg}/bin/bazel info | grep install_base)"
+            # assert it’s actually below install_dir
+            [[ "$install_base" =~ ${install_dir} ]] \
+              || (echo "oh no! $install_base but we are \
+            trying to copy ${install_dir} to $out instead!"; exit 1)
+            cp -R ${install_dir} $out
+          '';
+
+      bazelTest = { name, bazelScript, workspaceDir, bazelPkg, buildInputs ? [] }:
+        let
+          be = extracted bazelPkg;
+        in runLocal name { inherit buildInputs; } (
+          # skip extraction caching on Darwin, because nobody knows how Darwin works
+          (lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
+            # set up home with pre-unpacked bazel
+            export HOME=$(mktemp -d)
+            mkdir -p ${be.install_dir}
+            cp -R ${be}/install ${be.install_dir}
+
+            # https://stackoverflow.com/questions/47775668/bazel-how-to-skip-corrupt-installation-on-centos6
+            # Bazel checks whether the mtime of the install dir files
+            # is >9 years in the future, otherwise it extracts itself again.
+            # see PosixFileMTime::IsUntampered in src/main/cpp/util
+            # What the hell bazel.
+            ${lr}/bin/lr -0 -U ${be.install_dir} | ${xe}/bin/xe -N0 -0 touch --date="9 years 6 months" {}
+          '')
+          +
+          ''
+            # 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
+
+            ${bazelScript}
+
+            touch $out
+          '');
+
+      bazelWithNixHacks = bazel_self.override { enableNixHacks = true; };
+
+      bazel-examples = fetchFromGitHub {
+        owner = "bazelbuild";
+        repo = "examples";
+        rev = "4183fc709c26a00366665e2d60d70521dc0b405d";
+        sha256 = "1mm4awx6sa0myiz9j4hwp71rpr7yh8vihf3zm15n2ii6xb82r31k";
+      };
+
+    in (if !stdenv.hostPlatform.isDarwin then {
+      # `extracted` doesn’t work on darwin
+      shebang = callPackage ../shebang-test.nix { inherit runLocal extracted bazelTest distDir; };
+    } else {}) // {
+      bashTools = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; };
+      cpp = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; };
+      java = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; };
+      protobuf = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; };
+      pythonBinPath = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; };
+
+      bashToolsWithNixHacks = callPackage ../bash-tools-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+
+      cppWithNixHacks = callPackage ../cpp-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      javaWithNixHacks = callPackage ../java-test.nix { inherit runLocal bazelTest bazel-examples distDir; bazel = bazelWithNixHacks; };
+      protobufWithNixHacks = callPackage ../protobuf-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+      pythonBinPathWithNixHacks = callPackage ../python-bin-path-test.nix { inherit runLocal bazelTest distDir; bazel = bazelWithNixHacks; };
+
+      # downstream packages using buildBazelPackage
+      # fixed-output hashes of the fetch phase need to be spot-checked manually
+      downstream = recurseIntoAttrs ({
+        inherit bazel-watcher;
+      }
+          # dm-sonnet is only packaged for linux
+      // (lib.optionalAttrs stdenv.isLinux {
+          # TODO(timokau) dm-sonnet is broken currently
+          # dm-sonnet-linux = python3.pkgs.dm-sonnet;
+      }));
+    };
+
+  src_for_updater = stdenv.mkDerivation rec {
+    name = "updater-sources";
+    inherit src;
+    nativeBuildInputs = [ unzip ];
+    inherit sourceRoot;
+    installPhase = ''
+      runHook preInstall
+
+      cp -r . "$out"
+
+      runHook postInstall
+    '';
+  };
+  # update the list of workspace dependencies
+  passthru.updater = writeScript "update-bazel-deps.sh" ''
+    #!${runtimeShell}
+    (cd "${src_for_updater}" &&
+        BAZEL_USE_CPP_ONLY_TOOLCHAIN=1 \
+        "${bazel_4}"/bin/bazel \
+            query 'kind(http_archive, //external:all) + kind(http_file, //external:all) + kind(distdir_tar, //external:all) + kind(git_repository, //external:all)' \
+            --loading_phase_threads=1 \
+            --output build) \
+    | "${python3}"/bin/python3 "${./update-srcDeps.py}" \
+      "${builtins.toString ./src-deps.json}"
+  '';
+
+  # 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;
+
+  postPatch = let
+
+    darwinPatches = ''
+      bazelLinkFlags () {
+        eval set -- "$NIX_LDFLAGS"
+        local flag
+        for flag in "$@"; do
+          printf ' -Wl,%s' "$flag"
+        done
+      }
+
+      # 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+=" -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 ${lib.getDev libcxx}/include/c++/v1"
+
+      # don't use system installed Xcode to run clang, use Nix clang instead
+      sed -i -E "s;/usr/bin/xcrun (--sdk macosx )?clang;${stdenv.cc}/bin/clang $NIX_CFLAGS_COMPILE $(bazelLinkFlags) -framework CoreFoundation;g" \
+        scripts/bootstrap/compile.sh \
+        tools/osx/BUILD
+
+      substituteInPlace scripts/bootstrap/compile.sh --replace ' -mmacosx-version-min=10.9' ""
+
+      # nixpkgs's libSystem cannot use pthread headers directly, must import GCD headers instead
+      sed -i -e "/#include <pthread\/spawn.h>/i #include <dispatch/dispatch.h>" src/main/cpp/blaze_util_darwin.cc
+
+      # 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 j2objc and objc wrapper's python shebang to plain python path.
+      # These scripts explicitly depend on Python 2.7, hence we use python27.
+      # See also `postFixup` where python27 is added to $out/nix-support
+      substituteInPlace tools/j2objc/j2objc_header_map.py --replace "$!/usr/bin/python2.7" "#!${python27}/bin/python"
+      substituteInPlace tools/j2objc/j2objc_wrapper.py --replace "$!/usr/bin/python2.7" "#!${python27}/bin/python"
+      substituteInPlace tools/objc/j2objc_dead_code_pruner.py --replace "$!/usr/bin/python2.7" "#!${python27}/bin/python"
+
+      # md5sum is part of coreutils
+      sed -i 's|/sbin/md5|md5sum|g' \
+        src/BUILD third_party/ijar/test/testenv.sh tools/objc/libtool.sh
+
+      # replace initial value of pythonShebang variable in BazelPythonSemantics.java
+      substituteInPlace src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java \
+        --replace '"#!/usr/bin/env " + pythonExecutableName' "\"#!${python3}/bin/python\""
+
+      substituteInPlace src/main/java/com/google/devtools/build/lib/starlarkbuildapi/python/PyRuntimeInfoApi.java \
+        --replace '"#!/usr/bin/env python3"' "\"#!${python3}/bin/python\""
+
+      # 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.
+        # We default to python3 where possible. See also `postFixup` where
+        # python3 is added to $out/nix-support
+        substituteInPlace "$path" \
+          --replace /bin/bash ${bash}/bin/bash \
+          --replace "/usr/bin/env bash" ${bash}/bin/bash \
+          --replace "/usr/bin/env python" ${python3}/bin/python \
+          --replace /usr/bin/env ${coreutils}/bin/env \
+          --replace /bin/true ${coreutils}/bin/true
+      done
+
+      grep -rlZ /bin/ tools/python | while IFS="" read -r -d "" path; do
+        substituteInPlace "$path" \
+          --replace "/usr/bin/env python2" ${python27}/bin/python \
+          --replace "/usr/bin/env python3" ${python3}/bin/python \
+          --replace /usr/bin/env ${coreutils}/bin/env
+      done
+
+      # bazel test runner include references to /bin/bash
+      substituteInPlace tools/build_rules/test_rules.bzl \
+        --replace /bin/bash ${bash}/bin/bash
+
+      for i in $(find tools/cpp/ -type f)
+      do
+        substituteInPlace $i \
+          --replace /bin/bash ${bash}/bin/bash
+      done
+
+      # Fixup scripts that generate scripts. Not fixed up by patchShebangs below.
+      substituteInPlace scripts/bootstrap/compile.sh \
+          --replace /bin/bash ${bash}/bin/bash
+
+      # add nix environment vars to .bazelrc
+      cat >> .bazelrc <<EOF
+      # Limit the resources Bazel is allowed to use during the build to 1/2 the
+      # available RAM and 3/4 the available CPU cores. This should help avoid
+      # overwhelming the build machine.
+      build --local_ram_resources=HOST_RAM*.5
+      build --local_cpu_resources=HOST_CPUS*.75
+
+      build --distdir=${distDir}
+      fetch --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="$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt="/g')"
+      build --host_linkopt="$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt="/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 --extra_toolchains=@bazel_tools//tools/jdk:nonprebuilt_toolchain_definition
+      build --verbose_failures
+      build --curses=no
+      build --sandbox_debug
+      build --features=-layering_check
+      EOF
+
+      cat >> tools/jdk/BUILD.tools <<EOF
+      load("@bazel_tools//tools/jdk:default_java_toolchain.bzl", "default_java_toolchain", "NONPREBUILT_TOOLCHAIN_CONFIGURATION")
+      default_java_toolchain(
+        name = "nonprebuilt_toolchain",
+        configuration = NONPREBUILT_TOOLCHAIN_CONFIGURATION,
+        java_runtime = "@local_jdk//:jdk",
+      )
+      EOF
+
+      cat >> third_party/grpc/bazel_1.41.0.patch <<EOF
+      diff --git a/third_party/grpc/BUILD b/third_party/grpc/BUILD
+      index 39ee9f97c6..9128d20c85 100644
+      --- a/third_party/grpc/BUILD
+      +++ b/third_party/grpc/BUILD
+      @@ -28,7 +28,6 @@ licenses(["notice"])
+       package(
+           default_visibility = ["//visibility:public"],
+           features = [
+      -        "layering_check",
+               "-parse_headers",
+           ],
+       )
+      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=\"$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --linkopt=\"/g')\" \\\\" \
+          -e "/\$command \\\\$/a --host_linkopt=\"$(echo $(< ${stdenv.cc}/nix-support/libcxx-ldflags) | sed -e 's/ /" --host_linkopt=\"/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 --tool_java_runtime_version=local_jdk_11 \\\\" \
+          -e "/\$command \\\\$/a --java_runtime_version=local_jdk_11 \\\\" \
+          -e "/\$command \\\\$/a --verbose_failures \\\\" \
+          -e "/\$command \\\\$/a --curses=no \\\\" \
+          -e "/\$command \\\\$/a --features=-layering_check \\\\" \
+          -e "/\$command \\\\$/a --sandbox_debug \\\\" \
+          -i scripts/bootstrap/compile.sh
+
+      # 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] ++ defaultShellUtils;
+
+  # when a command can’t be found in a bazel build, you might also
+  # need to add it to `defaultShellPath`.
+  nativeBuildInputs = [
+    coreutils
+    installShellFiles
+    makeWrapper
+    python3
+    unzip
+    which
+    zip
+    python3.pkgs.absl-py   # Needed to build fish completion
+  ] ++ 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 = ''
+    runHook preBuild
+
+    # Increasing memory during compilation might be necessary.
+    # export BAZEL_JAVAC_OPTS="-J-Xmx2g -J-Xms200m"
+
+    # If EMBED_LABEL isn't set, it'd be auto-detected from CHANGELOG.md
+    # and `git rev-parse --short HEAD` which would result in
+    # "3.7.0- (@non-git)" due to non-git build and incomplete changelog.
+    # Actual bazel releases use scripts/release/common.sh which is based
+    # on branch/tag information which we don't have with tarball releases.
+    # Note that .bazelversion is always correct and is based on bazel-*
+    # executable name, version checks should work fine
+    export EMBED_LABEL="${version}- (@non-git)"
+    ${bash}/bin/bash ./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
+    ${python3}/bin/python3 ./bazel_src/scripts/generate_fish_completion.py \
+        --bazel=./bazel_src/output/bazel \
+        --output=./bazel_src/output/bazel-complete.fish
+
+    # need to change directory for bazel to find the workspace
+    cd ./bazel_src
+    # build execlog tooling
+    export HOME=$(mktemp -d)
+    ./output/bazel build  src/tools/execlog:parser_deploy.jar
+    cd -
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    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-{version}-{os_arch}
+    # The binary _must_ exist with this naming if your project contains a .bazelversion
+    # file.
+    cp ./bazel_src/scripts/packages/bazel.sh $out/bin/bazel
+    mv ./bazel_src/output/bazel $out/bin/bazel-${version}-${system}-${arch}
+
+    mkdir $out/share
+    cp ./bazel_src/bazel-bin/src/tools/execlog/parser_deploy.jar $out/share/parser_deploy.jar
+    cat <<EOF > $out/bin/bazel-execlog
+    #!${runtimeShell} -e
+    ${runJdk}/bin/java -jar $out/share/parser_deploy.jar \$@
+    EOF
+    chmod +x $out/bin/bazel-execlog
+
+    # shell completion files
+    installShellCompletion --bash \
+      --name bazel.bash \
+      ./bazel_src/output/bazel-complete.bash
+    installShellCompletion --zsh \
+      --name _bazel \
+      ./bazel_src/scripts/zsh_completion/_bazel
+    installShellCompletion --fish \
+      --name bazel.fish \
+      ./bazel_src/output/bazel-complete.fish
+  '';
+
+  # Install check fails on `aarch64-darwin`
+  # https://github.com/NixOS/nixpkgs/issues/145587
+  doInstallCheck = stdenv.hostPlatform.system != "aarch64-darwin";
+  installCheckPhase = ''
+    export TEST_TMPDIR=$(pwd)
+
+    hello_test () {
+      $out/bin/bazel test \
+        --test_output=errors \
+        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-{version}-{os_arch}
+    hello_test
+
+    runHook postInstall
+  '';
+
+  # Save paths to hardcoded dependencies so Nix can detect them.
+  # This is needed because the templates get tar’d up into a .jar.
+  postFixup = ''
+    mkdir -p $out/nix-support
+    echo "${defaultShellPath}" >> $out/nix-support/depends
+    # The string literal specifying the path to the bazel-rc file is sometimes
+    # stored non-contiguously in the binary due to gcc optimisations, which leads
+    # Nix to miss the hash when scanning for dependencies
+    echo "${bazelRC}" >> $out/nix-support/depends
+  '' + lib.optionalString stdenv.isDarwin ''
+    echo "${cctools}" >> $out/nix-support/depends
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+}
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/no-arc.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/no-arc.patch
new file mode 100644
index 000000000000..95d70a9db38e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/no-arc.patch
@@ -0,0 +1,42 @@
+diff --git a/tools/osx/BUILD b/tools/osx/BUILD
+index 990afe3e8c..cd5b7b1b7a 100644
+--- a/tools/osx/BUILD
++++ b/tools/osx/BUILD
+@@ -28,8 +28,8 @@ exports_files([
+ ])
+ 
+ DARWIN_XCODE_LOCATOR_COMPILE_COMMAND = """
+-  /usr/bin/xcrun --sdk macosx clang -mmacosx-version-min=10.9 -fobjc-arc -framework CoreServices \
+-      -framework Foundation -arch arm64 -arch x86_64 -Wl,-no_adhoc_codesign -Wl,-no_uuid -o $@ $< && \
++  /usr/bin/xcrun --sdk macosx clang -mmacosx-version-min=10.9 -framework CoreServices \
++      -framework Foundation -arch @multiBinPatch@ -Wl,-no_uuid -o $@ $< && \
+   env -i codesign --identifier $@ --force --sign - $@
+ """
+ 
+diff --git a/tools/osx/xcode_configure.bzl b/tools/osx/xcode_configure.bzl
+index 2b819f07ec..a98ce37673 100644
+--- a/tools/osx/xcode_configure.bzl
++++ b/tools/osx/xcode_configure.bzl
+@@ -127,7 +127,6 @@ def run_xcode_locator(repository_ctx, xcode_locator_src_label):
+         "macosx",
+         "clang",
+         "-mmacosx-version-min=10.9",
+-        "-fobjc-arc",
+         "-framework",
+         "CoreServices",
+         "-framework",
+diff --git a/tools/osx/xcode_locator.m b/tools/osx/xcode_locator.m
+index ed2ef87453..e0ce6dbdd1 100644
+--- a/tools/osx/xcode_locator.m
++++ b/tools/osx/xcode_locator.m
+@@ -21,10 +21,6 @@
+ // 6,6.4,6.4.1 = 6.4.1
+ // 6.3,6.3.0 = 6.3
+ 
+-#if !defined(__has_feature) || !__has_feature(objc_arc)
+-#error "This file requires ARC support."
+-#endif
+-
+ #import <CoreServices/CoreServices.h>
+ #import <Foundation/Foundation.h>
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/src-deps.json b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/src-deps.json
new file mode 100644
index 000000000000..ff010d01aa08
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/src-deps.json
@@ -0,0 +1,1990 @@
+{
+    "1.25.0.zip": {
+        "name": "1.25.0.zip",
+        "sha256": "c78be58f5e0a29a04686b628cf54faaee0094322ae0ac99da5a8a8afca59a647",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/1.25.0.zip",
+            "https://github.com/bazelbuild/rules_sass/archive/1.25.0.zip"
+        ]
+    },
+    "1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz": {
+        "name": "1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+        "sha256": "5a725b777976b77aa122b707d1b6f0f39b6020f66cd427bb111a585599c857b1",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+            "https://github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz"
+        ]
+    },
+    "2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz": {
+        "name": "2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz",
+        "sha256": "6a5f67874af66b239b709c572ac1a5a00fdb1b29beaf13c3e6f79b1ba10dc7c4",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/upb/archive/2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz",
+            "https://github.com/protocolbuffers/upb/archive/2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz"
+        ]
+    },
+    "5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip": {
+        "name": "5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip",
+        "sha256": "299452e6f4a4981b2e6d22357f7332713382a63e4c137f5fd6b89579f6d610cb",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip"
+        ]
+    },
+    "7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip": {
+        "name": "7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+        "sha256": "bc81f1ba47ef5cc68ad32225c3d0e70b8c6f6077663835438da8d5733f917598",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+            "https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip"
+        ]
+    },
+    "7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz": {
+        "name": "7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+        "sha256": "8e7d59a5b12b233be5652e3d29f42fba01c7cbab09f6b3a8d0a57ed6d1e9a0da",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz"
+        ]
+    },
+    "997aaf3a28308eba1b9156aa35ab7bca9688e9f6.tar.gz": {
+        "name": "997aaf3a28308eba1b9156aa35ab7bca9688e9f6.tar.gz",
+        "sha256": "35f22ef5cb286f09954b7cc4c85b5a3f6221c9d4df6b8c4a1e9d399555b366ee",
+        "urls": [
+            "https://mirror.bazel.build/github.com/abseil/abseil-cpp/archive/997aaf3a28308eba1b9156aa35ab7bca9688e9f6.tar.gz",
+            "https://github.com/abseil/abseil-cpp/archive/997aaf3a28308eba1b9156aa35ab7bca9688e9f6.tar.gz"
+        ]
+    },
+    "aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz": {
+        "name": "aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz",
+        "sha256": "9f385e146410a8150b6f4cb1a57eab7ec806ced48d427554b1e754877ff26c3e",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz",
+            "https://github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz"
+        ]
+    },
+    "android_tools": {
+        "name": "android_tools",
+        "sha256": "ed5290594244c2eeab41f0104519bcef51e27c699ff4b379fcbd25215270513e",
+        "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.23.0.tar.gz"
+    },
+    "android_tools_for_testing": {
+        "name": "android_tools_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "ed5290594244c2eeab41f0104519bcef51e27c699ff4b379fcbd25215270513e",
+        "url": "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.23.0.tar.gz"
+    },
+    "android_tools_pkg-0.23.0.tar.gz": {
+        "name": "android_tools_pkg-0.23.0.tar.gz",
+        "sha256": "ed5290594244c2eeab41f0104519bcef51e27c699ff4b379fcbd25215270513e",
+        "urls": [
+            "https://mirror.bazel.build/bazel_android_tools/android_tools_pkg-0.23.0.tar.gz"
+        ]
+    },
+    "b1c40e1de81913a3c40e5948f78719c28152486d.zip": {
+        "name": "b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+        "sha256": "d0c573b94a6ef20ef6ff20154a23d0efcb409fb0e1ff0979cec318dfe42f0cdd",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+            "https://github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip"
+        ]
+    },
+    "bazel-skylib-1.0.3.tar.gz": {
+        "name": "bazel-skylib-1.0.3.tar.gz",
+        "sha256": "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz"
+        ]
+    },
+    "bazel_compdb": {
+        "generator_function": "grpc_deps",
+        "generator_name": "bazel_compdb",
+        "name": "bazel_compdb",
+        "sha256": "bcecfd622c4ef272fd4ba42726a52e140b961c4eac23025f18b346c968a8cfb4",
+        "strip_prefix": "bazel-compilation-database-0.4.5",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/grailbio/bazel-compilation-database/archive/0.4.5.tar.gz",
+            "https://github.com/grailbio/bazel-compilation-database/archive/0.4.5.tar.gz"
+        ]
+    },
+    "bazel_gazelle": {
+        "generator_function": "grpc_deps",
+        "generator_name": "bazel_gazelle",
+        "name": "bazel_gazelle",
+        "sha256": "d987004a72697334a095bbaa18d615804a28280201a50ed6c234c40ccc41e493",
+        "strip_prefix": "bazel-gazelle-0.19.1",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/bazel-gazelle/archive/v0.19.1.tar.gz",
+            "https://github.com/bazelbuild/bazel-gazelle/archive/v0.19.1.tar.gz"
+        ]
+    },
+    "bazel_j2objc": {
+        "name": "bazel_j2objc",
+        "sha256": "8d3403b5b7db57e347c943d214577f6879e5b175c2b59b7e075c0b6453330e9b",
+        "strip_prefix": "j2objc-2.5",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/j2objc/releases/download/2.5/j2objc-2.5.zip",
+            "https://github.com/google/j2objc/releases/download/2.5/j2objc-2.5.zip"
+        ]
+    },
+    "bazel_skylib": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "bazel_skylib",
+        "name": "bazel_skylib",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
+            "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz"
+        ]
+    },
+    "bazel_toolchains": {
+        "generator_function": "grpc_deps",
+        "generator_name": "bazel_toolchains",
+        "name": "bazel_toolchains",
+        "sha256": "0b36eef8a66f39c8dbae88e522d5bbbef49d5e66e834a982402c79962281be10",
+        "strip_prefix": "bazel-toolchains-1.0.1",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/1.0.1.tar.gz",
+            "https://github.com/bazelbuild/bazel-toolchains/releases/download/1.0.1/bazel-toolchains-1.0.1.tar.gz"
+        ]
+    },
+    "bazel_website": {
+        "build_file_content": "\nexports_files([\"_sass/style.scss\"])\n",
+        "name": "bazel_website",
+        "sha256": "a5f531dd1d62e6947dcfc279656ffc2fdf6f447c163914c5eabf7961b4cb6eb4",
+        "strip_prefix": "bazel-website-c174fa288aa079b68416d2ce2cc97268fa172f42",
+        "urls": [
+            "https://github.com/bazelbuild/bazel-website/archive/c174fa288aa079b68416d2ce2cc97268fa172f42.tar.gz"
+        ]
+    },
+    "bazelci_rules": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "bazelci_rules",
+        "name": "bazelci_rules",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "eca21884e6f66a88c358e580fd67a6b148d30ab57b1680f62a96c00f9bc6a07e",
+        "strip_prefix": "bazelci_rules-1.0.0",
+        "urls": [
+            "https://github.com/bazelbuild/continuous-integration/releases/download/rules-1.0.0/bazelci_rules-1.0.0.tar.gz"
+        ]
+    },
+    "bazelci_rules-1.0.0.tar.gz": {
+        "name": "bazelci_rules-1.0.0.tar.gz",
+        "sha256": "eca21884e6f66a88c358e580fd67a6b148d30ab57b1680f62a96c00f9bc6a07e",
+        "urls": [
+            "https://github.com/bazelbuild/continuous-integration/releases/download/rules-1.0.0/bazelci_rules-1.0.0.tar.gz"
+        ]
+    },
+    "boringssl": {
+        "generator_function": "grpc_deps",
+        "generator_name": "boringssl",
+        "name": "boringssl",
+        "sha256": "6f640262999cd1fb33cf705922e453e835d2d20f3f06fe0d77f6426c19257308",
+        "strip_prefix": "boringssl-fc44652a42b396e1645d5e72aba053349992136a",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/boringssl/archive/fc44652a42b396e1645d5e72aba053349992136a.tar.gz",
+            "https://github.com/google/boringssl/archive/fc44652a42b396e1645d5e72aba053349992136a.tar.gz"
+        ]
+    },
+    "build_bazel_apple_support": {
+        "generator_function": "grpc_deps",
+        "generator_name": "build_bazel_apple_support",
+        "name": "build_bazel_apple_support",
+        "sha256": "122ebf7fe7d1c8e938af6aeaee0efe788a3a2449ece5a8d6a428cb18d6f88033",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/apple_support/releases/download/0.7.1/apple_support.0.7.1.tar.gz",
+            "https://github.com/bazelbuild/apple_support/releases/download/0.7.1/apple_support.0.7.1.tar.gz"
+        ]
+    },
+    "build_bazel_rules_apple": {
+        "generator_function": "grpc_deps",
+        "generator_name": "build_bazel_rules_apple",
+        "name": "build_bazel_rules_apple",
+        "sha256": "bdc8e66e70b8a75da23b79f1f8c6207356df07d041d96d2189add7ee0780cf4e",
+        "strip_prefix": "rules_apple-b869b0d3868d78a1d4ffd866ccb304fb68aa12c3",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/rules_apple/archive/b869b0d3868d78a1d4ffd866ccb304fb68aa12c3.tar.gz",
+            "https://github.com/bazelbuild/rules_apple/archive/b869b0d3868d78a1d4ffd866ccb304fb68aa12c3.tar.gz"
+        ]
+    },
+    "build_bazel_rules_nodejs": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "build_bazel_rules_nodejs",
+        "name": "build_bazel_rules_nodejs",
+        "sha256": "f2194102720e662dbf193546585d705e645314319554c6ce7e47d8b59f459e9c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz",
+            "https://github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz"
+        ]
+    },
+    "com_envoyproxy_protoc_gen_validate": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_envoyproxy_protoc_gen_validate",
+        "name": "com_envoyproxy_protoc_gen_validate",
+        "sha256": "dd4962e4a9e8388a4fbc5c33e64d73bdb222f103e4bad40ca5535f81c2c606c2",
+        "strip_prefix": "protoc-gen-validate-59da36e59fef2267fc2b1849a05159e3ecdf24f3",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/envoyproxy/protoc-gen-validate/archive/59da36e59fef2267fc2b1849a05159e3ecdf24f3.tar.gz",
+            "https://github.com/envoyproxy/protoc-gen-validate/archive/59da36e59fef2267fc2b1849a05159e3ecdf24f3.tar.gz"
+        ]
+    },
+    "com_github_cares_cares": {
+        "build_file": "@com_github_grpc_grpc//third_party:cares/cares.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_cares_cares",
+        "name": "com_github_cares_cares",
+        "sha256": "e8c2751ddc70fed9dc6f999acd92e232d5846f009ee1674f8aee81f19b2b915a",
+        "strip_prefix": "c-ares-e982924acee7f7313b4baa4ee5ec000c5e373c30",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
+            "https://github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz"
+        ]
+    },
+    "com_github_google_benchmark": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_github_google_benchmark",
+        "name": "com_github_google_benchmark",
+        "sha256": "daa4a97e0547d76de300e325a49177b199f3689ce5a35e25d47696f7cb050f86",
+        "strip_prefix": "benchmark-73d4d5e8d6d449fc8663765a42aa8aeeee844489",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/benchmark/archive/73d4d5e8d6d449fc8663765a42aa8aeeee844489.tar.gz",
+            "https://github.com/google/benchmark/archive/73d4d5e8d6d449fc8663765a42aa8aeeee844489.tar.gz"
+        ]
+    },
+    "com_github_grpc_grpc": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "com_github_grpc_grpc",
+        "name": "com_github_grpc_grpc",
+        "patch_args": [
+            "-p1"
+        ],
+        "patches": [
+            "//third_party/grpc:grpc_1.41.0.patch"
+        ],
+        "sha256": "e5fb30aae1fa1cffa4ce00aa0bbfab908c0b899fcf0bbc30e268367d660d8656",
+        "strip_prefix": "grpc-1.41.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/grpc/grpc/archive/v1.41.0.tar.gz",
+            "https://github.com/grpc/grpc/archive/v1.41.0.tar.gz"
+        ]
+    },
+    "com_google_absl": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_google_absl",
+        "name": "com_google_absl",
+        "sha256": "35f22ef5cb286f09954b7cc4c85b5a3f6221c9d4df6b8c4a1e9d399555b366ee",
+        "strip_prefix": "abseil-cpp-997aaf3a28308eba1b9156aa35ab7bca9688e9f6",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/abseil/abseil-cpp/archive/997aaf3a28308eba1b9156aa35ab7bca9688e9f6.tar.gz",
+            "https://github.com/abseil/abseil-cpp/archive/997aaf3a28308eba1b9156aa35ab7bca9688e9f6.tar.gz"
+        ]
+    },
+    "com_google_googleapis": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_google_googleapis",
+        "name": "com_google_googleapis",
+        "sha256": "5bb6b0253ccf64b53d6c7249625a7e3f6c3bc6402abd52d3778bfa48258703a0",
+        "strip_prefix": "googleapis-2f9af297c84c55c8b871ba4495e01ade42476c92",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/googleapis/googleapis/archive/2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz",
+            "https://github.com/googleapis/googleapis/archive/2f9af297c84c55c8b871ba4495e01ade42476c92.tar.gz"
+        ]
+    },
+    "com_google_googletest": {
+        "name": "com_google_googletest",
+        "sha256": "9dc9157a9a1551ec7a7e43daea9a694a0bb5fb8bec81235d8a1e6ef64c716dcb",
+        "strip_prefix": "googletest-release-1.10.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/googletest/archive/release-1.10.0.tar.gz",
+            "https://github.com/google/googletest/archive/release-1.10.0.tar.gz"
+        ]
+    },
+    "com_google_protobuf": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "com_google_protobuf",
+        "name": "com_google_protobuf",
+        "patch_args": [
+            "-p1"
+        ],
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "patches": [
+            "//third_party/protobuf:3.13.0.patch"
+        ],
+        "sha256": "9b4ee22c250fe31b16f1a24d61467e40780a3fbb9b91c3b65be2a376ed913a1a",
+        "strip_prefix": "protobuf-3.13.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz",
+            "https://github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz"
+        ]
+    },
+    "com_google_testparameterinjector": {
+        "build_file_content": "\njava_library(\n    name = \"testparameterinjector\",\n    testonly = True,\n    srcs = glob([\"src/main/**/*.java\"]),\n    deps = [\n      \"@org_snakeyaml//:snakeyaml\",\n      \"@//third_party:auto_value\",\n      \"@//third_party:guava\",\n      \"@//third_party:junit4\",\n      \"@//third_party/protobuf:protobuf_java\",\n    ],\n    visibility = [\"//visibility:public\"],\n)\n",
+        "name": "com_google_testparameterinjector",
+        "sha256": "562a0e87eb413a7dcad29ebc8d578f6f97503473943585b051c1398a58189b06",
+        "strip_prefix": "TestParameterInjector-1.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/TestParameterInjector/archive/v1.0.tar.gz",
+            "https://github.com/google/TestParameterInjector/archive/v1.0.tar.gz"
+        ]
+    },
+    "com_googlesource_code_re2": {
+        "generator_function": "grpc_deps",
+        "generator_name": "com_googlesource_code_re2",
+        "name": "com_googlesource_code_re2",
+        "sha256": "9f385e146410a8150b6f4cb1a57eab7ec806ced48d427554b1e754877ff26c3e",
+        "strip_prefix": "re2-aecba11114cf1fac5497aeb844b6966106de3eb6",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz",
+            "https://github.com/google/re2/archive/aecba11114cf1fac5497aeb844b6966106de3eb6.tar.gz"
+        ]
+    },
+    "coverage_output_generator-v2.5.zip": {
+        "name": "coverage_output_generator-v2.5.zip",
+        "sha256": "cd14f1cb4559e4723e63b7e7b06d09fcc3bd7ba58d03f354cdff1439bd936a7d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.5.zip"
+        ]
+    },
+    "cython": {
+        "build_file": "@com_github_grpc_grpc//third_party:cython.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "cython",
+        "name": "cython",
+        "sha256": "e2e38e1f0572ca54d6085df3dec8b607d20e81515fb80215aed19c81e8fe2079",
+        "strip_prefix": "cython-0.29.21",
+        "urls": [
+            "https://github.com/cython/cython/archive/0.29.21.tar.gz"
+        ]
+    },
+    "desugar_jdk_libs": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "desugar_jdk_libs",
+        "name": "desugar_jdk_libs",
+        "sha256": "299452e6f4a4981b2e6d22357f7332713382a63e4c137f5fd6b89579f6d610cb",
+        "strip_prefix": "desugar_jdk_libs-5847d6a06302136d95a14b4cbd4b55a9c9f1436e",
+        "urls": [
+            "https://mirror.bazel.build/github.com/google/desugar_jdk_libs/archive/5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip",
+            "https://github.com/google/desugar_jdk_libs/archive/5847d6a06302136d95a14b4cbd4b55a9c9f1436e.zip"
+        ]
+    },
+    "e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz": {
+        "name": "e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
+        "sha256": "e8c2751ddc70fed9dc6f999acd92e232d5846f009ee1674f8aee81f19b2b915a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz",
+            "https://github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz"
+        ]
+    },
+    "enum34": {
+        "build_file": "@com_github_grpc_grpc//third_party:enum34.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "enum34",
+        "name": "enum34",
+        "sha256": "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1",
+        "strip_prefix": "enum34-1.1.6",
+        "urls": [
+            "https://files.pythonhosted.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz"
+        ]
+    },
+    "envoy_api": {
+        "generator_function": "grpc_deps",
+        "generator_name": "envoy_api",
+        "name": "envoy_api",
+        "sha256": "330f2f9c938fc038b7ab438919b692d30cdfba3cf596e7824410f88da16c30b5",
+        "strip_prefix": "data-plane-api-2f0d081fab0b0823f088c6e368f40e1992f46fcd",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/envoyproxy/data-plane-api/archive/2f0d081fab0b0823f088c6e368f40e1992f46fcd.tar.gz",
+            "https://github.com/envoyproxy/data-plane-api/archive/2f0d081fab0b0823f088c6e368f40e1992f46fcd.tar.gz"
+        ]
+    },
+    "futures": {
+        "build_file": "@com_github_grpc_grpc//third_party:futures.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "futures",
+        "name": "futures",
+        "sha256": "7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794",
+        "strip_prefix": "futures-3.3.0",
+        "urls": [
+            "https://files.pythonhosted.org/packages/47/04/5fc6c74ad114032cd2c544c575bffc17582295e9cd6a851d6026ab4b2c00/futures-3.3.0.tar.gz"
+        ]
+    },
+    "io_bazel_rules_go": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_bazel_rules_go",
+        "name": "io_bazel_rules_go",
+        "sha256": "dbf5a9ef855684f84cac2e7ae7886c5a001d4f66ae23f6904da0faaaef0d61fc",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.24.11/rules_go-v0.24.11.tar.gz",
+            "https://github.com/bazelbuild/rules_go/releases/download/v0.24.11/rules_go-v0.24.11.tar.gz"
+        ]
+    },
+    "io_bazel_rules_python": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_bazel_rules_python",
+        "name": "io_bazel_rules_python",
+        "sha256": "aa96a691d3a8177f3215b14b0edc9641787abaaa30363a080165d06ab65e1161",
+        "url": "https://github.com/bazelbuild/rules_python/releases/download/0.0.1/rules_python-0.0.1.tar.gz"
+    },
+    "io_bazel_rules_sass": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "io_bazel_rules_sass",
+        "name": "io_bazel_rules_sass",
+        "sha256": "c78be58f5e0a29a04686b628cf54faaee0094322ae0ac99da5a8a8afca59a647",
+        "strip_prefix": "rules_sass-1.25.0",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/1.25.0.zip",
+            "https://github.com/bazelbuild/rules_sass/archive/1.25.0.zip"
+        ]
+    },
+    "io_bazel_skydoc": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "io_bazel_skydoc",
+        "name": "io_bazel_skydoc",
+        "sha256": "5a725b777976b77aa122b707d1b6f0f39b6020f66cd427bb111a585599c857b1",
+        "strip_prefix": "stardoc-1ef781ced3b1443dca3ed05dec1989eca1a4e1cd",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz",
+            "https://github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.tar.gz"
+        ]
+    },
+    "io_opencensus_cpp": {
+        "generator_function": "grpc_deps",
+        "generator_name": "io_opencensus_cpp",
+        "name": "io_opencensus_cpp",
+        "sha256": "90d6fafa8b1a2ea613bf662731d3086e1c2ed286f458a95c81744df2dbae41b1",
+        "strip_prefix": "opencensus-cpp-c9a4da319bc669a772928ffc55af4a61be1a1176",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/census-instrumentation/opencensus-cpp/archive/c9a4da319bc669a772928ffc55af4a61be1a1176.tar.gz",
+            "https://github.com/census-instrumentation/opencensus-cpp/archive/c9a4da319bc669a772928ffc55af4a61be1a1176.tar.gz"
+        ]
+    },
+    "java_tools-v11.6.zip": {
+        "name": "java_tools-v11.6.zip",
+        "sha256": "a7ac5922ee01e8b8fcb546ffc264ef314d0a0c679328b7fa4c432e5f54a86067",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.6/java_tools-v11.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.6/java_tools-v11.6.zip"
+        ]
+    },
+    "java_tools_darwin-v11.6.zip": {
+        "name": "java_tools_darwin-v11.6.zip",
+        "sha256": "f17ee54582b61f1ebd84c8fa2c54df796914cfbaac3cb821fb1286b55b080bc0",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.6/java_tools_darwin-v11.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.6/java_tools_darwin-v11.6.zip"
+        ]
+    },
+    "java_tools_langtools_javac11": {
+        "name": "java_tools_langtools_javac11",
+        "sha256": "cf0814fa002ef3d794582bb086516d8c9ed0958f83f19799cdb08949019fe4c7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/jdk_langtools/langtools_jdk11_v2.zip"
+        ]
+    },
+    "java_tools_linux-v11.6.zip": {
+        "name": "java_tools_linux-v11.6.zip",
+        "sha256": "15da4f84a7d39cd179acf3035d9def638eea6ba89a0ed8f4e8a8e6e1d6c8e328",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.6/java_tools_linux-v11.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.6/java_tools_linux-v11.6.zip"
+        ]
+    },
+    "java_tools_windows-v11.6.zip": {
+        "name": "java_tools_windows-v11.6.zip",
+        "sha256": "939f9d91f0df02851bbad8f5b1d26d24011329394cafe5668c1234e31ac2a1f7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.6/java_tools_windows-v11.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.6/java_tools_windows-v11.6.zip"
+        ]
+    },
+    "jekyll_tree_0_17_1": {
+        "name": "jekyll_tree_0_17_1",
+        "sha256": "02256ddd20eeaf70cf8fcfe9b2cdddd7be87aedd5848d549474fb0358e0031d3",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.17.1.tar"
+        ]
+    },
+    "jekyll_tree_0_17_2": {
+        "name": "jekyll_tree_0_17_2",
+        "sha256": "13b35dd309a0d52f0a2518a1193f42729c75255f5fae40cea68e4d4224bfaa2e",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.17.2.tar"
+        ]
+    },
+    "jekyll_tree_0_18_1": {
+        "name": "jekyll_tree_0_18_1",
+        "sha256": "98b77f48e37a50fc6f83100bf53f661e10732bb3ddbc226e02d0225cb7a9a7d8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.18.1.tar"
+        ]
+    },
+    "jekyll_tree_0_19_1": {
+        "name": "jekyll_tree_0_19_1",
+        "sha256": "ec892c59ba18bb8de1f9ae2bde937db144e45f28d6d1c32a2cee847ee81b134d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.19.1.tar"
+        ]
+    },
+    "jekyll_tree_0_19_2": {
+        "name": "jekyll_tree_0_19_2",
+        "sha256": "3c2d9f21ec2fd1c0b8a310f6eb6043027c838810cdfc2457d4346a0e5cdcaa7a",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.19.2.tar"
+        ]
+    },
+    "jekyll_tree_0_20_0": {
+        "name": "jekyll_tree_0_20_0",
+        "sha256": "bb79a63810bf1b0aa1f89bd3bbbeb4a547a30ab9af70c9be656cc6866f4b015b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.20.0.tar"
+        ]
+    },
+    "jekyll_tree_0_21_0": {
+        "name": "jekyll_tree_0_21_0",
+        "sha256": "23ec39c0138d358c544151e5c81586716d5d1c6124f10a742bead70516e6eb93",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.21.0.tar"
+        ]
+    },
+    "jekyll_tree_0_22_0": {
+        "name": "jekyll_tree_0_22_0",
+        "sha256": "bec5cfaa5560e082e41e33bde276cf93f0f7bcfd2914a3e868f921df8b3ab725",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.22.0.tar"
+        ]
+    },
+    "jekyll_tree_0_23_0": {
+        "name": "jekyll_tree_0_23_0",
+        "sha256": "56c80fcf49dc606fab8ed5e737a7409e9a486585b7b98673be69b5a4984dd774",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.23.0.tar"
+        ]
+    },
+    "jekyll_tree_0_24_0": {
+        "name": "jekyll_tree_0_24_0",
+        "sha256": "988fa567906a73e50d3669909285187ef88c76ecd4aa277f4d1f355fc06a90c8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.24.0.tar"
+        ]
+    },
+    "jekyll_tree_0_25_0": {
+        "name": "jekyll_tree_0_25_0",
+        "sha256": "e8ab61c047225e808982a564ecd692fd63bd243dccc88a8768ed069a5362a685",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.25.0.tar"
+        ]
+    },
+    "jekyll_tree_0_26_0": {
+        "name": "jekyll_tree_0_26_0",
+        "sha256": "3907dfc6fb27d246e67877e553e8951fac239bb49f2dec7e06b6b09cb0b98b8d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.26.0.tar"
+        ]
+    },
+    "jekyll_tree_0_27_0": {
+        "name": "jekyll_tree_0_27_0",
+        "sha256": "97e2633fefee389daade775da43907aa68699b32212f4e48cb095abe18aa7e65",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.27.0.tar"
+        ]
+    },
+    "jekyll_tree_0_28_0": {
+        "name": "jekyll_tree_0_28_0",
+        "sha256": "64b3fc267fb1f4c56345d96f0ad9f07a2efe43bd15361f818368849cf941b3b7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.28.0.tar"
+        ]
+    },
+    "jekyll_tree_0_29_0": {
+        "name": "jekyll_tree_0_29_0",
+        "sha256": "99d7a6bf9ef0145c59c54b4319fb31cb855681782080a5490909c4a5463c7215",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.29.0.tar"
+        ]
+    },
+    "jekyll_tree_0_29_1": {
+        "name": "jekyll_tree_0_29_1",
+        "sha256": "cf0a517f1660a7c4fd26a7ef6f3594bbefcf2b670bc0ed610bf3bb6ec3a9fdc3",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-0.29.1.tar"
+        ]
+    },
+    "jekyll_tree_1_0_0": {
+        "name": "jekyll_tree_1_0_0",
+        "sha256": "61ef65c738a8cd65059f58f2ee5f7eef493136ac4d5e5c3464787d17043febdf",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-1.0.0.tar"
+        ]
+    },
+    "jekyll_tree_1_1_0": {
+        "name": "jekyll_tree_1_1_0",
+        "sha256": "46d82c9249896903ee6be2295fc52a1346a9ee82f61f89b8a2181232c3bd999b",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-1.1.0.tar"
+        ]
+    },
+    "jekyll_tree_1_2_0": {
+        "name": "jekyll_tree_1_2_0",
+        "sha256": "d402a8391ca2624673f124ff42ba8d0d40d4139e5d23111f3995dc6c5f70f63d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-1.2.0.tar"
+        ]
+    },
+    "jekyll_tree_2_0_0": {
+        "name": "jekyll_tree_2_0_0",
+        "sha256": "7d7c424ede503856c61b645d8fdc2513ec6ea8600d76c5e87c45a9a45c16de3e",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-2.0.0.tar"
+        ]
+    },
+    "jekyll_tree_2_1_0": {
+        "name": "jekyll_tree_2_1_0",
+        "sha256": "b0fd257b1d6b1b05705742d55a13b9a20d3e99f49c89334750c872d620e5b88f",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-2.1.0.tar"
+        ]
+    },
+    "jekyll_tree_2_2_0": {
+        "name": "jekyll_tree_2_2_0",
+        "sha256": "4c1506786ab98df8039ec7354b82da7b586b2ae4ab7f7e7d08f3caf74ff28e3d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-2.2.0.tar"
+        ]
+    },
+    "jekyll_tree_3_0_0": {
+        "name": "jekyll_tree_3_0_0",
+        "sha256": "bd1096ad609c253fa7b1473edf4a3aa51f36243e188dbb62c68d8ed4aca2419d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.0.0.tar"
+        ]
+    },
+    "jekyll_tree_3_1_0": {
+        "name": "jekyll_tree_3_1_0",
+        "sha256": "f9d2e22e24af426d6c9de163d91abe6d8af7eb1eabb1d7ff5e9cf4bededf465a",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.1.0-807b377.tar"
+        ]
+    },
+    "jekyll_tree_3_2_0": {
+        "name": "jekyll_tree_3_2_0",
+        "sha256": "6cff8654e739a0c3062183a5a6cc82fcf9a77323051f8c007866d7f4101052a6",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.2.0.tar"
+        ]
+    },
+    "jekyll_tree_3_3_0": {
+        "name": "jekyll_tree_3_3_0",
+        "sha256": "36b81e8ddf4f3caccf41acc82d9e49f000c1be9e92c9cc82793d60ff70636176",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.3.0.tar"
+        ]
+    },
+    "jekyll_tree_3_4_0": {
+        "name": "jekyll_tree_3_4_0",
+        "sha256": "af82e775d911135bcff76e500bb003c4a9fccb949f8ddf4d93c58eca195bf5e8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.4.0.tar"
+        ]
+    },
+    "jekyll_tree_3_5_0": {
+        "name": "jekyll_tree_3_5_0",
+        "sha256": "aa96cbad14cfab0b422d1d17eac3107a75eb05854d40ab4f1379a6fc87b2e1f8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.5.0.tar"
+        ]
+    },
+    "jekyll_tree_3_5_1": {
+        "name": "jekyll_tree_3_5_1",
+        "sha256": "1c949ba8da353c93c74a70638e5cb321ea1cd5582eda1b6ad88c6d2d0b569f2f",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.5.1.tar"
+        ]
+    },
+    "jekyll_tree_3_6_0": {
+        "name": "jekyll_tree_3_6_0",
+        "sha256": "1b7a16a2098ca0c290c208a11db886e950d6c523b2cac2d0a0cba4a04aa832f3",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.6.0.tar"
+        ]
+    },
+    "jekyll_tree_3_7_0": {
+        "name": "jekyll_tree_3_7_0",
+        "sha256": "a534d37ef3867c92fae8692852f92820a34f63a5f9092bbbec6505c0f69d8094",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-3.7.0.tar"
+        ]
+    },
+    "jekyll_tree_4_0_0": {
+        "name": "jekyll_tree_4_0_0",
+        "sha256": "9d8e350a17b85624d8d78291d440e05f6ba8af493c1ccb846d0493579dade1b6",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-4.0.0.tar"
+        ]
+    },
+    "jekyll_tree_4_1_0": {
+        "name": "jekyll_tree_4_1_0",
+        "sha256": "9ed45a322906029d161f5514371841fbec214c63b9517fccb225c8670ebb482a",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-4.1.0.tar"
+        ]
+    },
+    "jekyll_tree_4_2_0": {
+        "name": "jekyll_tree_4_2_0",
+        "sha256": "1188fc6c3354f85741bacbb2bc7dab6bbfd1d2f44475846293ff232fb01709b8",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-4.2.0.tar"
+        ]
+    },
+    "jekyll_tree_4_2_1": {
+        "name": "jekyll_tree_4_2_1",
+        "sha256": "b767b7aa949f96b602257587add3be38acbead03bf919fe871397bc80d97f8b2",
+        "urls": [
+            "https://mirror.bazel.build/bazel_versioned_docs/jekyll-tree-4.2.1.tar"
+        ]
+    },
+    "opencensus_proto": {
+        "generator_function": "grpc_deps",
+        "generator_name": "opencensus_proto",
+        "name": "opencensus_proto",
+        "sha256": "b7e13f0b4259e80c3070b583c2f39e53153085a6918718b1c710caf7037572b0",
+        "strip_prefix": "opencensus-proto-0.3.0/src",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/census-instrumentation/opencensus-proto/archive/v0.3.0.tar.gz",
+            "https://github.com/census-instrumentation/opencensus-proto/archive/v0.3.0.tar.gz"
+        ]
+    },
+    "openjdk11_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_darwin_aarch64_archive",
+        "sha256": "e908a0b4c0da08d41c3e19230f819b364ff2e5f1dafd62d2cf991a85a34d3a17",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk11_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_darwin_archive",
+        "sha256": "0b8c8b7cf89c7c55b7e2239b47201d704e8d2170884875b00f3103cf0662d6d7",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk11_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_linux_archive",
+        "sha256": "b8e8a63b79bc312aa90f3558edbea59e71495ef1a9c340e38900dd28a1c579f3",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk11_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk11_windows_archive",
+        "sha256": "42ae65e75d615a3f06a674978e1fa85fdf078cad94e553fee3e779b2b42bb015",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-win_x64.zip"
+        ]
+    },
+    "openjdk15_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_darwin_aarch64_archive",
+        "sha256": "2613c3f15eef6b6ecd0fd102da92282b985e4573905dc902f1783d8059c1efc5",
+        "strip_prefix": "zulu15.29.15-ca-jdk15.0.2-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk15_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_darwin_archive",
+        "sha256": "f80b2e0512d9d8a92be24497334c974bfecc8c898fc215ce0e76594f00437482",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk15_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_linux_archive",
+        "sha256": "0a38f1138c15a4f243b75eb82f8ef40855afcc402e3c2a6de97ce8235011b1ad",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk15_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk15_windows_archive",
+        "sha256": "f535a530151e6c20de8a3078057e332b08887cb3ba1a4735717357e72765cad6",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip"
+        ]
+    },
+    "openjdk16_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk16_darwin_aarch64_archive",
+        "sha256": "c92131e83bc71474850e667bc4e05fca33662b8feb009a0547aa14e76b40e890",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk16_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk16_darwin_archive",
+        "sha256": "6d47ef22dc56ce1f5a102ed39e21d9a97320f0bb786818e2c686393109d79bc5",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk16_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk16_linux_archive",
+        "sha256": "236b5ea97aff3cb312e743848d7efa77faf305170e41371a732ca93c1b797665",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk16_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk16_windows_archive",
+        "sha256": "6cbf98ada27476526a5f6dff79fd5f2c15e2f671818e503bdf741eb6c8fed3d4",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-win_x64.zip"
+        ]
+    },
+    "openjdk17_darwin_aarch64_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk17_darwin_aarch64_archive",
+        "sha256": "6b17f01f767ee7abf4704149ca4d86423aab9b16b68697b7d36e9b616846a8b0",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk17_darwin_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk17_darwin_archive",
+        "sha256": "6029b1fe6853cecad22ab99ac0b3bb4fb8c903dd2edefa91c3abc89755bbd47d",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk17_linux_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk17_linux_archive",
+        "sha256": "37c4f8e48536cceae8c6c20250d6c385e176972532fd35759fa7d6015c965f56",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk17_windows_archive": {
+        "build_file_content": "\njava_runtime(name = 'runtime', srcs =  glob(['**']), visibility = ['//visibility:public'])\nexports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])\n",
+        "name": "openjdk17_windows_archive",
+        "sha256": "f4437011239f3f0031c794bb91c02a6350bc941d4196bdd19c9f157b491815a3",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-win_x64.zip"
+        ]
+    },
+    "openjdk_linux": {
+        "downloaded_file_path": "zulu-linux.tar.gz",
+        "name": "openjdk_linux",
+        "sha256": "65bfe4e0ffa74a680ee4410db46b17e30cd9397b664a92a886599fe1f3530969",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64-linux_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689070.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64": {
+        "downloaded_file_path": "zulu-linux-aarch64.tar.gz",
+        "name": "openjdk_linux_aarch64",
+        "sha256": "6b245793087300db3ee82ab0d165614f193a73a60f2f011e347756c1e6ca5bac",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581690750.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_minimal": {
+        "downloaded_file_path": "zulu-linux-aarch64-minimal.tar.gz",
+        "name": "openjdk_linux_aarch64_minimal",
+        "sha256": "06f6520a877704c77614bcfc4f846cc7cbcbf5eaad149bf7f19f4f16e285c9de",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581690750.tar.gz"
+        ]
+    },
+    "openjdk_linux_aarch64_vanilla": {
+        "downloaded_file_path": "zulu-linux-aarch64-vanilla.tar.gz",
+        "name": "openjdk_linux_aarch64_vanilla",
+        "sha256": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"
+        ]
+    },
+    "openjdk_linux_minimal": {
+        "downloaded_file_path": "zulu-linux-minimal.tar.gz",
+        "name": "openjdk_linux_minimal",
+        "sha256": "91f7d52f695c681d4e21499b4319d548aadef249a6b3053e306308992e1e29ae",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689068.tar.gz"
+        ]
+    },
+    "openjdk_linux_ppc64le_vanilla": {
+        "downloaded_file_path": "adoptopenjdk-ppc64le-vanilla.tar.gz",
+        "name": "openjdk_linux_ppc64le_vanilla",
+        "sha256": "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "openjdk_linux_s390x_vanilla": {
+        "downloaded_file_path": "adoptopenjdk-s390x-vanilla.tar.gz",
+        "name": "openjdk_linux_s390x_vanilla",
+        "sha256": "d9b72e87a1d3ebc0c9552f72ae5eb150fffc0298a7cb841f1ce7bfc70dcd1059",
+        "urls": [
+            "https://mirror.bazel.build/github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "openjdk_linux_vanilla": {
+        "downloaded_file_path": "zulu-linux-vanilla.tar.gz",
+        "name": "openjdk_linux_vanilla",
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64": {
+        "downloaded_file_path": "zulu-macos-aarch64.tar.gz",
+        "name": "openjdk_macos_aarch64",
+        "sha256": "a900ef793cb34b03ac5d93ea2f67291b6842e99d500934e19393a8d8f9bfa6ff",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.45.27-ca-jdk11.0.10/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64-allmodules-1611665569.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64_minimal": {
+        "downloaded_file_path": "zulu-macos-aarch64-minimal.tar.gz",
+        "name": "openjdk_macos_aarch64_minimal",
+        "sha256": "f4f606926e6deeaa8b8397e299313d9df87642fe464b0ccf1ed0432aeb00640b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.45.27-ca-jdk11.0.10/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64-minimal-1611665562.tar.gz"
+        ]
+    },
+    "openjdk_macos_aarch64_vanilla": {
+        "downloaded_file_path": "zulu-macos-aarch64-vanilla.tar.gz",
+        "name": "openjdk_macos_aarch64_vanilla",
+        "sha256": "3dcc636e64ae58b922269c2dc9f20f6f967bee90e3f6847d643c4a566f1e8d8a",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64": {
+        "downloaded_file_path": "zulu-macos.tar.gz",
+        "name": "openjdk_macos_x86_64",
+        "sha256": "8e283cfd23c7555be8e17295ed76eb8f00324c88ab904b8de37bbe08f90e569b",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689066.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64_minimal": {
+        "downloaded_file_path": "zulu-macos-minimal.tar.gz",
+        "name": "openjdk_macos_x86_64_minimal",
+        "sha256": "1bacb1c07035d4066d79f0b65b4ea0ebd1954f3662bdfe3618da382ac8fd23a6",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689063.tar.gz"
+        ]
+    },
+    "openjdk_macos_x86_64_vanilla": {
+        "downloaded_file_path": "zulu-macos-vanilla.tar.gz",
+        "name": "openjdk_macos_x86_64_vanilla",
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "openjdk_win": {
+        "downloaded_file_path": "zulu-win.zip",
+        "name": "openjdk_win",
+        "sha256": "8e1604b3a27dcf639bc6d1a73103f1211848139e4cceb081d0a74a99e1e6f995",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64-allmodules-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689080.zip"
+        ]
+    },
+    "openjdk_win_minimal": {
+        "downloaded_file_path": "zulu-win-minimal.zip",
+        "name": "openjdk_win_minimal",
+        "sha256": "b90a713c9c2d9ea23cad44d2c2dfcc9af22faba9bde55dedc1c3bb9f556ac1ae",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64-minimal-b23d4e05466f2aa1fdcd72d3d3a8e962206b64bf-1581689080.zip"
+        ]
+    },
+    "openjdk_win_vanilla": {
+        "downloaded_file_path": "zulu-win-vanilla.zip",
+        "name": "openjdk_win_vanilla",
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "org_snakeyaml": {
+        "build_file_content": "\njava_library(\n    name = \"snakeyaml\",\n    testonly = True,\n    srcs = glob([\"src/main/**/*.java\"]),\n    visibility = [\"@com_google_testparameterinjector//:__pkg__\"],\n)\n",
+        "name": "org_snakeyaml",
+        "sha256": "fd0e0cc6c5974fc8f08be3a15fb4a59954c7dd958b5b68186a803de6420b6e40",
+        "strip_prefix": "asomov-snakeyaml-b28f0b4d87c6",
+        "urls": [
+            "https://mirror.bazel.build/bitbucket.org/asomov/snakeyaml/get/snakeyaml-1.28.tar.gz"
+        ]
+    },
+    "platforms": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "platforms",
+        "name": "platforms",
+        "sha256": "079945598e4b6cc075846f7fd6a9d0857c33a7afc0de868c2ccb96405225135d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.4/platforms-0.0.4.tar.gz",
+            "https://github.com/bazelbuild/platforms/releases/download/0.0.4/platforms-0.0.4.tar.gz"
+        ]
+    },
+    "platforms-0.0.4.tar.gz": {
+        "name": "platforms-0.0.4.tar.gz",
+        "sha256": "079945598e4b6cc075846f7fd6a9d0857c33a7afc0de868c2ccb96405225135d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.4/platforms-0.0.4.tar.gz",
+            "https://github.com/bazelbuild/platforms/releases/download/0.0.4/platforms-0.0.4.tar.gz"
+        ]
+    },
+    "remote_coverage_tools": {
+        "name": "remote_coverage_tools",
+        "sha256": "cd14f1cb4559e4723e63b7e7b06d09fcc3bd7ba58d03f354cdff1439bd936a7d",
+        "urls": [
+            "https://mirror.bazel.build/bazel_coverage_output_generator/releases/coverage_output_generator-v2.5.zip"
+        ]
+    },
+    "remote_java_tools_darwin": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_darwin",
+        "name": "remote_java_tools_darwin",
+        "sha256": "d15b05d2061382748f779dc566537ea567a46bcba6fa34b56d7cb6e6d668adab",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_darwin-v10.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.6/java_tools_javac11_darwin-v10.6.zip"
+        ]
+    },
+    "remote_java_tools_darwin_for_testing": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_darwin_for_testing",
+        "name": "remote_java_tools_darwin_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "f17ee54582b61f1ebd84c8fa2c54df796914cfbaac3cb821fb1286b55b080bc0",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.6/java_tools_darwin-v11.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.6/java_tools_darwin-v11.6.zip"
+        ]
+    },
+    "remote_java_tools_for_testing": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_for_testing",
+        "name": "remote_java_tools_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a7ac5922ee01e8b8fcb546ffc264ef314d0a0c679328b7fa4c432e5f54a86067",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.6/java_tools-v11.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.6/java_tools-v11.6.zip"
+        ]
+    },
+    "remote_java_tools_linux": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_linux",
+        "name": "remote_java_tools_linux",
+        "sha256": "085c0ba53ba764e81d4c195524f3c596085cbf9cdc01dd8e6d2ae677e726af35",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_linux-v10.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.6/java_tools_javac11_linux-v10.6.zip"
+        ]
+    },
+    "remote_java_tools_linux_for_testing": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_linux_for_testing",
+        "name": "remote_java_tools_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "15da4f84a7d39cd179acf3035d9def638eea6ba89a0ed8f4e8a8e6e1d6c8e328",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.6/java_tools_linux-v11.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.6/java_tools_linux-v11.6.zip"
+        ]
+    },
+    "remote_java_tools_test": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_test",
+        "name": "remote_java_tools_test",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a7ac5922ee01e8b8fcb546ffc264ef314d0a0c679328b7fa4c432e5f54a86067",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.6/java_tools-v11.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.6/java_tools-v11.6.zip"
+        ]
+    },
+    "remote_java_tools_test_darwin": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_test_darwin",
+        "name": "remote_java_tools_test_darwin",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "f17ee54582b61f1ebd84c8fa2c54df796914cfbaac3cb821fb1286b55b080bc0",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.6/java_tools_darwin-v11.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.6/java_tools_darwin-v11.6.zip"
+        ]
+    },
+    "remote_java_tools_test_linux": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_test_linux",
+        "name": "remote_java_tools_test_linux",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "15da4f84a7d39cd179acf3035d9def638eea6ba89a0ed8f4e8a8e6e1d6c8e328",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.6/java_tools_linux-v11.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.6/java_tools_linux-v11.6.zip"
+        ]
+    },
+    "remote_java_tools_test_windows": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_test_windows",
+        "name": "remote_java_tools_test_windows",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "939f9d91f0df02851bbad8f5b1d26d24011329394cafe5668c1234e31ac2a1f7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.6/java_tools_windows-v11.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.6/java_tools_windows-v11.6.zip"
+        ]
+    },
+    "remote_java_tools_windows": {
+        "generator_function": "maybe",
+        "generator_name": "remote_java_tools_windows",
+        "name": "remote_java_tools_windows",
+        "sha256": "873f1e53d1fa9c8e46b717673816cd822bb7acc474a194a18ff849fd8fa6ff00",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_windows-v10.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/javac11_v10.6/java_tools_javac11_windows-v10.6.zip"
+        ]
+    },
+    "remote_java_tools_windows_for_testing": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "remote_java_tools_windows_for_testing",
+        "name": "remote_java_tools_windows_for_testing",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "939f9d91f0df02851bbad8f5b1d26d24011329394cafe5668c1234e31ac2a1f7",
+        "urls": [
+            "https://mirror.bazel.build/bazel_java_tools/releases/java/v11.6/java_tools_windows-v11.6.zip",
+            "https://github.com/bazelbuild/java_tools/releases/download/java_v11.6/java_tools_windows-v11.6.zip"
+        ]
+    },
+    "remotejdk11_linux": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux",
+        "name": "remotejdk11_linux",
+        "sha256": "360626cc19063bc411bfed2914301b908a8f77a7919aaea007a977fa8fb3cde1",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_aarch64": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_aarch64",
+        "name": "remotejdk11_linux_aarch64",
+        "sha256": "a452f1b9682d9f83c1c14e54d1446e1c51b5173a3a05dcb013d380f9508562e4",
+        "strip_prefix": "zulu11.37.48-ca-jdk11.0.6-linux_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.48-ca-jdk11.0.6/zulu11.37.48-ca-jdk11.0.6-linux_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "61254688067454d3ccf0ef25993b5dcab7b56c8129e53b73566c28a8dd4d48fb",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-linux_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-linux_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "b8e8a63b79bc312aa90f3558edbea59e71495ef1a9c340e38900dd28a1c579f3",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_ppc64le": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_ppc64le",
+        "name": "remotejdk11_linux_ppc64le",
+        "sha256": "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_ppc64le_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_ppc64le_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_s390x": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_linux_s390x",
+        "name": "remotejdk11_linux_s390x",
+        "sha256": "d9b72e87a1d3ebc0c9552f72ae5eb150fffc0298a7cb841f1ce7bfc70dcd1059",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_linux_s390x_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_linux_s390x_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d9b72e87a1d3ebc0c9552f72ae5eb150fffc0298a7cb841f1ce7bfc70dcd1059",
+        "strip_prefix": "jdk-11.0.7+10",
+        "urls": [
+            "https://mirror.bazel.build/github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz",
+            "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.7_10.tar.gz"
+        ]
+    },
+    "remotejdk11_macos": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_macos",
+        "name": "remotejdk11_macos",
+        "sha256": "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_macos_aarch64": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_macos_aarch64",
+        "name": "remotejdk11_macos_aarch64",
+        "sha256": "3dcc636e64ae58b922269c2dc9f20f6f967bee90e3f6847d643c4a566f1e8d8a",
+        "strip_prefix": "zulu11.45.27-ca-jdk11.0.10-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.45.27-ca-jdk11.0.10-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "e908a0b4c0da08d41c3e19230f819b364ff2e5f1dafd62d2cf991a85a34d3a17",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk11_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "0b8c8b7cf89c7c55b7e2239b47201d704e8d2170884875b00f3103cf0662d6d7",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk11_win": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk11_win",
+        "name": "remotejdk11_win",
+        "sha256": "a9695617b8374bfa171f166951214965b1d1d08f43218db9a2a780b71c665c18",
+        "strip_prefix": "zulu11.37.17-ca-jdk11.0.6-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip"
+        ]
+    },
+    "remotejdk11_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk11_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "42ae65e75d615a3f06a674978e1fa85fdf078cad94e553fee3e779b2b42bb015",
+        "strip_prefix": "zulu11.50.19-ca-jdk11.0.12-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-win_x64.zip"
+        ]
+    },
+    "remotejdk14_linux": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk14_linux",
+        "name": "remotejdk14_linux",
+        "sha256": "48bb8947034cd079ad1ef83335e7634db4b12a26743a0dc314b6b861480777aa",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk14_macos": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk14_macos",
+        "name": "remotejdk14_macos",
+        "sha256": "088bd4d0890acc9f032b738283bf0f26b2a55c50b02d1c8a12c451d8ddf080dd",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk14_win": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk14_win",
+        "name": "remotejdk14_win",
+        "sha256": "9cb078b5026a900d61239c866161f0d9558ec759aa15c5b4c7e905370e868284",
+        "strip_prefix": "zulu14.28.21-ca-jdk14.0.1-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-win_x64.zip"
+        ]
+    },
+    "remotejdk15_linux": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk15_linux",
+        "name": "remotejdk15_linux",
+        "sha256": "0a38f1138c15a4f243b75eb82f8ef40855afcc402e3c2a6de97ce8235011b1ad",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk15_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "0a38f1138c15a4f243b75eb82f8ef40855afcc402e3c2a6de97ce8235011b1ad",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk15_macos": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk15_macos",
+        "name": "remotejdk15_macos",
+        "sha256": "f80b2e0512d9d8a92be24497334c974bfecc8c898fc215ce0e76594f00437482",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk15_macos_aarch64": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk15_macos_aarch64",
+        "name": "remotejdk15_macos_aarch64",
+        "sha256": "2613c3f15eef6b6ecd0fd102da92282b985e4573905dc902f1783d8059c1efc5",
+        "strip_prefix": "zulu15.29.15-ca-jdk15.0.2-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk15_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "2613c3f15eef6b6ecd0fd102da92282b985e4573905dc902f1783d8059c1efc5",
+        "strip_prefix": "zulu15.29.15-ca-jdk15.0.2-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.29.15-ca-jdk15.0.2-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk15_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "f80b2e0512d9d8a92be24497334c974bfecc8c898fc215ce0e76594f00437482",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk15_win": {
+        "build_file": "@bazel_tools//tools/jdk:jdk.BUILD",
+        "generator_function": "maybe",
+        "generator_name": "remotejdk15_win",
+        "name": "remotejdk15_win",
+        "sha256": "f535a530151e6c20de8a3078057e332b08887cb3ba1a4735717357e72765cad6",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip"
+        ]
+    },
+    "remotejdk15_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk15_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "f535a530151e6c20de8a3078057e332b08887cb3ba1a4735717357e72765cad6",
+        "strip_prefix": "zulu15.27.17-ca-jdk15.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu15.27.17-ca-jdk15.0.0-win_x64.zip"
+        ]
+    },
+    "remotejdk16_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk16_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "236b5ea97aff3cb312e743848d7efa77faf305170e41371a732ca93c1b797665",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk16_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk16_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "c92131e83bc71474850e667bc4e05fca33662b8feb009a0547aa14e76b40e890",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk16_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk16_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "6d47ef22dc56ce1f5a102ed39e21d9a97320f0bb786818e2c686393109d79bc5",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk16_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk16_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "6cbf98ada27476526a5f6dff79fd5f2c15e2f671818e503bdf741eb6c8fed3d4",
+        "strip_prefix": "zulu16.28.11-ca-jdk16.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu16.28.11-ca-jdk16.0.0-win_x64.zip"
+        ]
+    },
+    "remotejdk17_linux_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk17_linux_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "37c4f8e48536cceae8c6c20250d6c385e176972532fd35759fa7d6015c965f56",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-linux_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-linux_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-linux_x64.tar.gz"
+        ]
+    },
+    "remotejdk17_macos_aarch64_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk17_macos_aarch64_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "6b17f01f767ee7abf4704149ca4d86423aab9b16b68697b7d36e9b616846a8b0",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-macosx_aarch64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_aarch64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_aarch64.tar.gz"
+        ]
+    },
+    "remotejdk17_macos_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk17_macos_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "6029b1fe6853cecad22ab99ac0b3bb4fb8c903dd2edefa91c3abc89755bbd47d",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-macosx_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_x64.tar.gz",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-macosx_x64.tar.gz"
+        ]
+    },
+    "remotejdk17_win_for_testing": {
+        "build_file": "@local_jdk//:BUILD.bazel",
+        "name": "remotejdk17_win_for_testing",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "f4437011239f3f0031c794bb91c02a6350bc941d4196bdd19c9f157b491815a3",
+        "strip_prefix": "zulu17.28.13-ca-jdk17.0.0-win_x64",
+        "urls": [
+            "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-win_x64.zip",
+            "https://cdn.azul.com/zulu/bin/zulu17.28.13-ca-jdk17.0.0-win_x64.zip"
+        ]
+    },
+    "rules_cc": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "rules_cc",
+        "name": "rules_cc",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "d0c573b94a6ef20ef6ff20154a23d0efcb409fb0e1ff0979cec318dfe42f0cdd",
+        "strip_prefix": "rules_cc-b1c40e1de81913a3c40e5948f78719c28152486d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip",
+            "https://github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip"
+        ]
+    },
+    "rules_java": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "rules_java",
+        "name": "rules_java",
+        "patch_cmds": [
+            "test -f BUILD && chmod u+w BUILD || true",
+            "echo >> BUILD",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "bc81f1ba47ef5cc68ad32225c3d0e70b8c6f6077663835438da8d5733f917598",
+        "strip_prefix": "rules_java-7cf3cefd652008d0a64a419c34c13bdca6c8f178",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip",
+            "https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip"
+        ]
+    },
+    "rules_nodejs-2.2.2.tar.gz": {
+        "name": "rules_nodejs-2.2.2.tar.gz",
+        "sha256": "f2194102720e662dbf193546585d705e645314319554c6ce7e47d8b59f459e9c",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz",
+            "https://github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz"
+        ]
+    },
+    "rules_pkg": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "rules_pkg",
+        "name": "rules_pkg",
+        "sha256": "038f1caa773a7e35b3663865ffb003169c6a71dc995e39bf4815792f385d837d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.4.0/rules_pkg-0.4.0.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.4.0/rules_pkg-0.4.0.tar.gz"
+        ]
+    },
+    "rules_pkg-0.4.0.tar.gz": {
+        "name": "rules_pkg-0.4.0.tar.gz",
+        "sha256": "038f1caa773a7e35b3663865ffb003169c6a71dc995e39bf4815792f385d837d",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.4.0/rules_pkg-0.4.0.tar.gz",
+            "https://github.com/bazelbuild/rules_pkg/releases/download/0.4.0/rules_pkg-0.4.0.tar.gz"
+        ]
+    },
+    "rules_proto": {
+        "generator_function": "dist_http_archive",
+        "generator_name": "rules_proto",
+        "name": "rules_proto",
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "sha256": "8e7d59a5b12b233be5652e3d29f42fba01c7cbab09f6b3a8d0a57ed6d1e9a0da",
+        "strip_prefix": "rules_proto-7e4afce6fe62dbff0a4a03450143146f9f2d7488",
+        "urls": [
+            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz",
+            "https://github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz"
+        ]
+    },
+    "six": {
+        "build_file": "@com_github_grpc_grpc//third_party:six.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "six",
+        "name": "six",
+        "sha256": "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
+        "urls": [
+            "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz"
+        ]
+    },
+    "upb": {
+        "generator_function": "grpc_deps",
+        "generator_name": "upb",
+        "name": "upb",
+        "sha256": "6a5f67874af66b239b709c572ac1a5a00fdb1b29beaf13c3e6f79b1ba10dc7c4",
+        "strip_prefix": "upb-2de300726a1ba2de9a468468dc5ff9ed17a3215f",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/protocolbuffers/upb/archive/2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz",
+            "https://github.com/protocolbuffers/upb/archive/2de300726a1ba2de9a468468dc5ff9ed17a3215f.tar.gz"
+        ]
+    },
+    "v1.41.0.tar.gz": {
+        "name": "v1.41.0.tar.gz",
+        "sha256": "e5fb30aae1fa1cffa4ce00aa0bbfab908c0b899fcf0bbc30e268367d660d8656",
+        "urls": [
+            "https://mirror.bazel.build/github.com/grpc/grpc/archive/v1.41.0.tar.gz",
+            "https://github.com/grpc/grpc/archive/v1.41.0.tar.gz"
+        ]
+    },
+    "v1.5.0-4.zip": {
+        "name": "v1.5.0-4.zip",
+        "sha256": "d320d59b89a163c5efccbe4915ae6a49883ce653cdc670643dfa21c6063108e4",
+        "urls": [
+            "https://mirror.bazel.build/github.com/luben/zstd-jni/archive/v1.5.0-4.zip",
+            "https://github.com/luben/zstd-jni/archive/v1.5.0-4.zip"
+        ]
+    },
+    "v3.13.0.tar.gz": {
+        "name": "v3.13.0.tar.gz",
+        "sha256": "9b4ee22c250fe31b16f1a24d61467e40780a3fbb9b91c3b65be2a376ed913a1a",
+        "urls": [
+            "https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz",
+            "https://github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz"
+        ]
+    },
+    "zlib": {
+        "build_file": "@com_github_grpc_grpc//third_party:zlib.BUILD",
+        "generator_function": "grpc_deps",
+        "generator_name": "zlib",
+        "name": "zlib",
+        "sha256": "6d4d6640ca3121620995ee255945161821218752b551a1a180f4215f7d124d45",
+        "strip_prefix": "zlib-cacf7f1d4e3d44d871b605da3b647f07d718623f",
+        "urls": [
+            "https://storage.googleapis.com/grpc-bazel-mirror/github.com/madler/zlib/archive/cacf7f1d4e3d44d871b605da3b647f07d718623f.tar.gz",
+            "https://github.com/madler/zlib/archive/cacf7f1d4e3d44d871b605da3b647f07d718623f.tar.gz"
+        ]
+    },
+    "zstd-jni": {
+        "build_file": "//third_party:zstd-jni/zstd-jni.BUILD",
+        "generator_function": "dist_http_archive",
+        "generator_name": "zstd-jni",
+        "name": "zstd-jni",
+        "patch_args": [
+            "-p1"
+        ],
+        "patch_cmds": [
+            "test -f BUILD.bazel && chmod u+w BUILD.bazel || true",
+            "echo >> BUILD.bazel",
+            "echo 'exports_files([\"WORKSPACE\"], visibility = [\"//visibility:public\"])' >> BUILD.bazel"
+        ],
+        "patch_cmds_win": [
+            "Add-Content -Path BUILD.bazel -Value \"`nexports_files([`\"WORKSPACE`\"], visibility = [`\"//visibility:public`\"])`n\" -Force"
+        ],
+        "patches": [
+            "//third_party:zstd-jni/Native.java.patch"
+        ],
+        "sha256": "d320d59b89a163c5efccbe4915ae6a49883ce653cdc670643dfa21c6063108e4",
+        "strip_prefix": "zstd-jni-1.5.0-4",
+        "urls": [
+            "https://mirror.bazel.build/github.com/luben/zstd-jni/archive/v1.5.0-4.zip",
+            "https://github.com/luben/zstd-jni/archive/v1.5.0-4.zip"
+        ]
+    },
+    "zulu11.50.19-ca-jdk11.0.12-linux_aarch64.tar.gz": {
+        "name": "zulu11.50.19-ca-jdk11.0.12-linux_aarch64.tar.gz",
+        "sha256": "61254688067454d3ccf0ef25993b5dcab7b56c8129e53b73566c28a8dd4d48fb",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-linux_aarch64.tar.gz"
+        ]
+    },
+    "zulu11.50.19-ca-jdk11.0.12-linux_x64.tar.gz": {
+        "name": "zulu11.50.19-ca-jdk11.0.12-linux_x64.tar.gz",
+        "sha256": "b8e8a63b79bc312aa90f3558edbea59e71495ef1a9c340e38900dd28a1c579f3",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-linux_x64.tar.gz"
+        ]
+    },
+    "zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz": {
+        "name": "zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz",
+        "sha256": "e908a0b4c0da08d41c3e19230f819b364ff2e5f1dafd62d2cf991a85a34d3a17",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.tar.gz"
+        ]
+    },
+    "zulu11.50.19-ca-jdk11.0.12-macosx_x64.tar.gz": {
+        "name": "zulu11.50.19-ca-jdk11.0.12-macosx_x64.tar.gz",
+        "sha256": "0b8c8b7cf89c7c55b7e2239b47201d704e8d2170884875b00f3103cf0662d6d7",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-macosx_x64.tar.gz"
+        ]
+    },
+    "zulu11.50.19-ca-jdk11.0.12-win_x64.tar.gz": {
+        "name": "zulu11.50.19-ca-jdk11.0.12-win_x64.tar.gz",
+        "sha256": "42ae65e75d615a3f06a674978e1fa85fdf078cad94e553fee3e779b2b42bb015",
+        "urls": [
+            "https://mirror.bazel.build/openjdk/azul-zulu11.50.19-ca-jdk11.0.12/zulu11.50.19-ca-jdk11.0.12-win_x64.zip"
+        ]
+    }
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/update-srcDeps.py b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/update-srcDeps.py
new file mode 100755
index 000000000000..d409a32e1389
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_5/update-srcDeps.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python3
+import sys
+import json
+
+if len(sys.argv) != 2:
+    print("usage: ./this-script src-deps.json < WORKSPACE", file=sys.stderr)
+    print("Takes the bazel WORKSPACE file and reads all archives into a json dict (by evaling it as python code)", file=sys.stderr)
+    print("Hail Eris.", file=sys.stderr)
+    sys.exit(1)
+
+http_archives = []
+
+# just the kw args are the dict { name, sha256, urls … }
+def http_archive(**kw):
+    http_archives.append(kw)
+# like http_file
+def http_file(**kw):
+    http_archives.append(kw)
+
+# this is inverted from http_archive/http_file and bundles multiple archives
+def _distdir_tar(**kw):
+    for archive_name in kw['archives']:
+        http_archives.append({
+            "name": archive_name,
+            "sha256": kw['sha256'][archive_name],
+            "urls": kw['urls'][archive_name]
+        })
+
+# TODO?
+def git_repository(**kw):
+    print(json.dumps(kw, sort_keys=True, indent=4), file=sys.stderr)
+    sys.exit(1)
+
+# execute the WORKSPACE like it was python code in this module,
+# using all the function stubs from above.
+exec(sys.stdin.read())
+
+# transform to a dict with the names as keys
+d = { el['name']: el for el in http_archives }
+
+def has_urls(el):
+    return ('url' in el and el['url']) or ('urls' in el and el['urls'])
+def has_sha256(el):
+    return 'sha256' in el and el['sha256']
+bad_archives = list(filter(lambda el: not has_urls(el) or not has_sha256(el), d.values()))
+if bad_archives:
+    print('Following bazel dependencies are missing url or sha256', file=sys.stderr)
+    print('Check bazel sources for master or non-checksummed dependencies', file=sys.stderr)
+    for el in bad_archives:
+        print(json.dumps(el, sort_keys=True, indent=4), file=sys.stderr)
+    sys.exit(1)
+
+with open(sys.argv[1], "w") as f:
+    print(json.dumps(d, sort_keys=True, indent=4), file=f)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_rc.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_rc.patch
new file mode 100644
index 000000000000..a599ac3ec723
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/bazel_rc.patch
@@ -0,0 +1,13 @@
+diff --git a/src/main/cpp/option_processor.cc b/src/main/cpp/option_processor.cc
+index 8f8f15685f..a7ae52d1e4 100644
+--- a/src/main/cpp/option_processor.cc
++++ b/src/main/cpp/option_processor.cc
+@@ -56,7 +56,7 @@ OptionProcessor::OptionProcessor(
+     : workspace_layout_(workspace_layout),
+       startup_options_(std::move(default_startup_options)),
+       parse_options_called_(false),
+-      system_bazelrc_path_(BAZEL_SYSTEM_BAZELRC_PATH) {}
++      system_bazelrc_path_("@bazelSystemBazelRCPath@") {}
+ 
+ OptionProcessor::OptionProcessor(
+     const WorkspaceLayout* workspace_layout,
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..b0375db8c65c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/buildtools/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "bazel-buildtools";
+  version = "5.0.1";
+
+  src = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = "buildtools";
+    rev = version;
+    sha256 = "sha256-AIOfudFxr1obuxABEN0ggainci/EjbBrdgr2cjVu2Io=";
+  };
+
+  vendorSha256 = "sha256-buMkRxVLlS2LBJGaGWeR41BsmE/0vgDS8s1VcRYN0fA=";
+
+  preBuild = ''
+    rm -r warn/docs
+  '';
+
+  doCheck = false;
+
+  excludedPackages = [ "generatetables" ];
+
+  ldflags = [ "-s" "-w" "-X main.buildVersion=${version}" "-X main.buildScmRevision=${src.rev}" ];
+
+  meta = with 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 marsam ]
+      ++ lib.teams.bazel.members;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/cpp-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/cpp-test.nix
new file mode 100644
index 000000000000..3f3faae25e2e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/cpp-test.nix
@@ -0,0 +1,53 @@
+{
+  bazel
+, bazelTest
+, bazel-examples
+, gccStdenv
+, lib
+, runLocal
+, runtimeShell
+, writeScript
+, writeText
+, distDir
+}:
+
+let
+
+  toolsBazel = writeScript "bazel" ''
+    #! ${runtimeShell}
+
+    export CXX='${gccStdenv.cc}/bin/g++'
+    export LD='${gccStdenv.cc}/bin/ld'
+    export CC='${gccStdenv.cc}/bin/gcc'
+
+    # XXX: hack for macosX, this flags disable bazel usage of xcode
+    # See: https://github.com/bazelbuild/bazel/issues/4231
+    export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
+
+    exec "$BAZEL_REAL" "$@"
+  '';
+
+  workspaceDir = runLocal "our_workspace" {} (''
+    cp -r ${bazel-examples}/cpp-tutorial/stage3 $out
+    find $out -type d -exec chmod 755 {} \;
+  ''
+  + (lib.optionalString gccStdenv.isDarwin ''
+    mkdir $out/tools
+    cp ${toolsBazel} $out/tools/bazel
+  ''));
+
+  testBazel = bazelTest {
+    name = "bazel-test-cpp";
+    inherit workspaceDir;
+    bazelPkg = bazel;
+    bazelScript = ''
+      ${bazel}/bin/bazel \
+        build --verbose_failures \
+        --distdir=${distDir} \
+        --curses=no \
+        --sandbox_debug \
+          //...
+    '';
+  };
+
+in testBazel
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/java-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/java-test.nix
new file mode 100644
index 000000000000..cfdfe84f79d3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/java-test.nix
@@ -0,0 +1,62 @@
+{
+  bazel
+, bazelTest
+, bazel-examples
+, gccStdenv
+, lib
+, openjdk8
+, jdk11_headless
+, runLocal
+, runtimeShell
+, writeScript
+, writeText
+, distDir
+}:
+
+let
+
+  toolsBazel = writeScript "bazel" ''
+    #! ${runtimeShell}
+
+    export CXX='${gccStdenv.cc}/bin/g++'
+    export LD='${gccStdenv.cc}/bin/ld'
+    export CC='${gccStdenv.cc}/bin/gcc'
+
+    # XXX: hack for macosX, this flags disable bazel usage of xcode
+    # See: https://github.com/bazelbuild/bazel/issues/4231
+    export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
+
+    exec "$BAZEL_REAL" "$@"
+  '';
+
+  workspaceDir = runLocal "our_workspace" {} (''
+    cp -r ${bazel-examples}/java-tutorial $out
+    find $out -type d -exec chmod 755 {} \;
+  ''
+  + (lib.optionalString gccStdenv.isDarwin ''
+    mkdir $out/tools
+    cp ${toolsBazel} $out/tools/bazel
+  ''));
+
+  testBazel = bazelTest {
+    name = "bazel-test-java";
+    inherit workspaceDir;
+    bazelPkg = bazel;
+    buildInputs = [ (if lib.strings.versionOlder bazel.version "5.0.0" then openjdk8 else jdk11_headless) ];
+    bazelScript = ''
+      ${bazel}/bin/bazel \
+        run \
+        --distdir=${distDir} \
+          --verbose_failures \
+          --curses=no \
+          --sandbox_debug \
+          //:ProjectRunner \
+    '' + lib.optionalString (lib.strings.versionOlder bazel.version "5.0.0") ''
+          --host_javabase='@local_jdk//:jdk' \
+          --java_toolchain='@bazel_tools//tools/jdk:toolchain_hostjdk8' \
+          --javabase='@local_jdk//:jdk' \
+    '';
+  };
+
+in testBazel
+
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..95f07646802e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/nix-hacks.patch
@@ -0,0 +1,43 @@
+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 8e772005cd..6ffa1c919c 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
+@@ -432,25 +432,7 @@ public final class RepositoryDelegatorFunction implements SkyFunction {
+       String content;
+       try {
+         content = FileSystemUtils.readContent(markerPath, StandardCharsets.UTF_8);
+-        String markerRuleKey = readMarkerFile(content, markerData);
+-        boolean verified = false;
+-        if (Preconditions.checkNotNull(ruleKey).equals(markerRuleKey)
+-            && Objects.equals(
+-                markerData.get(MANAGED_DIRECTORIES_MARKER),
+-                this.markerData.get(MANAGED_DIRECTORIES_MARKER))) {
+-          verified = handler.verifyMarkerData(rule, markerData, env);
+-          if (env.valuesMissing()) {
+-            return null;
+-          }
+-        }
+-
+-        if (verified) {
+-          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 c282d57ab6..f9b0c08627 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
+@@ -146,7 +146,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/nixpkgs/pkgs/development/tools/build-managers/bazel/protobuf-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/protobuf-test.nix
new file mode 100644
index 000000000000..f4872d1b1204
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/protobuf-test.nix
@@ -0,0 +1,180 @@
+{
+  bazel
+, bazelTest
+, fetchFromGitHub
+, fetchurl
+, gccStdenv
+, lib
+, openjdk8
+, jdk11_headless
+, runLocal
+, runtimeShell
+, writeScript
+, writeText
+, distDir
+}:
+
+let
+  com_google_protobuf = fetchFromGitHub {
+    owner = "protocolbuffers";
+    repo = "protobuf";
+    rev = "v3.13.0";
+    sha256 = "1nqsvi2yfr93kiwlinz8z7c68ilg1j75b2vcpzxzvripxx5h6xhd";
+  };
+
+  bazel_skylib = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = "bazel-skylib";
+    rev = "2ec2e6d715e993d96ad6222770805b5bd25399ae";
+    sha256 = "1z2r2vx6kj102zvp3j032djyv99ski1x1sl4i3p6mswnzrzna86s";
+  };
+
+  rules_python = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = "rules_python";
+    rev = "c8c79aae9aa1b61d199ad03d5fe06338febd0774";
+    sha256 = "1zn58wv5wcylpi0xj7riw34i1jjpqahanxx8y9srwrv0v93b6pqz";
+  };
+
+  rules_proto = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = "rules_proto";
+    rev = "a0761ed101b939e19d83b2da5f59034bffc19c12";
+    sha256 = "09lqfj5fxm1fywxr5w8pnpqd859gb6751jka9fhxjxjzs33glhqf";
+  };
+
+  net_zlib = fetchurl rec {
+    url = "https://zlib.net/zlib-1.2.11.tar.gz";
+    sha256 = "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1";
+
+    passthru.sha256 = sha256;
+  };
+
+  WORKSPACE = writeText "WORKSPACE" ''
+    workspace(name = "our_workspace")
+
+    load("//:proto-support.bzl", "protobuf_deps")
+    protobuf_deps()
+    load("@rules_proto//proto:repositories.bzl", "rules_proto_toolchains")
+    rules_proto_toolchains()
+    '';
+
+  protoSupport = writeText "proto-support.bzl" ''
+    """Load dependencies needed to compile the protobuf library as a 3rd-party consumer."""
+
+    load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+
+    def protobuf_deps():
+        """Loads common dependencies needed to compile the protobuf library."""
+
+        if "zlib" not in native.existing_rules():
+            # proto_library, cc_proto_library, and java_proto_library rules implicitly
+            # depend on @com_google_protobuf for protoc and proto runtimes.
+            # This statement defines the @com_google_protobuf repo.
+            native.local_repository(
+                name = "com_google_protobuf",
+                path = "${com_google_protobuf}",
+            )
+            native.local_repository(
+                name = "bazel_skylib",
+                path = "${bazel_skylib}",
+            )
+            native.local_repository(
+                name = "rules_proto",
+                path = "${rules_proto}",
+            )
+            native.local_repository(
+                name = "rules_python",
+                path = "${rules_python}",
+            )
+
+            http_archive(
+                name = "zlib",
+                build_file = "@com_google_protobuf//:third_party/zlib.BUILD",
+                sha256 = "${net_zlib.sha256}",
+                strip_prefix = "zlib-1.2.11",
+                urls = ["file://${net_zlib}"],
+            )
+  '';
+
+  personProto = writeText "person.proto" ''
+    syntax = "proto3";
+
+    package person;
+
+    message Person {
+      string name = 1;
+      int32 id = 2;
+      string email = 3;
+    }
+  '';
+
+  personBUILD = writeText "BUILD" ''
+    load("@rules_proto//proto:defs.bzl", "proto_library")
+
+    proto_library(
+        name = "person_proto",
+        srcs = ["person.proto"],
+        visibility = ["//visibility:public"],
+    )
+
+    java_proto_library(
+        name = "person_java_proto",
+        deps = [":person_proto"],
+    )
+
+    cc_proto_library(
+        name = "person_cc_proto",
+        deps = [":person_proto"],
+    )
+  '';
+
+  toolsBazel = writeScript "bazel" ''
+    #! ${runtimeShell}
+
+    export CXX='${gccStdenv.cc}/bin/g++'
+    export LD='${gccStdenv.cc}/bin/ld'
+    export CC='${gccStdenv.cc}/bin/gcc'
+
+    # XXX: hack for macosX, this flags disable bazel usage of xcode
+    # See: https://github.com/bazelbuild/bazel/issues/4231
+    export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
+
+    exec "$BAZEL_REAL" "$@"
+  '';
+
+  workspaceDir = runLocal "our_workspace" {} (''
+    mkdir $out
+    cp ${WORKSPACE} $out/WORKSPACE
+    touch $out/BUILD.bazel
+    cp ${protoSupport} $out/proto-support.bzl
+    mkdir $out/person
+    cp ${personProto} $out/person/person.proto
+    cp ${personBUILD} $out/person/BUILD.bazel
+  ''
+  + (lib.optionalString gccStdenv.isDarwin ''
+    mkdir $out/tools
+    cp ${toolsBazel} $out/tools/bazel
+  ''));
+
+  testBazel = bazelTest {
+    name = "bazel-test-protocol-buffers";
+    inherit workspaceDir;
+    bazelPkg = bazel;
+    buildInputs = [ (if lib.strings.versionOlder bazel.version "5.0.0" then openjdk8 else jdk11_headless) ];
+    bazelScript = ''
+      ${bazel}/bin/bazel \
+        build \
+        --distdir=${distDir} \
+          --verbose_failures \
+          --curses=no \
+          --sandbox_debug \
+          //... \
+    '' + lib.optionalString (lib.strings.versionOlder bazel.version "5.0.0") ''
+          --host_javabase='@local_jdk//:jdk' \
+          --java_toolchain='@bazel_tools//tools/jdk:toolchain_hostjdk8' \
+          --javabase='@local_jdk//:jdk' \
+    '';
+  };
+
+in testBazel
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..c02547c08e06
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/python-bin-path-test.nix
@@ -0,0 +1,53 @@
+{ writeText, bazel, bazelTest, runLocal, distDir }:
+
+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_binary(
+      name = "bin",
+      srcs = [ "bin.py" ],
+      deps = [ ":lib" ],
+    )
+  '';
+
+  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 = bazelTest {
+    name = "bazel-test-builtin-rules";
+    inherit workspaceDir;
+    bazelPkg = bazel;
+    bazelScript = ''
+      ${bazel}/bin/bazel \
+        run \
+      --distdir=${distDir} \
+          //python:bin
+    '';
+  };
+
+in testBazel
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/shebang-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/shebang-test.nix
new file mode 100644
index 000000000000..fd94f97a7659
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/shebang-test.nix
@@ -0,0 +1,49 @@
+{
+  bazel
+, bazelTest
+, distDir
+, extracted
+, runLocal
+, unzip
+}:
+
+# Tests that all shebangs are patched appropriately.
+# #!/usr/bin/... should be replaced by Nix store references.
+# #!.../bin/env python should be replaced by Nix store reference to the python interpreter.
+
+let
+
+  workspaceDir = runLocal "our_workspace" {} "mkdir $out";
+
+  testBazel = bazelTest {
+    name = "bazel-test-shebangs";
+    inherit workspaceDir;
+    bazelPkg = bazel;
+    bazelScript = ''
+      set -ueo pipefail
+      FAIL=
+      check_shebangs() {
+        local dir="$1"
+        { grep -Re '#!/usr/bin' $dir && FAIL=1; } || true
+        { grep -Re '#![^[:space:]]*/bin/env' $dir && FAIL=1; } || true
+      }
+      BAZEL_EXTRACTED=${extracted bazel}/install
+      check_shebangs $BAZEL_EXTRACTED
+      while IFS= read -r -d "" zip; do
+        unzipped="./$zip/UNPACKED"
+        mkdir -p "$unzipped"
+        unzip -qq $zip -d "$unzipped"
+        check_shebangs "$unzipped"
+        rm -rf unzipped
+      done < <(find $BAZEL_EXTRACTED -type f -name '*.zip' -or -name '*.jar' -print0)
+      if [[ $FAIL = 1 ]]; then
+        echo "Found files in the bazel distribution with illegal shebangs." >&2
+        echo "Replace those by explicit Nix store paths." >&2
+        echo "Python scripts should not use \`bin/env python' but the Python interpreter's store path." >&2
+        exit 1
+      fi
+    '';
+    buildInputs = [ unzip ];
+  };
+
+in testBazel
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/strict_action_env.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/strict_action_env.patch
new file mode 100644
index 000000000000..1402c20f6bdb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/strict_action_env.patch
@@ -0,0 +1,13 @@
+diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+index a70b5559bc..10bdffe961 100644
+--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
++++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+@@ -466,7 +466,7 @@ public class BazelRuleClassProvider {
+       // Note that --action_env does not propagate to the host config, so it is not a viable
+       // workaround when a genrule is itself built in the host config (e.g. nested genrules). See
+       // #8536.
+-      return "/bin:/usr/bin:/usr/local/bin";
++      return "@strictActionEnvPatch@";
+     }
+
+     String newPath = "";
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/trim-last-argument-to-gcc-if-empty.patch b/nixpkgs/pkgs/development/tools/build-managers/bazel/trim-last-argument-to-gcc-if-empty.patch
new file mode 100644
index 000000000000..b93b252f3638
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/trim-last-argument-to-gcc-if-empty.patch
@@ -0,0 +1,37 @@
+From 177b4720d6fbaa7fdd17e5e11b2c79ac8f246786 Mon Sep 17 00:00:00 2001
+From: "Wael M. Nasreddine" <wael.nasreddine@gmail.com>
+Date: Thu, 27 Jun 2019 21:08:51 -0700
+Subject: [PATCH] Trim last argument to gcc if empty, on Darwin
+
+On Darwin, the last argument to GCC is coming up as an empty string.
+This is breaking the build of proto_library targets. However, I was not
+able to reproduce with the example cpp project[0].
+
+This commit removes the last argument if it's an empty string. This is
+not a problem on Linux.
+
+[0]: https://github.com/bazelbuild/examples/tree/master/cpp-tutorial/stage3
+---
+ tools/cpp/osx_cc_wrapper.sh.tpl | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/tools/cpp/osx_cc_wrapper.sh.tpl b/tools/cpp/osx_cc_wrapper.sh.tpl
+index 4c85cd9b6b..6c611e3d25 100644
+--- a/tools/cpp/osx_cc_wrapper.sh.tpl
++++ b/tools/cpp/osx_cc_wrapper.sh.tpl
+@@ -53,7 +53,11 @@ done
+ %{env}
+ 
+ # Call the C++ compiler
+-%{cc} "$@"
++if [[ ${*: -1} = "" ]]; then
++    %{cc} "${@:0:$#}"
++else
++    %{cc} "$@"
++fi
+ 
+ function get_library_path() {
+     for libdir in ${LIB_DIRS}; do
+-- 
+2.19.2
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/update-srcDeps.py b/nixpkgs/pkgs/development/tools/build-managers/bazel/update-srcDeps.py
new file mode 100755
index 000000000000..4105aeeb11bc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/update-srcDeps.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python3
+import sys
+import json
+
+if len(sys.argv) == 1:
+    print("usage: ./this-script WORKSPACE", file=sys.stderr)
+    print("Takes the bazel WORKSPACE file and reads all archives into a json dict (by evaling it as python code)", file=sys.stderr)
+    print("Hail Eris.", file=sys.stderr)
+    sys.exit(1)
+
+http_archives = []
+
+# just the kw args are the dict { name, sha256, urls … }
+def http_archive(**kw):
+    http_archives.append(kw)
+# like http_file
+def http_file(**kw):
+    http_archives.append(kw)
+
+# this is inverted from http_archive/http_file and bundles multiple archives
+def distdir_tar(**kw):
+    for archive_name in kw['archives']:
+        http_archives.append({
+            "name": archive_name,
+            "sha256": kw['sha256'][archive_name],
+            "urls": kw['urls'][archive_name]
+        })
+
+# stubs for symbols we are not interested in
+# might need to be expanded if new bazel releases add symbols to the workspace
+def workspace(name): pass
+def load(*args): pass
+def bind(**kw): pass
+def list_source_repository(**kw): pass
+def new_local_repository(**kw): pass
+def local_repository(**kw): pass
+DOC_VERSIONS = []
+def stardoc_repositories(**kw): pass
+def skydoc_repositories(**kw): pass
+def rules_sass_dependencies(**kw): pass
+def node_repositories(**kw): pass
+def sass_repositories(**kw): pass
+def register_execution_platforms(*args): pass
+def rbe_autoconfig(*args, **kw): pass
+def rules_pkg_dependencies(*args, **kw): pass
+def winsdk_configure(*args, **kw): pass
+def register_local_rc_exe_toolchains(*args, **kw): pass
+def register_toolchains(*args, **kw): pass
+def debian_deps(): pass
+def grpc_deps(): pass
+def grpc_extra_deps(): pass
+def bazel_skylib_workspace(): pass
+
+# execute the WORKSPACE like it was python code in this module,
+# using all the function stubs from above.
+with open(sys.argv[1]) as f:
+    exec(f.read())
+
+# transform to a dict with the names as keys
+d = { el['name']: el for el in http_archives }
+
+print(json.dumps(d, sort_keys=True, indent=4))
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..21f7512588c0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bear/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, grpc
+, protobuf
+, openssl
+, nlohmann_json
+, gtest
+, spdlog
+, c-ares
+, abseil-cpp
+, zlib
+, sqlite
+, re2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bear";
+  version = "3.0.14";
+
+  src = fetchFromGitHub {
+    owner = "rizsotto";
+    repo = pname;
+    rev = version;
+    sha256 = "0qy96dyd29bjvfhi46y30hli5cvshw8am0spvcv9v43660wbczd7";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [
+    grpc
+    protobuf
+    openssl
+    nlohmann_json
+    gtest
+    spdlog
+    c-ares
+    abseil-cpp
+    zlib
+    sqlite
+    re2
+  ];
+
+  patches = [
+    # Default libexec would be set to /nix/store/*-bear//nix/store/*-bear/libexec/...
+    ./no-double-relative.patch
+  ];
+
+  meta = with 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 = with maintainers; [ babariviere qyliss ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bear/no-double-relative.patch b/nixpkgs/pkgs/development/tools/build-managers/bear/no-double-relative.patch
new file mode 100644
index 000000000000..257c7ffea38f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bear/no-double-relative.patch
@@ -0,0 +1,22 @@
+diff --git i/source/config.h.in w/source/config.h.in
+index ffcce3a..0caba6d 100644
+--- i/source/config.h.in
++++ w/source/config.h.in
+@@ -107,7 +107,7 @@ namespace cmd {
+     }
+ 
+     namespace wrapper {
+-        constexpr char DEFAULT_PATH[] = "@ROOT_INSTALL_PREFIX@/@PRIVATE_INSTALLDIR@/wrapper";
++        constexpr char DEFAULT_PATH[] = "@PRIVATE_INSTALLDIR@/wrapper";
+         constexpr char DEFAULT_DIR_PATH[] = "@ROOT_INSTALL_PREFIX@/@PRIVATE_INSTALLDIR@/wrapper.d";
+ 
+         constexpr char FLAG_VERBOSE[] = "--verbose";
+@@ -120,7 +120,7 @@ namespace cmd {
+     }
+ 
+     namespace library {
+-        constexpr char DEFAULT_PATH[] = "@ROOT_INSTALL_PREFIX@/@PRIVATE_INSTALLDIR@/@CMAKE_SHARED_LIBRARY_PREFIX@exec@CMAKE_SHARED_LIBRARY_SUFFIX@";
++        constexpr char DEFAULT_PATH[] = "@PRIVATE_INSTALLDIR@/@CMAKE_SHARED_LIBRARY_PREFIX@exec@CMAKE_SHARED_LIBRARY_SUFFIX@";
+ 
+         constexpr char KEY_REPORTER[] = "INTERCEPT_REPORT_COMMAND";
+         constexpr char KEY_DESTINATION[] = "INTERCEPT_REPORT_DESTINATION";
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..11b25bec3816
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bloop/default.nix
@@ -0,0 +1,100 @@
+{ stdenv
+, fetchurl
+, coursier
+, autoPatchelfHook
+, installShellFiles
+, makeWrapper
+, jre
+, lib
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bloop";
+  version = "1.4.13";
+
+  bloop-coursier-channel = fetchurl {
+    url = "https://github.com/scalacenter/bloop/releases/download/v${version}/bloop-coursier.json";
+    sha256 = "bf3uHuGfmJukf0Qeudv8ZXz/9Uql/qsmvPS0XBb7oTQ=";
+  };
+
+  bloop-bash = fetchurl {
+    url = "https://github.com/scalacenter/bloop/releases/download/v${version}/bash-completions";
+    sha256 = "2mt+zUEJvQ/5ixxFLZ3Z0m7uDSj/YE9sg/uNMjamvdE=";
+  };
+
+  bloop-fish = fetchurl {
+    url = "https://github.com/scalacenter/bloop/releases/download/v${version}/fish-completions";
+    sha256 = "eFESR6iPHRDViGv+Fk3sCvPgVAhk2L1gCG4LnfXO/v4=";
+  };
+
+  bloop-zsh = fetchurl {
+    url = "https://github.com/scalacenter/bloop/releases/download/v${version}/zsh-completions";
+    sha256 = "WNMsPwBfd5EjeRbRtc06lCEVI2FVoLfrqL82OR0G7/c=";
+  };
+
+  bloop-coursier = stdenv.mkDerivation rec {
+    name = "${pname}-coursier-${version}";
+
+    platform = if stdenv.isLinux && stdenv.isx86_64 then "x86_64-pc-linux"
+    else if stdenv.isDarwin && stdenv.isx86_64 then "x86_64-apple-darwin"
+    else throw "unsupported platform";
+
+    dontUnpack = true;
+    installPhase = ''
+      runHook preInstall
+
+      export COURSIER_CACHE=$(pwd)
+      export COURSIER_JVM_CACHE=$(pwd)
+
+      mkdir channel
+      ln -s ${bloop-coursier-channel} channel/bloop.json
+      ${coursier}/bin/cs install --install-dir . --install-platform ${platform} --default-channels=false --channel channel --only-prebuilt=true bloop
+
+      # Only keeping the binary, we'll wrap it ourselves
+      # This guarantees the output of this fixed-output derivation doesn't have references to itself
+      install -D -m 0755 .bloop.aux $out
+
+      runHook postInstall
+    '';
+
+    outputHashMode = "recursive";
+    outputHashAlgo = "sha256";
+    outputHash = if stdenv.isLinux && stdenv.isx86_64 then "sha256-jqcecAM51qEDmTim2VBNm8IO8wQmwU19R57Zk4pxwSA="
+    else if stdenv.isDarwin && stdenv.isx86_64 then "sha256-WJytRIbsygi4zoIVfkJmzWyFe2p8mQuT4DDO5KDKopY="
+    else throw "unsupported platform";
+  };
+
+  dontUnpack = true;
+  nativeBuildInputs = [ autoPatchelfHook installShellFiles makeWrapper ];
+  buildInputs = [ stdenv.cc.cc.lib zlib ];
+  propagatedBuildInputs = [ jre ];
+
+  installPhase = ''
+    runHook preInstall
+
+    export COURSIER_CACHE=$(pwd)
+    export COURSIER_JVM_CACHE=$(pwd)
+
+    install -D -m 0755 ${bloop-coursier} $out/.bloop-wrapped
+
+    makeWrapper $out/.bloop-wrapped $out/bin/bloop \
+      --set CS_NATIVE_LAUNCHER true \
+      --set IS_CS_INSTALLED_LAUNCHER true
+
+    #Install completions
+    installShellCompletion --name bloop --bash ${bloop-bash}
+    installShellCompletion --name _bloop --zsh ${bloop-zsh}
+    installShellCompletion --name bloop.fish --fish ${bloop-fish}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://scalacenter.github.io/bloop/";
+    license = licenses.asl20;
+    description = "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";
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    maintainers = with maintainers; [ kubukoz tomahna ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bmake/bootstrap-fix.patch b/nixpkgs/pkgs/development/tools/build-managers/bmake/bootstrap-fix.patch
new file mode 100644
index 000000000000..9b1267257ad1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bmake/bootstrap-fix.patch
@@ -0,0 +1,10 @@
+--- bmake/make-bootstrap.sh.in.orig     2019-02-19 10:55:21.733606117 -0800
++++ bmake/make-bootstrap.sh.in  2019-02-19 10:56:02.150771541 -0800
+@@ -4,6 +4,7 @@
+ 
+ srcdir=@srcdir@
+ 
++prefix="@prefix@"
+ DEFAULT_SYS_PATH="@default_sys_path@"
+ 
+ case "@use_meta@" in
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bmake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bmake/default.nix
new file mode 100644
index 000000000000..d577b62a193a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bmake/default.nix
@@ -0,0 +1,113 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, getopt
+, tzdata
+, ksh
+, pkgsMusl # for passthru.tests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bmake";
+  version = "20220208";
+
+  src = fetchurl {
+    url = "http://www.crufty.net/ftp/pub/sjg/${pname}-${version}.tar.gz";
+    hash = "sha256-ewDB4UYrLh5Upk2ND88n/HfursPxOSDv+NlST/BZ1to=";
+  };
+
+  # Make tests work with musl
+  # * Disable deptgt-delete_on_error test (alpine does this too)
+  # * Disable shell-ksh test (ksh doesn't compile with musl)
+  # * Fix test failing due to different strerror(3) output for musl and glibc
+  postPatch = lib.optionalString (stdenv.hostPlatform.libc == "musl") ''
+    sed -i unit-tests/Makefile \
+      -e '/deptgt-delete_on_error/d' \
+      -e '/shell-ksh/d'
+    substituteInPlace unit-tests/opt-chdir.exp --replace "File name" "Filename"
+  '';
+
+  nativeBuildInputs = [ getopt ];
+
+  patches = [
+    # make bootstrap script aware of the prefix in /nix/store
+    ./bootstrap-fix.patch
+    # preserve PATH from build env in unit tests
+    ./fix-unexport-env-test.patch
+    # Always enable ksh test since it checks in a impure location /bin/ksh
+    ./unconditional-ksh-test.patch
+    # decouple tests from build phase
+    (fetchpatch {
+      name = "separate-tests.patch";
+      url = "https://raw.githubusercontent.com/alpinelinux/aports/2a36f7b79df44136c4d2b8e9512f908af65adfee/community/bmake/separate-tests.patch";
+      sha256 = "00s76jwyr83c6rkvq67b1lxs8jhm0gj2rjgy77xazqr5400slj9a";
+    })
+    # add a shebang to bmake's install(1) replacement
+    (fetchpatch {
+      name = "install-sh.patch";
+      url = "https://raw.githubusercontent.com/alpinelinux/aports/34cd8c45397c63c041cf3cbe1ba5232fd9331196/community/bmake/install-sh.patch";
+      sha256 = "0z8icd6akb96r4cksqnhynkn591vbxlmrrs4w6wil3r6ggk6mwa6";
+    })
+  ];
+
+  # The generated makefile is a small wrapper for calling ./boot-strap with a
+  # given op. On a case-insensitive filesystem this generated makefile clobbers
+  # a distinct, shipped, Makefile and causes infinite recursion during tests
+  # which eventually fail with "fork: Resource temporarily unavailable"
+  configureFlags = [
+    "--without-makefile"
+  ];
+
+  # Disabled tests:
+  # varmod-localtime: musl doesn't support TZDIR and this test relies on impure,
+  # implicit paths
+  # opt-chdir: ofborg complains about it somehow
+  BROKEN_TESTS = "varmod-localtime opt-chdir";
+
+  buildPhase = ''
+    runHook preBuild
+
+    ./boot-strap --prefix=$out -o . op=build
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    ./boot-strap --prefix=$out -o . op=install
+
+    runHook postInstall
+  '';
+
+  doCheck = true;
+
+  checkInputs = [
+    tzdata
+  ] ++ lib.optionals (stdenv.hostPlatform.libc != "musl") [
+    ksh
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+
+    ./boot-strap -o . op=test
+
+    runHook postCheck
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  meta = with lib; {
+    homepage = "http://www.crufty.net/help/sjg/bmake.html";
+    description = "Portable version of NetBSD 'make'";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ thoughtpolice AndersonTorres ];
+    platforms = platforms.unix;
+    broken = stdenv.isAarch64; # ofborg complains
+  };
+
+  passthru.tests.bmakeMusl = pkgsMusl.bmake;
+}
+# TODO: report the quirks and patches to bmake devteam (especially the Musl one)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bmake/fix-localtime-test.patch b/nixpkgs/pkgs/development/tools/build-managers/bmake/fix-localtime-test.patch
new file mode 100644
index 000000000000..b377292cce28
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bmake/fix-localtime-test.patch
@@ -0,0 +1,23 @@
+--- bmake/unit-tests/Makefile.orig	2021-05-30 14:24:38.822484317 +0200
++++ bmake/unit-tests/Makefile	2021-05-31 13:25:21.645751428 +0200
+@@ -455,7 +455,8 @@
+ ENV.varmisc=		FROM_ENV=env
+ ENV.varmisc+=		FROM_ENV_BEFORE=env
+ ENV.varmisc+=		FROM_ENV_AFTER=env
+-ENV.varmod-localtime+=	TZ=Europe/Berlin
++# Set absolute path to tz file since musl doesn't support TZDIR
++ENV.varmod-localtime+=	TZDIR=${TZDIR} TZ=:${TZDIR}/Europe/Berlin
+ ENV.varname-vpath+=	VPATH=varname-vpath.dir:varname-vpath.dir2
+ 
+ # Override make flags for some of the tests; default is -k.
+--- bmake/unit-tests/varmod-localtime.mk.orig	2021-05-30 14:30:34.397986246 +0200
++++ bmake/unit-tests/varmod-localtime.mk	2021-05-31 13:24:41.430906606 +0200
+@@ -3,7 +3,7 @@
+ # Tests for the :localtime variable modifier, which formats a timestamp
+ # using strftime(3) in local time.
+ 
+-.if ${TZ} != "Europe/Berlin"	# see unit-tests/Makefile
++.if ${TZ} != ":${TZDIR}/Europe/Berlin"	# see unit-tests/Makefile
+ .  error
+ .endif
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bmake/fix-unexport-env-test.patch b/nixpkgs/pkgs/development/tools/build-managers/bmake/fix-unexport-env-test.patch
new file mode 100644
index 000000000000..fbf7225a6d6f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bmake/fix-unexport-env-test.patch
@@ -0,0 +1,13 @@
+--- bmake/unit-tests/unexport-env.mk.orig	2021-05-27 14:44:45.263392298 +0200
++++ bmake/unit-tests/unexport-env.mk	2021-05-27 14:46:46.188881996 +0200
+@@ -4,8 +4,8 @@
+ FILTER_CMD=	grep ^UT_
+ .include "export.mk"
+ 
+-# an example of setting up a minimal environment.
+-PATH=	/bin:/usr/bin:/sbin:/usr/sbin
++# preserve PATH so commands used in the "all" target are still available
++PATH :=	${PATH}
+ 
+ # now clobber the environment to just PATH and UT_TEST
+ UT_TEST=	unexport-env
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bmake/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/bmake/setup-hook.sh
new file mode 100644
index 000000000000..c5ca27dd9105
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bmake/setup-hook.sh
@@ -0,0 +1,127 @@
+addMakeFlags() {
+    export prefix="$out"
+    export MANDIR="${!outputMan}/share/man"
+    export MANTARGET=man
+    export BINOWN=
+    export STRIP_FLAG=
+}
+
+preConfigureHooks+=(addMakeFlags)
+
+bmakeBuildPhase() {
+    runHook preBuild
+
+    local flagsArray=(
+        ${enableParallelBuilding:+-j${NIX_BUILD_CORES}}
+        SHELL=$SHELL
+        $makeFlags ${makeFlagsArray+"${makeFlagsArray[@]}"}
+        $buildFlags ${buildFlagsArray+"${buildFlagsArray[@]}"}
+    )
+
+    echoCmd 'build flags' "${flagsArray[@]}"
+    bmake ${makefile:+-f $makefile} "${flagsArray[@]}"
+    unset flagsArray
+
+    runHook postBuild
+}
+
+if [ -z "${dontUseBmakeBuild-}" -a -z "${buildPhase-}" ]; then
+    buildPhase=bmakeBuildPhase
+fi
+
+bmakeCheckPhase() {
+    runHook preCheck
+
+    if [ -z "${checkTarget:-}" ]; then
+        #TODO(@oxij): should flagsArray influence make -n?
+        if bmake -n ${makefile:+-f $makefile} check >/dev/null 2>&1; then
+            checkTarget=check
+        elif bmake -n ${makefile:+-f $makefile} test >/dev/null 2>&1; then
+            checkTarget=test
+        fi
+    fi
+
+    if [ -z "${checkTarget:-}" ]; then
+        echo "no test target found in bmake, doing nothing"
+    else
+        # shellcheck disable=SC2086
+        local flagsArray=(
+            ${enableParallelChecking:+-j${NIX_BUILD_CORES}}
+            SHELL=$SHELL
+            # Old bash empty array hack
+            $makeFlags ${makeFlagsArray+"${makeFlagsArray[@]}"}
+            ${checkFlags:-VERBOSE=y} ${checkFlagsArray+"${checkFlagsArray[@]}"}
+            ${checkTarget}
+        )
+
+        echoCmd 'check flags' "${flagsArray[@]}"
+        bmake ${makefile:+-f $makefile} "${flagsArray[@]}"
+
+        unset flagsArray
+    fi
+
+    runHook postCheck
+}
+
+if [ -z "${dontUseBmakeCheck-}" -a -z "${checkPhase-}" ]; then
+    checkPhase=bmakeCheckPhase
+fi
+
+bmakeInstallPhase() {
+    runHook preInstall
+
+    if [ -n "$prefix" ]; then
+        mkdir -p "$prefix"
+    fi
+
+    # shellcheck disable=SC2086
+    local flagsArray=(
+        SHELL=$SHELL
+        # Old bash empty array hack
+        $makeFlags ${makeFlagsArray+"${makeFlagsArray[@]}"}
+        $installFlags ${installFlagsArray+"${installFlagsArray[@]}"}
+        ${installTargets:-install}
+    )
+
+    echoCmd 'install flags' "${flagsArray[@]}"
+    bmake ${makefile:+-f $makefile} "${flagsArray[@]}"
+    unset flagsArray
+
+    runHook postInstall
+}
+
+if [ -z "${dontUseBmakeInstall-}" -a -z "${installPhase-}" ]; then
+    installPhase=bmakeInstallPhase
+fi
+
+bmakeDistPhase() {
+    runHook preDist
+
+    if [ -n "$prefix" ]; then
+        mkdir -p "$prefix"
+    fi
+
+    # Old bash empty array hack
+    # shellcheck disable=SC2086
+    local flagsArray=(
+        $distFlags ${distFlagsArray+"${distFlagsArray[@]}"} ${distTarget:-dist}
+    )
+
+    echo 'dist flags: %q' "${flagsArray[@]}"
+    bmake ${makefile:+-f $makefile} "${flagsArray[@]}"
+
+    if [ "${dontCopyDist:-0}" != 1 ]; then
+        mkdir -p "$out/tarballs"
+
+        # Note: don't quote $tarballs, since we explicitly permit
+        # wildcards in there.
+        # shellcheck disable=SC2086
+        cp -pvd ${tarballs:-*.tar.gz} "$out/tarballs"
+    fi
+
+    runHook postDist
+}
+
+if [ -z "${dontUseBmakeDist-}" -a -z "${distPhase-}" ]; then
+    distPhase=bmakeDistPhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bmake/unconditional-ksh-test.patch b/nixpkgs/pkgs/development/tools/build-managers/bmake/unconditional-ksh-test.patch
new file mode 100644
index 000000000000..117b85da16d1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/bmake/unconditional-ksh-test.patch
@@ -0,0 +1,12 @@
+--- bmake/unit-tests/Makefile.orig	2021-07-04 19:13:09.068094922 +0200
++++ bmake/unit-tests/Makefile	2021-07-04 19:13:14.630080696 +0200
+@@ -295,9 +295,7 @@
+ TESTS+=		sh-single-line
+ TESTS+=		shell-csh
+ TESTS+=		shell-custom
+-.if exists(/bin/ksh)
+ TESTS+=		shell-ksh
+-.endif
+ TESTS+=		shell-sh
+ TESTS+=		suff-add-later
+ TESTS+=		suff-clear-regular
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..1590906206c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/boot/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, jdk }:
+
+stdenv.mkDerivation rec {
+  version = "2.7.2";
+  pname = "boot";
+
+  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 lib; {
+    description = "Build tooling for Clojure";
+    homepage = "https://boot-clj.github.io/";
+    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..0b893ea808a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/buck/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, jdk8, ant, python3, watchman, bash, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "buck";
+  version = "2021.01.12.01";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-NFiMQ+cG93R10LlkfUMzZ4TnV0uO5G+8S5TiMI6hU5o=";
+  };
+
+  patches = [ ./pex-mtime.patch ];
+
+  postPatch = ''
+    grep -l -r '/bin/bash' --null | xargs -0 sed -i -e "s!/bin/bash!${bash}/bin/bash!g"
+  '';
+
+  nativeBuildInputs = [ makeWrapper python3 jdk8 ant watchman ];
+
+  buildPhase = ''
+    # Set correct version, see https://github.com/facebook/buck/issues/2607
+    echo v${version} > .buckrelease
+
+    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 PATH : "${lib.makeBinPath [ jdk8 watchman python3 ]}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://buck.build/";
+    description = "A high-performance build tool";
+    maintainers = [ maintainers.jgertm maintainers.marsam ];
+    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/build2/bdep.nix b/nixpkgs/pkgs/development/tools/build-managers/build2/bdep.nix
new file mode 100644
index 000000000000..adfaaf5da71b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/build2/bdep.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv
+, build2
+, fetchurl
+, libbpkg
+, libbutl
+, libodb
+, libodb-sqlite
+, enableShared ? !stdenv.hostPlatform.isStatic
+, enableStatic ? !enableShared
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bdep";
+  version = "0.14.0";
+
+  outputs = [ "out" "doc" "man" ];
+  src = fetchurl {
+    url = "https://pkg.cppget.org/1/alpha/build2/bdep-${version}.tar.gz";
+    sha256 = "sha256-sizrGmSixkkJL9nocA4B1I5n9OySxyuZ2bNc1Z4zmPg=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [
+    build2
+  ];
+  buildInputs = [
+    libbpkg
+    libbutl
+    libodb
+    libodb-sqlite
+  ];
+
+  build2ConfigureFlags = [
+    "config.bin.lib=${build2.configSharedStatic enableShared enableStatic}"
+  ];
+
+  meta = with lib; {
+    description = "build2 project dependency manager";
+    # https://build2.org/bdep/doc/bdep.xhtml
+    longDescription = ''
+      The build2 project dependency manager is used to manage the dependencies
+      of a project during development.
+    '';
+    homepage = "https://build2.org/";
+    changelog = "https://git.build2.org/cgit/bdep/tree/NEWS";
+    license = licenses.mit;
+    maintainers = with maintainers; [ r-burns ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/build2/bootstrap.nix b/nixpkgs/pkgs/development/tools/build-managers/build2/bootstrap.nix
new file mode 100644
index 000000000000..aff1c557d9a2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/build2/bootstrap.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv
+, fetchurl
+, pkgs
+, fixDarwinDylibNames
+}:
+stdenv.mkDerivation rec {
+  pname = "build2-bootstrap";
+  version = "0.14.0";
+  src = fetchurl {
+    url = "https://download.build2.org/${version}/build2-toolchain-${version}.tar.xz";
+    sha256 = "sha256-GO/GstQUmPdRbnqKXJECP2GCyGfUI3kjmDkN0MAEz90=";
+  };
+  patches = [
+    # Pick up sysdirs from NIX_LDFLAGS
+    ./nix-ldflags-sysdirs.patch
+  ];
+
+  sourceRoot = "build2-toolchain-${version}/build2";
+  makefile = "bootstrap.gmake";
+  enableParallelBuilding = true;
+
+  setupHook = ./setup-hook.sh;
+
+  strictDeps = true;
+
+  propagatedBuildInputs = lib.optionals stdenv.targetPlatform.isDarwin [
+    fixDarwinDylibNames
+  ];
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+    build2/b-boot --version
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D build2/b-boot $out/bin/b
+    runHook postInstall
+  '';
+
+  inherit (pkgs.build2) passthru;
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/build2/bpkg.nix b/nixpkgs/pkgs/development/tools/build-managers/build2/bpkg.nix
new file mode 100644
index 000000000000..95199e74294d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/build2/bpkg.nix
@@ -0,0 +1,64 @@
+{ lib, stdenv
+, build2
+, fetchurl
+, git
+, libbpkg
+, libbutl
+, libodb
+, libodb-sqlite
+, openssl
+, enableShared ? !stdenv.hostPlatform.isStatic
+, enableStatic ? !enableShared
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bpkg";
+  version = "0.14.0";
+
+  outputs = [ "out" "doc" "man" ];
+
+  src = fetchurl {
+    url = "https://pkg.cppget.org/1/alpha/build2/bpkg-${version}.tar.gz";
+    sha256 = "sha256-4WTFm0NYZOujxQ3PR9MyjXEJ4ql4qZ9OM5BePuHIK1M=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [
+    build2
+  ];
+  buildInputs = [
+    libbpkg
+    libbutl
+    libodb
+    libodb-sqlite
+  ];
+  checkInputs = [
+    git
+    openssl
+  ];
+
+  doCheck = !stdenv.isDarwin; # tests hang
+
+  # Failing test
+  postPatch = ''
+    rm tests/rep-create.testscript
+  '';
+
+  build2ConfigureFlags = [
+    "config.bin.lib=${build2.configSharedStatic enableShared enableStatic}"
+  ];
+
+  meta = with lib; {
+    description = "build2 package dependency manager";
+    # https://build2.org/bpkg/doc/bpkg.xhtml
+    longDescription = ''
+      The build2 package dependency manager is used to manipulate build
+      configurations, packages, and repositories.
+    '';
+    homepage = "https://build2.org/";
+    changelog = "https://git.build2.org/cgit/bpkg/tree/NEWS";
+    license = licenses.mit;
+    maintainers = with maintainers; [ r-burns ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/build2/default.nix b/nixpkgs/pkgs/development/tools/build-managers/build2/default.nix
new file mode 100644
index 000000000000..7af0089117a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/build2/default.nix
@@ -0,0 +1,98 @@
+{ stdenv, lib
+, build2
+, fetchurl
+, fixDarwinDylibNames
+, libbutl
+, libpkgconf
+, enableShared ? !stdenv.hostPlatform.isStatic
+, enableStatic ? !enableShared
+}:
+let
+  configSharedStatic = enableShared: enableStatic:
+    if enableShared && enableStatic then "both"
+    else if enableShared then "shared"
+    else if enableStatic then "static"
+    else throw "neither shared nor static libraries requested";
+in
+stdenv.mkDerivation rec {
+  pname = "build2";
+  version = "0.14.0";
+
+  outputs = [ "out" "dev" "doc" "man" ];
+
+  setupHook = ./setup-hook.sh;
+
+  src = fetchurl {
+    url = "https://pkg.cppget.org/1/alpha/build2/build2-${version}.tar.gz";
+    sha256 = "sha256-/pWj68JmBthOJ2CTQHo9Ww3MCv4xBOw0SusJpMfX5Y8=";
+  };
+
+  patches = [
+    # Remove any build/host config entries which refer to nix store paths
+    ./remove-config-store-paths.patch
+    # Pick up sysdirs from NIX_LDFLAGS
+    ./nix-ldflags-sysdirs.patch
+  ];
+
+  strictDeps = true;
+  nativeBuildInputs = [
+    build2
+  ];
+  disallowedReferences = [
+    build2
+    libbutl.dev
+    libpkgconf.dev
+  ];
+  buildInputs = [
+    libbutl
+    libpkgconf
+  ];
+
+  # Build2 uses @rpath on darwin
+  # https://github.com/build2/build2/issues/166
+  # N.B. this only adjusts the install_name after all libraries are installed;
+  # packages containing multiple interdependent libraries may have
+  # LC_LOAD_DYLIB entries containing @rpath, requiring manual fixup
+  propagatedBuildInputs = lib.optionals stdenv.targetPlatform.isDarwin [
+    fixDarwinDylibNames
+  ];
+
+  postPatch = ''
+    patchShebangs --build tests/bash/testscript
+  '';
+
+  build2ConfigureFlags = [
+    "config.bin.lib=${configSharedStatic enableShared enableStatic}"
+    "config.cc.poptions+=-I${lib.getDev libpkgconf}/include/pkgconf"
+  ];
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    install_name_tool -add_rpath "''${!outputLib}/lib" "''${!outputBin}/bin/b"
+  '';
+
+  passthru = {
+    bootstrap = build2;
+    inherit configSharedStatic;
+  };
+
+  meta = with lib; {
+    homepage = "https://www.build2.org/";
+    description = "build2 build system";
+    license = licenses.mit;
+    longDescription = ''
+      build2 is an open source (MIT), cross-platform build toolchain
+      that aims to approximate Rust Cargo's convenience for developing
+      and packaging C/C++ projects while providing more depth and
+      flexibility, especially in the build system.
+
+      build2 is a hierarchy of tools consisting of a general-purpose
+      build system, package manager (for package consumption), and
+      project manager (for project development). It is primarily aimed
+      at C/C++ projects as well as mixed-language projects involving
+      one of these languages (see bash and rust modules, for example).
+    '';
+    changelog = "https://git.build2.org/cgit/build2/tree/NEWS";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ hiro98 r-burns ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/build2/nix-ldflags-sysdirs.patch b/nixpkgs/pkgs/development/tools/build-managers/build2/nix-ldflags-sysdirs.patch
new file mode 100644
index 000000000000..4a1013f16e01
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/build2/nix-ldflags-sysdirs.patch
@@ -0,0 +1,42 @@
+diff --git a/libbuild2/cc/common.cxx b/libbuild2/cc/common.cxx
+index f848003c..0f14f9a5 100644
+--- a/libbuild2/cc/common.cxx
++++ b/libbuild2/cc/common.cxx
+@@ -966,6 +966,17 @@ namespace build2
+     void
+     msvc_extract_library_search_dirs (const strings&, dir_paths&); // msvc.cxx
+ 
++    static strings split (const string& s, const char delim) {
++      stringstream ss (s);
++      string item;
++      strings result;
++
++      while (getline (ss, item, delim)) {
++        result.push_back (item);
++      }
++      return result;
++    }
++
+     dir_paths common::
+     extract_library_search_dirs (const scope& bs) const
+     {
+@@ -987,8 +998,19 @@ namespace build2
+           msvc_extract_library_search_dirs (v, r);
+         else
+           gcc_extract_library_search_dirs (v, r);
++
+       };
+ 
++      // NIX_LDFLAGS are implicitly used when linking,
++      // so its -L flags effectively specify system dirs.
++      // However, they are only enabled when actually linking and are thus
++      // not detected by build2, so we need to manually pick them up here.
++      if (auto s = getenv ("NIX_LDFLAGS")) {
++        // TODO: do we need more robust args splitting here? e.g. shlex.split
++        auto args = split (s.value (), ' ');
++        gcc_extract_library_search_dirs (args, r);
++      }
++
+       // Note that the compiler mode options are in sys_lib_dirs.
+       //
+       if (auto l = bs[c_loptions]) extract (*l, c_loptions);
diff --git a/nixpkgs/pkgs/development/tools/build-managers/build2/remove-config-store-paths.patch b/nixpkgs/pkgs/development/tools/build-managers/build2/remove-config-store-paths.patch
new file mode 100644
index 000000000000..394cf208c439
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/build2/remove-config-store-paths.patch
@@ -0,0 +1,14 @@
+--- a/libbuild2/buildfile
++++ b/libbuild2/buildfile
+@@ -73,7 +73,11 @@ config/cxx{host-config}: config/in{host-config}
+   #
+   build2_config = $regex.replace_lines(                              \
++    $regex.replace_lines(                                            \
+     $config.save(),                                                  \
+     '^ *(#|(config\.(dist\.|install\.chroot|config\.hermetic))).*$', \
+     [null],                                                          \
++    return_lines),                                                   \
++    '^.*'$getenv(NIX_STORE)'/[a-z0-9]{32}-.*$',                      \
++    [null],                                                          \
+     return_lines)
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/build2/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/build2/setup-hook.sh
new file mode 100644
index 000000000000..16b592d3c109
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/build2/setup-hook.sh
@@ -0,0 +1,85 @@
+build2ConfigurePhase() {
+    runHook preConfigure
+
+    local flagsArray=(
+        "config.c=$CC"
+        "config.cxx=$CXX"
+        "config.cc.coptions+=-O2"
+        "config.cc.poptions+=-DNDEBUG"
+        "config.install.root=$prefix"
+        "config.install.bin=${!outputBin}/bin"
+        "config.install.doc=${!outputDoc}/share/doc/${shareDocName}"
+        "config.install.exec_root=${!outputBin}"
+        "config.install.include=${!outputInclude}/include"
+        "config.install.lib=${!outputLib}/lib"
+        "config.install.libexec=${!outputLib}/libexec"
+        "config.install.man=${!outputDoc}/share/man"
+        "config.install.sbin=${!outputBin}/sbin"
+        "config.install.bin.mode=755"
+        $build2ConfigureFlags "${build2ConfigureFlagsArray[@]}"
+    )
+
+    echo 'configure flags' "${flagsArray[@]}"
+
+    b configure "${flagsArray[@]}"
+
+    runHook postConfigure
+}
+
+build2BuildPhase() {
+    runHook preBuild
+
+    local flagsArray=(
+        $build2BuildFlags "${build2BuildFlagsArray[@]}"
+    )
+
+    echo 'build flags' "${flagsArray[@]}"
+    b "${flagsArray[@]}"
+
+    runHook postBuild
+}
+
+build2CheckPhase() {
+    runHook preCheck
+
+    local flagsArray=(
+        $build2CheckFlags "${build2CheckFlags[@]}"
+    )
+
+    echo 'check flags' "${flagsArray[@]}"
+
+    b test ${build2Dir:-.} "${flagsArray[@]}"
+
+    runHook postCheck
+}
+
+build2InstallPhase() {
+    runHook preInstall
+
+    local flagsArray=(
+        $build2InstallFlags "${build2InstallFlagsArray[@]}"
+        ${installTargets:-}
+    )
+
+    echo 'install flags' "${flagsArray[@]}"
+    b install "${flagsArray[@]}"
+
+    runHook postInstall
+}
+
+if [ -z "${dontUseBuild2Configure-}" -a -z "${configurePhase-}" ]; then
+    setOutputFlags=
+    configurePhase=build2ConfigurePhase
+fi
+
+if [ -z "${dontUseBuild2Build-}" -a -z "${buildPhase-}" ]; then
+    buildPhase=build2BuildPhase
+fi
+
+if [ -z "${dontUseBuild2Check-}" -a -z "${checkPhase-}" ]; then
+    checkPhase=build2CheckPhase
+fi
+
+if [ -z "${dontUseBuild2Install-}" -a -z "${installPhase-}" ]; then
+    installPhase=build2InstallPhase
+fi
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..7c77336b41be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/application-services.patch
@@ -0,0 +1,43 @@
+diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
+index 9a18184fd3..278d146dd1 100644
+--- a/Source/CMakeLists.txt
++++ b/Source/CMakeLists.txt
+@@ -933,7 +933,6 @@ 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)
+diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
+index 77403b076a..d5aac95e1e 100644
+--- a/Source/cmGlobalXCodeGenerator.cxx
++++ b/Source/cmGlobalXCodeGenerator.cxx
+@@ -49,10 +49,6 @@ struct cmLinkImplementation;
+ 
+ #if !defined(CMAKE_BOOTSTRAP) && defined(__APPLE__)
+ #  include <CoreFoundation/CoreFoundation.h>
+-#  if !TARGET_OS_IPHONE
+-#    define HAVE_APPLICATION_SERVICES
+-#    include <ApplicationServices/ApplicationServices.h>
+-#  endif
+ #endif
+ 
+ #if !defined(CMAKE_BOOTSTRAP)
+diff --git a/Utilities/cmlibarchive/CMakeLists.txt b/Utilities/cmlibarchive/CMakeLists.txt
+index 79452ffff6..a848731b7e 100644
+--- a/Utilities/cmlibarchive/CMakeLists.txt
++++ b/Utilities/cmlibarchive/CMakeLists.txt
+@@ -2013,11 +2013,6 @@ IF(ENABLE_TEST)
+ ENDIF(ENABLE_TEST)
+ ENDIF()
+ 
+-# We need CoreServices on Mac OS.
+-IF(APPLE)
+-  LIST(APPEND ADDITIONAL_LIBS "-framework CoreServices")
+-ENDIF(APPLE)
+-
+ add_subdirectory(libarchive)
+ IF(0) # CMake does not build libarchive's command-line tools.
+ add_subdirectory(cat)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/cmake/darwin-always-set-runtime-c-flag.patch b/nixpkgs/pkgs/development/tools/build-managers/cmake/darwin-always-set-runtime-c-flag.patch
new file mode 100644
index 000000000000..dc10e6b34231
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/darwin-always-set-runtime-c-flag.patch
@@ -0,0 +1,14 @@
+Revert of commit 1af23c4de2c7d58c06171d70b37794b5c860d5f4.
+--- b/Modules/Platform/Darwin.cmake
++++ a/Modules/Platform/Darwin.cmake
+@@ -47,9 +47,7 @@
+ set(CMAKE_SHARED_MODULE_SUFFIX ".so")
+ set(CMAKE_MODULE_EXISTS 1)
+ set(CMAKE_DL_LIBS "")
++set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
+-if(NOT "${_CURRENT_OSX_VERSION}" VERSION_LESS "10.5")
+-  set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
+-endif()
+ 
+ foreach(lang C CXX OBJC OBJCXX)
+   set(CMAKE_${lang}_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
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..47abc7ec767b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/default.nix
@@ -0,0 +1,135 @@
+{ stdenv, lib, fetchurl, pkg-config
+, bzip2, curlMinimal, expat, libarchive, xz, zlib, libuv, rhash
+, buildPackages
+# darwin attributes
+, SystemConfiguration
+, ps
+, isBootstrap ? false
+, useSharedLibraries ? (!isBootstrap && !stdenv.isCygwin)
+, useOpenSSL ? !isBootstrap, openssl
+, useNcurses ? false, ncurses
+, withQt5 ? false, qtbase, wrapQtAppsHook
+, buildDocs ? (!isBootstrap && (useNcurses || withQt5)), sphinx, texinfo
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cmake"
+    + lib.optionalString isBootstrap "-boot"
+    + lib.optionalString useNcurses "-cursesUI"
+    + lib.optionalString withQt5 "-qt5UI";
+  version = "3.22.2";
+
+  src = fetchurl {
+    url = "https://cmake.org/files/v${lib.versions.majorMinor version}/cmake-${version}.tar.gz";
+    sha256 = "sha256-PBxHi5ZQsQfUUsW9VFxy4vrU43wJuJoZhLmi9G32rO0=";
+  };
+
+  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
+
+  ] ++ lib.optional stdenv.isCygwin ./3.2.2-cygwin.patch
+  # Derived from https://github.com/curl/curl/commit/31f631a142d855f069242f3e0c643beec25d1b51
+  ++ lib.optional (stdenv.isDarwin && isBootstrap) ./remove-systemconfiguration-dep.patch
+  # On Darwin, always set CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG.
+  ++ lib.optional stdenv.isDarwin ./darwin-always-set-runtime-c-flag.patch;
+
+  outputs = [ "out" ]
+    ++ lib.optionals buildDocs [ "man" "info" ];
+  setOutputFlags = false;
+
+  setupHook = ./setup-hook.sh;
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  nativeBuildInputs = [ setupHook pkg-config ]
+    ++ lib.optionals buildDocs [ texinfo ]
+    ++ lib.optionals withQt5 [ wrapQtAppsHook ];
+
+  buildInputs = lib.optionals useSharedLibraries [ bzip2 curlMinimal expat libarchive xz zlib libuv rhash ]
+    ++ lib.optional useOpenSSL openssl
+    ++ lib.optional useNcurses ncurses
+    ++ lib.optional withQt5 qtbase
+    ++ lib.optional (stdenv.isDarwin && !isBootstrap) SystemConfiguration;
+
+  propagatedBuildInputs = lib.optional stdenv.isDarwin ps;
+
+  preConfigure = ''
+    fixCmakeFiles .
+    substituteInPlace Modules/Platform/UnixPaths.cmake \
+      --subst-var-by libc_bin ${lib.getBin stdenv.cc.libc} \
+      --subst-var-by libc_dev ${lib.getDev stdenv.cc.libc} \
+      --subst-var-by libc_lib ${lib.getLib stdenv.cc.libc}
+    # CC_FOR_BUILD and CXX_FOR_BUILD are used to bootstrap cmake
+    configureFlags="--parallel=''${NIX_BUILD_CORES:-1} CC=$CC_FOR_BUILD CXX=$CXX_FOR_BUILD $configureFlags"
+  '';
+
+  configureFlags = [
+    "CXXFLAGS=-Wno-elaborated-enum-base"
+    "--docdir=share/doc/${pname}${version}"
+  ] ++ (if useSharedLibraries then [ "--no-system-jsoncpp" "--system-libs" ] else [ "--no-system-libs" ]) # FIXME: cleanup
+  ++ lib.optional withQt5 "--qt-gui"
+  ++ lib.optionals buildDocs [
+    "--sphinx-build=${sphinx}/bin/sphinx-build"
+    "--sphinx-man"
+    "--sphinx-info"
+  ]
+  # Workaround https://gitlab.kitware.com/cmake/cmake/-/issues/20568
+  ++ lib.optionals stdenv.hostPlatform.is32bit [
+    "CFLAGS=-D_FILE_OFFSET_BITS=64"
+    "CXXFLAGS=-D_FILE_OFFSET_BITS=64"
+  ] ++ [
+    "--"
+    # 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=${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ar"
+    "-DCMAKE_RANLIB=${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ranlib"
+    "-DCMAKE_STRIP=${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}strip"
+
+    "-DCMAKE_USE_OPENSSL=${if useOpenSSL then "ON" else "OFF"}"
+    # Avoid depending on frameworks.
+    "-DBUILD_CursesDialog=${if useNcurses then "ON" else "OFF"}"
+  ];
+
+  # make install attempts to use the just-built cmake
+  preInstall = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    sed -i 's|bin/cmake|${buildPackages.cmakeMinimal}/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 lib; {
+    homepage = "https://cmake.org/";
+    changelog = "https://cmake.org/cmake/help/v${lib.versions.majorMinor version}/release/${lib.versions.majorMinor version}.html";
+    description = "Cross-Platform Makefile Generator";
+    longDescription = ''
+      CMake is an open-source, cross-platform family of tools designed to
+      build, test and package software. CMake is used to control the software
+      compilation process using simple platform and compiler independent
+      configuration files, and generate native makefiles and workspaces that
+      can be used in the compiler environment of your choice.
+    '';
+    platforms = 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..6607a9c6ed1f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/libuv-application-services.patch
@@ -0,0 +1,55 @@
+diff --git a/Utilities/cmlibuv/CMakeLists.txt b/Utilities/cmlibuv/CMakeLists.txt
+index 7625cf65d9..167903e309 100644
+--- a/Utilities/cmlibuv/CMakeLists.txt
++++ b/Utilities/cmlibuv/CMakeLists.txt
+@@ -193,6 +193,22 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+     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 --git a/Utilities/cmlibuv/src/unix/fsevents.c b/Utilities/cmlibuv/src/unix/fsevents.c
+index a51f29b3f6..3f6bf01968 100644
+--- a/Utilities/cmlibuv/src/unix/fsevents.c
++++ b/Utilities/cmlibuv/src/unix/fsevents.c
+@@ -21,7 +21,7 @@
+ #include "uv.h"
+ #include "internal.h"
+ 
+-#if TARGET_OS_IPHONE || MAC_OS_X_VERSION_MAX_ALLOWED < 1070
++#if !HAVE_CORESERVICES_CORESERVICES_H || MAC_OS_X_VERSION_MAX_ALLOWED < 1070
+ 
+ /* iOS (currently) doesn't provide the FSEvents-API (nor CoreServices) */
+ /* macOS prior to 10.7 doesn't provide the full FSEvents API so use kqueue */
+@@ -39,7 +39,7 @@ int uv__fsevents_close(uv_fs_event_t* handle) {
+ void uv__fsevents_loop_delete(uv_loop_t* loop) {
+ }
+ 
+-#else /* TARGET_OS_IPHONE */
++#else /* !HAVE_CORESERVICES_CORESERVICES_H */
+ 
+ #include "darwin-stub.h"
+ 
+@@ -920,4 +920,4 @@ int uv__fsevents_close(uv_fs_event_t* handle) {
+   return 0;
+ }
+ 
+-#endif /* TARGET_OS_IPHONE */
++#endif /* !HAVE_CORESERVICES_CORESERVICES_H */
diff --git a/nixpkgs/pkgs/development/tools/build-managers/cmake/remove-systemconfiguration-dep.patch b/nixpkgs/pkgs/development/tools/build-managers/cmake/remove-systemconfiguration-dep.patch
new file mode 100644
index 000000000000..2329ae3f8355
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/remove-systemconfiguration-dep.patch
@@ -0,0 +1,73 @@
+diff --git a/Utilities/cmcurl/CMakeLists.txt b/Utilities/cmcurl/CMakeLists.txt
+index 9eef01aaf0..d141d4086c 100644
+--- a/Utilities/cmcurl/CMakeLists.txt
++++ b/Utilities/cmcurl/CMakeLists.txt
+@@ -537,12 +537,7 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+       message(FATAL_ERROR "CoreFoundation framework not found")
+   endif()
+ 
+-  find_library(SYSTEMCONFIGURATION_FRAMEWORK "SystemConfiguration")
+-  if(NOT SYSTEMCONFIGURATION_FRAMEWORK)
+-     message(FATAL_ERROR "SystemConfiguration framework not found")
+-  endif()
+-
+-  list(APPEND CURL_LIBS "-framework CoreFoundation" "-framework SystemConfiguration")
++  list(APPEND CURL_LIBS "-framework CoreFoundation")
+ 
+   if(CMAKE_USE_SECTRANSP)
+     find_library(SECURITY_FRAMEWORK "Security")
+diff --git a/Utilities/cmcurl/lib/curl_setup.h b/Utilities/cmcurl/lib/curl_setup.h
+index 554dcc1e67..059f14e632 100644
+--- a/Utilities/cmcurl/lib/curl_setup.h
++++ b/Utilities/cmcurl/lib/curl_setup.h
+@@ -257,11 +257,7 @@
+  * performing this task will result in a synthesized IPv6 address.
+  */
+ #if defined(__APPLE__) && !defined(USE_ARES)
+-#include <TargetConditionals.h>
+ #define USE_RESOLVE_ON_IPS 1
+-#  if defined(TARGET_OS_OSX) && TARGET_OS_OSX
+-#    define CURL_OSX_CALL_COPYPROXIES 1
+-#  endif
+ #endif
+ 
+ #ifdef USE_LWIPSOCK
+diff --git a/Utilities/cmcurl/lib/hostip.c b/Utilities/cmcurl/lib/hostip.c
+index 117caa2957..9f7c709e44 100644
+--- a/Utilities/cmcurl/lib/hostip.c
++++ b/Utilities/cmcurl/lib/hostip.c
+@@ -68,10 +68,6 @@
+ #include "curl_memory.h"
+ #include "memdebug.h"
+ 
+-#if defined(ENABLE_IPV6) && defined(CURL_OSX_CALL_COPYPROXIES)
+-#include <SystemConfiguration/SCDynamicStoreCopySpecific.h>
+-#endif
+-
+ #if defined(CURLRES_SYNCH) && \
+     defined(HAVE_ALARM) && defined(SIGALRM) && defined(HAVE_SIGSETJMP)
+ /* alarm-based timeouts can only be used with all the dependencies satisfied */
+@@ -653,23 +649,6 @@ enum resolve_t Curl_resolv(struct Curl_easy *data,
+         return CURLRESOLV_ERROR;
+     }
+ 
+-#if defined(ENABLE_IPV6) && defined(CURL_OSX_CALL_COPYPROXIES)
+-    {
+-      /*
+-       * The automagic conversion from IPv4 literals to IPv6 literals only
+-       * works if the SCDynamicStoreCopyProxies system function gets called
+-       * first. As Curl currently doesn't support system-wide HTTP proxies, we
+-       * therefore don't use any value this function might return.
+-       *
+-       * This function is only available on a macOS and is not needed for
+-       * IPv4-only builds, hence the conditions above.
+-       */
+-      CFDictionaryRef dict = SCDynamicStoreCopyProxies(NULL);
+-      if(dict)
+-        CFRelease(dict);
+-    }
+-#endif
+-
+ #ifndef USE_RESOLVE_ON_IPS
+     /* First check if this is an IPv4 address string */
+     if(Curl_inet_pton(AF_INET, hostname, &in) > 0)
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..b71c2dd44416
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/search-path.patch
@@ -0,0 +1,74 @@
+diff --git a/Modules/Platform/UnixPaths.cmake b/Modules/Platform/UnixPaths.cmake
+index b9381c3d7d..cecc40a89e 100644
+--- a/Modules/Platform/UnixPaths.cmake
++++ b/Modules/Platform/UnixPaths.cmake
+@@ -26,9 +26,6 @@ get_filename_component(_CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" PATH)
+ # please make sure to keep Help/variable/CMAKE_SYSTEM_PREFIX_PATH.rst
+ # synchronized
+ list(APPEND CMAKE_SYSTEM_PREFIX_PATH
+-  # Standard
+-  /usr/local /usr /
+-
+   # CMake install location
+   "${_CMAKE_INSTALL_DIR}"
+   )
+@@ -47,24 +44,19 @@ endif()
+ 
+ # 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
+   )
+ 
+ if(CMAKE_SYSROOT_COMPILE)
+@@ -77,15 +69,15 @@ endif()
+ # parsing the implicit directory information from compiler output.
+ set(_CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES_INIT
+   ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}
+-  "${_cmake_sysroot_compile}/usr/include"
++  @libc_dev@/include
+   )
+ set(_CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES_INIT
+   ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}
+-  "${_cmake_sysroot_compile}/usr/include"
++  @libc_dev@/include
+   )
+ set(_CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES_INIT
+   ${CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES}
+-  "${_cmake_sysroot_compile}/usr/include"
++  @libc_dev@/include
+   )
+ 
+ unset(_cmake_sysroot_compile)
+diff --git a/Modules/Platform/WindowsPaths.cmake b/Modules/Platform/WindowsPaths.cmake
+index b9e2f17979..ab517cd4a7 100644
+--- a/Modules/Platform/WindowsPaths.cmake
++++ b/Modules/Platform/WindowsPaths.cmake
+@@ -70,7 +70,7 @@ endif()
+ 
+ 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..89e8e0e197a0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/cmake/setup-hook.sh
@@ -0,0 +1,175 @@
+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"
+
+    # 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"
+
+    # The docdir flag needs to include PROJECT_NAME as per GNU guidelines,
+    # try to extract it from CMakeLists.txt.
+    if [[ -z "$shareDocName" ]]; then
+        local cmakeLists="${cmakeDir}/CMakeLists.txt"
+        if [[ -f "$cmakeLists" ]]; then
+            local shareDocName="$(grep --only-matching --perl-regexp --ignore-case '\bproject\s*\(\s*"?\K([^[:space:]")]+)' < "$cmakeLists" | head -n1)"
+        fi
+        # The argument sometimes contains garbage or variable interpolation.
+        # When that is the case, let’s fall back to the derivation name.
+        if [[ -z "$shareDocName" ]] || echo "$shareDocName" | grep -q '[^a-zA-Z0-9_+-]'; then
+            if [[ -n "${pname-}" ]]; then
+                shareDocName="$pname"
+            else
+                shareDocName="$(echo "$name" | sed 's/-[^a-zA-Z].*//')"
+            fi
+        fi
+    fi
+
+    # This ensures correct paths with multiple output derivations
+    # It requires the project to use variables from GNUInstallDirs module
+    # https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html
+    cmakeFlags="-DCMAKE_INSTALL_BINDIR=${!outputBin}/bin $cmakeFlags"
+    cmakeFlags="-DCMAKE_INSTALL_SBINDIR=${!outputBin}/sbin $cmakeFlags"
+    cmakeFlags="-DCMAKE_INSTALL_INCLUDEDIR=${!outputInclude}/include $cmakeFlags"
+    cmakeFlags="-DCMAKE_INSTALL_OLDINCLUDEDIR=${!outputInclude}/include $cmakeFlags"
+    cmakeFlags="-DCMAKE_INSTALL_MANDIR=${!outputMan}/share/man $cmakeFlags"
+    cmakeFlags="-DCMAKE_INSTALL_INFODIR=${!outputInfo}/share/info $cmakeFlags"
+    cmakeFlags="-DCMAKE_INSTALL_DOCDIR=${!outputDoc}/share/doc/${shareDocName} $cmakeFlags"
+    cmakeFlags="-DCMAKE_INSTALL_LIBDIR=${!outputLib}/lib $cmakeFlags"
+    cmakeFlags="-DCMAKE_INSTALL_LIBEXECDIR=${!outputLib}/libexec $cmakeFlags"
+    cmakeFlags="-DCMAKE_INSTALL_LOCALEDIR=${!outputLib}/share/locale $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_USE_PACKAGE_REGISTRY=OFF $cmakeFlags"
+    cmakeFlags="-DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=OFF $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=
+  iframework_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}"
+    elif test -n "$iframework_seen" && test -d "$flag"; then
+      iframework_seen=
+      export CMAKE_FRAMEWORK_PATH="${CMAKE_FRAMEWORK_PATH-}${CMAKE_FRAMEWORK_PATH:+:}${flag}"
+    else
+      isystem_seen=
+      iframework_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
+          ;;
+        -iframework)
+          iframework_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..251268a449d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/colormake/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, perl }:
+
+stdenv.mkDerivation {
+  pname = "colormake";
+  version = "2.1.0";
+
+  buildInputs = [ perl ];
+
+  src = fetchFromGitHub {
+    owner = "pagekite";
+    repo = "Colormake";
+    rev = "66544f40d";
+    sha256 = "8e714c5540305d169989d9387dbac47b8b9fb2cfb424af7bcd412bfe684dc6d7";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -fa colormake.pl colormake colormake-short clmake clmake-short $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Simple wrapper around make to colorize the output";
+    homepage = "https://bre.klaki.net/programs/colormake/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bhipple ];
+  };
+}
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..e4a616f9995e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/conan/default.nix
@@ -0,0 +1,112 @@
+{ lib, stdenv, python3, fetchFromGitHub, git, pkg-config }:
+
+# Note:
+# Conan has specific dependency demands; check
+#     https://github.com/conan-io/conan/blob/master/conans/requirements.txt
+#     https://github.com/conan-io/conan/blob/master/conans/requirements_server.txt
+# on the release branch/commit we're packaging.
+#
+# Two approaches are used here to deal with that:
+# Pinning the specific versions it wants in `newPython`,
+# and using `substituteInPlace conans/requirements.txt ...`
+# in `postPatch` to allow newer versions when we know
+# (e.g. from changelogs) that they are compatible.
+
+let newPython = python3.override {
+  packageOverrides = self: super: {
+    node-semver = super.node-semver.overridePythonAttrs (oldAttrs: rec {
+      version = "0.6.1";
+      src = oldAttrs.src.override {
+        inherit version;
+        sha256 = "1dv6mjsm67l1razcgmq66riqmsb36wns17mnipqr610v0z0zf5j0";
+      };
+    });
+    # https://github.com/conan-io/conan/issues/8876
+    pyjwt = super.pyjwt.overridePythonAttrs (oldAttrs: rec {
+      version = "1.7.1";
+      src = oldAttrs.src.override {
+        inherit version;
+        sha256 = "8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96";
+      };
+      disabledTests = [
+        "test_ec_verify_should_return_false_if_signature_invalid"
+      ];
+    });
+    # conan needs jinja2<3
+    jinja2 = super.jinja2.overridePythonAttrs (oldAttrs: rec {
+      version = "2.11.3";
+      src = oldAttrs.src.override {
+        inherit version;
+        sha256 = "a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6";
+      };
+    });
+    # old jinja2 needs old markupsafe
+    markupsafe = super.markupsafe.overridePythonAttrs (oldAttrs: rec {
+      version = "1.1.1";
+      src = oldAttrs.src.override {
+        inherit version;
+        sha256 = "29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b";
+      };
+    });
+  };
+};
+
+in newPython.pkgs.buildPythonApplication rec {
+  version = "1.43.1";
+  pname = "conan";
+
+  src = fetchFromGitHub {
+    owner = "conan-io";
+    repo = "conan";
+    rev = version;
+    sha256 = "0jwi7smgy2d9m49igijqr2p4ncw5nksjbijj8fzjvf1lgxgnyjhr";
+  };
+
+  propagatedBuildInputs = with newPython.pkgs; [
+    bottle
+    colorama
+    python-dateutil
+    deprecation
+    distro
+    fasteners
+    future
+    jinja2
+    node-semver
+    patch-ng
+    pluginbase
+    pygments
+    pyjwt
+    pylint # Not in `requirements.txt` but used in hooks, see https://github.com/conan-io/conan/pull/6152
+    pyyaml
+    requests
+    six
+    tqdm
+    urllib3
+  ] ++ lib.optionals stdenv.isDarwin [ idna cryptography pyopenssl ];
+
+  checkInputs = [
+    pkg-config
+    git
+  ] ++ (with newPython.pkgs; [
+    codecov
+    mock
+    nose
+    parameterized
+    webtest
+  ]);
+
+  # TODO: reenable tests now that we fetch tests w/ the source from GitHub.
+  # Not enabled right now due to time constraints/failing tests that I didn't have time to track down
+  doCheck = false;
+
+  postPatch = ''
+    substituteInPlace conans/requirements.txt --replace 'PyYAML>=3.11, <6.0' 'PyYAML>=3.11'
+  '';
+
+  meta = with lib; {
+    homepage = "https://conan.io";
+    description = "Decentralized and portable C/C++ package manager";
+    license = licenses.mit;
+    maintainers = with maintainers; [ HaoZeke ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/corrosion/cmake-install-full-dir.patch b/nixpkgs/pkgs/development/tools/build-managers/corrosion/cmake-install-full-dir.patch
new file mode 100644
index 000000000000..da5e923e0fa5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/corrosion/cmake-install-full-dir.patch
@@ -0,0 +1,18 @@
+diff --git a/cmake/CorrosionConfig.cmake.in b/cmake/CorrosionConfig.cmake.in
+index c042a00..491f53c 100644
+--- a/cmake/CorrosionConfig.cmake.in
++++ b/cmake/CorrosionConfig.cmake.in
+@@ -4,11 +4,11 @@ if (Corrosion_FOUND)
+     return()
+ endif()
+ 
+-list(APPEND CMAKE_MODULE_PATH "${PACKAGE_PREFIX_DIR}/@CORROSION_INSTALL_PREFIX@@CMAKE_INSTALL_DATADIR@/cmake")
++list(APPEND CMAKE_MODULE_PATH "@CMAKE_INSTALL_FULL_DATADIR@/cmake")
+ 
+ add_executable(Corrosion::Generator IMPORTED GLOBAL)
+ set_property(
+     TARGET Corrosion::Generator
+-    PROPERTY IMPORTED_LOCATION "${PACKAGE_PREFIX_DIR}/@CORROSION_INSTALL_PREFIX@@CMAKE_INSTALL_LIBEXECDIR@/corrosion-generator")
++    PROPERTY IMPORTED_LOCATION "@CMAKE_INSTALL_FULL_LIBEXECDIR@/corrosion-generator")
+ 
+ include(Corrosion)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/corrosion/default.nix b/nixpkgs/pkgs/development/tools/build-managers/corrosion/default.nix
new file mode 100644
index 000000000000..9f0421d3eee5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/corrosion/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, rustPlatform
+, libiconv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "corrosion";
+  version = "unstable-2021-11-23";
+
+  src = fetchFromGitHub {
+    owner = "AndrewGaspar";
+    repo = "corrosion";
+    rev = "f679545a63a8b214a415e086f910126ab66714fa";
+    sha256 = "sha256-K+QdhWc5n5mH6yxiQa/v5HsrqnWJ5SM93IprVpyCVO0=";
+  };
+
+  patches = [
+    # https://github.com/AndrewGaspar/corrosion/issues/84
+    ./cmake-install-full-dir.patch
+  ];
+
+  cargoRoot = "generator";
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    sourceRoot = "${src.name}/${cargoRoot}";
+    name = "${pname}-${version}";
+    sha256 = "sha256-ZvCRgXv+ASMIL00oc3luegV1qVNDieU9J7mbIhfayGk=";
+  };
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  nativeBuildInputs = [
+    cmake
+  ] ++ (with rustPlatform; [
+    cargoSetupHook
+    rust.cargo
+    rust.rustc
+  ]);
+
+  cmakeFlags = [
+    "-DRust_CARGO=${rustPlatform.rust.cargo}/bin/cargo"
+
+    # tests cannot find cargo because Rust_CARGO is unset before tests
+    "-DCORROSION_BUILD_TESTS=OFF"
+  ];
+
+  meta = with lib; {
+    description = "Tool for integrating Rust into an existing CMake project";
+    homepage = "https://github.com/AndrewGaspar/corrosion";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
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..466133010e04
--- /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
+   2.1.4
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..2f753c82521e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/drake/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "drake";
+  gemdir = ./.;
+  exes = [ "drake" ];
+
+  passthru.updateScript = bundlerUpdateScript "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 nicknovitski ];
+    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..09b3bc7ec061
--- /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";
+  };
+}
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..ec67bcd691ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/dub/default.nix
@@ -0,0 +1,155 @@
+{ lib, stdenv, fetchFromGitHub, curl, libevent, rsync, ldc, dcompiler ? ldc }:
+
+assert dcompiler != null;
+
+stdenv.mkDerivation rec {
+  pname = "dub";
+  version = "1.23.0";
+
+  enableParallelBuilding = true;
+
+  src = fetchFromGitHub {
+    owner = "dlang";
+    repo = "dub";
+    rev = "v${version}";
+    sha256 = "06a4whsl1m600k096nwif83n7za3vr7pj1xwapncy5fcad1gmady";
+  };
+
+  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 = [ dcompiler libevent rsync ];
+  buildInputs = [ curl ];
+
+  buildPhase = ''
+    for dc_ in dmd ldmd2 gdmd; do
+      echo "... check for D compiler $dc_ ..."
+      dc=$(type -P $dc_ || echo "")
+      if [ ! "$dc" == "" ]; then
+        break
+      fi
+    done
+    if [ "$dc" == "" ]; then
+      exit "Error: could not find D compiler"
+    fi
+    echo "$dc_ found and used as D compiler to build $pname"
+    $dc ./build.d
+    ./build
+  '';
+
+  doCheck = !stdenv.isDarwin;
+
+  checkPhase = ''
+    export DUB=$NIX_BUILD_TOP/source/bin/dub
+    export PATH=$PATH:$NIX_BUILD_TOP/source/bin/
+    export DC=${dcompiler.out}/bin/${dcompiler.pname}
+    echo "DC out --> $DC"
+    export HOME=$TMP
+
+    rm -rf test/issue502-root-import
+    rm test/issue674-concurrent-dub.sh
+    rm test/issue672-upgrade-optional.sh
+    rm test/issue990-download-optional-selected.sh
+    rm test/issue877-auto-fetch-package-on-run.sh
+    rm test/issue1037-better-dependency-messages.sh
+    rm test/issue1416-maven-repo-pkg-supplier.sh
+    rm test/issue1180-local-cache-broken.sh
+    rm test/issue1574-addcommand.sh
+    rm test/issue1524-maven-upgrade-dependency-tree.sh
+    rm test/issue1773-lint.sh
+
+    rm test/ddox.sh
+    rm test/fetchzip.sh
+    rm test/feat663-search.sh
+    rm -rf test/git-dependency
+    rm test/interactive-remove.sh
+    rm test/timeout.sh
+    rm test/version-spec.sh
+    rm test/0-init-multi.sh
+    rm test/0-init-multi-json.sh
+    rm test/4-describe-data-1-list.sh
+    rm test/4-describe-data-3-zero-delim.sh
+    rm test/4-describe-import-paths.sh
+    rm test/4-describe-string-import-paths.sh
+    rm test/4-describe-json.sh
+    rm test/5-convert-stdout.sh
+    rm test/issue1003-check-empty-ld-flags.sh
+    rm test/issue103-single-file-package.sh
+    rm test/issue1040-run-with-ver.sh
+    rm test/issue1091-bogus-rebuild.sh
+    rm test/issue1194-warn-wrong-subconfig.sh
+    rm test/issue1277.sh
+    rm test/issue1372-ignore-files-in-hidden-dirs.sh
+    rm test/issue1447-build-settings-vars.sh
+    rm test/issue1531-toolchain-requirements.sh
+    rm test/issue346-redundant-flags.sh
+    rm test/issue361-optional-deps.sh
+    rm test/issue564-invalid-upgrade-dependency.sh
+    rm test/issue586-subpack-dep.sh
+    rm test/issue616-describe-vs-generate-commands.sh
+    rm test/issue686-multiple-march.sh
+    rm test/issue813-fixed-dependency.sh
+    rm test/issue813-pure-sub-dependency.sh
+    rm test/issue820-extra-fields-after-convert.sh
+    rm test/issue923-subpackage-deps.sh
+    rm test/single-file-sdl-default-name.sh
+    rm test/subpackage-common-with-sourcefile-globbing.sh
+    rm test/issue934-path-dep.sh
+    rm -r test/1-dynLib-simple
+    rm -r test/1-exec-simple-package-json
+    rm -r test/1-exec-simple
+    rm -r test/1-staticLib-simple
+    rm -r test/2-dynLib-dep
+    rm -r test/2-staticLib-dep
+    rm -r test/2-dynLib-with-staticLib-dep
+    rm -r test/2-sourceLib-dep/
+    rm -r test/3-copyFiles
+    rm -r test/custom-source-main-bug487
+    rm -r test/custom-unittest
+    rm -r test/issue1262-version-inheritance-diamond
+    rm -r test/issue1003-check-empty-ld-flags
+    rm -r test/ignore-hidden-1
+    rm -r test/ignore-hidden-2
+    rm -r test/issue1427-betterC
+    rm -r test/issue130-unicode-*
+    rm -r test/issue1262-version-inheritance
+    rm -r test/issue1372-ignore-files-in-hidden-dirs
+    rm -r test/issue1350-transitive-none-deps
+    rm -r test/issue1775
+    rm -r test/issue1447-build-settings-vars
+    rm -r test/issue1408-inherit-linker-files
+    rm -r test/issue1551-var-escaping
+    rm -r test/issue754-path-selection-fail
+    rm -r test/issue1788-incomplete-string-import-override
+    rm -r test/subpackage-ref
+    rm -r test/issue777-bogus-path-dependency
+    rm -r test/issue959-path-based-subpack-dep
+    rm -r test/issue97-targettype-none-nodeps
+    rm -r test/issue97-targettype-none-onerecipe
+    rm -r test/path-subpackage-ref
+    rm -r test/sdl-package-simple
+
+    ./test/run-unittest.sh
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/dub $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Package and build manager for D applications and libraries";
+    homepage = "https://code.dlang.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ThomasMader ];
+    platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/ekam/default.nix b/nixpkgs/pkgs/development/tools/build-managers/ekam/default.nix
new file mode 100644
index 000000000000..9247a2b21302
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/ekam/default.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv, fetchFromGitHub, capnproto }:
+
+stdenv.mkDerivation {
+  pname = "ekam";
+  version = "unstable-2021-09-18";
+
+  src = fetchFromGitHub {
+    owner = "capnproto";
+    repo = "ekam";
+    rev = "77c338f8bd8f4a2ce1e6199b2a52363f1fccf388";
+    sha256 = "0q4bizlb1ykzdp4ca0kld6xm5ml9q866xrj3ijffcnyiyqr51qr8";
+  };
+
+  # The capnproto *source* is required to build ekam.
+  # https://github.com/capnproto/ekam/issues/5
+  #
+  # Specifically, the git version of the source is required, as
+  # capnproto release tarballs do not include ekam rule files.
+  postUnpack = ''
+    mkdir -p $sourceRoot/deps
+    cp -r ${capnproto.src} $sourceRoot/deps/capnproto
+  '';
+
+  postPatch = ''
+    # A single capnproto test file expects to be able to write to
+    # /var/tmp.  We change it to use /tmp because /var is not available
+    # under nix-build.
+    substituteInPlace deps/capnproto/c++/src/kj/filesystem-disk-test.c++ \
+      --replace "/var/tmp" "/tmp"
+  '';
+
+  # NIX_ENFORCE_PURITY prevents ld from linking against anything outside
+  # of the nix store -- but ekam builds capnp locally and links against it,
+  # so that causes the build to fail. So, we turn this off.
+  #
+  # See: https://nixos.wiki/wiki/Development_environment_with_nix-shell#Troubleshooting
+  preBuild = ''
+    unset NIX_ENFORCE_PURITY
+  '';
+
+  makeFlags = [
+    "PARALLEL=$(NIX_BUILD_CORES)"
+  ];
+
+  installPhase = ''
+    mkdir $out
+    cp -r bin $out
+
+    # Remove capnproto tools; there's a separate nix package for that.
+    rm $out/bin/capnp*
+    # Don't distribute ekam-bootstrap, which is not needed outside this build.
+    rm $out/bin/ekam-bootstrap
+  '';
+
+  meta = with lib; {
+    description = ''Build system ("make" in reverse)'';
+    longDescription = ''
+      Ekam ("make" spelled backwards) is a build system which automatically
+      figures out what to build and how to build it purely based on the
+      source code. No separate "makefile" is needed.
+    '';
+    homepage = "https://github.com/capnproto/ekam";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.garrison ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/fac/default.nix b/nixpkgs/pkgs/development/tools/build-managers/fac/default.nix
new file mode 100644
index 000000000000..b6481c621e98
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/fac/default.nix
@@ -0,0 +1,47 @@
+{ lib, rustPlatform, fetchCrate, git }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fac-build";
+  version = "0.5.4";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = "fac";
+    sha256 = "sha256-+JJVuKUdnjJoQJ4a2EE0O6jZdVoFxPwbPgfD2LfiDPI=";
+  };
+
+  cargoSha256 = "sha256-XT4FQVE+buORuZAFZK5Qnf/Fl3QSvw4SHUuCzWhxUdk=";
+
+  # fac includes a unit test called ls_files_works which assumes it's
+  # running in a git repo. Nix's sandbox runs cargo build outside git,
+  # so this test won't work.
+  checkFlagsArray = [ "--skip=ls_files_works" ];
+
+  # fac calls git at runtime, expecting it to be in the PATH,
+  # so we need to patch it to call git by absolute path instead.
+  postPatch = ''
+    substituteInPlace src/git.rs \
+        --replace 'std::process::Command::new("git")' \
+        'std::process::Command::new("${git}/bin/git")'
+  '';
+
+  meta = with lib; {
+    description = ''
+      A build system that uses ptrace to handle dependencies automatically
+    '';
+    longDescription = ''
+      Fac is a general-purpose build system inspired by make that utilizes
+      ptrace to ensure that all dependences are enumerated and that all
+      source files are added to a (git) repo. An important feature of fac
+      is that it automatically handles dependencies, rather than either
+      complaining about them or giving an incorrect build. Currently, fac
+      only runs on linux systems, but on those systems it is incredibly
+      easy to use!
+    '';
+    homepage = "https://physics.oregonstate.edu/~roundyd/fac";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dpercy ];
+    mainProgram = "fac";
+  };
+}
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..508a821d7495
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gn/default.nix
@@ -0,0 +1,10 @@
+{ callPackage, ... } @ args:
+
+callPackage ./generic.nix args {
+  # Note: Please use the recommended version for Chromium, e.g.:
+  # https://git.archlinux.org/svntogit/packages.git/tree/trunk/chromium-gn-version.sh?h=packages/gn
+  rev = "fd3d768bcfd44a8d9639fe278581bd9851d0ce3a";
+  revNum = "1718"; # git describe HEAD --match initial-commit | cut -d- -f3
+  version = "2020-03-09";
+  sha256 = "1asc14y8by7qcn10vbk467hvx93s30pif8r0brissl0sihsaqazr";
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gn/generic.nix b/nixpkgs/pkgs/development/tools/build-managers/gn/generic.nix
new file mode 100644
index 000000000000..4214bb822b99
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gn/generic.nix
@@ -0,0 +1,60 @@
+{ stdenv, lib, fetchgit, darwin, writeText
+, ninja, python3
+, ...
+}:
+
+{ rev, revNum, version, sha256 }:
+
+let
+  revShort = 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_NUM ${revNum}
+    #define LAST_COMMIT_POSITION "${revNum} (${revShort})"
+
+    #endif  // OUT_LAST_COMMIT_POSITION_H_
+  '';
+
+in stdenv.mkDerivation {
+  pname = "gn-unstable";
+  inherit version;
+
+  src = fetchgit {
+    # Note: The TAR-Archives (+archive/${rev}.tar.gz) are not deterministic!
+    url = "https://gn.googlesource.com/gn";
+    inherit rev sha256;
+  };
+
+  nativeBuildInputs = [ ninja python3 ];
+  buildInputs = lib.optionals stdenv.isDarwin (with darwin; with apple_sdk.frameworks; [
+    libobjc
+    cctools
+
+    # frameworks
+    ApplicationServices
+    Foundation
+    AppKit
+  ]);
+
+  buildPhase = ''
+    python build/gen.py --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 build files for Ninja";
+    homepage = "https://gn.googlesource.com/gn";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ stesie matthewbauer primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gn/rev1924.nix b/nixpkgs/pkgs/development/tools/build-managers/gn/rev1924.nix
new file mode 100644
index 000000000000..1b17328f2e09
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gn/rev1924.nix
@@ -0,0 +1,8 @@
+{ callPackage, ... } @ args:
+
+callPackage ./generic.nix args {
+  rev = "24e2f7df92641de0351a96096fb2c490b2436bb8";
+  revNum = "1924"; # git describe HEAD --match initial-commit | cut -d- -f3
+  version = "2021-08-08";
+  sha256 = "1lwkyhfhw0zd7daqz466n7x5cddf0danr799h4jg3s0yvd4galjl";
+}
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..850f18948cad
--- /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/0001-No-impure-bin-sh.patch b/nixpkgs/pkgs/development/tools/build-managers/gnumake/0001-No-impure-bin-sh.patch
new file mode 100644
index 000000000000..58ee2d6fe09b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/0001-No-impure-bin-sh.patch
@@ -0,0 +1,35 @@
+From e00a5257a6ca5fedbf68b09eee7df3502971a057 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
+Date: Sat, 24 Apr 2021 10:11:40 +0200
+Subject: [PATCH 1/2] No impure bin sh
+
+default_shell is used to populuate default shell used to execute jobs.
+Unless SHELL is set to a different value this would be /bin/sh.
+Our stdenv provides sh in form of bash anyway. Having this value not
+hard-coded has some advantages:
+
+- It would ensure that on all systems it uses sh from its PATH rather
+  than /bin/sh, which helps as different systems might have different
+  shells there (bash vs. dash)
+- In the past I had issues with LD_PRELOAD with BEAR, where /bin/sh
+  used a different glibc than BEAR which came from my development shell.
+---
+ src/job.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/job.c b/src/job.c
+index ae1f18b..6b4ddb3 100644
+--- a/src/job.c
++++ b/src/job.c
+@@ -77,7 +77,7 @@ char * vms_strsignal (int status);
+ 
+ #else
+ 
+-const char *default_shell = "/bin/sh";
++const char *default_shell = "sh";
+ int batch_mode_shell = 0;
+ 
+ #endif
+-- 
+2.31.1
+
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gnumake/0002-remove-impure-dirs.patch b/nixpkgs/pkgs/development/tools/build-managers/gnumake/0002-remove-impure-dirs.patch
new file mode 100644
index 000000000000..e62aee7d9993
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/0002-remove-impure-dirs.patch
@@ -0,0 +1,40 @@
+From 795d63d3c8b5c0dbb7e544954f75507b371b7228 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
+Date: Sat, 24 Apr 2021 10:20:16 +0200
+Subject: [PATCH 2/2] remove impure dirs
+
+---
+ src/read.c   | 3 ---
+ src/remake.c | 2 --
+ 2 files changed, 5 deletions(-)
+
+diff --git a/src/read.c b/src/read.c
+index fa197fb..defacfb 100644
+--- a/src/read.c
++++ b/src/read.c
+@@ -109,9 +109,6 @@ static const char *default_include_directories[] =
+ #endif
+     INCLUDEDIR,
+ #ifndef _AMIGA
+-    "/usr/gnu/include",
+-    "/usr/local/include",
+-    "/usr/include",
+ #endif
+     0
+   };
+diff --git a/src/remake.c b/src/remake.c
+index fb237c5..94bff7d 100644
+--- a/src/remake.c
++++ b/src/remake.c
+@@ -1601,8 +1601,6 @@ library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr)
+   static const char *dirs[] =
+     {
+ #ifndef _AMIGA
+-      "/lib",
+-      "/usr/lib",
+ #endif
+ #if defined(WINDOWS32) && !defined(LIBDIR)
+ /*
+-- 
+2.31.1
+
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..7d56e55ebdb3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchurl, guileSupport ? false, pkg-config ? null , guile ? null }:
+
+assert guileSupport -> ( pkg-config != null && guile != null );
+
+stdenv.mkDerivation rec {
+  pname = "gnumake";
+  version = "4.2.1";
+
+  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
+    ./glibc-2.33-glob.patch
+  ];
+
+  nativeBuildInputs = lib.optionals guileSupport [ pkg-config ];
+  buildInputs = lib.optionals guileSupport [ guile ];
+
+  configureFlags = 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.
+    ++ lib.optional stdenv.isDarwin "ac_cv_struct_st_mtim_nsec=no";
+
+  outputs = [ "out" "man" "info" ];
+
+  meta = with 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/glibc-2.33-glob.patch b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/glibc-2.33-glob.patch
new file mode 100644
index 000000000000..d3e424d1c499
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/4.2/glibc-2.33-glob.patch
@@ -0,0 +1,17 @@
+diff --git glob/glob.c glob/glob.c
+index 924f2b3..d4ef0c5 100644
+--- glob/glob.c
++++ glob/glob.c
+@@ -212,8 +212,8 @@ my_realloc (p, n)
+ # define __alloca	alloca
+ 
+ 
+-#ifndef __GNU_LIBRARY__
+ # define __stat stat
++#ifndef __GNU_LIBRARY__
+ # ifdef STAT_MACROS_BROKEN
+ #  undef S_ISDIR
+ # endif
+-- 
+2.31.1
+
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/gnumake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/gnumake/default.nix
new file mode 100644
index 000000000000..183548f5e31b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gnumake/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchurl, guileSupport ? false, pkg-config, guile }:
+
+stdenv.mkDerivation rec {
+  pname = "gnumake";
+  version = "4.3";
+
+  src = fetchurl {
+    url = "mirror://gnu/make/make-${version}.tar.gz";
+    sha256 = "06cfqzpqsvdnsxbysl5p2fgdgxgl9y4p7scpnrfa8z2zgkjdspz0";
+  };
+
+  # to update apply these patches with `git am *.patch` to https://git.savannah.gnu.org/git/make.git
+  patches = [
+    # Replaces /bin/sh with sh, see patch file for reasoning
+    ./0001-No-impure-bin-sh.patch
+    # 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.
+    ./0002-remove-impure-dirs.patch
+  ];
+
+  nativeBuildInputs = lib.optionals guileSupport [ pkg-config ];
+  buildInputs = lib.optionals guileSupport [ guile ];
+
+  configureFlags = 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.
+    ++ lib.optional stdenv.isDarwin "ac_cv_struct_st_mtim_nsec=no";
+
+  outputs = [ "out" "man" "info" ];
+  separateDebugInfo = true;
+
+  meta = with 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/go-mk/default.nix b/nixpkgs/pkgs/development/tools/build-managers/go-mk/default.nix
new file mode 100644
index 000000000000..f543d60da957
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/go-mk/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoPackage
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  pname = "go-mk";
+  version = "0.pre+date=2015-03-24";
+
+  src = fetchFromGitHub {
+    owner = "dcjones";
+    repo = "mk";
+    rev = "73d1b31466c16d0a13a220e5fad7cd8ef6d984d1";
+    hash = "sha256-fk2Qd3LDMx+RapKi1M9yCuxpS0IB6xlbEWW+H6t94AI=";
+  };
+
+  goPackagePath = "github.com/dcjones/mk";
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "A reboot of Plan9's mk, written in Go";
+    longDescription = ''
+      Mk is a reboot of the Plan 9 mk command, which itself is a successor to
+      make. This tool is for anyone who loves make, but hates all its stupid
+      bullshit.
+    '';
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gprbuild/boot.nix b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/boot.nix
new file mode 100644
index 000000000000..060a74314bd4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/boot.nix
@@ -0,0 +1,90 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, gnat
+, which
+, xmlada # for src
+}:
+
+let
+  version = "22.0.0";
+
+  gprConfigKbSrc = fetchFromGitHub {
+    name = "gprconfig-kb-${version}-src";
+    owner = "AdaCore";
+    repo = "gprconfig_kb";
+    rev = "v${version}";
+    sha256 = "0zvd0v5cz0zd1hfnhdd91c6sr3bbv1w715j2gvzx3vxlpx1c2q4n";
+  };
+in
+
+stdenv.mkDerivation {
+  pname = "gprbuild-boot";
+  inherit version;
+
+  src = fetchFromGitHub {
+    name = "gprbuild-${version}";
+    owner = "AdaCore";
+    repo = "gprbuild";
+    rev = "v${version}";
+    sha256 = "0rv0ha0kxzab5hhv0jzkjkmchhlvlx8fci8xalnngrgb9nd4r3v8";
+  };
+
+  nativeBuildInputs = [
+    gnat
+    which
+  ];
+
+  postPatch = ''
+    # The Makefile uses gprbuild to build gprbuild which
+    # we can't do at this point, delete it to prevent the
+    # default phases from failing.
+    rm Makefile
+
+    # make sure bootstrap script runs
+    patchShebangs --build bootstrap.sh
+  '';
+
+  # This setupHook populates GPR_PROJECT_PATH which is used by
+  # gprbuild to find dependencies. It works quite similar to
+  # the pkg-config setupHook in the sense that it also splits
+  # dependencies into GPR_PROJECT_PATH and GPR_PROJECT_PATH_FOR_BUILD,
+  # but gprbuild itself doesn't support this, so we'll need to
+  # introducing a wrapper for it in the future remains TODO.
+  # For the moment this doesn't matter since we have no situation
+  # were gprbuild is used to build something used at build time.
+  setupHook = ./gpr-project-path-hook.sh;
+
+  installPhase = ''
+    runHook preInstall
+
+    ./bootstrap.sh \
+      --with-xmlada=${xmlada.src} \
+      --with-kb=${gprConfigKbSrc} \
+      --prefix=$out
+
+    # Install custom compiler description which can detect nixpkgs'
+    # GNAT wrapper as a proper Ada compiler. The default compiler
+    # description expects the runtime library to be installed in
+    # the same prefix which isn't the case for nixpkgs. As a
+    # result, it would detect the unwrapped GNAT as a proper
+    # compiler which is unable to produce working binaries.
+    #
+    # Our compiler description is very similar to the upstream
+    # GNAT description except that we use a symlink in $out/nix-support
+    # created by the cc-wrapper to find the associated runtime
+    # libraries and use gnatmake instead of gnatls to find GNAT's
+    # bin directory.
+    install -m644 ${./nixpkgs-gnat.xml} $out/share/gprconfig/nixpkgs-gnat.xml
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Multi-language extensible build tool";
+    homepage = "https://github.com/AdaCore/gprbuild";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.sternenseemann ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gprbuild/default.nix b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/default.nix
new file mode 100644
index 000000000000..3155151ae0f8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, gprbuild-boot
+, which
+, gnat
+, xmlada
+}:
+
+stdenv.mkDerivation {
+  pname = "gprbuild";
+
+  # See ./boot.nix for an explanation of the gprbuild setupHook,
+  # our custom knowledge base entry and the situation wrt a
+  # (future) gprbuild wrapper.
+  inherit (gprbuild-boot)
+    version
+    src
+    setupHook
+    meta
+    ;
+
+  nativeBuildInputs = [
+    gnat
+    gprbuild-boot
+    which
+  ];
+
+  propagatedBuildInputs = [
+    xmlada
+  ];
+
+  makeFlags = [
+    "ENABLE_SHARED=${if stdenv.hostPlatform.isStatic then "no" else "yes"}"
+    "PROCESSORS=$(NIX_BUILD_CORES)"
+    # confusingly, for gprbuild --target is autoconf --host
+    "TARGET=${stdenv.hostPlatform.config}"
+    "prefix=${placeholder "out"}"
+  ] ++ lib.optionals (!stdenv.hostPlatform.isStatic) [
+    "LIBRARY_TYPE=relocatable"
+  ];
+
+  # Fixes gprbuild being linked statically always
+  patches = lib.optional (!stdenv.hostPlatform.isStatic) (fetchpatch {
+    name = "gprbuild-relocatable-build.patch";
+    url = "https://aur.archlinux.org/cgit/aur.git/plain/relocatable-build.patch?h=gprbuild&id=1d4e8a5cb982e79135a0aaa3ef87654bed1fe4f0";
+    sha256 = "1r3xsp1pk9h666mm8mdravkybmd5gv2f751x2ffb1kxnwq1rwiyn";
+  });
+
+  buildFlags = [ "all" "libgpr.build" ];
+
+  installFlags = [ "all" "libgpr.install" ];
+
+  # link gprconfig_kb db from gprbuild-boot into build dir,
+  # the install process copies its contents to $out
+  preInstall = ''
+    ln -sf ${gprbuild-boot}/share/gprconfig share/gprconfig
+  '';
+
+  # no need for the install script
+  postInstall = ''
+    rm $out/doinstall
+  '';
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gprbuild/gpr-project-path-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/gpr-project-path-hook.sh
new file mode 100644
index 000000000000..f98b2ab9e58d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/gpr-project-path-hook.sh
@@ -0,0 +1,8 @@
+addAdaObjectsPath() {
+    local role_post
+    getHostRoleEnvHook
+
+    addToSearchPath "GPR_PROJECT_PATH${role_post}" "$1/share/gpr"
+}
+
+addEnvHooks "$targetOffset" addAdaObjectsPath
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gprbuild/nixpkgs-gnat.xml b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/nixpkgs-gnat.xml
new file mode 100644
index 000000000000..ead88dc365c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gprbuild/nixpkgs-gnat.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" ?>
+<gprconfig>
+  <!-- This differs from the default GNAT compiler description
+       in the following ways:
+
+       * gnatmake is used over gnatls to detect the GNAT version
+         since the latter is not part of the wrapper.
+       * to find the runtime libraries, we rely on the symlink
+         ../nix-support/gprconfig-gnat-unwrapped which is a
+         gprconfig-specific addition to the cc-wrapper we employ
+         for Ada compilers (which is only GNAT at the moment).
+
+       For documentation on this file format and its use refer to
+       https://docs.adacore.com/gprbuild-docs/html/gprbuild_ug/companion_tools.html#the-gprconfig-knowledge-base
+  -->
+  <compiler_description>
+    <!-- We would like to name this something different, so users
+         of gprconfig know this is something custom, nixpkgs-related,
+         but unfortunately the knowledge base depends on the name of
+         the compiler for e. g. linker settings.
+    -->
+    <name>GNAT</name>
+    <executable prefix="1">(.*-.*-.*)?gnatmake</executable>
+    <version>
+      <external>${PREFIX}gnatmake -v</external>
+      <grep regexp="^GNATMAKE.+?(\d+(\.\d+)?)" group="1"></grep>
+    </version>
+    <languages>Ada</languages>
+    <variable name="gcc_version">
+      <external>${PREFIX}gcc -v</external>
+      <grep regexp="^[-\w]*gcc \S+ (\S+)" group="1"></grep>
+    </variable>
+    <!-- The ada runtime libraries and objects are only part of the unwrapped
+         GNAT derivation. We can't symlink them into the wrapper derivation
+         (at least not the canonical location) since that screws with linking
+         against libraries distributed with gcc.
+
+         As a workaround, we create a symlink to the unwrapped GNAT's "out"
+         output in the cc-wrapper which we can read into a variable here and
+         use to find GNAT's Ada runtime.
+    -->
+    <variable name="gnat_unwrapped">
+      <external>readlink -n ${PATH}/../nix-support/gprconfig-gnat-unwrapped</external>
+    </variable>
+    <runtimes default="default,kernel,native">
+       <directory group="default" >$gnat_unwrapped/lib/gcc(-lib)?/$TARGET/$gcc_version/adalib/</directory>
+       <directory group="default" contents="^rts-">$gnat_unwrapped/lib/gcc(-lib)?/$TARGET/$gcc_version/ada_object_path</directory>
+       <directory group="2" >$gnat_unwrapped/lib/gcc(-lib)?/$TARGET/$gcc_version/rts-(.*)/adalib/</directory>
+       <directory group="1" >$gnat_unwrapped/$TARGET/lib/gnat/(.*)/adalib/</directory>
+    </runtimes>
+    <target>
+      <external>${PREFIX}gcc -dumpmachine</external>
+      <grep regexp="[^\r\n]+"></grep>
+    </target>
+  </compiler_description>
+</gprconfig>
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..78376b639c44
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix
@@ -0,0 +1,132 @@
+{ jdk8, jdk11, jdk17 }:
+
+rec {
+  gen =
+
+    { version, nativeVersion, sha256, defaultJava ? jdk8, supportedPlatforms ? null }:
+
+    { lib, stdenv, fetchurl, makeWrapper, unzip, java ? defaultJava
+    , javaToolchains ? [ ], ncurses5, ncurses6 }:
+
+    stdenv.mkDerivation rec {
+      pname = "gradle";
+      inherit version;
+
+      src = fetchurl {
+        inherit sha256;
+        url =
+          "https://services.gradle.org/distributions/gradle-${version}-bin.zip";
+      };
+
+      dontBuild = true;
+
+      nativeBuildInputs = [ makeWrapper unzip ];
+      buildInputs = [ java ];
+
+      # NOTE: For more information on toolchains,
+      # see https://docs.gradle.org/current/userguide/toolchains.html
+      installPhase = with builtins;
+        let
+          toolchain = rec {
+            var = x: "JAVA_TOOLCHAIN_NIX_${toString x}";
+            vars = (lib.imap0 (i: x: ("${var i} ${x}")) javaToolchains);
+            varNames = lib.imap0 (i: x: var i) javaToolchains;
+            property = " -Porg.gradle.java.installations.fromEnv='${
+                 concatStringsSep "," varNames
+               }'";
+          };
+          vars = concatStringsSep "\n" (map (x: "  --set ${x} \\")
+            ([ "JAVA_HOME ${java}" ] ++ toolchain.vars));
+        in ''
+          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 ${java}/bin/java $out/bin/gradle \
+            ${vars}
+            --add-flags "-classpath $gradle_launcher_jar org.gradle.launcher.GradleMain${toolchain.property}"
+        '';
+
+      dontFixup = !stdenv.isLinux;
+
+      fixupPhase = let arch = if stdenv.is64bit then "amd64" else "i386";
+      in ''
+        for variant in "" "-ncurses5" "-ncurses6"; do
+          mkdir "patching$variant"
+          pushd "patching$variant"
+          jar xf $out/lib/gradle/lib/native-platform-linux-${arch}$variant-${nativeVersion}.jar
+          patchelf \
+            --set-rpath "${stdenv.cc.cc.lib}/lib64:${lib.makeLibraryPath [ stdenv.cc.cc ncurses5 ncurses6 ]}" \
+            net/rubygrapefruit/platform/linux-${arch}$variant/libnative-platform*.so
+          jar cf native-platform-linux-${arch}$variant-${nativeVersion}.jar .
+          mv native-platform-linux-${arch}$variant-${nativeVersion}.jar $out/lib/gradle/lib/
+          popd
+        done
+
+        # 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
+        # Gradle will refuse to start without _both_ 5 and 6 versions of ncurses.
+        echo ${ncurses5} >> $out/nix-support/manual-runtime-dependencies
+        echo ${ncurses6} >> $out/nix-support/manual-runtime-dependencies
+      '';
+
+      meta = with lib; {
+        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 = "https://www.gradle.org/";
+        changelog = "https://docs.gradle.org/${version}/release-notes.html";
+        downloadPage = "https://gradle.org/next-steps/?version=${version}";
+        license = licenses.asl20;
+        platforms = if (supportedPlatforms != null) then supportedPlatforms else platforms.unix;
+        maintainers = with maintainers; [ lorenzleutgeb liff ];
+      };
+    };
+
+  # NOTE: Default JDKs are LTS versions and according to
+  # https://docs.gradle.org/current/userguide/compatibility.html
+
+  gradle_7 = gen {
+    version = "7.4";
+    nativeVersion = "0.22-milestone-23";
+    sha256 = "0d56bgd2m64pzmycjk29hwdlhbpn1kkm7fjik1sibn6vslw71hlc";
+    defaultJava = jdk17;
+    # Gradle 7 ships some binaries that are only available for some platforms
+    # See https://github.com/gradle/native-platform#supported-platforms
+    supportedPlatforms =  [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin" "x86_64-cygwin" "x86_64-windows" "i686-windows"  ];
+  };
+
+  gradle_6 = gen {
+    version = "6.9.2";
+    nativeVersion = "0.22-milestone-20";
+    sha256 = "13qyk3f6namw27ynh6nxljxpk9r3l12vxl3f0qpglprdf3c6ydcb";
+    defaultJava = jdk11;
+    # Gradle 6 ships some binaries that are only available for some platforms
+    # See https://github.com/gradle/native-platform#supported-platforms
+    supportedPlatforms =  [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin" "x86_64-cygwin" "x86_64-windows" "i686-windows"  ];
+  };
+
+  # NOTE: No GitHub Release for the following versions. `update.sh` will not work.
+  gradle_5 = gen {
+    version = "5.6.4";
+    nativeVersion = "0.18";
+    sha256 = "03d86bbqd19h9xlanffcjcy3vg1k5905vzhf9mal9g21603nfc0z";
+    defaultJava = jdk11;
+  };
+
+  gradle_4 = gen {
+    version = "4.10.3";
+    nativeVersion = "0.14";
+    sha256 = "0vhqxnk0yj3q9jam5w4kpia70i4h0q4pjxxqwynh3qml0vrcn9l6";
+    defaultJava = jdk8;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gradle/update.sh b/nixpkgs/pkgs/development/tools/build-managers/gradle/update.sh
new file mode 100755
index 000000000000..0d6b78a66525
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gradle/update.sh
@@ -0,0 +1,67 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p nix-prefetch curl jq
+
+# Generates Gradle release specs from GitHub Releases.
+#
+# As of 2021-11, this script has very poor error handling,
+# it is expected to be run by maintainers as one-off job
+# only.
+#
+# NOTE: The earliest Gradle release that has a
+# corresponding entry as GitHub Release is 6.8-rc-1.
+
+for v in $(curl -s "https://api.github.com/repos/gradle/gradle/releases" | jq -r '.[].tag_name' | sort -n -r)
+do
+    # Tag names and download filenames are not the same,
+    # we modify the tag name slightly to translate it
+    # to the naming scheme of download filenames.
+    # This translation assumes a tag naming scheme.
+    # As of 2021-11 it works from 6.8-rc-1 to 7.3-rc-3.
+
+    # Remove first letter (assumed to be "v").
+    v=${v:1}
+
+    # To lower case.
+    v=${v,,}
+
+    # Add dash after "rc".
+    v=${v/-rc/-rc-}
+
+    # Remove trailing ".0"
+    v=${v%.0}
+
+    # Remove trailing ".0" for release candidates.
+    v=${v/.0-rc/-rc}
+
+    f="gradle-${v}-spec.nix"
+
+    if [[ -n "$1" && "$1" != "$v" ]]
+    then
+        echo "$v SKIP (nomatch)"
+        continue
+    elif [ "$1" == "" ] && [ -f "$f" ]
+    then
+        echo "$v SKIP (exists)"
+        continue
+    fi
+
+    url="https://services.gradle.org/distributions/gradle-${v}-bin.zip"
+    read -d "\n" gradle_hash gradle_path < <(nix-prefetch-url --print-path $url)
+
+    # Prefix and suffix for "native-platform" dependency.
+    gradle_native_prefix="gradle-$v/lib/native-platform-"
+    gradle_native_suffix=".jar"
+    tmp=$(mktemp)
+    zipinfo -1 "$gradle_path" "$gradle_native_prefix*$gradle_native_suffix" > $tmp
+    gradle_native=$(cat $tmp | head -n1)
+    gradle_native=${gradle_native#"$gradle_native_prefix"}
+    gradle_native=${gradle_native%"$gradle_native_suffix"}
+
+    # Supported architectures
+    #grep -Pho "(linux|osx)-\w+" $tmp | sort | uniq
+    rm -f $tmp
+
+    echo -e "{\\n  version = \"$v\";\\n  nativeVersion = \"$gradle_native\";\\n  sha256 = \"$gradle_hash\";\\n}" > $f
+
+    echo "$v DONE"
+done
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..7fa8feb8e33f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/gup/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, nix-update-source, lib, python3
+, which, runtimeShell, pychecker ? null }:
+stdenv.mkDerivation rec {
+  version = "0.8.0";
+  src = fetchFromGitHub {
+    owner = "timbertson";
+    repo = "gup";
+    rev = "version-${version}";
+    sha256 = "1zjd76jyb5zc9w3l368723bjmxjl05s096g8ipwncfks1p9hdgf3";
+  };
+  pname = "gup";
+  nativeBuildInputs = [ python3 which pychecker ];
+  buildInputs = [ python3 ];
+  strictDeps = true;
+  SKIP_PYCHECKER = pychecker == null;
+  buildPhase = "make python";
+  installPhase = ''
+    mkdir $out
+    cp -r python/bin $out/bin
+  '';
+  passthru.updateScript = [
+    runtimeShell
+    "-c"
+    ''
+      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 = lib.licenses.lgpl2Plus;
+    maintainers = [ lib.maintainers.timbertson ];
+    platforms = 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..6320646974ad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/icmake/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitLab, makeWrapper, gcc, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "icmake";
+  version = "9.03.01";
+
+  src = fetchFromGitLab {
+    sha256 = "05r0a69w0hv2qhjpb2bxd0lmp2vv5r2d4iggg6ly4miam0i318jy";
+    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 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..c4d73785db49
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/jam/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, bison }:
+
+stdenv.mkDerivation rec {
+  pname = "jam";
+  version = "2.6.1";
+
+  src = fetchurl {
+    url = "https://swarm.workshop.perforce.com/projects/perforce_software-jam/download/main/${pname}-${version}.tar";
+    sha256 = "19xkvkpycxfsncxvin6yqrql3x3z9ypc1j8kzls5k659q4kv5rmc";
+  };
+
+  nativeBuildInputs = [ bison ];
+
+  preConfigure = ''
+    unset AR
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    make jam0
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    ./jam0 -j$NIX_BUILD_CORES -sBINDIR=$out/bin install
+    mkdir -p $out/doc/jam
+    cp *.html $out/doc/jam
+
+    runHook postInstall
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with 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/jam/ftjam.nix b/nixpkgs/pkgs/development/tools/build-managers/jam/ftjam.nix
new file mode 100644
index 000000000000..6007b67f148b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/jam/ftjam.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, fetchurl
+, bison
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ftjam";
+  version = "2.5.2";
+
+  src = fetchurl {
+    url = "https://downloads.sourceforge.net/project/freetype/${pname}/${version}/${pname}-${version}.tar.bz2";
+    hash = "sha256-6JdzUAqSkS3pGOn+v/q+S2vOedaa8ZRDX04DK4ptZqM=";
+  };
+
+  nativeBuildInputs = [
+    bison
+  ];
+
+  preConfigure = ''
+    unset AR
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    make jam0
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    ./jam0 -j$NIX_BUILD_CORES -sBINDIR=$out/bin install
+    mkdir -p $out/doc/jam
+    cp *.html $out/doc/jam
+
+    runHook postInstall
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://freetype.org/jam/";
+    description = "Freetype's enhanced, backwards-compatible Jam clone";
+    license = licenses.free;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
+# TODO: setup hook for Jam
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..ed5923e74d0a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/kati/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "kati-unstable";
+  version = "2019-09-23";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "kati";
+    rev = "9da3296746a0cd55b38ebebf91e7f57105a4c36f";
+    sha256 = "0s5dfhgpcbx12b1fqmm8p0jpvrhgrnl9qywv1ksbwhw3pfp7j866";
+  };
+
+  patches = [ ./version.patch ];
+
+  installPhase = ''
+    install -D ckati $out/bin/ckati
+  '';
+
+  meta = with lib; {
+    description = "An experimental GNU make clone";
+    homepage = "https://github.com/google/kati";
+    platforms = platforms.all;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ danielfullmer ];
+  };
+}
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..80919cfc377f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/leiningen/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchurl, makeWrapper
+, coreutils, jdk, rlwrap, gnupg }:
+
+stdenv.mkDerivation rec {
+  pname = "leiningen";
+  version = "2.9.8";
+
+  src = fetchurl {
+    url = "https://raw.github.com/technomancy/leiningen/${version}/bin/lein-pkg";
+    sha256 = "1sgnxw58srjxqnskl700p7r7n23pfpjvqpiqnz1m8r6c76jwnllr";
+  };
+
+  jarsrc = fetchurl {
+    url = "https://github.com/technomancy/leiningen/releases/download/${version}/${pname}-${version}-standalone.jar";
+    sha256 = "13f4n15i0gsk9jq52gxivnsk32qjahmxgrddm54cf8ynw0a923ia";
+  };
+
+  JARNAME = "${pname}-${version}-standalone.jar";
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ 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 ":" "${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 = lib.licenses.epl10;
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+    maintainers = with lib.maintainers; [ thiagokokada ];
+    mainProgram = "lein";
+  };
+}
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..06d38588dbda
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/mage/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "mage";
+  version = "1.12.1";
+
+  src = fetchFromGitHub {
+    owner = "magefile";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hfLclI9bzsvITwdo8LTqNcr25yZN82B0pqwlk559tRU=";
+  };
+
+  vendorSha256 = null;
+
+  doCheck = false;
+
+  ldflags = [
+    "-X github.com/magefile/mage/mage.commitHash=v${version}"
+    "-X github.com/magefile/mage/mage.gitTag=v${version}"
+    "-X github.com/magefile/mage/mage.timestamp=1970-01-01T00:00:00Z"
+  ];
+
+  meta = with lib; {
+    description = "A Make/Rake-like Build Tool Using Go";
+    homepage = "https://magefile.org/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ swdunlop ];
+  };
+}
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..4eb292a2e529
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/allow-dirs-outside-of-prefix.patch
@@ -0,0 +1,19 @@
+--- a/mesonbuild/coredata.py
++++ b/mesonbuild/coredata.py
+@@ -506,7 +506,6 @@ class CoreData:
+             return value
+         if option.name.endswith('dir') and value.is_absolute() and \
+            option not in BULITIN_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.
+@@ -518,7 +517,7 @@ class CoreData:
+             try:
+                 value = value.relative_to(prefix)
+             except ValueError:
+-                raise MesonException(msg.format(option, value, prefix))
++                pass
+             if '..' in str(value):
+                 raise MesonException(msg.format(option, value, prefix))
+         return value.as_posix()
diff --git a/nixpkgs/pkgs/development/tools/build-managers/meson/boost-Do-not-add-system-paths-on-nix.patch b/nixpkgs/pkgs/development/tools/build-managers/meson/boost-Do-not-add-system-paths-on-nix.patch
new file mode 100644
index 000000000000..0a2eda9de9ac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/boost-Do-not-add-system-paths-on-nix.patch
@@ -0,0 +1,21 @@
+diff -Naur meson-0.60.2-old/mesonbuild/dependencies/boost.py meson-0.60.2-new/mesonbuild/dependencies/boost.py
+--- meson-0.60.2-old/mesonbuild/dependencies/boost.py	2021-11-02 16:58:07.000000000 -0300
++++ meson-0.60.2-new/mesonbuild/dependencies/boost.py	2021-12-12 19:21:27.895705897 -0300
+@@ -682,16 +682,7 @@
+         else:
+             tmp = []  # type: T.List[Path]
+ 
+-            # Add some default system paths
+-            tmp += [Path('/opt/local')]
+-            tmp += [Path('/usr/local/opt/boost')]
+-            tmp += [Path('/usr/local')]
+-            tmp += [Path('/usr')]
+-
+-            # Cleanup paths
+-            tmp = [x for x in tmp if x.is_dir()]
+-            tmp = [x.resolve() for x in tmp]
+-            roots += tmp
++            # Remove such spurious, non-explicit "system" paths for Nix&Nixpkgs
+ 
+         self.check_and_set_roots(roots, use_system=True)
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/meson/clear-old-rpath.patch b/nixpkgs/pkgs/development/tools/build-managers/meson/clear-old-rpath.patch
new file mode 100644
index 000000000000..f1e3c76e8b53
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/clear-old-rpath.patch
@@ -0,0 +1,20 @@
+diff --git a/mesonbuild/scripts/depfixer.py b/mesonbuild/scripts/depfixer.py
+index 4176b9a03..faaabf616 100644
+--- a/mesonbuild/scripts/depfixer.py
++++ b/mesonbuild/scripts/depfixer.py
+@@ -336,6 +336,15 @@ class Elf(DataSizes):
+         if not new_rpath:
+             self.remove_rpath_entry(entrynum)
+         else:
++            # Clear old rpath to avoid stale references,
++            # not heeding the warning above about de-duplication
++            # since it does not seem to cause issues for us
++            # and not doing so trips up Nix’s reference checker.
++            # See https://github.com/NixOS/nixpkgs/pull/46020
++            # and https://github.com/NixOS/nixpkgs/issues/95163
++            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/default.nix b/nixpkgs/pkgs/development/tools/build-managers/meson/default.nix
new file mode 100644
index 000000000000..aeddf457f48d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/default.nix
@@ -0,0 +1,113 @@
+{ lib
+, fetchpatch
+, installShellFiles
+, ninja
+, pkg-config
+, python3
+, substituteAll
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "meson";
+  version = "0.60.3";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    hash = "sha256-h8pfqTWKAYZFKTkr1k4CcVjrlK/KfHdmsYZu8n7MuY4=";
+  };
+
+  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
+
+    # Meson is currently inspecting fewer variables than autoconf does, which
+    # makes it harder for us to use setup hooks, etc.  Taken from
+    # https://github.com/mesonbuild/meson/pull/6827
+    ./more-env-vars.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;
+    })
+
+    # When Meson removes build_rpath from DT_RUNPATH entry, it just writes
+    # the shorter NUL-terminated new rpath over the old one to reduce
+    # the risk of potentially breaking the ELF files.
+    # But this can cause much bigger problem for Nix as it can produce
+    # cut-in-half-by-\0 store path references.
+    # Let’s just clear the whole rpath and hope for the best.
+    ./clear-old-rpath.patch
+
+    # Patch out default boost search paths to avoid impure builds on
+    # unsandboxed non-NixOS builds, see:
+    # https://github.com/NixOS/nixpkgs/issues/86131#issuecomment-711051774
+    ./boost-Do-not-add-system-paths-on-nix.patch
+
+    # Meson tries to update ld.so.cache which breaks when the target architecture
+    # differs from the build host's.
+    ./do-not-update-ldconfig-cache.patch
+  ];
+
+  setupHook = ./setup-hook.sh;
+
+  # Meson included tests since 0.45, however they fail in Nixpkgs because they
+  # require a typical building environment (including C compiler and stuff).
+  # Just for the sake of documentation, the next lines are maintained here.
+  doCheck = false;
+  checkInputs = [ ninja pkg-config ];
+  checkPhase = ''
+    python ./run_project_tests.py
+  '';
+
+  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
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --zsh data/shell-completions/zsh/_meson
+    installShellCompletion --bash data/shell-completions/bash/meson
+  '';
+
+  meta = with lib; {
+    homepage = "https://mesonbuild.com";
+    description = "An open source, fast and friendly build system made in Python";
+    longDescription = ''
+      Meson is an open source build system meant to be both extremely fast, and,
+      even more importantly, as user friendly as possible.
+
+      The main design point of Meson is that every moment a developer spends
+      writing or debugging build definitions is a second wasted. So is every
+      second spent waiting for the build system to actually start compiling
+      code.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jtojnar mbe AndersonTorres ];
+    inherit (python3.meta) platforms;
+  };
+}
+# TODO: a more Nixpkgs-tailoired test suite
diff --git a/nixpkgs/pkgs/development/tools/build-managers/meson/do-not-update-ldconfig-cache.patch b/nixpkgs/pkgs/development/tools/build-managers/meson/do-not-update-ldconfig-cache.patch
new file mode 100644
index 000000000000..884023aaa7eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/do-not-update-ldconfig-cache.patch
@@ -0,0 +1,12 @@
+diff --git a/mesonbuild/minstall.py b/mesonbuild/minstall.py
+index cb87faf5c..878ec4cd6 100644
+--- a/mesonbuild/minstall.py
++++ b/mesonbuild/minstall.py
+@@ -551,7 +551,6 @@ class Installer:
+                 self.install_emptydir(d, dm, destdir, fullprefix)
+                 self.install_data(d, dm, destdir, fullprefix)
+                 self.restore_selinux_contexts(destdir)
+-                self.apply_ldconfig(dm, destdir)
+                 self.run_install_script(d, destdir, fullprefix)
+                 if not self.did_install_something:
+                     self.log('Nothing to install.')
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..d34b6c4c4345
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/fix-rpath.patch
@@ -0,0 +1,24 @@
+--- a/mesonbuild/backend/backends.py
++++ b/mesonbuild/backend/backends.py
+@@ -456,6 +456,21 @@ class Backend:
+                 args.extend(self.environment.coredata.get_external_link_args(target.for_machine, lang))
+             except Exception:
+                 pass
++
++        nix_ldflags = os.environ.get('NIX_LDFLAGS', '').split()
++        next_is_path = False
++        # Try to add rpaths set by user or ld-wrapper so that they are not removed.
++        # Based on https://github.com/NixOS/nixpkgs/blob/69711a2f5ffe8cda208163be5258266172ff527f/pkgs/build-support/bintools-wrapper/ld-wrapper.sh#L148-L177
++        for flag in nix_ldflags:
++            if flag == '-rpath' or flag == '-L':
++                next_is_path = True
++            elif next_is_path or flag.startswith('-L/'):
++                if flag.startswith('-L/'):
++                    flag = flag[2:]
++                if flag.startswith('@storeDir@'):
++                    dirs.add(flag)
++                next_is_path = False
++
+         # Match rpath formats:
+         # -Wl,-rpath=
+         # -Wl,-rpath,
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..e6d740265277
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/gir-fallback-path.patch
@@ -0,0 +1,21 @@
+diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
+index 1c6952df7..9466a0b7d 100644
+--- a/mesonbuild/modules/gnome.py
++++ b/mesonbuild/modules/gnome.py
+@@ -923,6 +923,16 @@ class GnomeModule(ExtensionModule):
+         if fatal_warnings:
+             scan_command.append('--warn-error')
+
++        if len(set(girtarget.get_custom_install_dir()[0] for girtarget in girtargets if girtarget.get_custom_install_dir())) > 1:
++            raise MesonException('generate_gir tries to build multiple libraries with different install_dir at once: {}'.format(','.join([str(girtarget) for girtarget in girtargets])))
++
++        if girtargets[0].get_custom_install_dir():
++            fallback_libpath = girtargets[0].get_custom_install_dir()[0]
++        else:
++            fallback_libpath = None
++        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]
++
+         generated_files = [f for f in libsources if isinstance(f, (GeneratedList, CustomTarget, CustomTargetIndex))]
+ 
+         scan_target = self._make_gir_target(state, girfile, scan_command, generated_files, depends, kwargs)
diff --git a/nixpkgs/pkgs/development/tools/build-managers/meson/more-env-vars.patch b/nixpkgs/pkgs/development/tools/build-managers/meson/more-env-vars.patch
new file mode 100644
index 000000000000..e4ad43550423
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/more-env-vars.patch
@@ -0,0 +1,12 @@
+diff -Naur meson-0.60.2-old/mesonbuild/environment.py meson-0.60.2-new/mesonbuild/environment.py
+--- meson-0.60.2-old/mesonbuild/environment.py	2021-11-02 16:58:13.000000000 -0300
++++ meson-0.60.2-new/mesonbuild/environment.py	2021-12-12 17:44:00.350499307 -0300
+@@ -68,7 +68,7 @@
+         # compiling we fall back on the unprefixed host version. This
+         # allows native builds to never need to worry about the 'BUILD_*'
+         # ones.
+-        ([var_name + '_FOR_BUILD'] if is_cross else [var_name]),
++        [var_name + '_FOR_BUILD'] + ([] if is_cross else [var_name]),
+         # Always just the unprefixed host versions
+         [var_name]
+     )[for_machine]
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..3d946fcffd52
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/meson/setup-hook.sh
@@ -0,0 +1,37 @@
+mesonConfigurePhase() {
+    runHook preConfigure
+
+    if [ -z "${dontAddPrefix-}" ]; then
+        mesonFlags="--prefix=$prefix $mesonFlags"
+    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=${mesonAutoFeatures:-enabled} \
+        -Dwrap_mode=${mesonWrapMode:-nodownload} \
+        $mesonFlags"
+
+    mesonFlags="${crossMesonFlags+$crossMesonFlags }--buildtype=${mesonBuildType:-plain} $mesonFlags"
+
+    echo "meson flags: $mesonFlags ${mesonFlagsArray[@]}"
+
+    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..6e79bee6a242
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/mill/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "mill";
+  version = "0.10.1";
+
+  src = fetchurl {
+    url = "https://github.com/com-lihaoyi/mill/releases/download/${version}/${version}-assembly";
+    hash = "sha256:hYQOmnJjsOIIri5H0/B5LhixwfiLxxpVoN4ON1NUkWg=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontUnpack = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  # this is mostly downloading a pre-built artifact
+  preferLocal = 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" \
+      --prefix PATH : "${jre}/bin" \
+      --set JAVA_HOME "${jre}"
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  # The default release is a script which will do an impure download
+  # just ensure that the application can run without network
+  installCheckPhase = ''
+    $out/bin/mill --help > /dev/null
+  '';
+
+  meta = with lib; {
+    homepage = "https://com-lihaoyi.github.io/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 = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/msbuild/create-deps.sh b/nixpkgs/pkgs/development/tools/build-managers/msbuild/create-deps.sh
new file mode 100755
index 000000000000..c9bd4ba7eb6a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/msbuild/create-deps.sh
@@ -0,0 +1,57 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p jq -p xmlstarlet -p curl
+set -euo pipefail
+
+cat << EOL
+{ fetchurl }: [
+EOL
+
+mapfile -t repos < <(
+    xmlstarlet sel -t -v 'configuration/packageSources/add/@value' -n NuGet.config |
+        while IFS= read index
+        do
+            curl --compressed -fsL "$index" | \
+                jq -r '.resources[] | select(."@type" == "PackageBaseAddress/3.0.0")."@id"'
+        done
+    )
+
+find .packages fake-home/.nuget/packages -name \*.nupkg -printf '%P\n' | sort -u |
+    while IFS= read file
+    do
+        packagedir=$(dirname $file)
+        version=$(basename $packagedir)
+        package=$(dirname $packagedir)
+
+        found=false
+        for repo in "${repos[@]}"
+        do
+            url="$repo$package/$version/$package.$version.nupkg"
+            if curl -fsL "$url" -o /dev/null
+            then
+                found=true
+                break
+            fi
+        done
+
+        if ! $found
+        then
+            echo "couldn't find $package $version" >&2
+            exit 1
+        fi
+
+        sha256=$(nix-prefetch-url "$url" 2>/dev/null)
+        cat << EOL
+  {
+    name = "$package";
+    version = "$version";
+    src = fetchurl {
+      url = "$url";
+      sha256 = "$sha256";
+    };
+  }
+EOL
+    done
+
+cat << EOL
+]
+EOL
diff --git a/nixpkgs/pkgs/development/tools/build-managers/msbuild/default.nix b/nixpkgs/pkgs/development/tools/build-managers/msbuild/default.nix
new file mode 100644
index 000000000000..5c3225c683f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/msbuild/default.nix
@@ -0,0 +1,150 @@
+{ lib, stdenv, fetchurl, fetchpatch, makeWrapper, glibcLocales, mono, dotnetPackages, unzip, dotnetCorePackages, writeText, roslyn }:
+
+let
+
+  dotnet-sdk = dotnetCorePackages.sdk_5_0;
+
+  xplat = fetchurl {
+    url = "https://github.com/mono/msbuild/releases/download/v16.9.0/mono_msbuild_6.12.0.137.zip";
+    sha256 = "1wnzbdpk4s9bmawlh359ak2b8zi0sgx1qvcjnvfncr1wsck53v7q";
+  };
+
+  deps = map (package: package.src)
+    (import ./deps.nix { inherit fetchurl; });
+
+  nuget-config = writeText "NuGet.config" ''
+    <?xml version="1.0" encoding="utf-8"?>
+    <configuration>
+      <packageSources>
+        <clear />
+      </packageSources>
+    </configuration>
+  '';
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "msbuild";
+  version = "16.10.1+xamarinxplat.2021.05.26.14.00";
+
+  src = fetchurl {
+    url = "https://download.mono-project.com/sources/msbuild/msbuild-${version}.tar.xz";
+    sha256 = "05ghqqkdj4s3d0xkp7mkdzjig5zj3k6ajx71j0g2wv6rdbvg6899";
+  };
+
+  nativeBuildInputs = [
+    dotnet-sdk
+    mono
+    unzip
+  ];
+
+  buildInputs = [
+    dotnetPackages.Nuget
+    glibcLocales
+    makeWrapper
+  ];
+
+  # https://github.com/NixOS/nixpkgs/issues/38991
+  # bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
+  LOCALE_ARCHIVE = lib.optionalString stdenv.isLinux
+      "${glibcLocales}/lib/locale/locale-archive";
+
+  postPatch = ''
+    # not patchShebangs, there is /bin/bash in the body of the script as well
+    substituteInPlace ./eng/cibuild_bootstrapped_msbuild.sh --replace /bin/bash ${stdenv.shell}
+
+    patchShebangs eng/*.sh mono/build/*.sh
+
+    sed -i -e "/<\/projectImportSearchPaths>/a <property name=\"MSBuildExtensionsPath\" value=\"$out/lib/mono/xbuild\"/>" \
+      src/MSBuild/app.config
+
+    # license check is case sensitive
+    mv LICENSE license.bak && mv license.bak license
+  '';
+
+  buildPhase = ''
+    # nuget would otherwise try to base itself in /homeless-shelter
+    export HOME=$(pwd)/fake-home
+
+    cp ${nuget-config} NuGet.config
+    nuget sources Add -Name nixos -Source $(pwd)/nixos
+
+    for package in ${toString deps}; do
+      nuget add $package -Source nixos
+    done
+
+    mkdir -p artifacts
+    unzip ${xplat} -d artifacts
+    mv artifacts/msbuild artifacts/mono-msbuild
+    chmod +x artifacts/mono-msbuild/MSBuild.dll
+
+    ln -s $(find ${dotnet-sdk} -name libhostfxr.so) artifacts/mono-msbuild/SdkResolvers/Microsoft.DotNet.MSBuildSdkResolver/
+
+    # overwrite the file
+    echo "#!${stdenv.shell}" > eng/common/dotnet-install.sh
+    echo "#!${stdenv.shell}" > mono/build/get_sdk_files.sh
+
+    mkdir -p mono/dotnet-overlay/msbuild-bin
+    cp ${dotnet-sdk}/sdk/*/{Microsoft.NETCoreSdk.BundledVersions.props,RuntimeIdentifierGraph.json} mono/dotnet-overlay/msbuild-bin
+
+    # DisableNerdbankVersioning https://gitter.im/Microsoft/msbuild/archives/2018/06/27?at=5b33dbc4ce3b0f268d489bfa
+    # TODO there are some (many?) failing tests
+    ./eng/cibuild_bootstrapped_msbuild.sh --host_type mono --configuration Release --skip_tests /p:DisableNerdbankVersioning=true
+    patchShebangs stage1/mono-msbuild/msbuild
+  '';
+
+  installPhase = ''
+    stage1/mono-msbuild/msbuild mono/build/install.proj /p:MonoInstallPrefix="$out" /p:Configuration=Release-MONO
+
+    ln -s ${roslyn}/lib/dotnet/microsoft.net.compilers.toolset/*/tasks/net472 $out/lib/mono/msbuild/Current/bin/Roslyn
+
+    makeWrapper ${mono}/bin/mono $out/bin/msbuild \
+      --set-default MONO_GC_PARAMS "nursery-size=64m" \
+      --add-flags "$out/lib/mono/msbuild/15.0/bin/MSBuild.dll"
+
+    ln -s $(find ${dotnet-sdk} -name libhostfxr.so) $out/lib/mono/msbuild/Current/bin/SdkResolvers/Microsoft.DotNet.MSBuildSdkResolver/
+  '';
+
+  doInstallCheck = true;
+
+  # https://docs.microsoft.com/cs-cz/visualstudio/msbuild/walkthrough-creating-an-msbuild-project-file-from-scratch?view=vs-2019
+  installCheckPhase = ''
+    cat > Helloworld.cs <<EOF
+using System;
+
+class HelloWorld
+{
+    static void Main()
+    {
+#if DebugConfig
+        Console.WriteLine("WE ARE IN THE DEBUG CONFIGURATION");
+#endif
+
+        Console.WriteLine("Hello, world!");
+    }
+}
+EOF
+
+    cat > Helloworld.csproj <<EOF
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Compile Include="Helloworld.cs" />
+  </ItemGroup>
+  <Target Name="Build">
+    <Csc Sources="@(Compile)"/>
+  </Target>
+</Project>
+EOF
+
+    $out/bin/msbuild Helloworld.csproj -t:Build
+    ${mono}/bin/mono Helloworld.exe | grep "Hello, world!"
+  '';
+
+  meta = with lib; {
+    description = "Mono version of Microsoft Build Engine, the build platform for .NET, and Visual Studio";
+    homepage = "https://github.com/mono/msbuild";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jdanek ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/msbuild/deps.nix b/nixpkgs/pkgs/development/tools/build-managers/msbuild/deps.nix
new file mode 100644
index 000000000000..4a006428a505
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/msbuild/deps.nix
@@ -0,0 +1,1842 @@
+{ fetchurl }: [
+  {
+    name = "benchmarkdotnet";
+    version = "0.12.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/benchmarkdotnet/0.12.1/benchmarkdotnet.0.12.1.nupkg";
+      sha256 = "0whk81a0v70lkhcd9yffls6vnqnc63hw6jfx8mr7iqp02jbrb15w";
+    };
+  }
+  {
+    name = "benchmarkdotnet.annotations";
+    version = "0.12.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/benchmarkdotnet.annotations/0.12.1/benchmarkdotnet.annotations.0.12.1.nupkg";
+      sha256 = "061v8zdp69a80vb9gf5n8di2qqz6bwj2215shgsw40i0s8j3flw3";
+    };
+  }
+  {
+    name = "commandlineparser";
+    version = "2.4.3";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/commandlineparser/2.4.3/commandlineparser.2.4.3.nupkg";
+      sha256 = "1aca3q25n3dg55v4j3kzlzfzd5k2jpy6zhp8x7g74pdfdqzrhg55";
+    };
+  }
+  {
+    name = "fsharp.net.sdk";
+    version = "1.0.4-bundled-0100";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/fsharp.net.sdk/1.0.4-bundled-0100/fsharp.net.sdk.1.0.4-bundled-0100.nupkg";
+      sha256 = "06hydwby6pzqzzcxmz4z8v5hiiylhzldl7ggfvr4c5xhpb6bcl78";
+    };
+  }
+  {
+    name = "iced";
+    version = "1.4.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/iced/1.4.0/iced.1.4.0.nupkg";
+      sha256 = "1l8l20clb56vfsjcpspz0z4f3gy3mr2nwilbb8wjlr5fhx6g23n9";
+    };
+  }
+  {
+    name = "illink.tasks";
+    version = "0.1.6-prerelease.20175.2";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/7d9f5c21-0d79-403f-bfe3-9a4506529760/nuget/v3/flat2/illink.tasks/0.1.6-prerelease.20175.2/illink.tasks.0.1.6-prerelease.20175.2.nupkg";
+      sha256 = "0s4fk48m255n3figh0nnw8cp40qk33khq56sjqnippbk8n6w487z";
+    };
+  }
+  {
+    name = "jnm2.referenceassemblies.net35";
+    version = "1.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/jnm2.referenceassemblies.net35/1.0.1/jnm2.referenceassemblies.net35.1.0.1.nupkg";
+      sha256 = "10dplszwicqnjyxbxkyc3cs0kzqvcrf73pmbxxd0rmqnakz23a7c";
+    };
+  }
+  {
+    name = "largeaddressaware";
+    version = "1.0.5";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/largeaddressaware/1.0.5/largeaddressaware.1.0.5.nupkg";
+      sha256 = "0hsjh3m3wr5bfy82bzn606iin35ps03lzfrn3hvjgcn1w68d6291";
+    };
+  }
+  {
+    name = "microbuild.core";
+    version = "0.2.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microbuild.core/0.2.0/microbuild.core.0.2.0.nupkg";
+      sha256 = "0q4s45jskbyxfx4ay6znnvv94zma2wd85b8rwmwszd2nb0xl3194";
+    };
+  }
+  {
+    name = "microbuild.core.sentinel";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microbuild.core.sentinel/1.0.0/microbuild.core.sentinel.1.0.0.nupkg";
+      sha256 = "035kqx5fkapql108n222lz8psvxk04mv3dy1qg3h08i4b8j3dy8i";
+    };
+  }
+  {
+    name = "microsoft.bcl.asyncinterfaces";
+    version = "1.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.bcl.asyncinterfaces/1.1.0/microsoft.bcl.asyncinterfaces.1.1.0.nupkg";
+      sha256 = "1dq5yw7cy6s42193yl4iqscfw5vzkjkgv0zyy32scr4jza6ni1a1";
+    };
+  }
+  {
+    name = "microsoft.build";
+    version = "14.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.build/14.3.0/microsoft.build.14.3.0.nupkg";
+      sha256 = "1zamn3p8xxi0wsjlpln0y71ncb977f3fp08mvaz4wmbmi76nr0rz";
+    };
+  }
+  {
+    name = "microsoft.build.centralpackageversions";
+    version = "2.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.build.centralpackageversions/2.0.1/microsoft.build.centralpackageversions.2.0.1.nupkg";
+      sha256 = "17cjiaj2b98q8s89168g42jb8rhwm6062jcbv57rbkdiiwdsn55k";
+    };
+  }
+  {
+    name = "microsoft.build.framework";
+    version = "14.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.build.framework/14.3.0/microsoft.build.framework.14.3.0.nupkg";
+      sha256 = "0r7y1i7dbr3pb53fdrh268hyi627w85nzv2iblwyg8dzkfxraafd";
+    };
+  }
+  {
+    name = "microsoft.build.framework";
+    version = "15.5.180";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.build.framework/15.5.180/microsoft.build.framework.15.5.180.nupkg";
+      sha256 = "064y3a711ikx9pm9d2wyms4i3k4f9hfvn3vymhwygg7yv7gcj92z";
+    };
+  }
+  {
+    name = "microsoft.build.nugetsdkresolver";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.build.nugetsdkresolver/5.9.1-rc.8/microsoft.build.nugetsdkresolver.5.9.1-rc.8.nupkg";
+      sha256 = "1dgxkal27rqlnz0ppbmbg4v7yla5wb9s2djk5cb6bpsqy2ngd88d";
+    };
+  }
+  {
+    name = "microsoft.build.tasks.git";
+    version = "1.1.0-beta-20206-02";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microsoft.build.tasks.git/1.1.0-beta-20206-02/microsoft.build.tasks.git.1.1.0-beta-20206-02.nupkg";
+      sha256 = "1gwlhvqlkvs5c7qjky726alf71xflbh3x970g3dypfczi0y6gccx";
+    };
+  }
+  {
+    name = "microsoft.build.utilities.core";
+    version = "14.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.build.utilities.core/14.3.0/microsoft.build.utilities.core.14.3.0.nupkg";
+      sha256 = "0351nsnx12nzkss6vaqwwh7d7car7hrgyh0vyd4bl83c4x3ls1kb";
+    };
+  }
+  {
+    name = "microsoft.build.utilities.core";
+    version = "15.5.180";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.build.utilities.core/15.5.180/microsoft.build.utilities.core.15.5.180.nupkg";
+      sha256 = "0c4bjhaqgc98bchln8p5d2p1vyn8qrha2b8gpn2l7bnznbcrd630";
+    };
+  }
+  {
+    name = "microsoft.codeanalysis.analyzers";
+    version = "2.6.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.codeanalysis.analyzers/2.6.1/microsoft.codeanalysis.analyzers.2.6.1.nupkg";
+      sha256 = "1plk343h9fyxg08b9bcnlqyaq00cbnc1v73pj9nbcyphmgf5bqfp";
+    };
+  }
+  {
+    name = "microsoft.codeanalysis.build.tasks";
+    version = "3.9.0-5.21112.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.build.tasks/3.9.0-5.21112.8/microsoft.codeanalysis.build.tasks.3.9.0-5.21112.8.nupkg";
+      sha256 = "18wvmkpvp1yq288xryap3v07clhs36xiw6vyk4j59i2aqnjjnmc7";
+    };
+  }
+  {
+    name = "microsoft.codeanalysis.common";
+    version = "2.10.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.codeanalysis.common/2.10.0/microsoft.codeanalysis.common.2.10.0.nupkg";
+      sha256 = "1l690xqrhmkasns5ghz0vqj8n2xyl5yrwan5gs52hwfxdwahqaaj";
+    };
+  }
+  {
+    name = "microsoft.codeanalysis.csharp";
+    version = "2.10.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.codeanalysis.csharp/2.10.0/microsoft.codeanalysis.csharp.2.10.0.nupkg";
+      sha256 = "0saabsr81crawdzs2cnzyjp5cgg2hk5k6q7n0i0pxghswb0m4dxk";
+    };
+  }
+  {
+    name = "microsoft.codecoverage";
+    version = "16.6.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.codecoverage/16.6.1/microsoft.codecoverage.16.6.1.nupkg";
+      sha256 = "01ffm4nflqdb93vq4xl0j3377x360fgx6c6h12mpkcy85ixbv3rl";
+    };
+  }
+  {
+    name = "microsoft.diagnostics.netcore.client";
+    version = "0.2.61701";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.diagnostics.netcore.client/0.2.61701/microsoft.diagnostics.netcore.client.0.2.61701.nupkg";
+      sha256 = "1ic1607jj4ln8dbibf1fz5v9svk9x2kqlgvhndc6ijaqnbc4wcr1";
+    };
+  }
+  {
+    name = "microsoft.diagnostics.runtime";
+    version = "1.1.57604";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.diagnostics.runtime/1.1.57604/microsoft.diagnostics.runtime.1.1.57604.nupkg";
+      sha256 = "1gm9gsg3h9ipcvwzp7jfns030c4b6l4cpkpyx9ccphlax9mvmfsi";
+    };
+  }
+  {
+    name = "microsoft.diagnostics.tracing.traceevent";
+    version = "2.0.49";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.diagnostics.tracing.traceevent/2.0.49/microsoft.diagnostics.tracing.traceevent.2.0.49.nupkg";
+      sha256 = "08ww98l9a4cx52h3y8w1x5vzl4jf02a66wf9z1j2py406wjifja9";
+    };
+  }
+  {
+    name = "microsoft.dotnet.arcade.sdk";
+    version = "5.0.0-beta.21226.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microsoft.dotnet.arcade.sdk/5.0.0-beta.21226.1/microsoft.dotnet.arcade.sdk.5.0.0-beta.21226.1.nupkg";
+      sha256 = "1d7pczd99cladgmblq8g1dqw88n3aqg7rf8bpsabqrjjrz0pfi43";
+    };
+  }
+  {
+    name = "microsoft.dotnet.msbuildsdkresolver";
+    version = "5.0.300-servicing.21267.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/a8a526e9-91b3-4569-ba2d-ff08dbb7c110/nuget/v3/flat2/microsoft.dotnet.msbuildsdkresolver/5.0.300-servicing.21267.11/microsoft.dotnet.msbuildsdkresolver.5.0.300-servicing.21267.11.nupkg";
+      sha256 = "1jgg2akhpgfndqfdcyvm7b83nxva9h86nivc7p6dw8rcvazffbp5";
+    };
+  }
+  {
+    name = "microsoft.dotnet.platformabstractions";
+    version = "2.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.dotnet.platformabstractions/2.1.0/microsoft.dotnet.platformabstractions.2.1.0.nupkg";
+      sha256 = "1qydvyyinj3b5mraazjal3n2k7jqhn05b6n1a2f3qjkqkxi63dmy";
+    };
+  }
+  {
+    name = "microsoft.dotnet.signtool";
+    version = "5.0.0-beta.21226.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microsoft.dotnet.signtool/5.0.0-beta.21226.1/microsoft.dotnet.signtool.5.0.0-beta.21226.1.nupkg";
+      sha256 = "1jd3648n3i9i1njx8wb9g8i29s3n5srx3whdhvrkwjm9g5n11gbj";
+    };
+  }
+  {
+    name = "microsoft.net.build.extensions";
+    version = "3.1.400-preview.20365.20";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d5f6139d-6136-4228-8b2d-9676e9e4eb3d/nuget/v3/flat2/microsoft.net.build.extensions/3.1.400-preview.20365.20/microsoft.net.build.extensions.3.1.400-preview.20365.20.nupkg";
+      sha256 = "1vmcj7p7jsr1lbkbxqqjsixkaxdazr5nwhhp1q402dgky9cayhd5";
+    };
+  }
+  {
+    name = "microsoft.net.compilers.toolset";
+    version = "3.9.0-5.21112.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.net.compilers.toolset/3.9.0-5.21112.8/microsoft.net.compilers.toolset.3.9.0-5.21112.8.nupkg";
+      sha256 = "1drcxgay9ylhs6dr3alnxr4lfapzlr86w3mpwp0gn58mfj5m0g1h";
+    };
+  }
+  {
+    name = "microsoft.netcore.platforms";
+    version = "1.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.netcore.platforms/1.0.1/microsoft.netcore.platforms.1.0.1.nupkg";
+      sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr";
+    };
+  }
+  {
+    name = "microsoft.netcore.platforms";
+    version = "1.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.netcore.platforms/1.1.0/microsoft.netcore.platforms.1.1.0.nupkg";
+      sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm";
+    };
+  }
+  {
+    name = "microsoft.netcore.targets";
+    version = "1.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.netcore.targets/1.0.1/microsoft.netcore.targets.1.0.1.nupkg";
+      sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p";
+    };
+  }
+  {
+    name = "microsoft.netcore.targets";
+    version = "1.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.netcore.targets/1.1.0/microsoft.netcore.targets.1.1.0.nupkg";
+      sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh";
+    };
+  }
+  {
+    name = "microsoft.netframework.referenceassemblies";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.netframework.referenceassemblies/1.0.0/microsoft.netframework.referenceassemblies.1.0.0.nupkg";
+      sha256 = "0na724xhvqm63vq9y18fl9jw9q2v99bdwr353378s5fsi11qzxp9";
+    };
+  }
+  {
+    name = "microsoft.netframework.referenceassemblies.net45";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.netframework.referenceassemblies.net45/1.0.0/microsoft.netframework.referenceassemblies.net45.1.0.0.nupkg";
+      sha256 = "1ipafi0zjrnzsfmwsisgp8z6m26cbw7vb3jj501nvz3v97b7d7lv";
+    };
+  }
+  {
+    name = "microsoft.netframework.referenceassemblies.net472";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.netframework.referenceassemblies.net472/1.0.0/microsoft.netframework.referenceassemblies.net472.1.0.0.nupkg";
+      sha256 = "1bqinq2nxnpqxziypg1sqy3ly0nymxxjpn8fwkn3rl4vl6gdg3rc";
+    };
+  }
+  {
+    name = "microsoft.net.sdk";
+    version = "3.1.400-preview.20365.20";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d5f6139d-6136-4228-8b2d-9676e9e4eb3d/nuget/v3/flat2/microsoft.net.sdk/3.1.400-preview.20365.20/microsoft.net.sdk.3.1.400-preview.20365.20.nupkg";
+      sha256 = "02ann6rsnc6wl84wsk2fz7dpxcp5sq0b6jm3vv23av4b1f86f82y";
+    };
+  }
+  {
+    name = "microsoft.net.sdk.publish";
+    version = "3.1.300-servicing.20216.7";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d5f6139d-6136-4228-8b2d-9676e9e4eb3d/nuget/v3/flat2/microsoft.net.sdk.publish/3.1.300-servicing.20216.7/microsoft.net.sdk.publish.3.1.300-servicing.20216.7.nupkg";
+      sha256 = "1xivqihp2zrkmd4f65fgh9hn9ix75sqklbnanqlfk9dq67wscp41";
+    };
+  }
+  {
+    name = "microsoft.net.sdk.razor";
+    version = "3.1.6";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.net.sdk.razor/3.1.6/microsoft.net.sdk.razor.3.1.6.nupkg";
+      sha256 = "1vw0zi0lq52frivq8mgfvm79rfx0v492q6fci1jls1zwwjk0v9ia";
+    };
+  }
+  {
+    name = "microsoft.net.sdk.web";
+    version = "3.1.300-servicing.20216.7";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d5f6139d-6136-4228-8b2d-9676e9e4eb3d/nuget/v3/flat2/microsoft.net.sdk.web/3.1.300-servicing.20216.7/microsoft.net.sdk.web.3.1.300-servicing.20216.7.nupkg";
+      sha256 = "001jd2iwww0vb5x5dii915z82syh1aj48n62bn8zi1d3chwacr51";
+    };
+  }
+  {
+    name = "microsoft.net.sdk.web.projectsystem";
+    version = "3.1.300-servicing.20216.7";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d5f6139d-6136-4228-8b2d-9676e9e4eb3d/nuget/v3/flat2/microsoft.net.sdk.web.projectsystem/3.1.300-servicing.20216.7/microsoft.net.sdk.web.projectsystem.3.1.300-servicing.20216.7.nupkg";
+      sha256 = "0601mix6l18h8afxxgdbbv695d0sjskady209z52sf4bvf4h4kal";
+    };
+  }
+  {
+    name = "microsoft.net.test.sdk";
+    version = "16.6.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.net.test.sdk/16.6.1/microsoft.net.test.sdk.16.6.1.nupkg";
+      sha256 = "0jjdg468jc6pv2z764f3xc19lcr772nzjm9cjfqq3bqw8vkpzmhv";
+    };
+  }
+  {
+    name = "microsoft.sourcelink.azurerepos.git";
+    version = "1.1.0-beta-20206-02";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microsoft.sourcelink.azurerepos.git/1.1.0-beta-20206-02/microsoft.sourcelink.azurerepos.git.1.1.0-beta-20206-02.nupkg";
+      sha256 = "00hfjh8d3z5np51qgr1s3q4j7bl34mfiypf7nbxcmxa7cyj0rg65";
+    };
+  }
+  {
+    name = "microsoft.sourcelink.common";
+    version = "1.1.0-beta-20206-02";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microsoft.sourcelink.common/1.1.0-beta-20206-02/microsoft.sourcelink.common.1.1.0-beta-20206-02.nupkg";
+      sha256 = "1qv0k0apxv3j1pccki2rzakjfb0868hmg0968da0639f75s3glr9";
+    };
+  }
+  {
+    name = "microsoft.sourcelink.github";
+    version = "1.1.0-beta-20206-02";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microsoft.sourcelink.github/1.1.0-beta-20206-02/microsoft.sourcelink.github.1.1.0-beta-20206-02.nupkg";
+      sha256 = "0q1mgjjkwxvzn5v29pqiyg0j0jwi5qc0q04za9k1x138kliq2iba";
+    };
+  }
+  {
+    name = "microsoft.symboluploader.build.task";
+    version = "1.1.145102";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/microsoft.symboluploader.build.task/1.1.145102/microsoft.symboluploader.build.task.1.1.145102.nupkg";
+      sha256 = "1nmd0cgj3kp2n1k8bzvvq7cfbpbrvk1k6mx9lpnzh1bv7v67rvm2";
+    };
+  }
+  {
+    name = "microsoft.visualstudio.sdk.embedinteroptypes";
+    version = "15.0.15";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.visualstudio.sdk.embedinteroptypes/15.0.15/microsoft.visualstudio.sdk.embedinteroptypes.15.0.15.nupkg";
+      sha256 = "0chr3slzzcanwcyd9isx4gichqzmfh4zd3h83piw0r4xsww1wmpd";
+    };
+  }
+  {
+    name = "microsoft.visualstudio.setup.configuration.interop";
+    version = "1.16.30";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.visualstudio.setup.configuration.interop/1.16.30/microsoft.visualstudio.setup.configuration.interop.1.16.30.nupkg";
+      sha256 = "14022lx03vdcqlvbbdmbsxg5pqfx1rfq2jywxlyaz9v68cvsb0g4";
+    };
+  }
+  {
+    name = "microsoft.web.xdt";
+    version = "3.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.web.xdt/3.0.0/microsoft.web.xdt.3.0.0.nupkg";
+      sha256 = "18biff0hglccy34909zm9hc4lr9p8n2p155snq1dddp0av6m448n";
+    };
+  }
+  {
+    name = "microsoft.win32.primitives";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.win32.primitives/4.0.1/microsoft.win32.primitives.4.0.1.nupkg";
+      sha256 = "1n8ap0cmljbqskxpf8fjzn7kh1vvlndsa75k01qig26mbw97k2q7";
+    };
+  }
+  {
+    name = "microsoft.win32.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.win32.primitives/4.3.0/microsoft.win32.primitives.4.3.0.nupkg";
+      sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq";
+    };
+  }
+  {
+    name = "microsoft.win32.registry";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/microsoft.win32.registry/4.5.0/microsoft.win32.registry.4.5.0.nupkg";
+      sha256 = "1zapbz161ji8h82xiajgriq6zgzmb1f3ar517p2h63plhsq5gh2q";
+    };
+  }
+  {
+    name = "netstandard.library";
+    version = "1.6.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/netstandard.library/1.6.1/netstandard.library.1.6.1.nupkg";
+      sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8";
+    };
+  }
+  {
+    name = "newtonsoft.json";
+    version = "11.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/newtonsoft.json/11.0.1/newtonsoft.json.11.0.1.nupkg";
+      sha256 = "1z68j07if1xf71lbsrgbia52r812i2dv541sy44ph4dzjjp7pd4m";
+    };
+  }
+  {
+    name = "newtonsoft.json";
+    version = "9.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/newtonsoft.json/9.0.1/newtonsoft.json.9.0.1.nupkg";
+      sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r";
+    };
+  }
+  {
+    name = "nuget.build.tasks";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.build.tasks/5.9.1-rc.8/nuget.build.tasks.5.9.1-rc.8.nupkg";
+      sha256 = "0610dh53gqmzbl70jxmn9jbvl0lv70qanis1q20rxnnyq6s2xb75";
+    };
+  }
+  {
+    name = "nuget.build.tasks.pack";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.build.tasks.pack/5.9.1-rc.8/nuget.build.tasks.pack.5.9.1-rc.8.nupkg";
+      sha256 = "10qkdv165vz71z8ir3161ggaarbqk51gwg8n51iwxa5inz4y22lj";
+    };
+  }
+  {
+    name = "nuget.commandline";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/nuget.commandline/4.1.0/nuget.commandline.4.1.0.nupkg";
+      sha256 = "03ik0rcdl7vdwxa9fx5cgl98yzb45swr08jmrnjk1ympjqvf94s1";
+    };
+  }
+  {
+    name = "nuget.commands";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.commands/5.9.1-rc.8/nuget.commands.5.9.1-rc.8.nupkg";
+      sha256 = "0rdziczdkrqwl6wjqs4w29c460kc69v9z2pghqjlkag25c7hqwlr";
+    };
+  }
+  {
+    name = "nuget.common";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.common/5.9.1-rc.8/nuget.common.5.9.1-rc.8.nupkg";
+      sha256 = "056b1h4fvik6z2qc2s6qzz0s4acbipc50af14fbr7hd9h2fxya4c";
+    };
+  }
+  {
+    name = "nuget.configuration";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.configuration/5.9.1-rc.8/nuget.configuration.5.9.1-rc.8.nupkg";
+      sha256 = "0x8vigf0sfp6kf1i98xcr4k84vci596x16hmajdm0zgv3p1w2kvk";
+    };
+  }
+  {
+    name = "nuget.credentials";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.credentials/5.9.1-rc.8/nuget.credentials.5.9.1-rc.8.nupkg";
+      sha256 = "128vsgz4rfrp17ys7vbc978y6inmvki93mswm82qvphxymsyrc6v";
+    };
+  }
+  {
+    name = "nuget.dependencyresolver.core";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.dependencyresolver.core/5.9.1-rc.8/nuget.dependencyresolver.core.5.9.1-rc.8.nupkg";
+      sha256 = "1q9a97s1z3a6fb4p82ag2lqnzl53895prbqwlbvckdw9c3rpz3gc";
+    };
+  }
+  {
+    name = "nuget.frameworks";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.frameworks/5.9.1-rc.8/nuget.frameworks.5.9.1-rc.8.nupkg";
+      sha256 = "1n3mp9ns79yq4dwgj7h2av3b485mzgsw0qlj8z7p47krwlzp5hiv";
+    };
+  }
+  {
+    name = "nuget.librarymodel";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.librarymodel/5.9.1-rc.8/nuget.librarymodel.5.9.1-rc.8.nupkg";
+      sha256 = "0sy8422c94wcg8ka85lnawq26mpixl79avk9m6y44lshrpga5v4v";
+    };
+  }
+  {
+    name = "nuget.packagemanagement";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.packagemanagement/5.9.1-rc.8/nuget.packagemanagement.5.9.1-rc.8.nupkg";
+      sha256 = "0mcxdqq3hfhxyn99pp5b5x2cd8rrmw6z616cbd9y0s9j0i6hm4pg";
+    };
+  }
+  {
+    name = "nuget.packaging";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.packaging/5.9.1-rc.8/nuget.packaging.5.9.1-rc.8.nupkg";
+      sha256 = "0x9c3v741nn6m2xgidna88fa4xj5avhv6asj73hqv4pzpdprlrhv";
+    };
+  }
+  {
+    name = "nuget.projectmodel";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.projectmodel/5.9.1-rc.8/nuget.projectmodel.5.9.1-rc.8.nupkg";
+      sha256 = "1xjh7isw467nkc7dkfj3wlw69vi2cns66z152jrzjdmxmia3i3pv";
+    };
+  }
+  {
+    name = "nuget.protocol";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.protocol/5.9.1-rc.8/nuget.protocol.5.9.1-rc.8.nupkg";
+      sha256 = "1rnrxzaciqhhgwd4by0dhkvfrm1h161vvmkvlcwaz2589sqq2dzq";
+    };
+  }
+  {
+    name = "nuget.resolver";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.resolver/5.9.1-rc.8/nuget.resolver.5.9.1-rc.8.nupkg";
+      sha256 = "0q6dqg0d5f9y7ynwqmzkzwl6yan94azvm0cd385k210y8wn4364v";
+    };
+  }
+  {
+    name = "nuget.versioning";
+    version = "5.9.1-rc.8";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.versioning/5.9.1-rc.8/nuget.versioning.5.9.1-rc.8.nupkg";
+      sha256 = "1vv7z122ilsk2rsvjm6j3hpifb45g8wa1mgnq1kwi9k8b2dbb6vv";
+    };
+  }
+  {
+    name = "perfolizer";
+    version = "0.2.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/perfolizer/0.2.1/perfolizer.0.2.1.nupkg";
+      sha256 = "012aqqi3y3nfikqmn26yajpwd52c04zlzp0p91iyslw7mf26qncy";
+    };
+  }
+  {
+    name = "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d";
+    };
+  }
+  {
+    name = "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59";
+    };
+  }
+  {
+    name = "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa";
+    };
+  }
+  {
+    name = "runtime.native.system";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.native.system/4.0.0/runtime.native.system.4.0.0.nupkg";
+      sha256 = "1ppk69xk59ggacj9n7g6fyxvzmk1g5p4fkijm0d7xqfkig98qrkf";
+    };
+  }
+  {
+    name = "runtime.native.system";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.native.system/4.3.0/runtime.native.system.4.3.0.nupkg";
+      sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4";
+    };
+  }
+  {
+    name = "runtime.native.system.io.compression";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.native.system.io.compression/4.3.0/runtime.native.system.io.compression.4.3.0.nupkg";
+      sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d";
+    };
+  }
+  {
+    name = "runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.native.system.security.cryptography.openssl/4.3.0/runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97";
+    };
+  }
+  {
+    name = "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3";
+    };
+  }
+  {
+    name = "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf";
+    };
+  }
+  {
+    name = "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3";
+    };
+  }
+  {
+    name = "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn";
+    };
+  }
+  {
+    name = "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3";
+    };
+  }
+  {
+    name = "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy";
+    };
+  }
+  {
+    name = "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5";
+    };
+  }
+  {
+    name = "shouldly";
+    version = "3.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/shouldly/3.0.0/shouldly.3.0.0.nupkg";
+      sha256 = "1hg28w898kl84rx57sclb2z9b76v5hxlwxig1xnb6fr81aahzlw3";
+    };
+  }
+  {
+    name = "sn";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/sn/1.0.0/sn.1.0.0.nupkg";
+      sha256 = "1012fcdc6vq2355v86h434s6p2nnqgpdapb7p25l4h39g5q8p1qs";
+    };
+  }
+  {
+    name = "system.appcontext";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.appcontext/4.1.0/system.appcontext.4.1.0.nupkg";
+      sha256 = "0fv3cma1jp4vgj7a8hqc9n7hr1f1kjp541s6z0q1r6nazb4iz9mz";
+    };
+  }
+  {
+    name = "system.appcontext";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.appcontext/4.3.0/system.appcontext.4.3.0.nupkg";
+      sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya";
+    };
+  }
+  {
+    name = "system.buffers";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.buffers/4.3.0/system.buffers.4.3.0.nupkg";
+      sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy";
+    };
+  }
+  {
+    name = "system.buffers";
+    version = "4.4.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.buffers/4.4.0/system.buffers.4.4.0.nupkg";
+      sha256 = "183f8063w8zqn99pv0ni0nnwh7fgx46qzxamwnans55hhs2l0g19";
+    };
+  }
+  {
+    name = "system.buffers";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.buffers/4.5.0/system.buffers.4.5.0.nupkg";
+      sha256 = "1ywfqn4md6g3iilpxjn5dsr0f5lx6z0yvhqp4pgjcamygg73cz2c";
+    };
+  }
+  {
+    name = "system.buffers";
+    version = "4.5.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.buffers/4.5.1/system.buffers.4.5.1.nupkg";
+      sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3";
+    };
+  }
+  {
+    name = "system.collections";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections/4.0.11/system.collections.4.0.11.nupkg";
+      sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6";
+    };
+  }
+  {
+    name = "system.collections";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections/4.3.0/system.collections.4.3.0.nupkg";
+      sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9";
+    };
+  }
+  {
+    name = "system.collections.concurrent";
+    version = "4.0.12";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections.concurrent/4.0.12/system.collections.concurrent.4.0.12.nupkg";
+      sha256 = "07y08kvrzpak873pmyxs129g1ch8l27zmg51pcyj2jvq03n0r0fc";
+    };
+  }
+  {
+    name = "system.collections.concurrent";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections.concurrent/4.3.0/system.collections.concurrent.4.3.0.nupkg";
+      sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8";
+    };
+  }
+  {
+    name = "system.collections.immutable";
+    version = "1.2.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections.immutable/1.2.0/system.collections.immutable.1.2.0.nupkg";
+      sha256 = "1jm4pc666yiy7af1mcf7766v710gp0h40p228ghj6bavx7xfa38m";
+    };
+  }
+  {
+    name = "system.collections.immutable";
+    version = "1.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections.immutable/1.5.0/system.collections.immutable.1.5.0.nupkg";
+      sha256 = "1d5gjn5afnrf461jlxzawcvihz195gayqpcfbv6dd7pxa9ialn06";
+    };
+  }
+  {
+    name = "system.collections.immutable";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections.immutable/5.0.0/system.collections.immutable.5.0.0.nupkg";
+      sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r";
+    };
+  }
+  {
+    name = "system.collections.nongeneric";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.collections.nongeneric/4.0.1/system.collections.nongeneric.4.0.1.nupkg";
+      sha256 = "19994r5y5bpdhj7di6w047apvil8lh06lh2c2yv9zc4fc5g9bl4d";
+    };
+  }
+  {
+    name = "system.configuration.configurationmanager";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.configuration.configurationmanager/4.7.0/system.configuration.configurationmanager.4.7.0.nupkg";
+      sha256 = "0pav0n21ghf2ax6fiwjbng29f27wkb4a2ddma0cqx04s97yyk25d";
+    };
+  }
+  {
+    name = "system.console";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.console/4.0.0/system.console.4.0.0.nupkg";
+      sha256 = "0ynxqbc3z1nwbrc11hkkpw9skw116z4y9wjzn7id49p9yi7mzmlf";
+    };
+  }
+  {
+    name = "system.console";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.console/4.3.0/system.console.4.3.0.nupkg";
+      sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay";
+    };
+  }
+  {
+    name = "system.diagnostics.debug";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.debug/4.0.11/system.diagnostics.debug.4.0.11.nupkg";
+      sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz";
+    };
+  }
+  {
+    name = "system.diagnostics.debug";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.debug/4.3.0/system.diagnostics.debug.4.3.0.nupkg";
+      sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y";
+    };
+  }
+  {
+    name = "system.diagnostics.diagnosticsource";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.diagnosticsource/4.3.0/system.diagnostics.diagnosticsource.4.3.0.nupkg";
+      sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq";
+    };
+  }
+  {
+    name = "system.diagnostics.fileversioninfo";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.fileversioninfo/4.3.0/system.diagnostics.fileversioninfo.4.3.0.nupkg";
+      sha256 = "094hx249lb3vb336q7dg3v257hbxvz2jnalj695l7cg5kxzqwai7";
+    };
+  }
+  {
+    name = "system.diagnostics.process";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.process/4.1.0/system.diagnostics.process.4.1.0.nupkg";
+      sha256 = "061lrcs7xribrmq7kab908lww6kn2xn1w3rdc41q189y0jibl19s";
+    };
+  }
+  {
+    name = "system.diagnostics.stacktrace";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.stacktrace/4.3.0/system.diagnostics.stacktrace.4.3.0.nupkg";
+      sha256 = "0ash4h9k0m7xsm0yl79r0ixrdz369h7y922wipp5gladmlbvpyjd";
+    };
+  }
+  {
+    name = "system.diagnostics.tools";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.tools/4.3.0/system.diagnostics.tools.4.3.0.nupkg";
+      sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1";
+    };
+  }
+  {
+    name = "system.diagnostics.tracesource";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.tracesource/4.0.0/system.diagnostics.tracesource.4.0.0.nupkg";
+      sha256 = "1mc7r72xznczzf6mz62dm8xhdi14if1h8qgx353xvhz89qyxsa3h";
+    };
+  }
+  {
+    name = "system.diagnostics.tracing";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.tracing/4.1.0/system.diagnostics.tracing.4.1.0.nupkg";
+      sha256 = "1d2r76v1x610x61ahfpigda89gd13qydz6vbwzhpqlyvq8jj6394";
+    };
+  }
+  {
+    name = "system.diagnostics.tracing";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.diagnostics.tracing/4.3.0/system.diagnostics.tracing.4.3.0.nupkg";
+      sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4";
+    };
+  }
+  {
+    name = "system.dynamic.runtime";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.dynamic.runtime/4.3.0/system.dynamic.runtime.4.3.0.nupkg";
+      sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk";
+    };
+  }
+  {
+    name = "system.globalization";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.globalization/4.0.11/system.globalization.4.0.11.nupkg";
+      sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d";
+    };
+  }
+  {
+    name = "system.globalization";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.globalization/4.3.0/system.globalization.4.3.0.nupkg";
+      sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki";
+    };
+  }
+  {
+    name = "system.globalization.calendars";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.globalization.calendars/4.3.0/system.globalization.calendars.4.3.0.nupkg";
+      sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq";
+    };
+  }
+  {
+    name = "system.io";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io/4.1.0/system.io.4.1.0.nupkg";
+      sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp";
+    };
+  }
+  {
+    name = "system.io";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io/4.3.0/system.io.4.3.0.nupkg";
+      sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f";
+    };
+  }
+  {
+    name = "system.io.compression";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io.compression/4.3.0/system.io.compression.4.3.0.nupkg";
+      sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz";
+    };
+  }
+  {
+    name = "system.io.compression.zipfile";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io.compression.zipfile/4.3.0/system.io.compression.zipfile.4.3.0.nupkg";
+      sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar";
+    };
+  }
+  {
+    name = "system.io.filesystem";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io.filesystem/4.0.1/system.io.filesystem.4.0.1.nupkg";
+      sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1";
+    };
+  }
+  {
+    name = "system.io.filesystem";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io.filesystem/4.3.0/system.io.filesystem.4.3.0.nupkg";
+      sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw";
+    };
+  }
+  {
+    name = "system.io.filesystem.primitives";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io.filesystem.primitives/4.0.1/system.io.filesystem.primitives.4.0.1.nupkg";
+      sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612";
+    };
+  }
+  {
+    name = "system.io.filesystem.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.io.filesystem.primitives/4.3.0/system.io.filesystem.primitives.4.3.0.nupkg";
+      sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c";
+    };
+  }
+  {
+    name = "system.linq";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.linq/4.1.0/system.linq.4.1.0.nupkg";
+      sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5";
+    };
+  }
+  {
+    name = "system.linq";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.linq/4.3.0/system.linq.4.3.0.nupkg";
+      sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7";
+    };
+  }
+  {
+    name = "system.linq.expressions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.linq.expressions/4.3.0/system.linq.expressions.4.3.0.nupkg";
+      sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv";
+    };
+  }
+  {
+    name = "system.management";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.management/4.5.0/system.management.4.5.0.nupkg";
+      sha256 = "19z5x23n21xi94bgl531l9hrm64nyw9d5fpd7klfvr5xfsbh9jwr";
+    };
+  }
+  {
+    name = "system.memory";
+    version = "4.5.3";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.memory/4.5.3/system.memory.4.5.3.nupkg";
+      sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a";
+    };
+  }
+  {
+    name = "system.memory";
+    version = "4.5.4";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.memory/4.5.4/system.memory.4.5.4.nupkg";
+      sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y";
+    };
+  }
+  {
+    name = "system.net.http";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.net.http/4.3.0/system.net.http.4.3.0.nupkg";
+      sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j";
+    };
+  }
+  {
+    name = "system.net.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.net.primitives/4.3.0/system.net.primitives.4.3.0.nupkg";
+      sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii";
+    };
+  }
+  {
+    name = "system.net.sockets";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.net.sockets/4.3.0/system.net.sockets.4.3.0.nupkg";
+      sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla";
+    };
+  }
+  {
+    name = "system.numerics.vectors";
+    version = "4.4.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.numerics.vectors/4.4.0/system.numerics.vectors.4.4.0.nupkg";
+      sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba";
+    };
+  }
+  {
+    name = "system.numerics.vectors";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.numerics.vectors/4.5.0/system.numerics.vectors.4.5.0.nupkg";
+      sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59";
+    };
+  }
+  {
+    name = "system.objectmodel";
+    version = "4.0.12";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.objectmodel/4.0.12/system.objectmodel.4.0.12.nupkg";
+      sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj";
+    };
+  }
+  {
+    name = "system.objectmodel";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.objectmodel/4.3.0/system.objectmodel.4.3.0.nupkg";
+      sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2";
+    };
+  }
+  {
+    name = "system.private.datacontractserialization";
+    version = "4.1.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.private.datacontractserialization/4.1.1/system.private.datacontractserialization.4.1.1.nupkg";
+      sha256 = "1xk9wvgzipssp1393nsg4n16zbr5481k03nkdlj954hzq5jkx89r";
+    };
+  }
+  {
+    name = "system.reflection";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection/4.1.0/system.reflection.4.1.0.nupkg";
+      sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9";
+    };
+  }
+  {
+    name = "system.reflection";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection/4.3.0/system.reflection.4.3.0.nupkg";
+      sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m";
+    };
+  }
+  {
+    name = "system.reflection.emit";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.emit/4.0.1/system.reflection.emit.4.0.1.nupkg";
+      sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp";
+    };
+  }
+  {
+    name = "system.reflection.emit";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.emit/4.3.0/system.reflection.emit.4.3.0.nupkg";
+      sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74";
+    };
+  }
+  {
+    name = "system.reflection.emit.ilgeneration";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.emit.ilgeneration/4.0.1/system.reflection.emit.ilgeneration.4.0.1.nupkg";
+      sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0";
+    };
+  }
+  {
+    name = "system.reflection.emit.lightweight";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.emit.lightweight/4.0.1/system.reflection.emit.lightweight.4.0.1.nupkg";
+      sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr";
+    };
+  }
+  {
+    name = "system.reflection.emit.lightweight";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.emit.lightweight/4.3.0/system.reflection.emit.lightweight.4.3.0.nupkg";
+      sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c";
+    };
+  }
+  {
+    name = "system.reflection.extensions";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.extensions/4.0.1/system.reflection.extensions.4.0.1.nupkg";
+      sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn";
+    };
+  }
+  {
+    name = "system.reflection.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.extensions/4.3.0/system.reflection.extensions.4.3.0.nupkg";
+      sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq";
+    };
+  }
+  {
+    name = "system.reflection.metadata";
+    version = "1.6.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.metadata/1.6.0/system.reflection.metadata.1.6.0.nupkg";
+      sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4";
+    };
+  }
+  {
+    name = "system.reflection.metadata";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.metadata/5.0.0/system.reflection.metadata.5.0.0.nupkg";
+      sha256 = "17qsl5nanlqk9iz0l5wijdn6ka632fs1m1fvx18dfgswm258r3ss";
+    };
+  }
+  {
+    name = "system.reflection.primitives";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.primitives/4.0.1/system.reflection.primitives.4.0.1.nupkg";
+      sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28";
+    };
+  }
+  {
+    name = "system.reflection.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.primitives/4.3.0/system.reflection.primitives.4.3.0.nupkg";
+      sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276";
+    };
+  }
+  {
+    name = "system.reflection.typeextensions";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.reflection.typeextensions/4.1.0/system.reflection.typeextensions.4.1.0.nupkg";
+      sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7";
+    };
+  }
+  {
+    name = "system.resources.extensions";
+    version = "4.6.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.resources.extensions/4.6.0/system.resources.extensions.4.6.0.nupkg";
+      sha256 = "0inch9jgchgmsg3xjivbhh9mpin40mhdd8dgf4i1p3g42i0hzc0j";
+    };
+  }
+  {
+    name = "system.resources.reader";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.resources.reader/4.0.0/system.resources.reader.4.0.0.nupkg";
+      sha256 = "1jafi73dcf1lalrir46manq3iy6xnxk2z7gpdpwg4wqql7dv3ril";
+    };
+  }
+  {
+    name = "system.resources.resourcemanager";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.resources.resourcemanager/4.0.1/system.resources.resourcemanager.4.0.1.nupkg";
+      sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi";
+    };
+  }
+  {
+    name = "system.resources.resourcemanager";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.resources.resourcemanager/4.3.0/system.resources.resourcemanager.4.3.0.nupkg";
+      sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49";
+    };
+  }
+  {
+    name = "system.runtime";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime/4.1.0/system.runtime.4.1.0.nupkg";
+      sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m";
+    };
+  }
+  {
+    name = "system.runtime";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime/4.3.0/system.runtime.4.3.0.nupkg";
+      sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7";
+    };
+  }
+  {
+    name = "system.runtime.compilerservices.unsafe";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.compilerservices.unsafe/5.0.0/system.runtime.compilerservices.unsafe.5.0.0.nupkg";
+      sha256 = "02k25ivn50dmqx5jn8hawwmz24yf0454fjd823qk6lygj9513q4x";
+    };
+  }
+  {
+    name = "system.runtime.extensions";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.extensions/4.1.0/system.runtime.extensions.4.1.0.nupkg";
+      sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z";
+    };
+  }
+  {
+    name = "system.runtime.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.extensions/4.3.0/system.runtime.extensions.4.3.0.nupkg";
+      sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60";
+    };
+  }
+  {
+    name = "system.runtime.handles";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.handles/4.0.1/system.runtime.handles.4.0.1.nupkg";
+      sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g";
+    };
+  }
+  {
+    name = "system.runtime.handles";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.handles/4.3.0/system.runtime.handles.4.3.0.nupkg";
+      sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8";
+    };
+  }
+  {
+    name = "system.runtime.interopservices";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.interopservices/4.1.0/system.runtime.interopservices.4.1.0.nupkg";
+      sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1";
+    };
+  }
+  {
+    name = "system.runtime.interopservices";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.interopservices/4.3.0/system.runtime.interopservices.4.3.0.nupkg";
+      sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j";
+    };
+  }
+  {
+    name = "system.runtime.interopservices.runtimeinformation";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.interopservices.runtimeinformation/4.0.0/system.runtime.interopservices.runtimeinformation.4.0.0.nupkg";
+      sha256 = "0glmvarf3jz5xh22iy3w9v3wyragcm4hfdr17v90vs7vcrm7fgp6";
+    };
+  }
+  {
+    name = "system.runtime.interopservices.runtimeinformation";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.interopservices.runtimeinformation/4.3.0/system.runtime.interopservices.runtimeinformation.4.3.0.nupkg";
+      sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii";
+    };
+  }
+  {
+    name = "system.runtime.numerics";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.numerics/4.3.0/system.runtime.numerics.4.3.0.nupkg";
+      sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z";
+    };
+  }
+  {
+    name = "system.runtime.serialization.primitives";
+    version = "4.1.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.serialization.primitives/4.1.1/system.runtime.serialization.primitives.4.1.1.nupkg";
+      sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k";
+    };
+  }
+  {
+    name = "system.runtime.serialization.xml";
+    version = "4.1.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.runtime.serialization.xml/4.1.1/system.runtime.serialization.xml.4.1.1.nupkg";
+      sha256 = "11747an5gbz821pwahaim3v82gghshnj9b5c4cw539xg5a3gq7rk";
+    };
+  }
+  {
+    name = "system.security.accesscontrol";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.accesscontrol/4.5.0/system.security.accesscontrol.4.5.0.nupkg";
+      sha256 = "1wvwanz33fzzbnd2jalar0p0z3x0ba53vzx1kazlskp7pwyhlnq0";
+    };
+  }
+  {
+    name = "system.security.accesscontrol";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.accesscontrol/4.7.0/system.security.accesscontrol.4.7.0.nupkg";
+      sha256 = "0n0k0w44flkd8j0xw7g3g3vhw7dijfm51f75xkm1qxnbh4y45mpz";
+    };
+  }
+  {
+    name = "system.security.cryptography.algorithms";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.cryptography.algorithms/4.3.0/system.security.cryptography.algorithms.4.3.0.nupkg";
+      sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml";
+    };
+  }
+  {
+    name = "system.security.cryptography.encoding";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.cryptography.encoding/4.3.0/system.security.cryptography.encoding.4.3.0.nupkg";
+      sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32";
+    };
+  }
+  {
+    name = "system.security.cryptography.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.cryptography.primitives/4.3.0/system.security.cryptography.primitives.4.3.0.nupkg";
+      sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby";
+    };
+  }
+  {
+    name = "system.security.cryptography.x509certificates";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.cryptography.x509certificates/4.3.0/system.security.cryptography.x509certificates.4.3.0.nupkg";
+      sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h";
+    };
+  }
+  {
+    name = "system.security.permissions";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.permissions/4.7.0/system.security.permissions.4.7.0.nupkg";
+      sha256 = "13f366sj36jwbvld957gk2q64k2xbj48r8b0k9avrri2nlq1fs04";
+    };
+  }
+  {
+    name = "system.security.principal.windows";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.principal.windows/4.5.0/system.security.principal.windows.4.5.0.nupkg";
+      sha256 = "0rmj89wsl5yzwh0kqjgx45vzf694v9p92r4x4q6yxldk1cv1hi86";
+    };
+  }
+  {
+    name = "system.security.principal.windows";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.security.principal.windows/4.7.0/system.security.principal.windows.4.7.0.nupkg";
+      sha256 = "1a56ls5a9sr3ya0nr086sdpa9qv0abv31dd6fp27maqa9zclqq5d";
+    };
+  }
+  {
+    name = "system.text.encoding";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.encoding/4.0.11/system.text.encoding.4.0.11.nupkg";
+      sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw";
+    };
+  }
+  {
+    name = "system.text.encoding";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.encoding/4.3.0/system.text.encoding.4.3.0.nupkg";
+      sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr";
+    };
+  }
+  {
+    name = "system.text.encoding.codepages";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.encoding.codepages/4.0.1/system.text.encoding.codepages.4.0.1.nupkg";
+      sha256 = "00wpm3b9y0k996rm9whxprngm8l500ajmzgy2ip9pgwk0icp06y3";
+    };
+  }
+  {
+    name = "system.text.encoding.codepages";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.encoding.codepages/4.3.0/system.text.encoding.codepages.4.3.0.nupkg";
+      sha256 = "0lgxg1gn7pg7j0f942pfdc9q7wamzxsgq3ng248ikdasxz0iadkv";
+    };
+  }
+  {
+    name = "system.text.encoding.extensions";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.encoding.extensions/4.0.11/system.text.encoding.extensions.4.0.11.nupkg";
+      sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs";
+    };
+  }
+  {
+    name = "system.text.encoding.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.encoding.extensions/4.3.0/system.text.encoding.extensions.4.3.0.nupkg";
+      sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy";
+    };
+  }
+  {
+    name = "system.text.encodings.web";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.encodings.web/4.7.0/system.text.encodings.web.4.7.0.nupkg";
+      sha256 = "0sd3bihfar5rwm6nib4lhyys306nkm02qvk6p6sgzmnlfmma2wn3";
+    };
+  }
+  {
+    name = "system.text.json";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.json/4.7.0/system.text.json.4.7.0.nupkg";
+      sha256 = "0fp3xrysccm5dkaac4yb51d793vywxks978kkl5x4db9gw29rfdr";
+    };
+  }
+  {
+    name = "system.text.regularexpressions";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.regularexpressions/4.1.0/system.text.regularexpressions.4.1.0.nupkg";
+      sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7";
+    };
+  }
+  {
+    name = "system.text.regularexpressions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.text.regularexpressions/4.3.0/system.text.regularexpressions.4.3.0.nupkg";
+      sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l";
+    };
+  }
+  {
+    name = "system.threading";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading/4.0.11/system.threading.4.0.11.nupkg";
+      sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls";
+    };
+  }
+  {
+    name = "system.threading";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading/4.3.0/system.threading.4.3.0.nupkg";
+      sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34";
+    };
+  }
+  {
+    name = "system.threading.tasks";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks/4.0.11/system.threading.tasks.4.0.11.nupkg";
+      sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5";
+    };
+  }
+  {
+    name = "system.threading.tasks";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks/4.3.0/system.threading.tasks.4.3.0.nupkg";
+      sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7";
+    };
+  }
+  {
+    name = "system.threading.tasks.dataflow";
+    version = "4.9.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks.dataflow/4.9.0/system.threading.tasks.dataflow.4.9.0.nupkg";
+      sha256 = "1g6s9pjg4z8iy98df60y9a01imdqy59zd767vz74rrng78jl2dk5";
+    };
+  }
+  {
+    name = "system.threading.tasks.extensions";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks.extensions/4.0.0/system.threading.tasks.extensions.4.0.0.nupkg";
+      sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr";
+    };
+  }
+  {
+    name = "system.threading.tasks.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks.extensions/4.3.0/system.threading.tasks.extensions.4.3.0.nupkg";
+      sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z";
+    };
+  }
+  {
+    name = "system.threading.tasks.extensions";
+    version = "4.5.2";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks.extensions/4.5.2/system.threading.tasks.extensions.4.5.2.nupkg";
+      sha256 = "1sh63dz0dymqcwmprp0nadm77b83vmm7lyllpv578c397bslb8hj";
+    };
+  }
+  {
+    name = "system.threading.tasks.parallel";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks.parallel/4.0.1/system.threading.tasks.parallel.4.0.1.nupkg";
+      sha256 = "114wdg32hr46dfsnns3pgs67kcha5jn47p5gg0mhxfn5vrkr2p75";
+    };
+  }
+  {
+    name = "system.threading.tasks.parallel";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.tasks.parallel/4.3.0/system.threading.tasks.parallel.4.3.0.nupkg";
+      sha256 = "1rr3qa4hxwyj531s4nb3bwrxnxxwz617i0n9gh6x7nr7dd3ayzgh";
+    };
+  }
+  {
+    name = "system.threading.thread";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.thread/4.0.0/system.threading.thread.4.0.0.nupkg";
+      sha256 = "1gxxm5fl36pjjpnx1k688dcw8m9l7nmf802nxis6swdaw8k54jzc";
+    };
+  }
+  {
+    name = "system.threading.thread";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.thread/4.3.0/system.threading.thread.4.3.0.nupkg";
+      sha256 = "0y2xiwdfcph7znm2ysxanrhbqqss6a3shi1z3c779pj2s523mjx4";
+    };
+  }
+  {
+    name = "system.threading.timer";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.timer/4.0.1/system.threading.timer.4.0.1.nupkg";
+      sha256 = "15n54f1f8nn3mjcjrlzdg6q3520571y012mx7v991x2fvp73lmg6";
+    };
+  }
+  {
+    name = "system.threading.timer";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.threading.timer/4.3.0/system.threading.timer.4.3.0.nupkg";
+      sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56";
+    };
+  }
+  {
+    name = "system.valuetuple";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.valuetuple/4.5.0/system.valuetuple.4.5.0.nupkg";
+      sha256 = "00k8ja51d0f9wrq4vv5z2jhq8hy31kac2rg0rv06prylcybzl8cy";
+    };
+  }
+  {
+    name = "system.xml.readerwriter";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.readerwriter/4.0.11/system.xml.readerwriter.4.0.11.nupkg";
+      sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5";
+    };
+  }
+  {
+    name = "system.xml.readerwriter";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.readerwriter/4.3.0/system.xml.readerwriter.4.3.0.nupkg";
+      sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1";
+    };
+  }
+  {
+    name = "system.xml.xdocument";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.xdocument/4.3.0/system.xml.xdocument.4.3.0.nupkg";
+      sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd";
+    };
+  }
+  {
+    name = "system.xml.xmldocument";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.xmldocument/4.0.1/system.xml.xmldocument.4.0.1.nupkg";
+      sha256 = "0ihsnkvyc76r4dcky7v3ansnbyqjzkbyyia0ir5zvqirzan0bnl1";
+    };
+  }
+  {
+    name = "system.xml.xmldocument";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.xmldocument/4.3.0/system.xml.xmldocument.4.3.0.nupkg";
+      sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi";
+    };
+  }
+  {
+    name = "system.xml.xmlserializer";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.xmlserializer/4.0.11/system.xml.xmlserializer.4.0.11.nupkg";
+      sha256 = "01nzc3gdslw90qfykq4qzr2mdnqxjl4sj0wp3fixiwdmlmvpib5z";
+    };
+  }
+  {
+    name = "system.xml.xpath";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.xpath/4.3.0/system.xml.xpath.4.3.0.nupkg";
+      sha256 = "1cv2m0p70774a0sd1zxc8fm8jk3i5zk2bla3riqvi8gsm0r4kpci";
+    };
+  }
+  {
+    name = "system.xml.xpath.xdocument";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/system.xml.xpath.xdocument/4.3.0/system.xml.xpath.xdocument.4.3.0.nupkg";
+      sha256 = "1wxckyb7n1pi433xzz0qcwcbl1swpra64065mbwwi8dhdc4kiabn";
+    };
+  }
+  {
+    name = "vswhere";
+    version = "2.6.7";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/vswhere/2.6.7/vswhere.2.6.7.nupkg";
+      sha256 = "0h4k5i96p7633zzf4xsv7615f9x72rr5qr7b9934ri2y6gshfcwk";
+    };
+  }
+  {
+    name = "xlifftasks";
+    version = "1.0.0-beta.20502.2";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/1a5f89f6-d8da-4080-b15f-242650c914a8/nuget/v3/flat2/xlifftasks/1.0.0-beta.20502.2/xlifftasks.1.0.0-beta.20502.2.nupkg";
+      sha256 = "17k3dagcxhblzjbh00jsvc150rn7xqp3s3fw2qp1pyjj204y8a90";
+    };
+  }
+  {
+    name = "xunit";
+    version = "2.4.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit/2.4.1/xunit.2.4.1.nupkg";
+      sha256 = "0xf3kaywpg15flqaqfgywqyychzk15kz0kz34j21rcv78q9ywq20";
+    };
+  }
+  {
+    name = "xunit.abstractions";
+    version = "2.0.3";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.abstractions/2.0.3/xunit.abstractions.2.0.3.nupkg";
+      sha256 = "00wl8qksgkxld76fgir3ycc5rjqv1sqds6x8yx40927q5py74gfh";
+    };
+  }
+  {
+    name = "xunit.analyzers";
+    version = "0.10.0";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.analyzers/0.10.0/xunit.analyzers.0.10.0.nupkg";
+      sha256 = "15n02q3akyqbvkp8nq75a8rd66d4ax0rx8fhdcn8j78pi235jm7j";
+    };
+  }
+  {
+    name = "xunit.assert";
+    version = "2.4.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.assert/2.4.1/xunit.assert.2.4.1.nupkg";
+      sha256 = "1imynzh80wxq2rp9sc4gxs4x1nriil88f72ilhj5q0m44qqmqpc6";
+    };
+  }
+  {
+    name = "xunit.core";
+    version = "2.4.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.core/2.4.1/xunit.core.2.4.1.nupkg";
+      sha256 = "1nnb3j4kzmycaw1g76ii4rfqkvg6l8gqh18falwp8g28h802019a";
+    };
+  }
+  {
+    name = "xunit.extensibility.core";
+    version = "2.4.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.extensibility.core/2.4.1/xunit.extensibility.core.2.4.1.nupkg";
+      sha256 = "103qsijmnip2pnbhciqyk2jyhdm6snindg5z2s57kqf5pcx9a050";
+    };
+  }
+  {
+    name = "xunit.extensibility.execution";
+    version = "2.4.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.extensibility.execution/2.4.1/xunit.extensibility.execution.2.4.1.nupkg";
+      sha256 = "1pbilxh1gp2ywm5idfl0klhl4gb16j86ib4x83p8raql1dv88qia";
+    };
+  }
+  {
+    name = "xunit.runner.console";
+    version = "2.4.1";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.runner.console/2.4.1/xunit.runner.console.2.4.1.nupkg";
+      sha256 = "13ykz9anhz72xc4q6byvdfwrp54hlcbl6zsfapwfhnzyvfgb9w13";
+    };
+  }
+  {
+    name = "xunit.runner.visualstudio";
+    version = "2.4.3";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/xunit.runner.visualstudio/2.4.3/xunit.runner.visualstudio.2.4.3.nupkg";
+      sha256 = "0j1d0rbcm7pp6dypi61sjxp8l22sv261252z55b243l39jgv2rp3";
+    };
+  }
+]
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..ddc61ca86d9c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/ninja/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, python3, buildDocs ? true, asciidoc, docbook_xml_dtd_45, docbook_xsl, libxslt, re2c }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "ninja";
+  version = "1.10.2";
+
+  src = fetchFromGitHub {
+    owner = "ninja-build";
+    repo = "ninja";
+    rev = "v${version}";
+    sha256 = "0mspq4mvx41qri2v2zlg2y3znx5gfw6d8s3czbcfpr2218qbpz55";
+  };
+
+  nativeBuildInputs = [ python3 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..015759c9d485
--- /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[@]}" | cat
+
+    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[@]}" | cat
+
+    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[@]}" | cat
+    fi
+
+    runHook postCheck
+}
+
+if [ -z "${dontUseNinjaCheck-}" -a -z "${checkPhase-}" ]; then
+    checkPhase=ninjaCheckPhase
+fi
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..e09aeea75a32
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/qbs/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, qmake, qtbase, qtscript }:
+
+stdenv.mkDerivation rec {
+  pname = "qbs";
+
+  version = "1.21.0";
+
+  src = fetchFromGitHub {
+    owner = "qbs";
+    repo = "qbs";
+    rev = "v${version}";
+    sha256 = "sha256-jlJ7bk+lKBUs+jB6MTMe2Qxhf7BA7s5M9Xa2Dnx2UJs=";
+  };
+
+  nativeBuildInputs = [ qmake ];
+
+  dontWrapQtApps = true;
+
+  qmakeFlags = [ "QBS_INSTALL_PREFIX=$(out)" "qbs.pro" ];
+
+  buildInputs = [ qtbase qtscript ];
+
+  meta = with 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..f89ceae93442
--- /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
+   2.1.4
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..d2f0a264ba74
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rake/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "rake";
+  gemdir = ./.;
+  exes = [ "rake" ];
+
+  passthru.updateScript = bundlerUpdateScript "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 nicknovitski ];
+    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..534c5efcfb13
--- /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";
+  };
+}
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..2bdafa5fcfb0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, erlang }:
+
+stdenv.mkDerivation rec {
+  pname = "rebar";
+  version = "2.6.4";
+
+  src = fetchFromGitHub {
+    owner = "rebar";
+    repo = "rebar";
+    rev = version;
+    sha256 = "sha256-okvG7X2uHtZ1p+HUoFOmslrWvYjk0QWBAvAMAW2E40c=";
+  };
+
+  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 = lib.platforms.unix;
+    license = lib.licenses.asl20;
+    maintainers = lib.teams.beam.members;
+  };
+}
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..3ec37b89fd39
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar3/default.nix
@@ -0,0 +1,139 @@
+{ lib, stdenv, fetchFromGitHub, fetchgit,
+  fetchHex, erlang, makeWrapper,
+  writeScript, common-updater-scripts, coreutils, git, gnused, nix, rebar3-nix }:
+
+let
+  version = "3.18.0";
+  owner = "erlang";
+  deps = import ./rebar-deps.nix { inherit fetchFromGitHub fetchgit fetchHex; };
+  rebar3 = stdenv.mkDerivation rec {
+    pname = "rebar3";
+    inherit version erlang;
+
+    # How to obtain `sha256`:
+    # nix-prefetch-url --unpack https://github.com/erlang/rebar3/archive/${version}.tar.gz
+    src = fetchFromGitHub {
+      inherit owner;
+      repo = pname;
+      rev = version;
+      sha256 = "09648hzc2mnjwf9klm20cg4hb5rn2xv2gmzcg98ffv37p5yfl327";
+    };
+
+    buildInputs = [ erlang ];
+
+    postPatch = ''
+      mkdir -p _checkouts _build/default/lib/
+
+      ${toString (lib.mapAttrsToList (k: v: ''
+        cp -R --no-preserve=mode ${v} _checkouts/${k}
+      '') deps)}
+
+      # 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
+    '';
+
+    checkPhase = ''
+      HOME=. escript ./rebar3 ct
+    '';
+
+    doCheck = true;
+
+    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 = lib.platforms.unix;
+      maintainers = lib.teams.beam.members;
+      license = lib.licenses.asl20;
+    };
+
+    passthru.updateScript = writeScript "update.sh" ''
+      #!${stdenv.shell}
+      set -ox errexit
+      PATH=${
+        lib.makeBinPath [
+          common-updater-scripts
+          coreutils
+          git
+          gnused
+          nix
+          (rebar3WithPlugins { globalPlugins = [rebar3-nix]; })
+        ]
+      }
+      latest=$(list-git-tags --url=https://github.com/${owner}/${pname}.git | sed -n '/[\d\.]\+/p' | sort -V | tail -1)
+      if [ "$latest" != "${version}" ]; then
+        nixpkgs="$(git rev-parse --show-toplevel)"
+        nix_path="$nixpkgs/pkgs/development/tools/build-managers/rebar3"
+        update-source-version rebar3 "$latest" --version-key=version --print-changes --file="$nix_path/default.nix"
+        tmpdir=$(mktemp -d)
+        cp -R $(nix-build $nixpkgs --no-out-link -A rebar3.src)/* "$tmpdir"
+        (cd "$tmpdir" && rebar3 as test nix lock -o "$nix_path/rebar-deps.nix")
+      else
+        echo "rebar3 is already up-to-date"
+      fi
+    '';
+  };
+  rebar3WithPlugins = { plugins ? [ ], globalPlugins ? [ ] }:
+    let
+      pluginLibDirs = map (p: "${p}/lib/erlang/lib") (lib.unique (plugins ++ globalPlugins));
+      globalPluginNames = lib.unique (map (p: p.packageName) globalPlugins);
+      rebar3Patched = (rebar3.overrideAttrs (old: {
+
+        # skip-plugins.patch is necessary because otherwise rebar3 will always
+        # try to fetch plugins if they are not already present in _build.
+        #
+        # global-deps.patch makes it possible to use REBAR_GLOBAL_PLUGINS to
+        # instruct rebar3 to always load a certain plugin. It is necessary since
+        # REBAR_GLOBAL_CONFIG_DIR doesn't seem to work for this.
+        patches = [ ./skip-plugins.patch ./global-plugins.patch ];
+
+        # our patches cause the tests to fail
+        doCheck = false;
+      }));
+    in stdenv.mkDerivation {
+      pname = "rebar3-with-plugins";
+      inherit (rebar3) version;
+      nativeBuildInputs = [ erlang makeWrapper ];
+      unpackPhase = "true";
+
+      # Here we extract the rebar3 escript (like `rebar3_prv_local_install.erl`) and
+      # add plugins to the code path.
+
+      installPhase = ''
+        erl -noshell -eval '
+          {ok, Escript} = escript:extract("${rebar3Patched}/bin/rebar3", []),
+          {archive, Archive} = lists:keyfind(archive, 1, Escript),
+          {ok, _} = zip:extract(Archive, [{cwd, "'$out/lib'"}]),
+          init:stop(0)
+        '
+        cp ${./rebar_ignore_deps.erl} rebar_ignore_deps.erl
+        erlc -o $out/lib/rebar/ebin rebar_ignore_deps.erl
+        mkdir -p $out/bin
+        makeWrapper ${erlang}/bin/erl $out/bin/rebar3 \
+          --set REBAR_GLOBAL_PLUGINS "${toString globalPluginNames} rebar_ignore_deps" \
+          --suffix-each ERL_LIBS ":" "$out/lib ${toString pluginLibDirs}" \
+          --add-flags "+sbtu +A1 -noshell -boot start_clean -s rebar3 main -extra"
+      '';
+    };
+in { inherit rebar3 rebar3WithPlugins; }
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rebar3/global-plugins.patch b/nixpkgs/pkgs/development/tools/build-managers/rebar3/global-plugins.patch
new file mode 100644
index 000000000000..9a8bb48f988a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar3/global-plugins.patch
@@ -0,0 +1,14 @@
+diff --git a/src/rebar_plugins.erl b/src/rebar_plugins.erl
+index f2d22233..bee2cf18 100644
+--- a/src/rebar_plugins.erl
++++ b/src/rebar_plugins.erl
+@@ -30,7 +30,8 @@ project_plugins_install(State) ->
+ top_level_install(State) ->
+     Profiles = rebar_state:current_profiles(State),
+     lists:foldl(fun(Profile, StateAcc) ->
+-                        Plugins = rebar_state:get(State, {plugins, Profile}, []),
++                        Plugins = rebar_state:get(State, {plugins, Profile}, [])
++                            ++ [list_to_atom(P) || P <- string:lexemes(os:getenv("REBAR_GLOBAL_PLUGINS", ""), " ")],
+                         handle_plugins(Profile, Plugins, StateAcc)
+                 end, State, Profiles).
+ 
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar-deps.nix b/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar-deps.nix
new file mode 100644
index 000000000000..3848600cb4c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar-deps.nix
@@ -0,0 +1,118 @@
+# Generated by rebar3_nix
+let fetchOnly = { src, ... }: src;
+in { builder ? fetchOnly, fetchHex, fetchgit, fetchFromGitHub, overrides ? (x: y: { }) }:
+let
+  self = packages // (overrides self packages);
+  packages = with self; {
+    ssl_verify_fun = builder {
+      name = "ssl_verify_fun";
+      version = "1.1.6";
+      src = fetchHex {
+        pkg = "ssl_verify_fun";
+        version = "1.1.6";
+        sha256 = "sha256-vbDSRx9FPIj/OQjnaG+G+b4yfQZcwewW+kVAGX6gRoA=";
+      };
+      beamDeps = [ ];
+    };
+    relx = builder {
+      name = "relx";
+      version = "4.6.0";
+      src = fetchHex {
+        pkg = "relx";
+        version = "4.6.0";
+        sha256 = "sha256-L/gTHGMJPGIcazfcUtGyhIqTiIZYS0twHTW9vkN39Qk=";
+      };
+      beamDeps = [ bbmustache ];
+    };
+    providers = builder {
+      name = "providers";
+      version = "1.9.0";
+      src = fetchHex {
+        pkg = "providers";
+        version = "1.9.0";
+        sha256 = "sha256-0ofodEBqFQVghkKwo9tbaNato/KrABrsh+f018efwBc=";
+      };
+      beamDeps = [ erlware_commons getopt ];
+    };
+    getopt = builder {
+      name = "getopt";
+      version = "1.0.1";
+      src = fetchHex {
+        pkg = "getopt";
+        version = "1.0.1";
+        sha256 = "sha256-U+Grg7nOtlyWctPno1uAkum9ybPugHIUcaFhwQxZlZw=";
+      };
+      beamDeps = [ ];
+    };
+    eunit_formatters = builder {
+      name = "eunit_formatters";
+      version = "0.5.0";
+      src = fetchHex {
+        pkg = "eunit_formatters";
+        version = "0.5.0";
+        sha256 = "sha256-1si6ITQklE5uBbvAl8MgAc3Qq+OSXQJFTyKbINaHY8k=";
+      };
+      beamDeps = [ ];
+    };
+    erlware_commons = builder {
+      name = "erlware_commons";
+      version = "1.5.0";
+      src = fetchHex {
+        pkg = "erlware_commons";
+        version = "1.5.0";
+        sha256 = "sha256-PnxvsrpMKbDdXf6dAxtmRJ4giOzsGoFGW9n94F7X0Ns=";
+      };
+      beamDeps = [ cf ];
+    };
+    cth_readable = builder {
+      name = "cth_readable";
+      version = "1.5.1";
+      src = fetchHex {
+        pkg = "cth_readable";
+        version = "1.5.1";
+        sha256 = "sha256-aGVBoi7+bKWkGgR7OVFsLdKPs8reXySi8ZFFs5Z/nYA=";
+      };
+      beamDeps = [ cf ];
+    };
+    cf = builder {
+      name = "cf";
+      version = "0.3.1";
+      src = fetchHex {
+        pkg = "cf";
+        version = "0.3.1";
+        sha256 = "sha256-MV6NRH06SwK82/o5etA7u5iKbgqm9E063Q9OPDv5dnI=";
+      };
+      beamDeps = [ ];
+    };
+    certifi = builder {
+      name = "certifi";
+      version = "2.8.0";
+      src = fetchHex {
+        pkg = "certifi";
+        version = "2.8.0";
+        sha256 = "sha256-asfvwcb4YAsI1iUpLUu/WE4UhHzhtrXETZg9Jz4Ql+o=";
+      };
+      beamDeps = [ ];
+    };
+    bbmustache = builder {
+      name = "bbmustache";
+      version = "1.12.2";
+      src = fetchHex {
+        pkg = "bbmustache";
+        version = "1.12.2";
+        sha256 = "sha256-aIszpNXMLVH1da3ws2g/xAo4MUovFQkG7c/Hf1tXezs=";
+      };
+      beamDeps = [ ];
+    };
+    meck = builder {
+      name = "meck";
+      version = "0.8.13";
+      src = fetchHex {
+        pkg = "meck";
+        version = "0.8.13";
+        sha256 = "sha256-008BPBVttRrVfMVWiRuXIOahwd9f4uFa+ZnITWzr6xo=";
+      };
+      beamDeps = [ ];
+    };
+  };
+in self
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar_ignore_deps.erl b/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar_ignore_deps.erl
new file mode 100644
index 000000000000..3e0ae67c4539
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar3/rebar_ignore_deps.erl
@@ -0,0 +1,43 @@
+%% This module, when loaded as a plugin, overrides the default `install_deps`
+%% provider and erases the dependencies from the rebar3 state, when
+%% REBAR_IGNORE_DEPS is true.
+
+-module(rebar_ignore_deps).
+
+-export([init/1, do/1, format_error/1]).
+
+init(State0) ->
+    case os:getenv("REBAR_IGNORE_DEPS", "") of
+        "" ->
+            {ok, State0};
+        _ ->
+            do_init(State0)
+    end.
+
+do_init(State0) ->
+    State1 = rebar_state:allow_provider_overrides(State0, true),
+    Provider = providers:create(
+                 [
+                  {name, install_deps}, %% override the default install_deps provider
+                  {module, ?MODULE},
+                  {bare, false},
+                  {deps, [app_discovery]},
+                  {example, undefined},
+                  {opts, []},
+                  {short_desc, ""},
+                  {desc, ""}
+                 ]),
+    State2 = rebar_state:add_provider(State1, Provider),
+    {ok, rebar_state:allow_provider_overrides(State2, false)}.
+
+do(State0) ->
+    io:format("Ignoring deps...~n"),
+    Profiles = rebar_state:current_profiles(State0),
+    State = lists:foldl(fun(P, Acc0) ->
+                                 Acc = rebar_state:set(Acc0, {deps, P}, []),
+                                 rebar_state:set(Acc, {parsed_deps, P}, [])
+                         end, State0, Profiles),
+    {ok, State}.
+
+format_error(Reason) ->
+    io_lib:format("~p", [Reason]).
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rebar3/skip-plugins.patch b/nixpkgs/pkgs/development/tools/build-managers/rebar3/skip-plugins.patch
new file mode 100644
index 000000000000..3ee1656c9ede
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar3/skip-plugins.patch
@@ -0,0 +1,54 @@
+diff --git a/src/rebar_plugins.erl b/src/rebar_plugins.erl
+index f2d22233..c61fa553 100644
+--- a/src/rebar_plugins.erl
++++ b/src/rebar_plugins.erl
+@@ -106,31 +106,9 @@ handle_plugins(Profile, Plugins, State, Upgrade) ->
+     State3 = rebar_state:set(State2, deps_dir, DepsDir),
+     rebar_state:lock(State3, Locks).
+ 
+-handle_plugin(Profile, Plugin, State, Upgrade) ->
++handle_plugin(_Profile, Plugin, State, _Upgrade) ->
+     try
+-        {Apps, State2} = rebar_prv_install_deps:handle_deps_as_profile(Profile, State, [Plugin], Upgrade),
+-        {no_cycle, Sorted} = rebar_prv_install_deps:find_cycles(Apps),
+-        ToBuild = rebar_prv_install_deps:cull_compile(Sorted, []),
+-
+-        %% Add already built plugin deps to the code path
+-        ToBuildPaths = [rebar_app_info:ebin_dir(A) || A <- ToBuild],
+-        PreBuiltPaths = [Ebin || A <- Apps,
+-                                 Ebin <- [rebar_app_info:ebin_dir(A)],
+-                                 not lists:member(Ebin, ToBuildPaths)],
+-        code:add_pathsa(PreBuiltPaths),
+-
+-        %% Build plugin and its deps
+-        build_plugins(ToBuild, Apps, State2),
+-
+-        %% Add newly built deps and plugin to code path
+-        State3 = rebar_state:update_all_plugin_deps(State2, Apps),
+-        NewCodePaths = [rebar_app_info:ebin_dir(A) || A <- ToBuild],
+-
+-        %% Store plugin code paths so we can remove them when compiling project apps
+-        State4 = rebar_state:update_code_paths(State3, all_plugin_deps, PreBuiltPaths++NewCodePaths),
+-        rebar_paths:set_paths([plugins], State4),
+-
+-        {plugin_providers(Plugin), State4}
++        {plugin_providers(Plugin), State}
+     catch
+         ?WITH_STACKTRACE(C,T,S)
+             ?DEBUG("~p ~p ~p", [C, T, S]),
+@@ -138,15 +116,6 @@ handle_plugin(Profile, Plugin, State, Upgrade) ->
+             {[], State}
+     end.
+ 
+-build_plugins(MustBuildApps, AllApps, State) ->
+-    State1 = rebar_state:deps_to_build(State, MustBuildApps),
+-    State2 = rebar_state:all_deps(State1, AllApps),
+-    State3 = rebar_state:set(State2, deps_dir, ?DEFAULT_PLUGINS_DIR),
+-    {Args, Extra} = rebar_state:command_parsed_args(State),
+-    State4 = rebar_state:command_parsed_args(State3, {[{deps_only, true}|Args], Extra}),
+-    rebar_prv_compile:do(State4),
+-    ok.
+-
+ plugin_providers({Plugin, _, _, _}) when is_atom(Plugin) ->
+     validate_plugin(Plugin);
+ plugin_providers({Plugin, _, _}) when is_atom(Plugin) ->
diff --git a/nixpkgs/pkgs/development/tools/build-managers/rebar3/tmp-tests-skip.patch b/nixpkgs/pkgs/development/tools/build-managers/rebar3/tmp-tests-skip.patch
new file mode 100644
index 000000000000..b90e0f9d2bb6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rebar3/tmp-tests-skip.patch
@@ -0,0 +1,17 @@
+diff --git a/test/rebar_file_utils_SUITE.erl b/test/rebar_file_utils_SUITE.erl
+index d771a82..05cfbf7 100644
+--- a/test/rebar_file_utils_SUITE.erl
++++ b/test/rebar_file_utils_SUITE.erl
+@@ -34,13 +34,11 @@
+
+ all() ->
+     [{group, tmpdir},
+-     {group, reset_dir},
+      {group, mv},
+      path_from_ancestor,
+      canonical_path,
+      absolute_path,
+      normalized_path,
+-     resolve_link,
+      split_dirname,
+      mv_warning_is_ignored].
diff --git a/nixpkgs/pkgs/development/tools/build-managers/redo-apenwarr/default.nix b/nixpkgs/pkgs/development/tools/build-managers/redo-apenwarr/default.nix
new file mode 100644
index 000000000000..460ee0041472
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/redo-apenwarr/default.nix
@@ -0,0 +1,73 @@
+{ stdenv, lib, python3, fetchFromGitHub, which, findutils, coreutils
+, perl, installShellFiles
+, doCheck ? true
+}: stdenv.mkDerivation rec {
+
+  pname = "redo-apenwarr";
+  version = "0.42d";
+
+  src = fetchFromGitHub rec {
+    owner = "apenwarr";
+    repo = "redo";
+    rev = "${repo}-${version}";
+    sha256 = "/QIMXpVhVLAIJa3LiOlRKzbUztIWZygkWZUKN4Nrh+M=";
+  };
+
+  postPatch = ''
+
+    patchShebangs minimal/do
+
+  '' + lib.optionalString doCheck ''
+    unset CC CXX
+
+    substituteInPlace minimal/do.test \
+      --replace "/bin/pwd" "${coreutils}/bin/pwd"
+
+    substituteInPlace t/105-sympath/all.do \
+      --replace "/bin/pwd" "${coreutils}/bin/pwd"
+
+    substituteInPlace t/all.do \
+      --replace "/bin/ls" "ls"
+
+    substituteInPlace t/110-compile/hello.o.do \
+      --replace "/usr/include" "${lib.getDev stdenv.cc.libc}/include"
+
+    substituteInPlace t/200-shell/nonshelltest.do \
+      --replace "/usr/bin/env perl" "${perl}/bin/perl"
+
+  '';
+
+  inherit doCheck;
+
+  checkTarget = "test";
+
+  outputs = [ "out" "man" ];
+
+  installFlags = [
+    "PREFIX=$(out)"
+    "DESTDIR=/"
+  ];
+
+  nativeBuildInputs = [
+    python3
+    (with python3.pkgs; [ beautifulsoup4 markdown ])
+    which
+    findutils
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installShellCompletion --bash contrib/bash_completion.d/redo
+  '';
+
+  meta = with lib; {
+    description = "Smaller, easier, more powerful, and more reliable than make. An implementation of djb's redo";
+    homepage = "https://github.com/apenwarr/redo";
+    maintainers = with maintainers; [
+      andrewchambers
+      ck3d
+    ];
+    license = licenses.asl20;
+    platforms = python3.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/redo-c/Makefile b/nixpkgs/pkgs/development/tools/build-managers/redo-c/Makefile
new file mode 100644
index 000000000000..5a1dd74c5b84
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/redo-c/Makefile
@@ -0,0 +1,10 @@
+CFLAGS ?= -Os
+
+all: redo links
+
+links:
+	sh links.do
+
+install:
+	mkdir -p "$(out)/bin"
+	cp --no-dereference redo redo-* "$(out)/bin"
diff --git a/nixpkgs/pkgs/development/tools/build-managers/redo-c/default.nix b/nixpkgs/pkgs/development/tools/build-managers/redo-c/default.nix
new file mode 100644
index 000000000000..14d33cba0395
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/redo-c/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+stdenv.mkDerivation rec {
+  pname = "redo-c";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "leahneukirchen";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-oZcaBgESIaD7/SUBE7luh7axucKTEzXPVkQAQs2NCXE=";
+  };
+
+  postPatch = ''
+    cp '${./Makefile}' Makefile
+  '';
+
+  meta = with lib; {
+    description = "An implementation of the redo build system in portable C with zero dependencies";
+    homepage = "https://github.com/leahneukirchen/redo-c";
+    license = licenses.cc0;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ck3d ];
+  };
+}
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..093a825723c0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/redo-sh/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, makeWrapper, coreutils }:
+
+stdenv.mkDerivation {
+  version = "4.0.4";
+  pname = "redo-sh";
+
+  src = fetchurl {
+    url = "http://news.dieweltistgarnichtso.net/bin/archives/redo-sh.tar.gz";
+    sha256 = "0d3hz3vy5qmjr9r4f8a5cx9hikpzs8h8f0fsl3dpbialf4wck24g";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  sourceRoot = ".";
+  installPhase = ''
+    mkdir -p "$out/share"
+    mv man "$out/share"
+    mv bin "$out"
+    for p in $out/bin/*; do
+      wrapProgram "$p" --prefix PATH : "$out/bin:${coreutils}/bin"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Redo implementation in Bourne Shell";
+    homepage = "http://news.dieweltistgarnichtso.net/bin/redo-sh.html";
+    license  = licenses.agpl3;
+    platforms = platforms.unix;
+    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..f16e91d3bfb1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/redo/default.nix
@@ -0,0 +1,29 @@
+{lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "redo";
+  version = "1.4";
+  src = fetchurl {
+    url = "https://jdebp.eu./Repository/freebsd/${pname}-${version}.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 = lib.licenses.bsd2;
+    maintainers = [ lib.maintainers.vrthra ];
+    platforms = 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..5357dc805e87
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/remake/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, readline
+, guileSupport ? false
+, guile
+}:
+
+stdenv.mkDerivation rec {
+  pname = "remake";
+  remakeVersion = "4.3";
+  dbgVersion = "1.6";
+  version = "${remakeVersion}+dbg-${dbgVersion}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/bashdb/remake/${version}/remake-${remakeVersion}+dbg-${dbgVersion}.tar.gz";
+    sha256 = "11vvch8bi0yhjfz7gn92b3xmmm0cgi3qfiyhbnnj89frkhbwd87n";
+  };
+
+  patches = [
+    ./glibc-2.27-glob.patch
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+  buildInputs = [ readline ]
+    ++ lib.optionals guileSupport [ guile ];
+
+  # make check fails, see https://github.com/rocky/remake/issues/117
+
+  meta = {
+    homepage = "http://bashdb.sourceforge.net/remake/";
+    license = lib.licenses.gpl3Plus;
+    description = "GNU Make with comprehensible tracing and a debugger";
+    platforms = with lib.platforms; linux ++ darwin;
+    maintainers = with lib.maintainers; [ bjornfor shamilton ];
+  };
+}
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/rocm-cmake/default.nix b/nixpkgs/pkgs/development/tools/build-managers/rocm-cmake/default.nix
new file mode 100644
index 000000000000..f6d5de348932
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/rocm-cmake/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, writeScript, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "rocm-cmake";
+  version = "5.0.2";
+
+  src = fetchFromGitHub {
+    owner = "RadeonOpenCompute";
+    repo = "rocm-cmake";
+    rev = "rocm-${version}";
+    hash = "sha256-4PtLe864MQ9wUn+l1fshiiTQvP06ewD39TDYZl70Hgg=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  passthru.updateScript = writeScript "update.sh" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p curl jq common-updater-scripts
+    version="$(curl -sL "https://api.github.com/repos/RadeonOpenCompute/rocm-cmake/tags" | jq '.[].name | split("-") | .[1] | select( . != null )' --raw-output | sort -n | tail -1)"
+    update-source-version rocm-cmake "$version"
+  '';
+
+  meta = with lib; {
+    description = "CMake modules for common build tasks for the ROCm stack";
+    homepage = "https://github.com/RadeonOpenCompute/rocm-cmake";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/samurai/default.nix b/nixpkgs/pkgs/development/tools/build-managers/samurai/default.nix
new file mode 100644
index 000000000000..cd058bfc2632
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/samurai/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "samurai";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "michaelforney";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-RPY3MFlnSDBZ5LOkdWnMiR/CZIBdqIFo9uLU+SAKPBI=";
+  };
+
+  makeFlags = [ "DESTDIR=" "PREFIX=${placeholder "out"}" ];
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2021-30218.patch";
+      url = "https://github.com/michaelforney/samurai/commit/e84b6d99c85043fa1ba54851ee500540ec206918.patch";
+      sha256 = "sha256-hyndwj6st4rwOJ35Iu0qL12dR5E6CBvsulvR27PYKMw=";
+    })
+    (fetchpatch {
+      name = "CVE-2021-30219.patch";
+      url = "https://github.com/michaelforney/samurai/commit/d2af3bc375e2a77139c3a28d6128c60cd8d08655.patch";
+      sha256 = "sha256-rcdwKjHeq5Oaga9wezdHSg/7ljkynfbnkBc2ciMW5so=";
+    })
+  ];
+
+  meta = with lib; {
+    description = "ninja-compatible build tool written in C";
+    homepage = "https://github.com/michaelforney/samurai";
+    license = with licenses; [ mit asl20 ]; # see LICENSE
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
+
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..267702763722
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/sbt-extras/default.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv, fetchFromGitHub, which, curl, makeWrapper, jdk, writeScript
+, common-updater-scripts, cacert, git, nixfmt, nix, jq, coreutils, gnused }:
+
+stdenv.mkDerivation rec {
+  pname = "sbt-extras";
+  rev = "ef403f4ce126441f126dfc61ca6357a7b42539af";
+  version = "2022-02-01";
+
+  src = fetchFromGitHub {
+    owner = "paulp";
+    repo = "sbt-extras";
+    inherit rev;
+    sha256 = "G7nR2wV0Wv019bCA+ecfYhmFh/DDHFjihKGFKNQ5dgM=";
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    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 : ${lib.makeBinPath [ which curl ]}
+
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/sbt -h >/dev/null
+  '';
+
+  passthru.updateScript = writeScript "update.sh" ''
+     #!${stdenv.shell}
+     set -xo errexit
+     PATH=${
+       lib.makeBinPath [
+         common-updater-scripts
+         curl
+         cacert
+         git
+         nixfmt
+         nix
+         jq
+         coreutils
+         gnused
+       ]
+     }
+    oldVersion="$(nix-instantiate --eval -E "with import ./. {}; lib.getVersion ${pname}" | tr -d '"')"
+     latestSha="$(curl -L -s https://api.github.com/repos/paulp/sbt-extras/commits\?sha\=master\&since\=$oldVersion | jq -r '.[0].sha')"
+    if [ ! "null" = "$latestSha" ]; then
+       nixpkgs="$(git rev-parse --show-toplevel)"
+       default_nix="$nixpkgs/pkgs/development/tools/build-managers/sbt-extras/default.nix"
+       latestDate="$(curl -L -s https://api.github.com/repos/paulp/sbt-extras/commits/$latestSha | jq '.commit.committer.date' | sed 's|"\(.*\)T.*|\1|g')"
+       update-source-version ${pname} "$latestSha" --version-key=rev
+       update-source-version ${pname} "$latestDate" --ignore-same-hash
+       nixfmt "$default_nix"
+     else
+       echo "${pname} is already up-to-date"
+     fi
+  '';
+
+  meta = {
+    description =
+      "A more featureful runner for sbt, the simple/scala/standard build tool";
+    homepage = "https://github.com/paulp/sbt-extras";
+    license = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [ nequissimus puffnfresh ];
+    platforms = 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..59d9441a5905
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/sbt/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchurl
+, jre
+, autoPatchelfHook
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sbt";
+  version = "1.6.2";
+
+  src = fetchurl {
+    url = "https://github.com/sbt/sbt/releases/download/v${version}/sbt-${version}.tgz";
+    sha256 = "sha256-Y3Y3tsTm+gSrYs02QGHjKxJICwkAHNIzA99is2+t1EA=";
+  };
+
+  postPatch = ''
+    echo -java-home ${jre.home} >>conf/sbtopts
+  '';
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ autoPatchelfHook ];
+
+  buildInputs = lib.optionals stdenv.isLinux [ zlib ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/sbt $out/bin
+    cp -ra . $out/share/sbt
+    ln -sT ../share/sbt/bin/sbt $out/bin/sbt
+    ln -sT ../share/sbt/bin/sbtn-x86_64-${
+      if (stdenv.isDarwin) then "apple-darwin" else "pc-linux"
+    } $out/bin/sbtn
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.scala-sbt.org/";
+    license = licenses.bsd3;
+    description = "A build tool for Scala, Java and more";
+    maintainers = with maintainers; [ nequissimus ];
+    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/scala-cli/default.nix b/nixpkgs/pkgs/development/tools/build-managers/scala-cli/default.nix
new file mode 100644
index 000000000000..c045944b7737
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scala-cli/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, coreutils, lib, installShellFiles, zlib, autoPatchelfHook, fetchurl }:
+
+let
+  version = "0.1.2";
+  assets = {
+    x86_64-darwin = {
+      asset = "scala-cli-x86_64-apple-darwin.gz";
+      sha256 = "10453af2kz10k9vmcgdwpk10z36cnblnj6l09wkqngxwx9vxbf9q";
+    };
+    x86_64-linux = {
+      asset = "scala-cli-x86_64-pc-linux.gz";
+      sha256 = "0720c4s717hcssp4b3x295rhgac4ifjr95zn45bm1n70jr3xqzyj";
+    };
+  };
+in
+stdenv.mkDerivation {
+  pname = "scala-cli";
+  inherit version;
+  nativeBuildInputs = [ autoPatchelfHook installShellFiles ];
+  buildInputs = [ coreutils zlib stdenv.cc.cc ];
+  src =
+    let
+      asset = assets."${stdenv.hostPlatform.system}" or (throw "Unsupported platform ${stdenv.hostPlatform.system}");
+    in
+    fetchurl {
+      url = "https://github.com/Virtuslab/scala-cli/releases/download/v${version}/${asset.asset}";
+      sha256 = asset.sha256;
+    };
+
+  unpackPhase = ''
+    runHook preUnpack
+    gzip -d < $src > scala-cli
+    runHook postUnpack
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 scala-cli $out/bin/scala-cli
+    runHook postInstall
+  '';
+
+  # We need to call autopatchelf before generating completions
+  dontAutoPatchelf = true;
+
+  postFixup = ''
+    autoPatchelf $out
+
+    # hack to ensure the completion function looks right
+    # as $0 is used to generate the compdef directive
+    PATH="$out/bin:$PATH"
+
+    installShellCompletion --cmd scala-cli \
+      --bash <(scala-cli completions bash) \
+      --zsh <(scala-cli completions zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://scala-cli.virtuslab.org";
+    downloadPage = "https://github.com/VirtusLab/scala-cli/releases/v${version}";
+    license = licenses.asl20;
+    description = "Command-line tool to interact with the Scala language";
+    maintainers = [ maintainers.kubukoz ];
+    platforms = builtins.attrNames assets;
+  };
+}
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..da276be7287c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scons/common.nix
@@ -0,0 +1,54 @@
+{ version, sha256 }:
+
+{ fetchurl, python, lib }:
+
+python.pkgs.buildPythonApplication rec {
+  pname = "scons";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/scons/${pname}-${version}.tar.gz";
+    inherit sha256;
+  };
+
+  setupHook = ./setup-hook.sh;
+
+  postPatch = lib.optionalString (lib.versionAtLeast version "4.0.0") ''
+    substituteInPlace setup.cfg \
+      --replace "build/dist" "dist"
+  '' + lib.optionalString (lib.versionAtLeast version "4.1.0") ''
+    substituteInPlace setup.cfg \
+      --replace "build/doc/man/" ""
+  '';
+
+  # The release tarballs don't contain any tests (runtest.py and test/*):
+  doCheck = lib.versionOlder version "4.0.0";
+
+  postInstall = lib.optionalString (lib.versionAtLeast version "4.1.0") ''
+    mkdir -p "$out/share/man/man1"
+    mv "$out/"*.1 "$out/share/man/man1/"
+  '';
+
+  passthru = {
+    # expose the used python version so tools using this (and extensing scos with other python modules)
+    # can use the exact same python version.
+    inherit python;
+  };
+
+  meta = with lib; {
+    description = "An improved, cross-platform substitute for Make";
+    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.
+    '';
+    homepage = "https://scons.org/";
+    changelog = "https://raw.githubusercontent.com/SConsProject/scons/rel_${version}/src/CHANGES.txt";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ ];
+  };
+}
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..da11bdb28aa1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/scons/default.nix
@@ -0,0 +1,20 @@
+{ callPackage, python2, python3 }:
+
+let
+  mkScons = args: callPackage (import ./common.nix args) {
+    python = python3;
+  };
+in {
+  scons_3_0_1 = (mkScons {
+    version = "3.0.1";
+    sha256 = "0wzid419mlwqw9llrg8gsx4nkzhqy16m4m40r0xnh6cwscw5wir4";
+  }).override { python = python2; };
+  scons_3_1_2 = (mkScons {
+    version = "3.1.2";
+    sha256 = "1yzq2gg9zwz9rvfn42v5jzl3g4qf1khhny6zfbi2hib55zvg60bq";
+  }).override { python = python2; };
+  scons_latest = mkScons {
+    version = "4.1.0";
+    sha256 = "11axk03142ziax6i3wwy9qpqp7r3i7h5jg9y2xzph9i15rv8vlkj";
+  };
+}
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..0b908f68286b
--- /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..f810510b5625
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/shards/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, fetchFromGitHub
+, crystal
+}:
+
+let
+  generic =
+    { version, sha256 }:
+
+    crystal.buildCrystalPackage {
+      pname = "shards";
+      inherit version;
+
+      src = fetchFromGitHub {
+        owner = "crystal-lang";
+        repo = "shards";
+        rev = "v${version}";
+        inherit sha256;
+      };
+
+      # we cannot use `make` or `shards` here as it would introduce a cyclical dependency
+      format = "crystal";
+      shardsFile = ./shards.nix;
+      crystalBinaries.shards.src = "./src/shards.cr";
+
+      # tries to execute git which fails spectacularly
+      doCheck = false;
+
+      meta = with lib; {
+        description = "Dependency manager for the Crystal language";
+        license = licenses.asl20;
+        maintainers = with maintainers; [ peterhoeg ];
+        inherit (crystal.meta) homepage platforms;
+      };
+    };
+
+in
+rec {
+
+  shards_0_15 = generic {
+    version = "0.15.0";
+    sha256 = "sha256-/C6whh5RbTBkFWqpn0GqyVe0opbrklm8xPv5MIG99VU=";
+  };
+
+  shards_0_16 = generic {
+    version = "0.16.0";
+    sha256 = "sha256-go8sL4djIDGNwb7FsCcATONnMYahHY8qJUDyUiPLRUY=";
+  };
+
+  shards = shards_0_16;
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/shards/shards.nix b/nixpkgs/pkgs/development/tools/build-managers/shards/shards.nix
new file mode 100644
index 000000000000..95250acf1945
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/shards/shards.nix
@@ -0,0 +1,8 @@
+{
+  molinillo = {
+    owner = "crystal-lang";
+    repo = "crystal-molinillo";
+    rev = "v0.2.0";
+    sha256 = "0pzi8pbrjn03zgk3kbha2kqqq0crmr8gy98dr05kisafvbghzwnh";
+  };
+}
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..403adaff89ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/tup/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchFromGitHub, fuse3, macfuse-stubs, pkg-config, pcre }:
+
+let
+  fuse = if stdenv.isDarwin then macfuse-stubs else fuse3;
+in stdenv.mkDerivation rec {
+  pname = "tup";
+  version = "0.7.11";
+  outputs = [ "bin" "man" "out" ];
+
+  src = fetchFromGitHub {
+    owner = "gittup";
+    repo = "tup";
+    rev = "v${version}";
+    hash = "sha256-Q2Y5ErcfhLChi9Wezn8+7eNXYX2UXW1fBOqEclmgzOo=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ fuse pcre ];
+
+  configurePhase = ''
+    substituteInPlace  src/tup/link.sh --replace '`git describe' '`echo ${version}'
+    substituteInPlace Tuprules.tup --replace 'pcre-config' 'pkg-config libpcre'
+  '';
+
+  # 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 = ''
+    runHook preBuild
+    ./build.sh
+    ./build/tup init
+    ./build/tup generate script.sh
+    ./script.sh
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D tup -t $bin/bin/
+    install -D tup.1 -t $man/share/man/man1/
+    runHook postInstall
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  meta = with 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;
+    maintainers = with maintainers; [ ehmry ];
+    platforms = platforms.unix;
+
+    # TODO: Remove once nixpkgs uses newer SDKs that supports '*at' functions.
+    # Probably MacOS SDK 10.13 or later. Check the current version in
+    # ../../../../os-specific/darwin/apple-sdk/default.nix
+    #
+    # https://github.com/gittup/tup/commit/3697c74
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/build-managers/tup/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/tup/setup-hook.sh
new file mode 100644
index 000000000000..b7962c80d469
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/tup/setup-hook.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+tupConfigurePhase() {
+    runHook preConfigure
+
+    echo -n CONFIG_TUP_ARCH= >> tup.config
+    case "$system" in
+    "i686-*")      echo i386 >> tup.config;;
+    "x86_64-*")    echo x86_64 >> tup.config;;
+    "powerpc-*")   echo powerpc >> tup.config;;
+    "powerpc64-*") echo powerpc64 >> tup.config;;
+    "ia64-*")      echo ia64 >> tup.config;;
+    "alpha-*")     echo alpha >> tup.config;;
+    "sparc-*")     echo sparc >> tup.config;;
+    "aarch64-*")   echo arm64 >> tup.config;;
+    "arm*")        echo arm >> tup.config;;
+    esac
+
+    echo "${tupConfig-}" >> tup.config
+
+    tup init
+    tup generate tupBuild.sh
+
+    runHook postConfigure
+}
+
+if [ -z "${dontUseTupConfigure-}" -a -z "${configurePhase-}" ]; then
+    configurePhase=tupConfigurePhase
+fi
+
+
+tupBuildPhase() {
+    runHook preBuild
+
+    pushd .
+    . tupBuild.sh
+    popd
+
+    runHook postBuild
+}
+
+if [ -z "${dontUseTupBuild-}" -a -z "${buildPhase-}" ]; then
+    buildPhase=tupBuildPhase
+fi
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..c0707a1cd935
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/waf/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitLab, python3, ensureNewerSourcesForZipFilesHook
+# optional list of extra waf tools, e.g. `[ "doxygen" "pytest" ]`
+, withTools ? null
+}:
+let
+  wafToolsArg = with lib.strings;
+    optionalString (!isNull withTools) " --tools=\"${concatStringsSep "," withTools}\"";
+in
+stdenv.mkDerivation rec {
+  pname = "waf";
+  version = "2.0.23";
+
+  src = fetchFromGitLab {
+    owner = "ita1024";
+    repo = "waf";
+    rev = "${pname}-${version}";
+    sha256 = "sha256-AASjkXb3eCVjbuT0GOwhagoNHxG7/XP1Mj0i1U4j13Q=";
+  };
+
+  nativeBuildInputs = [ python3 ensureNewerSourcesForZipFilesHook ];
+
+  # waf bin has #!/usr/bin/env python
+  buildInputs = [ python3 ];
+
+  configurePhase = ''
+    python waf-light configure
+  '';
+  buildPhase = ''
+    python waf-light build${wafToolsArg}
+  '';
+  installPhase = ''
+    install -D waf $out/bin/waf
+  '';
+
+  strictDeps = true;
+
+  meta = with 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/wafHook/default.nix b/nixpkgs/pkgs/development/tools/build-managers/wafHook/default.nix
new file mode 100644
index 000000000000..2131caede3c8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/wafHook/default.nix
@@ -0,0 +1,9 @@
+{ lib, stdenv, pkgs, makeSetupHook, waf }:
+
+makeSetupHook {
+  substitutions = {
+    inherit waf;
+    crossFlags = lib.optionalString (stdenv.hostPlatform.system != stdenv.targetPlatform.system)
+      ''--cross-compile "--cross-execute=${stdenv.targetPlatform.emulator pkgs}"'';
+  };
+} ./setup-hook.sh
diff --git a/nixpkgs/pkgs/development/tools/build-managers/wafHook/setup-hook.sh b/nixpkgs/pkgs/development/tools/build-managers/wafHook/setup-hook.sh
new file mode 100644
index 000000000000..6cea8fcc2ea8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/wafHook/setup-hook.sh
@@ -0,0 +1,80 @@
+wafConfigurePhase() {
+    runHook preConfigure
+
+    if ! [ -f "${wafPath:=./waf}" ]; then
+        echo "copying waf to $wafPath..."
+        cp @waf@/bin/waf "$wafPath"
+    fi
+
+    if [ -z "${dontAddPrefix:-}" ] && [ -n "$prefix" ]; then
+        wafConfigureFlags="${prefixKey:---prefix=}$prefix $wafConfigureFlags"
+    fi
+
+    local flagsArray=(
+        "${flagsArray[@]}"
+        $wafConfigureFlags "${wafConfigureFlagsArray[@]}"
+        ${configureTargets:-configure}
+    )
+    if [ -z "${dontAddWafCrossFlags:-}" ]; then
+        flagsArray+=(@crossFlags@)
+    fi
+    echoCmd 'configure flags' "${flagsArray[@]}"
+    python "$wafPath" "${flagsArray[@]}"
+
+    if ! [[ -v enableParallelBuilding ]]; then
+        enableParallelBuilding=1
+        echo "waf: enabled parallel building"
+    fi
+
+    runHook postConfigure
+}
+
+if [ -z "${dontUseWafConfigure-}" -a -z "${configurePhase-}" ]; then
+    configurePhase=wafConfigurePhase
+fi
+
+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
+}
+
+if [ -z "${dontUseWafBuild-}" -a -z "${buildPhase-}" ]; then
+    buildPhase=wafBuildPhase
+fi
+
+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
+}
+
+if [ -z "${dontUseWafInstall-}" -a -z "${installPhase-}" ]; then
+    installPhase=wafInstallPhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/buildah/default.nix b/nixpkgs/pkgs/development/tools/buildah/default.nix
new file mode 100644
index 000000000000..ea6f866a48b1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/buildah/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, go-md2man
+, installShellFiles
+, pkg-config
+, gpgme
+, lvm2
+, btrfs-progs
+, libapparmor
+, libselinux
+, libseccomp
+}:
+
+buildGoModule rec {
+  pname = "buildah";
+  version = "1.24.2";
+
+  src = fetchFromGitHub {
+    owner = "containers";
+    repo = "buildah";
+    rev = "v${version}";
+    sha256 = "sha256-gBO+H26YGmOtP3CUHZjynAaOb0h+MJbJnWqxOZdif6w=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  vendorSha256 = null;
+
+  doCheck = false;
+
+  nativeBuildInputs = [ go-md2man installShellFiles pkg-config ];
+
+  buildInputs = [
+    btrfs-progs
+    gpgme
+    libapparmor
+    libseccomp
+    libselinux
+    lvm2
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    patchShebangs .
+    make bin/buildah GIT_COMMIT="unknown"
+    make -C docs GOMD2MAN="${go-md2man}/bin/go-md2man"
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 bin/buildah $out/bin/buildah
+    installShellCompletion --bash contrib/completions/bash/buildah
+    make -C docs install PREFIX="$man"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A tool which facilitates building OCI images";
+    homepage = "https://buildah.io/";
+    changelog = "https://github.com/containers/buildah/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Profpatsch ] ++ teams.podman.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/buildah/wrapper.nix b/nixpkgs/pkgs/development/tools/buildah/wrapper.nix
new file mode 100644
index 000000000000..a31dece7df5e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/buildah/wrapper.nix
@@ -0,0 +1,54 @@
+{ buildah-unwrapped
+, runCommand
+, makeWrapper
+, lib
+, extraPackages ? []
+, buildah
+, runc # Default container runtime
+, crun # Container runtime (default with cgroups v2 for podman/buildah)
+, conmon # Container runtime monitor
+, slirp4netns # User-mode networking for unprivileged namespaces
+, fuse-overlayfs # CoW for images, much faster than default vfs
+, util-linux # nsenter
+, cni-plugins # not added to path
+, iptables
+}:
+
+let
+  buildah = buildah-unwrapped;
+
+  preferLocalBuild = true;
+
+  binPath = lib.makeBinPath ([
+    runc
+    crun
+    conmon
+    slirp4netns
+    fuse-overlayfs
+    util-linux
+    iptables
+  ] ++ extraPackages);
+
+in runCommand buildah.name {
+  name = "${buildah.pname}-wrapper-${buildah.version}";
+  inherit (buildah) pname version;
+
+  meta = builtins.removeAttrs buildah.meta [ "outputsToInstall" ];
+
+  outputs = [
+    "out"
+    "man"
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+} ''
+  ln -s ${buildah.man} $man
+
+  mkdir -p $out/bin
+  ln -s ${buildah-unwrapped}/share $out/share
+  makeWrapper ${buildah-unwrapped}/bin/buildah $out/bin/buildah \
+    --prefix PATH : ${binPath}
+''
diff --git a/nixpkgs/pkgs/development/tools/buildkit/default.nix b/nixpkgs/pkgs/development/tools/buildkit/default.nix
new file mode 100644
index 000000000000..df644935cf16
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/buildkit/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "buildkit";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "moby";
+    repo = "buildkit";
+    rev = "v${version}";
+    sha256 = "sha256-Pdnu0zG1LteAob0YUuG/XDh2pfBj5UO2GrkWFlMZeGY=";
+  };
+
+  vendorSha256 = null;
+
+  subPackages = [ "cmd/buildctl" ] ++ lib.optionals stdenv.isLinux [ "cmd/buildkitd" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/moby/buildkit/version.Version=${version}" "-X github.com/moby/buildkit/version.Revision=${src.rev}" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Concurrent, cache-efficient, and Dockerfile-agnostic builder toolkit";
+    homepage = "https://github.com/moby/buildkit";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ vdemeester marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/buildpack/default.nix b/nixpkgs/pkgs/development/tools/buildpack/default.nix
new file mode 100644
index 000000000000..d607f7af00c3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/buildpack/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "pack";
+  version = "0.24.0";
+
+  src = fetchFromGitHub {
+    owner = "buildpacks";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-nlSJwo2YjbOOKofZwXdWB3fxRUNTeSUcT6jN987SB3o=";
+  };
+
+  vendorSha256 = "sha256-4uMd0KaV5xrxuJ9yqpxbD3YTNaBHsH2d/IRtYRyN5+0=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "cmd/pack" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/buildpacks/pack.Version=${version}" ];
+
+  postInstall = ''
+    installShellCompletion --bash --name pack.bash $(PACK_HOME=$PWD $out/bin/pack completion --shell bash)
+    installShellCompletion --zsh --name _pack $(PACK_HOME=$PWD $out/bin/pack completion --shell zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://buildpacks.io/";
+    changelog = "https://github.com/buildpacks/pack/releases/tag/v${version}";
+    description = "CLI for building apps using Cloud Native Buildpacks";
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/bunyan-rs/default.nix b/nixpkgs/pkgs/development/tools/bunyan-rs/default.nix
new file mode 100644
index 000000000000..77191efbe4fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/bunyan-rs/default.nix
@@ -0,0 +1,26 @@
+{ rustPlatform
+, fetchFromGitHub
+, lib
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bunyan-rs";
+  version = "0.1.7";
+
+  src = fetchFromGitHub {
+    owner = "LukeMathWalker";
+    repo = "bunyan";
+    rev = "v${version}";
+    sha256 = "sha256-NGM8ryOy5bxF53Ak2/UDCf47MBlx/t6wcPlt+K8qvkg=";
+  };
+
+  cargoSha256 = "sha256-kzzOEHil7mW+fsstgr4/N4i8c9rzx4TzqGfYDgkzjh0=";
+
+  meta = with lib; {
+    description = "A CLI to pretty print logs in bunyan format (Rust port of the original JavaScript bunyan CLI)";
+    homepage = "https://github.com/LukeMathWalker/bunyan";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ netcrns ];
+    mainProgram = "bunyan";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/butane/default.nix b/nixpkgs/pkgs/development/tools/butane/default.nix
new file mode 100644
index 000000000000..4570faa96f26
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/butane/default.nix
@@ -0,0 +1,37 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+with lib;
+
+buildGoModule rec {
+  pname = "butane";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "coreos";
+    repo = "butane";
+    rev = "v${version}";
+    sha256 = "sha256-rS1/LQ5R3WY9ot1pgtN+6t/ZChr9SxPzrsNio7WWNqQ=";
+  };
+
+  vendorSha256 = null;
+
+  doCheck = false;
+
+  subPackages = [ "internal" ];
+
+  ldflags = [
+    "-X github.com/coreos/butane/internal/version.Raw=v${version}"
+  ];
+
+  postInstall = ''
+    mv $out/bin/{internal,butane}
+  '';
+
+  meta = {
+    description = "Translates human-readable Butane configs into machine-readable Ignition configs";
+    license = licenses.asl20;
+    homepage = "https://github.com/coreos/butane";
+    maintainers = with maintainers; [ elijahcaine ruuda ];
+    platforms = platforms.unix;
+  };
+}
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..5d22e69f31c0
--- /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
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/cadre/default.nix b/nixpkgs/pkgs/development/tools/cadre/default.nix
new file mode 100644
index 000000000000..17b505bf2a9d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cadre/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "cadre";
+  gemdir = ./.;
+  exes = [ "cadre" ];
+
+  passthru.updateScript = bundlerUpdateScript "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 = with maintainers; [ nyarly nicknovitski ];
+    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..e98f5c5f3e69
--- /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";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/capnproto-java/default.nix b/nixpkgs/pkgs/development/tools/capnproto-java/default.nix
new file mode 100644
index 000000000000..95b78b724eb6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/capnproto-java/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, capnproto, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "capnproto-java";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "capnproto";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256:1512x70xa6mlg9dmr84r8xbf0jzysjal51ivhhh2ppl97yiqjgls";
+  };
+
+  patches = [
+    # Add make install rule
+    (fetchpatch {
+      url = "https://github.com/capnproto/capnproto-java/commit/e96448d3f5737db25e55cd268652712b69db5cc0.diff";
+      sha256 = "0f3vyap1zsxy675900pzg5ngh7bf9icllm1w04q64g8i91sdzljl";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ capnproto ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Cap'n Proto codegen plugin for Java";
+    longDescription = "Only includes compiler plugin, the Java runtime/library that the generated code will link to must be built separately with Maven.";
+    homepage = "https://dwrensha.github.io/capnproto-java/index.html";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bhipple ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cargo-flamegraph/default.nix b/nixpkgs/pkgs/development/tools/cargo-flamegraph/default.nix
new file mode 100644
index 000000000000..e3bbb29164f1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cargo-flamegraph/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, makeWrapper, perf, nix-update-script
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-flamegraph";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "flamegraph-rs";
+    repo = "flamegraph";
+    rev = "v${version}";
+    sha256 = "sha256-Q930PIGncUX2Wz3hA1OQu0TEPMfOu2jMpBPbaAVlUMU=";
+  };
+
+  cargoSha256 = "sha256-ENL1FeIn9HESyp1VhePr4q7BLCc0SS8NAuHKv1crJE8=";
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ makeWrapper ];
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  postFixup = lib.optionalString stdenv.isLinux ''
+    wrapProgram $out/bin/cargo-flamegraph \
+      --set-default PERF ${perf}/bin/perf
+    wrapProgram $out/bin/flamegraph \
+      --set-default PERF ${perf}/bin/perf
+  '';
+
+  passthru.updateScript = nix-update-script {
+    attrPath = pname;
+  };
+
+  meta = with lib; {
+    description = "Easy flamegraphs for Rust projects and everything else, without Perl or pipes <3";
+    homepage = "https://github.com/ferrous-systems/flamegraph";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ killercup ];
+  };
+}
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..2c35e951cda1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cargo-web/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, openssl, perl, pkg-config, rustPlatform
+, CoreServices, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-web";
+  version = "0.6.26";
+
+  src = fetchFromGitHub {
+    owner = "koute";
+    repo = pname;
+    rev = version;
+    sha256 = "1dl5brj5fnmxmwl130v36lvy4j64igdpdvjwmxw3jgg2c6r6b7cd";
+  };
+
+  cargoSha256 = "0q7yxvvngfvn4s889qzp1qnsw2c6qy2ryv9vz9cxhmqidx4dg4va";
+
+  nativeBuildInputs = [ openssl perl pkg-config ];
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices Security ];
+
+  meta = with lib; {
+    description = "A Cargo subcommand for the client-side Web";
+    homepage = "https://github.com/koute/cargo-web";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ kevincox ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cask/default.nix b/nixpkgs/pkgs/development/tools/cask/default.nix
new file mode 100644
index 000000000000..f9e7d215f320
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cask/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, python3, emacs, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "cask";
+
+  inherit (emacs.pkgs.melpaStablePackages.cask) src version;
+
+  doCheck = true;
+
+  nativeBuildInputs = [ emacs ];
+  buildInputs = with emacs.pkgs; [
+    s f dash ansi ecukes servant ert-runner el-mock
+    noflet ert-async shell-split-string git package-build
+  ] ++ [
+    python3
+    bash
+  ];
+
+  strictDeps = true;
+
+  buildPhase = ''
+    runHook preBuild
+    emacs --batch -L . -f batch-byte-compile cask.el cask-cli.el
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    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
+    runHook postInstall
+  '';
+
+  meta = with 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.all;
+    maintainers = [ maintainers.flexw ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/castxml/default.nix b/nixpkgs/pkgs/development/tools/castxml/default.nix
new file mode 100644
index 000000000000..17be341f4499
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/castxml/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, libclang
+, libffi
+, libxml2
+, llvm
+, sphinx
+, zlib
+, withManual ? true
+, withHTML ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "CastXML";
+  version = "0.4.4";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-VtkMjZOcF5OAHkezlupXOpNwqUD1oKHdRbtG2FZBRL4=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    llvm.dev
+  ] ++ lib.optionals (withManual || withHTML) [
+    sphinx
+  ];
+
+  buildInputs = [
+    libclang
+    libffi
+    libxml2
+    zlib
+  ];
+
+  propagatedBuildInputs = [
+    libclang
+  ];
+
+  cmakeFlags = [
+    "-DCLANG_RESOURCE_DIR=${libclang.dev}/"
+    "-DSPHINX_HTML=${if withHTML then "ON" else "OFF"}"
+    "-DSPHINX_MAN=${if withManual then "ON" else "OFF"}"
+  ];
+
+  # 97% tests passed, 97 tests failed out of 2881
+  # mostly because it checks command line and nix append -isystem and all
+  doCheck = false;
+  # -E exclude 4 tests based on names
+  # see https://github.com/CastXML/CastXML/issues/90
+  checkPhase = ''
+    runHook preCheck
+    ctest -E 'cmd.cc-(gnu|msvc)-((c-src-c)|(src-cxx))-cmd'
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/CastXML/CastXML";
+    description = "C-family Abstract Syntax Tree XML Output";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ AndersonTorres ];
+    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..8bebc81ebd9f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cbor-diag/Gemfile.lock
@@ -0,0 +1,21 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    cbor-diag (0.5.6)
+      json
+      neatjson
+      treetop (~> 1)
+    json (2.2.0)
+    neatjson (0.9)
+    polyglot (0.3.5)
+    treetop (1.6.10)
+      polyglot (~> 0.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  cbor-diag
+
+BUNDLED WITH
+   2.1.4
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..118197af2d1f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cbor-diag/default.nix
@@ -0,0 +1,31 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "cbor-diag";
+
+  gemdir = ./.;
+
+  exes = [
+    "cbor2diag.rb"
+    "cbor2json.rb"
+    "cbor2pretty.rb"
+    "cbor2yaml.rb"
+    "diag2cbor.rb"
+    "diag2pretty.rb"
+    "json2cbor.rb"
+    "json2pretty.rb"
+    "pretty2cbor.rb"
+    "pretty2diag.rb"
+    "yaml2cbor.rb"
+  ];
+
+  passthru.updateScript = bundlerUpdateScript "cbor-diag";
+
+  meta = with lib; {
+    description = "CBOR diagnostic utilities";
+    homepage    = "https://github.com/cabo/cbor-diag";
+    license     = with licenses; asl20;
+    maintainers = with maintainers; [ fdns nicknovitski ];
+    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..c3fa8f420693
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cbor-diag/gemset.nix
@@ -0,0 +1,54 @@
+{
+  cbor-diag = {
+    dependencies = ["json" "neatjson" "treetop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pd0k4malg1l7w3ck5glh9w0hrsvknk8rp32vrir74yww1g6yplv";
+      type = "gem";
+    };
+    version = "0.5.6";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sx97bm9by389rbzv8r1f43h06xcz8vwi3h5jv074gvparql7lcx";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  neatjson = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fa2v7b6433j0iqh5iq9r71v7a5xabgjvqwsbl21vcsac7vf3ncw";
+      type = "gem";
+    };
+    version = "0.9";
+  };
+  polyglot = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g31pijhnv7z960sd09lckmw9h8rs3wmc8g4ihmppszxqm99zpv7";
+      type = "gem";
+    };
+    version = "1.6.10";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ccloud-cli/default.nix b/nixpkgs/pkgs/development/tools/ccloud-cli/default.nix
new file mode 100644
index 000000000000..5814ab90e6d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ccloud-cli/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, autoPatchelfHook, fetchurl, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "ccloud-cli";
+  version = "1.39.0";
+
+  # To get the latest version:
+  # curl -L https://cnfl.io/ccloud-cli | sh -s -- -l | grep -v latest | sort -V | tail -n1
+  src = fetchurl (if stdenv.hostPlatform.isDarwin then {
+      url = "https://s3-us-west-2.amazonaws.com/confluent.cloud/ccloud-cli/archives/${version}/ccloud_v${version}_darwin_amd64.tar.gz";
+      sha256 = "0jqpmnx3izl4gv02zpx03z6ayi3cb5if4rnyl1374yaclx44k1gd";
+    } else {
+      url = "https://s3-us-west-2.amazonaws.com/confluent.cloud/ccloud-cli/archives/${version}/ccloud_v${version}_linux_amd64.tar.gz";
+      sha256 = "0936hipcl37w4mzzsnjlz4q1z4j9094i4irigzqwg14gdbs7p11s";
+    });
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+
+  dontStrip = stdenv.isDarwin;
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/doc/ccloud-cli}
+    cp ccloud $out/bin/
+    cp LICENSE $out/share/doc/ccloud-cli/
+    cp -r legal $out/share/doc/ccloud-cli/
+  '';
+
+  meta = with lib; {
+    description = "Confluent Cloud CLI";
+    homepage = "https://docs.confluent.io/current/cloud/cli/index.html";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ kalbasit ];
+
+    # TODO: There's support for i686 systems but I do not have any such system
+    # to build it locally on, it's also unfree so I cannot rely on ofborg to
+    # build it. Get the list of supported system by looking at the list of
+    # files in the S3 bucket:
+    #
+    #   https://s3-us-west-2.amazonaws.com/confluent.cloud?prefix=ccloud-cli/archives/1.25.0/&delimiter=/%27
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+  };
+}
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..796a7743cac5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cddl/Gemfile.lock
@@ -0,0 +1,30 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    abnc (0.1.0)
+    cbor-diag (0.5.6)
+      json
+      neatjson
+      treetop (~> 1)
+    cddl (0.8.9)
+      abnc
+      cbor-diag
+      colorize
+      json
+      regexp-examples
+    colorize (0.8.1)
+    json (2.2.0)
+    neatjson (0.9)
+    polyglot (0.3.5)
+    regexp-examples (1.5.0)
+    treetop (1.6.10)
+      polyglot (~> 0.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  cddl
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/cddl/default.nix b/nixpkgs/pkgs/development/tools/cddl/default.nix
new file mode 100644
index 000000000000..8fdae4b1c441
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cddl/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "cddl";
+
+  gemdir = ./.;
+  exes = [ "cddl" ];
+
+  passthru.updateScript = bundlerUpdateScript "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 nicknovitski ];
+    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..c1f1c64495e3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cddl/gemset.nix
@@ -0,0 +1,95 @@
+{
+  abnc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13nvzrk72nj130fs8bq8q3cfm48939rdzh7l31ncj5c4969hrbig";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  cbor-diag = {
+    dependencies = ["json" "neatjson" "treetop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pd0k4malg1l7w3ck5glh9w0hrsvknk8rp32vrir74yww1g6yplv";
+      type = "gem";
+    };
+    version = "0.5.6";
+  };
+  cddl = {
+    dependencies = ["abnc" "cbor-diag" "colorize" "json" "regexp-examples"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16rmcrsxwx33pj25g1si0dhjdl2brfhy2vlpfwdb6qqkaikmzhpz";
+      type = "gem";
+    };
+    version = "0.8.9";
+  };
+  colorize = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "133rqj85n400qk6g3dhf2bmfws34mak1wqihvh3bgy9jhajw580b";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sx97bm9by389rbzv8r1f43h06xcz8vwi3h5jv074gvparql7lcx";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  neatjson = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fa2v7b6433j0iqh5iq9r71v7a5xabgjvqwsbl21vcsac7vf3ncw";
+      type = "gem";
+    };
+    version = "0.9";
+  };
+  polyglot = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  regexp-examples = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08s5d327i9dw5yjwv9vfss3qb7lwasjyc75wvh7vrdi5v4vm1y2k";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g31pijhnv7z960sd09lckmw9h8rs3wmc8g4ihmppszxqm99zpv7";
+      type = "gem";
+    };
+    version = "1.6.10";
+  };
+}
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..7eefc4fc92d0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cdecl/default.nix
@@ -0,0 +1,26 @@
+{lib, stdenv, fetchurl, bison, flex, readline, ncurses, gnused}:
+
+stdenv.mkDerivation rec {
+  pname = "cdecl";
+  version = "2.5";
+  src = fetchurl {
+    url = "https://www.cdecl.org/files/${pname}-blocks-${version}.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 = [bison flex readline ncurses];
+
+  meta = {
+    description = "Translator English -- C/C++ declarations";
+    license = lib.licenses.publicDomain;
+    maintainers = with lib.maintainers; [joelteon];
+    platforms = 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..a28124828f90
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/check/default.nix
@@ -0,0 +1,30 @@
+{ buildGoPackage
+, lib
+, fetchFromGitLab
+}:
+
+buildGoPackage rec {
+  pname = "check-unstable";
+  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/checkmake/default.nix b/nixpkgs/pkgs/development/tools/checkmake/default.nix
new file mode 100644
index 000000000000..78d193a12925
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/checkmake/default.nix
@@ -0,0 +1,49 @@
+{ buildGoPackage, fetchFromGitHub, git, pandoc, lib }:
+
+buildGoPackage rec {
+  pname = "checkmake";
+  version = "0.1.0-2020.11.30";
+
+  goPackagePath = "github.com/mrtazz/checkmake";
+
+  src = fetchFromGitHub {
+    owner = "mrtazz";
+    repo = pname;
+    rev = "575315c9924da41534a9d0ce91c3f0d19bb53ffc";
+    sha256 = "121rsl9mh3wwadgf8ggi2xnb050pak6ma68b2sw5j8clmxbrqli3";
+  };
+
+  nativeBuildInputs = [ pandoc ];
+
+  preBuild =
+    let
+      buildVars = {
+        version = version;
+        buildTime = "N/A";
+        builder = "nix";
+        goversion = "$(go version | egrep -o 'go[0-9]+[.][^ ]*')";
+      };
+      buildVarsFlags = lib.concatStringsSep " " (lib.mapAttrsToList (k: v: "-X main.${k}=${v}") buildVars);
+    in
+    ''
+      buildFlagsArray+=("-ldflags=${buildVarsFlags}")
+    '';
+
+  postInstall = ''
+    pandoc -s -t man -o checkmake.1 go/src/${goPackagePath}/man/man1/checkmake.1.md
+    mkdir -p $out/share/man/man1
+    mv checkmake.1 $out/share/man/man1/checkmake.1
+  '';
+
+  meta = with lib; {
+    description = "Experimental tool for linting and checking Makefiles";
+    homepage = "https://github.com/mrtazz/checkmake";
+    license = licenses.mit;
+    maintainers = with maintainers; [ vidbina ];
+    platforms = platforms.linux;
+    longDescription = ''
+      checkmake is an experimental tool for linting and checking
+      Makefiles. It may not do what you want it to.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/checkmate/default.nix b/nixpkgs/pkgs/development/tools/checkmate/default.nix
new file mode 100644
index 000000000000..bcb115e409b7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/checkmate/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "checkmate";
+  version = "0.5.8";
+
+  src = fetchFromGitHub {
+    owner = "adedayo";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-nzhzeXy70UQ1HP3/PCBnUPhrjg7CnKURMCH0iJ099E0=";
+  };
+
+  vendorSha256 = "sha256-uQRAVbLnzY+E3glMJ3AvmbtmwD2LkuqCh2mUpqZbmaA=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Pluggable code security analysis tool";
+    homepage = "https://github.com/adedayo/checkmate";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/chefdk/Gemfile b/nixpkgs/pkgs/development/tools/chefdk/Gemfile
new file mode 100644
index 000000000000..0717cd32232b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/chefdk/Gemfile
@@ -0,0 +1,17 @@
+source 'https://rubygems.org'
+
+gem 'chef-dk', '4.13.3'
+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-ng'
+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..1f71a4a71324
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/chefdk/Gemfile.lock
@@ -0,0 +1,770 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (5.2.4.5)
+      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)
+    app_conf (0.4.2)
+    ast (2.4.2)
+    aws-eventstream (1.1.0)
+    aws-partitions (1.426.0)
+    aws-sdk-apigateway (1.59.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-apigatewayv2 (1.31.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-applicationautoscaling (1.49.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-athena (1.35.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-autoscaling (1.53.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-batch (1.43.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-budgets (1.37.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudformation (1.47.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudfront (1.48.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudhsm (1.28.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudhsmv2 (1.32.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudtrail (1.33.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudwatch (1.49.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudwatchevents (1.40.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudwatchlogs (1.39.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-codecommit (1.41.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-codedeploy (1.38.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-codepipeline (1.40.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cognitoidentity (1.29.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cognitoidentityprovider (1.48.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-configservice (1.56.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-core (3.112.0)
+      aws-eventstream (~> 1, >= 1.0.2)
+      aws-partitions (~> 1, >= 1.239.0)
+      aws-sigv4 (~> 1.1)
+      jmespath (~> 1.0)
+    aws-sdk-costandusagereportservice (1.29.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-databasemigrationservice (1.50.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-dynamodb (1.59.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ec2 (1.224.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ecr (1.41.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ecs (1.74.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-efs (1.37.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-eks (1.47.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticache (1.53.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticbeanstalk (1.41.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticloadbalancing (1.30.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticloadbalancingv2 (1.59.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticsearchservice (1.48.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-firehose (1.36.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-glue (1.82.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-guardduty (1.44.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-iam (1.47.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kafka (1.34.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kinesis (1.31.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kms (1.42.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-lambda (1.59.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-organizations (1.55.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ram (1.22.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-rds (1.112.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-redshift (1.54.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-route53 (1.46.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-route53domains (1.29.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-route53resolver (1.23.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.88.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-secretsmanager (1.43.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-securityhub (1.40.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-servicecatalog (1.57.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ses (1.37.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-shield (1.34.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-sms (1.28.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-sns (1.38.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-sqs (1.36.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ssm (1.104.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-states (1.37.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-transfer (1.29.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sigv4 (1.2.2)
+      aws-eventstream (~> 1, >= 1.0.2)
+    azure_graph_rbac (0.17.2)
+      ms_rest_azure (~> 0.12.0)
+    azure_mgmt_key_vault (0.17.7)
+      ms_rest_azure (~> 0.12.0)
+    azure_mgmt_resources (0.18.1)
+      ms_rest_azure (~> 0.12.0)
+    azure_mgmt_security (0.19.0)
+      ms_rest_azure (~> 0.12.0)
+    azure_mgmt_storage (0.22.0)
+      ms_rest_azure (~> 0.12.0)
+    bcrypt_pbkdf (1.1.0)
+    berkshelf (7.1.0)
+      chef (>= 15.7.32)
+      chef-config
+      cleanroom (~> 1.0)
+      concurrent-ruby (~> 1.0)
+      minitar (>= 0.6)
+      mixlib-archive (>= 0.4, < 2.0)
+      mixlib-config (>= 2.2.5)
+      mixlib-shellout (>= 2.0, < 4.0)
+      octokit (~> 4.0)
+      retryable (>= 2.0, < 4.0)
+      solve (~> 4.0)
+      thor (>= 0.20)
+    builder (3.2.4)
+    chef (15.15.0)
+      addressable
+      bcrypt_pbkdf (~> 1.0)
+      bundler (>= 1.10)
+      chef-config (= 15.15.0)
+      chef-utils (= 15.15.0)
+      chef-zero (>= 14.0.11)
+      diff-lcs (~> 1.2, >= 1.2.4)
+      ed25519 (~> 1.2)
+      erubis (~> 2.7)
+      ffi (~> 1.9, >= 1.9.25)
+      ffi-libarchive (~> 1.0, >= 1.0.3)
+      ffi-yajl (~> 2.2)
+      highline (>= 1.6.9, < 2)
+      iniparse (~> 1.4)
+      license-acceptance (~> 1.0, >= 1.0.5)
+      mixlib-archive (>= 0.4, < 2.0)
+      mixlib-authentication (>= 2.1, < 4)
+      mixlib-cli (>= 2.1.1, < 3.0)
+      mixlib-log (>= 2.0.3, < 4.0)
+      mixlib-shellout (>= 3.0.3, < 4.0)
+      net-sftp (>= 2.1.2, < 4.0)
+      net-ssh (>= 4.2, < 7)
+      net-ssh-multi (~> 1.2, >= 1.2.1)
+      ohai (~> 15.0)
+      plist (~> 3.2)
+      proxifier (~> 1.0)
+      syslog-logger (~> 1.6)
+      train-core (~> 3.2, >= 3.2.28)
+      train-winrm (>= 0.2.5)
+      tty-screen (~> 0.6)
+      uuidtools (~> 2.1.5)
+    chef-cli (3.1.1)
+      addressable (>= 2.3.5, < 2.8)
+      chef (>= 15.0)
+      cookbook-omnifetch (~> 0.5)
+      diff-lcs (>= 1.0, < 1.4)
+      ffi-yajl (>= 1.0, < 3.0)
+      license-acceptance (>= 1.0.11, < 3)
+      minitar (~> 0.6)
+      mixlib-cli (>= 1.7, < 3.0)
+      mixlib-shellout (>= 2.0, < 4.0)
+      pastel (~> 0.7)
+      solve (> 2.0, < 5.0)
+    chef-config (15.15.0)
+      addressable
+      chef-utils (= 15.15.0)
+      fuzzyurl
+      mixlib-config (>= 2.2.12, < 4.0)
+      mixlib-shellout (>= 2.0, < 4.0)
+      tomlrb (~> 1.2)
+    chef-dk (4.13.3)
+      addressable (>= 2.3.5, < 2.6)
+      chef (~> 15.0)
+      cookbook-omnifetch (~> 0.5)
+      diff-lcs (~> 1.0)
+      ffi-yajl (>= 1.0, < 3.0)
+      license-acceptance (~> 1.0, >= 1.0.11)
+      minitar (~> 0.6)
+      mixlib-cli (>= 1.7, < 3.0)
+      mixlib-shellout (>= 2.0, < 4.0)
+      paint (~> 1.0)
+      solve (> 2.0, < 5.0)
+    chef-provisioning (2.7.6)
+      cheffish (>= 4.0, < 15.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-telemetry (1.0.14)
+      chef-config
+      concurrent-ruby (~> 1.0)
+      ffi-yajl (~> 2.2)
+    chef-utils (15.15.0)
+    chef-vault (4.1.0)
+    chef-zero (14.0.17)
+      ffi-yajl (~> 2.2)
+      hashie (>= 2.0, < 4.0)
+      mixlib-log (>= 2.0, < 4.0)
+      rack (~> 2.0, >= 2.0.6)
+      uuidtools (~> 2.1)
+    cheffish (14.0.13)
+      chef-zero (~> 14.0)
+      net-ssh
+    chefspec (9.2.1)
+      chef (>= 14)
+      chef-cli
+      fauxhai-ng (>= 7.5)
+      rspec (~> 3.0)
+    cleanroom (1.0.0)
+    coderay (1.1.3)
+    concurrent-ruby (1.1.8)
+    cookbook-omnifetch (0.11.1)
+      mixlib-archive (>= 0.4, < 2.0)
+    declarative (0.0.20)
+    declarative-option (0.1.0)
+    diff-lcs (1.3)
+    diffy (3.4.0)
+    docker-api (2.0.0)
+      excon (>= 0.47.0)
+      multi_json
+    domain_name (0.5.20190701)
+      unf (>= 0.0.5, < 1.0.0)
+    ed25519 (1.2.4)
+    erubi (1.10.0)
+    erubis (2.7.0)
+    excon (0.79.0)
+    faraday (1.3.0)
+      faraday-net_http (~> 1.0)
+      multipart-post (>= 1.2, < 3)
+      ruby2_keywords
+    faraday-cookie_jar (0.0.7)
+      faraday (>= 0.8.0)
+      http-cookie (~> 1.0.0)
+    faraday-net_http (1.0.1)
+    faraday_middleware (1.0.0)
+      faraday (~> 1.0)
+    fauxhai-ng (8.7.0)
+      net-ssh
+    ffi (1.14.2)
+    ffi-libarchive (1.0.17)
+      ffi (~> 1.0)
+    ffi-yajl (2.3.4)
+      libyajl2 (~> 1.2)
+    foodcritic (16.3.0)
+      erubis
+      ffi-yajl (~> 2.0)
+      nokogiri (>= 1.5, < 2.0)
+      rake
+      rufus-lru (~> 1.0)
+      treetop (~> 1.4)
+    fuzzyurl (0.9.0)
+    git (1.8.1)
+      rchardet (~> 1.8)
+    google-api-client (0.52.0)
+      addressable (~> 2.5, >= 2.5.1)
+      googleauth (~> 0.9)
+      httpclient (>= 2.8.1, < 3.0)
+      mini_mime (~> 1.0)
+      representable (~> 3.0)
+      retriable (>= 2.0, < 4.0)
+      rexml
+      signet (~> 0.12)
+    googleauth (0.14.0)
+      faraday (>= 0.17.3, < 2.0)
+      jwt (>= 1.4, < 3.0)
+      memoist (~> 0.16)
+      multi_json (~> 1.11)
+      os (>= 0.9, < 2.0)
+      signet (~> 0.14)
+    gssapi (1.3.1)
+      ffi (>= 1.0.1)
+    gyoku (1.3.1)
+      builder (>= 2.1.2)
+    hashie (3.6.0)
+    highline (1.7.10)
+    http-cookie (1.0.3)
+      domain_name (~> 0.5)
+    httpclient (2.8.3)
+    i18n (1.8.8)
+      concurrent-ruby (~> 1.0)
+    inifile (3.0.0)
+    iniparse (1.5.0)
+    inspec (4.26.4)
+      faraday_middleware (>= 0.12.2, < 1.1)
+      inspec-core (= 4.26.4)
+      train (~> 3.0)
+      train-aws (~> 0.1)
+      train-habitat (~> 0.1)
+      train-winrm (~> 0.2)
+    inspec-core (4.26.4)
+      addressable (~> 2.4)
+      chef-telemetry (~> 1.0)
+      faraday (>= 0.9.0, < 1.4)
+      faraday_middleware (~> 1.0)
+      hashie (>= 3.4, < 5.0)
+      license-acceptance (>= 0.2.13, < 3.0)
+      method_source (>= 0.8, < 2.0)
+      mixlib-log (~> 3.0)
+      multipart-post (~> 2.0)
+      parallel (~> 1.9)
+      parslet (>= 1.5, < 2.0)
+      pry (~> 0.13)
+      rspec (>= 3.9, < 3.11)
+      rspec-its (~> 1.2)
+      rubyzip (>= 1.2.2, < 3.0)
+      semverse (~> 3.0)
+      sslshake (~> 1.2)
+      thor (>= 0.20, < 2.0)
+      tomlrb (>= 1.2, < 2.1)
+      train-core (~> 3.0)
+      tty-prompt (~> 0.17)
+      tty-table (~> 0.10)
+    ipaddress (0.8.3)
+    jmespath (1.4.0)
+    json (2.5.1)
+    jwt (2.2.2)
+    kitchen-inspec (2.3.0)
+      hashie (>= 3.4, <= 5.0)
+      inspec (>= 2.2.64, < 5.0)
+      test-kitchen (>= 2.7, < 3)
+    kitchen-vagrant (1.8.0)
+      test-kitchen (>= 1.4, < 3)
+    knife-spork (1.7.3)
+      app_conf (>= 0.4.0)
+      chef (>= 11.0.0)
+      diffy (>= 3.0.1)
+      git (>= 1.2.5)
+    libyajl2 (1.2.0)
+    license-acceptance (1.0.19)
+      pastel (~> 0.7)
+      tomlrb (~> 1.2)
+      tty-box (~> 0.3)
+      tty-prompt (~> 0.18)
+    little-plugger (1.1.4)
+    logging (2.3.0)
+      little-plugger (~> 1.1)
+      multi_json (~> 1.14)
+    memoist (0.16.2)
+    method_source (1.0.0)
+    mini_mime (1.0.2)
+    mini_portile2 (2.5.0)
+    minitar (0.9)
+    minitest (5.14.3)
+    mixlib-archive (1.1.4)
+      mixlib-log
+    mixlib-authentication (3.0.7)
+    mixlib-cli (2.1.8)
+    mixlib-config (3.0.9)
+      tomlrb
+    mixlib-install (3.12.5)
+      mixlib-shellout
+      mixlib-versioning
+      thor
+    mixlib-log (3.0.9)
+    mixlib-shellout (3.2.2)
+      chef-utils
+    mixlib-versioning (1.2.12)
+    molinillo (0.7.0)
+    ms_rest (0.7.6)
+      concurrent-ruby (~> 1.0)
+      faraday (>= 0.9, < 2.0.0)
+      timeliness (~> 0.3.10)
+    ms_rest_azure (0.12.0)
+      concurrent-ruby (~> 1.0)
+      faraday (>= 0.9, < 2.0.0)
+      faraday-cookie_jar (~> 0.0.6)
+      ms_rest (~> 0.7.6)
+    multi_json (1.15.0)
+    multipart-post (2.1.1)
+    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 (2.0.0)
+      net-ssh (>= 4.0.0)
+    net-ssh-multi (1.2.1)
+      net-ssh (>= 2.6.5)
+      net-ssh-gateway (>= 1.2.0)
+    nokogiri (1.11.1)
+      mini_portile2 (~> 2.5.0)
+      racc (~> 1.4)
+    nori (2.6.0)
+    octokit (4.20.0)
+      faraday (>= 0.9)
+      sawyer (~> 0.8.0, >= 0.5.3)
+    ohai (15.12.0)
+      chef-config (>= 12.8, < 16)
+      ffi (~> 1.9)
+      ffi-yajl (~> 2.2)
+      ipaddress
+      mixlib-cli (>= 1.7.0)
+      mixlib-config (>= 2.0, < 4.0)
+      mixlib-log (>= 2.0.1, < 4.0)
+      mixlib-shellout (>= 2.0, < 4.0)
+      plist (~> 3.1)
+      systemu (~> 2.6.4)
+      wmi-lite (~> 1.0)
+    os (1.1.1)
+    paint (1.0.1)
+    parallel (1.20.1)
+    parser (3.0.0.0)
+      ast (~> 2.4.1)
+    parslet (1.8.2)
+    pastel (0.8.0)
+      tty-color (~> 0.5)
+    plist (3.6.0)
+    polyglot (0.3.5)
+    proxifier (1.0.3)
+    pry (0.14.0)
+      coderay (~> 1.1)
+      method_source (~> 1.0)
+    public_suffix (3.1.1)
+    racc (1.5.2)
+    rack (2.2.3)
+    rainbow (3.0.0)
+    rake (13.0.3)
+    rchardet (1.8.0)
+    regexp_parser (2.0.3)
+    representable (3.0.4)
+      declarative (< 0.1.0)
+      declarative-option (< 0.2.0)
+      uber (< 0.2.0)
+    retriable (3.1.2)
+    retryable (3.0.5)
+    rexml (3.2.4)
+    rspec (3.10.0)
+      rspec-core (~> 3.10.0)
+      rspec-expectations (~> 3.10.0)
+      rspec-mocks (~> 3.10.0)
+    rspec-core (3.10.1)
+      rspec-support (~> 3.10.0)
+    rspec-expectations (3.10.1)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.10.0)
+    rspec-its (1.3.0)
+      rspec-core (>= 3.0.0)
+      rspec-expectations (>= 3.0.0)
+    rspec-mocks (3.10.2)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.10.0)
+    rspec-support (3.10.2)
+    rubocop (1.9.1)
+      parallel (~> 1.10)
+      parser (>= 3.0.0.0)
+      rainbow (>= 2.2.2, < 4.0)
+      regexp_parser (>= 1.8, < 3.0)
+      rexml
+      rubocop-ast (>= 1.2.0, < 2.0)
+      ruby-progressbar (~> 1.7)
+      unicode-display_width (>= 1.4.0, < 3.0)
+    rubocop-ast (1.4.1)
+      parser (>= 2.7.1.5)
+    ruby-progressbar (1.11.0)
+    ruby2_keywords (0.0.4)
+    rubyntlm (0.6.3)
+    rubyzip (2.3.0)
+    rufus-lru (1.1.0)
+    sawyer (0.8.2)
+      addressable (>= 2.3.5)
+      faraday (> 0.8, < 2.0)
+    semverse (3.0.0)
+    signet (0.14.1)
+      addressable (~> 2.3)
+      faraday (>= 0.17.3, < 2.0)
+      jwt (>= 1.5, < 3.0)
+      multi_json (~> 1.10)
+    solve (4.0.4)
+      molinillo (~> 0.6)
+      semverse (>= 1.1, < 4.0)
+    sslshake (1.3.1)
+    strings (0.2.0)
+      strings-ansi (~> 0.2)
+      unicode-display_width (~> 1.5)
+      unicode_utils (~> 1.4)
+    strings-ansi (0.2.0)
+    syslog-logger (1.6.8)
+    systemu (2.6.5)
+    test-kitchen (2.10.0)
+      bcrypt_pbkdf (~> 1.0)
+      ed25519 (~> 1.2)
+      license-acceptance (>= 1.0.11, < 3.0)
+      mixlib-install (~> 3.6)
+      mixlib-shellout (>= 1.2, < 4.0)
+      net-scp (>= 1.1, < 4.0)
+      net-ssh (>= 2.9, < 7.0)
+      net-ssh-gateway (>= 1.2, < 3.0)
+      thor (>= 0.19, < 2.0)
+      winrm (~> 2.0)
+      winrm-elevated (~> 1.0)
+      winrm-fs (~> 1.1)
+    thor (1.1.0)
+    thread_safe (0.3.6)
+    timeliness (0.3.10)
+    tomlrb (1.3.0)
+    train (3.4.9)
+      activesupport (>= 5.2.4.3, < 6.0.0)
+      azure_graph_rbac (~> 0.16)
+      azure_mgmt_key_vault (~> 0.17)
+      azure_mgmt_resources (~> 0.15)
+      azure_mgmt_security (~> 0.18)
+      azure_mgmt_storage (~> 0.18)
+      docker-api (>= 1.26, < 3.0)
+      google-api-client (>= 0.23.9, <= 0.52.0)
+      googleauth (>= 0.6.6, <= 0.14.0)
+      inifile (~> 3.0)
+      train-core (= 3.4.9)
+      train-winrm (~> 0.2)
+    train-aws (0.1.35)
+      aws-sdk-apigateway (~> 1.0)
+      aws-sdk-apigatewayv2 (~> 1.0)
+      aws-sdk-applicationautoscaling (>= 1.46, < 1.50)
+      aws-sdk-athena (~> 1.0)
+      aws-sdk-autoscaling (>= 1.22, < 1.54)
+      aws-sdk-batch (>= 1.36, < 1.44)
+      aws-sdk-budgets (~> 1.0)
+      aws-sdk-cloudformation (~> 1.0)
+      aws-sdk-cloudfront (~> 1.0)
+      aws-sdk-cloudhsm (~> 1.0)
+      aws-sdk-cloudhsmv2 (~> 1.0)
+      aws-sdk-cloudtrail (~> 1.8)
+      aws-sdk-cloudwatch (~> 1.13)
+      aws-sdk-cloudwatchevents (>= 1.36, < 1.41)
+      aws-sdk-cloudwatchlogs (~> 1.13)
+      aws-sdk-codecommit (~> 1.0)
+      aws-sdk-codedeploy (~> 1.0)
+      aws-sdk-codepipeline (~> 1.0)
+      aws-sdk-cognitoidentity (>= 1.26, < 1.30)
+      aws-sdk-cognitoidentityprovider (>= 1.46, < 1.49)
+      aws-sdk-configservice (~> 1.21)
+      aws-sdk-core (~> 3.0)
+      aws-sdk-costandusagereportservice (~> 1.6)
+      aws-sdk-databasemigrationservice (>= 1.42, < 1.51)
+      aws-sdk-dynamodb (~> 1.31)
+      aws-sdk-ec2 (~> 1.70)
+      aws-sdk-ecr (~> 1.18)
+      aws-sdk-ecs (~> 1.30)
+      aws-sdk-efs (~> 1.0)
+      aws-sdk-eks (~> 1.9)
+      aws-sdk-elasticache (~> 1.0)
+      aws-sdk-elasticbeanstalk (~> 1.0)
+      aws-sdk-elasticloadbalancing (~> 1.8)
+      aws-sdk-elasticloadbalancingv2 (~> 1.0)
+      aws-sdk-elasticsearchservice (~> 1.0)
+      aws-sdk-firehose (~> 1.0)
+      aws-sdk-glue (>= 1.71, < 1.83)
+      aws-sdk-guardduty (~> 1.31)
+      aws-sdk-iam (~> 1.13)
+      aws-sdk-kafka (~> 1.0)
+      aws-sdk-kinesis (~> 1.0)
+      aws-sdk-kms (~> 1.13)
+      aws-sdk-lambda (~> 1.0)
+      aws-sdk-organizations (>= 1.17, < 1.56)
+      aws-sdk-ram (>= 1.21, < 1.23)
+      aws-sdk-rds (~> 1.43)
+      aws-sdk-redshift (~> 1.0)
+      aws-sdk-route53 (~> 1.0)
+      aws-sdk-route53domains (~> 1.0)
+      aws-sdk-route53resolver (~> 1.0)
+      aws-sdk-s3 (~> 1.30)
+      aws-sdk-secretsmanager (>= 1.42, < 1.44)
+      aws-sdk-securityhub (~> 1.0)
+      aws-sdk-servicecatalog (>= 1.48, < 1.58)
+      aws-sdk-ses (~> 1.0)
+      aws-sdk-shield (~> 1.30)
+      aws-sdk-sms (~> 1.0)
+      aws-sdk-sns (~> 1.9)
+      aws-sdk-sqs (~> 1.10)
+      aws-sdk-ssm (~> 1.0)
+      aws-sdk-states (>= 1.35, < 1.38)
+      aws-sdk-transfer (>= 1.26, < 1.30)
+    train-core (3.4.9)
+      addressable (~> 2.5)
+      ffi (!= 1.13.0)
+      json (>= 1.8, < 3.0)
+      mixlib-shellout (>= 2.0, < 4.0)
+      net-scp (>= 1.2, < 4.0)
+      net-ssh (>= 2.9, < 7.0)
+    train-habitat (0.2.22)
+    train-winrm (0.2.12)
+      winrm (>= 2.3.6, < 3.0)
+      winrm-elevated (~> 1.2.2)
+      winrm-fs (~> 1.0)
+    treetop (1.6.11)
+      polyglot (~> 0.3)
+    tty-box (0.7.0)
+      pastel (~> 0.8)
+      strings (~> 0.2.0)
+      tty-cursor (~> 0.7)
+    tty-color (0.6.0)
+    tty-cursor (0.7.1)
+    tty-prompt (0.23.0)
+      pastel (~> 0.8)
+      tty-reader (~> 0.8)
+    tty-reader (0.9.0)
+      tty-cursor (~> 0.7)
+      tty-screen (~> 0.8)
+      wisper (~> 2.0)
+    tty-screen (0.8.1)
+    tty-table (0.12.0)
+      pastel (~> 0.8)
+      strings (~> 0.2.0)
+      tty-screen (~> 0.8)
+    tzinfo (1.2.9)
+      thread_safe (~> 0.1)
+    uber (0.1.0)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.7.7)
+    unicode-display_width (1.7.0)
+    unicode_utils (1.4.0)
+    uuidtools (2.1.5)
+    winrm (2.3.6)
+      builder (>= 2.1.2)
+      erubi (~> 1.8)
+      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.3)
+    winrm-elevated (1.2.3)
+      erubi (~> 1.8)
+      winrm (~> 2.0)
+      winrm-fs (~> 1.0)
+    winrm-fs (1.3.5)
+      erubi (~> 1.8)
+      logging (>= 1.6.1, < 3.0)
+      rubyzip (~> 2.0)
+      winrm (~> 2.0)
+    wisper (2.0.1)
+    wmi-lite (1.0.5)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  berkshelf
+  chef-dk (= 4.13.3)
+  chef-provisioning
+  chef-vault
+  chefspec
+  fauxhai-ng
+  foodcritic
+  inspec
+  kitchen-inspec
+  kitchen-vagrant
+  knife-spork
+  ohai
+  pry
+  rubocop
+  test-kitchen
+
+BUNDLED WITH
+   2.1.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..93af8815fb3a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/chefdk/default.nix
@@ -0,0 +1,23 @@
+{ lib, bundlerEnv, bundlerUpdateScript, ruby, perl, autoconf }:
+
+bundlerEnv {
+  name = "chef-dk-4.13.3";
+  # Do not change this to pname & version until underlying issues with Ruby
+  # packaging are resolved ; see https://github.com/NixOS/nixpkgs/issues/70171
+
+  inherit ruby;
+  gemdir = ./.;
+
+  buildInputs = [ perl autoconf ];
+
+  passthru.updateScript = bundlerUpdateScript "chefdk";
+
+  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 nicknovitski ];
+    platforms   = platforms.unix;
+    badPlatforms = [ "aarch64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/chefdk/gemset.nix b/nixpkgs/pkgs/development/tools/chefdk/gemset.nix
new file mode 100644
index 000000000000..14c81742cd2a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/chefdk/gemset.nix
@@ -0,0 +1,2529 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fp4gr3g25qgl01y3pd88wfh4pjc5zj3bz4v7rkxxwaxdjg7a9cc";
+      type = "gem";
+    };
+    version = "5.2.4.5";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk";
+      type = "gem";
+    };
+    version = "2.5.2";
+  };
+  app_conf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yqwhr7d9i0cgavqkkq0b4pfqpn213dbhj5ayygr293wplm0jh57";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  ast = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04nc8x27hlzlrr5c2gn7mar4vdr0apw5xg22wp6m8dx3wqr04a0y";
+      type = "gem";
+    };
+    version = "2.4.2";
+  };
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r0pn66yqrdkrfdin7qdim0yj2x75miyg4wp6mijckhzhrjb7cv5";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nrqbbzykj9ckri3ci1wsksy8rhz13rigm3aznxy08gqvzv7bcy9";
+      type = "gem";
+    };
+    version = "1.426.0";
+  };
+  aws-sdk-apigateway = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15vwm6a18v1xqfpn2ipx1h5wqwd5yipgp624p4pkchcdqacb7gvm";
+      type = "gem";
+    };
+    version = "1.59.0";
+  };
+  aws-sdk-apigatewayv2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "171v0xng5h6hk1nqrivv49rpz1f4jhj2lhq3pxk5izx3q1lf7rc7";
+      type = "gem";
+    };
+    version = "1.31.0";
+  };
+  aws-sdk-applicationautoscaling = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01zldlqn573bmlpg7qm562cy9miyrirzknagjbnzs4iwjnm4rgn4";
+      type = "gem";
+    };
+    version = "1.49.0";
+  };
+  aws-sdk-athena = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lmbchjn30rpk311q2z5g8j96g5mi8hajc3fbzh3nam7wj4hmdbn";
+      type = "gem";
+    };
+    version = "1.35.0";
+  };
+  aws-sdk-autoscaling = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vkfybjdmxn7hwsywfgkcr8mms88l4v6kwj29c8qr2k7ds4l4bsn";
+      type = "gem";
+    };
+    version = "1.53.0";
+  };
+  aws-sdk-batch = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14q0b84qa5mc24nw1fqns822wkg1gvlwvwbia1m7bzzmj98maikw";
+      type = "gem";
+    };
+    version = "1.43.0";
+  };
+  aws-sdk-budgets = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lm7m09fp5jlranzv1hfc3xv8fn6bmw2g3kwjsj6r094qi3nyp42";
+      type = "gem";
+    };
+    version = "1.37.0";
+  };
+  aws-sdk-cloudformation = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09lcq8gpi4x7xvwy8njmbcbbgyrq6xsfbyc7hwj3m4dps9f116gw";
+      type = "gem";
+    };
+    version = "1.47.0";
+  };
+  aws-sdk-cloudfront = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w70d8wv5cb8p5wpyq828fjrccz0xxbvg5sk66bmwq0zjcxnvpb6";
+      type = "gem";
+    };
+    version = "1.48.0";
+  };
+  aws-sdk-cloudhsm = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a4imw0rahd6bh4clcwxkcvl4lf8pmyba1sjlc1hx37jv641wlqf";
+      type = "gem";
+    };
+    version = "1.28.0";
+  };
+  aws-sdk-cloudhsmv2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13kdq0xnbgrvi9f9jqrig453bc5mf7by3cjcdd8jsv8aay0gqads";
+      type = "gem";
+    };
+    version = "1.32.0";
+  };
+  aws-sdk-cloudtrail = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "083nld91s8klfr2p0mwrdlx4lgiig9kx0cikiqrifd30lbja51wg";
+      type = "gem";
+    };
+    version = "1.33.0";
+  };
+  aws-sdk-cloudwatch = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vsb01nw85sk3zsdyw5ix0yw3n81xjhj4h0431qm60mdg9akgbs4";
+      type = "gem";
+    };
+    version = "1.49.0";
+  };
+  aws-sdk-cloudwatchevents = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14hhy8zbyn5x2660pg5aq02lni69clx3y7rkvzqrldcy0482863y";
+      type = "gem";
+    };
+    version = "1.40.0";
+  };
+  aws-sdk-cloudwatchlogs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0aravrxjnp886kaag037z45xiyfr75gz0p4psjq9x3qj6gzsjn8y";
+      type = "gem";
+    };
+    version = "1.39.0";
+  };
+  aws-sdk-codecommit = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cb1bqlf3kh8akll1xybrn314ngk62jqhpli99kdjq27hxir5jq2";
+      type = "gem";
+    };
+    version = "1.41.0";
+  };
+  aws-sdk-codedeploy = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "117rv0hx77kyhz9zm1fqbxdbk3lhyxcbibwn27nyafch6sl1x2j4";
+      type = "gem";
+    };
+    version = "1.38.0";
+  };
+  aws-sdk-codepipeline = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xdkc3xmff901bjfsyg454dn27gfr6nzvgkia0kngdzgq6x4xb45";
+      type = "gem";
+    };
+    version = "1.40.0";
+  };
+  aws-sdk-cognitoidentity = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "122i3g320ccaqg541kzb0pawiz61zyphvbwnkv5rlqpwspca1m3b";
+      type = "gem";
+    };
+    version = "1.29.0";
+  };
+  aws-sdk-cognitoidentityprovider = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m09dxwyw01vh9rksz8dwdx36vsr8f7p5qmjmvfazjapzv3q6qmn";
+      type = "gem";
+    };
+    version = "1.48.0";
+  };
+  aws-sdk-configservice = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1msdg1gpq9y9maf2fdljcp2vbydbjqfk07ff9j532bvikax0qmfy";
+      type = "gem";
+    };
+    version = "1.56.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15lynby6r91p9hh5h92pg4jr8xgnjr52px5ax0p0wncdw4vz0skp";
+      type = "gem";
+    };
+    version = "3.112.0";
+  };
+  aws-sdk-costandusagereportservice = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dzbh8xf8j466gwrawmprwclslvd8sqlzzzxpzyxv4y9m09bhypk";
+      type = "gem";
+    };
+    version = "1.29.0";
+  };
+  aws-sdk-databasemigrationservice = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vd4a5z1q282xx7717f542yavb6x13fli64rhwnc143xij4izgpn";
+      type = "gem";
+    };
+    version = "1.50.0";
+  };
+  aws-sdk-dynamodb = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19k3iznglnwwgqd95i5zmim41c98l8ydf6ih9am50gs0n6bky41q";
+      type = "gem";
+    };
+    version = "1.59.0";
+  };
+  aws-sdk-ec2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lg8vh124viba77b0qhi5j8xx8b4wxdiyycl4kaawmddwhr33zx9";
+      type = "gem";
+    };
+    version = "1.224.0";
+  };
+  aws-sdk-ecr = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0di8s9dpyzal5n2qpx8l3jnbkm72h6kz759l04kxfapgzd5ppwhv";
+      type = "gem";
+    };
+    version = "1.41.0";
+  };
+  aws-sdk-ecs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qilim7dm5hc4knhvz9090hzbmlrd24m5fywj9kr60fvhgnm0wf0";
+      type = "gem";
+    };
+    version = "1.74.0";
+  };
+  aws-sdk-efs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03bf0g1nky772r4xz3w6nvpf09wf1096qifd0i8hgzp7cwirbmby";
+      type = "gem";
+    };
+    version = "1.37.0";
+  };
+  aws-sdk-eks = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nj666bl877n61h6s570ad9mcvjq4m2s6yink218zslfp10y03v4";
+      type = "gem";
+    };
+    version = "1.47.0";
+  };
+  aws-sdk-elasticache = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kgpn2n1ap943q5nzxrl95v6g7fyff6bw5i4mhcw6g97gvv7p675";
+      type = "gem";
+    };
+    version = "1.53.0";
+  };
+  aws-sdk-elasticbeanstalk = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a9k9srp1q5qhlcwna7zyvviimri4gi9smlqshbvcfvy2lys5w2z";
+      type = "gem";
+    };
+    version = "1.41.0";
+  };
+  aws-sdk-elasticloadbalancing = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n6ssl3hqqm658k5ig667bgy457rs8gynl8vvin4xwknxws186di";
+      type = "gem";
+    };
+    version = "1.30.0";
+  };
+  aws-sdk-elasticloadbalancingv2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cqb2bncvqqqcqks7d6lrjb7pl06fcjizdfjpr44a7v6sjyx3bcr";
+      type = "gem";
+    };
+    version = "1.59.0";
+  };
+  aws-sdk-elasticsearchservice = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1379lp7jqigp03zv25fgbx4bwacypjj38qbki648398r161f4bzy";
+      type = "gem";
+    };
+    version = "1.48.0";
+  };
+  aws-sdk-firehose = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ji75vqfprnkjsy6gdk9qci6wd9kwm7h7lycpx7jsw0fbv6hjx0p";
+      type = "gem";
+    };
+    version = "1.36.0";
+  };
+  aws-sdk-glue = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "026hka71fnzmqrn5yyb50pz1wa44irqncsk6kcgb476px4zxqwmd";
+      type = "gem";
+    };
+    version = "1.82.0";
+  };
+  aws-sdk-guardduty = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n963y20rafh51xanx0bff7jqbjcgg3wj5hs4js8h9sax48k97q9";
+      type = "gem";
+    };
+    version = "1.44.0";
+  };
+  aws-sdk-iam = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16152qidkisakl2iqvghrjnccq279pahb953q5a4q0ipk5imw2c1";
+      type = "gem";
+    };
+    version = "1.47.0";
+  };
+  aws-sdk-kafka = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "182g1ya4bhxw90zb0jfqlb5s46r8k3mvl2dczir5jamjp2h1n24y";
+      type = "gem";
+    };
+    version = "1.34.0";
+  };
+  aws-sdk-kinesis = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wsnn4303q7501xp10gfr8s15cazm4a0xy8knz5b8pmaw93x0g4b";
+      type = "gem";
+    };
+    version = "1.31.0";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00wgf83cdy6z77b2y0ld0aqiidfyldi71hx0z8b73gxjdlbwpq1i";
+      type = "gem";
+    };
+    version = "1.42.0";
+  };
+  aws-sdk-lambda = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15fvdqp8k5w7wjgc7f5h9syd8v14h8pzklg5ldb49n5jsr0i3n73";
+      type = "gem";
+    };
+    version = "1.59.0";
+  };
+  aws-sdk-organizations = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00i8kbcx1vdch1g6pznvm0hg0hsz2kfd5vpdlfarbilv6zyh9mp7";
+      type = "gem";
+    };
+    version = "1.55.0";
+  };
+  aws-sdk-ram = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04n9x3nrxakx1zys0cc6vmkyqlqa83h6abdfyqaah1icxp585zjb";
+      type = "gem";
+    };
+    version = "1.22.0";
+  };
+  aws-sdk-rds = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jnmk7z4ys13vv2i1r6pvpiblgaqlpvjhcslcnqyqlmjh2ydwjxk";
+      type = "gem";
+    };
+    version = "1.112.0";
+  };
+  aws-sdk-redshift = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f54ig5vyc2cvipsv5d62n5xd6a1i9myjgayf6x6slkvnzk5xk4g";
+      type = "gem";
+    };
+    version = "1.54.0";
+  };
+  aws-sdk-route53 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jxm6knx9rp5m3an93c187ds8zla4chl7zdvwnml2imna3adk4z7";
+      type = "gem";
+    };
+    version = "1.46.0";
+  };
+  aws-sdk-route53domains = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k3b37q9mhfnf4mzbhhhgx0v6y82ivq6v01g8fvdfb5n6235j0yg";
+      type = "gem";
+    };
+    version = "1.29.0";
+  };
+  aws-sdk-route53resolver = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qyb2n40v52n0xjqncaflb6cl1y0p7szlx1bzxpcnm4g5nfdcf3l";
+      type = "gem";
+    };
+    version = "1.23.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "029iqr52fxxz8d6jb2g4k76i7nnjyspvjdlx52xah25zzhp3bx7v";
+      type = "gem";
+    };
+    version = "1.88.0";
+  };
+  aws-sdk-secretsmanager = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pv5idvap742r4mfwgi01l0sd7skz3m9iy28piy236f6xjiiqsw3";
+      type = "gem";
+    };
+    version = "1.43.0";
+  };
+  aws-sdk-securityhub = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j6wl0v5p19h3x1fphyq8db5appig7w3gsxnj6mmlm77smlkwjlq";
+      type = "gem";
+    };
+    version = "1.40.0";
+  };
+  aws-sdk-servicecatalog = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1awf0gcywzylqsdypx2lpib5jiy02fd4iz5q19q9qkpvxw7zj9cd";
+      type = "gem";
+    };
+    version = "1.57.0";
+  };
+  aws-sdk-ses = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1j45jykqll5s8y71bp4723mvcxbrihp4rhlhq1rvcyyr4y0706yy";
+      type = "gem";
+    };
+    version = "1.37.0";
+  };
+  aws-sdk-shield = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0416mrby897fnhc3iwb698m0gyih7pfgmx35h5f618i8my53alin";
+      type = "gem";
+    };
+    version = "1.34.0";
+  };
+  aws-sdk-sms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0121bx79galz99x2wdksmzyibdy6l18k2i2nzc8lsmrgkdz22c03";
+      type = "gem";
+    };
+    version = "1.28.0";
+  };
+  aws-sdk-sns = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cqri14igfmcxlapbagg0nmy79zzg29awzybv51gl76m3mljbafb";
+      type = "gem";
+    };
+    version = "1.38.0";
+  };
+  aws-sdk-sqs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07qg8awkqpdwf2r7y54183jfcffwjl1mdd98vmgsxv94617bnh4q";
+      type = "gem";
+    };
+    version = "1.36.0";
+  };
+  aws-sdk-ssm = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1svhxfjmvb6m8h7lm5cr7mmz6zngrhknrrkmwilnrq0lzg1wfp1r";
+      type = "gem";
+    };
+    version = "1.104.0";
+  };
+  aws-sdk-states = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04pdrsijckiz9fyzyvdndwci004a4fswv8mq5jm53bzmybwhndz2";
+      type = "gem";
+    };
+    version = "1.37.0";
+  };
+  aws-sdk-transfer = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ivbkfw7j83c7nagdhzdmcmwxn6ym50ak0jfkq1rdc1ppyir31dp";
+      type = "gem";
+    };
+    version = "1.29.0";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ll9382c1x2hp750cilh01h1cycgyhdr4cmmgx23k94hyyb8chv5";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  azure_graph_rbac = {
+    dependencies = ["ms_rest_azure"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mmx8jp85xa13j3asa9xnfi6wa8a9wwlp0hz0nj70fi3ydmcpdag";
+      type = "gem";
+    };
+    version = "0.17.2";
+  };
+  azure_mgmt_key_vault = {
+    dependencies = ["ms_rest_azure"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f4fai5l3453yirrwajds0jgah60gvawffx53a0jyv3b93ag88mz";
+      type = "gem";
+    };
+    version = "0.17.7";
+  };
+  azure_mgmt_resources = {
+    dependencies = ["ms_rest_azure"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hb9010cxrmm23v4dfrsf9wgvr53qkcd6397c4azg3wc65a6i1vc";
+      type = "gem";
+    };
+    version = "0.18.1";
+  };
+  azure_mgmt_security = {
+    dependencies = ["ms_rest_azure"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11h2dyz4awzidvfj41h7k2q7mcqqcgzvm95fxpfxz609pbvck0g2";
+      type = "gem";
+    };
+    version = "0.19.0";
+  };
+  azure_mgmt_storage = {
+    dependencies = ["ms_rest_azure"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r8klsq3x7s4nn42h9w1kbqblrxnj7z7cpa8bxvc3xwv0vvql7m0";
+      type = "gem";
+    };
+    version = "0.22.0";
+  };
+  bcrypt_pbkdf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ndamfaivnkhc6hy0yqyk2gkwr6f3bz6216lh74hsiiyk3axz445";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  berkshelf = {
+    dependencies = ["chef" "chef-config" "cleanroom" "concurrent-ruby" "minitar" "mixlib-archive" "mixlib-config" "mixlib-shellout" "octokit" "retryable" "solve" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mkakim23w7b38c8lw81wxqw68q6g7rlvxx82lq6bpp1hmmni64n";
+      type = "gem";
+    };
+    version = "7.1.0";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  chef = {
+    dependencies = ["addressable" "bcrypt_pbkdf" "chef-config" "chef-utils" "chef-zero" "diff-lcs" "ed25519" "erubis" "ffi" "ffi-libarchive" "ffi-yajl" "highline" "iniparse" "license-acceptance" "mixlib-archive" "mixlib-authentication" "mixlib-cli" "mixlib-log" "mixlib-shellout" "net-sftp" "net-ssh" "net-ssh-multi" "ohai" "plist" "proxifier" "syslog-logger" "train-core" "train-winrm" "tty-screen" "uuidtools"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "068jzw97g40wbpzn51vcvwdp012202rkmjfafxwhx31wxjzhwy0n";
+      type = "gem";
+    };
+    version = "15.15.0";
+  };
+  chef-cli = {
+    dependencies = ["addressable" "chef" "cookbook-omnifetch" "diff-lcs" "ffi-yajl" "license-acceptance" "minitar" "mixlib-cli" "mixlib-shellout" "pastel" "solve"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nw73p8wg67qkzx07v21fwiqljb0yndjm10z56li72d6b1hbw0sb";
+      type = "gem";
+    };
+    version = "3.1.1";
+  };
+  chef-config = {
+    dependencies = ["addressable" "chef-utils" "fuzzyurl" "mixlib-config" "mixlib-shellout" "tomlrb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ji166i5n7cxn69amsfxsvy3b7bf5ksgxxg985w5jfl1gp5bihfl";
+      type = "gem";
+    };
+    version = "15.15.0";
+  };
+  chef-dk = {
+    dependencies = ["addressable" "chef" "cookbook-omnifetch" "diff-lcs" "ffi-yajl" "license-acceptance" "minitar" "mixlib-cli" "mixlib-shellout" "paint" "solve"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zqznvry08pyiv8820b962fzvabzwbsmmwlyvk4ayjr2wshyi6g2";
+      type = "gem";
+    };
+    version = "4.13.3";
+  };
+  chef-provisioning = {
+    dependencies = ["cheffish" "inifile" "mixlib-install" "net-scp" "net-ssh" "net-ssh-gateway" "winrm" "winrm-elevated" "winrm-fs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16l3hahc5b57bi61kssdzqywh8ydkbmj0mgdj4lvj0v68hnjc6f1";
+      type = "gem";
+    };
+    version = "2.7.6";
+  };
+  chef-telemetry = {
+    dependencies = ["chef-config" "concurrent-ruby" "ffi-yajl"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hnmqr6vkgsbnzdzcc6j6svnms14irrcd70wk8qg3p98cy359rm5";
+      type = "gem";
+    };
+    version = "1.0.14";
+  };
+  chef-utils = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1j8rhqc6mj8iay755rl5yaf0rqs54gwcygib1s8g7dxl3vqcpwxa";
+      type = "gem";
+    };
+    version = "15.15.0";
+  };
+  chef-vault = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rpcgzawdgzvk60fw9s40i5alc7b1rc2phkgm89dckfmklfh6794";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  chef-zero = {
+    dependencies = ["ffi-yajl" "hashie" "mixlib-log" "rack" "uuidtools"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pjvg3djnzkwkjj5pmgk9dc14q5bdd7na8js1d4gr8x6b6z58my3";
+      type = "gem";
+    };
+    version = "14.0.17";
+  };
+  cheffish = {
+    dependencies = ["chef-zero" "net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0axv7mkx0s4nqa85ns1xg70s9sq3h6fg86nda13b6q9k7gbifkvl";
+      type = "gem";
+    };
+    version = "14.0.13";
+  };
+  chefspec = {
+    dependencies = ["chef" "chef-cli" "fauxhai-ng" "rspec"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15sz88xxh48phq1w3rsivzasg4r36dhqnpqna5cfi120vk28ylb2";
+      type = "gem";
+    };
+    version = "9.2.1";
+  };
+  cleanroom = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r6qa4b248jasv34vh7rw91pm61gzf8g5dvwx2gxrshjs7vbhfml";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  coderay = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mr23wq0szj52xnj0zcn1k0c7j4v79wlwbijkpfcscqww3l6jlg3";
+      type = "gem";
+    };
+    version = "1.1.8";
+  };
+  cookbook-omnifetch = {
+    dependencies = ["mixlib-archive"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qw8ayyflx222igmrmp1jpgfcfhpnc4myaxv9lk3ckd5l6n3w7qh";
+      type = "gem";
+    };
+    version = "0.11.1";
+  };
+  declarative = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yczgnqrbls7shrg63y88g7wand2yp9h6sf56c9bdcksn5nds8c0";
+      type = "gem";
+    };
+    version = "0.0.20";
+  };
+  declarative-option = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g4ibxq566f1frnhdymzi9hxxcm4g2gw4n21mpjk2mhwym4q6l0p";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  diff-lcs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza";
+      type = "gem";
+    };
+    version = "1.3";
+  };
+  diffy = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nrg7kpgz6cn1gv2saj2fa5sfiykamvd7vn9lw2v625k7pjwf31l";
+      type = "gem";
+    };
+    version = "3.4.0";
+  };
+  docker-api = {
+    dependencies = ["excon" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09lkc50nl3158za0fk8kpd05zlzfxiajnf6zrxpamw1nzdw89ac9";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
+      type = "gem";
+    };
+    version = "0.5.20190701";
+  };
+  ed25519 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f5kr8za7hvla38fc0n9jiv55iq62k5bzclsa5kdb14l3r4w6qnw";
+      type = "gem";
+    };
+    version = "1.2.4";
+  };
+  erubi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09l8lz3j00m898li0yfsnb6ihc63rdvhw3k5xczna5zrjk104f2l";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  erubis = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1759s0rz6qgsw86dds1z4jzb3fvizqsk11j5q6z7lc5n404w6i23";
+      type = "gem";
+    };
+    version = "0.79.0";
+  };
+  faraday = {
+    dependencies = ["faraday-net_http" "multipart-post" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hmssd8pj4n7yq4kz834ylkla8ryyvhaap6q9nzymp93m1xq21kz";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  faraday-cookie_jar = {
+    dependencies = ["faraday" "http-cookie"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00hligx26w9wdnpgsrf0qdnqld4rdccy8ym6027h5m735mpvxjzk";
+      type = "gem";
+    };
+    version = "0.0.7";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jik2kgfinwnfi6fpp512vlvs0mlggign3gkbpkg5fw1jr9his0r";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  fauxhai-ng = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pxzmsp31lxlkq1p0205j2s9kkjqs5a9zy2qpqabbmhny0d9ri8k";
+      type = "gem";
+    };
+    version = "8.7.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15hgiy09i8ywjihyzyvjvk42ivi3kmy6dm21s5sgg9j7y3h3zkkx";
+      type = "gem";
+    };
+    version = "1.14.2";
+  };
+  ffi-libarchive = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wmbwg6hirxr85c3skdq2na8xwg4ky880qbs1z1adb9aizcjbdkx";
+      type = "gem";
+    };
+    version = "1.0.17";
+  };
+  ffi-yajl = {
+    dependencies = ["libyajl2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pfmn0gprc3c15baxa9rx64pqllk64m60f5vg4gp0icpafkp0jx5";
+      type = "gem";
+    };
+    version = "2.3.4";
+  };
+  foodcritic = {
+    dependencies = ["erubis" "ffi-yajl" "nokogiri" "rake" "rufus-lru" "treetop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gnp8lr37cv87adr3568kh7p55vwdqp01f2hwjxlvqkwkwk3fvn4";
+      type = "gem";
+    };
+    version = "16.3.0";
+  };
+  fuzzyurl = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03qchs33vfwbsv5awxg3acfmlcrf5xbhnbrc83fdpamwya0glbjl";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  git = {
+    dependencies = ["rchardet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vdcv93s33d9914a9nxrn2y2qv15xk7jx94007cmalp159l08cnl";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  google-api-client = {
+    dependencies = ["addressable" "googleauth" "httpclient" "mini_mime" "representable" "retriable" "rexml" "signet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q1lsyyyfvff7727sr01j8qx6b30qpx6h0bna5s0bfz853fhl33b";
+      type = "gem";
+    };
+    version = "0.52.0";
+  };
+  googleauth = {
+    dependencies = ["faraday" "jwt" "memoist" "multi_json" "os" "signet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cm60nbmwzf83fzy06f3iyn5a6sw91siw8x9bdvpwwmjsmivana6";
+      type = "gem";
+    };
+    version = "0.14.0";
+  };
+  gssapi = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qdfhj12aq8v0y961v4xv96a1y2z80h3xhvzrs9vsfgf884g6765";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  gyoku = {
+    dependencies = ["builder"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wn0sl14396g5lyvp8sjmcb1hw9rbyi89gxng91r7w4df4jwiidh";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  hashie = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13bdzfp25c8k51ayzxqkbzag3wj5gc1jd8h7d985nsq6pn57g5xh";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01ib7jp85xjc4gh4jg0wyzllm46hwv8p0w1m4c75pbgi41fps50y";
+      type = "gem";
+    };
+    version = "1.7.10";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k7q3pwm0l1qvx6sc3d4dxmdxqx2pc63lbfjwv0k0higq94rinvs";
+      type = "gem";
+    };
+    version = "1.8.8";
+  };
+  inifile = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c5zmk7ia63yw5l2k14qhfdydxwi1sah1ppjdiicr4zcalvfn0xi";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  iniparse = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wb1qy4i2xrrd92dc34pi7q7ibrjpapzk9y465v0n9caiplnb89n";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  inspec = {
+    dependencies = ["faraday_middleware" "inspec-core" "train" "train-aws" "train-habitat" "train-winrm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jg818r56vzzh971ckzbknv8b70da73njr3x2y7xd6jwv5pjs93m";
+      type = "gem";
+    };
+    version = "4.26.4";
+  };
+  inspec-core = {
+    dependencies = ["addressable" "chef-telemetry" "faraday" "faraday_middleware" "hashie" "license-acceptance" "method_source" "mixlib-log" "multipart-post" "parallel" "parslet" "pry" "rspec" "rspec-its" "rubyzip" "semverse" "sslshake" "thor" "tomlrb" "train-core" "tty-prompt" "tty-table"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nrd4ny5cyah76pchr5xyi2m9rx0lkyk9vd2sp68rjp0x1x5y3p8";
+      type = "gem";
+    };
+    version = "4.26.4";
+  };
+  ipaddress = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x86s0s11w202j6ka40jbmywkrx8fhq8xiy8mwvnkhllj57hqr45";
+      type = "gem";
+    };
+    version = "0.8.3";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4wac0dcd1jf6kc57891glih9w57552zgqswgy74d1xhgnk0ngf";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lrirj0gw420kw71bjjlqkqhqbrplla61gbv1jzgsz6bv90qr3ci";
+      type = "gem";
+    };
+    version = "2.5.1";
+  };
+  jwt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14ynyq1q483spj20ffl4xayfqx1a8qr761mqjfxczf8lwlap392n";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  kitchen-inspec = {
+    dependencies = ["hashie" "inspec" "test-kitchen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fx27vkc29kx59qmkrkl53sbyigny3rkqlfp836rwlxf1wfbbdlv";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  kitchen-vagrant = {
+    dependencies = ["test-kitchen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pix3n9hbr9s736n4jh8dn71ccsm5xcqvx9clwilzhr3r89qfiwg";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  knife-spork = {
+    dependencies = ["app_conf" "chef" "diffy" "git"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ddgmv3j75m908ldykrgn9rdjdw09yakmxav7569f18lhxxfs9l0";
+      type = "gem";
+    };
+    version = "1.7.3";
+  };
+  libyajl2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n5j0p8dxf9xzb9n4bkdr8w0a8gg3jzrn9indri3n0fv90gcs5qi";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  license-acceptance = {
+    dependencies = ["pastel" "tomlrb" "tty-box" "tty-prompt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03n3jpzivqxajvf3507c2z9vq2mrriqqc1yg3g0pgzacb3d38k2d";
+      type = "gem";
+    };
+    version = "1.0.19";
+  };
+  little-plugger = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  logging = {
+    dependencies = ["little-plugger" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pkmhcxi8lp74bq5gz9lxrvaiv5w0745kk7s4bw2b1x07qqri0n9";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  memoist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i9wpzix3sjhf6d9zw60dm4371iq8kyz7ckh2qapan2vyaim6b55";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  method_source = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  mini_mime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1axm0rxyx3ss93wbmfkm78a6x03l8y4qy60rhkkiq0aza0vwq3ha";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hdbpmamx8js53yk3h8cqy12kgv6ca06k0c9n3pxh6b6cjfs19x7";
+      type = "gem";
+    };
+    version = "2.5.0";
+  };
+  minitar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "126mq86x67d1p63acrfka4zx0cx2r0vc93884jggxnrmmnzbxh13";
+      type = "gem";
+    };
+    version = "0.9";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ipjhdw8ds6q9h7bs3iw28bjrwkwp215hr4l3xf6215fsl80ky5j";
+      type = "gem";
+    };
+    version = "5.14.3";
+  };
+  mixlib-archive = {
+    dependencies = ["mixlib-log"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dj52irvnp1riz52kg6fddmdvl9nxsrxk3vyidr7lfzhw5sj8vdk";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  mixlib-authentication = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wfyn645wnb79rl3ys83171ymv56k8zks9qvxh29vj8nicyrzr23";
+      type = "gem";
+    };
+    version = "3.0.7";
+  };
+  mixlib-cli = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ydxlfgd7nnj3rp1y70k4yk96xz5cywldjii2zbnw3sq9pippwp6";
+      type = "gem";
+    };
+    version = "2.1.8";
+  };
+  mixlib-config = {
+    dependencies = ["tomlrb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1askip583sfnz25gywd508l3vj5wnvx9vp7gm1sfnixm7amssrwq";
+      type = "gem";
+    };
+    version = "3.0.9";
+  };
+  mixlib-install = {
+    dependencies = ["mixlib-shellout" "mixlib-versioning" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p11qf6b86dzl3q5gqi63myz484dicmn90d8v8jjb1dm51gqpajq";
+      type = "gem";
+    };
+    version = "3.12.5";
+  };
+  mixlib-log = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n5dm5iz90ijvjn59jfm8gb8hgsvbj0f1kpzbl38b02z0z4a4v7x";
+      type = "gem";
+    };
+    version = "3.0.9";
+  };
+  mixlib-shellout = {
+    dependencies = ["chef-utils"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y1z0phkdhpbsn8vz7a86nhkr7ra619j86z5p75amz61kfpw42z9";
+      type = "gem";
+    };
+    version = "3.2.2";
+  };
+  mixlib-versioning = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cqyrcgw2xwxmjhwa31ipmphkg5aa6x4fd5c5j9y7hifw32pb1vr";
+      type = "gem";
+    };
+    version = "1.2.12";
+  };
+  molinillo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17kvf6fijn6k886dhj89h0x39qh90c47asa2k16s913fcgn3a1n3";
+      type = "gem";
+    };
+    version = "0.7.0";
+  };
+  ms_rest = {
+    dependencies = ["concurrent-ruby" "faraday" "timeliness"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jiha1bda5knpjqjymwik6i41n69gb0phcrgvmgc5icl4mcisai7";
+      type = "gem";
+    };
+    version = "0.7.6";
+  };
+  ms_rest_azure = {
+    dependencies = ["concurrent-ruby" "faraday" "faraday-cookie_jar" "ms_rest"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06i37b84r2q206kfm5vsi9s1qiiy09091vhvc5pzb7320h0hc1ih";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  net-scp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b0jqrcsp4bbi4n4mzyf70cp2ysyp6x07j8k8cqgxnvb4i3a134j";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  net-sftp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04674g4n6mryjajlcd82af8g8k95la4b1bj712dh71hw1c9vhw1y";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07c4v97zl1daabmri9zlbzs6yvkl56z1q14bw74d53jdj0c17nhx";
+      type = "gem";
+    };
+    version = "4.2.0";
+  };
+  net-ssh-gateway = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l3v761y32aw0n8lm0c0m42lr4ay8cq6q4sc5yc68b9fwlfvb70x";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  net-ssh-multi = {
+    dependencies = ["net-ssh" "net-ssh-gateway"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13kxz9b6kgr9mcds44zpavbndxyi6pvyzyda6bhk1kfmb5c10m71";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ajwkqr28hwqbyl1l3czx4a34c88acxywyqp8cjyy0zgsd6sbhj2";
+      type = "gem";
+    };
+    version = "1.11.1";
+  };
+  nori = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  octokit = {
+    dependencies = ["faraday" "sawyer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fl517ld5vj0llyshp3f9kb7xyl9iqy28cbz3k999fkbwcxzhlyq";
+      type = "gem";
+    };
+    version = "4.20.0";
+  };
+  ohai = {
+    dependencies = ["chef-config" "ffi" "ffi-yajl" "ipaddress" "mixlib-cli" "mixlib-config" "mixlib-log" "mixlib-shellout" "plist" "systemu" "wmi-lite"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qw3mz8f9hpzfchwqa1nix7fcvy34k5n7lln91b8gsbx2l6aycs6";
+      type = "gem";
+    };
+    version = "15.12.0";
+  };
+  os = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12fli64wz5j9868gpzv5wqsingk1jk457qyqksv9ksmq9b0zpc9x";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  paint = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z1fqyyc2jiv6yabv467h652cxr2lmxl5gqqg7p14y28kdqf0nhj";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  parallel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0055br0mibnqz0j8wvy20zry548dhkakws681bhj3ycb972awkzd";
+      type = "gem";
+    };
+    version = "1.20.1";
+  };
+  parser = {
+    dependencies = ["ast"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jixakyzmy0j5c1rb0fjrrdhgnyryvrr6vgcybs14jfw09akv5ml";
+      type = "gem";
+    };
+    version = "3.0.0.0";
+  };
+  parslet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12nrzfwjphjlakb9pmpj70hgjwgzvnr8i1zfzddifgyd44vspl88";
+      type = "gem";
+    };
+    version = "1.8.2";
+  };
+  pastel = {
+    dependencies = ["tty-color"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xash2gj08dfjvq4hy6l1z22s5v30fhizwgs10d6nviggpxsj7a8";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  plist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1whhr897z6z6av85x2cipyjk46bwh6s4wx6nbrcd3iifnzvbqs7l";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  polyglot = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  proxifier = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1abzlg39cfji1nx3i8kmb5k3anr2rd392yg2icms24wkqz9g9zj0";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  pry = {
+    dependencies = ["coderay" "method_source"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1shq3vfdg7c9l1wppl8slridl95wmwvnngqhga6j2571nnv50piv";
+      type = "gem";
+    };
+    version = "0.14.0";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g9ds2ffzljl6jjmkjffwxc1z6lh5nkqqmhhkxjk71q5ggv0rkpm";
+      type = "gem";
+    };
+    version = "3.1.1";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i5vs0dph9i5jn8dfc6aqd6njcafmb20rwqngrf759c9cvmyff16";
+      type = "gem";
+    };
+    version = "2.2.3";
+  };
+  rainbow = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iik52mf9ky4cgs38fp2m8r6skdkq1yz23vh18lk95fhbcxb6a67";
+      type = "gem";
+    };
+    version = "13.0.3";
+  };
+  rchardet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1isj1b3ywgg2m1vdlnr41lpvpm3dbyarf1lla4dfibfmad9csfk9";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  regexp_parser = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zm86k9q8m5jkcnpb1f93wsvc57saldfj8czxkx1aw031i95inip";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+  representable = {
+    dependencies = ["declarative" "declarative-option" "uber"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qm9rgi1j5a6nv726ka4mmixivlxfsg91h8rpp72wwd4vqbkkm07";
+      type = "gem";
+    };
+    version = "3.0.4";
+  };
+  retriable = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q48hqws2dy1vws9schc0kmina40gy7sn5qsndpsfqdslh65snha";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  retryable = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pymcs9fqcnz6n6h033yfp0agg6y2s258crzig05kkxs6rldvwy9";
+      type = "gem";
+    };
+    version = "3.0.5";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mkvkcw9fhpaizrhca0pdgjcrbns48rlz4g6lavl5gjjq3rk2sq3";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dwai7jnwmdmd7ajbi2q0k0lx1dh88knv5wl7c34wjmf94yv8w5q";
+      type = "gem";
+    };
+    version = "3.10.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wwnfhxxvrlxlk1a3yxlb82k2f9lm0yn0598x7lk8fksaz4vv6mc";
+      type = "gem";
+    };
+    version = "3.10.1";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sz9bj4ri28adsklnh257pnbq4r5ayziw02qf67wry0kvzazbb17";
+      type = "gem";
+    };
+    version = "3.10.1";
+  };
+  rspec-its = {
+    dependencies = ["rspec-core" "rspec-expectations"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zafd70gxly5i0s00nky14sj2n92dnj3xpj83ysl3c2wx0119ad";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  rspec-mocks = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d13g6kipqqc9lmwz5b244pdwc97z15vcbnbq6n9rlf32bipdz4k";
+      type = "gem";
+    };
+    version = "3.10.2";
+  };
+  rspec-support = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15j52parvb8cgvl6s0pbxi2ywxrv6x0764g222kz5flz0s4mycbl";
+      type = "gem";
+    };
+    version = "3.10.2";
+  };
+  rubocop = {
+    dependencies = ["parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06npybjypxsrz09z8ivxqfcwzpbgif6z3hwpp0ls8znqlgp3m922";
+      type = "gem";
+    };
+    version = "1.9.1";
+  };
+  rubocop-ast = {
+    dependencies = ["parser"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gkf1p8yal38nlvdb39qaiy0gr85fxfr09j5dxh8qvrgpncpnk78";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  ruby-progressbar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02nmaw7yx9kl7rbaan5pl8x5nn0y4j5954mzrkzi9i3dhsrps4nc";
+      type = "gem";
+    };
+    version = "1.11.0";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15wfcqxyfgka05v2a7kpg64x57gl1y4xzvnc9lh60bqx5sf1iqrs";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  rubyntlm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b8hczk8hysv53ncsqzx4q6kma5gy5lqc7s5yx8h64x3vdb18cjv";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0590m2pr9i209pp5z4mx0nb1961ishdiqb28995hw1nln1d1b5ji";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  rufus-lru = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sp7ymz054md75fnn2hx5d2axmhrh0abbn8c2p759j4g4lxn11ip";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  sawyer = {
+    dependencies = ["addressable" "faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yrdchs3psh583rjapkv33mljdivggqn99wkydkjdckcjn43j3cz";
+      type = "gem";
+    };
+    version = "0.8.2";
+  };
+  semverse = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qs9jk2kkbpy4gfrh90g3wsbi7i5n4di21haii3pn2bn6dyq5p18";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  signet = {
+    dependencies = ["addressable" "faraday" "jwt" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zmrsnrrj5j3bp9fmaa74cvlkpdwspv8gv5vpz1lclhirkiqz1xv";
+      type = "gem";
+    };
+    version = "0.14.1";
+  };
+  solve = {
+    dependencies = ["molinillo" "semverse"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "059lrsf40rl5kclp1w8pb0fzz5sv8aikg073cwcvn5mndk14ayky";
+      type = "gem";
+    };
+    version = "4.0.4";
+  };
+  sslshake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r3ifksx8a05yqhv7nc4cwan8bwmxgq5kyv7q7hy2h9lv5zcjs8h";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  strings = {
+    dependencies = ["strings-ansi" "unicode-display_width" "unicode_utils"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xgw0zmwansvmk8dnxgd83pvrj4f5y8j72bpzp409hwd6xy1hy7m";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  strings-ansi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "120wa6yjc63b84lprglc52f40hx3fx920n4dmv14rad41rv2s9lh";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  syslog-logger = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14y20phq1khdla4z9wvf98k7j3x6n0rjgs4f7vb0xlf7h53g6hbm";
+      type = "gem";
+    };
+    version = "1.6.8";
+  };
+  systemu = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gmkbakhfci5wnmbfx5i54f25j9zsvbw858yg3jjhfs5n4ad1xq1";
+      type = "gem";
+    };
+    version = "2.6.5";
+  };
+  test-kitchen = {
+    dependencies = ["bcrypt_pbkdf" "ed25519" "license-acceptance" "mixlib-install" "mixlib-shellout" "net-scp" "net-ssh" "net-ssh-gateway" "thor" "winrm" "winrm-elevated" "winrm-fs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s5sj6x2dscd3wci7ns1m3jwfp1b7h8535q44ggdsz60gp63p974";
+      type = "gem";
+    };
+    version = "2.10.0";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18yhlvmfya23cs3pvhr1qy38y41b6mhr5q9vwv5lrgk16wmf3jna";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  thread_safe = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  timeliness = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gvp9b7yn4pykn794cibylc9ys1lw7fzv7djx1433icxw4y26my3";
+      type = "gem";
+    };
+    version = "0.3.10";
+  };
+  tomlrb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00x5y9h4fbvrv4xrjk4cqlkm4vq8gv73ax4alj3ac2x77zsnnrk8";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  train = {
+    dependencies = ["activesupport" "azure_graph_rbac" "azure_mgmt_key_vault" "azure_mgmt_resources" "azure_mgmt_security" "azure_mgmt_storage" "docker-api" "google-api-client" "googleauth" "inifile" "train-core" "train-winrm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09nflqvdgzxfncr8qki0jhnarfg36mii0h6hi2cd71q49613m6gk";
+      type = "gem";
+    };
+    version = "3.4.9";
+  };
+  train-aws = {
+    dependencies = ["aws-sdk-apigateway" "aws-sdk-apigatewayv2" "aws-sdk-applicationautoscaling" "aws-sdk-athena" "aws-sdk-autoscaling" "aws-sdk-batch" "aws-sdk-budgets" "aws-sdk-cloudformation" "aws-sdk-cloudfront" "aws-sdk-cloudhsm" "aws-sdk-cloudhsmv2" "aws-sdk-cloudtrail" "aws-sdk-cloudwatch" "aws-sdk-cloudwatchevents" "aws-sdk-cloudwatchlogs" "aws-sdk-codecommit" "aws-sdk-codedeploy" "aws-sdk-codepipeline" "aws-sdk-cognitoidentity" "aws-sdk-cognitoidentityprovider" "aws-sdk-configservice" "aws-sdk-core" "aws-sdk-costandusagereportservice" "aws-sdk-databasemigrationservice" "aws-sdk-dynamodb" "aws-sdk-ec2" "aws-sdk-ecr" "aws-sdk-ecs" "aws-sdk-efs" "aws-sdk-eks" "aws-sdk-elasticache" "aws-sdk-elasticbeanstalk" "aws-sdk-elasticloadbalancing" "aws-sdk-elasticloadbalancingv2" "aws-sdk-elasticsearchservice" "aws-sdk-firehose" "aws-sdk-glue" "aws-sdk-guardduty" "aws-sdk-iam" "aws-sdk-kafka" "aws-sdk-kinesis" "aws-sdk-kms" "aws-sdk-lambda" "aws-sdk-organizations" "aws-sdk-ram" "aws-sdk-rds" "aws-sdk-redshift" "aws-sdk-route53" "aws-sdk-route53domains" "aws-sdk-route53resolver" "aws-sdk-s3" "aws-sdk-secretsmanager" "aws-sdk-securityhub" "aws-sdk-servicecatalog" "aws-sdk-ses" "aws-sdk-shield" "aws-sdk-sms" "aws-sdk-sns" "aws-sdk-sqs" "aws-sdk-ssm" "aws-sdk-states" "aws-sdk-transfer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "014cbgkzkw1rf7652h1xqshb9crr6pn2yhlv1z41ndxlkmmdx4fg";
+      type = "gem";
+    };
+    version = "0.1.35";
+  };
+  train-core = {
+    dependencies = ["addressable" "ffi" "json" "mixlib-shellout" "net-scp" "net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pbfbmi9l5hxr1zly1bc72fk8a6by4d19wdap8q3mi3rlflqzbfp";
+      type = "gem";
+    };
+    version = "3.4.9";
+  };
+  train-habitat = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qdi2q5djzfl6x3fv2vrvybjdvrnx53nfh4vzrcl2h7nrf801n6v";
+      type = "gem";
+    };
+    version = "0.2.22";
+  };
+  train-winrm = {
+    dependencies = ["winrm" "winrm-elevated" "winrm-fs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nin3qfkh173yjcihxaz0sbnskds9n1n0ciphc7y70647vpsqgrh";
+      type = "gem";
+    };
+    version = "0.2.12";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0697qz1akblf8r3wi0s2dsjh468hfsd57fb0mrp93z35y2ni6bhh";
+      type = "gem";
+    };
+    version = "1.6.11";
+  };
+  tty-box = {
+    dependencies = ["pastel" "strings" "tty-cursor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12yzhl3s165fl8pkfln6mi6mfy3vg7p63r3dvcgqfhyzq6h57x0p";
+      type = "gem";
+    };
+    version = "0.7.0";
+  };
+  tty-color = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0aik4kmhwwrmkysha7qibi2nyzb4c8kp42bd5vxnf8sf7b53g73g";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  tty-cursor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j5zw041jgkmn605ya1zc151bxgxl6v192v2i26qhxx7ws2l2lvr";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  tty-prompt = {
+    dependencies = ["pastel" "tty-reader"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rhvwpl5wk51njrh3avm09c8pwl2z5iwc0l67h40gq3r7ix2fjk2";
+      type = "gem";
+    };
+    version = "0.23.0";
+  };
+  tty-reader = {
+    dependencies = ["tty-cursor" "tty-screen" "wisper"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cf2k7w7d84hshg4kzrjvk9pkyc2g1m3nx2n1rpmdcf0hp4p4af6";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  tty-screen = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18jr6s1cg8yb26wzkqa6874q0z93rq0y5aw092kdqazk71y6a235";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  tty-table = {
+    dependencies = ["pastel" "strings" "tty-screen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fcrbfb0hjd9vkkazkksri93dv9wgs2hp6p1xwb1lp43a13pmhpx";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zwqqh6138s8b321fwvfbywxy00lw1azw4ql3zr0xh1aqxf8cnvj";
+      type = "gem";
+    };
+    version = "1.2.9";
+  };
+  uber = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p1mm7mngg40x05z52md3mbamkng0zpajbzqjjwmsyw0zw3v9vjv";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wc47r23h063l8ysws8sy24gzh74mks81cak3lkzlrw4qkqb3sg4";
+      type = "gem";
+    };
+    version = "0.0.7.7";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06i3id27s60141x6fdnjn5rar1cywdwy64ilc59cz937303q3mna";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  unicode_utils = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h1a5yvrxzlf0lxxa1ya31jcizslf774arnsd89vgdhk4g7x08mr";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  uuidtools = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zjvq1jrrnzj69ylmz1xcr30skf9ymmvjmdwbvscncd7zkr8av5g";
+      type = "gem";
+    };
+    version = "2.1.5";
+  };
+  winrm = {
+    dependencies = ["builder" "erubi" "gssapi" "gyoku" "httpclient" "logging" "nori" "rubyntlm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nxf6a47d1xf1nvi7rbfbzjyyjhz0iakrnrsr2hj6y24a381sd8i";
+      type = "gem";
+    };
+    version = "2.3.6";
+  };
+  winrm-elevated = {
+    dependencies = ["erubi" "winrm" "winrm-fs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lmlaii8qapn84wxdg5d82gbailracgk67d0qsnbdnffcg8kswzd";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  winrm-fs = {
+    dependencies = ["erubi" "logging" "rubyzip" "winrm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gb91k6s1yjqw387x4w1nkpnxblq3pjdqckayl0qvz5n3ygdsb0d";
+      type = "gem";
+    };
+    version = "1.3.5";
+  };
+  wisper = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rpsi0ziy78cj82sbyyywby4d0aw0a5q84v65qd28vqn79fbq5yf";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
+  wmi-lite = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "110dv4arvwyky6f2pq19f20f1xcjpiz3zfbals0y49ijpq8agvql";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/chit/default.nix b/nixpkgs/pkgs/development/tools/chit/default.nix
new file mode 100644
index 000000000000..dd37efb506d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/chit/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, openssl
+, darwin
+}:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  pname = "chit";
+  version = "0.1.15";
+
+  src = fetchFromGitHub {
+    owner = "peterheesterman";
+    repo = pname;
+    rev = version;
+    sha256 = "0iixczy3cad44j2d7zzj8f3lnmp4jwnb0snmwfgiq3vj9wrn28pz";
+  };
+
+  cargoSha256 = "1y6k24p4m67v5773rzid2r0jwxp9piggrp0462z446hbcam2r4gd";
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ];
+  buildInputs = []
+  ++ lib.optionals stdenv.isLinux [ openssl ]
+  ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ CoreFoundation CoreServices Security ])
+  ;
+
+  meta = with 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 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/circup/default.nix b/nixpkgs/pkgs/development/tools/circup/default.nix
new file mode 100644
index 000000000000..b620fa20e460
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/circup/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "circup";
+  version = "1.0.4";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "adafruit";
+    repo = pname;
+    rev = version;
+    hash = "sha256-qX3kSlqA2qP8+XiLYx/hKYfyeB6p3tnXEhESox0c/lY=";
+  };
+
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appdirs
+    click
+    findimports
+    requests
+    semver
+    setuptools
+    update_checker
+  ];
+
+  checkInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  postBuild = ''
+    export HOME=$(mktemp -d);
+  '';
+
+  pythonImportsCheck = [
+    " circup "
+  ];
+
+  meta = with lib; {
+    description = "CircuitPython library updater";
+    homepage = "https://github.com/adafruit/circup";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
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..bfc00fb6e3d3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clang-tools/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, llvmPackages }:
+
+let
+  unwrapped = llvmPackages.clang-unwrapped;
+
+in stdenv.mkDerivation {
+  pname = "clang-tools";
+  version = lib.getVersion unwrapped;
+
+  dontUnpack = true;
+
+  clang = llvmPackages.clang;
+  inherit unwrapped;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+
+    substituteAll ${./wrapper} $out/bin/clangd
+    chmod +x $out/bin/clangd
+    for tool in \
+      clang-apply-replacements \
+      clang-check \
+      clang-format \
+      clang-rename \
+      clang-tidy
+    do
+      ln -s $out/bin/clangd $out/bin/$tool
+    done
+
+    runHook postInstall
+  '';
+
+  meta = unwrapped.meta // {
+    description = "Standalone command line tools for C++ development";
+    maintainers = with lib.maintainers; [ patryk27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/clang-tools/wrapper b/nixpkgs/pkgs/development/tools/clang-tools/wrapper
new file mode 100755
index 000000000000..1008023fdc0d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clang-tools/wrapper
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+buildcpath() {
+  local path after
+  while (( $# )); do
+    case $1 in
+        -isystem)
+            shift
+            path=$path${path:+':'}$1
+            ;;
+        -idirafter)
+            shift
+            after=$after${after:+':'}$1
+            ;;
+    esac
+    shift
+  done
+  echo $path${after:+':'}$after
+}
+
+export CPATH=${CPATH}${CPATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE} \
+                                               $(<@clang@/nix-support/libc-cflags)):@clang@/resource-root/include
+export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}${CPLUS_INCLUDE_PATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE} \
+                                                                                      $(<@clang@/nix-support/libcxx-cxxflags) \
+                                                                                      $(<@clang@/nix-support/libc-cflags)):@clang@/resource-root/include
+
+exec -a "$0" @unwrapped@/bin/$(basename $0) "$@"
diff --git a/nixpkgs/pkgs/development/tools/clj-kondo/default.nix b/nixpkgs/pkgs/development/tools/clj-kondo/default.nix
new file mode 100644
index 000000000000..0a369bd5f034
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clj-kondo/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGraalvmNativeImage, fetchurl }:
+
+buildGraalvmNativeImage rec {
+  pname = "clj-kondo";
+  version = "2022.03.09";
+
+  src = fetchurl {
+    url = "https://github.com/clj-kondo/${pname}/releases/download/v${version}/${pname}-${version}-standalone.jar";
+    sha256 = "sha256-gPn3wORb30I/zTXUdxUxMesKFJx6ES7jEjUYuC/DAVI=";
+  };
+
+  extraNativeImageBuildArgs = [
+    "-H:+ReportExceptionStackTraces"
+    "--no-fallback"
+  ];
+
+  meta = with lib; {
+    description = "A linter for Clojure code that sparks joy";
+    homepage = "https://github.com/clj-kondo/clj-kondo";
+    license = licenses.epl10;
+    changelog = "https://github.com/clj-kondo/clj-kondo/blob/v${version}/CHANGELOG.md";
+    maintainers = with maintainers; [ jlesquembre bandresen thiagokokada ];
+  };
+}
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..395cd7979d61
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clog-cli/default.nix
@@ -0,0 +1,25 @@
+{ fetchFromGitHub, rustPlatform, lib }:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  pname = "clog-cli";
+  version = "0.9.3";
+
+  src = fetchFromGitHub {
+    owner = "clog-tool";
+    repo = "clog-cli";
+    rev = "v${version}";
+    sha256 = "1wxglc4n1dar5qphhj5pab7ps34cjr7jy611fwn72lz0f6c7jp3z";
+  };
+
+  cargoSha256 = "0xcgzlcmlk5ycw4kklprm8lzs72j2zp8xm3dcpy606z4r9qn0c6a";
+
+  meta = {
+    description = "Generate changelogs from local git metadata";
+    homepage = "https://github.com/clog-tool/clog-cli";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+    maintainers = [lib.maintainers.nthorne];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cloud-nuke/default.nix b/nixpkgs/pkgs/development/tools/cloud-nuke/default.nix
new file mode 100644
index 000000000000..f1f44a577755
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cloud-nuke/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "cloud-nuke";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "gruntwork-io";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-G1RQEKb3vK8lg0jakCtIMgQXmWqfsq0QWHwU8TAbBbE=";
+  };
+
+  vendorSha256 = "sha256-McCbogZvgm9pnVjay9O2CxAh+653JnDMcU4CHD0PTPI=";
+
+  ldflags = [ "-s" "-w" "-X main.VERSION=${version}" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/gruntwork-io/cloud-nuke";
+    description = "A tool for cleaning up your cloud accounts by nuking (deleting) all resources within it";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cloudsmith-cli/default.nix b/nixpkgs/pkgs/development/tools/cloudsmith-cli/default.nix
new file mode 100644
index 000000000000..c58455ac24bb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cloudsmith-cli/default.nix
@@ -0,0 +1,43 @@
+{ python3
+, lib
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "cloudsmith-cli";
+  version = "0.31.1";
+
+  format = "wheel";
+
+  src = python3.pkgs.fetchPypi {
+    pname = "cloudsmith_cli";
+    inherit format version;
+    sha256 = "sha256-r8h0fHePZoqy/oFOedkwAke0b+Huasuv+sWcL92EZ+k=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    click-configfile
+    click-didyoumean
+    click-spinner
+    cloudsmith-api
+    colorama
+    future
+    requests
+    requests-toolbelt
+    semver
+    simplejson
+    six
+    setuptools # needs pkg_resources
+  ];
+
+  # Wheels have no tests
+  doCheck = false;
+
+  meta = {
+    homepage = "https://help.cloudsmith.io/docs/cli/";
+    description = "Cloudsmith Command Line Interface";
+    maintainers = with lib.maintainers; [ jtojnar ];
+    license = lib.licenses.asl20;
+    platforms = with lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/clpm/default.nix b/nixpkgs/pkgs/development/tools/clpm/default.nix
new file mode 100644
index 000000000000..53fc548df53c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clpm/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchgit
+, wrapLisp
+, sbcl
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "clpm";
+  version = "0.4.1";
+
+  src = fetchgit {
+    url = "https://gitlab.common-lisp.net/clpm/clpm";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "sha256-UhaLmbdsIPj6O+s262HUMxuz/5t43JR+TlOjq8Y2CDs=";
+  };
+
+  buildInputs = [
+    (wrapLisp sbcl)
+  ];
+
+  propagatedBuildInputs = [
+    openssl
+  ];
+
+  postPatch = ''
+    # patch cl-plus-ssl to ensure that it finds libssl and libcrypto
+    sed 's|libssl.so|${openssl.out}/lib/libssl.so|' -i ext/cl-plus-ssl/src/reload.lisp
+    sed 's|libcrypto.so|${openssl.out}/lib/libcrypto.so|' -i ext/cl-plus-ssl/src/reload.lisp
+    # patch dexador to avoid error due to dexador being loaded multiple times
+    sed -i 's/defpackage/uiop:define-package/g' ext/dexador/src/dexador.lisp
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    # exporting home to avoid using /homeless-shelter/.cache/ as this will cause
+    # ld to complaing about `impure path used in link`.
+    export HOME=$TMP
+
+    common-lisp.sh --script scripts/build-release.lisp
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    cd build/release-staging/dynamic/clpm-${version}*/
+    INSTALL_ROOT=$out/ bash install.sh
+
+    runHook postInstall
+  '';
+
+  # fixupPhase results in fatal error in SBCL, `Can't find sbcl.core`
+  dontFixup = true;
+
+  meta = with lib; {
+    description = "Common Lisp Package Manager";
+    homepage = "https://www.clpm.dev/";
+    license = licenses.bsd2;
+    maintainers = [ maintainers.petterstorvik ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cmake-format/default.nix b/nixpkgs/pkgs/development/tools/cmake-format/default.nix
new file mode 100644
index 000000000000..85efc5f19ccf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cmake-format/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, autopep8
+, flake8
+, jinja2
+, pylint
+, pyyaml
+, six
+}:
+
+buildPythonApplication rec {
+  pname = "cmake-format";
+  version = "0.6.13";
+  # The source distribution does not build because of missing files.
+  format = "wheel";
+
+  src = fetchPypi {
+    inherit version format;
+    python = "py3";
+    pname = "cmakelang";
+    sha256 = "0kmggnfbv6bba75l3zfzqwk0swi90brjka307m2kcz2w35kr8jvn";
+  };
+
+  propagatedBuildInputs = [ autopep8 flake8 jinja2 pylint pyyaml six ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Source code formatter for cmake listfiles";
+    homepage = "https://github.com/cheshirekow/cmake_format";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.tobim ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cmake-language-server/default.nix b/nixpkgs/pkgs/development/tools/cmake-language-server/default.nix
new file mode 100644
index 000000000000..f50afcd4669f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cmake-language-server/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, poetry
+, pygls
+, pyparsing
+, cmake
+, pytest-datadir
+, pytestCheckHook
+}:
+
+buildPythonApplication rec {
+  pname = "cmake-language-server";
+  version = "0.1.3";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "regen100";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-eZBnygEYjLzk29tvLGg1JdhCECc5x2MewHRSChMuCjo=";
+  };
+
+  patches = [
+    # Test timeouts occasionally cause the build to fail
+    ./disable-test-timeouts.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace 'pyparsing = "^2.4"' 'pyparsing = "^3.0.6"'
+  '';
+
+  nativeBuildInputs = [ poetry ];
+  propagatedBuildInputs = [ pygls pyparsing ];
+
+  checkInputs = [ cmake pytest-datadir pytestCheckHook ];
+  dontUseCmakeConfigure = true;
+  pythonImportsCheck = [ "cmake_language_server" ];
+
+  meta = with lib; {
+    description = "CMake LSP Implementation";
+    homepage = "https://github.com/regen100/cmake-language-server";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kira-bruneau ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cmake-language-server/disable-test-timeouts.patch b/nixpkgs/pkgs/development/tools/cmake-language-server/disable-test-timeouts.patch
new file mode 100644
index 000000000000..febe7cf77e71
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cmake-language-server/disable-test-timeouts.patch
@@ -0,0 +1,13 @@
+diff --git a/tests/test_server.py b/tests/test_server.py
+index c0777f5..1184fb3 100644
+--- a/tests/test_server.py
++++ b/tests/test_server.py
+@@ -11,7 +11,7 @@ from pygls.types import (CompletionContext, CompletionParams,
+                          InitializeParams, Position, TextDocumentIdentifier,
+                          TextDocumentItem, TextDocumentPositionParams)
+ 
+-CALL_TIMEOUT = 2
++CALL_TIMEOUT = None
+ 
+ 
+ def _init(client: LanguageServer, root: Path):
diff --git a/nixpkgs/pkgs/development/tools/cocogitto/default.nix b/nixpkgs/pkgs/development/tools/cocogitto/default.nix
new file mode 100644
index 000000000000..127aebccf5a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cocogitto/default.nix
@@ -0,0 +1,42 @@
+{ lib, rustPlatform, fetchFromGitHub, installShellFiles, stdenv, Security, makeWrapper, git }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cocogitto";
+  version = "4.1.0";
+
+  src = fetchFromGitHub {
+    owner = "oknozor";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-g7NBtqr7Mx7ALzij4hfoVXN3izbu4ShXYhHPYw9qnWk=";
+  };
+
+  cargoSha256 = "sha256-kXspbXySY5ridLUvAjv49Rm0RGt1fNsfNw9a3vd4hyI=";
+
+  # Test depend on git configuration that would likly exist in a normal user enviroment
+  # and might be failing to create the test repository it works in.
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  postInstall = ''
+    installShellCompletion --cmd cog \
+      --bash <($out/bin/cog generate-completions bash) \
+      --fish <($out/bin/cog generate-completions fish) \
+      --zsh  <($out/bin/cog generate-completions zsh)
+
+    wrapProgram $out/bin/cog \
+      --prefix PATH : "${lib.makeBinPath [ git ]}"
+    wrapProgram $out/bin/coco \
+      --prefix PATH : "${lib.makeBinPath [ git ]}"
+  '';
+
+  meta = with lib; {
+    description = "A set of cli tools for the conventional commit and semver specifications";
+    homepage = "https://github.com/oknozor/cocogitto";
+    license = licenses.mit;
+    maintainers = with maintainers; [ travisdavis-ops ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/comby/default.nix b/nixpkgs/pkgs/development/tools/comby/default.nix
new file mode 100644
index 000000000000..9b77740979e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/comby/default.nix
@@ -0,0 +1,101 @@
+{ ocamlPackages
+, fetchFromGitHub
+, lib
+, zlib
+, pkg-config
+, cacert
+, gmp
+, libev
+, autoconf
+, sqlite
+, stdenv
+}:
+let
+  mkCombyPackage = { pname, extraBuildInputs ? [ ], extraNativeInputs ? [ ], preBuild ? "" }:
+    ocamlPackages.buildDunePackage rec {
+      inherit pname preBuild;
+      version = "1.7.0";
+      useDune2 = true;
+      minimumOcamlVersion = "4.08.1";
+      doCheck = true;
+
+      src = fetchFromGitHub {
+        owner = "comby-tools";
+        repo = "comby";
+        rev = version;
+        sha256 = "sha256-Y2RcYvJOSqppmxxG8IZ5GlFkXCOIQU+1jJZ6j+PBHC4";
+      };
+
+      nativeBuildInputs = [
+        ocamlPackages.ppx_deriving
+        ocamlPackages.ppx_deriving_yojson
+        ocamlPackages.ppx_sexp_conv
+        ocamlPackages.ppx_sexp_message
+      ] ++ extraNativeInputs;
+
+      buildInputs = [
+        ocamlPackages.core
+        ocamlPackages.ocaml_pcre
+        ocamlPackages.mparser
+        ocamlPackages.mparser-pcre
+        ocamlPackages.angstrom
+      ] ++ extraBuildInputs;
+
+      checkInputs = [ cacert ];
+
+      meta = {
+        description = "Tool for searching and changing code structure";
+        license = lib.licenses.asl20;
+        homepage = "https://comby.dev";
+      };
+    };
+
+  combyKernel = mkCombyPackage { pname = "comby-kernel"; };
+  combySemantic = mkCombyPackage { pname = "comby-semantic"; extraBuildInputs = [ ocamlPackages.cohttp-lwt-unix ]; };
+in
+mkCombyPackage {
+  pname = "comby";
+
+  # tests have to be removed before building otherwise installPhase will fail
+  # cli tests expect a path to the built binary
+  preBuild = ''
+    substituteInPlace test/common/dune \
+      --replace "test_cli_list" "" \
+      --replace "test_cli_helper" "" \
+      --replace "test_cli" ""
+    rm test/common/{test_cli_list,test_cli_helper,test_cli}.ml
+  '';
+
+  extraBuildInputs = [
+    zlib
+    gmp
+    libev
+    sqlite
+    ocamlPackages.shell # This input must appear before `parany` or any other input that propagates `ocamlnet`
+    ocamlPackages.lwt
+    ocamlPackages.patience_diff
+    ocamlPackages.toml
+    ocamlPackages.cohttp-lwt-unix
+    ocamlPackages.opium
+    ocamlPackages.textutils
+    ocamlPackages.jst-config
+    ocamlPackages.parany
+    ocamlPackages.conduit-lwt-unix
+    ocamlPackages.lwt_react
+    ocamlPackages.tls
+    combyKernel
+    combySemantic
+  ] ++ (if !stdenv.isAarch32 && !stdenv.isAarch64 then
+    [ ocamlPackages.hack_parallel ]
+  else
+    [ ]);
+
+  extraNativeInputs = [
+    autoconf
+    pkg-config
+    ocamlPackages.ppx_jane
+    ocamlPackages.ppx_expect
+    ocamlPackages.dune-configurator
+  ];
+
+}
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..f0bf7699df0d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/compass/Gemfile.lock
@@ -0,0 +1,31 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    chunky_png (1.4.0)
+    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.15.4)
+    multi_json (1.15.0)
+    rb-fsevent (0.11.0)
+    rb-inotify (0.10.1)
+      ffi (~> 1.0)
+    sass (3.4.25)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  compass!
+
+BUNDLED WITH
+   2.2.24
diff --git a/nixpkgs/pkgs/development/tools/compass/default.nix b/nixpkgs/pkgs/development/tools/compass/default.nix
new file mode 100644
index 000000000000..f8a2aad14f45
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/compass/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "compass";
+  gemdir = ./.;
+  exes = [ "compass" ];
+
+  passthru.updateScript = bundlerUpdateScript "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 nicknovitski ];
+    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..2b1bd604254b
--- /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 = "1znw5x86hmm9vfhidwdsijz8m38pqgmv98l9ryilvky0aldv7mc9";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  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 = "0ssxcywmb3flxsjdg13is6k01807zgzasdhj4j48dm7ac59cmksn";
+      type = "gem";
+    };
+    version = "1.15.4";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qsx9c4jr11vr3a9s5j83avczx9qn9rjaf32gxpc2v451hvbc0is";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  sass = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kfpcwh8dgw4lc81qglkvjl73689jy3g7196zkxm4fpskg1p5lkw";
+      type = "gem";
+    };
+    version = "3.4.25";
+  };
+}
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..a12fb4424e8e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/compile-daemon/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "compile-daemon-unstable";
+  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 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/confluent-cli/default.nix b/nixpkgs/pkgs/development/tools/confluent-cli/default.nix
new file mode 100644
index 000000000000..9664a75703a2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/confluent-cli/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, autoPatchelfHook, fetchurl, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "confluent-cli";
+  version = "2.4.0";
+
+  # To get the latest version:
+  # curl -L https://cnfl.io/cli | sh -s -- -l | grep -v latest | sort -V | tail -n1
+  src = fetchurl (if stdenv.hostPlatform.isDarwin then {
+      url = "https://s3-us-west-2.amazonaws.com/confluent.cloud/confluent-cli/archives/${version}/confluent_v${version}_darwin_amd64.tar.gz";
+      sha256 = "1xkf7p9cn37k8j57cgbzxhqgnmchf86jyiza91bf6ddvm6jsm2gd";
+    } else {
+      url = "https://s3-us-west-2.amazonaws.com/confluent.cloud/confluent-cli/archives/${version}/confluent_v${version}_linux_amd64.tar.gz";
+      sha256 = "1wvy7x56cc7imycf0d83mxcqzdvv56cc0zbp913xgghjn9dl2z7a";
+    });
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+
+  dontStrip = stdenv.isDarwin;
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/doc/confluent-cli}
+    cp confluent $out/bin/
+    cp LICENSE $out/share/doc/confluent-cli/
+    cp -r legal $out/share/doc/confluent-cli/
+  '';
+
+  meta = with lib; {
+    description = "Confluent CLI";
+    homepage = "https://docs.confluent.io/confluent-cli/current/overview.html";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ rguevara84 ];
+
+    # TODO: There's support for i686 systems but I do not have any such system
+    # to build it locally on, it's also unfree so I cannot rely on ofborg to
+    # build it. Get the list of supported system by looking at the list of
+    # files in the S3 bucket:
+    #
+    #   https://s3-us-west-2.amazonaws.com/confluent.cloud?prefix=confluent-cli/archives/1.25.0/&delimiter=/%27
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/conftest/default.nix b/nixpkgs/pkgs/development/tools/conftest/default.nix
new file mode 100644
index 000000000000..f200cd742d90
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/conftest/default.nix
@@ -0,0 +1,57 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "conftest";
+  version = "0.30.0";
+
+  src = fetchFromGitHub {
+    owner = "open-policy-agent";
+    repo = "conftest";
+    rev = "v${version}";
+    sha256 = "sha256-8/eZz5ejw5bahCYwz825HI+oZ6D1odeTpMIJh0TcGMY=";
+  };
+  vendorSha256 = "sha256-wvOtBK3lRK7XwgeClywowgrZLohltSTGdoB+j3NRmkE=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/open-policy-agent/conftest/internal/commands.version=${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  preCheck = ''
+    export HOME="$TMPDIR"
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd conftest \
+      --bash <($out/bin/conftest completion bash) \
+      --fish <($out/bin/conftest completion fish) \
+      --zsh <($out/bin/conftest completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    export HOME="$TMPDIR"
+    $out/bin/conftest --version | grep ${version} > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Write tests against structured configuration data";
+    downloadPage = "https://github.com/open-policy-agent/conftest";
+    homepage = "https://www.conftest.dev";
+    license = licenses.asl20;
+    longDescription = ''
+      Conftest helps you write tests against structured configuration data.
+      Using Conftest you can write tests for your Kubernetes configuration,
+      Tekton pipeline definitions, Terraform code, Serverless configs or any
+      other config files.
+
+      Conftest uses the Rego language from Open Policy Agent for writing the
+      assertions. You can read more about Rego in 'How do I write policies' in
+      the Open Policy Agent documentation.
+    '';
+    maintainers = with maintainers; [ jk yurrriq ];
+  };
+}
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..5b2a7fddeb45
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/container-linux-config-transpiler/default.nix
@@ -0,0 +1,34 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+
+with lib;
+
+buildGoPackage rec {
+  pname = "ct";
+  version = "0.9.0";
+
+  goPackagePath = "github.com/coreos/container-linux-config-transpiler";
+
+  src = fetchFromGitHub {
+    owner = "coreos";
+    repo = "container-linux-config-transpiler";
+    rev = "v${version}";
+    sha256="1w6nvgrl5qp3ci9igflk9dlk3020psv5m4f3p57f3qcx9vrcl4lw";
+  };
+
+  ldflags = [
+    "-X ${goPackagePath}/internal/version.Raw=v${version}"
+  ];
+
+  postInstall = ''
+    mv $out/bin/{internal,ct}
+    rm $out/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/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/default.nix
new file mode 100644
index 000000000000..b6375f1c286a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/default.nix
@@ -0,0 +1,52 @@
+{ fetchFromGitHub, lib, buildGoModule,
+  makeWrapper, coreutils, git, openssh, bash, gnused, gnugrep,
+  nixosTests }:
+buildGoModule rec {
+  pname = "buildkite-agent";
+  version = "3.33.3";
+
+  src = fetchFromGitHub {
+    owner = "buildkite";
+    repo = "agent";
+    rev = "v${version}";
+    sha256 = "sha256-RCKHVFYYcWraUwsGuD/anmWpNwc7cHc9jm0LwR9WRzA=";
+  };
+
+  vendorSha256 = "sha256-n3XRxpEKjHf7L7fcGscWTVKBtot9waZbLoS9cG0kHfI=";
+
+  postPatch = ''
+    substituteInPlace bootstrap/shell/shell.go --replace /bin/bash ${bash}/bin/bash
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  doCheck = false;
+
+  postInstall = ''
+    # Fix binary name
+    mv $out/bin/{agent,buildkite-agent}
+
+    # These are runtime dependencies
+    wrapProgram $out/bin/buildkite-agent \
+      --prefix PATH : '${lib.makeBinPath [ openssh git coreutils gnused gnugrep ]}'
+  '';
+
+  passthru.tests = {
+    smoke-test = nixosTests.buildkite-agents;
+  };
+
+  meta = with 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 = with platforms; unix ++ darwin;
+  };
+}
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..3b9de427bde0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/generic.nix
@@ -0,0 +1,46 @@
+{ lib, buildGoPackage, makeWrapper, coreutils, git, openssh, bash, gnused, gnugrep
+, src, version, hasBootstrapScript, postPatch ? ""
+, ... }:
+let
+  goPackagePath = "github.com/buildkite/agent";
+in
+buildGoPackage {
+  pname = "buildkite-agent";
+  inherit version;
+
+  inherit goPackagePath src postPatch;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    ${lib.optionalString hasBootstrapScript ''
+    # Install bootstrap.sh
+    mkdir -p $out/libexec/buildkite-agent
+    cp $NIX_BUILD_TOP/go/src/${goPackagePath}/templates/bootstrap.sh $out/libexec/buildkite-agent
+    sed -e "s|#!/bin/bash|#!${bash}/bin/bash|g" -i $out/libexec/buildkite-agent/bootstrap.sh
+    ''}
+
+    # Fix binary name
+    mv $out/bin/{agent,buildkite-agent}
+
+    # These are runtime dependencies
+    wrapProgram $out/bin/buildkite-agent \
+      ${lib.optionalString hasBootstrapScript "--set BUILDKITE_BOOTSTRAP_SCRIPT_PATH $out/libexec/buildkite-agent/bootstrap.sh"} \
+      --prefix PATH : '${lib.makeBinPath [ openssh git coreutils gnused gnugrep ]}'
+  '';
+
+  meta = with 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/buildkite-cli/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-cli/default.nix
new file mode 100644
index 000000000000..4604cca7cfc8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-cli/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "buildkite-cli";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "buildkite";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-AIa+hEYtPJ4CFvAFSpNJFxY+B3+DJH1Q0hL/3BD/yN0=";
+  };
+
+  vendorSha256 = "sha256-4AH9PZWSrBXi9w4Mr7dpXqDkQZGzuELG876YCaFTj2Q=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/bk" ];
+
+  ldflags = [ "-s" "-w" "-X main.VERSION=${version}" ];
+
+  meta = with lib; {
+    description = "A command line interface for Buildkite";
+    homepage = "https://github.com/buildkite/cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ groodt ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/0001-use-different-upstream-for-gomod.patch b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/0001-use-different-upstream-for-gomod.patch
new file mode 100644
index 000000000000..e9bd040f6781
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/0001-use-different-upstream-for-gomod.patch
@@ -0,0 +1,23 @@
+diff --git a/go.mod b/go.mod
+index 99f9b37..ebbdb54 100644
+--- a/go.mod
++++ b/go.mod
+@@ -28,3 +28,5 @@ require (
+ 	golang.org/x/net v0.0.0-20210226172049-e18ecbb05110
+ 	golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
+ )
++
++replace github.com/jackspirou/syscerts => github.com/akhenakh/syscerts v0.0.0-20201230132944-1f7ee1de1ba3
+diff --git a/go.sum b/go.sum
+index 8c379ed..283ba39 100644
+--- a/go.sum
++++ b/go.sum
+@@ -64,6 +64,8 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE
+ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
+ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
+ github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
++github.com/akhenakh/syscerts v0.0.0-20201230132944-1f7ee1de1ba3 h1:2d14fzBv1dj4PimhBxXDlaltfNU6rGmA4NyYa3aB5xQ=
++github.com/akhenakh/syscerts v0.0.0-20201230132944-1f7ee1de1ba3/go.mod h1:ijVDlqqT/Ok/B2v7GaiSj4gfCl7uipB8/8jwgJvrTSk=
+ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
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..ac434fb9fdd5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  version = "1.5.0";
+  pname = "drone-cli";
+  revision = "v${version}";
+
+  vendorSha256 = "0hh079qvxs4bcf0yy42y6sb303wxxam5h2mz56irdl0q2vqkk0f0";
+
+  doCheck = false;
+
+  patches = [ ./0001-use-different-upstream-for-gomod.patch ];
+
+  ldflags = [
+    "-X main.version=${version}"
+  ];
+
+  src = fetchFromGitHub {
+    owner = "harness";
+    repo = "drone-cli";
+    rev = revision;
+    sha256 = "sha256-TFIGKTVrAMSOFEmu3afdDKBgyEwF2KIv3rt1fS6rCxw=";
+  };
+
+  meta = with lib; {
+    mainProgram = "drone";
+    maintainers = with maintainers; [ techknowlogick ];
+    license = licenses.asl20;
+    description = "Command line client for the Drone continuous integration server";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-docker/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-docker/default.nix
new file mode 100644
index 000000000000..fa2957be986d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-docker/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "drone-runner-docker";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "drone-runners";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-F04h9kwrVvQEenzw1QTeNnQun9tHzu8HT24gNEMcRro=";
+  };
+
+  vendorSha256 = "sha256-E18ykjQc1eoHpviYok+NiLaeH01UMQmigl9JDwtR+zo=";
+
+  meta = with lib; {
+    maintainers = with maintainers; [ endocrimes ];
+    license = licenses.unfreeRedistributable;
+    homepage = "https://github.com/drone-runners/drone-runner-docker";
+    description = "Drone pipeline runner that executes builds inside Docker containers";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-exec/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-exec/default.nix
new file mode 100644
index 000000000000..373c6183725d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-exec/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "drone-runner-exec";
+  version = "unstable-2020-04-19";
+
+  src = fetchFromGitHub {
+    owner = "drone-runners";
+    repo = "drone-runner-exec";
+    rev = "c0a612ef2bdfdc6d261dfbbbb005c887a0c3668d";
+    sha256 = "sha256-0UIJwpC5Y2TQqyZf6C6neICYBZdLQBWAZ8/K1l6KVRs=";
+  };
+
+  vendorSha256 = "sha256-ypYuQKxRhRQGX1HtaWt6F6BD9vBpD8AJwx/4esLrJsw=";
+
+  meta = with lib; {
+    description = "Drone pipeline runner that executes builds directly on the host machine";
+    homepage = "https://github.com/drone-runners/drone-runner-exec";
+    # https://polyformproject.org/licenses/small-business/1.0.0/
+    license = licenses.unfree;
+    maintainers = with maintainers; [ mic92 ];
+  };
+}
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..0f36f8dc0277
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, buildGoModule
+, enableUnfree ? true }:
+
+buildGoModule rec {
+  pname = "drone.io${lib.optionalString (!enableUnfree) "-oss"}";
+  version = "2.0.3";
+
+  vendorSha256 = "sha256-3qTH/p0l6Ke1F9SUcvK2diqZooOMnlXYO1PHLdJJ8PM=";
+
+  doCheck = false;
+
+  src = fetchFromGitHub {
+    owner = "drone";
+    repo = "drone";
+    rev = "v${version}";
+    sha256 = "sha256-MKV5kor+Wm9cuIFFcjSNyCgVKtY+/B9sgBOXMMRvMPI=";
+  };
+
+  tags = lib.optionals (!enableUnfree) [ "oss" "nolimit" ];
+
+  meta = with lib; {
+    maintainers = with maintainers; [ elohmeier vdemeester ];
+    license = with licenses; if enableUnfree then unfreeRedistributable else asl20;
+    description = "Continuous Integration platform built on container technology";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/fly/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/fly/default.nix
new file mode 100644
index 000000000000..f02a6cf8762f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/fly/default.nix
@@ -0,0 +1,36 @@
+{ buildGoModule, fetchFromGitHub, stdenv, lib }:
+
+buildGoModule rec {
+  pname = "fly";
+  version = "7.7.0";
+
+  src = fetchFromGitHub {
+    owner = "concourse";
+    repo = "concourse";
+    rev = "v${version}";
+    sha256 = "sha256-BKEUKQQxZ+Maq2JSHeWuQ7Lhgfc33pSiVS6VfAlMu/g=";
+  };
+
+  vendorSha256 = "sha256-G9HdhPi4iezUR6SIVYnjL0fznOfiusY4T9ClLPr1w5c=";
+
+  doCheck = false;
+
+  subPackages = [ "fly" ];
+
+  ldflags = [
+    "-X github.com/concourse/concourse.Version=${version}"
+  ];
+
+  postInstall = lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) ''
+    mkdir -p $out/share/{bash-completion/completions,zsh/site-functions}
+    $out/bin/fly completion --shell bash > $out/share/bash-completion/completions/fly
+    $out/bin/fly completion --shell zsh > $out/share/zsh/site-functions/_fly
+  '';
+
+  meta = with lib; {
+    description = "A command line interface to Concourse CI";
+    homepage = "https://concourse-ci.org";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ivanbrennan ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/default.nix
new file mode 100644
index 000000000000..222ffb0688fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/default.nix
@@ -0,0 +1,334 @@
+{ autoPatchelfHook
+, coreutils
+, curl
+, dotnetCorePackages
+, dotnetPackages
+, fetchFromGitHub
+, fetchurl
+, git
+, glibc
+, icu
+, libkrb5
+, lib
+, linkFarmFromDrvs
+, lttng-ust
+, makeWrapper
+, nodejs-12_x
+, nodejs-16_x
+, openssl
+, stdenv
+, zlib
+, writeShellApplication
+, nuget-to-nix
+}:
+let
+  nugetSource = linkFarmFromDrvs "nuget-packages" (
+    import ./deps.nix {
+      fetchNuGet = { pname, version, sha256 }: fetchurl {
+        name = "${pname}.${version}.nupkg";
+        url = "https://www.nuget.org/api/v2/package/${pname}/${version}";
+        inherit sha256;
+      };
+    }
+  );
+
+  dotnetSdk = dotnetCorePackages.sdk_6_0;
+  # Map Nix systems to .NET runtime ids
+  runtimeIds = {
+    "x86_64-linux" = "linux-x64";
+    "aarch64-linux" = "linux-arm64";
+  };
+  runtimeId = runtimeIds.${stdenv.system};
+  fakeSha1 = "0000000000000000000000000000000000000000";
+in
+stdenv.mkDerivation rec {
+  pname = "github-runner";
+  version = "2.288.1";
+
+  src = fetchFromGitHub {
+    owner = "actions";
+    repo = "runner";
+    rev = "v${version}";
+    hash = "sha256-bP+6aAKnu6PxN9eppFXsqOSVSGQ6Lv+gEF2MdEz52WE=";
+  };
+
+  nativeBuildInputs = [
+    dotnetSdk
+    dotnetPackages.Nuget
+    makeWrapper
+    autoPatchelfHook
+  ];
+
+  buildInputs = [
+    curl # libcurl.so.4
+    libkrb5 # libgssapi_krb5.so.2
+    lttng-ust # liblttng-ust.so.0
+    stdenv.cc.cc.lib # libstdc++.so.6
+    zlib # libz.so.1
+    icu
+  ];
+
+  patches = [
+    # Don't run Git, no restore on build/test
+    ./patches/dir-proj.patch
+    # Replace some paths that originally point to Nix's read-only store
+    ./patches/host-context-dirs.patch
+    # Use GetDirectory() to obtain "diag" dir
+    ./patches/use-get-directory-for-diag.patch
+    # Don't try to install systemd service
+    ./patches/dont-install-systemd-service.patch
+  ];
+
+  postPatch = ''
+    # Relax the version requirement
+    substituteInPlace src/global.json \
+      --replace '6.0.100' '${dotnetSdk.version}'
+
+    # Disable specific tests
+    substituteInPlace src/dir.proj \
+      --replace 'dotnet test Test/Test.csproj' \
+                "dotnet test Test/Test.csproj --filter '${lib.concatStringsSep "&amp;" (map (x: "FullyQualifiedName!=${x}") disabledTests)}'"
+
+    # We don't use a Git checkout
+    substituteInPlace src/dir.proj \
+      --replace 'git update-index --assume-unchanged ./Runner.Sdk/BuildConstants.cs' \
+                'echo Patched out.'
+
+    # Fix FHS path
+    substituteInPlace src/Test/L0/Util/IOUtilL0.cs \
+      --replace '/bin/ln' '${coreutils}/bin/ln'
+  '';
+
+  configurePhase = ''
+    runHook preConfigure
+
+    # Never use nuget.org
+    nuget sources Disable -Name "nuget.org"
+
+    # Restore the dependencies
+    dotnet restore src/ActionsRunner.sln \
+      --runtime "${runtimeId}" \
+      --source "${nugetSource}"
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    dotnet msbuild \
+      -t:Build \
+      -p:PackageRuntime="${runtimeId}" \
+      -p:BUILDCONFIG="Release" \
+      -p:RunnerVersion="${version}" \
+      -p:GitInfoCommitHash="${fakeSha1}" \
+      src/dir.proj
+
+    runHook postBuild
+  '';
+
+  doCheck = true;
+
+  # Fully qualified name of disabled tests
+  disabledTests =
+    [ "GitHub.Runner.Common.Tests.Listener.SelfUpdaterL0.TestSelfUpdateAsync" ]
+    ++ map (x: "GitHub.Runner.Common.Tests.Listener.SelfUpdaterL0.TestSelfUpdateAsync_${x}") [
+      "Cancel_CloneHashTask_WhenNotNeeded"
+      "CloneHash_RuntimeAndExternals"
+      "DownloadRetry"
+      "FallbackToFullPackage"
+      "NoUpdateOnOldVersion"
+      "NotUseExternalsRuntimeTrimmedPackageOnHashMismatch"
+      "UseExternalsRuntimeTrimmedPackage"
+      "UseExternalsTrimmedPackage"
+      "ValidateHash"
+    ]
+    ++ map (x: "GitHub.Runner.Common.Tests.Worker.ActionManagerL0.PrepareActions_${x}") [
+      "CompositeActionWithActionfile_CompositeContainerNested"
+      "CompositeActionWithActionfile_CompositePrestepNested"
+      "CompositeActionWithActionfile_MaxLimit"
+      "CompositeActionWithActionfile_Node"
+      "DownloadActionFromGraph"
+      "DownloadActionFromGraph_Legacy"
+      "NotPullOrBuildImagesMultipleTimes"
+      "NotPullOrBuildImagesMultipleTimes_Legacy"
+      "RepositoryActionWithActionYamlFile_DockerHubImage"
+      "RepositoryActionWithActionYamlFile_DockerHubImage_Legacy"
+      "RepositoryActionWithActionfileAndDockerfile"
+      "RepositoryActionWithActionfileAndDockerfile_Legacy"
+      "RepositoryActionWithActionfile_DockerHubImage"
+      "RepositoryActionWithActionfile_DockerHubImage_Legacy"
+      "RepositoryActionWithActionfile_Dockerfile"
+      "RepositoryActionWithActionfile_Dockerfile_Legacy"
+      "RepositoryActionWithActionfile_DockerfileRelativePath"
+      "RepositoryActionWithActionfile_DockerfileRelativePath_Legacy"
+      "RepositoryActionWithActionfile_Node"
+      "RepositoryActionWithActionfile_Node_Legacy"
+      "RepositoryActionWithDockerfile"
+      "RepositoryActionWithDockerfile_Legacy"
+      "RepositoryActionWithDockerfileInRelativePath"
+      "RepositoryActionWithDockerfileInRelativePath_Legacy"
+      "RepositoryActionWithDockerfilePrepareActions_Repository"
+      "RepositoryActionWithInvalidWrapperActionfile_Node"
+      "RepositoryActionWithInvalidWrapperActionfile_Node_Legacy"
+      "RepositoryActionWithWrapperActionfile_PreSteps"
+      "RepositoryActionWithWrapperActionfile_PreSteps_Legacy"
+    ]
+    ++ map (x: "GitHub.Runner.Common.Tests.DotnetsdkDownloadScriptL0.${x}") [
+      "EnsureDotnetsdkBashDownloadScriptUpToDate"
+      "EnsureDotnetsdkPowershellDownloadScriptUpToDate"
+    ]
+    ++ [ "GitHub.Runner.Common.Tests.Listener.RunnerL0.TestRunOnceHandleUpdateMessage" ]
+    # Tests for trimmed runner packages which aim at reducing the update size. Not relevant for Nix.
+    ++ map (x: "GitHub.Runner.Common.Tests.PackagesTrimL0.${x}") [
+      "RunnerLayoutParts_CheckExternalsHash"
+      "RunnerLayoutParts_CheckDotnetRuntimeHash"
+    ]
+    ++ lib.optionals (stdenv.hostPlatform.system == "aarch64-linux") [
+      # "JavaScript Actions in Alpine containers are only supported on x64 Linux runners. Detected Linux Arm64"
+      "GitHub.Runner.Common.Tests.Worker.StepHostL0.DetermineNodeRuntimeVersionInAlpineContainerAsync"
+    ];
+
+  checkInputs = [ git ];
+
+  checkPhase = ''
+    runHook preCheck
+
+    mkdir -p _layout/externals
+    ln -s ${nodejs-12_x} _layout/externals/node12
+    ln -s ${nodejs-16_x} _layout/externals/node16
+
+    printf 'Disabled tests:\n%s\n' '${lib.concatMapStringsSep "\n" (x: " - ${x}") disabledTests}'
+
+    # BUILDCONFIG needs to be "Debug"
+    dotnet msbuild \
+      -t:test \
+      -p:PackageRuntime="${runtimeId}" \
+      -p:BUILDCONFIG="Debug" \
+      -p:RunnerVersion="${version}" \
+      -p:GitInfoCommitHash="${fakeSha1}" \
+      src/dir.proj
+
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # Copy the built binaries to lib/ instead of bin/ as they
+    # have to be wrapped in the fixup phase to work
+    mkdir -p $out/lib
+    cp -r _layout/bin/. $out/lib/
+
+    # Delete debugging files
+    find "$out/lib" -type f -name '*.pdb' -delete
+
+    # Install the helper scripts to bin/ to resemble the upstream package
+    mkdir -p $out/bin
+    install -m755 src/Misc/layoutbin/runsvc.sh        $out/bin/
+    install -m755 src/Misc/layoutbin/RunnerService.js $out/lib/
+    install -m755 src/Misc/layoutroot/run.sh          $out/lib/
+    install -m755 src/Misc/layoutroot/config.sh       $out/lib/
+    install -m755 src/Misc/layoutroot/env.sh          $out/lib/
+
+    # Rewrite reference in helper scripts from bin/ to lib/
+    substituteInPlace $out/lib/run.sh    --replace '"$DIR"/bin' "$out/lib"
+    substituteInPlace $out/lib/config.sh --replace './bin' "$out/lib"
+
+    # Make paths absolute
+    substituteInPlace $out/bin/runsvc.sh \
+      --replace './externals' "$out/externals" \
+      --replace './bin' "$out/lib"
+
+    # The upstream package includes Node {12,16} and expects it at the path
+    # externals/node{12,16}. As opposed to the official releases, we don't
+    # link the Alpine Node flavors.
+    mkdir -p $out/externals
+    ln -s ${nodejs-12_x} $out/externals/node12
+    ln -s ${nodejs-16_x} $out/externals/node16
+
+    # Install Nodejs scripts called from workflows
+    install -D src/Misc/layoutbin/hashFiles/index.js $out/lib/hashFiles/index.js
+    mkdir -p $out/lib/checkScripts
+    install src/Misc/layoutbin/checkScripts/* $out/lib/checkScripts/
+
+    runHook postInstall
+  '';
+
+  # Stripping breaks the binaries
+  dontStrip = true;
+
+  preFixup = ''
+    patchelf --replace-needed liblttng-ust.so.0 liblttng-ust.so $out/lib/libcoreclrtraceptprovider.so
+  '';
+
+  postFixup = ''
+    fix_rpath() {
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/lib/$1
+    }
+
+    wrap() {
+      makeWrapper $out/lib/$1 $out/bin/$1 \
+        --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath (buildInputs ++ [ openssl ])} \
+        ''${@:2}
+    }
+
+    fix_rpath Runner.Listener
+    fix_rpath Runner.PluginHost
+    fix_rpath Runner.Worker
+
+    wrap Runner.Listener
+    wrap Runner.PluginHost
+    wrap Runner.Worker
+    wrap run.sh
+    wrap env.sh
+
+    wrap config.sh --prefix PATH : ${lib.makeBinPath [ glibc.bin ]}
+  '';
+
+  # Script to create deps.nix file for dotnet dependencies. Run it with
+  # $(nix-build -A github-runner.passthru.createDepsFile)/bin/create-deps-file
+  #
+  # Default output path is /tmp/${pname}-deps.nix, but can be overriden with cli argument.
+  #
+  # Inspired by passthru.fetch-deps in pkgs/build-support/build-dotnet-module/default.nix
+  passthru.createDepsFile = writeShellApplication {
+    name = "create-deps-file";
+    runtimeInputs = [ dotnetSdk nuget-to-nix ];
+    text = ''
+      # Disable telemetry data
+      export DOTNET_CLI_TELEMETRY_OPTOUT=1
+
+      rundir=$(pwd)
+
+      printf "\n* Setup workdir\n"
+      workdir="$(mktemp -d /tmp/${pname}.XXX)"
+      cp -rT "${src}" "$workdir"
+      chmod -R +w "$workdir"
+      trap 'rm -rf "$workdir"' EXIT
+
+      pushd "$workdir"
+
+      mkdir nuget_pkgs
+
+      ${lib.concatMapStrings (rid: ''
+      printf "\n* Restore ${pname} (${rid}) dotnet project\n"
+      dotnet restore src/ActionsRunner.sln --packages nuget_pkgs --no-cache --force --runtime "${rid}"
+      '') (lib.attrValues runtimeIds)}
+
+      cd "$rundir"
+      deps_file=''${1-"/tmp/${pname}-deps.nix"}
+      printf "\n* Make %s file\n" "$(basename "$deps_file")"
+      nuget-to-nix "$workdir/nuget_pkgs" > "$deps_file"
+      printf "\n* Dependency file writen to %s" "$deps_file"
+    '';
+  };
+
+  meta = with lib; {
+    description = "Self-hosted runner for GitHub Actions";
+    homepage = "https://github.com/actions/runner";
+    license = licenses.mit;
+    maintainers = with maintainers; [ veehaitch newam kfollesdal ];
+    platforms = attrNames runtimeIds;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/deps.nix b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/deps.nix
new file mode 100644
index 000000000000..1281b9515f59
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/deps.nix
@@ -0,0 +1,258 @@
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Castle.Core"; version = "4.4.0"; sha256 = "0rpcbmyhckvlvp6vbzpj03c1gqz56ixc6f15vgmxmyf1g40c24pf"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-arm64"; version = "6.0.0"; sha256 = "1315hycfqlalh6k4zvvz7pz3dylpp0sr45j1v9avcb143hjqnav6"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-x64"; version = "6.0.0"; sha256 = "0r6jyxl3h1asj30la78skd5gsxgwjpvkspmkw1gglxfg85hnqc8w"; })
+  (fetchNuGet { pname = "Microsoft.AspNet.WebApi.Client"; version = "5.2.4"; sha256 = "00fkczf69z2rwarcd8kjjdp47517a0ca6lggn72qbilsp03a5scj"; })
+  (fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "17.0.0"; sha256 = "18gdbsqf6i79ld4ikqr4jhx9ndsggm865b5xj1xmnmgg12ydp19a"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Logging"; version = "5.2.1"; sha256 = "1gpka9jm2gl6f07pcwzwvaxw9xq1a19i9fskn0qs921c5grhlp3g"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Tokens"; version = "5.2.1"; sha256 = "03v6145vr1winq8xxfikydicds4f10qmy1ybyz2gfimnzzx51w00"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-arm64"; version = "6.0.0"; sha256 = "0aska6s99rfg13ngsaxr151a6sk8r68lv3mj8yv0bhvwcpln4342"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-arm64"; version = "6.0.0"; sha256 = "146rbmk0svvqaf0c4msg67h17x4k4gd5kzsbb3iqvs14xfkli2xw"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-x64"; version = "6.0.0"; sha256 = "0qaylw18flrfl3vxnbp8wsiz29znidmn6dhv7k4v4jj2za16wmji"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1-rc2-24027"; sha256 = "1a0w5fv8slfr4q7m3mh78lb9awdwyz4zv3bb73vybkyq1f6z7lx8"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.0.0"; sha256 = "1fk2fk2639i7nzy58m9dvpdnzql4vb8yl8vr19r2fp8lmj9w2jr0"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Runtime"; version = "1.0.2-rc2-24027"; sha256 = "0ippdn16381l8i2iy63i45nk0p303fjbd4amh7biwvqxgagfbvhh"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Runtime.CoreCLR"; version = "1.0.2-rc2-24027"; sha256 = "05y0jz6vfl9zs0lmmwsz6arf7r0mg2dm93ymizrzmqn706krz45x"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Runtime.Native"; version = "1.0.2-rc2-24027"; sha256 = "11hpbbmnjbskw7s6sx32l6qzz63kshx0gyp3sawyxk82nbqrissl"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1-rc2-24027"; sha256 = "1j1458jska7540ng7fdf5i06k2vy71mxl5dld4x5s8gfndxpdzdj"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Windows.ApiSets"; version = "1.0.1-rc2-24027"; sha256 = "034m9p417iq3yzipg393wp4bddsh80di9iad78vvvh7w5difdv0x"; })
+  (fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "17.0.0"; sha256 = "0bknyf5kig5icwjxls7pcn51x2b2qf91dz9qv67fl70v6cczaz2r"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.0.0"; sha256 = "1bh5scbvl6ndldqv20sl34h4y257irm9ziv2wyfc3hka6912fhn7"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "17.0.0"; sha256 = "06mn31cgpp7d8lwdyjanh89prc66j37dchn74vrd9s588rq0y70r"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.0.1-rc2-24027"; sha256 = "1rvb076s4ksvmbvnxi4sv2f9f22izqp2rca0scjqya5x1qhcgkp0"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.4.0"; sha256 = "088j2anh1rnkxdcycw5kgp97ahk7cj741y6kask84880835arsb6"; })
+  (fetchNuGet { pname = "Minimatch"; version = "2.0.0"; sha256 = "1k84q1bz1qq2nh35nip8vmi65wixsh5y7piln5b4n172xzhfqvx0"; })
+  (fetchNuGet { pname = "Moq"; version = "4.11.0"; sha256 = "08bnk80scjjqnkdbjam8grcqrw2rvj9z7556hiznac7in3fcp77w"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.5.0-rc2-24027"; sha256 = "1kazwidj63w53r1s6fd8sgykb70kdic27fg9qhg74qzwm354imwm"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "11.0.2"; sha256 = "1784xi44f4k8v1fr696hsccmwpy94bz7kixxqlri98zhcxn406b2"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "9.0.1"; sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r"; })
+  (fetchNuGet { pname = "Newtonsoft.Json.Bson"; version = "1.0.1"; sha256 = "1r1hvj5gjl466bya2bfl5aaj8rbwyf5x1msg710wf3k2llbci1xa"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "5.0.0"; sha256 = "18ijvmj13cwjdrrm52c8fpq021531zaz4mj4b4zapxaqzzxf2qjr"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Timer"; version = "4.3.0"; sha256 = "0aw4phrhwqz9m61r79vyfl5la64bjxj8l34qnrcwb28v49fg2086"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.0.0-rc2-24027"; sha256 = "0n3ndk1g5qdd892sjcz3y2qmg8ki8b001qfgl2fkwv5f52m65pz9"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.1.0-rc2-24027"; sha256 = "1qnd05bsrz88cr4wnkq7haf2bwml2zzjcscjk94v8ka4isi1i89b"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.0.1-rc2-24027"; sha256 = "0dpgj544rfdqlgjc1nwslwbq49mp286wyy6rfnklxlbfgc2mr216"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography"; version = "4.0.0-rc2-24027"; sha256 = "0pkd72vrqn1jxc20g8h2pgqz02xn2rfbl0m4i7b82xa8bc483jmz"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; })
+  (fetchNuGet { pname = "runtime.unix.System.Console"; version = "4.3.0"; sha256 = "1pfpkvc6x2if8zbdzg9rnc5fx51yllprl8zkm5npni2k50lisy80"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Primitives"; version = "4.3.0"; sha256 = "0bdnglg59pzx9394sy4ic66kmxhqp8q8bvmykdxcbs5mm0ipwwm4"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Sockets"; version = "4.3.0"; sha256 = "03npdxzy8gfv035bv1b9rz7c7hv0rxl5904wjz51if491mw0xy12"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.1.0-rc2-24027"; sha256 = "0c0x3sg12a5zwiamvxs9c4bhdwmmm9by6x5da58fbrzz7afbaaag"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.0.0-rc2-24027"; sha256 = "1mqnay87pkxih73984jf5fm14d0m6yjq4cv4cqbj37nmgm54ssjp"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.0.11-rc2-24027"; sha256 = "0ijpgf7iy3mcvr9327craxsb0lsznprajqzjy59sspc75gk0yahq"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.0.12-rc2-24027"; sha256 = "0yhc5q74vb9vb9cmyrr9p4dfql62dr7c8ajbaxnzzs917v2z68q4"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.NonGeneric"; version = "4.3.0"; sha256 = "07q3k0hf3mrcjzwj8fwk6gv3n51cb513w4mgkfxzm3i37sc9kz7k"; })
+  (fetchNuGet { pname = "System.Collections.Specialized"; version = "4.3.0"; sha256 = "1sdwkma4f6j85m3dpb53v9vcgd0zyc9jb33f8g63byvijcj39n20"; })
+  (fetchNuGet { pname = "System.ComponentModel"; version = "4.3.0"; sha256 = "0986b10ww3nshy30x9sjyzm0jx339dkjxjj3401r3q0f6fx2wkcb"; })
+  (fetchNuGet { pname = "System.ComponentModel.Primitives"; version = "4.3.0"; sha256 = "1svfmcmgs0w0z9xdw2f2ps05rdxmkxxhf0l17xk9l1l8xfahkqr0"; })
+  (fetchNuGet { pname = "System.ComponentModel.TypeConverter"; version = "4.3.0"; sha256 = "17ng0p7v3nbrg3kycz10aqrrlw4lz9hzhws09pfh8gkwicyy481x"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.0.0-rc2-24027"; sha256 = "072m313av0s5cfpr2rpq07p7c13dy4rh1ngigv3dnr1yyvab9081"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11-rc2-24027"; sha256 = "11rz0kdzk4bw9yc85jmskxla7i1bs61kladqzvymrg8xn3lk488a"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.0.0-rc2-24027"; sha256 = "1cizj1xvaz7dm701r4bl6s08858j1r2794y7xx8abyw8j91c957w"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1-rc2-24027"; sha256 = "080gd86c1pkfkzz67ispkzxc426lfh82zajayiizbgwd6yqa7fv5"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
+  (fetchNuGet { pname = "System.Diagnostics.TraceSource"; version = "4.3.0"; sha256 = "1kyw4d7dpjczhw6634nrmg7yyyzq72k75x38y0l0nwhigdlp1766"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.1.0-rc2-24027"; sha256 = "0a0c24lm8yn0hbvd5m64lv7xhs2bmhm5fdpk89xvxj14zdarqhm6"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.0.11-rc2-24027"; sha256 = "0yl161lr85smzdfzb7fbk0lfrqk5ns71hcnws6vm3sn2aqvfmhpn"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.0.1-rc2-24027"; sha256 = "0whr2qird567iyc137s10qs0xi6607kjii9wi8a8g1f9lybzlz5k"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
+  (fetchNuGet { pname = "System.IdentityModel.Tokens.Jwt"; version = "5.2.1"; sha256 = "08n1z9ngsi26qlhwpjzxafhwl3p279widfci64l2ahxf1gprfqsx"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.1.0-rc2-24027"; sha256 = "0rwqmn743gl21xnb3rwqkdacshd5l86pn23mc4bviva3pbncbjs4"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.1.0-rc2-24027"; sha256 = "07s5zxdw3ihxdv0mjxb2ywzg9phcp4bayrhkadzm95l4kcv0xaij"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.0.1-rc2-24027"; sha256 = "0np6vf9rnfasz0sqys56kpryc84qcqi1a1rfskmycdlxk182p3s2"; })
+  (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.3.0"; sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1-rc2-24027"; sha256 = "0hpw3ssnbcv9l1lnlcym2bv3h3sf2znif4brys2i3868s6h946k6"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1"; sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.AccessControl"; version = "4.4.0"; sha256 = "11sna2bv5ai4sivrs7g2gp7g0yjp02s0kasl01j3fa1cvnwwvgkv"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1-rc2-24027"; sha256 = "04q3sxrfxqgig9scmxblxlb6n6fypv535lby26pi20ixszs19dxc"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Watcher"; version = "4.0.0-rc2-24027"; sha256 = "0g2h4q0w42frdz101z2cxs4n9zpxvzb43wnzawx1f26vpilz7km4"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0-rc2-24027"; sha256 = "0icbsy0vq07achclz32jvnnfdchkgylsjj67gra3fn5906s40n24"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.1.0"; sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.0.1-rc2-24027"; sha256 = "1j9z5as3k7ydr4yi83lwh09hqj32g2ndpjgj25xvny5a32dl2mhz"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; })
+  (fetchNuGet { pname = "System.Net.NameResolution"; version = "4.3.0"; sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.0.11-rc2-24027"; sha256 = "16wv24cb39639i7fcw005hh1rggyz2bgn51dpkdc67aq9lz76ivm"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.1.0-rc2-24027"; sha256 = "062kbbvm17nhwmcxjnakfv3i23vrk6c9gmz6x8q79kcr5hxr40qs"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12-rc2-24027"; sha256 = "065p89awfiz9kb304hqs7wkfpykd9z9kkv84ihm813msv54i8lvj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Private.DataContractSerialization"; version = "4.3.0"; sha256 = "06fjipqvjp559rrm825x6pll8gimdj9x1n3larigh5hsm584gndw"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.1.0-rc2-24027"; sha256 = "0717y8iqcw19g2zkcs0hkalvjhnpaq5mapd82kxkhiq1djgjhhi2"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.0.1"; sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.0.1"; sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.0.1"; sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1-rc2-24027"; sha256 = "0lgz7wwdb02vapa17hgdkf1jnq1mcsbq8gwy6a9iqd04d2mfanv7"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1-rc2-24027"; sha256 = "1xjbwji89s69f9lq8wcjfkz8y9ym9zffgj2mg9bv0rxwyqcynpz8"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.4.0"; sha256 = "0n9r1w4lp2zmadyqkgp4sk9wy90sj4ygq4dh7kzamx26i9biys5h"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1-rc2-24027"; sha256 = "06lkqk5hjkcna19inpda5fqbxvd9pq5cs61di7kmhrd2sgzbs6xj"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.1.0-rc2-24027"; sha256 = "1g5ghiyfb8njzfz39cswizjbxgaamil7kgkzgab93fhgk7jksmyg"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0-rc2-24027"; sha256 = "09k4c6is31dpccwgb749055m2ad0b84rnapk69fmj3wjswacg26p"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1-rc2-24027"; sha256 = "0lw4amgaryahvija5xxb2vmybq7ks4b4ir7g7nc1xw6x9x58jf2q"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1"; sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0-rc2-24027"; sha256 = "0v5phdy7yr6d1q13fvb6hhd32k89l93z6x4hlkh5qhm1zlavaabl"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.PInvoke"; version = "4.0.0-rc2-24027"; sha256 = "0qsgwvr6ppvllblb64p5plr7ssbmwfxxc4qf6l1xfincza8np34r"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.0.0-rc2-24027"; sha256 = "03pgqbgahfgvigyrsd08snzsryg90shfjlbdv4jk6yzfr27va3n2"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
+  (fetchNuGet { pname = "System.Runtime.Loader"; version = "4.3.0"; sha256 = "07fgipa93g1xxgf7193a6vw677mpzgr0z0cfswbvqqb364cva8dk"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.0.1-rc2-24027"; sha256 = "1gkkc7njymmb12dd952q89x2h2jdrhp171vszsjqzh5q2ryj25gh"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.1.1"; sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.3.0"; sha256 = "01vv2p8h4hsz217xxs0rixvb7f2xzbh6wv1gzbfykcbfrza6dvnf"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Xml"; version = "4.3.0"; sha256 = "1b2cxl2h7s8cydbhbmxhvvq071n9ck61g08npg4gyw7nvg37rfni"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "4.4.0"; sha256 = "0ixqw47krkazsw0ycm22ivkv7dpg6cjz8z8g0ii44bsx4l8gcx17"; })
+  (fetchNuGet { pname = "System.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.1.0-rc2-24027"; sha256 = "183qanczf0jb6njgr9pibyr5jh0m8xwrja3j0pcdnzab0cii3n17"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.4.0"; sha256 = "1grg9id80m358crr5y4q4rhhbrm122yw8jrlcl1ybi7nkmmck40n"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.0.0-rc2-24027"; sha256 = "0nny9yvnhf3l5hjsy3ina8cha6sjln993vzkzdqka9d7rq1z23d5"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.0.0-rc2-24027"; sha256 = "19f83159vrfnfppzchjclk82w2x1mkvnx1y5yg1f238dpjb2ri8w"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.0.0-rc2-24027"; sha256 = "1mqw7xkh4pj110f249c4jpv9mg1sd8c2cr6kj2zc0mic325vvg0s"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "4.4.0"; sha256 = "1bn7d2czpc994qzdph4drv7p1cv4x55j2dhbmr113p0gs4hx33zh"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.0.0-rc2-24027"; sha256 = "16zwyw3glsq2flq1crd0c24i336bc42rj28a9rjvvkg428vz4rf8"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "4.4.0"; sha256 = "1q8ljvqhasyynp94a1d7jknk946m20lkwy2c3wa8zw2pc517fbj6"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.1.0-rc2-24027"; sha256 = "1gfxc9p73zak46klrfsyxgkcyzbvqnjarsm0wkvmj31n9g4dpjkz"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Principal"; version = "4.3.0"; sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.3.0"; sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.4.0"; sha256 = "11rr16fp68apc0arsymgj18w8ajs9a4366wgx9iqwny4glrl20wp"; })
+  (fetchNuGet { pname = "System.ServiceProcess.ServiceController"; version = "4.4.0"; sha256 = "0hyijvysbcjh20mbbgajg9wh04nkjd6y5lqxgm0a6m28zjcjshl6"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11-rc2-24027"; sha256 = "0qkaldb06dwmi8gb940h75n9cs5rgy6sqcpa6f443mhahmagmsbd"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.4.0"; sha256 = "07bzjnflxjk9vgpljfybrpqmvsr9qr2f20nq5wf11imwa5pbhgfc"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11-rc2-24027"; sha256 = "02xic3hhfy48s50bxh25as1l9v3afgrhlxqfnd5ki4qirxly7qs6"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.0.12-rc2-24027"; sha256 = "1111sgvbxrxq9c1i0nziqddlzfdc2bsawd0jcf2nna9nkcn4d6br"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.1.0"; sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.0.11-rc2-24027"; sha256 = "0aa4zaqma4yagjd44m2j13gr9qzn8rv8dbz3p9mjdk0dx1zpi4iq"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.0.11"; sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Channels"; version = "4.5.0"; sha256 = "0n6z3wjia7h2a5vl727p97riydnb6jhhkb1pdcnizza02dwkz0nz"; })
+  (fetchNuGet { pname = "System.Threading.Overlapped"; version = "4.0.1-rc2-24027"; sha256 = "1ansaxwkc4xi2ngpiv8gjmv02d75y0nb4lfqzxy73r3radakqvdp"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11-rc2-24027"; sha256 = "0fsgdzdxm3yj1cym421ymn8x8anhyzgzc1529q5xd1vq4yknwfq0"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0-rc2-24027"; sha256 = "108sdqpy3ga6gzksl59w1k21a3jlrh8x2igyxh3dm3212rca1pyg"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.1"; sha256 = "1ikrplvw4m6pzjbq3bfbpr572n4i9mni577zvmrkaygvx85q3myw"; })
+  (fetchNuGet { pname = "System.Threading.Thread"; version = "4.0.0-rc2-24027"; sha256 = "1gv963m4523m3m9gbn819bfzmhxqsv93m5kaqmbv4ijyziby2872"; })
+  (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.0.1-rc2-24027"; sha256 = "06kwi42lgf3zw3b5yw668ammbjl6208y182wyqaaqrxgn5gs4yh7"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11-rc2-24027"; sha256 = "0vywggi6mqkbr6g1a1fh821hqfnyq1k829vlhfw908l7mj75k34d"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11-rc2-24027"; sha256 = "1rvglifac6xq1lawm78w49fq9cl8zvs1g4vrsd2hhf0vb4i85p1z"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11"; sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
+  (fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.3.0"; sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi"; })
+  (fetchNuGet { pname = "System.Xml.XmlSerializer"; version = "4.3.0"; sha256 = "07pa4sx196vxkgl3csvdmw94nydlsm9ir38xxcs84qjn8cycd912"; })
+  (fetchNuGet { pname = "xunit"; version = "2.4.1"; sha256 = "0xf3kaywpg15flqaqfgywqyychzk15kz0kz34j21rcv78q9ywq20"; })
+  (fetchNuGet { pname = "xunit.abstractions"; version = "2.0.3"; sha256 = "00wl8qksgkxld76fgir3ycc5rjqv1sqds6x8yx40927q5py74gfh"; })
+  (fetchNuGet { pname = "xunit.analyzers"; version = "0.10.0"; sha256 = "15n02q3akyqbvkp8nq75a8rd66d4ax0rx8fhdcn8j78pi235jm7j"; })
+  (fetchNuGet { pname = "xunit.assert"; version = "2.4.1"; sha256 = "1imynzh80wxq2rp9sc4gxs4x1nriil88f72ilhj5q0m44qqmqpc6"; })
+  (fetchNuGet { pname = "xunit.core"; version = "2.4.1"; sha256 = "1nnb3j4kzmycaw1g76ii4rfqkvg6l8gqh18falwp8g28h802019a"; })
+  (fetchNuGet { pname = "xunit.extensibility.core"; version = "2.4.1"; sha256 = "103qsijmnip2pnbhciqyk2jyhdm6snindg5z2s57kqf5pcx9a050"; })
+  (fetchNuGet { pname = "xunit.extensibility.execution"; version = "2.4.1"; sha256 = "1pbilxh1gp2ywm5idfl0klhl4gb16j86ib4x83p8raql1dv88qia"; })
+  (fetchNuGet { pname = "xunit.runner.visualstudio"; version = "2.4.1"; sha256 = "0fln5pk18z98gp0zfshy1p9h6r9wc55nyqhap34k89yran646vhn"; })
+  (fetchNuGet { pname = "YamlDotNet.Signed"; version = "5.3.0"; sha256 = "1gnp5aa2zzg7v61bbn2ra1npy0p07szp5w8vqk44fdj3fcvrdxib"; })
+]
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dir-proj.patch b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dir-proj.patch
new file mode 100644
index 000000000000..9a75b12544a8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dir-proj.patch
@@ -0,0 +1,53 @@
+From 4267ee7fa5169b4fd5ce732118769e559806a390 Mon Sep 17 00:00:00 2001
+From: Vincent Haupert <mail@vincent-haupert.de>
+Date: Sat, 13 Mar 2021 21:52:03 +0100
+Subject: [PATCH] Patch dir.proj
+
+Don't execute Git for GitInfoCommitHash property
+Don't restore for build target
+Don't restore for test target
+---
+ src/dir.proj | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/src/dir.proj b/src/dir.proj
+index 1c91e0c..8b27d3f 100644
+--- a/src/dir.proj
++++ b/src/dir.proj
+@@ -2,9 +2,6 @@
+ <Project ToolsVersion="14.0" DefaultTargets="Build" 
+     xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+     <Target Name="GenerateConstant">
+-        <Exec Command="git rev-parse HEAD" ConsoleToMSBuild="true">
+-            <Output TaskParameter="ConsoleOutput" PropertyName="GitInfoCommitHash" />
+-        </Exec>
+         <Message Text="Building $(Product): $(GitInfoCommitHash) --- $(PackageRuntime)" Importance="high"/>
+ 
+         <ItemGroup>
+@@ -39,14 +36,13 @@
+     </ItemGroup>
+ 
+     <Target Name="Build" DependsOnTargets="GenerateConstant">
+-        <MSBuild Targets="Restore" Projects="@(ProjectFiles)" StopOnFirstFailure="true" />
+         <MSBuild Targets="Publish" Projects="@(ProjectFiles)" BuildInParallel="false" StopOnFirstFailure="true" Properties="Configuration=$(BUILDCONFIG);PackageRuntime=$(PackageRuntime);Version=$(RunnerVersion);RuntimeIdentifier=$(PackageRuntime);PublishDir=$(MSBuildProjectDirectory)/../_layout/bin" />
+         <Exec Command="%22$(DesktopMSBuild)%22 Runner.Service/Windows/RunnerService.csproj /p:Configuration=$(BUILDCONFIG) /p:OutputPath=%22$(MSBuildProjectDirectory)/../_layout/bin%22" ConsoleToMSBuild="true" Condition="'$(PackageRuntime)' == 'win-x64' Or '$(PackageRuntime)' == 'win-x86'" />
+     </Target>
+ 
+     <Target Name="Test" DependsOnTargets="GenerateConstant">
+-        <Exec Command="dotnet build Test/Test.csproj -c $(BUILDCONFIG) /p:PackageRuntime=$(PackageRuntime)" ConsoleToMSBuild="true" />
+-        <Exec Command="dotnet test Test/Test.csproj --no-build --logger:trx" ConsoleToMSBuild="true" />
++        <Exec Command="dotnet build Test/Test.csproj --no-restore -c $(BUILDCONFIG) /p:PackageRuntime=$(PackageRuntime)" ConsoleToMSBuild="true" />
++        <Exec Command="dotnet test Test/Test.csproj --no-restore --no-build --logger:trx" ConsoleToMSBuild="true" />
+     </Target>
+ 
+     <Target Name="Layout" DependsOnTargets="Clean;Build">
+@@ -84,4 +80,4 @@
+         <RemoveDir Directories="Test/bin" />
+         <RemoveDir Directories="Test/obj" />
+     </Target>
+-</Project>
+\ No newline at end of file
++</Project>
+-- 
+2.30.1
+
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dont-install-systemd-service.patch b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dont-install-systemd-service.patch
new file mode 100644
index 000000000000..6279a4ecb4b9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dont-install-systemd-service.patch
@@ -0,0 +1,15 @@
+diff --git a/src/Runner.Listener/Configuration/ConfigurationManager.cs b/src/Runner.Listener/Configuration/ConfigurationManager.cs
+index 8d08b06..bdfa3a2 100644
+--- a/src/Runner.Listener/Configuration/ConfigurationManager.cs
++++ b/src/Runner.Listener/Configuration/ConfigurationManager.cs
+@@ -320,10 +320,6 @@ namespace GitHub.Runner.Listener.Configuration
+                 serviceControlManager.ConfigureService(runnerSettings, command);
+             }
+ 
+-#elif OS_LINUX || OS_OSX
+-            // generate service config script for OSX and Linux, GenerateScripts() will no-opt on windows.
+-            var serviceControlManager = HostContext.GetService<ILinuxServiceControlManager>();
+-            serviceControlManager.GenerateScripts(runnerSettings);
+ #endif
+         }
+ 
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/host-context-dirs.patch b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/host-context-dirs.patch
new file mode 100644
index 000000000000..662ad9676da9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/host-context-dirs.patch
@@ -0,0 +1,20 @@
+diff --git a/src/Runner.Common/HostContext.cs b/src/Runner.Common/HostContext.cs
+index d4ea48c..2ec8455 100644
+--- a/src/Runner.Common/HostContext.cs
++++ b/src/Runner.Common/HostContext.cs
+@@ -220,12 +220,13 @@ namespace GitHub.Runner.Common
+ 
+                 case WellKnownDirectory.Externals:
+                     path = Path.Combine(
+-                        GetDirectory(WellKnownDirectory.Root),
++                        new DirectoryInfo(GetDirectory(WellKnownDirectory.Bin)).Parent.FullName,
+                         Constants.Path.ExternalsDirectory);
+                     break;
+ 
+                 case WellKnownDirectory.Root:
+-                    path = new DirectoryInfo(GetDirectory(WellKnownDirectory.Bin)).Parent.FullName;
++                    path = Environment.GetEnvironmentVariable("RUNNER_ROOT")
++                                ?? new DirectoryInfo(GetDirectory(WellKnownDirectory.Bin)).Parent.FullName;
+                     break;
+ 
+                 case WellKnownDirectory.Temp:
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/use-get-directory-for-diag.patch b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/use-get-directory-for-diag.patch
new file mode 100644
index 000000000000..ff91bcff158c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/use-get-directory-for-diag.patch
@@ -0,0 +1,25 @@
+diff --git a/src/Runner.Common/HostContext.cs b/src/Runner.Common/HostContext.cs
+index d4ea48c..15c1800 100644
+--- a/src/Runner.Common/HostContext.cs
++++ b/src/Runner.Common/HostContext.cs
+@@ -109,7 +109,7 @@ namespace GitHub.Runner.Common
+                 }
+ 
+                 // this should give us _diag folder under runner root directory
+-                string diagLogDirectory = Path.Combine(new DirectoryInfo(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)).Parent.FullName, Constants.Path.DiagDirectory);
++                string diagLogDirectory = GetDirectory(WellKnownDirectory.Diag);
+                 _traceManager = new TraceManager(new HostTraceListener(diagLogDirectory, hostType, logPageSize, logRetentionDays), this.SecretMasker);
+             }
+             else
+@@ -272,7 +272,10 @@ namespace GitHub.Runner.Common
+                     throw new NotSupportedException($"Unexpected well known directory: '{directory}'");
+             }
+ 
+-            _trace.Info($"Well known directory '{directory}': '{path}'");
++            if (_trace != null)
++            {
++                _trace.Info($"Well known directory '{directory}': '{path}'");
++            }
+             return path;
+         }
+ 
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..6dc0a7d30ee1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
@@ -0,0 +1,59 @@
+{ lib, buildGoModule, fetchFromGitLab, fetchurl }:
+
+let
+  version = "14.8.2";
+in
+buildGoModule rec {
+  inherit version;
+  pname = "gitlab-runner";
+
+  commonPackagePath = "gitlab.com/gitlab-org/gitlab-runner/common";
+  ldflags = [
+    "-X ${commonPackagePath}.NAME=gitlab-runner"
+    "-X ${commonPackagePath}.VERSION=${version}"
+    "-X ${commonPackagePath}.REVISION=v${version}"
+  ];
+
+  vendorSha256 = "1aa04hbavr0bclddp5adjwwj21sp46gbhjydxc3w7vs1siw0ivq2";
+
+  src = fetchFromGitLab {
+    owner = "gitlab-org";
+    repo = "gitlab-runner";
+    rev = "v${version}";
+    sha256 = "1zwr09lrrc3xx3sp00vs30ks0n77d7v0xkz0mz9jy2qdls9nfmrv";
+  };
+
+  patches = [
+    ./fix-shell-path.patch
+  ];
+
+  prePatch = ''
+    # Remove some tests that can't work during a nix build
+
+    # Requires to run in a git repo
+    sed -i "s/func TestCacheArchiverAddingUntrackedFiles/func OFF_TestCacheArchiverAddingUntrackedFiles/" commands/helpers/file_archiver_test.go
+    sed -i "s/func TestCacheArchiverAddingUntrackedUnicodeFiles/func OFF_TestCacheArchiverAddingUntrackedUnicodeFiles/" commands/helpers/file_archiver_test.go
+
+    # No writable developer environment
+    rm common/build_test.go
+    rm executors/custom/custom_test.go
+
+    # No docker during build
+    rm executors/docker/terminal_test.go
+    rm executors/docker/docker_test.go
+    rm helpers/docker/auth/auth_test.go
+  '';
+
+  preCheck = ''
+    # Make the tests pass outside of GitLab CI
+    export CI=0
+  '';
+
+  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 globin ];
+  };
+}
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..4a3d37be09cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/fix-shell-path.patch
@@ -0,0 +1,25 @@
+diff --git a/shells/bash.go b/shells/bash.go
+index bd99eca1a..9873dff6b 100644
+--- a/shells/bash.go
++++ b/shells/bash.go
+@@ -3,6 +3,7 @@ package shells
+ import (
+ 	"bytes"
+ 	"fmt"
++	"os/exec"
+ 	"path"
+ 	"runtime"
+ 	"strconv"
+@@ -300,7 +301,11 @@ func (b *BashShell) GetConfiguration(info common.ShellScriptInfo) (*common.Shell
+ 	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,
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..47b52e5f70b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gocd-agent/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "gocd-agent";
+  version = "19.3.0";
+  rev = "8959";
+
+  src = fetchurl {
+    url = "https://download.go.cd/binaries/${version}-${rev}/generic/go-agent-${version}-${rev}.zip";
+    sha256 = "1nirdv82i8x4s1dyb0rmxldh8avappd4g3mbbl6xp7r7s0drcprp";
+  };
+  meta = with 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 ];
+  };
+
+  nativeBuildInputs = [ 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..a55d3a2efe7b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gocd-server/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "gocd-server";
+  version = "19.3.0";
+  rev = "8959";
+
+  src = fetchurl {
+    url = "https://download.go.cd/binaries/${version}-${rev}/generic/go-server-${version}-${rev}.zip";
+    sha256 = "0c30qzd6awlw0zx91rk6na0mmgykqkgrw9ychx18ivjwma0hr0sc";
+  };
+
+  meta = with 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 ];
+  };
+
+  nativeBuildInputs = [ 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/hci/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/hci/default.nix
new file mode 100644
index 000000000000..5c0c59845ce6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/hci/default.nix
@@ -0,0 +1,23 @@
+{ haskell, haskellPackages, lib, makeWrapper, runc, stdenv }:
+let
+  inherit (haskell.lib.compose) overrideCabal addBuildDepends justStaticExecutables;
+  inherit (lib) makeBinPath;
+  bundledBins = lib.optional stdenv.isLinux runc;
+
+  pkg =
+    # justStaticExecutables is needed due to https://github.com/NixOS/nix/issues/2990
+    overrideCabal
+      (o: {
+        postInstall = ''
+          ${o.postInstall or ""}
+          mkdir -p $out/libexec
+          mv $out/bin/hci $out/libexec
+          makeWrapper $out/libexec/hci $out/bin/hci --prefix PATH : ${makeBinPath bundledBins}
+        '';
+      })
+      (addBuildDepends [ makeWrapper ] (justStaticExecutables haskellPackages.hercules-ci-cli));
+in pkg // {
+    meta = pkg.meta // {
+      position = toString ./default.nix + ":1";
+    };
+  }
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix
new file mode 100644
index 000000000000..00ae501e5348
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix
@@ -0,0 +1,31 @@
+{ gnutar, gzip, git, haskell, haskellPackages, lib, makeWrapper, nixos, runc, stdenv }:
+let
+  inherit (haskell.lib.compose) overrideCabal addBuildDepends justStaticExecutables;
+  inherit (lib) makeBinPath;
+  bundledBins = [ gnutar gzip git ] ++ lib.optional stdenv.isLinux runc;
+
+  pkg =
+    # justStaticExecutables is needed due to https://github.com/NixOS/nix/issues/2990
+    overrideCabal
+      (o: {
+        postInstall = ''
+          ${o.postInstall or ""}
+          mkdir -p $out/libexec
+          mv $out/bin/hercules-ci-agent $out/libexec
+          makeWrapper $out/libexec/hercules-ci-agent $out/bin/hercules-ci-agent --prefix PATH : ${makeBinPath bundledBins}
+        '';
+      })
+      (addBuildDepends [ makeWrapper ] (justStaticExecutables haskellPackages.hercules-ci-agent));
+in pkg.overrideAttrs (o: {
+    meta = o.meta // {
+      position = toString ./default.nix + ":1";
+    };
+    passthru = o.passthru // {
+      # Does not test the package, but evaluation of the related NixOS module.
+      tests.nixos-minimal-config = nixos {
+        boot.loader.grub.enable = false;
+        fileSystems."/".device = "bogus";
+        services.hercules-ci-agent.enable = true;
+      };
+    };
+  })
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..9c87c5f08f4c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, fetchurl, common-updater-scripts, coreutils, git, gnused
+, makeWrapper, nix, nixfmt, openjdk, writeScript, nixosTests, jq, cacert, curl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jenkins";
+  version = "2.332.1";
+
+  src = fetchurl {
+    url = "http://get.jenkins.io/war-stable/${version}/jenkins.war";
+    sha256 = "0xrrqdwfz19mr4wl4sdzk0qnq9rjdh65vd1386qsn6a4axwv652s";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    mkdir -p "$out/bin" "$out/share" "$out/webapps"
+
+    cp "$src" "$out/webapps/jenkins.war"
+
+    # Create the `jenkins-cli` command.
+    ${openjdk}/bin/jar -xf "$src" WEB-INF/lib/cli-${version}.jar \
+      && mv WEB-INF/lib/cli-${version}.jar "$out/share/jenkins-cli.jar"
+
+    makeWrapper "${openjdk}/bin/java" "$out/bin/jenkins-cli" \
+      --add-flags "-jar $out/share/jenkins-cli.jar"
+  '';
+
+  passthru = {
+    tests = { inherit (nixosTests) jenkins jenkins-cli; };
+
+    updateScript = writeScript "update.sh" ''
+      #!${stdenv.shell}
+      set -o errexit
+      PATH=${
+        lib.makeBinPath [
+          cacert
+          common-updater-scripts
+          coreutils
+          curl
+          git
+          gnused
+          jq
+          nix
+          nixfmt
+        ]
+      }
+
+      core_json="$(curl -s --fail --location https://updates.jenkins.io/stable/update-center.actual.json | jq .core)"
+      oldVersion=$(nix-instantiate --eval -E "with import ./. {}; lib.getVersion jenkins" | 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"
+        nixfmt "$default_nix"
+      else
+        echo "jenkins is already up-to-date"
+      fi
+    '';
+  };
+
+  meta = with 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 nequissimus ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/laminar/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/laminar/default.nix
new file mode 100644
index 000000000000..3c48506a6bf7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/laminar/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, lib
+, fetchurl
+, fetchFromGitHub
+, cmake
+, capnproto
+, sqlite
+, boost
+, zlib
+, rapidjson
+, pandoc
+}:
+let
+  js.vue = fetchurl {
+    url = "https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.12/vue.min.js";
+    sha256 = "1hm5kci2g6n5ikrvp1kpkkdzimjgylv1xicg2vnkbvd9rb56qa99";
+  };
+  js.ansi_up = fetchurl {
+    url = "https://raw.githubusercontent.com/drudru/ansi_up/v4.0.4/ansi_up.js";
+    sha256 = "1dx8wn38ds8d01kkih26fx1yrisg3kpz61qynjr4zil03ap0hrlr";
+  };
+  js.Chart = fetchurl {
+    url = "https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js";
+    sha256 = "1jh4h12qchsba03dx03mrvs4r8g9qfjn56xm56jqzgqf7r209xq9";
+  };
+in stdenv.mkDerivation rec {
+  pname = "laminar";
+  version = "1.2";
+  src = fetchFromGitHub {
+    owner = "ohwgiles";
+    repo = "laminar";
+    rev = version;
+    sha256 = "sha256-PLnfiWpelgKhs4FNry60sm6/QdhYs76FnZ/ZcRmb4Ok=";
+  };
+  patches = [ ./patches/no-network.patch ];
+  nativeBuildInputs = [ cmake pandoc ];
+  buildInputs = [ capnproto sqlite boost zlib rapidjson ];
+  preBuild = ''
+    mkdir -p js css
+    cp  ${js.vue}         js/vue.min.js
+    cp  ${js.ansi_up}     js/ansi_up.js
+    cp  ${js.Chart}       js/Chart.min.js
+  '';
+
+  postInstall = ''
+    mv $out/usr/share/* $out/share/
+    rmdir $out/usr/share $out/usr
+
+    mkdir -p $out/share/doc/laminar
+    pandoc -s ../UserManual.md -o $out/share/doc/laminar/UserManual.html
+    rm -rf $out/lib # remove upstream systemd units
+    rm -rf $out/etc # remove upstream config file
+  '';
+
+  meta = with lib; {
+    description = "Lightweight and modular continuous integration service";
+    homepage = "https://laminar.ohwg.net";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ kaction maralorn ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/laminar/patches/no-network.patch b/nixpkgs/pkgs/development/tools/continuous-integration/laminar/patches/no-network.patch
new file mode 100644
index 000000000000..33683fdb1519
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/laminar/patches/no-network.patch
@@ -0,0 +1,39 @@
+Build system that downloads stuff from network is bad. Build system that
+does so unconditionally is twice as bad.
+
+Required files are downloaded as separate fixed-output derivations and
+put into correct location before build phase starts.
+
+--- laminar-1.1/CMakeLists.txt
++++ laminar-1.1-new/CMakeLists.txt
+@@ -82,13 +82,6 @@
+     COMMAND sh -c '( echo -n "\\#define INDEX_HTML_UNCOMPRESSED_SIZE " && wc -c < "${CMAKE_SOURCE_DIR}/src/resources/index.html" ) > index_html_size.h'
+     DEPENDS src/resources/index.html)
+ 
+-# Download 3rd-party frontend JS libs...
+-file(DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.12/vue.min.js
+-	js/vue.min.js EXPECTED_MD5 fb192338844efe86ec759a40152fcb8e)
+-file(DOWNLOAD https://raw.githubusercontent.com/drudru/ansi_up/v4.0.4/ansi_up.js
+-        js/ansi_up.js EXPECTED_MD5 b31968e1a8fed0fa82305e978161f7f5)
+-file(DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js
+-        js/Chart.min.js EXPECTED_MD5 f6c8efa65711e0cbbc99ba72997ecd0e)
+ # ...and compile them
+ generate_compressed_bins(${CMAKE_BINARY_DIR} js/vue.min.js
+     js/ansi_up.js js/Chart.min.js)
+@@ -139,12 +132,12 @@
+     target_link_libraries(laminar-tests ${GTEST_LIBRARY} capnp-rpc capnp kj-http kj-async kj pthread sqlite3 z)
+ endif()
+ 
+-set(SYSTEMD_UNITDIR /lib/systemd/system CACHE PATH "Path to systemd unit files")
+-set(BASH_COMPLETIONS_DIR /usr/share/bash-completion/completions CACHE PATH "Path to bash completions directory")
+-set(ZSH_COMPLETIONS_DIR /usr/share/zsh/site-functions CACHE PATH "Path to zsh completions directory")
++set(SYSTEMD_UNITDIR lib/systemd/system CACHE PATH "Path to systemd unit files")
++set(BASH_COMPLETIONS_DIR usr/share/bash-completion/completions CACHE PATH "Path to bash completions directory")
++set(ZSH_COMPLETIONS_DIR usr/share/zsh/site-functions CACHE PATH "Path to zsh completions directory")
+ install(TARGETS laminard RUNTIME DESTINATION sbin)
+ install(TARGETS laminarc RUNTIME DESTINATION bin)
+-install(FILES etc/laminar.conf DESTINATION /etc)
++install(FILES etc/laminar.conf DESTINATION etc)
+ install(FILES etc/laminarc-completion.bash DESTINATION ${BASH_COMPLETIONS_DIR} RENAME laminarc)
+ install(FILES etc/laminarc-completion.zsh DESTINATION ${ZSH_COMPLETIONS_DIR} RENAME _laminarc)
+ 
diff --git a/nixpkgs/pkgs/development/tools/convco/default.nix b/nixpkgs/pkgs/development/tools/convco/default.nix
new file mode 100644
index 000000000000..6094df8757a0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/convco/default.nix
@@ -0,0 +1,35 @@
+{ stdenv
+, lib
+, rustPlatform
+, fetchFromGitHub
+, cmake
+, libiconv
+, openssl
+, pkg-config
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "convco";
+  version = "0.3.9";
+
+  src = fetchFromGitHub {
+    owner = "convco";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ys7fuaD1jj3tWD6U+BRvqFneZEdKV5c1RO2FLEtqIUk=";
+  };
+
+  cargoSha256 = "sha256-5/uF0aPNNNUruRF8euuEnGSJHsRehSZipa0677zc12c=";
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  meta = with lib; {
+    description = "A Conventional commit cli";
+    homepage = "https://github.com/convco/convco";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ hoverbear ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/corgi/default.nix b/nixpkgs/pkgs/development/tools/corgi/default.nix
new file mode 100644
index 000000000000..ce003457e23d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/corgi/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "corgi";
+  version = "0.2.4";
+
+  goPackagePath = "github.com/DrakeW/corgi";
+
+  src = fetchFromGitHub {
+    owner = "DrakeW";
+    repo = "corgi";
+    rev = "v${version}";
+    sha256 = "0h9rjv1j129n1ichwpiiyspgim1273asi3s6hgizvbc75gbbb8fn";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with 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;
+    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..596a689e3a2d
--- /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
+   2.1.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..62d00cbc3768
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/corundum/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "corundum";
+  gemdir = ./.;
+  exes = [ "corundum-skel" ];
+
+  passthru.updateScript = bundlerUpdateScript "corundum";
+
+  meta = with lib; {
+    description = "Tool and libraries for maintaining Ruby gems";
+    homepage    = "https://github.com/nyarly/corundum";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ nyarly nicknovitski ];
+    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..a6ec2f2b9b91
--- /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";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/coursier/default.nix b/nixpkgs/pkgs/development/tools/coursier/default.nix
new file mode 100644
index 000000000000..c7450f738a1e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/coursier/default.nix
@@ -0,0 +1,65 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre, writeScript, common-updater-scripts
+, coreutils, git, gnused, nix, nixfmt }:
+
+let
+  version = "2.1.0-M1";
+
+  zshCompletion = fetchurl {
+    url =
+      "https://raw.githubusercontent.com/coursier/coursier/v${version}/modules/cli/src/main/resources/completions/zsh";
+    sha256 = "0afxzrk9w1qinfsz55jjrxydw0fcv6p722g1q955dl7f6xbab1jh";
+  };
+
+  repo = "git@github.com:coursier/coursier.git";
+in stdenv.mkDerivation rec {
+  inherit version;
+
+  pname = "coursier";
+
+  src = fetchurl {
+    url =
+      "https://github.com/coursier/coursier/releases/download/v${version}/coursier";
+    sha256 = "sha256-JeqWzAkSSqhdbgkse1uSA3k4bupepWuvx6GUtBfodcg=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    install -Dm555 $src $out/bin/cs
+    patchShebangs $out/bin/cs
+    wrapProgram $out/bin/cs --prefix PATH ":" ${jre}/bin
+
+    # copy zsh completion
+    install -Dm755 ${zshCompletion} $out/share/zsh/site-functions/_cs
+  '';
+
+  passthru.updateScript = writeScript "update.sh" ''
+    #!${stdenv.shell}
+    set -o errexit
+    PATH=${
+      lib.makeBinPath [ common-updater-scripts coreutils git gnused nix nixfmt ]
+    }
+    oldVersion="$(nix-instantiate --eval -E "with import ./. {}; lib.getVersion ${pname}" | tr -d '"')"
+    latestTag="$(git -c 'versionsort.suffix=-' ls-remote --exit-code --refs --sort='version:refname' --tags ${repo} 'v*.*.*' | tail --lines=1 | cut --delimiter='/' --fields=3 | sed 's|^v||g')"
+    if [ "$oldVersion" != "$latestTag" ]; then
+      nixpkgs="$(git rev-parse --show-toplevel)"
+      default_nix="$nixpkgs/pkgs/development/tools/coursier/default.nix"
+      update-source-version ${pname} "$latestTag" --version-key=version --print-changes
+      url="${builtins.head zshCompletion.urls}"
+      completion_url=$(echo $url | sed "s|$oldVersion|$latestTag|g")
+      completion_sha256="$(nix-prefetch-url --type sha256 $completion_url)"
+      sed -i "s|${zshCompletion.outputHash}|$completion_sha256|g" "$default_nix"
+      nixfmt "$default_nix"
+    else
+      echo "${pname} is already up-to-date"
+    fi
+  '';
+
+  meta = with 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..460d7cddb83d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cppclean/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "cppclean";
+  version = "0.13";
+
+  src = fetchFromGitHub {
+    owner  = "myint";
+    repo   = "cppclean";
+    rev    = "v${version}";
+    sha256 = "081bw7kkl7mh3vwyrmdfrk3fgq8k5laacx7hz8fjpchrvdrkqph0";
+  };
+
+  postUnpack = ''
+    patchShebangs .
+    '';
+
+  checkPhase = ''
+    ./test.bash
+    '';
+
+  meta = with 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/crd2pulumi/default.nix b/nixpkgs/pkgs/development/tools/crd2pulumi/default.nix
new file mode 100644
index 000000000000..a1d5a69e94af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/crd2pulumi/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "crd2pulumi";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "pulumi";
+    repo = "crd2pulumi";
+    rev = "v${version}";
+    sha256 = "sha256-jGCtHDceJMGG2WHRldEyToZRNp3ZTt4Tir7DAsaWgfI=";
+  };
+
+  vendorSha256 = "sha256-XM1uedApVLkFzUpNPYS5YyMiWrOpzTvqKjWIV7s/1mI=";
+
+  ldflags = [ "-s" "-w" "-X github.com/pulumi/crd2pulumi/gen.Version=${src.rev}" ];
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Generate typed CustomResources from a Kubernetes CustomResourceDefinition";
+    homepage = "https://github.com/pulumi/crd2pulumi";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ flokli ];
+  };
+}
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..82a972144938
--- /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
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/cucumber/default.nix b/nixpkgs/pkgs/development/tools/cucumber/default.nix
new file mode 100644
index 000000000000..fdd77be07f7f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cucumber/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "cucumber";
+  gemdir = ./.;
+  exes = [ "cucumber" ];
+
+  passthru.updateScript = bundlerUpdateScript "cucumber";
+
+  meta = with lib; {
+    description = "A tool for executable specifications";
+    homepage    = "https://cucumber.io/";
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ manveru nicknovitski ];
+    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..d96d90718063
--- /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";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/cue/default.nix b/nixpkgs/pkgs/development/tools/cue/default.nix
new file mode 100644
index 000000000000..21370ab9b5a3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/cue/default.nix
@@ -0,0 +1,35 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "cue";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "cue-lang";
+    repo = "cue";
+    rev = "v${version}";
+    sha256 = "sha256-6HD3wcBo21Dep4ckx+oDWAC4nuTvCzlp0bwQxZox2b4=";
+  };
+
+  vendorSha256 = "sha256-tY9iwQW6cB1FgLAmkDNMrvIxR+i4aGYhNs4tepI654o=";
+
+  checkPhase = "go test ./...";
+
+  subPackages = [ "cmd/cue" ];
+
+  ldflags = [
+    "-s" "-w" "-X cuelang.org/go/cmd/cue/cmd.version=${version}"
+  ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/cue eval - <<<'a: "all good"' > /dev/null
+  '';
+
+  meta = {
+    description = "A data constraint language which aims to simplify tasks involving defining and using data";
+    homepage = "https://cuelang.org/";
+    maintainers = [];
+    license = lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dapper/default.nix b/nixpkgs/pkgs/development/tools/dapper/default.nix
new file mode 100644
index 000000000000..45e4614b448a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dapper/default.nix
@@ -0,0 +1,30 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  pname = "dapper";
+  version = "0.5.8";
+
+  goPackagePath = "github.com/rancher/dapper";
+
+  src = fetchFromGitHub {
+    owner = "rancher";
+    repo = "dapper";
+    rev = "v${version}";
+    sha256 = "sha256-t1w8bhwCjZHmvgBG6Tv8kgqTbC7v5P5QOvJGuTJUC04=";
+  };
+   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/dapr/cli/default.nix b/nixpkgs/pkgs/development/tools/dapr/cli/default.nix
new file mode 100644
index 000000000000..59e04455c2a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dapr/cli/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "dapr";
+  version = "1.1.0";
+
+  vendorSha256 = "0fng5a1pvpbwil79xapdalzgkgc9dwsdxs6bznjfwnkyd1vvw6fm";
+
+  src = fetchFromGitHub {
+    sha256 = "0x2mvlzlmcik6ys6xp722px9l4lj9ssyxb06bzxd7yj7m1wwcwp9";
+
+    owner = "dapr";
+    repo = "cli";
+    rev = "v${version}";
+  };
+
+  doCheck = false;
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/dapr
+  '';
+
+  meta = with lib; {
+    homepage = "https://dapr.io";
+    description = "A CLI for managing Dapr, the distributed application runtime";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lucperkins ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/beekeeper-studio/default.nix b/nixpkgs/pkgs/development/tools/database/beekeeper-studio/default.nix
new file mode 100644
index 000000000000..c00c2e99a14e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/beekeeper-studio/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchurl, appimageTools, pkgs }:
+
+let
+  pname = "beekeeper-studio";
+  version = "3.1.0";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/beekeeper-studio/beekeeper-studio/releases/download/v${version}/Beekeeper-Studio-${version}.AppImage";
+    name="${pname}-${version}.AppImage";
+    sha512 = "sha512:1zv4fclac94fzzhgqmjgc5pllxcxajjx6yjf3zblj53cc7m4sp4ydjx3wh4db57j75x8vh7xc3q1xpq6q3sj1dafnap0j0icfi6wznk";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit name src;
+  };
+in appimageTools.wrapType2 {
+  inherit name src;
+
+  multiPkgs = null; # no 32bit needed
+  extraPkgs = pkgs: appimageTools.defaultFhsEnvArgs.multiPkgs pkgs ++ [ pkgs.bash ];
+
+  extraInstallCommands = ''
+    ln -s $out/bin/${name} $out/bin/${pname}
+    install -m 444 -D ${appimageContents}/${pname}.desktop $out/share/applications/${pname}.desktop
+    install -m 444 -D ${appimageContents}/${pname}.png \
+      $out/share/icons/hicolor/512x512/apps/${pname}.png
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "Modern and easy to use SQL client for MySQL, Postgres, SQLite, SQL Server, and more. Linux, MacOS, and Windows";
+    homepage = "https://www.beekeeperstudio.io";
+    changelog = "https://github.com/beekeeper-studio/beekeeper-studio/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ milogert alexnortung ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
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..b9ebba554774
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/cdb/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, lib, fetchurl, fetchFromGitHub }:
+
+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 {
+  pname = "cdb";
+  inherit 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.html";
+    license = lib.licenses.publicDomain;
+    maintainers = [ lib.maintainers.Profpatsch ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/clickhouse-backup/default.nix b/nixpkgs/pkgs/development/tools/database/clickhouse-backup/default.nix
new file mode 100644
index 000000000000..fdc15a9256dd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/clickhouse-backup/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "clickhouse-backup";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "AlexAkulov";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-M9fJFdwNyNOolXFknzEPG7pNDVrqKv/WOQZUHmr8B84=";
+  };
+
+  vendorSha256 = "sha256-d6h0LK4zbrfkUum7FXHIP+hqBx5A0mQmvW5GOi+EMVQ=";
+
+  postConfigure = ''
+    export CGO_ENABLED=0
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/AlexAkulov/clickhouse-backup";
+    description = "Tool for easy ClickHouse backup and restore with cloud storages support";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ma27 ];
+    platforms = platforms.linux;
+  };
+}
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..313d2480e95a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/dbmate/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "dbmate";
+  version = "1.14.0";
+
+  src = fetchFromGitHub {
+    owner = "amacneil";
+    repo = "dbmate";
+    rev = "v${version}";
+    sha256 = "sha256-CgThS10mDYRj/VdVJeeVTMEbhvLLpWBweQ4dvo3k3Hg=";
+  };
+
+  vendorSha256 = "sha256-cbMCGC78vc61F4cEobarMPwVts2V3NkH4/CnHGeLd/o=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Database migration tool";
+    homepage = "https://github.com/amacneil/dbmate";
+    license = licenses.mit;
+    maintainers = [ maintainers.manveru ];
+    platforms = platforms.unix;
+  };
+}
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..0fb3ae81030b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/ephemeralpg/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, postgresql, getopt, makeWrapper }:
+stdenv.mkDerivation rec {
+  pname = "ephemeralpg";
+  version = "3.1";
+  src = fetchurl {
+    url = "http://ephemeralpg.org/code/${pname}-${version}.tar.gz";
+    sha256 = "1ap22ki8yz6agd0qybcjgs4b9izw1rwwcgpxn3jah2ccfyax34s6";
+  };
+  nativeBuildInputs = [ makeWrapper ];
+  installPhase = ''
+    mkdir -p $out
+    PREFIX=$out make install
+    wrapProgram $out/bin/pg_tmp --prefix PATH : ${lib.makeBinPath [ postgresql getopt ]}
+  '';
+  meta = with 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/gobang/default.nix b/nixpkgs/pkgs/development/tools/database/gobang/default.nix
new file mode 100644
index 000000000000..b3611169996c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/gobang/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, CoreFoundation
+, Security
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gobang";
+  version = "0.1.0-alpha.5";
+
+  src = fetchFromGitHub {
+    owner = "tako8ki";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "02glb3hlprpdc72ji0248a7g0vr36yxr0gfbbms2m25v251dyaa6";
+  };
+
+  cargoSha256 = "sha256-Tiefet5gLpiuYY6Scg5fjnaPiZfVl5Gy2oZFdhgNRxY=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    CoreFoundation
+    Security
+    SystemConfiguration
+  ];
+
+  meta = with lib; {
+    description = "A cross-platform TUI database management tool written in Rust";
+    homepage = "https://github.com/tako8ki/gobang";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/indradb/default.nix b/nixpkgs/pkgs/development/tools/database/indradb/default.nix
new file mode 100644
index 000000000000..f577963e8f4b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/indradb/default.nix
@@ -0,0 +1,51 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+, rustPlatform
+, rustfmt
+}:
+let
+  src = fetchFromGitHub {
+    owner = "indradb";
+    repo = "indradb";
+    rev = "06134dde5bb53eb1d2aaa52afdaf9ff3bf1aa674";
+    sha256 = "sha256-g4Jam7yxMc+piYQzgMvVsNTF+ce1U3thzYl/M9rKG4o=";
+  };
+
+  meta = with lib; {
+    description = "A graph database written in rust ";
+    homepage = "https://github.com/indradb/indradb";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ happysalada ];
+    platforms = platforms.unix;
+  };
+in
+{
+  indradb-server = rustPlatform.buildRustPackage {
+    pname = "indradb-server";
+    version = "unstable-2021-01-05";
+    inherit src;
+
+    cargoSha256 = "sha256-3WtiW31AkyNX7HiT/zqfNo2VSKR7Q57/wCigST066Js=";
+
+    buildAndTestSubdir = "server";
+
+    nativeBuildInputs = [ rustfmt ];
+
+    # test rely on libindradb and it can't be found
+    # failure at https://github.com/indradb/indradb/blob/master/server/tests/plugins.rs#L63
+    # `let _server = Server::start(&format!("../target/debug/libindradb_plugin_*.{}", LIBRARY_EXTENSION)).unwrap();`
+    doCheck = false;
+  };
+  indradb-client = rustPlatform.buildRustPackage {
+    pname = "indradb-client";
+    version = "unstable-2021-01-05";
+    inherit src;
+
+    cargoSha256 = "sha256-pxan6W/CEsOxv8DbbytEBuIqxWn/C4qT4ze/RnvESOM=";
+
+    nativeBuildInputs = [ rustfmt ];
+
+    buildAndTestSubdir = "client";
+  };
+}
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..06f4c947b205
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/liquibase/default.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv, fetchurl, jre, makeWrapper
+, mysqlSupport ? true, mysql_jdbc
+, postgresqlSupport ? true, postgresql_jdbc }:
+
+let
+  extraJars =
+    lib.optional mysqlSupport mysql_jdbc
+    ++ lib.optional postgresqlSupport postgresql_jdbc;
+in
+
+stdenv.mkDerivation rec {
+  pname = "liquibase";
+  version = "4.8.0";
+
+  src = fetchurl {
+    url = "https://github.com/liquibase/liquibase/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-dGK26S9wd+GFiGXEA9UvDc4b1m0DsfrpB4FcEIJf6zM=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  unpackPhase = ''
+    tar xfz ${src}
+  '';
+
+  installPhase =
+    let addJars = dir: ''
+      for jar in ${dir}/*.jar; do
+        CP="\$CP":"\$jar"
+      done
+    '';
+    in ''
+      mkdir -p $out
+      mv ./{lib,licenses,liquibase.jar} $out/
+
+      mkdir -p $out/share/doc/${pname}-${version}
+      mv LICENSE.txt \
+         README.txt \
+         ABOUT.txt \
+         changelog.txt \
+         $out/share/doc/${pname}-${version}
+
+      mkdir -p $out/bin
+      # 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"}
+      ${lib.concatStringsSep "\n" (map (p: addJars "${p}/share/java") extraJars)}
+
+      ${lib.getBin jre}/bin/java -cp "\$CP" \$JAVA_OPTS \
+        liquibase.integration.commandline.Main \''${1+"\$@"}
+      EOF
+      chmod +x $out/bin/liquibase
+  '';
+
+  meta = with lib; {
+    description = "Version Control for your database";
+    homepage = "https://www.liquibase.org/";
+    changelog = "https://raw.githubusercontent.com/liquibase/liquibase/v${version}/changelog.txt";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    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..b2a96ab0dc53
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/litecli/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "litecli";
+  version = "1.6.0";
+  disabled = python3Packages.pythonOlder "3.4";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-TSdOFHW007syOEg4gwvEqDiJkrfLgRmqjP/H/6oBZ/k=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    cli-helpers
+    click
+    configobj
+    prompt-toolkit
+    pygments
+    sqlparse
+  ];
+
+  checkInputs = with python3Packages; [
+    pytestCheckHook
+    mock
+  ];
+
+  pythonImportsCheck = [ "litecli" ];
+
+  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";
+    changelog = "https://github.com/dbcli/litecli/blob/v${version}/CHANGELOG.md";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ Scriptkiddi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/litestream/default.nix b/nixpkgs/pkgs/development/tools/database/litestream/default.nix
new file mode 100644
index 000000000000..6a7e53e6cf20
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/litestream/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+buildGoModule rec {
+  pname = "litestream";
+  version = "0.3.7";
+
+  src = fetchFromGitHub {
+    owner = "benbjohnson";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-IEdTLf+fEp19FhwL3IaGT9HGKQoa6HwFox2gf0lvFu4=";
+  };
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+  ];
+
+  vendorSha256 = "sha256-ScG8cukUuChOvN9r0HvVJsYnu1X9DSO7aD32iu55jIM=";
+
+  meta = with lib; {
+    description = "Streaming replication for SQLite";
+    license = licenses.asl20;
+    homepage = "https://litestream.io/";
+    maintainers = with maintainers; [ fbrs ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/movine/default.nix b/nixpkgs/pkgs/development/tools/database/movine/default.nix
new file mode 100644
index 000000000000..fd5debcb9a20
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/movine/default.nix
@@ -0,0 +1,54 @@
+{ rustPlatform
+, fetchFromGitHub
+, lib
+, stdenv
+, pkg-config
+, postgresql
+, sqlite
+, openssl
+, Security
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "movine";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "byronwasti";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0rms8np8zd23xzrd5avhp2q1ndhdc8f49lfwpff9h0slw4rnzfnj";
+  };
+
+  cargoSha256 = "sha256-4ghfenwmauR4Ft9n7dvBflwIMXPdFq1vh6FpIegHnZk=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ postgresql sqlite ] ++ (
+    if !stdenv.isDarwin then [ openssl ] else [ Security libiconv ]
+  );
+
+  meta = with lib; {
+    description = "A migration manager written in Rust, that attempts to be smart yet minimal";
+    homepage = "https://github.com/byronwasti/movine";
+    license = licenses.mit;
+    longDescription = ''
+      Movine is a simple database migration manager that aims to be compatible
+      with real-world migration work. Many migration managers get confused
+      with complicated development strategies for migrations. Oftentimes
+      migration managers do not warn you if the SQL saved in git differs from
+      what was actually run on the database. Movine solves this issue by
+      keeping track of the unique hashes for the <literal>up.sql</literal> and
+      <literal>down.sql</literal> for each migration, and provides tools for
+      fixing issues. This allows users to easily keep track of whether their
+      local migration history matches the one on the database.
+
+      This project is currently in early stages.
+
+      Movine does not aim to be an ORM.
+      Consider <link xling:href="https://diesel.rs/">diesel</link> instead if
+      you want an ORM.
+    '';
+    maintainers = with maintainers; [ netcrns ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/pg_activity/default.nix b/nixpkgs/pkgs/development/tools/database/pg_activity/default.nix
new file mode 100644
index 000000000000..6282a6b69e5e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pg_activity/default.nix
@@ -0,0 +1,31 @@
+{ python3Packages, fetchFromGitHub, lib }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "pg_activity";
+  version = "2.3.0";
+  disabled = python3Packages.pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "dalibo";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-O5ACTWsHoIty+QLTGaSuk985qduH7xBjviiH4yCrY2o=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    attrs
+    blessed
+    humanize
+    psutil
+    psycopg2
+  ];
+
+  pythonImportsCheck = [ "pgactivity" ];
+
+  meta = with lib; {
+    description = "A top like application for PostgreSQL server activity monitoring";
+    homepage = "https://github.com/dalibo/pg_activity";
+    license = licenses.postgresql;
+    maintainers = with maintainers; [ mausch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/pg_checksums/default.nix b/nixpkgs/pkgs/development/tools/database/pg_checksums/default.nix
new file mode 100644
index 000000000000..b7883bd1bf01
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pg_checksums/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, libxslt, docbook_xsl, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_checksums";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "credativ";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Ij+4ceQauX3tC97ftk/JS3/WlocPBf7A7PJrylpTLzw=";
+  };
+
+  nativeBuildInputs = [ libxslt.bin ];
+
+  buildInputs = [ postgresql ];
+
+  buildFlags = [ "all" "man" ];
+
+  preConfigure = ''
+    substituteInPlace doc/stylesheet-man.xsl \
+      --replace "http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl" "${docbook_xsl}/xml/xsl/docbook/manpages/docbook.xsl"
+  '';
+
+  installPhase = ''
+    install -Dm755 -t $out/bin pg_checksums_ext
+    install -Dm644 -t $out/share/man/man1 doc/man1/pg_checksums_ext.1
+  '';
+
+  meta = with lib; {
+    description = "Activate/deactivate/verify checksums in offline PostgreSQL clusters";
+    homepage = "https://github.com/credativ/pg_checksums";
+    maintainers = [ maintainers.marsam ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.postgresql;
+  };
+}
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..e8f053679c32
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pgcli/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv
+, buildPythonApplication
+, fetchPypi
+, isPy3k
+, cli-helpers
+, click
+, configobj
+, humanize
+, prompt-toolkit
+, psycopg2
+, pygments
+, sqlparse
+, pgspecial
+, setproctitle
+, keyring
+, pendulum
+, pytestCheckHook
+, mock
+}:
+
+buildPythonApplication rec {
+  pname = "pgcli";
+  version = "3.3.1";
+
+  disabled = !isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-/MyeVcpopK0Ih6z6KZGvs7ivk/PM6a2iSeatiYeZM6E=";
+  };
+
+  propagatedBuildInputs = [
+    cli-helpers
+    click
+    configobj
+    humanize
+    prompt-toolkit
+    psycopg2
+    pygments
+    sqlparse
+    pgspecial
+    setproctitle
+    keyring
+    pendulum
+  ];
+
+  checkInputs = [ pytestCheckHook mock ];
+
+  disabledTests = lib.optionals stdenv.isDarwin [ "test_application_name_db_uri" ];
+
+  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";
+    changelog = "https://github.com/dbcli/pgcli/raw/v${version}/changelog.rst";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ dywedir ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/pgsync/Gemfile b/nixpkgs/pkgs/development/tools/database/pgsync/Gemfile
new file mode 100644
index 000000000000..f87a033ad7db
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pgsync/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'pgsync'
diff --git a/nixpkgs/pkgs/development/tools/database/pgsync/Gemfile.lock b/nixpkgs/pkgs/development/tools/database/pgsync/Gemfile.lock
new file mode 100644
index 000000000000..e6cb2fb570ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pgsync/Gemfile.lock
@@ -0,0 +1,23 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    parallel (1.21.0)
+    pg (1.2.3)
+    pgsync (0.6.8)
+      parallel
+      pg (>= 0.18.2)
+      slop (>= 4.8.2)
+      tty-spinner
+    slop (4.9.1)
+    tty-cursor (0.7.1)
+    tty-spinner (0.9.3)
+      tty-cursor (~> 0.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  pgsync
+
+BUNDLED WITH
+   2.2.24
diff --git a/nixpkgs/pkgs/development/tools/database/pgsync/default.nix b/nixpkgs/pkgs/development/tools/database/pgsync/default.nix
new file mode 100644
index 000000000000..7e075784f122
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pgsync/default.nix
@@ -0,0 +1,16 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp rec {
+  gemdir = ./.;
+  pname = "pgsync";
+  exes = [ "pgsync" ];
+
+  passthru.updateScript = bundlerUpdateScript "pgsync";
+
+  meta = with lib; {
+    description = "Sync data from one Postgres database to another (like `pg_dump`/`pg_restore`)";
+    homepage    = "https://github.com/ankane/pgsync";
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ fabianhjr ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/pgsync/gemset.nix b/nixpkgs/pkgs/development/tools/database/pgsync/gemset.nix
new file mode 100644
index 000000000000..cc456be8eb0f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pgsync/gemset.nix
@@ -0,0 +1,64 @@
+{
+  parallel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hkfpm78c2vs1qblnva3k1grijvxh87iixcnyd83s3lxrxsjvag4";
+      type = "gem";
+    };
+    version = "1.21.0";
+  };
+  pg = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13mfrysrdrh8cka1d96zm0lnfs59i5x2g6ps49r2kz5p3q81xrzj";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  pgsync = {
+    dependencies = ["parallel" "pg" "slop" "tty-spinner"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rsm1irmz97v1kxhnq4lbwwiapqa2zkx0n0xlcf68ca8sfcfql1z";
+      type = "gem";
+    };
+    version = "0.6.8";
+  };
+  slop = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "067bvjmjdjs19bvy138hkqqvw8li3732radcd4x5f5dbf30yk3a9";
+      type = "gem";
+    };
+    version = "4.9.1";
+  };
+  tty-cursor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j5zw041jgkmn605ya1zc151bxgxl6v192v2i26qhxx7ws2l2lvr";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  tty-spinner = {
+    dependencies = ["tty-cursor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hh5awmijnzw9flmh5ak610x1d00xiqagxa5mbr63ysggc26y0qf";
+      type = "gem";
+    };
+    version = "0.9.3";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/pgweb/default.nix b/nixpkgs/pkgs/development/tools/database/pgweb/default.nix
new file mode 100644
index 000000000000..de9d0847f8b6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pgweb/default.nix
@@ -0,0 +1,26 @@
+{ buildGoPackage, fetchFromGitHub, lib }:
+
+buildGoPackage rec {
+  pname = "pgweb";
+  version = "0.11.7";
+
+  src = fetchFromGitHub {
+    owner = "sosedoff";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1df3vixxca80i040apbim80nqni94q882ykn3cglyccyl0iz59ix";
+  };
+
+  goPackagePath = "github.com/sosedoff/pgweb";
+
+  meta = with lib; {
+    description = "A web-based database browser for PostgreSQL";
+    longDescription = ''
+      A simple postgres browser that runs as a web server. You can view data,
+      run queries and examine tables and indexes.
+    '';
+    homepage = "https://sosedoff.github.io/pgweb/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zupo ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/prisma-engines/default.nix b/nixpkgs/pkgs/development/tools/database/prisma-engines/default.nix
new file mode 100644
index 000000000000..48456166b92b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/prisma-engines/default.nix
@@ -0,0 +1,61 @@
+{ fetchFromGitHub
+, lib
+, Security
+, openssl
+, pkg-config
+, protobuf
+, rustPlatform
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "prisma-engines";
+  version = "3.10.0";
+
+  src = fetchFromGitHub {
+    owner = "prisma";
+    repo = "prisma-engines";
+    rev = version;
+    sha256 = "sha256-0m0RjIasEGB9QxZc7wKCMLnxHXkSlvCDA2QWa87mRRs=";
+  };
+
+  # Use system openssl.
+  OPENSSL_NO_VENDOR = 1;
+
+  cargoSha256 = "sha256-KNQa+wLLl4abz48QKYkWu7A+FTGIyB+1EWAnLuWpJwc=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    openssl
+    protobuf
+  ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  preBuild = ''
+    export OPENSSL_DIR=${lib.getDev openssl}
+    export OPENSSL_LIB_DIR=${openssl.out}/lib
+
+    export PROTOC=${protobuf}/bin/protoc
+    export PROTOC_INCLUDE="${protobuf}/include";
+
+    export SQLITE_MAX_VARIABLE_NUMBER=250000
+    export SQLITE_MAX_EXPR_DEPTH=10000
+  '';
+
+  cargoBuildFlags = "-p query-engine -p query-engine-node-api -p migration-engine-cli -p introspection-core -p prisma-fmt";
+
+  postInstall = ''
+    mv $out/lib/libquery_engine${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/libquery_engine.node
+  '';
+
+  # Tests are long to compile
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A collection of engines that power the core stack for Prisma";
+    homepage = "https://www.prisma.io/";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ pamplemousse pimeys ];
+  };
+}
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..220554f95d90
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/pyrseas/default.nix
@@ -0,0 +1,45 @@
+{ lib, python2Packages, fetchFromGitHub }:
+
+let
+  pgdbconn = python2Packages.buildPythonPackage rec {
+    pname = "pgdbconn";
+    version = "0.8.0";
+    src = fetchFromGitHub {
+      owner = "perseas";
+      repo = "pgdbconn";
+      rev = "v${version}";
+      sha256 = "09r4idk5kmqi3yig7ip61r6js8blnmac5n4q32cdcbp1rcwzdn6z";
+    };
+    # The tests are impure (they try to access a PostgreSQL server)
+    doCheck = false;
+    propagatedBuildInputs = [
+      python2Packages.psycopg2
+      python2Packages.pytest
+    ];
+  };
+in
+
+python2Packages.buildPythonApplication {
+  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 = [
+    python2Packages.psycopg2
+    python2Packages.pytest
+    python2Packages.pyyaml
+    pgdbconn
+  ];
+  meta = {
+    description = "A declarative language to describe PostgreSQL databases";
+    homepage = "https://perseas.github.io/";
+    license = lib.licenses.bsd3;
+    maintainers = with 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..264d2cc3264c
--- /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.1.0";
+  pname = "schemaspy";
+
+  src = fetchurl {
+    url = "https://github.com/schemaspy/schemaspy/releases/download/v${version}/${pname}-${version}.jar";
+    sha256 = "0lgz6b17hx9857fb2l03ggz8y3n8a37vrcsylif0gmkwj1v4qgl7";
+  };
+
+  dontUnpack = true;
+
+  buildInputs = [
+    jre
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  wrappedPath = lib.makeBinPath [
+    graphviz
+  ];
+
+  installPhase = ''
+    install -D ${src} "$out/share/java/${pname}-${version}.jar"
+
+    makeWrapper ${jre}/bin/java $out/bin/schemaspy \
+      --add-flags "-jar $out/share/java/${pname}-${version}.jar" \
+      --prefix PATH : "$wrappedPath"
+  '';
+
+  meta = with lib; {
+    homepage = "https://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..5bb023931388
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/shmig/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub
+, withMySQL ? true, withPSQL ? false, withSQLite ? false
+, mariadb, postgresql, sqlite, gawk, gnugrep, findutils, gnused
+, lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "shmig";
+  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 "${mariadb.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" \
+      --replace "grep" "${gnugrep}/bin/grep" \
+      --replace "find" "${findutils}/bin/find" \
+      --replace "sed" "${gnused}/bin/sed"
+  '';
+
+  preBuild = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Minimalistic database migration tool with MySQL, PostgreSQL and SQLite support";
+    homepage = "https://github.com/mbucc/shmig";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ];
+  };
+}
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..2afd004f4d73
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqlcheck/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "sqlcheck";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "jarulraj";
+    repo = "sqlcheck";
+    rev = "v${version}";
+    sha256 = "0v8idyhwhbphxzmh03lih3wd9gdq317zn7wsf01infih7b6l0k69";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  doCheck = true;
+
+  meta = with 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/default.nix b/nixpkgs/pkgs/development/tools/database/sqldeveloper/default.nix
new file mode 100644
index 000000000000..da43a4daf7d1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqldeveloper/default.nix
@@ -0,0 +1,84 @@
+{ lib, stdenv, makeDesktopItem, makeWrapper, requireFile, unzip, jdk }:
+
+let
+  version = "20.4.0.379.2205";
+
+  desktopItem = makeDesktopItem {
+    name = "sqldeveloper";
+    exec = "sqldeveloper";
+    icon = "sqldeveloper";
+    desktopName = "Oracle SQL Developer";
+    genericName = "Oracle SQL Developer";
+    comment = "Oracle's Oracle DB GUI client";
+    categories = [ "Development" ];
+  };
+in
+  stdenv.mkDerivation {
+
+  inherit version;
+  pname = "sqldeveloper";
+
+  src = requireFile rec {
+    name = "sqldeveloper-${version}-no-jre.zip";
+    url = "https://www.oracle.com/tools/downloads/sqldev-downloads.html";
+    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 = "1h53gl41ydr7kim6q9ckg3xyhb0rhmwj7jnis0xz6vms52b3h59k";
+  };
+
+  nativeBuildInputs = [ 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 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 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/sqlfluff/default.nix b/nixpkgs/pkgs/development/tools/database/sqlfluff/default.nix
new file mode 100644
index 000000000000..82b7ea8ea954
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqlfluff/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "sqlfluff";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    hash = "sha256-Cem53w/pzSDTi9A9mh9VeLlRn1m6KhkxWaqJjEtfwUs=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appdirs
+    cached-property
+    chardet
+    click
+    colorama
+    configparser
+    diff-cover
+    jinja2
+    oyaml
+    pathspec
+    pytest
+    regex
+    tblib
+    toml
+    tqdm
+    typing-extensions
+  ] ++ lib.optionals (pythonOlder "3.7") [
+    dataclasses
+  ] ++ lib.optionals (pythonOlder "3.8") [
+    backports.cached-property
+    importlib_metadata
+  ];
+
+  checkInputs = with python3.pkgs; [
+    hypothesis
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [
+    # Don't run the plugin related tests
+    "test/core/plugin_test.py"
+    "plugins/sqlfluff-templater-dbt"
+    "plugins/sqlfluff-plugin-example/test/rules/rule_test_cases_test.py"
+  ];
+
+  disabledTests = [
+    # dbt is not available yet
+    "test__linter__skip_dbt_model_disabled"
+    "test_rules__test_helper_has_variable_introspection"
+    "test__rules__std_file_dbt"
+  ];
+
+  pythonImportsCheck = [
+    "sqlfluff"
+  ];
+
+  meta = with lib; {
+    description = "SQL linter and auto-formatter";
+    homepage = "https://www.sqlfluff.com/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
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..9a9314fde9b1
--- /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.6";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "17pymadm063358nji70xzma64zkfv26c3pai5i1whsfp9ahqzasg";
+  };
+
+  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..aa5e2d8f6e0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/sqlitebrowser/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub, cmake
+, qtbase, qttools, sqlcipher, wrapGAppsHook, qtmacextras
+}:
+
+mkDerivation rec {
+  pname = "sqlitebrowser";
+  version = "3.12.2";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-33iVic0kxemWld+SiHOWGlKFSi5fpk1RtLUiNDr7WNI=";
+  };
+
+  # We should be using qscintilla from nixpkgs instead of the vendored version,
+  # but qscintilla is currently in a bit of a mess as some consumers expect a
+  # -qt4 or -qt5 prefix while others do not.
+  # We *really* should get that cleaned up.
+  buildInputs = [ qtbase sqlcipher ] ++ lib.optionals stdenv.isDarwin [ qtmacextras ];
+
+  nativeBuildInputs = [ cmake qttools wrapGAppsHook ];
+
+  cmakeFlags = [
+    "-Dsqlcipher=1"
+  ];
+
+  meta = with lib; {
+    description = "DB Browser for SQLite";
+    homepage = "https://sqlitebrowser.org/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.unix;
+  };
+}
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..e908849a3b3a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/squirrel-sql/default.nix
@@ -0,0 +1,77 @@
+# To enable specific database drivers, override this derivation and pass the
+# driver packages in the drivers argument (e.g. mysql_jdbc, postgresql_jdbc).
+{ lib, stdenv, fetchurl, makeDesktopItem, makeWrapper, unzip
+, jre
+, drivers ? []
+}:
+stdenv.mkDerivation rec {
+  pname = "squirrel-sql";
+  version = "4.3.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/squirrel-sql/1-stable/${version}-plainzip/squirrelsql-${version}-standard.zip";
+    sha256 = "sha256-Xh6JLfk0xDqEBJiEG3WBKBEqad/O0D8aeJk5s5w8PTI=";
+  };
+
+  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 lib; {
+    description = "Universal SQL Client";
+    homepage = "http://squirrel-sql.sourceforge.net/";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ khumba ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/termdbms/default.nix b/nixpkgs/pkgs/development/tools/database/termdbms/default.nix
new file mode 100644
index 000000000000..b045669ef902
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/termdbms/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "termdbms";
+  version = "unstable-2021-09-04";
+
+  src = fetchFromGitHub {
+    owner = "mathaou";
+    repo = "termdbms";
+    rev = "d46e72c796e8aee0def71b8e3499b0ebe5ca3385";
+    sha256 = "1c3xgidhmvlcdw7v5gcqzv27cb58f1ix8sfd4r14rfz7c8kbv37v";
+  };
+
+  vendorSha256 = "0h9aw68niizd9gs0i890g6ij13af04qgpfy1g5pskyr4ryx0gn26";
+
+  patches = [ ./viewer.patch ];
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mathaou/termdbms/";
+    description = "A TUI for viewing and editing database files";
+    license = licenses.mit;
+    maintainers = with maintainers; [ izorkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/database/termdbms/viewer.patch b/nixpkgs/pkgs/development/tools/database/termdbms/viewer.patch
new file mode 100644
index 000000000000..1b95c71de46b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/termdbms/viewer.patch
@@ -0,0 +1,12 @@
+diff --git a/viewer/viewer.go b/viewer/viewer.go
+index fcf850e..b0a0f8d 100644
+--- a/viewer/viewer.go
++++ b/viewer/viewer.go
+@@ -5,7 +5,6 @@ import (
+ 	"github.com/charmbracelet/bubbles/viewport"
+ 	tea "github.com/charmbracelet/bubbletea"
+ 	"github.com/charmbracelet/lipgloss"
+-	"github.com/mattn/go-runewidth"
+ 	"math"
+ 	"runtime"
+ 	"strings"
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..42c2a55fd3eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/timescaledb-parallel-copy/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "timescaledb-parallel-copy";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "timescale";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0r8c78l8vg7l24c3vzs2qr2prfjpagvdkp95fh9gyz76nvik29ba";
+  };
+
+  vendorSha256 = "03siay3hv1sgmmp7w4f9b0xb8c6bnbx0v4wy5grjl5k04zhnj76b";
+
+  meta = with lib; {
+    description = "Bulk, parallel insert of CSV records into PostgreSQL";
+    homepage = "https://github.com/timescale/timescaledb-parallel-copy";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ thoughtpolice ];
+  };
+}
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..be29a0457ee0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/timescaledb-tune/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "timescaledb-tune";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "timescale";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-p1SU0wnB2XftuPMbm47EbJ2aZGV9amlk0y7FI0QOBkk=";
+  };
+
+  vendorSha256 = "sha256-n2jrg9FiR/gSrbds/QVV8Duf7BTEs36yYi4F3Ve+d0E=";
+
+  # Temporary fix of bug: https://github.com/timescale/timescaledb-tune/issues/95
+  patches = [ ./fixMinMaxConn.diff ];
+
+  meta = with 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/fixMinMaxConn.diff b/nixpkgs/pkgs/development/tools/database/timescaledb-tune/fixMinMaxConn.diff
new file mode 100644
index 000000000000..3a0110476cce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/timescaledb-tune/fixMinMaxConn.diff
@@ -0,0 +1,13 @@
+diff --git a/pkg/pgtune/misc.go b/pkg/pgtune/misc.go
+index 1fceb6e..3e76be5 100644
+--- a/pkg/pgtune/misc.go
++++ b/pkg/pgtune/misc.go
+@@ -35,7 +35,7 @@ const (
+ 	// If you want to lower this value, consider that Patroni will not accept anything less than 25 as
+ 	// a valid max_connections and will replace it with 100, per
+ 	// https://github.com/zalando/patroni/blob/00cc62726d6df25d31f9b0baa082c83cd3f7bef9/patroni/postgresql/config.py#L280
+-	minMaxConns = 25
++	minMaxConns = 20
+ )
+ 
+ // MaxConnectionsDefault is the recommended default value for max_connections.
diff --git a/nixpkgs/pkgs/development/tools/database/webdis/default.nix b/nixpkgs/pkgs/development/tools/database/webdis/default.nix
new file mode 100644
index 000000000000..01cbb22c854c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/database/webdis/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, hiredis, http-parser, jansson, libevent, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "webdis";
+  version = "0.1.20";
+
+  src = fetchFromGitHub {
+    owner = "nicolasff";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-QvPawRYmk5HcE4XnI4B4G7AAaN/8cFov9lOa2e++g4A=";
+  };
+
+  buildInputs = [ hiredis http-parser jansson libevent ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "CONFDIR=${placeholder "out"}/share/webdis"
+  ];
+
+  meta = with lib; {
+    description = "A Redis HTTP interface with JSON output";
+    homepage = "https://webd.is/";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ wucke13 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/datree/default.nix b/nixpkgs/pkgs/development/tools/datree/default.nix
new file mode 100644
index 000000000000..e94917f15d7c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/datree/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "datree";
+  version = "0.15.22";
+
+  src = fetchFromGitHub {
+    owner = "datreeio";
+    repo = "datree";
+    rev = version;
+    hash = "sha256-g5u2QQtVmNp01KtUKwC8uoEIuoBDLHsOlRz1Mv0n/y8=";
+  };
+
+  vendorSha256 = "1cvlvlwdk41f145kzifg7rv7ymwhc9k0ck91bn106240rq1igcr0";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/datreeio/datree/cmd.CliVersion=${version}"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "CLI tool to ensure K8s manifests and Helm charts follow best practices as well as your organization’s policies";
+    homepage = "https://datree.io/";
+    license = [ licenses.asl20 ];
+    maintainers = [ maintainers.jceb ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dcadec/default.nix b/nixpkgs/pkgs/development/tools/dcadec/default.nix
new file mode 100644
index 000000000000..9f5f4f0a3b52
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dcadec/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  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 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/ddosify/default.nix b/nixpkgs/pkgs/development/tools/ddosify/default.nix
new file mode 100644
index 000000000000..fdec9ad19ed0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ddosify/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ddosify";
+  version = "0.7.5";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-n9xKg8RN2o20dTsV8a0tAJjmvAlwZ7TF2cTrXx+f49k=";
+  };
+
+  vendorSha256 = "sha256-lbo9P2UN9TmUAqyhFdbOHWokoAogVQZihpcOlhmumxU=";
+
+  ldflags = [
+    "-s -w"
+    "-X main.GitVersion=${version}"
+  ];
+
+  # TestCreateHammerMultipartPayload error occurred - Get "https://upload.wikimedia.org/wikipedia/commons/b/bd/Test.svg"
+  doCheck = false;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/ddosify -version | grep ${version} > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "High-performance load testing tool, written in Golang";
+    homepage = "https://ddosify.com/";
+    changelog = "https://github.com/ddosify/ddosify/releases/tag/v${version}";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/deadcode/default.nix b/nixpkgs/pkgs/development/tools/deadcode/default.nix
new file mode 100644
index 000000000000..014acc89e1f7
--- /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 {
+  pname = "deadcode-unstable";
+  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 = "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/deadnix/default.nix b/nixpkgs/pkgs/development/tools/deadnix/default.nix
new file mode 100644
index 000000000000..34fb92973bc6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/deadnix/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "deadnix";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "astro";
+    repo = "deadnix";
+    rev = "v${version}";
+    sha256 = "0ddnxmcr9fncgrqg1vvqcbx49c3lccdpb40h9rvzyldzy9xynzi7";
+  };
+
+  cargoSha256 = "19vgjv70vxgxssrxvdjwfl16bwdbdrpb2wzb3fg9vlz4fhbj2lv9";
+
+  meta = with lib; {
+    description = "Find and remove unused code in .nix source files";
+    homepage = "https://github.com/astro/deadnix";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ astro ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/delve/default.nix b/nixpkgs/pkgs/development/tools/delve/default.nix
new file mode 100644
index 000000000000..478ef3b6fc68
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/delve/default.nix
@@ -0,0 +1,38 @@
+{ lib, buildGoPackage, fetchFromGitHub, makeWrapper }:
+
+buildGoPackage rec {
+  pname = "delve";
+  version = "1.8.2";
+
+  goPackagePath = "github.com/go-delve/delve";
+  excludedPackages = "\\(_fixtures\\|scripts\\|service/test\\)";
+
+  src = fetchFromGitHub {
+    owner = "go-delve";
+    repo = "delve";
+    rev = "v${version}";
+    sha256 = "sha256-rW3uKf5T+ZCjZxVuSFWWXw0mhAW9Y9L83xtU98JTuik=";
+  };
+
+  subPackages = [ "cmd/dlv" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    # fortify source breaks build since delve compiles with -O0
+    wrapProgram $out/bin/dlv \
+      --prefix disableHardening " " fortify
+
+    # add symlink for vscode golang extension
+    # https://github.com/golang/vscode-go/blob/master/docs/debugging.md#manually-installing-dlv-dap
+    ln $out/bin/dlv $out/bin/dlv-dap
+  '';
+
+  meta = with lib; {
+    description = "debugger for the Go programming language";
+    homepage = "https://github.com/go-delve/delve";
+    maintainers = with maintainers; [ SuperSandro2000 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..2c7345d7cc56
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dep/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "dep";
+  version = "0.5.4";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/golang/dep";
+  subPackages = [ "cmd/dep" ];
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "golang";
+    repo = "dep";
+    sha256 = "02akzbjar1v01rdal746vk6mklff29yk2mqfyjk1zrs0mlg38ygd";
+  };
+
+  ldflags = [ "-s" "-w" "-X main.commitHash=${rev}" "-X main.version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/golang/dep";
+    description = "Go dependency management tool";
+    license = licenses.bsd3;
+    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..5d98ecd57296
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dep2nix/default.nix
@@ -0,0 +1,34 @@
+{ lib, 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 $out/bin/dep2nix \
+      --prefix PATH : ${nix-prefetch-scripts}/bin
+  '';
+
+  goDeps = ./deps.nix;
+
+  meta = with 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..ceedc50fc887
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dep2nix/deps.nix
@@ -0,0 +1,129 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/Masterminds/semver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/carolynvs/semver.git";
+      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/devd/default.nix b/nixpkgs/pkgs/development/tools/devd/default.nix
new file mode 100644
index 000000000000..0789850a4945
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devd/default.nix
@@ -0,0 +1,20 @@
+{ buildGoPackage, fetchFromGitHub, lib }:
+
+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" ];
+  meta = with lib; {
+    description = "A local webserver for developers";
+    homepage = "https://github.com/cortesi/devd";
+    license = licenses.mit;
+    maintainers = with maintainers; [ brianhicks ];
+  };
+}
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..863336257251
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devpi-client/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, argon2-cffi-bindings
+, buildPythonApplication
+, check-manifest
+, devpi-common
+, devpi-server
+, fetchPypi
+, git
+, glibcLocales
+, mercurial
+, mock
+, pkginfo
+, pluggy
+, py
+, pytestCheckHook
+, pytest-flake8
+, setuptools
+, sphinx
+, tox
+, webtest
+, wheel
+}:
+
+buildPythonApplication rec {
+  pname = "devpi-client";
+  version = "5.2.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-Ni6ybpUTankkkYYcwnKNFKYwmp1MTxOnucPm/TneWOw=";
+  };
+
+  buildInputs = [
+    glibcLocales
+  ];
+
+  propagatedBuildInputs = [
+    argon2-cffi-bindings
+    check-manifest
+    devpi-common
+    pkginfo
+    pluggy
+    py
+    setuptools
+  ];
+
+  checkInputs = [
+    devpi-server
+    git
+    mercurial
+    mock
+    pytestCheckHook
+    pytest-flake8
+    sphinx
+    tox
+    webtest
+    wheel
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d);
+  '';
+
+  pytestFlagsArray = [
+    # --fast skips tests which try to start a devpi-server improperly
+    "--fast"
+  ];
+
+  LC_ALL = "en_US.UTF-8";
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with 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..8e78bebebe9b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devpi-server/default.nix
@@ -0,0 +1,87 @@
+{ lib, fetchFromGitHub, python3, nginx }:
+
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+      # pyramid 2.0 no longer has a 'pyramid.compat' module
+      pyramid = super.pyramid.overridePythonAttrs (oldAttrs: rec {
+        version = "1.10.8";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "sha256-t81mWVvvkvgXZLl23d4rL6jk9fMl4C9l9ux/NwiynPY=";
+        };
+      });
+    };
+  };
+
+in with py.pkgs;
+buildPythonApplication rec {
+  pname = "devpi-server";
+  version = "6.2.0";
+
+  src = fetchFromGitHub {
+    owner = "devpi";
+    repo = "devpi";
+    rev = "68ee291ef29a93f6d921d4927aec8d13919b4a4c";
+    sha256 = "1ivd5dy9f2gq07w8n2gywa0n0d9wv8644l53ni9fz7i69jf8q2fm";
+  };
+
+  sourceRoot = "source/server";
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "pluggy>=0.6.0,<1.0" "pluggy>=0.6.0,<2.0"
+  '';
+
+  propagatedBuildInputs = [
+    py
+    appdirs
+    devpi-common
+    defusedxml
+    execnet
+    itsdangerous
+    repoze_lru
+    passlib
+    pluggy
+    pyramid
+    strictyaml
+    waitress
+  ];
+
+  checkInputs = [
+    beautifulsoup4
+    nginx
+    pytestCheckHook
+    pytest-flake8
+    webtest
+  ] ++ lib.optionals isPy27 [ mock ];
+
+  # root_passwd_hash tries to write to store
+  # TestMirrorIndexThings tries to write to /var through ngnix
+  # nginx tests try to write to /var
+  preCheck = ''
+    export PATH=$PATH:$out/bin
+    export HOME=$TMPDIR
+  '';
+  pytestFlagsArray = [
+    "./test_devpi_server"
+    "--slow"
+    "-rfsxX"
+    "--ignore=test_devpi_server/test_nginx_replica.py"
+    "--ignore=test_devpi_server/test_streaming_nginx.py"
+    "--ignore=test_devpi_server/test_streaming_replica_nginx.py"
+  ];
+  disabledTests = [
+    "root_passwd_hash_option"
+    "TestMirrorIndexThings"
+  ];
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with 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..34fdd2c794e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/devtodo/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, readline, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "devtodo";
+  version = "0.1.20";
+
+  src = fetchurl {
+    url = "https://swapoff.org/files/devtodo/${pname}-${version}.tar.gz";
+    sha256 = "029y173njydzlznxmdizrrz4wcky47vqhl87fsb7xjcz9726m71p";
+  };
+
+  buildInputs = [ readline ncurses ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://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/diesel-cli/default.nix b/nixpkgs/pkgs/development/tools/diesel-cli/default.nix
new file mode 100644
index 000000000000..b964262f56c3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/diesel-cli/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, sqliteSupport ? true
+, postgresqlSupport ? true
+, mysqlSupport ? true
+, rustPlatform
+, fetchCrate
+, installShellFiles
+, pkg-config
+, openssl
+, stdenv
+, Security
+, libiconv
+, sqlite
+, postgresql
+, mariadb
+, zlib
+}:
+
+assert lib.assertMsg (sqliteSupport == true || postgresqlSupport == true || mysqlSupport == true)
+  "support for at least one database must be enabled";
+
+let
+  inherit (lib) optional optionals optionalString;
+in
+
+rustPlatform.buildRustPackage rec {
+  pname = "diesel-cli";
+  version = "1.4.1";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = "diesel_cli";
+    sha256 = "sha256-mRdDc4fHMkwkszY+2l8z1RSNMEQnrWI5/Y0Y2W+guQE=";
+  };
+
+  cargoSha256 = "sha256-sQ762Ss31sA5qALHzwkvwbfRXo00cCtqzQyoz3/zf6I=";
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ optional stdenv.isDarwin Security
+    ++ optional (stdenv.isDarwin && mysqlSupport) libiconv
+    ++ optional sqliteSupport sqlite
+    ++ optional postgresqlSupport postgresql
+    ++ optionals mysqlSupport [ mariadb zlib ];
+
+  buildNoDefaultFeatures = true;
+  buildFeatures = optional sqliteSupport "sqlite"
+    ++ optional postgresqlSupport "postgres"
+    ++ optional mysqlSupport "mysql";
+
+  checkPhase = ''
+    runHook preCheck
+  '' + optionalString sqliteSupport ''
+    cargo check --features sqlite
+  '' + optionalString postgresqlSupport ''
+    cargo check --features postgres
+  '' + optionalString mysqlSupport ''
+    cargo check --features mysql
+  '' + ''
+    runHook postCheck
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd diesel \
+      --bash <($out/bin/diesel completions bash) \
+      --fish <($out/bin/diesel completions fish) \
+      --zsh <($out/bin/diesel completions zsh)
+  '';
+
+  # Fix the build with mariadb, which otherwise shows "error adding symbols:
+  # DSO missing from command line" errors for libz and libssl.
+  NIX_LDFLAGS = optionalString mysqlSupport "-lz -lssl -lcrypto";
+
+  meta = with lib; {
+    description = "Database tool for working with Rust projects that use Diesel";
+    homepage = "https://github.com/diesel-rs/diesel/tree/master/diesel_cli";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ ];
+    mainProgram = "diesel";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/distgen/default.nix b/nixpkgs/pkgs/development/tools/distgen/default.nix
new file mode 100644
index 000000000000..dbf00ea8e05e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/distgen/default.nix
@@ -0,0 +1,32 @@
+{ lib, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "distgen";
+  version = "1.5";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "08f9rw5irgv0gw7jizk5f9csn0yhrdnb84k40px1zbypsylvr5c5";
+  };
+
+  checkInputs = with python3.pkgs; [
+    pytest
+    mock
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    distro
+    jinja2
+    six
+    pyyaml
+  ];
+
+  checkPhase = "make test-unit PYTHON=${python3.executable}";
+
+  meta = with lib; {
+    description = "Templating system/generator for distributions";
+    license = licenses.gpl2Plus;
+    homepage = "https://distgen.readthedocs.io/";
+    maintainers = with maintainers; [ bachp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dive/default.nix b/nixpkgs/pkgs/development/tools/dive/default.nix
new file mode 100644
index 000000000000..581b0db3b35a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dive/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, pkg-config, btrfs-progs, gpgme, lvm2 }:
+
+buildGoModule rec {
+  pname = "dive";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "wagoodman";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-1pmw8pUlek5FlI1oAuvLSqDow7hw5rw86DRDZ7pFAmA=";
+  };
+
+  vendorSha256 = "sha256-0gJ3dAPoilh3IWkuesy8geNsuI1T0DN64XvInc9LvlM=";
+
+  doCheck = false;
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = lib.optionals stdenv.isLinux [ btrfs-progs gpgme lvm2 ];
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  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 SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dockfmt/default.nix b/nixpkgs/pkgs/development/tools/dockfmt/default.nix
new file mode 100644
index 000000000000..d637b8ca3e51
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dockfmt/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "dockfmt";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "jessfraz";
+    repo = "dockfmt";
+    rev = "v${version}";
+    sha256 = "0m56ydmf7zbcsa5yym7j5fgr75v677h9s40zyzwrqccyq01myp06";
+  };
+
+  vendorSha256 = null;
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X github.com/jessfraz/dockfmt/version.VERSION=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Dockerfile format";
+    homepage = "https://github.com/jessfraz/dockfmt";
+    license = [ licenses.mit ];
+    maintainers = [ maintainers.cpcloud ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dockle/default.nix b/nixpkgs/pkgs/development/tools/dockle/default.nix
new file mode 100644
index 000000000000..d117d9319d88
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dockle/default.nix
@@ -0,0 +1,48 @@
+{ lib, buildGoModule, fetchFromGitHub, pkg-config, btrfs-progs, lvm2 }:
+
+buildGoModule rec {
+  pname = "dockle";
+  version = "0.4.5";
+
+  src = fetchFromGitHub {
+    owner = "goodwithtech";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-QC0WAM+qitee0dyJorl5Hio3COy4JiIHmFgBIj7S2yM=";
+  };
+
+  vendorSha256 = "sha256-9n/782uKu7qNV/WEpbEV3aHcPXipyOhGdAhT/F4O2xc=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ btrfs-progs lvm2 ];
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}"
+  ];
+
+  preCheck = ''
+    # Remove tests that use networking
+    rm pkg/scanner/scan_test.go
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/dockle --help
+    $out/bin/dockle --version | grep "dockle version ${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://containers.goodwith.tech";
+    changelog = "https://github.com/goodwithtech/dockle/releases/tag/v${version}";
+    description = "Container Image Linter for Security";
+    longDescription = ''
+      Container Image Linter for Security.
+      Helping build the Best-Practice Docker Image.
+      Easy to start.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/doctl/default.nix b/nixpkgs/pkgs/development/tools/doctl/default.nix
new file mode 100644
index 000000000000..3bcd0d6777d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/doctl/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "doctl";
+  version = "1.70.0";
+
+  vendorSha256 = null;
+
+  doCheck = false;
+
+  subPackages = [ "cmd/doctl" ];
+
+  ldflags = let t = "github.com/digitalocean/doctl"; in [
+    "-X ${t}.Major=${lib.versions.major version}"
+    "-X ${t}.Minor=${lib.versions.minor version}"
+    "-X ${t}.Patch=${lib.versions.patch version}"
+    "-X ${t}.Label=release"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    export HOME=$(mktemp -d) # attempts to write to /homeless-shelter
+    for shell in bash fish zsh; do
+      $out/bin/doctl completion $shell > doctl.$shell
+      installShellCompletion doctl.$shell
+    done
+  '';
+
+  src = fetchFromGitHub {
+    owner = "digitalocean";
+    repo = "doctl";
+    rev = "v${version}";
+    sha256 = "sha256-oLcWVUP9A/tcJYKiaBrqAdyNKESaVFOaNiG/fAVQb2c=";
+  };
+
+  meta = with lib; {
+    description = "A command line tool for DigitalOcean services";
+    homepage = "https://github.com/digitalocean/doctl";
+    license = licenses.asl20;
+    maintainers = [ maintainers.siddharthist ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/documentation/antora/default.nix b/nixpkgs/pkgs/development/tools/documentation/antora/default.nix
new file mode 100644
index 000000000000..ea8aeb83c8cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/antora/default.nix
@@ -0,0 +1,24 @@
+{ lib, nodePackages }:
+
+let
+  linkNodeDeps = ({ pkg, deps, name ? "" }:
+    let
+      targetModule = if name != "" then name else lib.getName pkg;
+    in nodePackages.${pkg}.override (oldAttrs: {
+      postInstall = ''
+        mkdir -p $out/lib/node_modules/${targetModule}/node_modules
+        ${lib.concatStringsSep "\n" (map (dep: ''
+          ln -s ${nodePackages.${dep}}/lib/node_modules/${lib.getName dep} \
+            $out/lib/node_modules/${targetModule}/node_modules/${lib.getName dep}
+        '') deps
+        )}
+      '';
+    })
+);
+in linkNodeDeps {
+ pkg = "@antora/cli";
+ name = "@antora/cli";
+ deps = [
+   "@antora/site-generator-default"
+ ];
+}
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..a4a70dabd69d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/doxygen/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, cmake, fetchFromGitHub, python3, flex, bison, qt5, CoreServices, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "doxygen";
+  version = "1.8.20";
+
+  src = fetchFromGitHub {
+    owner = "doxygen";
+    repo = "doxygen";
+    rev = "Release_${lib.replaceStrings [ "." ] [ "_" ] version}";
+    sha256 = "17chvi3i80rj4750smpizf562xjzd2xcv5rfyh997pyvc1zbq5rh";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    python3
+    flex
+    bison
+  ];
+
+  buildInputs =
+       lib.optionals (qt5 != null) (with qt5; [ qtbase wrapQtAppsHook ])
+    ++ lib.optional stdenv.isSunOS libiconv
+    ++ lib.optionals stdenv.isDarwin [ CoreServices libiconv ];
+
+  cmakeFlags =
+    [ "-DICONV_INCLUDE_DIR=${libiconv}/include" ] ++
+    lib.optional (qt5 != null) "-Dbuild_wizard=YES";
+
+  NIX_CFLAGS_COMPILE =
+    lib.optionalString stdenv.isDarwin "-mmacosx-version-min=10.9";
+
+  enableParallelBuilding = false;
+
+  meta = {
+    license = 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 qt5 != null then lib.platforms.linux else lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/documentation/gi-docgen/default.nix b/nixpkgs/pkgs/development/tools/documentation/gi-docgen/default.nix
new file mode 100644
index 000000000000..05b7aac82c17
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/gi-docgen/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, fetchFromGitLab
+, fetchpatch
+, meson
+, ninja
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gi-docgen";
+  version = "2021.8";
+
+  format = "other";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = pname;
+    rev = version;
+    sha256 = "Y1IdCH6bytxbKIj48IAw/3XUQhoqwPshvdj/d1hRS3o=";
+  };
+
+  patches = [
+    # Fix building docs of some packages (e.g. gnome-builder)
+    # https://gitlab.gnome.org/GNOME/gi-docgen/-/issues/111
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gi-docgen/-/commit/72f3c5dbe27aabb5f7a376afda23f3dfc3c2e212.patch";
+      sha256 = "iVXc3idmcjmFVZQdE2QX2V53YZ79lqxZid9nWdxAZ/Q=";
+    })
+  ];
+
+  depsBuildBuild = [
+    python3
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+  ];
+
+  pythonPath = with python3.pkgs; [
+    jinja2
+    markdown
+    markupsafe
+    pygments
+    toml
+    typogrify
+  ];
+
+  doCheck = false; # no tests
+
+  postFixup = ''
+    # Do not propagate Python
+    substituteInPlace $out/nix-support/propagated-build-inputs \
+      --replace "${python3}" ""
+  '';
+
+  meta = with lib; {
+    description = "Documentation generator for GObject-based libraries";
+    homepage = "https://gitlab.gnome.org/GNOME/gi-docgen";
+    license = licenses.asl20; # OR GPL-3.0-or-later
+    maintainers = teams.gnome.members;
+  };
+}
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..5586ed5c2301
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/gnome-doc-utils/default.nix
@@ -0,0 +1,46 @@
+{ lib, fetchurl, pkg-config, libxml2, libxslt, intltool, gnome
+, python3Packages, fetchpatch, bash }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "gnome-doc-utils";
+  version = "0.20.10";
+
+  format = "other";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "19n4x25ndzngaciiyd8dd6s2mf9gv6nv3wv27ggns2smm7zkj1nb";
+  };
+
+  patches = [
+    # https://bugzilla.redhat.com/show_bug.cgi?id=438638
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/gnome-doc-utils/raw/6b8908abe5af61a952db7174c5d1843708d61f1b/f/gnome-doc-utils-0.14.0-package.patch";
+      sha256 = "sha256-V2L2/30NoHY/wj3+dsombxveWRSUJb2YByOKtEgVx/0=";
+    })
+    # python3 support
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/gnome-doc-utils/raw/6b8908abe5af61a952db7174c5d1843708d61f1b/f/gnome-doc-utils-0.20.10-python3.patch";
+      sha256 = "sha256-niH/Yx5H44rsRgkCZS8LWLFB9ZvuInt75zugzoVUhH0=";
+    })
+  ];
+
+  nativeBuildInputs = [ intltool pkg-config libxslt.dev ];
+  buildInputs = [ libxml2 libxslt bash ];
+  propagatedBuildInputs = [ python3Packages.libxml2 ];
+
+  configureFlags = [ "--disable-scrollkeeper" ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with 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..5951c8d71fd5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/gtk-doc/default.nix
@@ -0,0 +1,92 @@
+{ lib
+, fetchFromGitLab
+, meson
+, ninja
+, pkg-config
+, python3
+, docbook_xml_dtd_43
+, docbook-xsl-nons
+, libxslt
+, gettext
+, gnome
+, withDblatex ? false, dblatex
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gtk-doc";
+  version = "1.33.2";
+
+  outputDevdoc = "out";
+
+  format = "other";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = pname;
+    rev = version;
+    sha256 = "A6OXpazrJ05SUIO1ZPVN0xHTXOSov8UnPvUolZAv/Iw=";
+  };
+
+  patches = [
+    passthru.respect_xml_catalog_files_var_patch
+  ];
+
+  strictDeps = true;
+
+  depsBuildBuild = [
+    python3
+    pkg-config
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    gettext
+    meson
+    ninja
+    libxslt # for xsltproc
+  ];
+
+  buildInputs = [
+    docbook_xml_dtd_43
+    docbook-xsl-nons
+    libxslt
+  ] ++ lib.optionals withDblatex [
+    dblatex
+  ];
+
+  pythonPath = with python3.pkgs; [
+    pygments # Needed for https://gitlab.gnome.org/GNOME/gtk-doc/blob/GTK_DOC_1_32/meson.build#L42
+    lxml
+  ];
+
+  mesonFlags = [
+    "-Dtests=false"
+    "-Dyelp_manual=false"
+  ];
+
+  doCheck = false; # requires a lot of stuff
+  doInstallCheck = false; # fails
+
+  postFixup = ''
+    # Do not propagate Python
+    substituteInPlace $out/nix-support/propagated-build-inputs \
+      --replace "${python3}" ""
+  '';
+
+  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 = gnome.updateScript {
+      packageName = pname;
+      versionPolicy = "none";
+    };
+  };
+
+  meta = with lib; {
+    description = "Tools to extract documentation embedded in GTK and GNOME source code";
+    homepage = "https://gitlab.gnome.org/GNOME/gtk-doc";
+    license = licenses.gpl2Plus;
+    maintainers = teams.gnome.members ++ (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..e9bf37345133
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/documentation/mdsh/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdsh";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "zimbatm";
+    repo = "mdsh";
+    rev = "v${version}";
+    sha256 = "1ki6w3qf8ipcf7ch5120mj16vs7yan8k9zjd25v8x6vbsd1iccgy";
+  };
+
+  cargoSha256 = "0x5fd47rjmzzmwgj14gbj0rbxwbphd7f63mis4ivwlwc9ikjxdxb";
+
+  meta = with lib; {
+    description = "Markdown shell pre-processor";
+    homepage = "https://github.com/zimbatm/mdsh";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dot-http/default.nix b/nixpkgs/pkgs/development/tools/dot-http/default.nix
new file mode 100644
index 000000000000..d5a507d4ebba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dot-http/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, pkg-config, openssl, libiconv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dot-http";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "bayne";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1s2q4kdldhb5gd14g2h6vzrbjgbbbs9zp2dgmna0rhk1h4qv0mml";
+  };
+
+  cargoSha256 = "013jyp2bgmssj1c18lm8jkb6q6jlhdrqzmyri6k5lgmfmb9dvkii";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [
+    libiconv Security
+  ];
+
+  meta = with lib; {
+    description = "Text-based scriptable HTTP client";
+    homepage = "https://github.com/bayne/dot-http";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mredaelli ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dprint/default.nix b/nixpkgs/pkgs/development/tools/dprint/default.nix
new file mode 100644
index 000000000000..f2bd4bb1b2a2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dprint/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchCrate, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dprint";
+  version = "0.22.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-iYqQABXd3Vra+U7cfGKBEyTXfQGwHxFSxEoDyCfKk5Y=";
+  };
+
+  cargoSha256 = "sha256-QMOS8Pn3RwZZRtKqp077ihh91Q4VPe8alrtQ6dYIXmA=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  # Tests fail because they expect a test WASM plugin. Tests already run for
+  # every commit upstream on GitHub Actions
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Code formatting platform written in Rust";
+    longDescription = ''
+      dprint is a pluggable and configurable code formatting platform written in Rust.
+      It offers multiple WASM plugins to support various languages. It's written in
+      Rust, so it’s small, fast, and portable.
+    '';
+    changelog = "https://github.com/dprint/dprint/releases/tag/${version}";
+    homepage = "https://dprint.dev";
+    license = licenses.mit;
+    maintainers = with maintainers; [ khushraj ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/drip/default.nix b/nixpkgs/pkgs/development/tools/drip/default.nix
new file mode 100644
index 000000000000..2724e41e8e61
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/drip/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, jdk8, which, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "drip";
+  version = "0.2.4";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    owner = "ninjudd";
+    rev = version;
+    sha256 = "1zl62wdwfak6z725asq5lcqb506la1aavj7ag78lvp155wyh8aq1";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ jdk8 ];
+
+  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 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/drm_info/default.nix b/nixpkgs/pkgs/development/tools/drm_info/default.nix
new file mode 100644
index 000000000000..26124b1054fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/drm_info/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub
+, libdrm, json_c, pciutils
+, meson, ninja, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "drm_info";
+  version = "2.3.0";
+
+  src = fetchFromGitHub {
+    owner = "ascent12";
+    repo = "drm_info";
+    rev = "v${version}";
+    sha256 = "sha256-UTDYLe3QezPCyG9CIp+O+KX716JDTL9mn+OEjjyTwlg=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+  buildInputs = [ libdrm json_c pciutils ];
+
+  meta = with lib; {
+    description = "Small utility to dump info about DRM devices";
+    homepage = "https://github.com/ascent12/drm_info";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tadeokondrak ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dstp/default.nix b/nixpkgs/pkgs/development/tools/dstp/default.nix
new file mode 100644
index 000000000000..7e3dafc5b228
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dstp/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "dstp";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "ycd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-YvuUgHHa8Egk+bbSI0SH0i3YrKWRbzjAckNG32RBRXw=";
+  };
+
+  vendorSha256 = "sha256-qNH71MPKOC0ld7xxppjZrHSTJ6t8E0LljM1OzT7pM9g=";
+
+  # Tests require network connection, but is not allowed by nix
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Run common networking tests against your site";
+    homepage = "https://github.com/ycd/dstp";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jlesquembre ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dt-schema/default.nix b/nixpkgs/pkgs/development/tools/dt-schema/default.nix
new file mode 100644
index 000000000000..20e1ed136e2b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dt-schema/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, git
+, ruamel-yaml
+, jsonschema
+, rfc3987
+, setuptools
+, setuptools-scm
+}:
+
+buildPythonPackage rec {
+  pname = "dtschema";
+  version = "2022.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-G5KzuaMbbkuLK+cNvzBld1UwvExS6ZGVW2e+GXQRFMU=";
+  };
+
+  nativeBuildInputs = [ setuptools-scm git ];
+  propagatedBuildInputs = [
+    setuptools
+    ruamel-yaml
+    jsonschema
+    rfc3987
+  ];
+
+  meta = with lib; {
+    description = "Tooling for devicetree validation using YAML and jsonschema";
+    homepage = "https://github.com/devicetree-org/dt-schema/";
+    # all files have SPDX tags
+    license = with licenses; [ bsd2 gpl2 ];
+    maintainers = with maintainers; [ sorki ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/dtools/default.nix b/nixpkgs/pkgs/development/tools/dtools/default.nix
new file mode 100644
index 000000000000..5faf403e71a6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dtools/default.nix
@@ -0,0 +1,51 @@
+{stdenv, lib, fetchFromGitHub, fetchpatch, ldc, curl}:
+
+stdenv.mkDerivation rec {
+  pname = "dtools";
+  version = "2.095.1";
+
+  src = fetchFromGitHub {
+    owner = "dlang";
+    repo = "tools";
+    rev = "v${version}";
+    sha256 = "sha256:0rdfk3mh3fjrb0h8pr8skwlq6ac9hdl1fkrkdl7n1fa2806b740b";
+    name = "dtools";
+  };
+
+  patches = [
+    (fetchpatch {
+      # part of https://github.com/dlang/tools/pull/441
+      url = "https://github.com/dlang/tools/commit/6c6a042d1b08e3ec1790bd07a7f69424625ee866.patch"; # Fix LDC arm64 build
+      sha256 = "sha256-x6EclTYN1Y5FG57KLhbBK0BZicSYcZoWO7MTVcP4T18=";
+    })
+  ];
+
+  nativeBuildInputs = [ ldc ];
+  buildInputs = [ curl ];
+
+  makeCmd = ''
+    make -f posix.mak all DMD_DIR=dmd DMD=${ldc.out}/bin/ldmd2 CC=${stdenv.cc}/bin/cc
+  '';
+
+  buildPhase = ''
+    $makeCmd
+  '';
+
+  doCheck = true;
+
+  checkPhase = ''
+      $makeCmd test_rdmd
+    '';
+
+  installPhase = ''
+      $makeCmd INSTALL_DIR=$out install
+  '';
+
+  meta = with 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 = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/dyff/default.nix b/nixpkgs/pkgs/development/tools/dyff/default.nix
new file mode 100644
index 000000000000..d71b73929cea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/dyff/default.nix
@@ -0,0 +1,57 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "dyff";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "homeport";
+    repo = "dyff";
+    rev = "v${version}";
+    sha256 = "sha256-SiOaPgwcdYrZBk7vzs6icN+pP0Yc+ImLz5lVtHaXgDc=";
+  };
+
+  vendorSha256 = "sha256-N3LqPnBq+jOUj4yDhY0GS4a4FTOntY4xu1TVac6va+Q=";
+
+  subPackages = [
+    "cmd/dyff"
+    "pkg/dyff"
+    "internal/cmd"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # test fails with the injected version
+  postPatch = ''
+    substituteInPlace internal/cmd/cmds_test.go \
+      --replace "version (development)" ${version}
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/homeport/dyff/internal/cmd.version=${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd dyff \
+      --bash <($out/bin/dyff completion bash) \
+      --fish <($out/bin/dyff completion fish) \
+      --zsh <($out/bin/dyff completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "A diff tool for YAML files, and sometimes JSON";
+    longDescription = ''
+      dyff is inspired by the way the old BOSH v1 deployment output reported
+      changes from one version to another by only showing the parts of a YAML
+      file that change.
+
+      Each difference is referenced by its location in the YAML document by
+      using either the Spruce or go-patch path syntax.
+    '';
+    homepage = "https://github.com/homeport/dyff";
+    license = licenses.mit;
+    maintainers = with maintainers; [ edlimerkaj ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/earthly/default.nix b/nixpkgs/pkgs/development/tools/earthly/default.nix
new file mode 100644
index 000000000000..477b28b6a1fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/earthly/default.nix
@@ -0,0 +1,42 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "earthly";
+  version = "0.6.10";
+
+  src = fetchFromGitHub {
+    owner = "earthly";
+    repo = "earthly";
+    rev = "v${version}";
+    sha256 = "sha256-CzVcoIvf9sqomua5AJtNpCnGfPmCNJMwex/l7p+hEfw=";
+  };
+
+  vendorSha256 = "sha256-uUx9C7uEdXjhDWxehGHuhuFQXdUjZAXK3qogESkRm8E=";
+
+  ldflags = [
+    "-s" "-w"
+    "-X main.Version=v${version}"
+    "-X main.DefaultBuildkitdImage=earthly/buildkitd:v${version}"
+  ];
+
+  BUILDTAGS = "dfrunmount dfrunsecurity dfsecrets dfssh dfrunnetwork";
+  preBuild = ''
+    makeFlagsArray+=(BUILD_TAGS="${BUILDTAGS}")
+  '';
+
+  # For some reasons the tests fail, but the program itself seems to work.
+  doCheck = false;
+
+  postInstall = ''
+    mv $out/bin/debugger $out/bin/earthly-debugger
+    mv $out/bin/shellrepeater $out/bin/earthly-shellrepeater
+  '';
+
+  meta = with lib; {
+    description = "Build automation for the container era";
+    homepage = "https://earthly.dev/";
+    changelog = "https://github.com/earthly/earthly/releases/tag/v${version}";
+    license = licenses.bsl11;
+    maintainers = with maintainers; [ zoedsoupe ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/easyjson/default.nix b/nixpkgs/pkgs/development/tools/easyjson/default.nix
new file mode 100644
index 000000000000..75bfc1d4c14f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/easyjson/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage {
+  pname = "easyjson";
+  version = "unstable-2019-06-26";
+  goPackagePath = "github.com/mailru/easyjson";
+
+  src = fetchFromGitHub {
+    owner = "mailru";
+    repo = "easyjson";
+    rev = "b2ccc519800e761ac8000b95e5d57c80a897ff9e";
+    sha256 = "0q85h383mhbkcjm2vqm72bi8n2252fv3c56q3lclzb8n2crnjcdk";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/mailru/easyjson";
+    description = "Fast JSON serializer for golang";
+    license = licenses.mit;
+    maintainers = with maintainers; [ chiiruno ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ec2-metadata-mock/default.nix b/nixpkgs/pkgs/development/tools/ec2-metadata-mock/default.nix
new file mode 100644
index 000000000000..838e99417722
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ec2-metadata-mock/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ec2-metadata-mock";
+  version = "1.10.1";
+
+  src = fetchFromGitHub {
+    owner = "aws";
+    repo = "amazon-ec2-metadata-mock";
+    rev = "v${version}";
+    sha256 = "sha256-sWs3chJqXL1YTHgSY0kD+PINrF4eOThOdcgSis3Mecs=";
+  };
+
+  vendorSha256 = "sha256-HbU6Y5SART+FjFyEpzv243yfo/A4yprPen5Mlhq0hbg=";
+
+  postInstall = ''
+    mv $out/bin/{cmd,ec2-metadata-mock}
+  '';
+
+  meta = with lib; {
+    description = "Amazon EC2 Metadata Mock";
+    homepage = "https://github.com/aws/amazon-ec2-metadata-mock";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ymatsiuk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/eclipse-mat/default.nix b/nixpkgs/pkgs/development/tools/eclipse-mat/default.nix
new file mode 100644
index 000000000000..7408b35fe5ad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/eclipse-mat/default.nix
@@ -0,0 +1,118 @@
+{ fetchurl
+, fontconfig
+, freetype
+, glib
+, gsettings-desktop-schemas
+, gtk3
+, jdk11
+, lib
+, libX11
+, libXrender
+, libXtst
+, makeDesktopItem
+, makeWrapper
+, shared-mime-info
+, stdenv
+, unzip
+, webkitgtk
+, zlib
+}:
+
+with lib;
+let
+  pVersion = "1.12.0.20210602";
+  pVersionTriple = splitVersion pVersion;
+  majorVersion = elemAt pVersionTriple 0;
+  minorVersion = elemAt pVersionTriple 1;
+  patchVersion = elemAt pVersionTriple 2;
+  baseVersion = "${majorVersion}.${minorVersion}.${patchVersion}";
+  jdk = jdk11;
+in
+stdenv.mkDerivation rec {
+  pname = "eclipse-mat";
+  version = pVersion;
+
+  src = fetchurl {
+    url = "http://ftp.halifax.rwth-aachen.de/eclipse//mat/${baseVersion}/rcp/MemoryAnalyzer-${version}-linux.gtk.x86_64.zip";
+    sha256 = "sha256-qX4RPuZdeiEduJAEpzOi/QnbJ+kaD0PZ3WHrmGsvqHc=";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "eclipse-mat";
+    exec = "eclipse-mat";
+    icon = "eclipse";
+    comment = "Eclipse Memory Analyzer";
+    desktopName = "Eclipse MAT";
+    genericName = "Java Memory Analyzer";
+    categories = [ "Development" ];
+  };
+
+  unpackPhase = ''
+    unzip $src
+  '';
+
+  buildCommand = ''
+    mkdir -p $out
+    unzip $src
+    mv mat $out
+
+    # Patch binaries.
+    interpreter=$(echo ${stdenv.glibc.out}/lib/ld-linux*.so.2)
+    libCairo=$out/eclipse/libcairo-swt.so
+    patchelf --set-interpreter $interpreter $out/mat/MemoryAnalyzer
+    [ -f $libCairo ] && patchelf --set-rpath ${
+      lib.makeLibraryPath [ freetype fontconfig libX11 libXrender zlib ]
+    } $libCairo
+
+    # Create wrapper script.  Pass -configuration to store settings in ~/.eclipse-mat/<version>
+    makeWrapper $out/mat/MemoryAnalyzer $out/bin/eclipse-mat \
+      --prefix PATH : ${jdk}/bin \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath ([ glib gtk3 libXtst webkitgtk ])} \
+      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" \
+      --add-flags "-configuration \$HOME/.eclipse-mat/''${version}/configuration"
+
+    # Create desktop item.
+    mkdir -p $out/share/applications
+    cp ${desktopItem}/share/applications/* $out/share/applications
+    mkdir -p $out/share/pixmaps
+    find $out/mat/plugins -name 'eclipse*.png' -type f -exec cp {} $out/share/pixmaps \;
+    mv $out/share/pixmaps/eclipse64.png $out/share/pixmaps/eclipse.png
+  '';
+
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [
+    fontconfig
+    freetype
+    glib
+    gsettings-desktop-schemas
+    gtk3
+    jdk
+    libX11
+    libXrender
+    libXtst
+    makeWrapper
+    zlib
+    shared-mime-info
+    webkitgtk
+  ];
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  meta = with lib; {
+    description = "Fast and feature-rich Java heap analyzer";
+    longDescription = ''
+      The Eclipse Memory Analyzer is a tool that helps you find memory
+      leaks and reduce memory consumption. Use the Memory Analyzer to
+      analyze productive heap dumps with hundreds of millions of
+      objects, quickly calculate the retained sizes of objects, see
+      who is preventing the Garbage Collector from collecting objects,
+      run a report to automatically extract leak suspects.
+    '';
+    homepage = "https://www.eclipse.org/mat";
+    license = licenses.epl20;
+    maintainers = [ maintainers.ktor ];
+    platforms = [ "x86_64-linux" ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/efm-langserver/default.nix b/nixpkgs/pkgs/development/tools/efm-langserver/default.nix
new file mode 100644
index 000000000000..29304d7d2654
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/efm-langserver/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "efm-langserver";
+  version = "0.0.41";
+
+  src = fetchFromGitHub {
+    owner = "mattn";
+    repo = "efm-langserver";
+    rev = "v${version}";
+    sha256 = "sha256-0s6GmMbjtXGUcChzc8Pkqvmt3iU5uDUqe76OUDngboU=";
+  };
+
+  vendorSha256 = "sha256-tca+1SRrFyvU8ttHmfMFiGXd1A8rQSEWm1Mc2qp0EfI=";
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "General purpose Language Server";
+    maintainers = with maintainers; [ Philipp-M ];
+    homepage = "https://github.com/mattn/efm-langserver";
+    license = licenses.mit;
+  };
+}
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..d0a51c0a0623
--- /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
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/ejson/default.nix b/nixpkgs/pkgs/development/tools/ejson/default.nix
new file mode 100644
index 000000000000..05deb05ed7ec
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ejson/default.nix
@@ -0,0 +1,44 @@
+{ lib, bundlerEnv, ruby, buildGoPackage, fetchFromGitHub }:
+let
+  # needed for manpage generation
+  gems = bundlerEnv {
+    name = "ejson-gems";
+    gemdir = ./.;
+    inherit ruby;
+  };
+in buildGoPackage rec {
+  pname = "ejson";
+  version = "1.2.1";
+  rev = "v${version}";
+
+  nativeBuildInputs = [ gems ];
+
+  goPackagePath = "github.com/Shopify/ejson";
+  subPackages = [ "cmd/ejson" ];
+
+  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/gemset.nix b/nixpkgs/pkgs/development/tools/ejson/gemset.nix
new file mode 100644
index 000000000000..93fa1131f2a7
--- /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";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/electron/default.nix b/nixpkgs/pkgs/development/tools/electron/default.nix
new file mode 100644
index 000000000000..655ad71e7b23
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/default.nix
@@ -0,0 +1,115 @@
+{ lib, stdenv
+, libXScrnSaver
+, makeWrapper
+, fetchurl
+, wrapGAppsHook
+, glib
+, gtk3
+, unzip
+, atomEnv
+, libuuid
+, at-spi2-atk
+, at-spi2-core
+, libdrm
+, mesa
+, libxkbcommon
+, libappindicator-gtk3
+, libxshmfence
+, libglvnd
+}@args:
+
+let
+  mkElectron = import ./generic.nix args;
+in
+rec {
+
+  electron = electron_17;
+
+  electron_9 = mkElectron "9.4.4" {
+    x86_64-linux = "781d6ca834d415c71078e1c2c198faba926d6fce19e31448bbf4450869135450";
+    x86_64-darwin = "f41c0bf874ddbba00c3d6989d07f74155a236e2d5a3eaf3d1d19ef8d3eb2256c";
+    i686-linux = "40e37f8f908a81c9fac1073fe22309cd6df2d68e685f83274c6d2f0959004187";
+    armv7l-linux = "2dfe3e21d30526688cc3d3215d06dfddca597a2cb62ff0c9d0d5f33d3e464a33";
+    aarch64-linux = "f1145e9a1feb5f2955e5f5565962423ac3c52ffe45ccc3b96c6ca485fa35bf27";
+    headers = "0yx8mkrm15ha977hzh7g2sc5fab9sdvlk1bk3yxignhxrqqbw885";
+  };
+
+  electron_10 = mkElectron "10.4.7" {
+    x86_64-linux = "e3ea75fcedce588c6b59cfa3a6e46ba67b789e14dc2e5b9dfe1ddf3f82b0f995";
+    x86_64-darwin = "8f01e020563b7fce68dc2e3d4bbf419320d13b088e89eb64f9645e9d73ad88fb";
+    i686-linux = "dd7fde9b3993538333ec701101554050b27d0b680196d0883ab563e8e696fc79";
+    armv7l-linux = "56f11ed14f8a620650d31c21ebd095ce59ef4286c98276802b18f9cc85560ddd";
+    aarch64-linux = "0550584518c8e98fe1113706c10fd7456ec519f7aa6867fbff17c8913327d758";
+    headers = "01x6a0r2jawjpl09ixgzap3g0z6znj34hsnnhzanavkbds0ri4k6";
+  };
+
+  electron_11 = mkElectron "11.5.0" {
+    x86_64-linux = "613ef8ac00c5abda425dfa48778a68f58a2e9c7c1f82539bb1a41afabbd6193f";
+    x86_64-darwin = "32937dca29fc397f0b15dbab720ed3edb88eee24f00f911984b307bf12dc8fd5";
+    i686-linux = "cd154c56d02d7b1f16e2bcd5650bddf0de9141fdbb8248adc64f6d607e5fb725";
+    armv7l-linux = "3f5a41037aaad658051d8bc8b04e8dece72b729dd1a1ed8311b365daa8deea76";
+    aarch64-linux = "f698a7743962f553fe36673f1c85bccbd918efba8f6dca3a3df39d41c8e2de3e";
+    aarch64-darwin = "749fb6bd676e174de66845b8ac959985f30a773dcb2c05553890bd99b94c9d60";
+    headers = "1zkdgpjrh1dc9j8qyrrrh49v24960yhvwi2c530qbpf2azgqj71b";
+  };
+
+  electron_12 = mkElectron "12.2.3" {
+    armv7l-linux = "4de83c34987ac7b3b2d0c8c84f27f9a34d9ea2764ae1e54fb609a95064e7e71a";
+    aarch64-linux = "d29d234c09ba810d89ed1fba9e405b6975916ea208d001348379f89b50d1835c";
+    x86_64-linux = "deae6d0941762147716b8298476080d961df2a32d0f6f57b244cbe3a2553cd24";
+    i686-linux = "11b4f159cd3b89d916cc05b5231c2cde53f0c6fb5be8e881824fde00daa5e8c2";
+    x86_64-darwin = "5af34f1198ce9fd17e9fa581f57a8ad2c9333187fb617fe943f30b8cde9e6231";
+    aarch64-darwin = "0db2c021a047a4cd5b28eea16490e16bc82592e3f8a4b96fbdc72a292ce13f50";
+    headers = "1idam1xirxqxqg4g7n33kdx2skk0r351m00g59a8yx9z82g06ah9";
+  };
+
+  electron_13 = mkElectron "13.6.9" {
+    armv7l-linux = "e70cf80ac17850f3291c19a89235c59a7a6e0c791e7965805872ce584479c419";
+    aarch64-linux = "cb570f77e46403a75b99740c41b297154f057dc3b9aa75fd235dccc5619972cf";
+    x86_64-linux = "5e29701394041ba2acd8a9bb042d77967c399b8fe007d7ffbd1d3e6bfdb9eb8a";
+    i686-linux = "7c31b60ee0e1d9966b8cf977528ace91e10ce25bb289a46eabbcf6087bee50e6";
+    x86_64-darwin = "3393f0e87f30be325b76fb2275fe2d5614d995457de77fe00fa6eef2d60f331e";
+    aarch64-darwin = "8471777eafc6fb641148a9c6acff2ea41c02a989d4d0a3a460322672d85169df";
+    headers = "0vvizddmhprprbdf6bklasz6amwc254bpc9j0zlx23d1pgyxpnhc";
+  };
+
+  electron_14 = mkElectron "14.2.6" {
+    armv7l-linux = "fd115652f491fff6a28bf39dc41e3c7f1b638e7dcc7856c33b6a97c7763ea9a3";
+    aarch64-linux = "530df3030aeb2c0f67ba4bc210c0f0fe77670001d2ba30ad6858f74952528df2";
+    x86_64-linux = "c3f91ced7e429079d43c182f47cea1eceef17ab65c390e15f9c6af56e58ed3d9";
+    i686-linux = "d66881d0747c99618c500b46e044eb4e97442400624fbcf9a6af114743e6e8db";
+    x86_64-darwin = "15db43c17a33bf9e31f66f5025e0810dfbd2b237f7645eda51409de7930cc9d1";
+    aarch64-darwin = "a5f7b8cc5f6dfc7561368d2f09745967bb553a29a22ef74af8f795225483338a";
+    headers = "0rxbij6qvi0xzcmbxf3fm1snvakaxp9c512z9ni36y98sgg4s3l8";
+  };
+
+  electron_15 = mkElectron "15.4.0" {
+    armv7l-linux = "40c073a3b416f83264327bdf5e33b334ffcd56a729ef237360d66f520f670d16";
+    aarch64-linux = "ef18ba74b4fa34a26f9ee819bb908c60d0dd9ec2048414629979760f262d72f8";
+    x86_64-linux = "5bdea4cbf5559491e9ad9f365fa6f7ec26603fd6f68bfa8848f2884ebd51662d";
+    i686-linux = "636d0e28bb20ca127c9b8722fe39e7e7d95fc63bd15b156b7af563296b3d9595";
+    x86_64-darwin = "8a132b2be0f27c7e8fa9a91a8b4b0fcdf3ec571c721cb5f5610dc8a6b3f0fd26";
+    aarch64-darwin = "82b29c37a427464a9278d617435ca19f472b00689c9e58163e99f30b90f33046";
+    headers = "0fc1sck7g160klpqzfcqv9zc45ia914mrncyma58zzcbzpk6k6yb";
+  };
+
+  electron_16 = mkElectron "16.0.10" {
+    armv7l-linux = "1a72fe59011cfcc1f376f2948dd5a70d2f75d6c12fb682a0246d2e596227b5e0";
+    aarch64-linux = "46cd1393816364a666ead410505bce4b51d68ce872446a71d16886b88c4b275a";
+    x86_64-linux = "3b4779e41e27200ce5fa94d20f9df05ff5c757be6805eb0e8952fe198d66f324";
+    i686-linux = "9e1426a8135d3fe195ba9fc1a5ea5ad4d5ce96bd513691897b39106698e3c3c8";
+    x86_64-darwin = "00b0222efa67fbb29f723fabebc4221646ebd6d5fdc09524df9a203f63ce660c";
+    aarch64-darwin = "1203f6ec4e8b97312254ceb122ca4399f39ae67bfe1636e426a798c89ec2a9ee";
+    headers = "10f6px88vg6napyhniczi6l660qs4l5mm0b9gdlds4i1y94s1zrl";
+  };
+
+  electron_17 = mkElectron "17.1.0" {
+    armv7l-linux = "09d92195821aad4ac03fbc858287a7372b6aa059081bb825d267853ee1b0425d";
+    aarch64-linux = "6a34d6802d44a391902f53baf0adc8b819d33e7c31b34614757b17b3223c9d1e";
+    x86_64-linux = "106ec28a5969366c1e1f642cc33ac41950c68bd182db23b04d7ac6886bfe28e8";
+    i686-linux = "19fe206be07a6df7f9f0ecdb411e3cafd3a53618edb19cc6adc77156f698444e";
+    x86_64-darwin = "bd80d6b0b62c9bec195d264aa21a255f4324a8b56849e04972c1fcc262757c31";
+    aarch64-darwin = "83fe2fc24976d09a0e0fcc3a60226f190cf9b67287fe4434d3d76d59fa45315c";
+    headers = "1zv1pigfbis1bsan28wx3bgkdwjc48pjq19wmxs73kd1khsy6w8r";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/electron/generic.nix b/nixpkgs/pkgs/development/tools/electron/generic.nix
new file mode 100644
index 000000000000..08edf8a30927
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/generic.nix
@@ -0,0 +1,118 @@
+{ lib, stdenv
+, libXScrnSaver
+, makeWrapper
+, fetchurl
+, wrapGAppsHook
+, glib
+, gtk3
+, unzip
+, atomEnv
+, libuuid
+, at-spi2-atk
+, at-spi2-core
+, libdrm
+, mesa
+, libxkbcommon
+, libappindicator-gtk3
+, libxshmfence
+, libglvnd
+}:
+
+version: hashes:
+let
+  pname = "electron";
+
+  meta = with lib; {
+    description = "Cross platform desktop application shell";
+    homepage = "https://github.com/electron/electron";
+    license = licenses.mit;
+    maintainers = with maintainers; [ travisbhartwell manveru prusnak ];
+    platforms = [ "x86_64-darwin" "x86_64-linux" "i686-linux" "armv7l-linux" "aarch64-linux" ]
+      ++ optionals (versionAtLeast version "11.0.0") [ "aarch64-darwin" ];
+    knownVulnerabilities = optional (versionOlder version "14.0.0") "Electron version ${version} is EOL";
+  };
+
+  fetcher = vers: tag: hash: fetchurl {
+    url = "https://github.com/electron/electron/releases/download/v${vers}/electron-v${vers}-${tag}.zip";
+    sha256 = hash;
+  };
+
+  headersFetcher = vers: hash: fetchurl {
+    url = "https://atom.io/download/electron/v${vers}/node-v${vers}-headers.tar.gz";
+    sha256 = hash;
+  };
+
+  tags = {
+    i686-linux = "linux-ia32";
+    x86_64-linux = "linux-x64";
+    armv7l-linux = "linux-armv7l";
+    aarch64-linux = "linux-arm64";
+    x86_64-darwin = "darwin-x64";
+    aarch64-darwin = "darwin-arm64";
+  };
+
+  get = as: platform: as.${platform.system} or
+    "Unsupported system: ${platform.system}";
+
+  common = platform: {
+    inherit pname version meta;
+    src = fetcher version (get tags platform) (get hashes platform);
+    passthru.headers = headersFetcher version hashes.headers;
+  };
+
+  electronLibPath = with lib; makeLibraryPath (
+    [ libuuid at-spi2-atk at-spi2-core libappindicator-gtk3 ]
+    ++ optionals (! versionOlder version "9.0.0") [ libdrm mesa ]
+    ++ optionals (! versionOlder version "11.0.0") [ libxkbcommon ]
+    ++ optionals (! versionOlder version "12.0.0") [ libxshmfence ]
+    ++ optionals (! versionOlder version "17.0.0") [ libglvnd ]
+  );
+
+  linux = {
+    buildInputs = [ glib gtk3 ];
+
+    nativeBuildInputs = [
+      unzip
+      makeWrapper
+      wrapGAppsHook
+    ];
+
+    dontWrapGApps = true; # electron is in lib, we need to wrap it manually
+
+    dontUnpack = true;
+    dontBuild = true;
+
+    installPhase = ''
+      mkdir -p $out/lib/electron $out/bin
+      unzip -d $out/lib/electron $src
+      ln -s $out/lib/electron/electron $out/bin
+    '';
+
+    postFixup = ''
+      patchelf \
+        --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        --set-rpath "${atomEnv.libPath}:${electronLibPath}:$out/lib/electron" \
+        $out/lib/electron/electron
+
+      wrapProgram $out/lib/electron/electron \
+        --prefix LD_PRELOAD : ${lib.makeLibraryPath [ libXScrnSaver ]}/libXss.so.1 \
+        "''${gappsWrapperArgs[@]}"
+    '';
+  };
+
+  darwin = {
+    nativeBuildInputs = [ 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 (
+    (common stdenv.hostPlatform) //
+    (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..48c8f0412e10
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/electron/print-hashes.sh
@@ -0,0 +1,39 @@
+#!/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
+    [aarch64-darwin]=darwin-arm64
+)
+
+hashfile="$(nix-prefetch-url --print-path "https://github.com/electron/electron/releases/download/v${VERSION}/SHASUMS256.txt" 2>/dev/null | tail -n1)"
+headers="$(nix-prefetch-url "https://atom.io/download/electron/v${VERSION}/node-v${VERSION}-headers.tar.gz")"
+
+# Entry similar to the following goes in default.nix:
+
+echo "  electron_${VERSION%%.*} = mkElectron \"${VERSION}\" {"
+
+for S in "${!SYSTEMS[@]}"; do
+  hash="$(grep " *electron-v${VERSION}-${SYSTEMS[$S]}.zip$" "$hashfile"|cut -f1 -d' ' || :)"
+  if [[ -n $hash ]]; then
+    echo "    $S = \"$hash\";"
+  fi
+done
+
+echo "    headers = \"$headers\";"
+
+echo "  };"
diff --git a/nixpkgs/pkgs/development/tools/eliot-tree/default.nix b/nixpkgs/pkgs/development/tools/eliot-tree/default.nix
new file mode 100644
index 000000000000..adcedfe643c5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/eliot-tree/default.nix
@@ -0,0 +1,38 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "eliot-tree";
+  version = "19.0.1";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "18gvijsm0vh3x83mv8dd80c3mpm80r7i111qsg4y7rj4i590phma";
+  };
+
+  checkInputs = with python3Packages; [
+    testtools
+    pytest
+   ];
+
+  propagatedBuildInputs = with python3Packages; [
+    colored
+    eliot
+    iso8601
+    jmespath
+    setuptools
+    toolz
+  ];
+
+  # Tests run eliot-tree in out/bin.
+  checkPhase = ''
+    export PATH=$out/bin:$PATH
+    pytest
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/jonathanj/eliottree";
+    description = "Render Eliot logs as an ASCII tree";
+    license = licenses.mit;
+    maintainers = [ maintainers.dpausp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/elkhound/default.nix b/nixpkgs/pkgs/development/tools/elkhound/default.nix
new file mode 100644
index 000000000000..5c29b10a6139
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/elkhound/default.nix
@@ -0,0 +1,50 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, bison
+, cmake
+, flex
+, perl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "elkhound";
+  version = "unstable-2020-04-13";
+
+  src = fetchFromGitHub {
+    owner = "WeiDUorg";
+    repo = pname;
+    rev = "a7eb4bb2151c00cc080613a770d37560f62a285c";
+    sha256 = "sha256-Y96OFpBNrD3vrKoEZ4KdJuI1Q4RmYANsu7H3ZzfaA6g=";
+  };
+
+  postPatch = ''
+    patchShebangs scripts
+  '';
+
+  sourceRoot = "source/src";
+
+  nativeBuildInputs = [ bison cmake flex perl ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin ast/astgen elkhound/elkhound
+    for d in ast elkhound smbase; do
+      install -Dm444 -t $out/lib $d/*.a
+      install -Dm444 -t $out/include/$d $src/src/$d/*.h
+    done
+    install -Dm444 -t $out/share/doc/${pname} $src/src/elkhound/*.txt
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A parser generator which emits GLR parsers, either in OCaml or C++";
+    homepage = "https://scottmcpeak.com/elkhound/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ peterhoeg ];
+    # possibly works on Darwin
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ent/default.nix b/nixpkgs/pkgs/development/tools/ent/default.nix
new file mode 100644
index 000000000000..79470814ada0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ent/default.nix
@@ -0,0 +1,40 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "ent-go";
+  version = "0.10.1";
+
+  src = fetchFromGitHub {
+    owner = "ent";
+    repo = "ent";
+    rev = "v${version}";
+    sha256 = "sha256-MvfbQKGVYWbZkqc3X3BqsB+z2KMkr0gMOquL02qHwUY=";
+  };
+
+  vendorSha256 = "sha256-BF2eD/jOtY1XhZ0hB7f3/frKQYwS9PbuGxum5SSnjzA=";
+
+  subPackages = [ "cmd/ent" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd ent \
+      --bash <($out/bin/ent completion bash) \
+      --fish <($out/bin/ent completion fish) \
+      --zsh <($out/bin/ent completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "An entity framework for Go";
+    downloadPage = "https://github.com/ent/ent";
+    license = licenses.asl20;
+    homepage = "https://entgo.io/";
+    maintainers = with maintainers; [ superherointj ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/errcheck/default.nix b/nixpkgs/pkgs/development/tools/errcheck/default.nix
new file mode 100644
index 000000000000..a387c14c0a5c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/errcheck/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "errcheck";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "kisielk";
+    repo = "errcheck";
+    rev = "v${version}";
+    sha256 = "sha256-Przf2c2jFNdkUq7IOUD7ChXHiSayAz4xTsNzajycYZ0=";
+  };
+
+  vendorSha256 = "sha256-rluaBdW+w2zPThELlBwX/6LXDgc2aIk/ucbrsrABpVc=";
+
+  meta = with lib; {
+    description = "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/esbuild/default.nix b/nixpkgs/pkgs/development/tools/esbuild/default.nix
new file mode 100644
index 000000000000..f7335a8ef8da
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/esbuild/default.nix
@@ -0,0 +1,22 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "esbuild";
+  version = "0.14.25";
+
+  src = fetchFromGitHub {
+    owner = "evanw";
+    repo = "esbuild";
+    rev = "v${version}";
+    sha256 = "sha256-95xVQU1AWIDvMlWJpB54RxGoOtZtaUlyfmfdcKERe6Y=";
+  };
+
+  vendorSha256 = "sha256-QPkBR+FscUc3jOvH7olcGUhM6OW4vxawmNJuRQxPuGs=";
+
+  meta = with lib; {
+    description = "An extremely fast JavaScript bundler";
+    homepage = "https://esbuild.github.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lucus16 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/esbuild/netlify.nix b/nixpkgs/pkgs/development/tools/esbuild/netlify.nix
new file mode 100644
index 000000000000..efd5b917e9cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/esbuild/netlify.nix
@@ -0,0 +1,22 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "esbuild";
+  version = "0.13.6";
+
+  src = fetchFromGitHub {
+    owner = "netlify";
+    repo = "esbuild";
+    rev = "v${version}";
+    sha256 = "0asjmqfzdrpfx2hd5hkac1swp52qknyqavsm59j8xr4c1ixhc6n9";
+  };
+
+  vendorSha256 = "sha256-2ABWPqhK2Cf4ipQH7XvRrd+ZscJhYPc3SV2cGT0apdg=";
+
+  meta = with lib; {
+    description = "A fork of esbuild maintained by netlify";
+    homepage = "https://github.com/netlify/esbuild";
+    license = licenses.mit;
+    maintainers = with maintainers; [ roberth ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/evans/default.nix b/nixpkgs/pkgs/development/tools/evans/default.nix
new file mode 100644
index 000000000000..29dadf243043
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/evans/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "evans";
+  version = "0.10.2";
+
+  src = fetchFromGitHub {
+    owner = "ktr0731";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-F9URMwQaSAQZaiZ95rDZqe8+YcJ9aMInSTIgQ7JLyOw=";
+  };
+
+  subPackages = [ "." ];
+
+  vendorSha256 = "sha256-ICGnjI9sFwt81rZCnap/rggfSs4+pZNmLouoTY7CYKw=";
+
+  meta = with lib; {
+    description = "More expressive universal gRPC client";
+    homepage = "https://evans.syfm.me/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ diogox ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/f2c/default.nix b/nixpkgs/pkgs/development/tools/f2c/default.nix
new file mode 100644
index 000000000000..f235296308fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/f2c/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  pname = "f2c";
+  version = "20200916";
+
+  src = fetchurl {
+    url = "https://www.netlib.org/f2c/src.tgz";
+    sha256 = "0d8xfbv6dk4dz95qds7sd44b5hvara07f2g2c5g4xiwim9b7916l";
+  };
+
+  makeFlags = [ "-f" "makefile.u" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/man/man1
+    install -m755 f2c $out/bin
+    install -m755 xsum $out/bin
+    install f2c.1t $out/share/man/man1
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Convert Fortran 77 source code to C";
+    homepage = "https://www.netlib.org/f2c/";
+    license = licenses.mit;
+    maintainers = [ maintainers.markuskowa ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/faas-cli/default.nix b/nixpkgs/pkgs/development/tools/faas-cli/default.nix
new file mode 100644
index 000000000000..58e048b4f5fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/faas-cli/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+let
+  faasPlatform = platform:
+    let cpuName = platform.parsed.cpu.name; in {
+      "aarch64" = "arm64";
+      "armv7l" = "armhf";
+      "armv6l" = "armhf";
+    }.${cpuName} or cpuName;
+in
+buildGoModule rec {
+  pname = "faas-cli";
+  version = "0.14.3";
+
+  src = fetchFromGitHub {
+    owner = "openfaas";
+    repo = "faas-cli";
+    rev = version;
+    sha256 = "sha256-1aflQXfW/y31Dk0OZW77qNQKEwkhi6p8ZBfTUyRDbdo=";
+  };
+
+  CGO_ENABLED = 0;
+
+  vendorSha256 = null;
+
+  subPackages = [ "." ];
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/openfaas/faas-cli/version.GitCommit=ref/tags/${version}"
+    "-X github.com/openfaas/faas-cli/version.Version=${version}"
+    "-X github.com/openfaas/faas-cli/commands.Platform=${faasPlatform stdenv.targetPlatform}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/openfaas/faas-cli";
+    description = "Official CLI for OpenFaaS ";
+    license = licenses.mit;
+    maintainers = with maintainers; [ welteki ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fac/default.nix b/nixpkgs/pkgs/development/tools/fac/default.nix
new file mode 100644
index 000000000000..c50fd834e031
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fac/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoPackage, fetchFromGitHub, makeWrapper, git }:
+
+buildGoPackage rec {
+  pname = "fac";
+  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 $out/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 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..8545bae7e22d
--- /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";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/fdroidserver/default.nix b/nixpkgs/pkgs/development/tools/fdroidserver/default.nix
new file mode 100644
index 000000000000..328860385596
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fdroidserver/default.nix
@@ -0,0 +1,65 @@
+{ fetchFromGitLab
+, python
+, lib
+, apksigner
+}:
+
+python.pkgs.buildPythonApplication rec {
+  version = "2.0.3";
+  pname = "fdroidserver";
+
+  src = fetchFromGitLab {
+    owner = "fdroid";
+    repo = "fdroidserver";
+    rev = version;
+    sha256 = "sha256-/tX45t/DsWd0/R9VJJsqNjoOkgGIvqvq05YaVp0pLf0=";
+  };
+
+  postPatch = ''
+    substituteInPlace fdroidserver/common.py --replace "FDROID_PATH = os.path.realpath(os.path.join(os.path.dirname(__file__), '..'))" "FDROID_PATH = '$out/bin'"
+  '';
+
+  preConfigure = ''
+    ${python.interpreter} setup.py compile_catalog
+  '';
+  postInstall = ''
+    patchShebangs gradlew-fdroid
+    install -m 0755 gradlew-fdroid $out/bin
+  '';
+
+  buildInputs = [ python.pkgs.Babel ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    androguard
+    clint
+    defusedxml
+    GitPython
+    libcloud
+    mwclient
+    paramiko
+    pillow
+    pyasn1
+    pyasn1-modules
+    python-vagrant
+    pyyaml
+    qrcode
+    requests
+    ruamel-yaml
+    yamllint
+  ];
+
+  makeWrapperArgs = [ "--prefix" "PATH" ":" "${lib.makeBinPath [ apksigner ]}" ];
+
+  # no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "fdroidserver" ];
+
+  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.obfusk ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/fission/default.nix b/nixpkgs/pkgs/development/tools/fission/default.nix
new file mode 100644
index 000000000000..0151a6fb38ba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fission/default.nix
@@ -0,0 +1,30 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "fission";
+  version = "1.14.1";
+
+  src = fetchFromGitHub {
+    owner = "fission";
+    repo = "fission";
+    rev = version;
+    sha256 = "sha256-U/UV5NZXmycDp8+g5XV6P2b+4SutR51rVHdPp9HdPjM=";
+  };
+
+  vendorSha256 = "sha256-1ujJuhK7pm/A1Dd+Wm9dtc65mx9pwLBWMWwEJnbja8s=";
+
+  ldflags = [ "-s" "-w" "-X info.Version=${version}" ];
+
+  subPackages = [ "cmd/fission-cli" ];
+
+  postInstall = ''
+    ln -s $out/bin/fission-cli $out/bin/fission
+  '';
+
+  meta = with lib; {
+    description = "The cli used by end user to interact Fission";
+    homepage = "https://fission.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ neverbehave ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flamegraph/default.nix b/nixpkgs/pkgs/development/tools/flamegraph/default.nix
new file mode 100644
index 000000000000..3a64d741de5c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flamegraph/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "FlameGraph";
+  version = "2019-02-16";
+
+  src = fetchFromGitHub {
+    owner = "brendangregg";
+    repo = pname;
+    rev = "1b1c6deede9c33c5134c920bdb7a44cc5528e9a7";
+    sha256 = "1flvkmv2gbb003d51myl7r0wyhyw1bk9p7v19xagb8xjj4ci947b";
+  };
+
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    for x in $src/*.pl $src/*.awk $src/dev/*.pl $src/dev/*.d; do
+      cp $x $out/bin
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    license = with licenses; [ asl20 cddl gpl2Plus ];
+    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..4e96294fe3e0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flatpak-builder/default.nix
@@ -0,0 +1,158 @@
+{ lib, stdenv
+, fetchurl
+, substituteAll
+, nixosTests
+
+, autoreconfHook
+, docbook_xml_dtd_412
+, docbook_xml_dtd_42
+, docbook_xml_dtd_43
+, docbook_xsl
+, gettext
+, libxml2
+, libxslt
+, pkg-config
+, xmlto
+
+, acl
+, breezy
+, binutils
+, bzip2
+, coreutils
+, cpio
+, curl
+, debugedit
+, elfutils
+, flatpak
+, gitMinimal
+, glib
+, glibcLocales
+, gnumake
+, gnupg
+, gnutar
+, json-glib
+, libcap
+, libdwarf
+, libsoup
+, libyaml
+, ostree
+, patch
+, python2
+, rpm
+, unzip
+}:
+
+let
+  installed_testdir = "${placeholder "installedTests"}/libexec/installed-tests/flatpak-builder";
+  installed_test_metadir = "${placeholder "installedTests"}/share/installed-tests/flatpak-builder";
+in stdenv.mkDerivation rec {
+  pname = "flatpak-builder";
+  version = "1.2.2";
+
+  outputs = [ "out" "doc" "man" "installedTests" ];
+
+  src = fetchurl {
+    url = "https://github.com/flatpak/flatpak-builder/releases/download/${version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-if2mjlN8Hp3gI1JpC9icMhenKRZFWNNfNbCPea2E4D4=";
+  };
+
+  patches = [
+    # patch taken from gtk_doc
+    ./respect-xml-catalog-files-var.patch
+
+    # Hardcode paths
+    (substituteAll {
+      src = ./fix-paths.patch;
+      brz = "${breezy}/bin/brz";
+      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";
+    })
+
+    # The test scripts in Flatpak repo were updated so we are basing
+    # this on our patch for Flatpak 0.99.
+    (substituteAll {
+      src = ./fix-test-paths.patch;
+      inherit glibcLocales python2;
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    docbook_xml_dtd_43
+    docbook_xsl
+    gettext
+    libxml2
+    libxslt
+    pkg-config
+    xmlto
+  ];
+
+  buildInputs = [
+    acl
+    bzip2
+    curl
+    debugedit
+    elfutils
+    flatpak
+    glib
+    json-glib
+    libcap
+    libdwarf
+    libsoup
+    libxml2
+    libyaml
+    ostree
+  ];
+
+  configureFlags = [
+    "--enable-installed-tests"
+    "--with-system-debugedit"
+  ];
+
+  makeFlags = [
+    "installed_testdir=${installed_testdir}"
+    "installed_test_metadir=${installed_test_metadir}"
+  ];
+
+  # Some scripts used by tests  need to use shebangs that are available in Flatpak runtimes.
+  dontPatchShebangs = true;
+
+  enableParallelBuilding = true;
+
+  # Installed tests
+  postFixup = ''
+    for file in ${installed_testdir}/{test-builder.sh,test-builder-python.sh}; do
+      patchShebangs $file
+    done
+  '';
+
+  passthru = {
+    installedTestsDependencies = [
+      gnupg
+      ostree
+      python2
+      gnumake
+    ];
+
+    tests = {
+      installedTests = nixosTests.installed-tests.flatpak-builder;
+    };
+  };
+
+  meta = with lib; {
+    description = "Tool to build flatpaks from source";
+    homepage = "https://github.com/flatpak/flatpak-builder";
+    license = licenses.lgpl21Plus;
+    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..c0df2c6cbe7e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flatpak-builder/fix-paths.patch
@@ -0,0 +1,151 @@
+diff --git a/src/builder-context.c b/src/builder-context.c
+index dde12790..3a379297 100644
+--- a/src/builder-context.c
++++ b/src/builder-context.c
+@@ -256,7 +256,7 @@ builder_context_init (BuilderContext *self)
+   g_autofree char *path = NULL;
+ 
+   self->rofiles_file_lock = init;
+-  path = g_find_program_in_path ("rofiles-fuse");
++  path = g_find_program_in_path ("@rofilesfuse@");
+   self->have_rofiles = path != NULL;
+ }
+ 
+@@ -800,7 +800,7 @@ builder_context_enable_rofiles (BuilderContext *self,
+   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),
+diff --git a/src/builder-git.c b/src/builder-git.c
+index ef517adb..6ab095f0 100644
+--- a/src/builder-git.c
++++ b/src/builder-git.c
+@@ -44,7 +44,7 @@ git (GFile   *dir,
+   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 @@ cp (GError **error,
+   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;
+diff --git a/src/builder-source-archive.c b/src/builder-source-archive.c
+index 3c694e57..0de62318 100644
+--- a/src/builder-source-archive.c
++++ b/src/builder-source-archive.c
+@@ -443,7 +443,7 @@ tar (GFile   *dir,
+   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;
+@@ -458,7 +458,7 @@ unzip (GFile   *dir,
+   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;
+@@ -483,7 +483,7 @@ unrpm (GFile   *dir,
+        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 };
+@@ -631,7 +631,7 @@ git (GFile   *dir,
+   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;
+diff --git a/src/builder-source-bzr.c b/src/builder-source-bzr.c
+index ceeec94a..8abe6f53 100644
+--- a/src/builder-source-bzr.c
++++ b/src/builder-source-bzr.c
+@@ -124,7 +124,7 @@ bzr (GFile   *dir,
+   gboolean res;
+   va_list ap;
+ 
+-  brz = g_find_program_in_path ("brz");
++  brz = g_find_program_in_path ("@brz@");
+ 
+   va_start (ap, error);
+   res = flatpak_spawn (dir, output, 0, error, brz ? brz : "bzr", ap);
+diff --git a/src/builder-source-patch.c b/src/builder-source-patch.c
+index 8721e1e4..d7f4d840 100644
+--- a/src/builder-source-patch.c
++++ b/src/builder-source-patch.c
+@@ -247,15 +247,15 @@ patch (GFile      *dir,
+ 
+   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]);
+diff --git a/src/builder-utils.c b/src/builder-utils.c
+index f1c06db5..2e3347c5 100644
+--- a/src/builder-utils.c
++++ b/src/builder-utils.c
+@@ -149,7 +149,7 @@ strip (GError **error,
+   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 @@ eu_strip (GError **error,
+   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 @@ eu_elfcompress (GError **error,
+   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/fix-test-paths.patch b/nixpkgs/pkgs/development/tools/flatpak-builder/fix-test-paths.patch
new file mode 100644
index 000000000000..96212a30fcf8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flatpak-builder/fix-test-paths.patch
@@ -0,0 +1,111 @@
+--- a/tests/libtest.sh
++++ b/tests/libtest.sh
+@@ -301,7 +301,7 @@
+ }
+ 
+ skip_without_python2 () {
+-    if ! test -f /usr/bin/python2 || ! /usr/bin/python2 -c "import sys; sys.exit(0 if sys.version_info >= (2, 7) else 1)" ; then
++    if ! test -f @python2@/bin/python2 || ! @python2@/bin/python2 -c "import sys; sys.exit(0 if sys.version_info >= (2, 7) else 1)" ; then
+         echo "1..0 # SKIP this test requires /usr/bin/python2 (2.7) support"
+         exit 0
+     fi
+--- a/tests/make-test-runtime.sh
++++ b/tests/make-test-runtime.sh
+@@ -26,6 +26,7 @@
+ PATH="$PATH:/usr/sbin:/sbin"
+ 
+ # Add bash and dependencies
++mkdir -p ${DIR}/nix/store
+ mkdir -p ${DIR}/usr/bin
+ mkdir -p ${DIR}/usr/lib
+ ln -s ../lib ${DIR}/usr/lib64
+@@ -35,73 +36,28 @@
+ else
+     cp `which ldconfig` ${DIR}/usr/bin
+ fi
+-LIBS=`mktemp`
+-BINS=`mktemp`
+-
+-add_bin() {
+-    local f=$1
+-    shift
+-
+-    if grep -qFe "${f}" $BINS; then
+-        # Already handled
+-        return 0
+-    fi
+-
+-    echo $f >> $BINS
+-
+-    # Add library dependencies
+-    (ldd "${f}" | sed "s/.* => //"  | awk '{ print $1}' | grep ^/ | sort -u -o $LIBS $LIBS -)  || true
+-
+-    local shebang=$(sed -n '1s/^#!\([^ ]*\).*/\1/p' "${f}")
+-    if [ x$shebang != x ]; then
+-        add_bin "$shebang"
+-    fi
+-}
+ 
+ for i in $@; do
+-    I=`which $i`
+-    add_bin $I
+-    if test $i == python2; then
+-        mkdir -p ${DIR}/usr/lib/python2.7/lib-dynload
+-        # This is a hardcoded minimal set of modules we need in the current tests.
+-        # Pretty hacky stuff. Add modules as needed.
+-        PYDIR=/usr/lib/python2.7
+-        if test -d /usr/lib64/python2.7; then PYDIR=/usr/lib64/python2.7; fi
+-        for py in site os stat posixpath genericpath warnings \
+-                       linecache types UserDict abc _abcoll \
+-                       _weakrefset copy_reg traceback sysconfig \
+-                       re sre_compile sre_parse sre_constants \
+-                       _sysconfigdata ; do
+-            cp ${PYDIR}/$py.py ${DIR}/usr/lib/python2.7
+-        done
+-        # These might not exist, depending how Python was configured; and the
+-        # part after ${so} might be "module" or ".x86_64-linux-gnu" or
+-        # something else
+-        for so in _locale strop ; do
+-            cp ${PYDIR}/lib-dynload/${so}*.so ${DIR}/usr/lib/python2.7/lib-dynload || :
+-        done
+-        for plat in $( cd ${PYDIR} && echo plat-* ); do
+-            test -e ${PYDIR}/${plat} || continue
+-            mkdir -p ${DIR}/usr/lib/python2.7/${plat}
+-            cp ${PYDIR}/${plat}/*.py ${DIR}/usr/lib/python2.7/${plat}/
+-        done
+-    fi
+-done
+-for i in `cat $BINS`; do
+-    echo Adding binary $i 1>&2
+-    cp "$i" ${DIR}/usr/bin/
+-done
+-for i in `cat $LIBS`; do
+-    echo Adding library $i 1>&2
+-    cp "$i" ${DIR}/usr/lib/
++    I=$(readlink -f $(which $i))
++    requisites=$(nix-store --query --requisites "$I")
++    for r in $requisites; do
++        # a single store item can be needed by multiple paths, no need to copy it again
++        if [ ! -e ${DIR}/$r ]; then
++            cp -r $r ${DIR}/$r
++        fi
++    done
++    ln -s $I ${DIR}/usr/bin/$i
+ done
+ ln -s bash ${DIR}/usr/bin/sh
+ 
+-# We copy the C.UTF8 locale and call it en_US. Its a bit of a lie, but
+-# the real en_US locale is often not available, because its in the
+-# local archive.
++mv ${DIR}/nix/store ${DIR}/usr/store # files outside /usr are not permitted, we will have to replace /nix/store with /usr/store
++chmod -R u+w ${DIR} # nix store has read-only directories which would cause problems during clean-up, files need to be writable for sed
++find ${DIR} -type f -print0 | xargs -0 sed -i 's~/nix/store/~/usr/store/~g' # replace hardcoded paths
++find ${DIR} -type l | xargs -I '{}' sh -c 'tg="$(readlink "$1")"; newtg="${tg#/nix/store/}"; if [ "$tg" != "$newtg" ]; then ln -fs "/usr/store/$newtg" "$1"; fi' -- '{}' # replace symlink targets
++
++# We copy the whole locale archive because we do not have C.UTF8 locale
+ mkdir -p ${DIR}/usr/lib/locale/
+-cp -r /usr/lib/locale/C.* ${DIR}/usr/lib/locale/en_US
++cp @glibcLocales@/lib/locale/locale-archive ${DIR}/usr/lib/locale/locale-archive
+ 
+ if [ x$COLLECTION_ID != x ]; then
+     collection_args=--collection-id=${COLLECTION_ID}
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/flawfinder/default.nix b/nixpkgs/pkgs/development/tools/flawfinder/default.nix
new file mode 100644
index 000000000000..0129cf73741b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flawfinder/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, fetchurl
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "flawfinder";
+  version = "2.0.19";
+
+  src = fetchurl {
+    url = "https://dwheeler.com/flawfinder/flawfinder-${version}.tar.gz";
+    sha256 = "sha256-/lUJgdNwq/oKKWcTRswLA4Ipqb2QsjnqsPAfEiEt9hg=";
+  };
+
+  # Project is using a combination of bash/Python for the tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "flawfinder" ];
+
+  meta = with lib; {
+    description = "Tool to examines C/C++ source code for security flaws";
+    homepage = "https://dwheeler.com/flawfinder/";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ fab ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flip-link/default.nix b/nixpkgs/pkgs/development/tools/flip-link/default.nix
new file mode 100644
index 000000000000..6e752379a73a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flip-link/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "flip-link";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "knurling-rs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-LE0cWS6sOb9/VvGloezNnePHGldnpfNTdCFUv3F/nwE=";
+  };
+
+  cargoSha256 = "sha256-8WBMF5stMB4JXvYwa5yHVFV+3utDuMFJNTZ4fZFDftw=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  meta = with lib; {
+    description = "Adds zero-cost stack overflow protection to your embedded programs";
+    homepage = "https://github.com/knurling-rs/flip-link";
+    license = with licenses; [ asl20 mit ];
+    maintainers = [ maintainers.FlorianFranzen ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flock/default.nix b/nixpkgs/pkgs/development/tools/flock/default.nix
new file mode 100644
index 000000000000..a6ba410ec710
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flock/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, lib, fetchFromGitHub, autoreconfHook, ronn }:
+
+stdenv.mkDerivation rec {
+  pname = "flock";
+  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..e4f76ca9f6af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flootty/default.nix
@@ -0,0 +1,18 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "Flootty";
+  version = "3.2.2";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "0gfl143ly81pmmrcml91yr0ypvwrs5q4s1sfdc0l2qkqpy233ih7";
+  };
+
+  meta = with 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 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/flyway/default.nix b/nixpkgs/pkgs/development/tools/flyway/default.nix
new file mode 100644
index 000000000000..0e1d18d2eb1c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/flyway/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, jre_headless, makeWrapper }:
+stdenv.mkDerivation rec{
+  pname = "flyway";
+  version = "7.13.0";
+  src = fetchurl {
+    url = "mirror://maven/org/flywaydb/flyway-commandline/${version}/flyway-commandline-${version}.tar.gz";
+    sha256 = "sha256-rZUVxswJdCFKwuXlzko+t+ZO1plRgH2VcZFJ5kkiM2s=";
+  };
+  nativeBuildInputs = [ makeWrapper ];
+  dontBuild = true;
+  dontStrip = true;
+  installPhase = ''
+    mkdir -p $out/bin $out/share/flyway
+    cp -r sql jars drivers conf $out/share/flyway
+    install -Dt $out/share/flyway/lib lib/community/*.jar lib/*.jar
+    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" \
+      --add-flags "-jarDirs='$out/share/flyway/jars'"
+  '';
+  meta = with lib; {
+    description = "Evolve your Database Schema easily and reliably across all your instances";
+    longDescription = ''
+      The Flyway command-line tool is a standalone Flyway distribution.
+      It is primarily meant for users who wish to migrate their database from the command-line
+      without having to integrate Flyway into their applications nor having to install a build tool.
+
+      This package is only the Community Edition of the Flyway command-line tool.
+    '';
+    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..852f00bf69c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fmbt/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchFromGitHub, python, autoreconfHook, pkg-config, makeWrapper
+, flex
+, gettext, libedit, glib, imagemagick6, libxml2, boost, gnuplot, graphviz
+, tesseract, gts, libXtst
+}:
+stdenv.mkDerivation rec {
+  version = "0.42";
+  pname = "fMBT";
+
+  src = fetchFromGitHub {
+    owner = "intel";
+    repo = "fMBT";
+    rev = "v${version}";
+    sha256 = "1jb9nb2mipc5cg99a80dny4m06vz2zral0q30fv75rz2cb6ja4zp";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config flex makeWrapper
+    python.pkgs.wrapPython ];
+
+  buildInputs = [ python gettext libedit glib imagemagick6 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="${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 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/fnlfmt/default.nix b/nixpkgs/pkgs/development/tools/fnlfmt/default.nix
new file mode 100644
index 000000000000..86ca6b843d24
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fnlfmt/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromSourcehut, fennel, lua }:
+
+stdenv.mkDerivation rec {
+  pname = "fnlfmt";
+  version = "0.2.2";
+
+  src = fetchFromSourcehut {
+    owner = "~technomancy";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-ZuSXeAhxfH0F/Y0nwqisxLMwh21Kub7viNcXD3FVYOc=";
+  };
+
+  nativeBuildInputs = [ fennel ];
+
+  buildInputs = [ lua ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    echo "#!${lua}/bin/lua" > fnlfmt
+    ${fennel}/bin/fennel --require-as-include --compile cli.fnl >> fnlfmt
+    chmod +x fnlfmt
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D ./fnlfmt $out/bin/fnlfmt
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Formatter for Fennel";
+    homepage = "https://git.sr.ht/~technomancy/fnlfmt";
+    license = licenses.lgpl3Plus;
+    platforms = lua.meta.platforms;
+    maintainers = with maintainers; [ gpanders chiroptical ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fnm/default.nix b/nixpkgs/pkgs/development/tools/fnm/default.nix
new file mode 100644
index 000000000000..c83966c7d6d3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fnm/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, installShellFiles
+, DiskArbitration
+, Foundation
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fnm";
+  version = "1.31.0";
+
+  src = fetchFromGitHub {
+    owner = "Schniz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-8A6MKDeyuk0bzyoDydcOy4LzyYe/S+x+ZJMTOo59UA8=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ DiskArbitration Foundation Security ];
+
+  cargoSha256 = "sha256-oiGYkRqxN6e5EG6EDQalIK0tOekyIVQ+GhxCKK0Sd3g=";
+
+  doCheck = false;
+
+  postInstall = ''
+    installShellCompletion --cmd fnm \
+      --bash <($out/bin/fnm completions --shell bash) \
+      --fish <($out/bin/fnm completions --shell fish) \
+      --zsh <($out/bin/fnm completions --shell zsh)
+  '';
+
+  meta = with lib; {
+    description = "Fast and simple Node.js version manager";
+    homepage = "https://github.com/Schniz/fnm";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ kidonng ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fortran-language-server/default.nix b/nixpkgs/pkgs/development/tools/fortran-language-server/default.nix
new file mode 100644
index 000000000000..2c606ab715b5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fortran-language-server/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchPypi, buildPythonApplication }:
+
+buildPythonApplication rec {
+  pname = "fortran-language-server";
+  version = "1.12.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "7Dkh7yPX4rULkzfJFxg47YxrCaxuHk+k3TOINHS9T5A=";
+  };
+
+  checkPhase = "$out/bin/fortls --help 1>/dev/null";
+  pythonImportsCheck = [ "fortls" ];
+
+  meta = with lib; {
+    description = "FORTRAN Language Server for the Language Server Protocol";
+    homepage = "https://pypi.org/project/fortran-language-server/";
+    license = [ licenses.mit ];
+    maintainers = [ maintainers.sheepforce ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fprettify/default.nix b/nixpkgs/pkgs/development/tools/fprettify/default.nix
new file mode 100644
index 000000000000..a5eed6bdc28c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fprettify/default.nix
@@ -0,0 +1,28 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "fprettify";
+  version = "0.3.7";
+
+  src = fetchFromGitHub {
+    owner = "pseewald";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "17v52rylmsy3m3j5fcb972flazykz2rvczqfh8mxvikvd6454zyj";
+  };
+
+  preConfigure = ''
+    patchShebangs fprettify.py
+  '';
+
+  propagatedBuildInputs = with python3Packages; [
+    configargparse
+  ];
+
+  meta = with lib; {
+    description = "An auto-formatter for modern Fortran code that imposes strict whitespace formatting, written in Python.";
+    homepage = "https://pypi.org/project/fprettify/";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fabiangd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fq/default.nix b/nixpkgs/pkgs/development/tools/fq/default.nix
new file mode 100644
index 000000000000..cc80fbf74fcf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fq/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fq
+, testVersion
+}:
+
+buildGoModule rec {
+  pname = "fq";
+  version = "0.0.4";
+
+  src = fetchFromGitHub {
+    owner = "wader";
+    repo = "fq";
+    rev = "v${version}";
+    sha256 = "sha256-mnb/9zcFSeBasGPYSGWoBhnldljGW3VK070zTO8M/uk=";
+  };
+
+  vendorSha256 = "sha256-KPIO/ZuiwxlnjGLaEuClkDsJnx/fwW0jPDBc7aTT68A=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  passthru.tests = testVersion { package = fq; };
+
+  meta = with lib; {
+    description = "jq for binary formats";
+    homepage = "https://github.com/wader/fq";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/frugal/default.nix b/nixpkgs/pkgs/development/tools/frugal/default.nix
new file mode 100644
index 000000000000..5cb92b3b834b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/frugal/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "frugal";
+  version = "3.14.15";
+
+  src = fetchFromGitHub {
+    owner = "Workiva";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-7840HndsU5+mWKQ/HXLVYA2dV7L8NlM7so1nk8Zdc2c=";
+  };
+
+  subPackages = [ "." ];
+
+  vendorSha256 = "sha256-vWqj2fRtaDextDstIb5GrdRn4nxQpCfjegYiVbPILuM=";
+
+  meta = with lib; {
+    description = "Thrift improved";
+    homepage = "https://github.com/Workiva/frugal";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ diogox ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/fundoc/default.nix b/nixpkgs/pkgs/development/tools/fundoc/default.nix
new file mode 100644
index 000000000000..47484b78759c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fundoc/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fundoc";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "csssr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0nd03c2lz07ghaab67kgl5pw8z8mv6kwx3xzr4pqr7v5b983py6v";
+  };
+
+  cargoSha256 = "sha256-6riBlCyqNN2nzgwfVfbRy1avT9b0PdetOrbmbaltsjE=";
+
+  meta = with lib; {
+    description = "Language agnostic documentation generator";
+    homepage = "https://github.com/csssr/fundoc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
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..08cf6caae3ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/fusee-launcher/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv
+, python3Packages
+, python3
+, fetchFromGitHub
+, pkgsCross
+, makeWrapper
+} :
+
+stdenv.mkDerivation {
+  pname = "fusee-launcher";
+  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 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..df7e58bde457
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/galen/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, jre8, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "galen";
+  version = "2.4.4";
+
+  inherit jre8;
+
+  src = fetchurl {
+    url = "https://github.com/galenframework/galen/releases/download/galen-${version}/galen-bin-${version}.zip";
+    sha256 = "13dq8cf0yy24vym6z7p8hb0mybgpcl4j5crsaq8a6pjfxz6d17mq";
+  };
+
+  nativeBuildInputs = [ 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 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..d7715d67acb4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gamecube-tools/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
+, freeimage, libGL }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.4";
+  pname = "gamecube-tools";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ freeimage libGL ];
+
+  src = fetchFromGitHub {
+    owner = "devkitPro";
+    repo  = "gamecube-tools";
+    rev = "v${version}";
+    sha256 = "sha256-0iMY2LokfsYgHzIuFc8RlrVlJCURqVqprP54PG4oW0M=";
+  };
+
+  meta = with 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..1048ca194411
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gauge/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gauge";
+  version = "1.4.3";
+
+  excludedPackages = ''\(build\|man\)'';
+
+  src = fetchFromGitHub {
+    owner = "getgauge";
+    repo = "gauge";
+    rev = "v${version}";
+    sha256 = "sha256-TszZAREk6Hs2jULjftQAhHRIVKaZ8fw0NLJkBdr0FPw=";
+  };
+
+  vendorSha256 = "1wp19m5n85c7lsv8rvcbfz1bv4zhhb7dj1frkdh14cqx70s33q8r";
+
+  meta = with lib; {
+    description = "Light weight cross-platform test automation";
+    homepage = "https://gauge.org";
+    license = licenses.asl20;
+    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..7ecb7895d2f9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gdm/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "gdm";
+  version = "1.4";
+
+  goPackagePath = "github.com/sparrc/gdm";
+
+  src = fetchFromGitHub {
+    owner = "sparrc";
+    repo = "gdm";
+    rev = version;
+    sha256 = "0kpqmbg144qcvd8k88j9yx9lrld85ray2viw161xajafk16plvld";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "Minimalist dependency manager for Go written in Go";
+    homepage = "https://github.com/sparrc/gdm";
+    license = licenses.unlicense;
+    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/cargo-lock.patch b/nixpkgs/pkgs/development/tools/geckodriver/cargo-lock.patch
new file mode 100644
index 000000000000..2a19cca202e6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/geckodriver/cargo-lock.patch
@@ -0,0 +1,1455 @@
+diff --git a/testing/geckodriver/Cargo.lock b/testing/geckodriver/Cargo.lock
+new file mode 100644
+index 0000000..4430666
+--- /dev/null
++++ b/Cargo.lock
+@@ -0,0 +1,1449 @@
++# This file is automatically @generated by Cargo.
++# It is not intended for manual editing.
++version = 3
++
++[[package]]
++name = "adler"
++version = "1.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
++
++[[package]]
++name = "aho-corasick"
++version = "0.7.18"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
++dependencies = [
++ "memchr",
++]
++
++[[package]]
++name = "autocfg"
++version = "1.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
++
++[[package]]
++name = "base64"
++version = "0.10.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
++dependencies = [
++ "byteorder",
++]
++
++[[package]]
++name = "base64"
++version = "0.12.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
++
++[[package]]
++name = "base64"
++version = "0.13.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
++
++[[package]]
++name = "bitflags"
++version = "1.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
++
++[[package]]
++name = "block-buffer"
++version = "0.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
++dependencies = [
++ "generic-array",
++]
++
++[[package]]
++name = "byteorder"
++version = "1.4.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
++
++[[package]]
++name = "bytes"
++version = "0.5.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
++
++[[package]]
++name = "bytes"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
++
++[[package]]
++name = "cfg-if"
++version = "0.1.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
++
++[[package]]
++name = "cfg-if"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
++
++[[package]]
++name = "chrono"
++version = "0.4.19"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
++dependencies = [
++ "libc",
++ "num-integer",
++ "num-traits",
++ "time",
++ "winapi 0.3.9",
++]
++
++[[package]]
++name = "clap"
++version = "2.34.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
++dependencies = [
++ "bitflags",
++ "strsim",
++ "term_size",
++ "textwrap",
++ "unicode-width",
++]
++
++[[package]]
++name = "cookie"
++version = "0.12.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5"
++dependencies = [
++ "time",
++]
++
++[[package]]
++name = "cpufeatures"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469"
++dependencies = [
++ "libc",
++]
++
++[[package]]
++name = "crc32fast"
++version = "1.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836"
++dependencies = [
++ "cfg-if 1.0.0",
++]
++
++[[package]]
++name = "digest"
++version = "0.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
++dependencies = [
++ "generic-array",
++]
++
++[[package]]
++name = "dirs"
++version = "2.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3"
++dependencies = [
++ "cfg-if 0.1.10",
++ "dirs-sys",
++]
++
++[[package]]
++name = "dirs-sys"
++version = "0.3.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
++dependencies = [
++ "libc",
++ "redox_users",
++ "winapi 0.3.9",
++]
++
++[[package]]
++name = "dtoa"
++version = "0.4.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
++
++[[package]]
++name = "flate2"
++version = "1.0.22"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f"
++dependencies = [
++ "cfg-if 1.0.0",
++ "crc32fast",
++ "libc",
++ "miniz_oxide",
++]
++
++[[package]]
++name = "fnv"
++version = "1.0.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
++
++[[package]]
++name = "form_urlencoded"
++version = "1.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
++dependencies = [
++ "matches",
++ "percent-encoding",
++]
++
++[[package]]
++name = "fuchsia-zircon"
++version = "0.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
++dependencies = [
++ "bitflags",
++ "fuchsia-zircon-sys",
++]
++
++[[package]]
++name = "fuchsia-zircon-sys"
++version = "0.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
++
++[[package]]
++name = "futures"
++version = "0.3.19"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "28560757fe2bb34e79f907794bb6b22ae8b0e5c669b638a1132f2592b19035b4"
++dependencies = [
++ "futures-channel",
++ "futures-core",
++ "futures-io",
++ "futures-sink",
++ "futures-task",
++ "futures-util",
++]
++
++[[package]]
++name = "futures-channel"
++version = "0.3.19"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ba3dda0b6588335f360afc675d0564c17a77a2bda81ca178a4b6081bd86c7f0b"
++dependencies = [
++ "futures-core",
++ "futures-sink",
++]
++
++[[package]]
++name = "futures-core"
++version = "0.3.19"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d0c8ff0461b82559810cdccfde3215c3f373807f5e5232b71479bff7bb2583d7"
++
++[[package]]
++name = "futures-io"
++version = "0.3.19"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b1f9d34af5a1aac6fb380f735fe510746c38067c5bf16c7fd250280503c971b2"
++
++[[package]]
++name = "futures-sink"
++version = "0.3.19"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e3055baccb68d74ff6480350f8d6eb8fcfa3aa11bdc1a1ae3afdd0514617d508"
++
++[[package]]
++name = "futures-task"
++version = "0.3.19"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6ee7c6485c30167ce4dfb83ac568a849fe53274c831081476ee13e0dce1aad72"
++
++[[package]]
++name = "futures-util"
++version = "0.3.19"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d9b5cf40b47a271f77a8b1bec03ca09044d99d2372c0de244e66430761127164"
++dependencies = [
++ "futures-core",
++ "futures-sink",
++ "futures-task",
++ "pin-project-lite 0.2.8",
++ "pin-utils",
++]
++
++[[package]]
++name = "geckodriver"
++version = "0.30.0"
++dependencies = [
++ "base64 0.12.3",
++ "chrono",
++ "clap",
++ "hyper",
++ "lazy_static",
++ "log",
++ "marionette",
++ "mozdevice",
++ "mozprofile",
++ "mozrunner",
++ "mozversion",
++ "regex",
++ "serde",
++ "serde_derive",
++ "serde_json",
++ "serde_yaml",
++ "uuid",
++ "webdriver",
++ "zip",
++]
++
++[[package]]
++name = "generic-array"
++version = "0.14.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
++dependencies = [
++ "typenum",
++ "version_check",
++]
++
++[[package]]
++name = "getrandom"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
++dependencies = [
++ "cfg-if 1.0.0",
++ "libc",
++ "wasi",
++]
++
++[[package]]
++name = "h2"
++version = "0.2.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5e4728fd124914ad25e99e3d15a9361a879f6620f63cb56bbb08f95abb97a535"
++dependencies = [
++ "bytes 0.5.6",
++ "fnv",
++ "futures-core",
++ "futures-sink",
++ "futures-util",
++ "http",
++ "indexmap",
++ "slab",
++ "tokio",
++ "tokio-util",
++ "tracing",
++ "tracing-futures",
++]
++
++[[package]]
++name = "hashbrown"
++version = "0.11.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
++
++[[package]]
++name = "headers"
++version = "0.3.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a4c4eb0471fcb85846d8b0690695ef354f9afb11cb03cac2e1d7c9253351afb0"
++dependencies = [
++ "base64 0.13.0",
++ "bitflags",
++ "bytes 1.1.0",
++ "headers-core",
++ "http",
++ "httpdate 1.0.2",
++ "mime",
++ "sha-1",
++]
++
++[[package]]
++name = "headers-core"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
++dependencies = [
++ "http",
++]
++
++[[package]]
++name = "http"
++version = "0.2.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03"
++dependencies = [
++ "bytes 1.1.0",
++ "fnv",
++ "itoa 1.0.1",
++]
++
++[[package]]
++name = "http-body"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b"
++dependencies = [
++ "bytes 0.5.6",
++ "http",
++]
++
++[[package]]
++name = "httparse"
++version = "1.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503"
++
++[[package]]
++name = "httpdate"
++version = "0.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"
++
++[[package]]
++name = "httpdate"
++version = "1.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
++
++[[package]]
++name = "hyper"
++version = "0.13.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8a6f157065790a3ed2f88679250419b5cdd96e714a0d65f7797fd337186e96bb"
++dependencies = [
++ "bytes 0.5.6",
++ "futures-channel",
++ "futures-core",
++ "futures-util",
++ "h2",
++ "http",
++ "http-body",
++ "httparse",
++ "httpdate 0.3.2",
++ "itoa 0.4.8",
++ "pin-project 1.0.10",
++ "socket2",
++ "tokio",
++ "tower-service",
++ "tracing",
++ "want",
++]
++
++[[package]]
++name = "idna"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
++dependencies = [
++ "matches",
++ "unicode-bidi",
++ "unicode-normalization",
++]
++
++[[package]]
++name = "indexmap"
++version = "1.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"
++dependencies = [
++ "autocfg",
++ "hashbrown",
++]
++
++[[package]]
++name = "iovec"
++version = "0.1.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
++dependencies = [
++ "libc",
++]
++
++[[package]]
++name = "itoa"
++version = "0.4.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
++
++[[package]]
++name = "itoa"
++version = "1.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
++
++[[package]]
++name = "kernel32-sys"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
++dependencies = [
++ "winapi 0.2.8",
++ "winapi-build",
++]
++
++[[package]]
++name = "lazy_static"
++version = "1.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
++
++[[package]]
++name = "libc"
++version = "0.2.112"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125"
++
++[[package]]
++name = "line-wrap"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
++dependencies = [
++ "safemem",
++]
++
++[[package]]
++name = "linked-hash-map"
++version = "0.5.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
++
++[[package]]
++name = "log"
++version = "0.4.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
++dependencies = [
++ "cfg-if 1.0.0",
++]
++
++[[package]]
++name = "marionette"
++version = "0.1.0"
++dependencies = [
++ "serde",
++ "serde_json",
++ "serde_repr",
++]
++
++[[package]]
++name = "matches"
++version = "0.1.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
++
++[[package]]
++name = "memchr"
++version = "2.4.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
++
++[[package]]
++name = "mime"
++version = "0.3.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
++
++[[package]]
++name = "mime_guess"
++version = "2.0.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212"
++dependencies = [
++ "mime",
++ "unicase",
++]
++
++[[package]]
++name = "miniz_oxide"
++version = "0.4.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
++dependencies = [
++ "adler",
++ "autocfg",
++]
++
++[[package]]
++name = "mio"
++version = "0.6.23"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
++dependencies = [
++ "cfg-if 0.1.10",
++ "fuchsia-zircon",
++ "fuchsia-zircon-sys",
++ "iovec",
++ "kernel32-sys",
++ "libc",
++ "log",
++ "miow",
++ "net2",
++ "slab",
++ "winapi 0.2.8",
++]
++
++[[package]]
++name = "miow"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
++dependencies = [
++ "kernel32-sys",
++ "net2",
++ "winapi 0.2.8",
++ "ws2_32-sys",
++]
++
++[[package]]
++name = "mozdevice"
++version = "0.4.0"
++dependencies = [
++ "log",
++ "once_cell",
++ "regex",
++ "tempfile",
++ "unix_path",
++ "uuid",
++ "walkdir",
++]
++
++[[package]]
++name = "mozprofile"
++version = "0.7.3"
++dependencies = [
++ "tempfile",
++]
++
++[[package]]
++name = "mozrunner"
++version = "0.13.0"
++dependencies = [
++ "dirs",
++ "log",
++ "mozprofile",
++ "plist",
++ "winreg",
++]
++
++[[package]]
++name = "mozversion"
++version = "0.4.2"
++dependencies = [
++ "regex",
++ "rust-ini",
++ "semver",
++]
++
++[[package]]
++name = "msdos_time"
++version = "0.1.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "aad9dfe950c057b1bfe9c1f2aa51583a8468ef2a5baba2ebbe06d775efeb7729"
++dependencies = [
++ "time",
++ "winapi 0.3.9",
++]
++
++[[package]]
++name = "net2"
++version = "0.2.37"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae"
++dependencies = [
++ "cfg-if 0.1.10",
++ "libc",
++ "winapi 0.3.9",
++]
++
++[[package]]
++name = "num-integer"
++version = "0.1.44"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
++dependencies = [
++ "autocfg",
++ "num-traits",
++]
++
++[[package]]
++name = "num-traits"
++version = "0.2.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
++dependencies = [
++ "autocfg",
++]
++
++[[package]]
++name = "once_cell"
++version = "1.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
++
++[[package]]
++name = "opaque-debug"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
++
++[[package]]
++name = "percent-encoding"
++version = "2.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
++
++[[package]]
++name = "pin-project"
++version = "0.4.29"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9615c18d31137579e9ff063499264ddc1278e7b1982757ebc111028c4d1dc909"
++dependencies = [
++ "pin-project-internal 0.4.29",
++]
++
++[[package]]
++name = "pin-project"
++version = "1.0.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e"
++dependencies = [
++ "pin-project-internal 1.0.10",
++]
++
++[[package]]
++name = "pin-project-internal"
++version = "0.4.29"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "044964427019eed9d49d9d5bbce6047ef18f37100ea400912a9fa4a3523ab12a"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "pin-project-internal"
++version = "1.0.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "pin-project-lite"
++version = "0.1.12"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777"
++
++[[package]]
++name = "pin-project-lite"
++version = "0.2.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c"
++
++[[package]]
++name = "pin-utils"
++version = "0.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
++
++[[package]]
++name = "plist"
++version = "0.5.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9b59eb8d91dfa89208ec74a920e3b55f840476cf46568026c18dbaa2999e0d48"
++dependencies = [
++ "base64 0.10.1",
++ "chrono",
++ "indexmap",
++ "line-wrap",
++ "serde",
++ "xml-rs",
++]
++
++[[package]]
++name = "podio"
++version = "0.1.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b18befed8bc2b61abc79a457295e7e838417326da1586050b919414073977f19"
++
++[[package]]
++name = "ppv-lite86"
++version = "0.2.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
++
++[[package]]
++name = "proc-macro2"
++version = "1.0.36"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
++dependencies = [
++ "unicode-xid",
++]
++
++[[package]]
++name = "quote"
++version = "1.0.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d"
++dependencies = [
++ "proc-macro2",
++]
++
++[[package]]
++name = "rand"
++version = "0.8.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8"
++dependencies = [
++ "libc",
++ "rand_chacha",
++ "rand_core",
++ "rand_hc",
++]
++
++[[package]]
++name = "rand_chacha"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
++dependencies = [
++ "ppv-lite86",
++ "rand_core",
++]
++
++[[package]]
++name = "rand_core"
++version = "0.6.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
++dependencies = [
++ "getrandom",
++]
++
++[[package]]
++name = "rand_hc"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7"
++dependencies = [
++ "rand_core",
++]
++
++[[package]]
++name = "redox_syscall"
++version = "0.2.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
++dependencies = [
++ "bitflags",
++]
++
++[[package]]
++name = "redox_users"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
++dependencies = [
++ "getrandom",
++ "redox_syscall",
++]
++
++[[package]]
++name = "regex"
++version = "1.5.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
++dependencies = [
++ "aho-corasick",
++ "memchr",
++ "regex-syntax",
++]
++
++[[package]]
++name = "regex-syntax"
++version = "0.6.25"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
++
++[[package]]
++name = "remove_dir_all"
++version = "0.5.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
++dependencies = [
++ "winapi 0.3.9",
++]
++
++[[package]]
++name = "rust-ini"
++version = "0.10.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8a654c5bda722c699be6b0fe4c0d90de218928da5b724c3e467fc48865c37263"
++
++[[package]]
++name = "ryu"
++version = "1.0.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
++
++[[package]]
++name = "safemem"
++version = "0.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
++
++[[package]]
++name = "same-file"
++version = "1.0.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
++dependencies = [
++ "winapi-util",
++]
++
++[[package]]
++name = "scoped-tls"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
++
++[[package]]
++name = "semver"
++version = "0.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
++dependencies = [
++ "semver-parser",
++]
++
++[[package]]
++name = "semver-parser"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
++
++[[package]]
++name = "serde"
++version = "1.0.133"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "97565067517b60e2d1ea8b268e59ce036de907ac523ad83a0475da04e818989a"
++dependencies = [
++ "serde_derive",
++]
++
++[[package]]
++name = "serde_derive"
++version = "1.0.133"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ed201699328568d8d08208fdd080e3ff594e6c422e438b6705905da01005d537"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "serde_json"
++version = "1.0.74"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ee2bb9cd061c5865d345bb02ca49fcef1391741b672b54a0bf7b679badec3142"
++dependencies = [
++ "itoa 1.0.1",
++ "ryu",
++ "serde",
++]
++
++[[package]]
++name = "serde_repr"
++version = "0.1.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "98d0516900518c29efa217c298fa1f4e6c6ffc85ae29fd7f4ee48f176e1a9ed5"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "serde_urlencoded"
++version = "0.6.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97"
++dependencies = [
++ "dtoa",
++ "itoa 0.4.8",
++ "serde",
++ "url",
++]
++
++[[package]]
++name = "serde_yaml"
++version = "0.8.23"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a4a521f2940385c165a24ee286aa8599633d162077a54bdcae2a6fd5a7bfa7a0"
++dependencies = [
++ "indexmap",
++ "ryu",
++ "serde",
++ "yaml-rust",
++]
++
++[[package]]
++name = "sha-1"
++version = "0.9.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6"
++dependencies = [
++ "block-buffer",
++ "cfg-if 1.0.0",
++ "cpufeatures",
++ "digest",
++ "opaque-debug",
++]
++
++[[package]]
++name = "slab"
++version = "0.4.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
++
++[[package]]
++name = "socket2"
++version = "0.3.19"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
++dependencies = [
++ "cfg-if 1.0.0",
++ "libc",
++ "winapi 0.3.9",
++]
++
++[[package]]
++name = "strsim"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
++
++[[package]]
++name = "syn"
++version = "1.0.85"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a684ac3dcd8913827e18cd09a68384ee66c1de24157e3c556c9ab16d85695fb7"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "unicode-xid",
++]
++
++[[package]]
++name = "tempfile"
++version = "3.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
++dependencies = [
++ "cfg-if 1.0.0",
++ "libc",
++ "rand",
++ "redox_syscall",
++ "remove_dir_all",
++ "winapi 0.3.9",
++]
++
++[[package]]
++name = "term_size"
++version = "0.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9"
++dependencies = [
++ "libc",
++ "winapi 0.3.9",
++]
++
++[[package]]
++name = "textwrap"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
++dependencies = [
++ "term_size",
++ "unicode-width",
++]
++
++[[package]]
++name = "time"
++version = "0.1.43"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
++dependencies = [
++ "libc",
++ "winapi 0.3.9",
++]
++
++[[package]]
++name = "tinyvec"
++version = "1.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
++dependencies = [
++ "tinyvec_macros",
++]
++
++[[package]]
++name = "tinyvec_macros"
++version = "0.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
++
++[[package]]
++name = "tokio"
++version = "0.2.25"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6703a273949a90131b290be1fe7b039d0fc884aa1935860dfcbe056f28cd8092"
++dependencies = [
++ "bytes 0.5.6",
++ "fnv",
++ "futures-core",
++ "iovec",
++ "lazy_static",
++ "memchr",
++ "mio",
++ "pin-project-lite 0.1.12",
++ "slab",
++]
++
++[[package]]
++name = "tokio-util"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499"
++dependencies = [
++ "bytes 0.5.6",
++ "futures-core",
++ "futures-sink",
++ "log",
++ "pin-project-lite 0.1.12",
++ "tokio",
++]
++
++[[package]]
++name = "tower-service"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
++
++[[package]]
++name = "tracing"
++version = "0.1.29"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105"
++dependencies = [
++ "cfg-if 1.0.0",
++ "log",
++ "pin-project-lite 0.2.8",
++ "tracing-core",
++]
++
++[[package]]
++name = "tracing-core"
++version = "0.1.21"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4"
++dependencies = [
++ "lazy_static",
++]
++
++[[package]]
++name = "tracing-futures"
++version = "0.2.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
++dependencies = [
++ "pin-project 1.0.10",
++ "tracing",
++]
++
++[[package]]
++name = "try-lock"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
++
++[[package]]
++name = "typenum"
++version = "1.15.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
++
++[[package]]
++name = "unicase"
++version = "2.6.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
++dependencies = [
++ "version_check",
++]
++
++[[package]]
++name = "unicode-bidi"
++version = "0.3.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
++
++[[package]]
++name = "unicode-normalization"
++version = "0.1.19"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
++dependencies = [
++ "tinyvec",
++]
++
++[[package]]
++name = "unicode-segmentation"
++version = "1.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
++
++[[package]]
++name = "unicode-width"
++version = "0.1.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
++
++[[package]]
++name = "unicode-xid"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
++
++[[package]]
++name = "unix_path"
++version = "1.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "af8e291873ae77c4c8d9c9b34d0bee68a35b048fb39c263a5155e0e353783eaf"
++dependencies = [
++ "unix_str",
++]
++
++[[package]]
++name = "unix_str"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2ace0b4755d0a2959962769239d56267f8a024fef2d9b32666b3dcd0946b0906"
++
++[[package]]
++name = "url"
++version = "2.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
++dependencies = [
++ "form_urlencoded",
++ "idna",
++ "matches",
++ "percent-encoding",
++]
++
++[[package]]
++name = "urlencoding"
++version = "1.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5a1f0175e03a0973cf4afd476bef05c26e228520400eb1fd473ad417b1c00ffb"
++
++[[package]]
++name = "uuid"
++version = "0.8.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
++dependencies = [
++ "getrandom",
++ "serde",
++]
++
++[[package]]
++name = "version_check"
++version = "0.9.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
++
++[[package]]
++name = "walkdir"
++version = "2.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
++dependencies = [
++ "same-file",
++ "winapi 0.3.9",
++ "winapi-util",
++]
++
++[[package]]
++name = "want"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
++dependencies = [
++ "log",
++ "try-lock",
++]
++
++[[package]]
++name = "warp"
++version = "0.2.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f41be6df54c97904af01aa23e613d4521eed7ab23537cede692d4058f6449407"
++dependencies = [
++ "bytes 0.5.6",
++ "futures",
++ "headers",
++ "http",
++ "hyper",
++ "log",
++ "mime",
++ "mime_guess",
++ "pin-project 0.4.29",
++ "scoped-tls",
++ "serde",
++ "serde_json",
++ "serde_urlencoded",
++ "tokio",
++ "tower-service",
++ "tracing",
++ "tracing-futures",
++ "urlencoding",
++]
++
++[[package]]
++name = "wasi"
++version = "0.10.2+wasi-snapshot-preview1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
++
++[[package]]
++name = "webdriver"
++version = "0.44.0"
++dependencies = [
++ "base64 0.12.3",
++ "bytes 0.5.6",
++ "cookie",
++ "http",
++ "log",
++ "once_cell",
++ "regex",
++ "serde",
++ "serde_derive",
++ "serde_json",
++ "time",
++ "tokio",
++ "unicode-segmentation",
++ "url",
++ "warp",
++]
++
++[[package]]
++name = "winapi"
++version = "0.2.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
++
++[[package]]
++name = "winapi"
++version = "0.3.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
++dependencies = [
++ "winapi-i686-pc-windows-gnu",
++ "winapi-x86_64-pc-windows-gnu",
++]
++
++[[package]]
++name = "winapi-build"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
++
++[[package]]
++name = "winapi-i686-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
++
++[[package]]
++name = "winapi-util"
++version = "0.1.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
++dependencies = [
++ "winapi 0.3.9",
++]
++
++[[package]]
++name = "winapi-x86_64-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
++
++[[package]]
++name = "winreg"
++version = "0.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a27a759395c1195c4cc5cda607ef6f8f6498f64e78f7900f5de0a127a424704a"
++dependencies = [
++ "winapi 0.3.9",
++]
++
++[[package]]
++name = "ws2_32-sys"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
++dependencies = [
++ "winapi 0.2.8",
++ "winapi-build",
++]
++
++[[package]]
++name = "xml-rs"
++version = "0.8.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
++
++[[package]]
++name = "yaml-rust"
++version = "0.4.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
++dependencies = [
++ "linked-hash-map",
++]
++
++[[package]]
++name = "zip"
++version = "0.4.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "36b9e08fb518a65cf7e08a1e482573eb87a2f4f8c6619316612a3c1f162fe822"
++dependencies = [
++ "flate2",
++ "msdos_time",
++ "podio",
++ "time",
++]
diff --git a/nixpkgs/pkgs/development/tools/geckodriver/default.nix b/nixpkgs/pkgs/development/tools/geckodriver/default.nix
new file mode 100644
index 000000000000..beb55c21a504
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/geckodriver/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchzip
+, rustPlatform
+, stdenv
+, Security
+, libiconv
+}:
+
+rustPlatform.buildRustPackage {
+  version = "0.30.0";
+  pname = "geckodriver";
+  sourceRoot = "source/testing/geckodriver";
+
+  # Source revisions are noted alongside the binary releases:
+  # https://github.com/mozilla/geckodriver/releases
+  src = (fetchzip {
+    url = "https://hg.mozilla.org/mozilla-central/archive/d372710b98a6ce5d1b2a9dffd53a879091c5c148.zip/testing";
+    sha256 = "0d27h9c8vw4rs9c2l9wms4lc931nbp2g5hacsh24zhc9y3v454i6";
+  }).overrideAttrs (_: {
+    # normally guessed by the url's file extension, force it to unpack properly
+    unpackCmd = "unzip $curSrc";
+  });
+
+  cargoPatches = [ ./cargo-lock.patch ];
+  cargoSha256 = "08zcrhrmxh3c3iwd7kbnr19lfisikb779i2r7ir7b1i1ynmi4v6r";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  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/ginkgo/default.nix b/nixpkgs/pkgs/development/tools/ginkgo/default.nix
new file mode 100644
index 000000000000..6719d7103921
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ginkgo/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ginkgo";
+  version = "2.1.3";
+
+  src = fetchFromGitHub {
+    owner = "onsi";
+    repo = "ginkgo";
+    rev = "v${version}";
+    sha256 = "sha256-q+m1NDl9zd6ueyBTzbzlvHIQyoIul5dAfUQ6UK4wlrc=";
+  };
+  vendorSha256 = "sha256-kMQ60HdsorZU27qoOY52DpwFwP+Br2bp8mRx+ZwnQlI=";
+
+  # integration tests expect more file changes
+  # types tests are missing CodeLocation
+  excludedPackages = "\\(integration\\|types\\)";
+
+  meta = with lib; {
+    homepage = "https://onsi.github.io/ginkgo/";
+    changelog = "https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md";
+    description = "A Modern Testing Framework for Go";
+    longDescription = ''
+      Ginkgo is a testing framework for Go designed to help you write expressive
+      tests. It is best paired with the Gomega matcher library. When combined,
+      Ginkgo and Gomega provide a rich and expressive DSL
+      (Domain-specific Language) for writing tests.
+
+      Ginkgo is sometimes described as a "Behavior Driven Development" (BDD)
+      framework. In reality, Ginkgo is a general purpose testing framework in
+      active use across a wide variety of testing contexts: unit tests,
+      integration tests, acceptance test, performance tests, etc.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ saschagrunert jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gir/default.nix b/nixpkgs/pkgs/development/tools/gir/default.nix
new file mode 100644
index 000000000000..d72befbaa15c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gir/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gir";
+  version = "unstable-2021-11-21";
+
+  src = fetchFromGitHub {
+    owner = "gtk-rs";
+    repo = "gir";
+    rev = "a69abbe5ee1a745e554cac9433c65d2ac26a7688";
+    sha256 = "16ygy1bcbcj69x6ss72g9n62qlsd1bacr5hz91f8whw6qm9am46m";
+  };
+
+  cargoSha256 = "14srs2369yryqpkklmfp64fyqxrhf91b2bjy0068nx2myr25m624";
+
+  postPatch = ''
+    rm build.rs
+    sed -i '/build = "build\.rs"/d' Cargo.toml
+    echo "pub const VERSION: &str = \"$version\";" > src/gir_version.rs
+  '';
+
+  meta = with lib; {
+    description = "Tool to generate rust bindings and user API for glib-based libraries";
+    homepage = "https://github.com/gtk-rs/gir/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ ekleog ];
+    mainProgram = "gir";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/git-aggregator/default.nix b/nixpkgs/pkgs/development/tools/git-aggregator/default.nix
new file mode 100644
index 000000000000..9b2465366f67
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/git-aggregator/default.nix
@@ -0,0 +1,43 @@
+{ lib, git, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "git-aggregator";
+  version = "2.1.0";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-79xNPzYP1j71sU5wZM5e2xTqQExqQEdxXPxbk4T/Scw=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    argcomplete
+    colorama
+    git
+    kaptan
+    requests
+  ];
+
+  checkInputs = [
+    git
+  ];
+
+  preCheck = ''
+    export HOME="$(mktemp -d)"
+    git config --global user.name John
+    git config --global user.email john@localhost
+    git config --global init.defaultBranch master
+    git config --global pull.rebase false
+  '';
+
+  meta = with lib; {
+    description = "Manage the aggregation of git branches from different remotes to build a consolidated one";
+    homepage = "https://github.com/acsone/git-aggregator";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ lourkeur ];
+    mainProgram = "gitaggregate";
+  };
+}
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..25295ad0062d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/git-ftp/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, pandoc, man }:
+stdenv.mkDerivation rec {
+  pname = "git-ftp";
+  version = "1.6.0";
+  src = fetchFromGitHub {
+    owner = "git-ftp";
+    repo = "git-ftp";
+    rev = version;
+    sha256 = "1hxkqf7jbrx24q18yxpnd3dxzh4xk6asymwkylp1x7zg6mcci87d";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    make install-all prefix=$out
+  '';
+
+  buildInputs = [pandoc man];
+
+  meta = with 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-privacy/default.nix b/nixpkgs/pkgs/development/tools/git-privacy/default.nix
new file mode 100644
index 000000000000..c17654174382
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/git-privacy/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, fetchFromGitHub
+, git
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "git-privacy";
+  version = "2.1.0";
+  format = "setuptools";
+
+  disabled = python3.pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "EMPRI-DEVOPS";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0hfy43fip1l81672xfwqrz1jryzkjy7h9f2lyikxgibibil0p444";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    git-filter-repo
+    GitPython
+    pynacl
+    setuptools
+  ];
+
+  checkInputs = with python3.pkgs; [
+    git
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # Tests want to interact with a git repo
+    "TestGitPrivacy"
+  ];
+
+  pythonImportsCheck = [
+    "gitprivacy"
+  ];
+
+  meta = with lib; {
+    description = "Tool to redact Git author and committer dates";
+    homepage = "https://github.com/EMPRI-DEVOPS/git-privacy";
+    license = with licenses; [ bsd2 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
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..336c24819baf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/git-quick-stats/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv
+, fetchFromGitHub
+, makeWrapper
+, coreutils
+, gawk
+, git
+, gnugrep
+, ncurses
+, util-linux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "git-quick-stats";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    repo = "git-quick-stats";
+    owner = "arzzen";
+    rev = version;
+    sha256 = "sha256-QmHb5MWZpbZjc93XgdPFabgzT7S522ZN27p6tdL46Y0=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installFlags = [
+    "PREFIX=${builtins.placeholder "out"}"
+  ];
+
+  postInstall =
+    let
+      path = lib.makeBinPath [
+        coreutils
+        gawk
+        git
+        gnugrep
+        ncurses
+        util-linux
+      ];
+    in
+    ''
+      wrapProgram $out/bin/git-quick-stats --suffix PATH : ${path}
+    '';
+
+  meta = with 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..d78972aa07bd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/git-repo-updater/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildPythonApplication, fetchPypi
+, colorama, GitPython }:
+
+buildPythonApplication rec {
+  pname = "gitup";
+  version = "0.5.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1pa612rcc94nc461zs9sag9p46sycc214622b06gdn35rmwp0y2g";
+  };
+
+  propagatedBuildInputs = [ colorama GitPython ];
+
+  # no tests
+  doCheck = false;
+
+  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..752cefad3c27
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/git-series/default.nix
@@ -0,0 +1,58 @@
+{ lib, fetchFromGitHub, fetchpatch, rustPlatform
+, openssl, cmake, perl, pkg-config, zlib, curl, libgit2, libssh2
+}:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  version = "0.9.1";
+  pname = "git-series";
+
+  src = fetchFromGitHub {
+    owner = "git-series";
+    repo = "git-series";
+    rev = version;
+    sha256 = "07mgq5h6r1gf3jflbv2khcz32bdazw7z1s8xcsafdarnm13ps014";
+  };
+
+  cargoSha256 = "0870f4rd98fbmyl8524ivfg3xf4qpzb1x68q1idnl47mmf68pyx8";
+
+  cargoPatches = [
+    (fetchpatch {
+      url = "https://github.com/Mic92/git-series/commit/3aa30a47d74ebf90b444dccdf8c153f07f119483.patch";
+      sha256 = "06v8br9skvy75kcw2zgbswxyk82sqzc8smkbqpzmivxlc2i9rnh0";
+    })
+    # Update Cargo.lock to allow using OpenSSL 1.1
+    (fetchpatch {
+      url = "https://github.com/edef1c/git-series/commit/11fe70ffcc18200e5f2a159c36aab070e8ff4228.patch";
+      sha256 = "0clwllf9mrhq86dhzyyhkw1q2ggpgqpw7s05dvp3gj9zhfsyya4s";
+    })
+    # Cargo.lock: Update url, which fixes incompatibility with NLL
+    (fetchpatch {
+      url = "https://github.com/edef1c/git-series/commit/27ff2ecf2d615dae1113709eca0e43596de12ac4.patch";
+      sha256 = "1byjbdcx56nd0bbwz078bl340rk334mb34cvaa58h76byvhpkw10";
+    })
+  ];
+
+  LIBGIT2_SYS_USE_PKG_CONFIG = true;
+  LIBSSH2_SYS_USE_PKG_CONFIG = true;
+  nativeBuildInputs = [ cmake pkg-config perl ];
+  buildInputs = [ openssl zlib curl libgit2 libssh2 ];
+
+  postBuild = ''
+    install -D "$src/git-series.1" "$out/man/man1/git-series.1"
+  '';
+
+  meta = with 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 = with maintainers; [ edef 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..13106b879db9
--- /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.16.4"
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..726ef5ae7bbe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github-changelog-generator/Gemfile.lock
@@ -0,0 +1,101 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (7.0.1)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      tzinfo (~> 2.0)
+    addressable (2.8.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    async (1.30.1)
+      console (~> 1.10)
+      nio4r (~> 2.3)
+      timers (~> 4.1)
+    async-http (0.56.5)
+      async (>= 1.25)
+      async-io (>= 1.28)
+      async-pool (>= 0.2)
+      protocol-http (~> 0.22.0)
+      protocol-http1 (~> 0.14.0)
+      protocol-http2 (~> 0.14.0)
+    async-http-faraday (0.11.0)
+      async-http (~> 0.42)
+      faraday
+    async-io (1.32.2)
+      async
+    async-pool (0.3.9)
+      async (>= 1.25)
+    concurrent-ruby (1.1.9)
+    console (1.14.0)
+      fiber-local
+    faraday (1.9.3)
+      faraday-em_http (~> 1.0)
+      faraday-em_synchrony (~> 1.0)
+      faraday-excon (~> 1.1)
+      faraday-httpclient (~> 1.0)
+      faraday-multipart (~> 1.0)
+      faraday-net_http (~> 1.0)
+      faraday-net_http_persistent (~> 1.0)
+      faraday-patron (~> 1.0)
+      faraday-rack (~> 1.0)
+      faraday-retry (~> 1.0)
+      ruby2_keywords (>= 0.0.4)
+    faraday-em_http (1.0.0)
+    faraday-em_synchrony (1.0.0)
+    faraday-excon (1.1.0)
+    faraday-http-cache (2.2.0)
+      faraday (>= 0.8)
+    faraday-httpclient (1.0.1)
+    faraday-multipart (1.0.3)
+      multipart-post (>= 1.2, < 3)
+    faraday-net_http (1.0.1)
+    faraday-net_http_persistent (1.2.0)
+    faraday-patron (1.0.0)
+    faraday-rack (1.0.0)
+    faraday-retry (1.0.3)
+    fiber-local (1.0.0)
+    github_changelog_generator (1.16.4)
+      activesupport
+      async (>= 1.25.0)
+      async-http-faraday
+      faraday-http-cache
+      multi_json
+      octokit (~> 4.6)
+      rainbow (>= 2.2.1)
+      rake (>= 10.0)
+    i18n (1.8.11)
+      concurrent-ruby (~> 1.0)
+    minitest (5.15.0)
+    multi_json (1.15.0)
+    multipart-post (2.1.1)
+    nio4r (2.5.8)
+    octokit (4.22.0)
+      faraday (>= 0.9)
+      sawyer (~> 0.8.0, >= 0.5.3)
+    protocol-hpack (1.4.2)
+    protocol-http (0.22.5)
+    protocol-http1 (0.14.2)
+      protocol-http (~> 0.22)
+    protocol-http2 (0.14.2)
+      protocol-hpack (~> 1.4)
+      protocol-http (~> 0.18)
+    public_suffix (4.0.6)
+    rainbow (3.1.1)
+    rake (13.0.6)
+    ruby2_keywords (0.0.5)
+    sawyer (0.8.2)
+      addressable (>= 2.3.5)
+      faraday (> 0.8, < 2.0)
+    timers (4.3.3)
+    tzinfo (2.0.4)
+      concurrent-ruby (~> 1.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  github_changelog_generator (= 1.16.4)
+
+BUNDLED WITH
+   2.1.4
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..0239259a0c81
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github-changelog-generator/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "github_changelog_generator";
+  gemdir = ./.;
+  exes = [ "github_changelog_generator" ];
+
+  passthru.updateScript = bundlerUpdateScript "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 nicknovitski ];
+    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..3a68811b0f7b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github-changelog-generator/gemset.nix
@@ -0,0 +1,420 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02lys9pnb99hsczs551iqzjn008i8k7c728xxba7acfi9rdw9pa6";
+      type = "gem";
+    };
+    version = "7.0.1";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "022r3m9wdxljpbya69y2i3h9g3dhhfaqzidf95m6qjzms792jvgp";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  async = {
+    dependencies = ["console" "nio4r" "timers"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mdv66xn5xjyaidyrp66mfnx7d4habkbfmx9y57k75h5q6fd2b65";
+      type = "gem";
+    };
+    version = "1.30.1";
+  };
+  async-http = {
+    dependencies = ["async" "async-io" "async-pool" "protocol-http" "protocol-http1" "protocol-http2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v3451bnn7rhgvl6ng0ys0dgm7cmyi3m41kmf5wyrpb83dhds13l";
+      type = "gem";
+    };
+    version = "0.56.5";
+  };
+  async-http-faraday = {
+    dependencies = ["async-http" "faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ndynkfknabv6m9wzcmdnj4r4bhlxqkg9c6rzsjc1pk8q057kslv";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  async-io = {
+    dependencies = ["async"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10l9m0x2ffvsaaxc4mfalrljjx13njkyir9w6yfif8wpszc291h8";
+      type = "gem";
+    };
+    version = "1.32.2";
+  };
+  async-pool = {
+    dependencies = ["async"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02r6cyvralcv2yn1jj0plxynwr7rvxym13vlxd2wxk1bymfq9fd9";
+      type = "gem";
+    };
+    version = "0.3.9";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nwad3211p7yv9sda31jmbyw6sdafzmdi2i2niaz6f0wk5nq9h0f";
+      type = "gem";
+    };
+    version = "1.1.9";
+  };
+  console = {
+    dependencies = ["fiber-local"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13ylq7x9zk79r79pssnjvby14shcyamwcbap842p9gvmkf7xblmr";
+      type = "gem";
+    };
+    version = "1.14.0";
+  };
+  faraday = {
+    dependencies = ["faraday-em_http" "faraday-em_synchrony" "faraday-excon" "faraday-httpclient" "faraday-multipart" "faraday-net_http" "faraday-net_http_persistent" "faraday-patron" "faraday-rack" "faraday-retry" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y32gj994ll3zlcqjmwp78r7s03iiwayij6fz2pjpkfywgvp71s6";
+      type = "gem";
+    };
+    version = "1.9.3";
+  };
+  faraday-em_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12cnqpbak4vhikrh2cdn94assh3yxza8rq2p9w2j34bqg5q4qgbs";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-em_synchrony = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vgrbhkp83sngv6k4mii9f2s9v5lmp693hylfxp2ssfc60fas3a6";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h09wkb0k0bhm6dqsd47ac601qiaah8qdzjh8gvxfd376x1chmdh";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  faraday-http-cache = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lhfwlk4mhmw9pdlgdsl2bq4x45w7s51jkxjryf18wym8iiw36g7";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  faraday-httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fyk0jd3ks7fdn8nv3spnwjpzx2lmxmg2gh4inz3by1zjzqg33sc";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-multipart = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03qfi9020ynf7hkdiaq01sd2mllvw7fg4qiin3pk028b4wv23j3j";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-net_http_persistent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dc36ih95qw3rlccffcb0vgxjhmipsvxhn6cw71l7ffs0f7vq30b";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  faraday-patron = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19wgsgfq0xkski1g7m96snv39la3zxz6x7nbdgiwhg5v82rxfb6w";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h184g4vqql5jv9s9im6igy00jp6mrah2h14py6mpf9bkabfqq7g";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-retry = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "153i967yrwnswqgvnnajgwp981k9p50ys1h80yz3q94rygs59ldd";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  fiber-local = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vrxxb09fc7aicb9zb0pmn5akggjy21dmxkdl3w949y4q05rldr9";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  github_changelog_generator = {
+    dependencies = ["activesupport" "async" "async-http-faraday" "faraday-http-cache" "multi_json" "octokit" "rainbow" "rake"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04d6z2ysq3gzvpw91lq8mxmdlqcxkmvp8rw9zrzkmksh3pjdzli1";
+      type = "gem";
+    };
+    version = "1.16.4";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vdd1kii40qhbr9n8qx71k2gskq6rkl8ygy8hw5hfj8bb5a364xf";
+      type = "gem";
+    };
+    version = "1.8.11";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06xf558gid4w8lwx13jwfdafsch9maz8m0g85wnfymqj63x5nbbd";
+      type = "gem";
+    };
+    version = "5.15.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  nio4r = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xk64wghkscs6bv2n22853k2nh39d131c6rfpnlw12mbjnnv9v1v";
+      type = "gem";
+    };
+    version = "2.5.8";
+  };
+  octokit = {
+    dependencies = ["faraday" "sawyer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nmdd7klyinvrrv2mggwwmc99ykaq7i379j00i37hvvaqx4giifj";
+      type = "gem";
+    };
+    version = "4.22.0";
+  };
+  protocol-hpack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sd85am1hj2w7z5hv19wy1nbisxfr1vqx3wlxjfz9xy7x7s6aczw";
+      type = "gem";
+    };
+    version = "1.4.2";
+  };
+  protocol-http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lhg47b3w1d6pdwdkyha8ijzfhjrh90snwydkhwfnl5r10dd9cg5";
+      type = "gem";
+    };
+    version = "0.22.5";
+  };
+  protocol-http1 = {
+    dependencies = ["protocol-http"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z56p7zqbyvwlrsbs19knny4v9f7ycsgblhv50ar8wgyifvsddf6";
+      type = "gem";
+    };
+    version = "0.14.2";
+  };
+  protocol-http2 = {
+    dependencies = ["protocol-hpack" "protocol-http"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a9klpfmi7w465zq5xz8y8h1qvj42hkm0qd0nlws9d2idd767q5j";
+      type = "gem";
+    };
+    version = "0.14.2";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
+      type = "gem";
+    };
+    version = "4.0.6";
+  };
+  rainbow = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0smwg4mii0fm38pyb5fddbmrdpifwv22zv3d3px2xx497am93503";
+      type = "gem";
+    };
+    version = "3.1.1";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
+      type = "gem";
+    };
+    version = "13.0.6";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  sawyer = {
+    dependencies = ["addressable" "faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yrdchs3psh583rjapkv33mljdivggqn99wkydkjdckcjn43j3cz";
+      type = "gem";
+    };
+    version = "0.8.2";
+  };
+  timers = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00xdi97gm01alfqhjgvv5sff9n1n2l6aym69s9jh8l9clg63b0jc";
+      type = "gem";
+    };
+    version = "4.3.3";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10qp5x7f9hvlc0psv9gsfbxg4a7s0485wsbq1kljkxq94in91l4z";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/github-commenter/default.nix b/nixpkgs/pkgs/development/tools/github-commenter/default.nix
new file mode 100644
index 000000000000..b1c247c70f97
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github-commenter/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "github-commenter";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "cloudposse";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-IBo4FAoYX1FmrmQ9mlyyu1TGLY7dlH7pWalBoRb2puE=";
+  };
+
+  vendorSha256 = "sha256-H1SnNG+/ALYs7h/oT8zWBhAXOuCFY0Sto2ATBBZg2ek=";
+
+  meta = with lib; {
+    description = "Command line utility for creating GitHub comments on Commits, Pull Request Reviews or Issues";
+    license = licenses.asl20;
+    homepage = "https://github.com/cloudposse/github-commenter";
+    maintainers = [ maintainers.mmahut ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/github/bump/default.nix b/nixpkgs/pkgs/development/tools/github/bump/default.nix
new file mode 100644
index 000000000000..cba623dec790
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github/bump/default.nix
@@ -0,0 +1,28 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "bump";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "mroth";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-tgTG/QlDxX1Ns0WpcNjwr/tvsdtgap7RcxX/JuYcxw8=";
+  };
+
+  vendorSha256 = "sha256-ZeKokW6jMiKrXLfnxwEBF+wLuFQufnPUnA/EnuhvrwI=";
+
+  doCheck = false;
+
+  ldflags = [
+    "-X main.buildVersion=${version}" "-X main.buildCommit=${version}" "-X main.buildDate=1970-01-01"
+  ];
+
+  meta = with lib; {
+    license = licenses.mit;
+    homepage = "https://github.com/mroth/bump";
+    description = "CLI tool to draft a GitHub Release for the next semantic version";
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
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..ce340239ac4c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github/cligh/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, buildPythonApplication, pyxdg, PyGithub }:
+
+buildPythonApplication rec {
+  pname = "cligh";
+  version = "0.3";
+
+  doCheck = false; # no tests
+
+  src = fetchFromGitHub {
+    owner = "CMB";
+    repo = "cligh";
+    rev = "v${version}";
+    sha256 = "0d1fd78rzl2n75xpmy1gnxh1shvcs4qm0j4qqszqvfriwkg2flxn";
+  };
+
+  propagatedBuildInputs = [ pyxdg PyGithub ];
+
+  meta = with 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..4326d4bf71ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/github/github-release/default.nix
@@ -0,0 +1,29 @@
+{ buildGoPackage, fetchFromGitHub, lib }:
+
+buildGoPackage rec {
+  pname = "github-release";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "github-release";
+    repo = "github-release";
+    rev = "v${version}";
+    sha256 = "sha256-J5Y0Kvon7DstTueCsoYvw6x4cOH/C1IaVArE0bXtZts=";
+  };
+
+  goPackagePath = "github.com/github-release/github-release";
+
+  meta = with 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/github-release/github-release";
+    maintainers = with maintainers; [ ardumont j03 ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/glade/default.nix b/nixpkgs/pkgs/development/tools/glade/default.nix
new file mode 100644
index 000000000000..3e5c7b0438fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glade/default.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv
+, gettext
+, fetchurl
+, python3
+, meson
+, ninja
+, pkg-config
+, gtk3
+, glib
+, gjs
+, webkitgtk
+, gobject-introspection
+, wrapGAppsHook
+, itstool
+, libxml2
+, docbook-xsl-nons
+, docbook_xml_dtd_42
+, gnome
+, gdk-pixbuf
+, libxslt
+, gsettings-desktop-schemas
+}:
+
+stdenv.mkDerivation rec {
+  pname = "glade";
+  version = "3.38.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/glade/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "1dxsiz9ahqkxg2a1dw9sbd8jg59y5pdz4c1gvnbmql48gmj8gz4q";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    itstool
+    wrapGAppsHook
+    docbook-xsl-nons
+    docbook_xml_dtd_42
+    libxslt
+    libxml2
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    gtk3
+    glib
+    gjs
+    webkitgtk
+    libxml2
+    python3
+    python3.pkgs.pygobject3
+    gsettings-desktop-schemas
+    gdk-pixbuf
+    gnome.adwaita-icon-theme
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Glade";
+    description = "User interface designer for GTK applications";
+    maintainers = teams.gnome.members;
+    license = licenses.lgpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/glide/default.nix b/nixpkgs/pkgs/development/tools/glide/default.nix
new file mode 100644
index 000000000000..e97feca11672
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glide/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "glide";
+  version = "0.13.3";
+
+  goPackagePath = "github.com/Masterminds/glide";
+
+  ldflags = [
+    "-X main.version=${version}"
+  ];
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "Masterminds";
+    repo = "glide";
+    sha256 = "1wskg1cxqy9sp0738qiiagdw09dbs3swxsk4z6w5hsfiq2h44a54";
+  };
+
+  meta = with 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..460f59dc3d0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gllvm/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "gllvm";
+  version = "1.3.0";
+
+  goPackagePath = "github.com/SRI-CSL/gllvm";
+
+  src = fetchFromGitHub {
+    owner = "SRI-CSL";
+    repo = "gllvm";
+    rev = "v${version}";
+    sha256 = "sha256-nu6PRFk+GoN1gT1RTbX6mTPZByAGf0bSsj2C5YriGp8=";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/SRI-CSL/gllvm";
+    description = "Whole Program LLVM: wllvm ported to go";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
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..4d80010f71ea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/global-platform-pro/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchFromGitHub, jdk8, maven, makeWrapper, jre8_headless, pcsclite }:
+
+let jdk = jdk8; jre_headless = jre8_headless; in
+# 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
+
+  src = fetchFromGitHub {
+    owner = "martinpaljak";
+    repo = "GlobalPlatformPro";
+    rev = version;
+    sha256 = "1vws6cbgm3mrwc2xz9j1y262vw21x3hjc9m7rqc4hn3m7gjpwsvg";
+  };
+
+  deps = stdenv.mkDerivation {
+    name = "${pname}-${version}-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 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..b2d1e09e74f3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glock/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "glock";
+  version = "20160816-${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 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/glpaper/default.nix b/nixpkgs/pkgs/development/tools/glpaper/default.nix
new file mode 100644
index 000000000000..f6465d53cae0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glpaper/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromSourcehut, meson, ninja, pkg-config, wlroots, wayland, wayland-protocols
+, libX11, libGL }:
+
+stdenv.mkDerivation rec {
+  pname = "glpaper";
+  version = "unstable-2020-10-11";
+
+  src = fetchFromSourcehut {
+    owner = "~scoopta";
+    repo = pname;
+    vc = "hg";
+    rev = "9e7ec7cd270af330039c395345c7d23c04682267";
+    sha256 = "sha256-yBHRg6eg+PK/ixuM0MBty3RJY9qcemr3Dt+8SAitqnk=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+  buildInputs = [
+    wayland
+    libX11 # required by libglvnd
+    libGL
+  ];
+
+  meta = with lib; {
+    description =
+      "Wallpaper program for wlroots based Wayland compositors such as sway that allows you to render glsl shaders as your wallpaper";
+    homepage = "https://hg.sr.ht/~scoopta/glpaper";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ccellado ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/glslviewer/default.nix b/nixpkgs/pkgs/development/tools/glslviewer/default.nix
new file mode 100644
index 000000000000..3f83e1fcb02f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/glslviewer/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchFromGitHub, glfw, pkg-config, libXrandr, libXdamage
+, libXext, libXrender, libXinerama, libXcursor, libXxf86vm, libXi
+, libX11, libGLU, python3Packages, ensureNewerSourcesForZipFilesHook
+, Cocoa
+}:
+
+stdenv.mkDerivation rec {
+  pname = "glslviewer";
+  version = "1.6.8";
+
+  src = fetchFromGitHub {
+    owner = "patriciogonzalezvivo";
+    repo = "glslViewer";
+    rev = version;
+    sha256 = "0v7x93b61ama0gmzlx1zc56jgi7bvzsfvbkfl82xzwf2h5g1zni7";
+  };
+
+  nativeBuildInputs = [ pkg-config ensureNewerSourcesForZipFilesHook python3Packages.six ];
+  buildInputs = [
+    glfw libGLU glfw libXrandr libXdamage
+    libXext libXrender libXinerama libXcursor libXxf86vm
+    libXi libX11
+  ] ++ (with python3Packages; [ python setuptools wrapPython ])
+    ++ lib.optional stdenv.isDarwin Cocoa;
+  pythonPath = with python3Packages; [ pyyaml 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"
+    2to3 -w bin/*
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin $(toPythonPath "$out")
+    export PYTHONPATH=$PYTHONPATH:$(toPythonPath "$out")
+  '';
+
+  postInstall = ''
+    wrapPythonPrograms
+  '';
+
+  meta = with 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..5531823b8f5b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gnome-desktop-testing/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, lib
+, glib
+, autoreconfHook
+, pkg-config
+, systemd
+, fetchFromGitLab
+, nix-update-script
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-desktop-testing";
+  version = "2021.1";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = "gnome-desktop-testing";
+    rev = "v${version}";
+    sha256 = "sha256-PWn4eEZskY0YgMpf6O2dgXNSu8b8T311vFHREv2HE/Q=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    glib
+    systemd
+  ];
+
+  enableParallelBuilding = true;
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = "gnome-desktop-testing";
+    };
+  };
+
+  meta = with lib; {
+    description = "GNOME test runner for installed tests";
+    homepage = "https://wiki.gnome.org/Initiatives/GnomeGoals/InstalledTests";
+    license = licenses.lgpl2Plus;
+    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..708cdb511a84
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gnulib/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchgit, python3 }:
+
+stdenv.mkDerivation {
+  pname = "gnulib";
+  version = "20210702";
+
+  src = fetchgit {
+    url = "https://git.savannah.gnu.org/r/gnulib.git";
+    rev = "901694b904cd861adc2529b2e05a3fb33f9b534f";
+    sha256 = "1f5znlv2wjziglw9vlygdgm4jfbsz34h2dz6w4h90bl4hm0ycb1w";
+  };
+
+  postPatch = ''
+    patchShebangs gnulib-tool.py
+  '';
+
+  buildInputs = [ python3 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r * $out/
+    ln -s $out/lib $out/include
+    ln -s $out/gnulib-tool $out/bin/
+  '';
+
+  # do not change headers to not update all vendored build files
+  dontFixup = true;
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/gnulib/";
+    description = "Central location for code to be shared among GNU packages";
+    license = licenses.gpl3Plus;
+    platforms = 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..5131436e0248
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-bindata-assetfs/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "go-bindata-assetfs";
+  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 lib; {
+    description = "Serve embedded files from jteeuwen/go-bindata";
+    license = licenses.bsd2;
+    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..f3a5ab297eeb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-bindata/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "go-bindata";
+  version = "3.23.0";
+
+  goPackagePath = "github.com/kevinburke/go-bindata";
+
+  src = fetchFromGitHub {
+    owner = "kevinburke";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-pIEkD0HD/6JFOzkvEG9j9yQP7hLWvmXU3MiyvVFH2rY=";
+  };
+
+  subPackages = [ "go-bindata" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/kevinburke/go-bindata";
+    changelog = "https://github.com/kevinburke/go-bindata/blob/v${version}/CHANGELOG.md";
+    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;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-containerregistry/default.nix b/nixpkgs/pkgs/development/tools/go-containerregistry/default.nix
new file mode 100644
index 000000000000..4aefc02e152b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-containerregistry/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+let bins = [ "crane" "gcrane" ]; in
+
+buildGoModule rec {
+  pname = "go-containerregistry";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0sk3g1i4w8sh40y1ffa61ap7jsscdvnhvh09k8nznydi465csbmq";
+  };
+  vendorSha256 = null;
+
+  subPackages = [ "cmd/crane" "cmd/gcrane" ];
+
+  outputs = [ "out" ] ++ bins;
+
+  ldflags =
+    let t = "github.com/google/go-containerregistry"; in
+    [ "-s" "-w" "-X ${t}/cmd/crane/cmd.Version=v${version}" "-X ${t}/pkg/v1/remote/transport.Version=${version}" ];
+
+  postInstall =
+    lib.concatStringsSep "\n" (
+      map (bin: ''
+        mkdir -p ''$${bin}/bin &&
+        mv $out/bin/${bin} ''$${bin}/bin/ &&
+        ln -s ''$${bin}/bin/${bin} $out/bin/
+      '') bins
+    );
+
+  # NOTE: no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tools for interacting with remote images and registries including crane and gcrane";
+    homepage = "https://github.com/google/go-containerregistry";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ yurrriq ];
+  };
+}
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..110cdbfabc9f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-junit-report/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "go-junit-report-unstable";
+  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 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;
+  };
+}
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..ac6034dffa42
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-langserver/default.nix
@@ -0,0 +1,24 @@
+{ lib, 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 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-migrate/default.nix b/nixpkgs/pkgs/development/tools/go-migrate/default.nix
new file mode 100644
index 000000000000..ed2d508017a0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-migrate/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-migrate";
+  version = "4.15.1";
+
+  src = fetchFromGitHub {
+    owner = "golang-migrate";
+    repo = "migrate";
+    rev = "v${version}";
+    sha256 = "sha256-t4F4jvXexxCqKINaaczeG/B2vLSG87/qZ+VQitfAF4Y=";
+  };
+
+  vendorSha256 = "sha256-qgjU8mUdk8S0VHmWiTK/5euwhRQ4y3o4oRxG2EHF+7E=";
+
+  subPackages = [ "cmd/migrate" ];
+
+  meta = with lib; {
+    homepage    = "https://github.com/golang-migrate/migrate";
+    description = "Database migrations. CLI and Golang library";
+    maintainers = with maintainers; [ offline ];
+    license     = licenses.mit;
+    mainProgram = "migrate";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-minimock/default.nix b/nixpkgs/pkgs/development/tools/go-minimock/default.nix
new file mode 100644
index 000000000000..e2146eb5769f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-minimock/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-minimock";
+  version = "3.0.10";
+
+  src = fetchFromGitHub {
+    owner = "gojuno";
+    repo = "minimock";
+    rev = "v${version}";
+    sha256 = "sha256-zxEBX7+WYQE2BDZmF4N8imFOBPorrYzg55tLlWUO8Lo=";
+  };
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}"
+  ];
+
+  vendorSha256 = "sha256-mIKknTrsJfFBKZrcxhnlDbvQq9q9FCOrk6ueJOoxOzk=";
+
+  doCheck = true;
+
+  subPackages = [ "cmd/minimock" "." ];
+
+  meta = with lib; {
+    homepage = "https://github.com/gojuno/minimock";
+    description = "A golang mock generator from interfaces";
+    license = licenses.mit;
+    maintainers = with maintainers; [ svrana ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-mockery/default.nix b/nixpkgs/pkgs/development/tools/go-mockery/default.nix
new file mode 100644
index 000000000000..7563146afa9b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-mockery/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-mockery";
+  version = "2.9.2";
+
+  src = fetchFromGitHub {
+    owner = "vektra";
+    repo = "mockery";
+    rev = "v${version}";
+    sha256 = "sha256-+r9he3rlANGusv0vIZPSninaouMftRsfJWnm3VngcXU=";
+  };
+
+  vendorSha256 = "sha256-//V3ia3YP1hPgC1ipScURZ5uXU4A2keoG6dGuwaPBcA=";
+
+  meta = with lib; {
+    homepage = "https://github.com/vektra/mockery";
+    description = "A mock code autogenerator for Golang";
+    maintainers = with maintainers; [ fbrs ];
+    license = licenses.bsd3;
+  };
+}
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..9ece650f0cb2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-motion/default.nix
@@ -0,0 +1,38 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  pname = "motion-unstable";
+  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..5ec826eecc78
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-outline/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-outline";
+  version = "unstable-2021-06-08";
+
+  src = fetchFromGitHub {
+    owner = "ramya-rao-a";
+    repo = "go-outline";
+    rev = "9736a4bde949f321d201e5eaa5ae2bcde011bf00";
+    sha256 = "sha256-5ns6n1UO9kRSw8iio4dmJDncsyvFeN01bjxHxQ9Fae4=";
+  };
+
+  vendorSha256 = "sha256-jYYtSXdJd2eUc80UfwRRMPcX6tFiXE3LbxV3NAdKVKE=";
+
+  meta = with lib; {
+    description = "Utility to extract JSON representation of declarations from a Go source file";
+    homepage = "https://github.com/ramya-rao-a/go-outline";
+    maintainers = with maintainers; [ SuperSandro2000 vdemeester ];
+    license = licenses.mit;
+  };
+}
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..72dabc3b9380
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-protobuf/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-protobuf";
+  version = "1.5.2";
+
+  src = fetchFromGitHub {
+    owner = "golang";
+    repo = "protobuf";
+    rev = "v${version}";
+    sha256 = "sha256-E/6Qh8hWilaGeSojOCz8PzP9qnVqNG2DQLYJUqN3BdY=";
+  };
+
+  vendorSha256 = "sha256-CcJjFMslSUiZMM0LLMM3BR53YMxyWk8m7hxjMI9tduE=";
+
+  doCheck = false;
+
+  meta = with 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..b7653aa144e4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-repo-root/default.nix
@@ -0,0 +1,17 @@
+{ lib, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "go-repo-root";
+  version = "20140911-${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-swag/default.nix b/nixpkgs/pkgs/development/tools/go-swag/default.nix
new file mode 100644
index 000000000000..8c340b2ccf6c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-swag/default.nix
@@ -0,0 +1,24 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "go-swag";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "swaggo";
+    repo = "swag";
+    rev = "v${version}";
+    sha256 = "sha256-axvc3iwAfsKunheLLKmUThZh27axRh/GJRcKy9EfEBw=";
+  };
+
+  vendorSha256 = "sha256-QphjiJSQRULphWjrJ8RzrUblTDYL/fYoSNT3+g0tP48=";
+
+  subPackages = [ "cmd/swag" ];
+
+  meta = with lib; {
+    description = "Automatically generate RESTful API documentation with Swagger 2.0 for Go";
+    homepage = "https://github.com/swaggo/swag";
+    license = licenses.mit;
+    maintainers = with maintainers; [ stephenwithph ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-swagger/default.nix b/nixpkgs/pkgs/development/tools/go-swagger/default.nix
new file mode 100644
index 000000000000..f96683322443
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-swagger/default.nix
@@ -0,0 +1,28 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "go-swagger";
+  version = "0.29.0";
+
+  src = fetchFromGitHub {
+    owner = "go-swagger";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-sahInHXv1GtylsY8kpw1dDjKiENmq4myx+7mq60vJAI=";
+  };
+
+  vendorSha256 = "sha256-KLV6ABo1K+KtAzAQ4FcFiK1LAZEsKup+BtgjRJfonAY=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/swagger" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/go-swagger/go-swagger/cmd/swagger/commands.Version=${version}" "-X github.com/go-swagger/go-swagger/cmd/swagger/commands.Commit=${src.rev}" ];
+
+  meta = with lib; {
+    description = "Golang implementation of Swagger 2.0, representation of your RESTful API";
+    homepage = "https://github.com/go-swagger/go-swagger";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
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..a259b768561b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-symbols/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "go-symbols";
+  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 lib.maintainers; [ vdemeester ];
+    license = 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-task/default.nix b/nixpkgs/pkgs/development/tools/go-task/default.nix
new file mode 100644
index 000000000000..d6e5855d992c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-task/default.nix
@@ -0,0 +1,38 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "go-task";
+  version = "3.11.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = "task";
+    rev = "v${version}";
+    sha256 = "sha256-KHeZ0UH7qa+fii+sT7q9ri3DpLOKqQZqCAKQYn4l5M8=";
+  };
+
+  vendorSha256 = "sha256-u+LeH9GijquBeYlA3f2GcyoSP/S7BtBqb8C9OgEA9fY=";
+
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "cmd/task" ];
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}"
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/task $out/bin/go-task
+
+    installShellCompletion completion/{bash,fish,zsh}/*
+  '';
+
+  meta = with lib; {
+    homepage = "https://taskfile.dev/";
+    description = "A task runner / simpler Make alternative written in Go";
+    license = licenses.mit;
+    maintainers = with maintainers; [ parasrah ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go-toml/default.nix b/nixpkgs/pkgs/development/tools/go-toml/default.nix
new file mode 100644
index 000000000000..add3780de5fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-toml/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "go-toml";
+  version = "1.9.4";
+
+  src = fetchFromGitHub {
+    owner = "pelletier";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-1ENmSeo3TtTvhgwtbmq+O9n9fD/FqSUiCrSplkJNTTg=";
+  };
+
+  goPackagePath = "github.com/pelletier/go-toml";
+
+  excludedPackages = [ "cmd/tomltestgen" ];
+
+  meta = with lib; {
+    description = "Go library for the TOML language";
+    homepage = "https://github.com/pelletier/go-toml";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.mit;
+  };
+}
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..0812c949e37e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go-tools/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule
+, lib
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "go-tools";
+  version = "2021.1.2";
+
+  src = fetchFromGitHub {
+    owner = "dominikh";
+    repo = "go-tools";
+    rev = version;
+    sha256 = "sha256-C6ekgrc+zvm8ZLvw1uYR3ZiMLCNSUw1ANEuM4bT4C/o=";
+  };
+
+  vendorSha256 = "sha256-EjCOMdeJ0whp2pHZvm4VV2K78UNKzl98Z/cQvGhWSyY=";
+
+  doCheck = false;
+
+  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 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/go2nix/default.nix b/nixpkgs/pkgs/development/tools/go2nix/default.nix
new file mode 100644
index 000000000000..b5a224cb5ae7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/go2nix/default.nix
@@ -0,0 +1,45 @@
+{ lib, buildGoPackage, go-bindata, gotools, nix-prefetch-git, git, makeWrapper,
+  fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "go2nix";
+  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 = [ "out" "man" ];
+
+  nativeBuildInputs = [ go-bindata gotools makeWrapper ];
+
+  preBuild = "go generate ./...";
+
+  postInstall = ''
+    wrapProgram $out/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 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..56b47bd8c601
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goa/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "goa";
+  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 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..fca346b78c42
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gocode-gomod/default.nix
@@ -0,0 +1,47 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gocode-gomod";
+  version = "1.0.0";
+
+  # 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 {
+    owner = "stamblerre";
+    repo = "gocode";
+    rev = "v${version}";
+    sha256 = "YAOYrPPKgnjCErq8+iW0Le51clGBv0MJy2Nnn7UVo/s=";
+  };
+
+  vendorSha256 = null;
+
+  postInstall = ''
+    mv $out/bin/gocode $out/bin/gocode-gomod
+  '';
+
+  doCheck = false; # fails on go 1.17
+
+  meta = with 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;
+    maintainers = with maintainers; [ kalbasit rvolosatovs ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gocode/default.nix b/nixpkgs/pkgs/development/tools/gocode/default.nix
new file mode 100644
index 000000000000..be9f70da9341
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gocode/default.nix
@@ -0,0 +1,44 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "gocode-unstable";
+  version = "2020-04-06";
+  rev = "4acdcbdea79de6b3dee1c637eca5cbea0fdbe37c";
+
+  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 = "0i1hc089gb6a4mcgg56vn5l0q96wrlza2n08l4349s3dc2j559fb";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with 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;
+    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..b2518109171a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gocode/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 = "72e4a01eba4315301fd9ce00c8c2f492580ded8a";
+      sha256 = "0a8c7j4w784w441j3j3bh640vy1g6g214641qv485wyi0xj49anf";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/goconst/default.nix b/nixpkgs/pkgs/development/tools/goconst/default.nix
new file mode 100644
index 000000000000..987a3285f8be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goconst/default.nix
@@ -0,0 +1,28 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  pname = "goconst";
+  version = "1.4.0";
+
+  goPackagePath = "github.com/jgautheron/goconst";
+
+  excludedPackages = [ "tests" ];
+
+  src = fetchFromGitHub {
+    owner = "jgautheron";
+    repo = "goconst";
+    rev = version;
+    sha256 = "0jp9vg5l4wcvnf653h3d8ay2n7y717l9z34rls1vrsaf0qdf1r6v";
+  };
+
+  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..fb6ce653cc4b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/goconvey/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "goconvey";
+  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 lib.maintainers; [ vdemeester ];
+    license = 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..096af41ba90d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gocyclo/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule
+, lib
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gocyclo";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "fzipp";
+    repo = "gocyclo";
+    rev = "v${version}";
+    sha256 = "1s9m5m5p76wcxi5n4diz891kd5db4ll21fsh9fnvvf9w7yrmgdw2";
+  };
+
+  vendorSha256 = "0sjjj9z1dhilhpc8pq4154czrb79z9cm044jvn75kxcjv6v5l2m5";
+
+  meta = with lib; {
+    description = "Calculate cyclomatic complexities of functions in Go source code";
+    homepage = "https://github.com/fzipp/gocyclo";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/godef/default.nix b/nixpkgs/pkgs/development/tools/godef/default.nix
new file mode 100644
index 000000000000..99fe932013e7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godef/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "godef";
+  version = "1.1.2";
+  rev = "v${version}";
+
+  subPackages = [ "." ];
+
+  vendorSha256 = null;
+
+  doCheck = false;
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "rogpeppe";
+    repo = "godef";
+    sha256 = "0rhhg73kzai6qzhw31yxw3nhpsijn849qai2v9am955svmnckvf4";
+  };
+
+  meta = {
+    description = "Print where symbols are defined in Go source code";
+    homepage = "https://github.com/rogpeppe/godef/";
+    maintainers = with lib.maintainers; [ vdemeester rvolosatovs ];
+    license = 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..1860b864fd52
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/default.nix
@@ -0,0 +1,103 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, scons
+, pkg-config
+, udev
+, libX11
+, libXcursor
+, libXinerama
+, libXrandr
+, libXrender
+, libpulseaudio
+, libXi
+, libXext
+, libXfixes
+, freetype
+, openssl
+, alsa-lib
+, libGLU
+, zlib
+, yasm
+, withUdev ? true
+}:
+
+let
+  options = {
+    touch = libXi != null;
+    pulseaudio = false;
+    udev = withUdev;
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "godot";
+  version = "3.4.2";
+
+  src = fetchFromGitHub {
+    owner = "godotengine";
+    repo = "godot";
+    rev = "${version}-stable";
+    sha256 = "sha256-RVXBFTHiI2yAkXWlHNa/jL8svQgqtsml6RuykhL1qa4=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    scons
+    udev
+    libX11
+    libXcursor
+    libXinerama
+    libXrandr
+    libXrender
+    libXi
+    libXext
+    libXfixes
+    freetype
+    openssl
+    alsa-lib
+    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 = with lib; {
+    homepage = "https://godotengine.org";
+    description = "Free and Open Source 2D and 3D game engine";
+    license = licenses.mit;
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    maintainers = with 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..74e1241513ba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/dont_clobber_environment.patch
@@ -0,0 +1,19 @@
+diff --git a/SConstruct b/SConstruct
+index d138c7b250..c925bf908e 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -65,10 +65,10 @@ elif platform_arg == "javascript":
+ # want to have to pull in manually.
+ # Then we prepend PATH to make it take precedence, while preserving SCons' own entries.
+ env_base = Environment(tools=custom_tools)
+-env_base.PrependENVPath("PATH", os.getenv("PATH"))
+-env_base.PrependENVPath("PKG_CONFIG_PATH", os.getenv("PKG_CONFIG_PATH"))
+-if "TERM" in os.environ:  # Used for colored output.
+-    env_base["ENV"]["TERM"] = os.environ["TERM"]
++for k in ("TERM", "PATH", "PKG_CONFIG_PATH"):
++    if (k in os.environ):
++        env_base["ENV"][k] = os.environ[k]
++
+
+ env_base.disabled_modules = []
+ env_base.use_ptrcall = False
diff --git a/nixpkgs/pkgs/development/tools/godot/export-templates.nix b/nixpkgs/pkgs/development/tools/godot/export-templates.nix
new file mode 100644
index 000000000000..bfcf3e3b3dca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/export-templates.nix
@@ -0,0 +1,17 @@
+{ godot, lib }:
+
+# https://docs.godotengine.org/en/stable/development/compiling/compiling_for_x11.html#building-export-templates
+godot.overrideAttrs (oldAttrs: rec {
+  pname = "godot-export-templates";
+  sconsFlags = "target=release platform=x11 tools=no";
+  installPhase = ''
+    # The godot export command expects the export templates at
+    # .../share/godot/templates/3.2.3.stable with 3.2.3 being the godot version.
+    mkdir -p "$out/share/godot/templates/${oldAttrs.version}.stable"
+    cp bin/godot.x11.opt.64 $out/share/godot/templates/${oldAttrs.version}.stable/linux_x11_64_release
+  '';
+  outputs = [ "out" ];
+  meta.description =
+    "Free and Open Source 2D and 3D game engine (export templates)";
+  meta.maintainers = with lib.maintainers; [ twey jojosch ];
+})
diff --git a/nixpkgs/pkgs/development/tools/godot/headless.nix b/nixpkgs/pkgs/development/tools/godot/headless.nix
new file mode 100644
index 000000000000..a8d640eba1aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/headless.nix
@@ -0,0 +1,18 @@
+{ godot, lib }:
+godot.overrideAttrs (oldAttrs: rec {
+  pname = "godot-headless";
+  sconsFlags = "target=release_debug platform=server tools=yes";
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp bin/godot_server.* $out/bin/godot-headless
+
+    mkdir "$dev"
+    cp -r modules/gdnative/include $dev
+
+    mkdir -p "$man/share/man/man6"
+    cp misc/dist/linux/godot.6 "$man/share/man/man6/"
+  '';
+  meta.description =
+    "Free and Open Source 2D and 3D game engine (headless build)";
+  meta.maintainers = with lib.maintainers; [ twey yusdacra ];
+})
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..f5ab667f1808
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/pkg_config_additions.patch
@@ -0,0 +1,32 @@
+diff --git a/platform/x11/detect.py b/platform/x11/detect.py
+index 91652aad55..d12389f9f2 100644
+--- a/platform/x11/detect.py
++++ b/platform/x11/detect.py
+@@ -218,6 +218,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(CPPDEFINES=["TOUCH_ENABLED"])
+
+@@ -323,6 +328,7 @@ def configure(env):
+         print("Enabling ALSA")
+         env["alsa"] = True
+         env.Append(CPPDEFINES=["ALSA_ENABLED", "ALSAMIDI_ENABLED"])
++        env.ParseConfig("pkg-config alsa --cflags --libs")
+     else:
+         print("ALSA libraries not found, disabling driver")
+
+@@ -340,6 +346,7 @@ def configure(env):
+             if os.system("pkg-config --exists libudev") == 0:  # 0 means found
+                 print("Enabling udev support")
+                 env.Append(CPPDEFINES=["UDEV_ENABLED"])
++                env.ParseConfig("pkg-config libudev --cflags --libs")
+             else:
+                 print("libudev development libraries not found, disabling udev support")
+     else:
diff --git a/nixpkgs/pkgs/development/tools/godot/server.nix b/nixpkgs/pkgs/development/tools/godot/server.nix
new file mode 100644
index 000000000000..4254dc746b66
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/godot/server.nix
@@ -0,0 +1,18 @@
+{ godot, lib }:
+godot.overrideAttrs (oldAttrs: rec {
+  pname = "godot-server";
+  sconsFlags = "target=release platform=server tools=no";
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp bin/godot_server.* $out/bin/godot-server
+
+    mkdir "$dev"
+    cp -r modules/gdnative/include $dev
+
+    mkdir -p "$man/share/man/man6"
+    cp misc/dist/linux/godot.6 "$man/share/man/man6/"
+  '';
+  meta.description =
+    "Free and Open Source 2D and 3D game engine (server build)";
+  meta.maintainers = with lib.maintainers; [ twey yusdacra ];
+})
diff --git a/nixpkgs/pkgs/development/tools/gofumpt/default.nix b/nixpkgs/pkgs/development/tools/gofumpt/default.nix
new file mode 100644
index 000000000000..2c3922964948
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gofumpt/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gofumpt";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "mvdan";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-S6IF/MtNCkhPHHdaQJyT78j2z4xdf4z/xLfXDmCWR2Y=";
+  };
+
+  vendorSha256 = "sha256-LhiCxpjySEezhcgICfgD+mABd1QXyZn3uI1Fj+eWiyo=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A stricter gofmt";
+    homepage = "https://github.com/mvdan/gofumpt";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ rvolosatovs ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gogetdoc/default.nix b/nixpkgs/pkgs/development/tools/gogetdoc/default.nix
new file mode 100644
index 000000000000..2a111a8d1ab3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gogetdoc/default.nix
@@ -0,0 +1,32 @@
+{ buildGoModule
+, lib
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gogetdoc-unstable";
+  version = "2019-02-28";
+  rev = "b37376c5da6aeb900611837098f40f81972e63e4";
+
+  vendorSha256 = null;
+
+  doCheck = false;
+
+  excludedPackages = "\\(testdata\\)";
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "zmb3";
+    repo = "gogetdoc";
+    sha256 = "1v74zd0x2xh10603p8raazssacv3y0x0lr9apkpsdk0bfp5jj0lr";
+  };
+
+  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/gojsontoyaml/default.nix b/nixpkgs/pkgs/development/tools/gojsontoyaml/default.nix
new file mode 100644
index 000000000000..02f5421ca004
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gojsontoyaml/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gojsontoyaml";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "brancz";
+    repo = "gojsontoyaml";
+    rev = "v${version}";
+    sha256 = "sha256-ebxz2uTH7XwD3j6JnsfET6aCGYjvsCjow/sU9pagg50=";
+  };
+
+  vendorSha256 = null;
+
+  meta = with lib; {
+    description = "Simply tool to convert json to yaml written in Go";
+    homepage = "https://github.com/brancz/gojsontoyaml";
+    license = licenses.mit;
+    maintainers = [ maintainers.bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gokart/default.nix b/nixpkgs/pkgs/development/tools/gokart/default.nix
new file mode 100644
index 000000000000..f7d0857580ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gokart/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gokart";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "praetorian-inc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-HsjLNY5Z5UidsLDWSP+1bu3jrfn3oAERPrPV/AkTH8I=";
+  };
+
+  vendorSha256 = "sha256-S3RukCKAJnPH1KGVdnkgAJQKEDTZYpcMMdoQ4OnHZVg=";
+
+  # Would need files to scan which are not shipped by the project
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Static analysis tool for securing Go code";
+    homepage = "https://github.com/praetorian-inc/gokart";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
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..6334c00fc0bb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/golangci-lint/default.nix
@@ -0,0 +1,39 @@
+{ buildGoModule, fetchFromGitHub, lib, installShellFiles }:
+
+buildGoModule rec {
+  pname = "golangci-lint";
+  version = "1.44.2";
+
+  src = fetchFromGitHub {
+    owner = "golangci";
+    repo = "golangci-lint";
+    rev = "v${version}";
+    sha256 = "sha256-RMZZLvCJcTMzHOzUfT6aEC21T5dCwu1YOUuQ9PLS3fc=";
+  };
+
+  vendorSha256 = "sha256-X2hZ4BQgYHI1mx/Ywky0oo7IMtrppu+rLq2LRLPH3fY=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/golangci-lint" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}" "-X main.commit=v${version}" "-X main.date=19700101-00:00:00"
+  ];
+
+  postInstall = ''
+    for shell in bash zsh fish; do
+      HOME=$TMPDIR $out/bin/golangci-lint completion $shell > golangci-lint.$shell
+      installShellCompletion golangci-lint.$shell
+    done
+  '';
+
+  meta = with lib; {
+    description = "Fast linters Runner for Go";
+    homepage = "https://golangci-lint.run/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ anpryl manveru mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/golint/default.nix b/nixpkgs/pkgs/development/tools/golint/default.nix
new file mode 100644
index 000000000000..3187f793127e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/golint/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchgit }:
+
+buildGoModule rec {
+  pname = "lint";
+  version = "20201208-${lib.strings.substring 0 7 rev}";
+  rev = "83fdc39ff7b56453e3793356bcff3070b9b96445";
+
+  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 = "sha256-g4Z9PREOxGoN7n/XhutawsITBznJlbz6StXeDYvOQ1c=";
+  };
+
+  vendorSha256 = "sha256-dPadFoymYu2Uw2AXZfbaBfxsN8IWMuK1TrcknHco3Bo=";
+
+  meta = with lib; {
+    homepage = "https://golang.org";
+    description = "Linter for Go source code";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jhillyerd tomberek ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gomacro/default.nix b/nixpkgs/pkgs/development/tools/gomacro/default.nix
new file mode 100644
index 000000000000..e96fccd0a3b5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gomacro/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gomacro";
+  rev = "b4c3ab9b218fd12f22759354f4f3e37635828d1f";
+  version = "20210131-${lib.strings.substring 0 7 rev}";
+
+  src = fetchFromGitHub {
+    owner = "cosmos72";
+    repo = "gomacro";
+    sha256 = "0ci486zqrhzvs3njn2ygaxsgjx3fn8bbj2q3sd80xvjiyjvq866g";
+    inherit rev;
+  };
+
+  vendorSha256 = "1ib4h57drikyy5aq4ms6vc1p29djlpjrh7xd3bgyykr9zmm2w1kx";
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Interactive Go interpreter and debugger with generics and macros";
+    homepage = "https://github.com/cosmos72/gomacro";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ shofius ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gomodifytags/default.nix b/nixpkgs/pkgs/development/tools/gomodifytags/default.nix
new file mode 100644
index 000000000000..254113f21064
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gomodifytags/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gomodifytags";
+  version = "1.6.0";
+
+  vendorSha256 = null;
+
+  doCheck = false;
+
+  src = fetchFromGitHub {
+    owner = "fatih";
+    repo = "gomodifytags";
+    rev = "v${version}";
+    sha256 = "1wmzl5sk5mc46njzn86007sqyyv6han058ppiw536qyhk88rzazq";
+  };
+
+  meta = {
+    description = "Go tool to modify struct field tags";
+    homepage = "https://github.com/fatih/gomodifytags";
+    maintainers = with lib.maintainers; [ vdemeester ];
+    license = lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gomplate/default.nix b/nixpkgs/pkgs/development/tools/gomplate/default.nix
new file mode 100644
index 000000000000..10f853a65237
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gomplate/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gomplate";
+  version = "3.9.0";
+  owner = "hairyhenderson";
+  rev = "v${version}";
+
+  src = fetchFromGitHub {
+    inherit owner rev;
+    repo = pname;
+    sha256 = "sha256-liy8cqn+hWoTOHchCY1LLu23tNvz7eGA+AN0d0APjC4=";
+  };
+
+  vendorSha256 = "sha256-Ph9z/Tom7O7V7yZ/On+etty+Bl653HiY/J3d3yfweeQ=";
+
+  # some tests require network access
+  postPatch = ''
+    rm net/net_test.go
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/${owner}/${pname}/v3/version.Version=${rev}"
+  ];
+
+  meta = with lib; {
+    description = "A flexible commandline tool for template rendering";
+    homepage = "https://gomplate.ca/";
+    maintainers = with maintainers; [ ris jlesquembre ];
+    license = licenses.mit;
+  };
+}
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..c20d7a2e49a6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/google-app-engine-go-sdk/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchzip, python3Packages, makeWrapper }:
+
+with python3Packages;
+
+stdenv.mkDerivation rec {
+  pname = "google-app-engine-go-sdk";
+  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";
+      };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python ];
+
+  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 : "${python}/bin" \
+        --prefix PYTHONPATH : "$(toPythonPath ${cffi}):$(toPythonPath ${cryptography}):$(toPythonPath ${pyopenssl})"
+    done
+  '';
+
+  meta = with 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/google-java-format/default.nix b/nixpkgs/pkgs/development/tools/google-java-format/default.nix
new file mode 100644
index 000000000000..35a7d7e71995
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/google-java-format/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "google-java-format";
+  version = "1.14.0";
+
+  src = fetchurl {
+    url = "https://github.com/google/google-java-format/releases/download/v${version}/google-java-format-${version}-all-deps.jar";
+    sha256 = "sha256-DSfT5Yw6nZHYm0JNRn+r3iToxntGYmBhU7zQGzg+vXc=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,share/${pname}}
+    install -D ${src} $out/share/${pname}/google-java-format-${version}-all-deps.jar
+
+    makeWrapper ${jre}/bin/java $out/bin/${pname} \
+      --argv0 ${pname} \
+      --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED" \
+      --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED" \
+      --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED" \
+      --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED" \
+      --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED" \
+      --add-flags "-jar $out/share/${pname}/google-java-format-${version}-all-deps.jar"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Java source formatter by Google";
+    longDescription = ''
+      A program that reformats Java source code to comply with Google Java Style.
+    '';
+    homepage = "https://github.com/google/google-java-format";
+    license = licenses.asl20;
+    maintainers = [ maintainers.emptyflask ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gopkgs/default.nix b/nixpkgs/pkgs/development/tools/gopkgs/default.nix
new file mode 100644
index 000000000000..a5413c6a9c05
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gopkgs/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gopkgs";
+  version = "2.1.2";
+
+  subPackages = [ "cmd/gopkgs" ];
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "uudashr";
+    repo = "gopkgs";
+    sha256 = "1jak1bg6k5iasscw68ra875k59k3iqhka2ykabsd427k1j3mypln";
+  };
+
+  vendorSha256 = "1pwsc488ldw039by8nqpni801zry7dnf0rx4hhd73xpv2w7s8n2r";
+
+  doCheck = false;
+
+  meta = {
+    description = "Tool to get list available Go packages";
+    homepage = "https://github.com/uudashr/gopkgs";
+    maintainers = with lib.maintainers; [ vdemeester ];
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gopls/default.nix b/nixpkgs/pkgs/development/tools/gopls/default.nix
new file mode 100644
index 000000000000..0f57be390f2e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gopls/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gopls";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "golang";
+    repo = "tools";
+    rev = "gopls/v${version}";
+    sha256 = "sha256-VBan3IKqf3AFrPoryT/U7lGabFHSXMhaBpnNw3LRH/I=";
+  };
+
+  modRoot = "gopls";
+  vendorSha256 = "sha256-pW4G89fYFwVM2EkIqTCsl2lhN677LIMFpKPvLVV2boY=";
+
+  doCheck = false;
+
+  # Only build gopls, and not the integration tests or documentation generator.
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Official language server for the Go language";
+    homepage = "https://github.com/golang/tools/tree/master/gopls";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ mic92 SuperSandro2000 zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gops/default.nix b/nixpkgs/pkgs/development/tools/gops/default.nix
new file mode 100644
index 000000000000..8fce1ee97824
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gops/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gops";
+  version = "0.3.22";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "gops";
+    rev = "v${version}";
+    sha256 = "sha256-97D92sWGqtMGzwrQ3NUR7prgsqtJvAQOjYlfmSWIEKo=";
+  };
+
+  vendorSha256 = null;
+
+  preCheck = "export HOME=$(mktemp -d)";
+
+  meta = with lib; {
+    description = "A tool to list and diagnose Go processes currently running on your system";
+    homepage = "https://github.com/google/gops";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ pborzenkov ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gore/default.nix b/nixpkgs/pkgs/development/tools/gore/default.nix
new file mode 100644
index 000000000000..0131908d0aac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gore/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gore";
+  version = "0.5.3";
+
+  src = fetchFromGitHub {
+    owner = "motemen";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-uLU4uZaQA9u6BUQZ0Rb4Yqg/oJOZ529gIiOwmmyg05A=";
+  };
+
+  vendorSha256 = "sha256-/yggEibpQK9Uk116RkE5XbbJe6j4WsIC3GtKPU/P2hU=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Yet another Go REPL that works nicely";
+    homepage = "https://github.com/motemen/gore";
+    license = licenses.mit;
+    maintainers = with maintainers; [ offline ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gosec/default.nix b/nixpkgs/pkgs/development/tools/gosec/default.nix
new file mode 100644
index 000000000000..d9e19fdac90e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gosec/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gosec";
+  version = "2.10.0";
+
+  src = fetchFromGitHub {
+    owner = "securego";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-a3MDGsTqndHlT6fbUkdsBShDqWXOHQiJFUIjyMqvMq8=";
+  };
+
+  vendorSha256 = "sha256-3ZGzVGKwnNab8wUn0fRepl4FDo43MAqNAO3zijH90/0=";
+
+  subPackages = [
+    "cmd/gosec"
+  ];
+
+  doCheck = false;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+    "-X main.GitTag=${src.rev}"
+    "-X main.BuildDate=unknown"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/securego/gosec";
+    description = "Golang security checker";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit nilp0inter ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gotags/default.nix b/nixpkgs/pkgs/development/tools/gotags/default.nix
new file mode 100644
index 000000000000..274f7a476c2b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotags/default.nix
@@ -0,0 +1,15 @@
+{ lib, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "gotags";
+  version = "20150803-${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/gotest/default.nix b/nixpkgs/pkgs/development/tools/gotest/default.nix
new file mode 100644
index 000000000000..455bf63b3f39
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotest/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gotest";
+  version = "0.0.6";
+
+  src = fetchFromGitHub {
+    owner = "rakyll";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1v11ccrjghq7nsz0f91r17di14yixsw28vs0m3dwzwqkh1a20img";
+  };
+
+  vendorSha256 = "sha256-pVq6H1HoKqCMRfJg7FftRf3vh+BWZQe6cQAX+TBzKqw=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "go test with colors";
+    homepage = "https://github.com/rakyll/gotest";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gotests/default.nix b/nixpkgs/pkgs/development/tools/gotests/default.nix
new file mode 100644
index 000000000000..d0d5025b31a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotests/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gotests";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "cweill";
+    repo = "gotests";
+    rev = "v${version}";
+    sha256 = "sha256-6IzUpAsFUgF2FwiC17OfDn1M+8WYFQPpRyXbkpHIztw=";
+  };
+
+  vendorSha256 = "sha256-WMeHZN3s+8pIYEVaSLjI3Bz+rPTWHr1AkZ8lydjBwCw=";
+
+  # tests are broken in nix environment
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Generate Go tests from your source code";
+    homepage = "https://github.com/cweill/gotests";
+    maintainers = with maintainers; [ vdemeester ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gotestsum/default.nix b/nixpkgs/pkgs/development/tools/gotestsum/default.nix
new file mode 100644
index 000000000000..5ab7497c9a22
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotestsum/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "gotestsum";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "gotestyourself";
+    repo = "gotestsum";
+    rev = "v${version}";
+    sha256 = "sha256-nZaVi39dOytJTM69xpl+d9XoUt+yHdndPgY2ggfNeMQ=";
+  };
+
+  vendorSha256 = "sha256-wP5y8Ec6eSe+rdMEQQdX0fFTQ0HWuiyBRHxGlraZd+o=";
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X gotest.tools/gotestsum/cmd.version=${version}" ];
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    homepage = "https://github.com/gotestyourself/gotestsum";
+    description = "A human friendly `go test` runner";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ endocrimes ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gotools/default.nix b/nixpkgs/pkgs/development/tools/gotools/default.nix
new file mode 100644
index 000000000000..285d546d7421
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gotools/default.nix
@@ -0,0 +1,56 @@
+{ lib, buildGoModule, fetchgit }:
+
+buildGoModule rec {
+  pname = "gotools-unstable";
+  version = "2021-01-13";
+  rev = "8b4aab62c064010e8e875d2e5a8e63a96fefc87d";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://go.googlesource.com/tools";
+    sha256 = "1cmnm9fl2a6hiplj8s6x0l3czcw4xh3j3lvzbgccnp1l8kz8q2vm";
+  };
+
+  # The gopls folder contains a Go submodule which causes a build failure.
+  # Given that, we can't have the gopls binary be part of the gotools
+  # derivation.
+  #
+  # The attribute "gopls" provides the gopls binary.
+  #
+  # Related
+  #
+  # * https://github.com/NixOS/nixpkgs/pull/85868
+  # * https://github.com/NixOS/nixpkgs/issues/88716
+  postPatch = ''
+    rm -rf gopls
+  '';
+
+  vendorSha256 = "18qpjmmjpk322fvf81cafkpl3spv7hpdpymhympmld9isgzggfyz";
+
+  doCheck = false;
+
+  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 = "\\("
+    + lib.concatStringsSep "\\|" ([ "testdata" "vet" "cover" ])
+    + "\\)";
+
+  # Set GOTOOLDIR for derivations adding this to buildInputs
+  postInstall = ''
+    mkdir -p $out/nix-support
+    substitute ${../../go-modules/tools/setup-hook.sh} $out/nix-support/setup-hook \
+      --subst-var-by bin $out
+  '';
+
+  # 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..b24afebb3aa3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/govendor/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "govendor";
+  version = "1.0.9";
+
+  goPackagePath = "github.com/kardianos/govendor";
+
+  src = fetchFromGitHub {
+    owner = "kardianos";
+    repo = "govendor";
+    rev = "v${version}";
+    sha256 = "0g02cd25chyijg0rzab4xr627pkvk5k33mscd6r0gf1v5xvadcfq";
+  };
+
+  meta = with 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..5e2d89cfd5df
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/govers/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "govers";
+  version = "20160623-${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..4aa7a314c876
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gox/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "gox";
+  version = "1.0.1";
+
+  goPackagePath = "github.com/mitchellh/gox";
+
+  src = fetchFromGitHub {
+    owner = "mitchellh";
+    repo = "gox";
+    rev = "v${version}";
+    sha256 = "0mkh81hd7kn45dz7b6yhzqsg2mvg1g6pwx89jjigxrnqhyg9vrl7";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/mitchellh/gox";
+    description = "A dead simple, no frills Go cross compile tool";
+    license = licenses.mpl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gpp/default.nix b/nixpkgs/pkgs/development/tools/gpp/default.nix
new file mode 100644
index 000000000000..9e49b0c0284f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gpp/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation {
+  pname = "gpp";
+  version = "2.25";
+
+  src = fetchFromGitHub {
+    owner = "logological";
+    repo = "gpp";
+    rev = "96c5dd8905384ea188f380f51d24cbd7fd58f642";
+    sha256 = "0bvhnx3yfhbfiqqhhz6k2a596ls5rval7ykbp3jl5b6062xj861b";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  installCheckPhase = "$out/bin/gpp --help";
+  doInstallCheck = true;
+
+  meta = with 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..2ce3ff49c417
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/grabserial/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "grabserial";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "tbird20d";
+    repo = "grabserial";
+    rev = "v${version}";
+    sha256 = "0ryk4w8q6zfmia71nwnk5b7xaxw0sf45dw9q50xp7k76i3k5f9f3";
+  };
+
+  propagatedBuildInputs = [ python3Packages.pyserial ];
+
+  # no usable tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Python based serial dump and timing program";
+    homepage = "https://github.com/tbird20d/grabserial";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ vmandela ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/graphql-client/default.nix b/nixpkgs/pkgs/development/tools/graphql-client/default.nix
new file mode 100644
index 000000000000..b98f287d612d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/graphql-client/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, rustPlatform, fetchCrate, pkg-config, openssl, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "graphql-client";
+  version = "0.10.0";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = "graphql_client_cli";
+    sha256 = "sha256-OV4kpvciEJOGfhkxPoNf1QmhdytWMhXuQAKOFJvDFA4=";
+  };
+
+  cargoSha256 = "sha256-r/pRwDLc/yGMzdZIx8SV46o63eb6qrlTb6MsUBhq97w=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "A GraphQL tool for Rust projects";
+    homepage = "https://github.com/graphql-rust/graphql-client";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/gron/default.nix b/nixpkgs/pkgs/development/tools/gron/default.nix
new file mode 100644
index 000000000000..a5247a3f80da
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gron/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "gron";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "tomnomnom";
+    repo = "gron";
+    rev = "v${version}";
+    sha256 = "0qmzawkhg0qn9kxxrssbdjni2khvamhrcklv3yxc0ljmh77mh61m";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-inconsistent-vendoring.patch";
+      url = "https://github.com/tomnomnom/gron/pull/85/commits/d549a6cb68ed0e0ec7cc81d8275353acfe218725.patch";
+      sha256 = "1461v4f7w6q75l3988br0g1ynfhzsh34z38pd2w8fp57vrgkcfi5";
+    })
+  ];
+
+  vendorSha256 = "sha256-Evn5R/LzripRgG0zOVP/DJrtjwNRwgKapsRdtZaZhlU=";
+
+  meta = with 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 = with maintainers; [ fgaz SuperSandro2000 ];
+    platforms = platforms.unix;
+  };
+}
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..c4ac76f46123
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/gtk-mac-bundler/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "gtk-mac-bundler";
+  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..6bb80306e68e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/guile/g-wrap/default.nix
@@ -0,0 +1,34 @@
+{ fetchurl, lib, stdenv, guile, guile-lib, libffi, pkg-config, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "g-wrap";
+  version = "1.9.15";
+
+  src = fetchurl {
+    url = "mirror://savannah/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0ak0bha37dfpj9kmyw1r8fj8nva639aw5xr66wr5gd3l1rqf5xhg";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  # 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 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..6de9e48ae667
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/guile/guile-lint/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, guile }:
+
+stdenv.mkDerivation rec {
+  pname = "guile-lint";
+  version = "14";
+
+  src = fetchurl {
+    url = "https://download.tuxfamily.org/user42/${pname}-${version}.tar.bz2";
+    sha256 = "1gnhnmki05pkmzpbfc07vmb2iwza6vhy75y03bw2x2rk4fkggz2v";
+  };
+
+  buildInputs = [ guile ];
+
+  unpackPhase = ''tar xjvf "$src" && sourceRoot="$PWD/${pname}-${version}"'';
+
+  prePatch = ''
+    substituteInPlace guile-lint.in --replace \
+      "exec guile" "exec ${guile}/bin/guile"
+  '';
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with 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/halfempty/default.nix b/nixpkgs/pkgs/development/tools/halfempty/default.nix
new file mode 100644
index 000000000000..35fdf7702a87
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/halfempty/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, glib, util-linux, scowl }:
+
+stdenv.mkDerivation rec {
+  pname = "halfempty";
+  version = "0.40";
+
+  src = fetchFromGitHub {
+    owner = "googleprojectzero";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-YGq6fneAMo2jCpLPrjzRJ0eeOsStKaK5L+lwQfqcfpY=";
+  };
+
+  nativeBuildInputs = [ pkg-config util-linux ];
+  buildInputs = [ glib ];
+
+  enableParallelBuilding = true;
+
+  patches = [
+    (fetchpatch {
+      name = "fix-bash-specific-syntax.patch";
+      url = "https://github.com/googleprojectzero/halfempty/commit/ad15964d0fcaba12e5aca65c8935ebe3f37d7ea3.patch";
+      sha256 = "sha256:0hgdci0wwi5wyw8i57w0545cxjmsmswm1y6g4vhykap0y40zizav";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace test/Makefile \
+      --replace '/usr/share/dict/words' '${scowl}/share/dict/words.txt'
+  '';
+
+  installPhase = ''
+    install -vDt $out/bin halfempty
+  '';
+
+  doCheck = true;
+  checkTarget = "test";
+
+  meta = {
+    description = "Fast, parallel test case minimization tool";
+    homepage = "https://github.com/googleprojectzero/halfempty/";
+    maintainers = with lib.maintainers; [ fpletz ];
+    license = with lib.licenses; [ asl20 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/dconf2nix/dconf2nix.nix b/nixpkgs/pkgs/development/tools/haskell/dconf2nix/dconf2nix.nix
new file mode 100644
index 000000000000..6ac6605797eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/dconf2nix/dconf2nix.nix
@@ -0,0 +1,24 @@
+{ mkDerivation, base, containers, fetchgit, hedgehog, lib
+, optparse-applicative, parsec, template-haskell, text
+}:
+mkDerivation {
+  pname = "dconf2nix";
+  version = "0.0.11";
+  src = fetchgit {
+    url = "https://github.com/gvolpe/dconf2nix.git";
+    sha256 = "1kv88bxi7l5kcm66m5y85b8fz1zsdshvw37k715g2biwa0an5s6f";
+    rev = "fe7e3d973caa87b1b706096aff3d670f65e39fda";
+    fetchSubmodules = true;
+  };
+  isLibrary = true;
+  isExecutable = true;
+  libraryHaskellDepends = [
+    base containers optparse-applicative parsec text
+  ];
+  executableHaskellDepends = [ base ];
+  testHaskellDepends = [
+    base containers hedgehog parsec template-haskell text
+  ];
+  description = "Convert dconf files to Nix, as expected by Home Manager";
+  license = lib.licenses.asl20;
+}
diff --git a/nixpkgs/pkgs/development/tools/haskell/dconf2nix/default.nix b/nixpkgs/pkgs/development/tools/haskell/dconf2nix/default.nix
new file mode 100644
index 000000000000..4cc137b54f75
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/dconf2nix/default.nix
@@ -0,0 +1,32 @@
+{ haskell, haskellPackages, lib, runCommand }:
+
+let
+  dconf2nix =
+    haskell.lib.compose.justStaticExecutables
+      (haskell.lib.compose.overrideCabal (oldAttrs: {
+        maintainers = (oldAttrs.maintainers or []) ++ [
+          lib.maintainers.gvolpe
+        ];
+      }) haskellPackages.dconf2nix);
+in
+
+dconf2nix.overrideAttrs (oldAttrs: {
+  passthru = (oldAttrs.passthru or {}) // {
+    updateScript = ./update.sh;
+
+    # These tests can be run with the following command.
+    #
+    # $ nix-build -A dconf2nix.passthru.tests
+    tests =
+      runCommand
+        "dconf2nix-tests"
+        {
+          nativeBuildInputs = [
+            dconf2nix
+          ];
+        }
+        ''
+          dconf2nix > $out
+        '';
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/haskell/dconf2nix/update.sh b/nixpkgs/pkgs/development/tools/haskell/dconf2nix/update.sh
new file mode 100755
index 000000000000..8129824e256b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/dconf2nix/update.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p cabal2nix curl jq
+#
+# This script will update the dconf2nix derivation to the latest version using
+# cabal2nix.
+
+set -eo pipefail
+
+# This is the directory of this update.sh script.
+script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+
+# dconf2nix derivation created with cabal2nix.
+dconf2nix_derivation_file="${script_dir}/dconf2nix.nix"
+
+# This is the current revision of dconf2nix in Nixpkgs.
+old_version="$(sed -En 's/.*\bversion = "(.*?)".*/\1/p' "$dconf2nix_derivation_file")"
+
+# This is the latest release version of dconf2nix on GitHub.
+new_version=$(curl --silent "https://api.github.com/repos/gvolpe/dconf2nix/releases" | jq '.[0].tag_name' --raw-output)
+
+echo "Updating dconf2nix from old version $old_version to new version $new_version."
+echo "Running cabal2nix and outputting to ${dconf2nix_derivation_file}..."
+
+cabal2nix --revision "$new_version" "https://github.com/gvolpe/dconf2nix.git" > "$dconf2nix_derivation_file"
+
+echo "Finished."
diff --git a/nixpkgs/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix b/nixpkgs/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix
new file mode 100644
index 000000000000..8c8f016510f2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, supportedGhcVersions ? [ "884" "8107" "902" ]
+    ++ lib.optionals (!stdenv.hostPlatform.isAarch64) [ "921" ]
+, dynamic ? false
+, haskellPackages
+, haskell
+}:
+#
+# The recommended way to override this package is
+#
+# pkgs.haskell-language-server.override { supportedGhcVersions = [ "901" ]; }
+#
+# for example. Read more about this in the haskell-language-server section of the nixpkgs manual.
+#
+let
+  inherit (lib) concatStringsSep concatMapStringsSep take splitString pipe optionals;
+  inherit (haskell.lib.compose) justStaticExecutables overrideCabal enableCabalFlag disableCabalFlag;
+  getPackages = version: haskell.packages."ghc${version}";
+  tunedHls = hsPkgs:
+    lib.pipe hsPkgs.haskell-language-server ([
+      (haskell.lib.compose.overrideCabal (old: {
+        enableSharedExecutables = dynamic;
+        ${if !dynamic then "postInstall" else null} = ''
+          ${old.postInstall or ""}
+
+          remove-references-to -t ${hsPkgs.ghc} $out/bin/haskell-language-server
+        '';
+      }))
+      ((if dynamic then enableCabalFlag else disableCabalFlag) "dynamic")
+    ] ++ optionals (!dynamic) [
+      justStaticExecutables
+    ]);
+  targets = version:
+    let packages = getPackages version;
+    in [
+      "haskell-language-server-${packages.ghc.version}"
+    ];
+  makeSymlinks = version:
+    concatMapStringsSep "\n" (x:
+      "ln -s ${
+        tunedHls (getPackages version)
+      }/bin/haskell-language-server $out/bin/${x}") (targets version);
+  pkg = tunedHls haskellPackages;
+in stdenv.mkDerivation {
+  pname = "haskell-language-server";
+  version = haskellPackages.haskell-language-server.version;
+  buildCommand = ''
+    mkdir -p $out/bin
+    ln -s ${pkg}/bin/haskell-language-server $out/bin/haskell-language-server
+    ln -s ${pkg}/bin/haskell-language-server-wrapper $out/bin/haskell-language-server-wrapper
+    ${concatMapStringsSep "\n" makeSymlinks supportedGhcVersions}
+  '';
+  meta = haskellPackages.haskell-language-server.meta // {
+    maintainers = [ lib.maintainers.maralorn ];
+    longDescription = ''
+      This package provides haskell-language-server, haskell-language-server-wrapper, ${
+        concatMapStringsSep ", " (x: concatStringsSep ", " (targets x))
+        supportedGhcVersions
+      }.
+
+      You can override the list supportedGhcVersions.
+    '';
+  };
+}
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..2b3fb76903e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/hyper-haskell/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenvNoCC, fetchFromGitHub, jshon, electron_10
+, runtimeShell, hyper-haskell-server, extra-packages ? [] }:
+
+let
+  binPath = lib.makeBinPath ([ hyper-haskell-server ] ++ extra-packages);
+  electron = electron_10;
+in stdenvNoCC.mkDerivation rec {
+  pname = "hyper-haskell";
+  version = "0.2.3.0";
+
+  src = fetchFromGitHub {
+    owner = "HeinrichApfelmus";
+    repo = "hyper-haskell";
+    rev = "v${version}";
+    sha256 = "1nmkry4wh6a2dy98fcs81mq2p7zhxp1k0f4m3szr6fm3j1zwrd43";
+  };
+
+  propagatedBuildInputs = extra-packages;
+
+  dontBuild = true;
+
+  installPhase = ''
+    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 app $out
+
+    # Desktop Launcher
+    cp resources/hyper-haskell.desktop $out/share/applications/hyper-haskell.desktop
+    cp resources/icons/icon.svg $out/share/icons/hicolor/scalable/apps/hyper-haskell.svg
+    cp resources/shared-mime-info.xml $out/share/mime/packages/hyper-haskell.xml
+
+    # install example worksheets with backend set to nix
+    for worksheet in "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 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..b8e5aa281eaa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/hyper-haskell/server.nix
@@ -0,0 +1,22 @@
+{ stdenv, ghcWithPackages, makeWrapper, packages }:
+
+let
+hyperHaskellEnv = ghcWithPackages (self: [ self.hyper-haskell-server ] ++ packages self);
+in stdenv.mkDerivation {
+  pname = "hyper-haskell-server-with-packages";
+  version = 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..4a8482314108
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/ihaskell/wrapper.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, writeScriptBin, makeWrapper, buildEnv, haskell, ghcWithPackages, jupyter, packages }:
+let
+  ihaskellEnv = ghcWithPackages (self: [
+    self.ihaskell
+    self.ihaskell-blaze
+    self.ihaskell-diagrams
+  ] ++ packages self);
+  ihaskellSh = writeScriptBin "ihaskell-notebook" ''
+    #! ${stdenv.shell}
+    export GHC_PACKAGE_PATH="$(echo ${ihaskellEnv}/lib/*/package.conf.d| tr ' ' ':'):$GHC_PACKAGE_PATH"
+    export PATH="${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..0b0a9778c361
--- /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 (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}'
+  '';
+}) haskellPackages.lambdabot
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/vaultenv/default.nix b/nixpkgs/pkgs/development/tools/haskell/vaultenv/default.nix
new file mode 100644
index 000000000000..4f51c8238ce0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/haskell/vaultenv/default.nix
@@ -0,0 +1,99 @@
+{ 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
+, lib
+, text
+, unix
+, unordered-containers
+, utf8-string
+, fetchFromGitHub
+, dotenv
+}:
+mkDerivation rec {
+  pname = "vaultenv";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "channable";
+    repo = "vaultenv";
+    rev = "v${version}";
+    sha256 = "sha256-sH4iaKQXgwI/WISXzMR7xqh9Dyx61U/gjYn7exgUetI=";
+  };
+
+  buildTools = [ hpack ];
+
+  prePatch = ''
+    substituteInPlace package.yaml \
+        --replace -Werror ""
+  '';
+
+  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
+    dotenv
+  ];
+  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 = lib.licenses.bsd3;
+  maintainers = with lib.maintainers; [ lnl7 manveru ];
+}
diff --git a/nixpkgs/pkgs/development/tools/hcloud/default.nix b/nixpkgs/pkgs/development/tools/hcloud/default.nix
new file mode 100644
index 000000000000..0e9474e4f390
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hcloud/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "hcloud";
+  version = "1.29.0";
+
+  src = fetchFromGitHub {
+    owner = "hetznercloud";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-B5L4vK5JkcYHqdyxAsP+tBcA6PtM2Gd4JwtW5nMuIXQ=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  vendorSha256 = "sha256-3YU6vAIzTzkEwyMPH4QSUuQ1PQlrWnfRRCA1fHMny48=";
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X github.com/hetznercloud/cli/cli.Version=${version}" ];
+
+  postInstall = ''
+    for shell in bash zsh; do
+      $out/bin/hcloud completion $shell > hcloud.$shell
+      installShellCompletion hcloud.$shell
+    done
+  '';
+
+  meta = {
+    description = "A command-line interface for Hetzner Cloud, a provider for cloud virtual private servers";
+    homepage = "https://github.com/hetznercloud/cli";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.zauberpony ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/heroku/default.nix b/nixpkgs/pkgs/development/tools/heroku/default.nix
new file mode 100644
index 000000000000..bf212008789a
--- /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.59.2";
+
+  src = fetchurl {
+    url = "https://cli-assets.heroku.com/heroku-v${version}/heroku-v${version}.tar.xz";
+    sha256 = "dbb69d4b5df99ff47ed0f6f1f58d968b3b144b13deee1b33c82fef7ef4006903";
+  };
+
+  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://devcenter.heroku.com/articles/heroku-cli";
+    description = "Everything you need to get started using Heroku";
+    maintainers = with lib.maintainers; [ aflatter mirdhyn marsam ];
+    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..0b4e474515ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hexio/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, pcsclite, pth, python2 }:
+
+stdenv.mkDerivation rec {
+  pname = "hexio";
+  version = "1.0-RC1";
+
+  src = fetchFromGitHub {
+    sha256 = "08jxkdi0gjsi8s793f9kdlad0a58a0xpsaayrsnpn9bpmm5cgihq";
+    rev = "version-${version}";
+    owner = "vanrein";
+    repo = "hexio";
+  };
+
+  strictDeps = true;
+
+  buildInputs = [ pcsclite pth python2 ];
+
+  patchPhase = ''
+    substituteInPlace Makefile \
+      --replace '-I/usr/local/include/PCSC/' '-I${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 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/hjson-go/default.nix b/nixpkgs/pkgs/development/tools/hjson-go/default.nix
new file mode 100644
index 000000000000..ce6da30d3b58
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hjson-go/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "hjson-go";
+  version = "3.1.1";
+
+  src = fetchFromGitHub {
+    owner = "hjson";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-yU1VkxwQ12CjzITR9X6LLaOfiteN+807rfB/tWcRR1c=";
+  };
+
+  goPackagePath = "github.com/hjson/hjson-go";
+
+  meta = with lib;
+    src.meta // {
+      description = "Utility to convert JSON to and from HJSON";
+      maintainers = with maintainers; [ ehmry ];
+      license = licenses.mit;
+    };
+}
diff --git a/nixpkgs/pkgs/development/tools/hobbes/default.nix b/nixpkgs/pkgs/development/tools/hobbes/default.nix
new file mode 100644
index 000000000000..1dd28af3bf4c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hobbes/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, cmake, llvm_12, ncurses, readline, zlib, libxml2 }:
+
+stdenv.mkDerivation {
+  pname = "hobbes";
+  version = "unstable-2021-04-28";
+
+  src = fetchFromGitHub {
+    owner = "morgan-stanley";
+    repo = "hobbes";
+    rev = "737c7ca63516f6b3dca0e659c3de75d4325472d6";
+    sha256 = "0fjsmz1sbrp6464mrb9ha7p615w2l2pdldsc2ayvcrvxfyi1r4gj";
+  };
+
+  # TODO: re-enable Python tests once they work on Python 3
+  # currently failing with "I don't know how to decode the primitive type: b'bool'"
+  postPatch = ''
+    rm test/Python.C
+  '';
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    llvm_12
+    ncurses
+    readline
+    zlib
+    libxml2
+  ];
+
+  doCheck = true;
+  checkTarget = "test";
+
+  meta = with lib; {
+    description = "A language and an embedded JIT compiler";
+    longDescription = ''
+      Hobbes is a a language, embedded compiler, and runtime for efficient
+      dynamic expression evaluation, data storage and analysis.
+    '';
+    homepage = "https://github.com/morganstanley/hobbes";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kthielen thmzlt ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/hors/default.nix b/nixpkgs/pkgs/development/tools/hors/default.nix
new file mode 100644
index 000000000000..579a2a27922f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hors/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hors";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "windsoilder";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1q17i8zg7dwd8al42wfnkn891dy5hdhw4325plnihkarr50avbr0";
+  };
+
+  cargoSha256 = "sha256-1PB/JvgfC6qABI+cIePqtsSlZXPqMGQIay9SCXJkV9o=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  # requires network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Instant coding answers via the command line";
+    homepage = "https://github.com/windsoilder/hors";
+    changelog = "https://github.com/WindSoilder/hors/blob/v${version}/CHANGELOG.md";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/hostess/default.nix b/nixpkgs/pkgs/development/tools/hostess/default.nix
new file mode 100644
index 000000000000..47eab1abd8ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hostess/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "hostess";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "cbednarski";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1izszf60nsa6pyxx3kd8qdrz3h47ylm17r9hzh9wk37f61pmm42j";
+  };
+
+  subPackages = [ "." ];
+
+  vendorSha256 = "0sjjj9z1dhilhpc8pq4154czrb79z9cm044jvn75kxcjv6v5l2m5";
+
+  meta = with lib; {
+    description = "An idempotent command-line utility for managing your /etc/hosts* file.";
+    license = licenses.mit;
+    maintainers = with maintainers; [ edlimerkaj ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/hover/default.nix b/nixpkgs/pkgs/development/tools/hover/default.nix
new file mode 100644
index 000000000000..388525db6de5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hover/default.nix
@@ -0,0 +1,101 @@
+{ lib
+, buildGoModule
+, buildFHSUserEnv
+, binutils
+, dejavu_fonts
+, pkg-config
+, fetchFromGitHub
+, roboto
+, writeScript
+, xorg
+, libglvnd
+, addOpenGLRunpath
+, makeWrapper
+, gcc
+, go
+, flutter
+}:
+
+let
+  pname = "hover";
+  version = "0.47.0";
+
+  libs = with xorg; [
+    libX11.dev
+    libXcursor.dev
+    libXext.dev
+    libXi.dev
+    libXinerama.dev
+    libXrandr.dev
+    libXrender.dev
+    libXfixes.dev
+    libXxf86vm
+    libglvnd.dev
+    xorgproto
+  ];
+  hover = buildGoModule rec {
+    inherit pname version;
+
+    meta = with lib; {
+      description = "A build tool to run Flutter applications on desktop";
+      homepage = "https://github.com/go-flutter-desktop/hover";
+      license = licenses.bsd3;
+      platforms = platforms.linux;
+      maintainers = with maintainers; [ ericdallo flexagoon ];
+    };
+
+    subPackages = [ "." ];
+
+    vendorSha256 = "sha256-GDoX5d2aDfaAx9JsKuS4r8137t3swT6rgcCghmaThSM=";
+
+    src = fetchFromGitHub {
+      rev = "v${version}";
+      owner = "go-flutter-desktop";
+      repo = pname;
+      sha256 = "sha256-ch59Wx4g72u7x99807ppURI4I+5aJ/W8Zr35q8X68v4=";
+    };
+
+    nativeBuildInputs = [ addOpenGLRunpath makeWrapper ];
+
+    buildInputs = libs;
+
+    checkRun = false;
+
+    patches = [
+      ./fix-assets-path.patch
+    ];
+
+    postPatch = ''
+      sed -i 's|@assetsFolder@|'"''${out}/share/assets"'|g' internal/fileutils/assets.go
+    '';
+
+    postInstall = ''
+      mkdir -p $out/share
+      cp -r assets $out/share/assets
+      chmod -R a+rx $out/share/assets
+
+      wrapProgram "$out/bin/hover" \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath libs}
+    '';
+
+    postFixup = ''
+      addOpenGLRunpath $out/bin/hover
+    '';
+  };
+
+in
+buildFHSUserEnv rec {
+  name = pname;
+  targetPkgs = pkgs: [
+    binutils
+    dejavu_fonts
+    flutter
+    gcc
+    go
+    hover
+    pkg-config
+    roboto
+  ] ++ libs;
+
+  runScript = "hover";
+}
diff --git a/nixpkgs/pkgs/development/tools/hover/fix-assets-path.patch b/nixpkgs/pkgs/development/tools/hover/fix-assets-path.patch
new file mode 100644
index 000000000000..00b1900bf776
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/hover/fix-assets-path.patch
@@ -0,0 +1,78 @@
+diff --git a/internal/fileutils/assets.go b/internal/fileutils/assets.go
+index 83eacd9..0b80e51 100644
+--- a/internal/fileutils/assets.go
++++ b/internal/fileutils/assets.go
+@@ -1,28 +1,7 @@
+ //go:generate rice embed
+ package fileutils
+ 
+-import (
+-	"os"
+-	"sync"
+-
+-	rice "github.com/GeertJohan/go.rice"
+-	"github.com/go-flutter-desktop/hover/internal/log"
+-)
+-
+-var (
+-	assetsBox     *rice.Box
+-	assetsBoxOnce sync.Once
+-)
+-
+ // AssetsBox hover's assets box
+-func AssetsBox() *rice.Box {
+-	assetsBoxOnce.Do(func() {
+-		var err error
+-		assetsBox, err = rice.FindBox("../../assets")
+-		if err != nil {
+-			log.Errorf("Failed to find hover assets: %v", err)
+-			os.Exit(1)
+-		}
+-	})
+-	return assetsBox
++func AssetsBox() string {
++	return "@assetsFolder@"
+ }
+diff --git a/internal/fileutils/file.go b/internal/fileutils/file.go
+index cb75563..3822e80 100644
+--- a/internal/fileutils/file.go
++++ b/internal/fileutils/file.go
+@@ -11,8 +11,6 @@ import (
+ 	"strings"
+ 	"text/template"
+ 
+-	rice "github.com/GeertJohan/go.rice"
+-
+ 	"github.com/go-flutter-desktop/hover/internal/log"
+ )
+ 
+@@ -215,24 +213,24 @@ func ExecuteTemplateFromFile(boxed, to string, templateData interface{}) {
+ }
+ 
+ // ExecuteTemplateFromAssetsBox create file from a template asset
+-func ExecuteTemplateFromAssetsBox(boxed, to string, assetsBox *rice.Box, templateData interface{}) {
+-	templateString, err := assetsBox.String(boxed)
++func ExecuteTemplateFromAssetsBox(boxed, to string, assetsBox string, templateData interface{}) {
++	templateString, err := ioutil.ReadFile(assetsBox + "/" + boxed)
+ 	if err != nil {
+ 		log.Errorf("Failed to find template file: %v\n", err)
+ 		os.Exit(1)
+ 	}
+-	executeTemplateFromString(templateString, to, templateData)
++	executeTemplateFromString(string(templateString), to, templateData)
+ }
+ 
+ // CopyAsset copies a file from asset
+-func CopyAsset(boxed, to string, assetsBox *rice.Box) {
++func CopyAsset(boxed string, to string, assetsBox string) {
+ 	file, err := os.Create(to)
+ 	if err != nil {
+ 		log.Errorf("Failed to create %s: %v", to, err)
+ 		os.Exit(1)
+ 	}
+ 	defer file.Close()
+-	boxedFile, err := assetsBox.Open(boxed)
++	boxedFile, err := os.OpenFile(assetsBox + "/" + boxed, os.O_RDONLY, 0666)
+ 	if err != nil {
+ 		log.Errorf("Failed to find boxed file %s: %v", boxed, err)
+ 		os.Exit(1)
diff --git a/nixpkgs/pkgs/development/tools/htmlq/default.nix b/nixpkgs/pkgs/development/tools/htmlq/default.nix
new file mode 100644
index 000000000000..1adcaf954d04
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/htmlq/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "htmlq";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "mgdm";
+    repo = "htmlq";
+    rev = "v${version}";
+    sha256 = "sha256-kZtK2QuefzfxxuE1NjXphR7otr+RYfMif/RSpR6TxY0=";
+  };
+
+  cargoSha256 = "sha256-r9EnQQPGpPIcNYb1eqGrMnRdh0snIa5iVsTYTI+YErY=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Like jq, but for HTML";
+    homepage = "https://github.com/mgdm/htmlq";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben nerdypepper ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/htmltest/default.nix b/nixpkgs/pkgs/development/tools/htmltest/default.nix
new file mode 100644
index 000000000000..06e92e3639f9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/htmltest/default.nix
@@ -0,0 +1,38 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "htmltest";
+  version = "0.15.0";
+
+  src = fetchFromGitHub {
+    owner = "wjdp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-lj+bR27huswHemF8M+G69PblqnQQUWsg4jtLfz89yVY=";
+  };
+
+  vendorSha256 = "0zx3ii9crick647kslzwg4d39li6jds938f9j9dp287rhrlzjfbm";
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X main.version=${version}"
+  ];
+
+  # tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool to test generated HTML output";
+    longDescription = ''
+      htmltest runs your HTML output through a series of checks to ensure all your
+      links, images, scripts references work, your alt tags are filled in, etc.
+    '';
+    homepage = "https://github.com/wjdp/htmltest";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
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..a1b9729ccb4a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/iaca/2.1.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, makeWrapper, requireFile, gcc, unzip }:
+with lib;
+
+# v2.1: last version with NHM/WSM arch support
+stdenv.mkDerivation rec {
+  pname = "iaca";
+  version = "2.1";
+  src = requireFile {
+    name = "iaca-version-${version}-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..4da6851af5af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/iaca/3.0.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, requireFile, unzip }:
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "iaca";
+  version = "3.0";
+  src = requireFile {
+    name = "iaca-version-v${version}-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/icr/default.nix b/nixpkgs/pkgs/development/tools/icr/default.nix
new file mode 100644
index 000000000000..095055cbedce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/icr/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, fetchFromGitHub
+, crystal
+, shards
+, makeWrapper
+, pkg-config
+, which
+, openssl
+, readline
+, libyaml
+, zlib
+}:
+
+crystal.buildCrystalPackage rec {
+  pname = "icr";
+  version = "unstable-2021-03-14";
+
+  src = fetchFromGitHub {
+    owner = "crystal-community";
+    repo = "icr";
+    rev = "b6b335f40aff4c2c07d21250949935e8259f7d1b";
+    sha256 = "sha256-Qoy37lCdHFnMAuuqyB9uT15/RLllksFyApYAGy+RmDs=";
+  };
+
+  shardsFile = ./shards.nix;
+
+  buildInputs = [ libyaml openssl readline zlib ];
+
+  nativeBuildInputs = [ makeWrapper pkg-config which ];
+
+  # tests are failing due to our sandbox
+  doCheck = false;
+
+  postFixup = ''
+    wrapProgram $out/bin/icr \
+      --prefix PATH : ${lib.makeBinPath [ crystal shards makeWrapper which ]}
+  '';
+
+  meta = with 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/icr/shards.nix b/nixpkgs/pkgs/development/tools/icr/shards.nix
new file mode 100644
index 000000000000..1dddd5a42c39
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/icr/shards.nix
@@ -0,0 +1,8 @@
+{
+  readline = {
+    owner = "crystal-lang";
+    repo = "crystal-readline";
+    rev = "0fb7d186da8e1b157998d98d1c96e99699b791eb";
+    sha256 = "1rk27vw3ssldgnfgprwvz2gag02v4g6d6yg56b3sk9w3fn8jyyi8";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/iferr/default.nix b/nixpkgs/pkgs/development/tools/iferr/default.nix
new file mode 100644
index 000000000000..0e8f797f77ce
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/iferr/default.nix
@@ -0,0 +1,28 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  pname = "iferr-unstable";
+  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/ijq/default.nix b/nixpkgs/pkgs/development/tools/ijq/default.nix
new file mode 100644
index 000000000000..caac892bf122
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ijq/default.nix
@@ -0,0 +1,36 @@
+{ buildGoModule, fetchFromSourcehut, lib, jq, installShellFiles, makeWrapper, scdoc }:
+
+buildGoModule rec {
+  pname = "ijq";
+  version = "0.3.6";
+
+  src = fetchFromSourcehut {
+    owner = "~gpanders";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-mPO3P+NGFIoHuvMFwj87S8H8LQx7QpfPy2zi91la2C0=";
+  };
+
+  vendorSha256 = "sha256-HbrmfZ/P5bUF7Qio5L1sb/HAYk/tL2SOmxHCXvSw72I=";
+
+  nativeBuildInputs = [ installShellFiles makeWrapper scdoc ];
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  postBuild = ''
+    scdoc < ijq.1.scd > ijq.1
+    installManPage ijq.1
+  '';
+
+  postInstall = ''
+    wrapProgram "$out/bin/ijq" \
+      --prefix PATH : "${lib.makeBinPath [ jq ]}"
+  '';
+
+  meta = with lib; {
+    description = "Interactive wrapper for jq";
+    homepage = "https://git.sr.ht/~gpanders/ijq";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ justinas SuperSandro2000 ];
+  };
+}
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..ad729923d67a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/imatix_gsl/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, pcre } :
+
+stdenv.mkDerivation {
+  pname = "imatix_gsl";
+  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 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/img/default.nix b/nixpkgs/pkgs/development/tools/img/default.nix
new file mode 100644
index 000000000000..17daf49ff230
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/img/default.nix
@@ -0,0 +1,55 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, makeWrapper
+, runc
+, wrapperDir ? "/run/wrappers/bin" # Default for NixOS, other systems might need customization.
+}:
+
+buildGoModule rec {
+  pname = "img";
+  version = "0.5.11";
+
+  src = fetchFromGitHub {
+    owner = "genuinetools";
+    repo = "img";
+    rev = "v${version}";
+    sha256 = "0r5hihzp2679ki9hr3p0f085rafy2hc8kpkdhnd4m5k4iibqib08";
+  };
+
+  vendorSha256 = null;
+
+  postPatch = ''
+    V={newgidmap,newgidmap} \
+      substituteInPlace ./internal/unshare/unshare.c \
+        --replace "/usr/bin/$V" "${wrapperDir}/$V"
+  '';
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  tags = [
+    "seccomp"
+    "noembed" # disables embedded `runc`
+  ];
+
+  ldflags = [
+    "-X github.com/genuinetools/img/version.VERSION=v${version}"
+    "-s -w"
+  ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/img" --prefix PATH : ${lib.makeBinPath [ runc ]}
+  '';
+
+  # Tests fail as: internal/binutils/install.go:57:15: undefined: Asset
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Standalone, daemon-less, unprivileged Dockerfile and OCI compatible container image builder. ";
+    license = licenses.mit;
+    homepage = "https://github.com/genuinetools/img";
+    maintainers = with maintainers; [ bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/impl/default.nix b/nixpkgs/pkgs/development/tools/impl/default.nix
new file mode 100644
index 000000000000..15c1361abd22
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/impl/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "impl";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "josharian";
+    repo = "impl";
+    rev = "v${version}";
+    sha256 = "0l21fkcgiaaf6ka91dmz8hx0l3nbp0kqi8p25kij1s5zb796z0dy";
+  };
+
+  vendorSha256 = "0xkalwy02w62px01jdwwr3vwwsh50f22dsxf8lrrwmw6k0rq57zv";
+
+  # go: cannot find GOROOT directory: go
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Generate 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/ineffassign/default.nix b/nixpkgs/pkgs/development/tools/ineffassign/default.nix
new file mode 100644
index 000000000000..215809577523
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ineffassign/default.nix
@@ -0,0 +1,29 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  pname = "ineffassign-unstable";
+  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/inferno/default.nix b/nixpkgs/pkgs/development/tools/inferno/default.nix
new file mode 100644
index 000000000000..9507c2fb4acd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/inferno/default.nix
@@ -0,0 +1,31 @@
+{ fetchCrate, lib, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "inferno";
+  version = "0.10.7";
+
+  # github version doesn't have a Cargo.lock
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "0bzrwa87j56sv03frl0lp6izfxsldn0692g2vpwfndhrsm0gy8z9";
+  };
+
+  cargoSha256 = "1dvk1y1afqlmmqqdm91lg2wvny5q47yfjvmjzaryk2ic1s6g17b1";
+
+  # these tests depend on a patched version of flamegraph which is included in
+  # the github repository as a submodule, but absent from the crates version
+  checkFlags = [
+    "--skip=collapse::dtrace::tests::test_collapse_multi_dtrace"
+    "--skip=collapse::dtrace::tests::test_collapse_multi_dtrace_simple"
+    "--skip=collapse::perf::tests::test_collapse_multi_perf"
+    "--skip=collapse::perf::tests::test_collapse_multi_perf_simple"
+  ];
+
+  meta = with lib; {
+    description = "A port of parts of the flamegraph toolkit to Rust";
+    homepage = "https://github.com/jonhoo/inferno";
+    changelog = "https://github.com/jonhoo/inferno/blob/v${version}/CHANGELOG.md";
+    license = licenses.cddl;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/interfacer/default.nix b/nixpkgs/pkgs/development/tools/interfacer/default.nix
new file mode 100644
index 000000000000..4358ee244896
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/interfacer/default.nix
@@ -0,0 +1,31 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  pname = "interfacer-unstable";
+  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..192a33ad7ca7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/irony-server/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, cmake, llvmPackages, llvm, irony }:
+
+stdenv.mkDerivation {
+  pname = "irony-server";
+  inherit (irony) src version;
+
+  nativeBuildInputs = [ cmake llvm ];
+  buildInputs = [ llvmPackages.libclang ];
+
+  dontUseCmakeBuildDir = true;
+
+  cmakeDir = "server";
+
+  meta = with lib; {
+    description = "The server part of irony";
+    homepage = "https://melpa.org/#/irony";
+    maintainers = [ maintainers.deepfire ];
+    platforms = platforms.unix;
+    license = 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..0676cea4a041
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/cfr/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, makeWrapper, fetchurl, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "cfr";
+  version = "0.152";
+
+  src = fetchurl {
+    url = "http://www.benf.org/other/cfr/cfr_${version}.jar";
+    sha256 = "sha256-9obo897Td9e8h9IWqQ6elRLfQVbnWwbGVaFmSK6HZbI=";
+  };
+
+  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 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/dex2jar/default.nix b/nixpkgs/pkgs/development/tools/java/dex2jar/default.nix
new file mode 100644
index 000000000000..6ac1d0dbb1ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/dex2jar/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, lib
+, fetchurl
+, jre
+, makeWrapper
+, unzip
+}:
+stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+  pname = "dex2jar";
+  version  = "2.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${name}.zip";
+    sha256 = "1g3mrbyl8sdw1nhp17z23qbfzqpa0w2yxrywgphvd04jdr6yn1vr";
+  };
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+
+  postPatch = ''
+    rm *.bat
+    chmod +x *.sh
+  '';
+
+  installPhase = ''
+    f=$out/lib/dex2jar/
+
+    mkdir -p $f $out/bin
+
+    mv * $f
+    for i in $f/*.sh; do
+      n=$(basename ''${i%.sh})
+      makeWrapper $i $out/bin/$n --prefix PATH : ${lib.makeBinPath [ jre ] }
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://sourceforge.net/projects/dex2jar/";
+    description = "Tools to work with android .dex and java .class files";
+    maintainers = with maintainers; [ makefu ];
+    license = licenses.asl20;
+    platforms = platforms.linux;
+  };
+}
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..c81df42edb11
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/fastjar/default.nix
@@ -0,0 +1,31 @@
+{ fetchurl, lib, stdenv, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "fastjar";
+  version = "0.98";
+
+  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 = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/java/java-language-server/default.nix b/nixpkgs/pkgs/development/tools/java/java-language-server/default.nix
new file mode 100644
index 000000000000..47054564f9b7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/java-language-server/default.nix
@@ -0,0 +1,96 @@
+{ lib, stdenv, fetchFromGitHub
+, jdk, maven
+, runtimeShell, makeWrapper
+}:
+
+let
+  platform =
+    if stdenv.isLinux then "linux"
+    else if stdenv.isDarwin then "mac"
+    else if stdenv.isWindows then "windows"
+    else throw "unsupported platform";
+in
+stdenv.mkDerivation rec {
+  pname = "java-language-server";
+  version = "0.2.38";
+
+  src = fetchFromGitHub {
+    owner = "georgewfraser";
+    repo = pname;
+    # commit hash is used as owner sometimes forgets to set tags. See https://github.com/georgewfraser/java-language-server/issues/104
+    rev = "1dfdc54d1f1e57646a0ec9c0b3f4a4f094bd9f17";
+    sha256 = "sha256-zkbl/SLg09XK2ZhJNzWEtvFCQBRQ62273M/2+4HV1Lk=";
+  };
+
+  fetchedMavenDeps = stdenv.mkDerivation {
+    name = "java-language-server-${version}-maven-deps";
+    inherit src;
+    buildInputs = [ maven ];
+
+    buildPhase = ''
+      runHook preBuild
+
+      mvn package -Dmaven.repo.local=$out -DskipTests
+
+      runHook postBuild
+    '';
+
+    installPhase = ''
+      runHook preInstall
+
+      find $out -type f \
+        -name \*.lastUpdated -or \
+        -name resolver-status.properties -or \
+        -name _remote.repositories \
+        -delete
+
+      runHook postInstall
+    '';
+
+    dontFixup = true;
+    dontConfigure = true;
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "sha256-YkcQKmm8oeEH7uyUzV/qGoe4LiI6o5wZ7o69qrO3oCA=";
+  };
+
+
+  nativeBuildInputs = [ maven jdk makeWrapper ];
+
+  dontConfigure = true;
+  buildPhase = ''
+    runHook preBuild
+
+    jlink \
+      ${lib.optionalString (!stdenv.isDarwin) "--module-path './jdks/${platform}/jdk-13/jmods'"} \
+      --add-modules java.base,java.compiler,java.logging,java.sql,java.xml,jdk.compiler,jdk.jdi,jdk.unsupported,jdk.zipfs \
+      --output dist/${platform} \
+      --no-header-files \
+      --no-man-pages \
+      --compress 2
+
+    mvn package --offline -Dmaven.repo.local=${fetchedMavenDeps} -DskipTests
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/java/java-language-server
+    cp -r dist/classpath dist/*${platform}* $out/share/java/java-language-server
+
+    # a link is not used as lang_server_${platform}.sh makes use of "dirname $0" to access other files
+    makeWrapper $out/share/java/java-language-server/lang_server_${platform}.sh $out/bin/java-language-server
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A Java language server based on v3.0 of the protocol and implemented using the Java compiler API";
+    homepage = "https://github.com/georgewfraser/java-language-server";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hqurve ];
+    platforms = platforms.all;
+  };
+}
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..c2d1a33a49d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/jhiccup/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "jhiccup";
+  version = "2.0.10";
+
+  src = fetchzip {
+    url    = "https://www.azul.com/files/jHiccup-${version}-dist.zip";
+    sha256 = "1hsvi8wjh615fnjf75h7b5afp04chqcgvini30vfcn3m9a5icbgy";
+  };
+
+  dontConfigure = true;
+  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     = lib.licenses.cc0;
+    platforms   = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/java/sawjap/default.nix b/nixpkgs/pkgs/development/tools/java/sawjap/default.nix
new file mode 100644
index 000000000000..b4c682bbd220
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/sawjap/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, ocamlPackages }:
+
+let inherit (ocamlPackages) ocaml findlib sawja; in
+
+stdenv.mkDerivation {
+
+  pname = "sawjap";
+
+  inherit (sawja) src version;
+
+  prePatch = "cd test";
+
+  buildInputs = [ ocaml findlib sawja ];
+
+  buildPhase = ''
+    runHook preBuild
+    mkdir -p $out/bin
+    ocamlfind opt -o $out/bin/sawjap -package sawja -linkpkg sawjap.ml
+    runHook postBuild
+  '';
+
+  dontInstall = true;
+
+  meta = sawja.meta // {
+    description = "Pretty-print .class files";
+  };
+
+}
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..ee72bc62efae
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/java/visualvm/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchzip, lib, makeWrapper, makeDesktopItem, jdk, gawk }:
+
+stdenv.mkDerivation rec {
+  version = "2.1.2";
+  pname = "visualvm";
+
+  src = fetchzip {
+    url = "https://github.com/visualvm/visualvm.src/releases/download/${version}/visualvm_${builtins.replaceStrings ["."] [""]  version}.zip";
+    sha256 = "sha256-khbXzdsC0PA10HEu/dIFQ87+QbKpctmTUTt/zEuxV6c=";
+  };
+
+  desktopItem = makeDesktopItem {
+      name = "visualvm";
+      exec = "visualvm";
+      comment = "Java Troubleshooting Tool";
+      desktopName = "VisualVM";
+      genericName = "Java Troubleshooting Tool";
+      categories = [ "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}" \
+
+    cp -r . $out
+  '';
+
+  meta = with 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.github.io";
+    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..9f6050001ccd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jazzy/Gemfile.lock
@@ -0,0 +1,109 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    CFPropertyList (3.0.2)
+    activesupport (4.2.11.3)
+      i18n (~> 0.7)
+      minitest (~> 5.1)
+      thread_safe (~> 0.3, >= 0.3.4)
+      tzinfo (~> 1.1)
+    algoliasearch (1.27.3)
+      httpclient (~> 2.8, >= 2.8.3)
+      json (>= 1.5.1)
+    atomos (0.1.3)
+    claide (1.0.3)
+    cocoapods (1.9.3)
+      activesupport (>= 4.0.2, < 5)
+      claide (>= 1.0.2, < 2.0)
+      cocoapods-core (= 1.9.3)
+      cocoapods-deintegrate (>= 1.0.3, < 2.0)
+      cocoapods-downloader (>= 1.2.2, < 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.4.0, < 2.0)
+      cocoapods-try (>= 1.1.0, < 2.0)
+      colored2 (~> 3.1)
+      escape (~> 0.0.4)
+      fourflusher (>= 2.3.0, < 3.0)
+      gh_inspector (~> 1.0)
+      molinillo (~> 0.6.6)
+      nap (~> 1.0)
+      ruby-macho (~> 1.4)
+      xcodeproj (>= 1.14.0, < 2.0)
+    cocoapods-core (1.9.3)
+      activesupport (>= 4.0.2, < 6)
+      algoliasearch (~> 1.0)
+      concurrent-ruby (~> 1.1)
+      fuzzy_match (~> 2.0.4)
+      nap (~> 1.0)
+      netrc (~> 0.11)
+      typhoeus (~> 1.0)
+    cocoapods-deintegrate (1.0.4)
+    cocoapods-downloader (1.4.0)
+    cocoapods-plugins (1.0.0)
+      nap
+    cocoapods-search (1.0.0)
+    cocoapods-stats (1.1.0)
+    cocoapods-trunk (1.5.0)
+      nap (>= 0.8, < 2.0)
+      netrc (~> 0.11)
+    cocoapods-try (1.2.0)
+    colored2 (3.1.2)
+    concurrent-ruby (1.1.6)
+    escape (0.0.4)
+    ethon (0.12.0)
+      ffi (>= 1.3.0)
+    ffi (1.13.1)
+    fourflusher (2.3.1)
+    fuzzy_match (2.0.4)
+    gh_inspector (1.1.3)
+    httpclient (2.8.3)
+    i18n (0.9.5)
+      concurrent-ruby (~> 1.0)
+    jazzy (0.13.5)
+      cocoapods (~> 1.5)
+      mustache (~> 1.1)
+      open4
+      redcarpet (~> 3.4)
+      rouge (>= 2.0.6, < 4.0)
+      sassc (~> 2.1)
+      sqlite3 (~> 1.3)
+      xcinvoke (~> 0.3.0)
+    json (2.3.1)
+    liferaft (0.0.6)
+    minitest (5.14.1)
+    molinillo (0.6.6)
+    mustache (1.1.1)
+    nanaimo (0.3.0)
+    nap (1.1.0)
+    netrc (0.11.0)
+    open4 (1.3.4)
+    redcarpet (3.5.0)
+    rouge (3.21.0)
+    ruby-macho (1.4.0)
+    sassc (2.4.0)
+      ffi (~> 1.9)
+    sqlite3 (1.4.2)
+    thread_safe (0.3.6)
+    typhoeus (1.4.0)
+      ethon (>= 0.9.0)
+    tzinfo (1.2.7)
+      thread_safe (~> 0.1)
+    xcinvoke (0.3.0)
+      liferaft (~> 0.0.6)
+    xcodeproj (1.17.1)
+      CFPropertyList (>= 2.3.3, < 4.0)
+      atomos (~> 0.1.3)
+      claide (>= 1.0.2, < 2.0)
+      colored2 (~> 3.1)
+      nanaimo (~> 0.3.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  jazzy
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/jazzy/default.nix b/nixpkgs/pkgs/development/tools/jazzy/default.nix
new file mode 100644
index 000000000000..a0561040704c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jazzy/default.nix
@@ -0,0 +1,21 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "jazzy";
+  gemdir = ./.;
+  exes = [ "jazzy" ];
+
+  passthru.updateScript = bundlerUpdateScript "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
+      nicknovitski
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jazzy/gemset.nix b/nixpkgs/pkgs/development/tools/jazzy/gemset.nix
new file mode 100644
index 000000000000..6e2b873d4fd3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jazzy/gemset.nix
@@ -0,0 +1,434 @@
+{
+  activesupport = {
+    dependencies = ["i18n" "minitest" "thread_safe" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wp36wi3r3dscmcr0q6sbz13hr5h911c24ar7zrmmcy7p32ial2i";
+      type = "gem";
+    };
+    version = "4.2.11.3";
+  };
+  algoliasearch = {
+    dependencies = ["httpclient" "json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z94dnx0rljsfa3k24i1nc0vf1nfk3bbk89nqc6n1ax25h4fs5sw";
+      type = "gem";
+    };
+    version = "1.27.3";
+  };
+  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 = "1825ll26p28swjiw8n3x2pnh5ygsmg83spf82fnzcjn2p87vc5lf";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  claide = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kasxsms24fgcdsq680nz99d5lazl9rmz1qkil2y5gbbssx89g0z";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  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 = "0zqj1878izp34cn7552q2djs3zd4a5ylyv0af3yxbz34z0qllk60";
+      type = "gem";
+    };
+    version = "1.9.3";
+  };
+  cocoapods-core = {
+    dependencies = ["activesupport" "algoliasearch" "concurrent-ruby" "fuzzy_match" "nap" "netrc" "typhoeus"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sn1561sdhq2bh35pmi9nhq1adjcgdkhxybd9pxcjs75zmqzpz13";
+      type = "gem";
+    };
+    version = "1.9.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 = "1j03hxvz3m82fwgx3jayw0y2iqm7zpacn88r6nfj2arkbjxmvjwz";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  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 = "12c6028bmdwrbqcb49mr5qj1p3vcijnjqbsbzywfx1isp44j9mv5";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  cocoapods-try = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1znyp625rql37ivb5rk9fk9564cmax8icxfr041ysivpdrn98nql";
+      type = "gem";
+    };
+    version = "1.2.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 = "094387x4yasb797mv07cs3g6f08y56virc2rjcpb1k79rzaj3nhl";
+      type = "gem";
+    };
+    version = "1.1.6";
+  };
+  escape = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sa1xkfc9jvkwyw1jbz3jhkq0ms1zrvswi6mmfiwcisg5fp497z4";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  ethon = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gggrgkcq839mamx7a8jbnp2h7x2ykfn34ixwskwb0lzx2ak17g9";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12lpwaw82bb0rm9f52v1498bpba8aj2l2q359mkwbxsswhpga5af";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  fourflusher = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1afabh3g3gwj0ad53fs62waks815xcckf7pkci76l6vrghffcg8v";
+      type = "gem";
+    };
+    version = "2.3.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";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.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" "sassc" "sqlite3" "xcinvoke"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ysx3zq069mi1w69z0dqck9ss9iv18w8a2f6j663vqq6kn1b69dm";
+      type = "gem";
+    };
+    version = "0.13.5";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "158fawfwmv2sq4whqqaksfykkiad2xxrrj0nmpnc6vnlzi1bp7iz";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  liferaft = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kasbbx84gzsxx8w8bgr6xjg43h9bvzzaqg7si8jirnja8yc27k3";
+      type = "gem";
+    };
+    version = "0.0.6";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09bz9nsznxgaf06cx3b5z71glgl0hdw469gqx3w7bqijgrb55p5g";
+      type = "gem";
+    };
+    version = "5.14.1";
+  };
+  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 = "1l0p4wx15mi3wnamfv92ipkia4nsx8qi132c6g51jfdma3fiz2ch";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  nanaimo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xi36h3f7nm8bc2k0b6svpda1lyank2gf872lxjbhw3h95hdrbma";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  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";
+  };
+  redcarpet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0skcyx1h8b5ms0rp2zm3ql6g322b8c1adnkwkqyv7z3kypb4bm7k";
+      type = "gem";
+    };
+    version = "3.5.0";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1agrrmj88k9jkk36ra1ml2c1jffpp595pkxmcla74ac9ia09vn3s";
+      type = "gem";
+    };
+    version = "3.21.0";
+  };
+  ruby-macho = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lhdjn91jkifsy2hzq2hgcm0pp8pbik87m58zmw1ifh6hkp9adjb";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  sassc = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gpqv48xhl8mb8qqhcifcp0pixn206a7imc07g48armklfqa4q2c";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  sqlite3 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lja01cp9xd5m6vmx99zwn4r7s97r1w5cb76gqd8xhbm1wxyzf78";
+      type = "gem";
+    };
+    version = "1.4.2";
+  };
+  thread_safe = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  typhoeus = {
+    dependencies = ["ethon"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m22yrkmbj81rzhlny81j427qdvz57yk5wbcf3km0nf3bl6qiygz";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1i3jh086w1kbdj3k5l60lc3nwbanmzdf8yjj3mlrx9b2gjjxhi9r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  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 = "0mv5rsbgwq4vzri31w2f1474arrsr5j69rdhklrci6jnjps8dmx9";
+      type = "gem";
+    };
+    version = "1.17.1";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jbake/default.nix b/nixpkgs/pkgs/development/tools/jbake/default.nix
new file mode 100644
index 000000000000..e14cfe874040
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jbake/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchzip, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  version = "2.6.5";
+  pname = "jbake";
+
+  src = fetchzip {
+    url = "https://dl.bintray.com/jbake/binary/${pname}-${version}-bin.zip";
+    sha256 = "0ripayv1vf4f4ylxr7h9kad2xhy3y98ca8s4p38z7dn8l47zg0qw";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ 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 lib; {
+    description = "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/jbang/default.nix b/nixpkgs/pkgs/development/tools/jbang/default.nix
new file mode 100644
index 000000000000..0bbd46b4294c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jbang/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchzip, jdk, makeWrapper, coreutils, curl }:
+
+stdenv.mkDerivation rec {
+  version = "0.82.1";
+  pname = "jbang";
+
+  src = fetchzip {
+    url = "https://github.com/jbangdev/jbang/releases/download/v${version}/${pname}-${version}.tar";
+    sha256 = "sha256-C2zsIJvna7iqcaCM4phJonbA9TALL89rACms5II9hhU=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    rm bin/jbang.{cmd,ps1}
+    rmdir tmp
+    cp -r . $out
+    wrapProgram $out/bin/jbang \
+      --set JAVA_HOME ${jdk} \
+      --set PATH ${lib.makeBinPath [ coreutils jdk curl ]}
+    runHook postInstall
+  '';
+
+  installCheckPhase = ''
+    $out/bin/jbang --version 2>&1 | grep -q "${version}"
+  '';
+
+  meta = with lib; {
+    description = "Run java as scripts anywhere";
+    longDescription = ''
+      jbang uses the java language to build scripts similar to groovy scripts. Dependencies are automatically
+      downloaded and the java code runs.
+    '';
+    homepage = "https://https://www.jbang.dev/";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ moaxcp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jd-diff-patch/default.nix b/nixpkgs/pkgs/development/tools/jd-diff-patch/default.nix
new file mode 100644
index 000000000000..96fd79d62fc6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jd-diff-patch/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "jd-diff-patch";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner  = "josephburnett";
+    repo   = "jd";
+    rev    = "v${version}";
+    sha256 = "sha256-nYV72EgYgXWyGp2s09BlaRmOy6aSMtmrTvWCxk9znp0=";
+  };
+
+  # not including web ui
+  excludedPackages = [ "gae" "pack" ];
+
+  vendorSha256 = "sha256-uoMOkCmJY417zxkTsXHGy+BZ/BH29nH4MhFaIKofh4k=";
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Commandline utility and Go library for diffing and patching JSON values";
+    homepage = "https://github.com/josephburnett/jd";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bryanasdev000 blaggacao ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jd/default.nix b/nixpkgs/pkgs/development/tools/jd/default.nix
new file mode 100644
index 000000000000..96d2807b9ab9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jd/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "jd";
+  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 lib; {
+    description = "Interactive JSON Editor";
+    license = licenses.mit;
+    maintainers = [ maintainers.np ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jet/default.nix b/nixpkgs/pkgs/development/tools/jet/default.nix
new file mode 100644
index 000000000000..6e140620adc9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jet/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGraalvmNativeImage, fetchurl }:
+
+buildGraalvmNativeImage rec {
+  pname = "jet";
+  version = "0.1.0";
+
+  src = fetchurl {
+    url = "https://github.com/borkdude/${pname}/releases/download/v${version}/${pname}-${version}-standalone.jar";
+    sha256 = "sha256-RCEIIZfPmOLW3akjEgaEas4xOtYxL6lQsxDv2szB8K4";
+  };
+
+  reflectionJson = fetchurl {
+    url = "https://raw.githubusercontent.com/borkdude/${pname}/v${version}/reflection.json";
+    sha256 = "sha256-mOUiKEM5tYhtpBpm7KtslyPYFsJ+Wr+4ul6Zi4aS09Q=";
+  };
+
+  extraNativeImageBuildArgs = [
+    "-H:+ReportExceptionStackTraces"
+    "-J-Dclojure.spec.skip-macros=true"
+    "-J-Dclojure.compiler.direct-linking=true"
+    "-H:IncludeResources=JET_VERSION"
+    "-H:ReflectionConfigurationFiles=${reflectionJson}"
+    "--initialize-at-build-time"
+    "-H:Log=registerResource:"
+    "--no-fallback"
+    "--no-server"
+  ];
+
+  meta = with lib; {
+    description = "CLI to transform between JSON, EDN and Transit, powered with a minimal query language";
+    homepage = "https://github.com/borkdude/jet";
+    license = licenses.epl10;
+    maintainers = with maintainers; [ ericdallo ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jfmt/default.nix b/nixpkgs/pkgs/development/tools/jfmt/default.nix
new file mode 100644
index 000000000000..cf1292b4b121
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jfmt/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jfmt";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "scruffystuffs";
+    repo = "${pname}.rs";
+    rev = version;
+    sha256 = "07qb0sjwww6d2n7fw8w4razq1mkn4psrs9wqi1ccndrya1y39d8b";
+  };
+
+  cargoSha256 = "19kg2n53y9nazwpp8gcvdprxry2llf2k7g4q4zalyxkhpf7k6irb";
+
+  meta = with lib; {
+    description = "CLI utility to format json files";
+    homepage = "https://github.com/scruffystuffs/jfmt.rs";
+    license = licenses.mit;
+    maintainers = [ maintainers.psibi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jid/default.nix b/nixpkgs/pkgs/development/tools/jid/default.nix
new file mode 100644
index 000000000000..b48de54dd22e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jid/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "jid";
+  version = "0.7.6";
+
+  goPackagePath = "github.com/simeji/jid";
+
+  src = fetchFromGitHub {
+    owner = "simeji";
+    repo = "jid";
+    rev = "v${version}";
+    sha256 = "15fgi7cpq5bg2lnpr7rip359xwj2kvlj6j2qzi837c26adnw973x";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = {
+    description = "A command-line tool to incrementally drill down JSON";
+    homepage = "https://github.com/simeji/jid";
+    license = lib.licenses.mit;
+    maintainers = with 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..6e2d5514a838
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jid/deps.nix
@@ -0,0 +1,75 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+  {
+    goPackagePath = "github.com/bitly/go-simplejson";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bitly/go-simplejson";
+      rev = "v0.5.0";
+      sha256 = "0n9f9dz1jn1jx86d48569nznpjn9fmq3knn7r65xpy7jhih284jj";
+    };
+  }
+  {
+    goPackagePath = "github.com/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev = "v1.7.0";
+      sha256 = "0v8msvg38r8d1iiq2i5r4xyfx0invhc941kjrsg5gzwvagv55inv";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev = "v0.0.9";
+      sha256 = "1nwjmsppsjicr7anq8na6md7b1z84l9ppnlr045hhxjvbkqwalvx";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev = "v0.0.4";
+      sha256 = "0zs92j2cqaw9j8qx1sdxpv3ap0rgbs0vrvi72m40mg8aa36gd39w";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-runewidth";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-runewidth";
+      rev = "v0.0.4";
+      sha256 = "00b3ssm7wiqln3k54z2wcnxr3k3c7m1ybyhb9h8ixzbzspld0qzs";
+    };
+  }
+  {
+    goPackagePath = "github.com/nsf/termbox-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nsf/termbox-go";
+      rev = "60ab7e3d12ed";
+      sha256 = "040064fh7wzdmv8flw6svi007hiqs1cjk1a3k3gpg7gii3npifsl";
+    };
+  }
+  {
+    goPackagePath = "github.com/nwidger/jsoncolor";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nwidger/jsoncolor";
+      rev = "75a6de4340e5";
+      sha256 = "0aiv42xijrqgrxfx6pfyrndpwqv8i1qwsk190jdczyjxlnki2nki";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev = "v0.8.0";
+      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+    };
+  }
+]
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..cf15a61477e4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jira_cli/default.nix
@@ -0,0 +1,32 @@
+{ lib, libffi, openssl, python3Packages }:
+let
+  inherit (python3Packages) fetchPypi buildPythonApplication vcrpy mock hiro;
+in
+  buildPythonApplication rec {
+    pname = "jira-cli";
+    version = "3.0";
+    src = fetchPypi {
+      inherit pname version;
+      sha256 = "86f7d4ad7292c9a27bbc265d09e7bcd00ef8159f20172998d85f25aad53b0df6";
+    };
+
+    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 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..15347432f70e
--- /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, lib
+, 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 = lib.licenses.bsd3;
+  description = "Functional sed for JSON";
+  maintainers = with lib.maintainers; [ fgaz ];
+  homepage = "https://github.com/chrisdone/jl";
+}
diff --git a/nixpkgs/pkgs/development/tools/jless/default.nix b/nixpkgs/pkgs/development/tools/jless/default.nix
new file mode 100644
index 000000000000..558c9e019e19
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jless/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, rustPlatform, stdenv, python3, AppKit, libxcb }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jless";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "PaulJuliusMartinez";
+    repo = "jless";
+    rev = "v${version}";
+    sha256 = "sha256-NB/s29M46mVhTsJWFYnBgJjSjUVbfdmuz69VdpVuR7c=";
+  };
+
+  cargoSha256 = "sha256-cPj9cTRhWK/YU8Cae63p4Vm5ohB1IfGL5fu7yyFGSXA=";
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ python3 ];
+
+  buildInputs = [ ]
+    ++ lib.optionals stdenv.isDarwin [ AppKit ]
+    ++ lib.optionals stdenv.isLinux [ libxcb ];
+
+  meta = with lib; {
+    description = "A command-line pager for JSON data";
+    homepage = "https://jless.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jfchevrette zowoq ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jmespath/default.nix b/nixpkgs/pkgs/development/tools/jmespath/default.nix
new file mode 100644
index 000000000000..5abbf71e7f41
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jmespath/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "jmespath";
+  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 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..8ec8deaefe00
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jo/default.nix
@@ -0,0 +1,25 @@
+{lib, stdenv, fetchFromGitHub, autoreconfHook, pandoc, pkg-config}:
+
+stdenv.mkDerivation rec {
+  pname = "jo";
+  version = "1.6";
+
+  src = fetchFromGitHub {
+    owner  = "jpmens";
+    repo = "jo";
+    rev = version;
+    sha256 ="sha256-aATCeJV0x+XHOQbwulutxivPzGVQ0mJj90vA+6IM124=";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ autoreconfHook pandoc pkg-config ];
+
+  meta = with 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..f1f5b37c10dc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jp/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "jp";
+  version = "0.1.3";
+  rev = version;
+
+  goPackagePath = "github.com/jmespath/jp";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "jmespath";
+    repo = "jp";
+    sha256 = "0fdbnihbd0kq56am3bmh2zrfk4fqjslcbm48malbgmpqw3a5nvpi";
+  };
+  meta = with 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/jpexs/default.nix b/nixpkgs/pkgs/development/tools/jpexs/default.nix
new file mode 100644
index 000000000000..8c0d20d328d2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jpexs/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchzip, makeWrapper, makeDesktopItem, jdk8 }:
+
+stdenv.mkDerivation rec {
+  pname = "jpexs";
+  version = "15.0.0";
+
+  src = fetchzip {
+    url = "${meta.homepage}/releases/download/version${version}/ffdec_${version}.zip";
+    sha256 = "1w8sh0dzln6mxcbibyw6r9f9c8g0cbwxq4qbm5kawq00yydvwfza";
+    stripRoot = false;
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mkdir -p $out/share/{ffdec,icons/hicolor/512x512/apps}
+
+    cp ffdec.jar $out/share/ffdec
+    cp -r lib $out/share/ffdec
+    cp icon.png $out/share/icons/hicolor/512x512/apps/ffdec.png
+    cp -r ${desktopItem}/share/applications $out/share
+
+    makeWrapper ${jdk8}/bin/java $out/bin/ffdec \
+      --add-flags "-jar $out/share/ffdec/ffdec.jar"
+  '';
+
+  desktopItem = makeDesktopItem rec {
+    name = "ffdec";
+    exec = name;
+    icon = name;
+    desktopName = "JPEXS Free Flash Decompiler";
+    genericName = "Flash Decompiler";
+    comment = meta.description;
+    categories = [ "Development" "Java" ];
+    startupWMClass = "com-jpexs-decompiler-flash-gui-Main";
+  };
+
+  meta = with lib; {
+    description = "Flash SWF decompiler and editor";
+    longDescription = ''
+      Open-source Flash SWF decompiler and editor. Extract resources,
+      convert SWF to FLA, edit ActionScript, replace images, sounds,
+      texts or fonts.
+    '';
+    homepage = "https://github.com/jindrapetrik/jpexs-decompiler";
+    license = licenses.gpl3;
+    platforms = jdk8.meta.platforms;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jq/default.nix b/nixpkgs/pkgs/development/tools/jq/default.nix
new file mode 100644
index 000000000000..5671f5dbe641
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jq/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, stdenv
+, fetchpatch
+, fetchFromGitHub
+, autoreconfHook
+, onigurumaSupport ? true
+, oniguruma
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jq";
+  version = "1.6";
+
+  src = fetchFromGitHub {
+    owner = "stedolan";
+    repo = "jq";
+    rev = "${pname}-${version}";
+    hash = "sha256-CIE8vumQPGK+TFAncmpBijANpFALLTadOvkob0gVzro";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-tests-when-building-without-regex-supports.patch";
+      url = "https://github.com/stedolan/jq/pull/2292/commits/f6a69a6e52b68a92b816a28eb20719a3d0cb51ae.patch";
+      sha256 = "pTM5FZ6hFs5Rdx+W2dICSS2lcoLY1Q//Lan3Hu8Gr58=";
+    })
+  ];
+
+  outputs = [ "bin" "doc" "man" "dev" "lib" "out" ];
+
+  # Upstream script that writes the version that's eventually compiled
+  # and printed in `jq --help` relies on a .git directory which our src
+  # doesn't keep.
+  preConfigure = ''
+    echo "#!/bin/sh" > scripts/version
+    echo "echo ${version}" >> scripts/version
+    patchShebangs scripts/version
+  '';
+
+  # paranoid mode: make sure we never use vendored version of oniguruma
+  # Note: it must be run after automake, or automake will complain
+  preBuild = ''
+    rm -r ./modules/oniguruma
+  '';
+
+  buildInputs = lib.optionals onigurumaSupport [ oniguruma ];
+  nativeBuildInputs = [ autoreconfHook ];
+
+  configureFlags = [
+    "--bindir=\${bin}/bin"
+    "--sbindir=\${bin}/bin"
+    "--datadir=\${doc}/share"
+    "--mandir=\${man}/share/man"
+  ] ++ lib.optional (!onigurumaSupport) "--with-oniguruma=no"
+  # jq is linked to libjq:
+  ++ lib.optional (!stdenv.isDarwin) "LDFLAGS=-Wl,-rpath,\\\${libdir}";
+
+  doInstallCheck = true;
+  installCheckTarget = "check";
+
+  postInstallCheck = ''
+    $bin/bin/jq --help >/dev/null
+    $bin/bin/jq -r '.values[1]' <<< '{"values":["hello","world"]}' | grep '^world$' > /dev/null
+  '';
+
+  passthru = { inherit onigurumaSupport; };
+
+  meta = with lib; {
+    description = "A lightweight and flexible command-line JSON processor";
+    homepage = "https://stedolan.github.io/jq/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ raskin globin ];
+    platforms = platforms.unix;
+    downloadPage = "https://stedolan.github.io/jq/download/";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jql/default.nix b/nixpkgs/pkgs/development/tools/jql/default.nix
new file mode 100644
index 000000000000..732175edab9c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jql/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jql";
+  version = "3.1.1";
+
+  src = fetchFromGitHub {
+    owner = "yamafaktory";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-CntAxOsAaKkCvQanLZ4d99VEGrbsVM+IYOhUuimvjlA=";
+  };
+
+  cargoSha256 = "sha256-mzHLAmm0wvF35ku+wg6QG/pKwIFjb22fOtBmMhgC0Ik=";
+
+  meta = with lib; {
+    description = "A JSON Query Language CLI tool built with Rust";
+    homepage = "https://github.com/yamafaktory/jql";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ akshgpt7 ];
+  };
+}
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..d8331181652b
--- /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
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/jsduck/default.nix b/nixpkgs/pkgs/development/tools/jsduck/default.nix
new file mode 100644
index 000000000000..5c11b87f76ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jsduck/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, bundlerEnv, makeWrapper, bundlerUpdateScript }:
+
+stdenv.mkDerivation rec {
+  pname = "jsduck";
+  version = (import ./gemset.nix).jsduck.version;
+
+  env = bundlerEnv {
+    name = pname;
+    gemfile = ./Gemfile;
+    lockfile = ./Gemfile.lock;
+    gemset = ./gemset.nix;
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ env ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/jsduck $out/bin/jsduck
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "jsduck";
+
+  meta = with lib; {
+    description = "Simple JavaScript Duckumentation generator";
+    homepage    = "https://github.com/senchalabs/jsduck";
+    license     = with licenses; gpl3;
+    maintainers = with maintainers; [ periklis nicknovitski ];
+    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..4fe4e4c7eab3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/json2hcl/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "json2hcl";
+  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/jsonnet-bundler/default.nix b/nixpkgs/pkgs/development/tools/jsonnet-bundler/default.nix
new file mode 100644
index 000000000000..87da63f0f354
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jsonnet-bundler/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "jsonnet-bundler";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "jsonnet-bundler";
+    repo = "jsonnet-bundler";
+    rev = "v${version}";
+    sha256 = "0pk6nf8r0wy7lnsnzyjd3vgq4b2kb3zl0xxn01ahpaqgmwpzajlk";
+  };
+
+  vendorSha256 = null;
+
+  subPackages = [ "cmd/jb" ];
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  meta = with lib; {
+    description = "A jsonnet package manager";
+    homepage = "https://github.com/jsonnet-bundler/jsonnet-bundler";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ preisschild ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/jtc/default.nix b/nixpkgs/pkgs/development/tools/jtc/default.nix
new file mode 100644
index 000000000000..947f26664f4d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/jtc/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "jtc";
+  version = "1.76";
+
+  src = fetchFromGitHub {
+    owner = "ldn-softdev";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-VATRlOOV4wBInLOm9J0Dp2vhtL5mb0Yxdl/ya0JiqEU=";
+  };
+
+  buildPhase = ''
+    runHook preBuild
+
+    $CXX -o jtc -Wall -std=gnu++14 -Ofast -pthread -lpthread jtc.cpp
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin jtc
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "JSON manipulation and transformation tool";
+    homepage = "https://github.com/ldn-softdev/jtc";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/just/default.nix b/nixpkgs/pkgs/development/tools/just/default.nix
new file mode 100644
index 000000000000..29694c08ed8d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/just/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, coreutils
+, bash
+, installShellFiles
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "just";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "casey";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-hbBAbk0n80BbbIx81427bRz4x6enBsxJ0bHJKww44oc=";
+  };
+
+  cargoSha256 = "sha256-lZyFoOCWUE2ahU/lS+bIdrZXNm/sFEfLsQm1BxREg5w=";
+
+  nativeBuildInputs = [ installShellFiles ];
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  checkInputs = [ coreutils bash ];
+
+  preCheck = ''
+    # USER must not be empty
+    export USER=just-user
+    export USERNAME=just-user
+    export JUST_CHOOSER="${coreutils}/bin/cat"
+
+    # Prevent string.rs from being changed
+    cp tests/string.rs $TMPDIR/string.rs
+
+    sed -i src/justfile.rs \
+        -i tests/*.rs \
+        -e "s@/bin/echo@${coreutils}/bin/echo@g" \
+        -e "s@/usr/bin/env@${coreutils}/bin/env@g"
+
+    # Return unchanged string.rs
+    cp $TMPDIR/string.rs tests/string.rs
+  '';
+
+  checkFlags = [
+    "--skip=edit" # trying to run "vim" fails as there's no /usr/bin/env or which in the sandbox to find vim and the dependency is not easily patched
+    "--skip=run_shebang" # test case very rarely fails with "Text file busy"
+    "--skip=invoke_error_function" # wants JUST_CHOOSER to be fzf
+  ];
+
+  postInstall = ''
+    installManPage man/just.1
+
+    installShellCompletion --cmd just \
+      --bash completions/just.bash \
+      --fish completions/just.fish \
+      --zsh completions/just.zsh
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/casey/just";
+    changelog = "https://github.com/casey/just/blob/${version}/CHANGELOG.md";
+    description = "A handy way to save and run project-specific commands";
+    license = licenses.cc0;
+    maintainers = with maintainers; [ xrelkd jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/k6/default.nix b/nixpkgs/pkgs/development/tools/k6/default.nix
new file mode 100644
index 000000000000..d50062e4bdbb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/k6/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "k6";
+  version = "0.36.0";
+
+  src = fetchFromGitHub {
+    owner = "grafana";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-yWEh0sPMGe6mNcLKhbmJEUCHzZKFGMcTRNQrHgiQ+BQ=";
+  };
+
+  subPackages = [ "./" ];
+
+  vendorSha256 = null;
+
+  doCheck = true;
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/k6 version | grep ${version} > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "A modern load testing tool, using Go and JavaScript";
+    homepage = "https://k6.io/";
+    changelog = "https://github.com/grafana/k6/releases/tag/v${version}";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ offline bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kafka-delta-ingest/default.nix b/nixpkgs/pkgs/development/tools/kafka-delta-ingest/default.nix
new file mode 100644
index 000000000000..9287b4d90874
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kafka-delta-ingest/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, perl
+, rdkafka
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kafka-delta-ingest";
+  version = "unstable-2021-12-08";
+
+  src = fetchFromGitHub {
+    owner = "delta-io";
+    repo = pname;
+    rev = "c48c854145b5aab1b8f36cc04978880794a2273c";
+    sha256 = "sha256-q0jOVZlxMHIhnc8y2N8o7Sl5Eg7DfJ96kXrPIV8RD1Y=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    perl
+  ];
+
+  buildFeatures = [ "dynamic-linking" ];
+
+  buildInputs = [
+    openssl
+    rdkafka
+  ];
+
+  cargoSha256 = "sha256-srSu3Rx58Ee2Y+8MVis1ACXBQ92u1mIvy1DNp0qJ4IA=";
+
+  # many tests seem to require a running kafka instance
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A highly efficient daemon for streaming data from Kafka into Delta Lake";
+    homepage = "https://github.com/delta-io/kafka-delta-ingest";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kcat/default.nix b/nixpkgs/pkgs/development/tools/kcat/default.nix
new file mode 100644
index 000000000000..d4cc4a37ea1a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kcat/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, zlib, rdkafka, yajl, avro-c, libserdes, which }:
+
+stdenv.mkDerivation rec {
+  pname = "kcat";
+
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "edenhill";
+    repo = "kcat";
+    rev = version;
+    sha256 = "sha256-koDhj/RQc9fhfqjrJylhURw6tppPELhLlBGbNVJsii8=";
+  };
+
+  nativeBuildInputs = [ pkg-config which ];
+
+  buildInputs = [ zlib rdkafka yajl avro-c libserdes ];
+
+  preConfigure = ''
+    patchShebangs ./configure
+  '';
+
+  meta = with lib; {
+    description = "A generic non-JVM producer and consumer for Apache Kafka";
+    homepage = "https://github.com/edenhill/kcat";
+    license = licenses.bsd2;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ nyarly ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kcli/default.nix b/nixpkgs/pkgs/development/tools/kcli/default.nix
new file mode 100644
index 000000000000..8f0aecba34d7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kcli/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kcli";
+  version = "1.8.3";
+
+  src = fetchFromGitHub {
+    owner = "cswank";
+    repo = "kcli";
+    rev = version;
+    sha256 = "0whijr2r2j5bvfy8jgmpxsa0zvwk5kfjlpnkw4za5k35q7bjffls";
+  };
+
+  vendorSha256 = "0zj2hls8m0l9xsfv680wiwq1g2qjdjslv2yx3yd4rzxdsv2wz09a";
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "A kafka command line browser";
+    homepage = "https://github.com/cswank/kcli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cswank ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kexpand/default.nix b/nixpkgs/pkgs/development/tools/kexpand/default.nix
new file mode 100644
index 000000000000..35d0a5c2da07
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kexpand/default.nix
@@ -0,0 +1,17 @@
+{ buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage {
+  pname = "kexpand";
+  version = "unstable-2017-05-12";
+
+  goPackagePath = "github.com/kopeio/kexpand";
+
+  subPackages = [ "." ];
+
+  src = fetchFromGitHub {
+    owner = "kopeio";
+    repo = "kexpand";
+    rev = "c508a43a4e84410dfd30827603e902148c5c1f3c";
+    sha256 = "0946h74lsqnr1106j7i2w2a5jg2bbk831d7prlws4bb2kigfm38p";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kgt/default.nix b/nixpkgs/pkgs/development/tools/kgt/default.nix
new file mode 100644
index 000000000000..94f72ceac10b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kgt/default.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv, fetchFromGitHub, bmake, cleanPackaging }:
+
+stdenv.mkDerivation {
+  pname = "kgt";
+  version = "2021-04-07";
+
+  src = fetchFromGitHub {
+    owner = "katef";
+    repo = "kgt";
+    # 2021-04-07, no version tags (yet)
+    rev = "a7cbc52d368e413a3f1212c0fafccc05b2a42606";
+    sha256 = "1x6q30xb8ihxi26rzk3s2hqd827fim4l4wn3qq252ibrwcq6lqyj";
+    fetchSubmodules = true;
+  };
+
+  outputs = [ "bin" "doc" "out" ];
+
+  nativeBuildInputs = [ bmake ];
+  enableParallelBuilding = true;
+
+  makeFlags = [ "-r" "PREFIX=$(bin)" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    ${cleanPackaging.commonFileActions {
+        docFiles = [
+          "README.md"
+          "LICENCE"
+          "examples"
+          # TODO: this is just a docbook file, not a mangpage yet
+          # https://github.com/katef/kgt/issues/50
+          "man"
+          "examples"
+          "doc"
+        ];
+        noiseFiles = [
+          "build/src"
+          "build/lib"
+          "Makefile"
+          "src/**/*.c"
+          "src/**/*.h"
+          "src/**/Makefile"
+          "src/**/lexer.lx"
+          "src/**/parser.sid"
+          "src/**/parser.act"
+          "share/git"
+          "share/css"
+          "share/xsl"
+          ".gitignore"
+          ".gitmodules"
+          ".gitattributes"
+          ".github"
+        ];
+      }} $doc/share/doc/kgt
+
+    install -Dm755 build/bin/kgt $bin/bin/kgt
+    rm build/bin/kgt
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    ${cleanPackaging.checkForRemainingFiles}
+  '';
+
+  meta = with lib; {
+    description = "BNF wrangling and railroad diagrams";
+    longDescription = ''
+      KGT: Kate's Grammar Tool
+
+      Input: Various BNF-like syntaxes
+      Output: Various BNF-like syntaxes, AST dumps, and Railroad Syntax Diagrams
+    '';
+    homepage    = "https://github.com/katef/kgt";
+    license     = licenses.bsd2;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ Profpatsch ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/kind/default.nix b/nixpkgs/pkgs/development/tools/kind/default.nix
new file mode 100644
index 000000000000..e667238b9b09
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kind/default.nix
@@ -0,0 +1,42 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+with lib;
+
+buildGoModule rec {
+  pname = "kind";
+  version = "0.11.1";
+
+  src = fetchFromGitHub {
+    rev    = "v${version}";
+    owner  = "kubernetes-sigs";
+    repo   = "kind";
+    sha256 = "sha256-pjg52ONseKNw06EOBzD6Elge+Cz+C3llPvjJPHkn1cw=";
+  };
+
+  patches = [
+    # fix kernel module path used by kind
+    ./kernel-module-path.patch
+  ];
+
+  vendorSha256 = "sha256-HiVdekSZrC/RkMSvcwm1mv6AE4bA5kayUsMdVCbckiE=";
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/kind completion $shell > kind.$shell
+      installShellCompletion kind.$shell
+    done
+  '';
+
+  meta = {
+    description = "Kubernetes IN Docker - local clusters for testing Kubernetes";
+    homepage    = "https://github.com/kubernetes-sigs/kind";
+    maintainers = with maintainers; [ offline rawkode ];
+    license     = lib.licenses.asl20;
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kind/kernel-module-path.patch b/nixpkgs/pkgs/development/tools/kind/kernel-module-path.patch
new file mode 100644
index 000000000000..833cd3388ec2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kind/kernel-module-path.patch
@@ -0,0 +1,47 @@
+diff --git a/pkg/cluster/internal/providers/common/getmodules.go b/pkg/cluster/internal/providers/common/getmodules.go
+new file mode 100644
+index 00000000..f42a883d
+--- /dev/null
++++ b/pkg/cluster/internal/providers/common/getmodules.go
+@@ -0,0 +1,15 @@
++package common
++
++import "os"
++
++const (
++	fhsKernalModulePath = "/lib/modules"
++	nixKernalModulePath = "/run/booted-system/kernel-modules/lib"
++)
++
++func GetKernelModulePath() string {
++	if _, err := os.Stat(nixKernalModulePath); !os.IsNotExist(err) {
++		return nixKernalModulePath
++	}
++	return fhsKernalModulePath
++}
+diff --git a/pkg/cluster/internal/providers/docker/provision.go b/pkg/cluster/internal/providers/docker/provision.go
+index 50161861..86d5b7b6 100644
+--- a/pkg/cluster/internal/providers/docker/provision.go
++++ b/pkg/cluster/internal/providers/docker/provision.go
+@@ -242,7 +242,7 @@ func runArgsForNode(node *config.Node, clusterIPFamily config.ClusterIPFamily, n
+ 		// (please don't depend on doing this though!)
+ 		"--volume", "/var",
+ 		// some k8s things want to read /lib/modules
+-		"--volume", "/lib/modules:/lib/modules:ro",
++		"--volume", fmt.Sprintf("%s:/lib/modules:ro", common.GetKernelModulePath()),
+ 	},
+ 		args...,
+ 	)
+diff --git a/pkg/cluster/internal/providers/podman/provision.go b/pkg/cluster/internal/providers/podman/provision.go
+index 51dce486..3bc36b42 100644
+--- a/pkg/cluster/internal/providers/podman/provision.go
++++ b/pkg/cluster/internal/providers/podman/provision.go
+@@ -205,7 +205,7 @@ func runArgsForNode(node *config.Node, clusterIPFamily config.ClusterIPFamily, n
+ 		// dev: devices on the volume will be able to be used by processes within the container
+ 		"--volume", fmt.Sprintf("%s:/var:suid,exec,dev", varVolume),
+ 		// some k8s things want to read /lib/modules
+-		"--volume", "/lib/modules:/lib/modules:ro",
++		"--volume", fmt.Sprintf("%s:/lib/modules:ro", common.GetKernelModulePath()),
+ 	},
+ 		args...,
+ 	)
diff --git a/nixpkgs/pkgs/development/tools/knightos/genkfs/default.nix b/nixpkgs/pkgs/development/tools/knightos/genkfs/default.nix
new file mode 100644
index 000000000000..fc13b68258ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/genkfs/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, asciidoc, cmake, libxslt }:
+
+stdenv.mkDerivation rec {
+  pname = "genkfs";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "genkfs";
+    rev = version;
+    sha256 = "0f50idd2bb73b05qjmwlirjnhr1bp43zhrgy6z949ab9a7hgaydp";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ asciidoc libxslt.bin cmake ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "Utility to write a KFS filesystem into a ROM file";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/kcc/default.nix b/nixpkgs/pkgs/development/tools/knightos/kcc/default.nix
new file mode 100644
index 000000000000..90a493697c8a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/kcc/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, cmake, bison, flex, boost }:
+
+stdenv.mkDerivation rec {
+  pname = "kcc";
+
+  version = "4.0.4";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "kcc";
+    rev = version;
+    sha256 = "13sbpv8ynq8sjackv93jqxymk0bsy76c5fc0v29wz97v53q3izjp";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ bison cmake flex ];
+
+  buildInputs = [ boost ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "KnightOS C compiler";
+    license     = licenses.gpl2Plus;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/kimg/default.nix b/nixpkgs/pkgs/development/tools/knightos/kimg/default.nix
new file mode 100644
index 000000000000..70eea0f7b6a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/kimg/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libxslt, asciidoc }:
+
+stdenv.mkDerivation rec {
+  pname = "kimg";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "kimg";
+    rev = version;
+    sha256 = "040782k3rh2a5mhbfgr9gnbfis0wgxvi27vhfn7l35vrr12sw1l3";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ asciidoc cmake libxslt.bin ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "Converts image formats supported by stb_image to the KnightOS image format";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/kpack/default.nix b/nixpkgs/pkgs/development/tools/knightos/kpack/default.nix
new file mode 100644
index 000000000000..447959a1e612
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/kpack/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, cmake, asciidoc, libxslt }:
+
+stdenv.mkDerivation rec {
+  pname = "kpack";
+
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "kpack";
+    rev = version;
+    sha256 = "1l6bm2j45946i80qgwhrixg9sckazwb5x4051s76d3mapq9bara8";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ asciidoc cmake libxslt.bin ];
+
+  hardeningDisable = [ "fortify" ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "A tool to create or extract KnightOS packages";
+    license     = licenses.lgpl2Only;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/mkrom/default.nix b/nixpkgs/pkgs/development/tools/knightos/mkrom/default.nix
new file mode 100644
index 000000000000..21caa5b8b32a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/mkrom/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, libxslt, asciidoc }:
+
+stdenv.mkDerivation rec {
+  pname = "mkrom";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "mkrom";
+    rev = version;
+    sha256 = "sha256-YFrh0tOGiM90uvU9ZWopW1+9buHDQtetuOtPDSYYaXw=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ asciidoc libxslt.bin ];
+
+  installFlags = [ "DESTDIR=$(out)" ];
+  installTargets = [ "install" "install_man" ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "Packages KnightOS distribution files into a ROM";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/mktiupgrade/default.nix b/nixpkgs/pkgs/development/tools/knightos/mktiupgrade/default.nix
new file mode 100644
index 000000000000..efe8d454b2c4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/mktiupgrade/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libxslt, asciidoc }:
+
+stdenv.mkDerivation rec {
+  pname = "mktiupgrade";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "mktiupgrade";
+    rev = version;
+    sha256 = "15y3rxvv7ipgc80wrvrpksxzdyqr21ywysc9hg6s7d3w8lqdq8dm";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ asciidoc cmake libxslt.bin ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "Makes TI calculator upgrade files from ROM dumps";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/patchrom/default.nix b/nixpkgs/pkgs/development/tools/knightos/patchrom/default.nix
new file mode 100644
index 000000000000..67d7159e5021
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/patchrom/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, cmake, asciidoc, libxslt }:
+
+
+stdenv.mkDerivation rec {
+  pname = "patchrom";
+
+  version = "1.1.3";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "patchrom";
+    rev = version;
+    sha256 = "0yc4q7n3k7k6rx3cxq5ddd5r0la8gw1287a74kql6gwkxjq0jmcv";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ asciidoc cmake libxslt.bin ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "Patches jumptables into TI calculator ROM files and generates an include file";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/regenkfs/default.nix b/nixpkgs/pkgs/development/tools/knightos/regenkfs/default.nix
new file mode 100644
index 000000000000..c50b10527f52
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/regenkfs/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage {
+  pname = "regenkfs";
+  version = "unstable-2020-10-17";
+
+  src = fetchFromGitHub {
+    owner = "siraben";
+    repo = "regenkfs";
+    rev = "652155445fc39bbe6628f6b9415b5cd6863f592f";
+    sha256 = "sha256-zkwOpMNPGstn/y1l1s8blUKpBebY4Ta9hiPYxVLvG6Y=";
+  };
+
+  cargoSha256 = "sha256-05VmQdop4vdzw2XEvVdp9+RNmyZvay1Q7gKN2n8rDEQ=";
+
+  buildFeatures = [ "c-undef" ];
+
+  meta = with lib; {
+    description = "Reimplementation of genkfs in Rust";
+    homepage = "https://github.com/siraben/regenkfs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    mainProgram = "regenkfs";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/remkrom/default.nix b/nixpkgs/pkgs/development/tools/knightos/remkrom/default.nix
new file mode 100644
index 000000000000..bfc01c469b59
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/remkrom/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage {
+  pname = "remkrom";
+  version = "unstable-2020-10-17";
+
+  src = fetchFromGitHub {
+    owner = "siraben";
+    repo = "remkrom";
+    rev = "86a0b19c1d382a029ecaa96eeca7e9f76c8561d6";
+    sha256 = "sha256-DhfNfV9bd0p5dLXKgrVLyugQHK+RHsepeg0tGq5J6cI=";
+  };
+
+  cargoSha256 = "sha256-JUyIbg1SxQ7pdqypGv7Kz2MM0ZwL3M9YJekO9oSftLM=";
+
+  meta = with lib; {
+    description = "Reimplementation of mkrom in Rust";
+    homepage = "https://github.com/siraben/remkrom";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    mainProgram = "remkrom";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/scas/default.nix b/nixpkgs/pkgs/development/tools/knightos/scas/default.nix
new file mode 100644
index 000000000000..255ecf798d86
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/scas/default.nix
@@ -0,0 +1,27 @@
+{ fetchFromGitHub, lib, stdenv, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "scas";
+  version = "0.5.5";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "scas";
+    rev = version;
+    sha256 = "sha256-JGQE+orVDKKJsTt8sIjPX+3yhpZkujISroQ6g19+MzU=";
+  };
+
+  cmakeFlags = [ "-DSCAS_LIBRARY=1" ];
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "Assembler and linker for the Z80";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/knightos/z80e/default.nix b/nixpkgs/pkgs/development/tools/knightos/z80e/default.nix
new file mode 100644
index 000000000000..b8aa281d413d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/knightos/z80e/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, cmake, knightos-scas, readline, SDL2 }:
+
+stdenv.mkDerivation rec {
+  pname = "z80e";
+  version = "0.5.3";
+
+  src = fetchFromGitHub {
+    owner = "KnightOS";
+    repo = "z80e";
+    rev = version;
+    sha256 = "sha256-FQMYHxKxHEP+x98JbGyjaM0OL8QK/p3epsAWvQkv6bc=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ readline SDL2 knightos-scas ];
+
+  cmakeFlags = [ "-Denable-sdl=YES" ];
+
+  meta = with lib; {
+    homepage    = "https://knightos.org/";
+    description = "A Z80 calculator emulator and debugger";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ko/default.nix b/nixpkgs/pkgs/development/tools/ko/default.nix
new file mode 100644
index 000000000000..a7562429db59
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ko/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, git
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "ko";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Xhe5WNHQ+Oa1m/6VwC3zCwWzXRc1spSfPp4jySsOcuU=";
+  };
+  vendorSha256 = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # Pin so that we don't build the several other development tools
+  subPackages = ".";
+
+  ldflags = [ "-s" "-w" "-X github.com/google/ko/pkg/commands.Version=${version}" ];
+
+  checkInputs = [ git ];
+  preCheck = ''
+    # Feed in all the tests for testing
+    # This is because subPackages above limits what is built to just what we
+    # want but also limits the tests
+    getGoDirs() {
+      go list ./...
+    }
+
+    # resolves some complaints from ko
+    export GOROOT="$(go env GOROOT)"
+    git init
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd ko \
+      --bash <($out/bin/ko completion) \
+      --zsh <($out/bin/ko completion --zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/google/ko";
+    changelog = "https://github.com/google/ko/releases/tag/v${version}";
+    description = "Build and deploy Go applications on Kubernetes";
+    longDescription = ''
+      ko is a simple, fast container image builder for Go applications.
+      It's ideal for use cases where your image contains a single Go application without any/many dependencies on the OS base image (e.g. no cgo, no OS package dependencies).
+      ko builds images by effectively executing go build on your local machine, and as such doesn't require docker to be installed. This can make it a good fit for lightweight CI/CD use cases.
+      ko also includes support for simple YAML templating which makes it a powerful tool for Kubernetes applications.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nickcao jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/konstraint/default.nix b/nixpkgs/pkgs/development/tools/konstraint/default.nix
new file mode 100644
index 000000000000..d83f6db701a8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/konstraint/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "konstraint";
+  version = "0.18.0";
+
+  src = fetchFromGitHub {
+    owner = "plexsystems";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-UHdmC6UoDxl/GfvUOmuBctPpxIYljOurnm1J3eEPFHA=";
+  };
+  vendorSha256 = "sha256-UssvmmZhq+SO3cPpZi3Diji7tIxrpyhqNIBajqzRjh8=";
+
+  # Exclude go within .github folder
+  excludedPackages = ".github";
+
+  ldflags = [ "-s" "-w" "-X github.com/plexsystems/konstraint/internal/commands.version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/plexsystems/konstraint";
+    changelog = "https://github.com/plexsystems/konstraint/releases/tag/v${version}";
+    description = "A policy management tool for interacting with Gatekeeper";
+    longDescription = ''
+      konstraint is a CLI tool to assist with the creation and management of templates and constraints when using
+      Gatekeeper. Automatically copy Rego to the ConstraintTemplate. Automatically update all ConstraintTemplates with
+      library changes. Enable writing the same policies for Conftest and Gatekeeper.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kotlin-language-server/default.nix b/nixpkgs/pkgs/development/tools/kotlin-language-server/default.nix
new file mode 100644
index 000000000000..144c159f3637
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kotlin-language-server/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, unzip, openjdk11, gradle }:
+
+stdenv.mkDerivation rec {
+  pname = "kotlin-language-server";
+  version = "1.2.0";
+  src = fetchurl {
+    url = "https://github.com/fwcd/kotlin-language-server/releases/download/${version}/server.zip";
+    sha256 = "sha256-GXr+sOGa09qeQrfaJYRPsoHULwfMst8tTr4y2cv752k=";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/lib
+    mkdir -p $out/bin
+    cp -r lib/* $out/lib
+    cp -r bin/* $out/bin
+  '';
+
+  nativeBuildInputs = [ unzip gradle ];
+  buildInputs = [ openjdk11 gradle ];
+
+  meta = {
+    description = "kotlin language server";
+    longDescription = ''
+      About Kotlin code completion, linting and more for any editor/IDE
+      using the Language Server Protocol Topics'';
+    homepage = "https://github.com/fwcd/kotlin-language-server";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/krankerl/default.nix b/nixpkgs/pkgs/development/tools/krankerl/default.nix
new file mode 100644
index 000000000000..0061ca60bfcc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/krankerl/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, dbus
+, sqlite
+, file
+, gzip
+, makeWrapper
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "krankerl";
+  version = "0.13.3";
+
+  src = fetchFromGitHub {
+    owner = "ChristophWurst";
+    repo = "krankerl";
+    rev = "v${version}";
+    sha256 = "sha256-/zRO+CVYQgx9/j14zgNm/ABzLprt0OYne+O6hOEjSEw=";
+  };
+
+  cargoSha256 = "sha256-LWQRFgDxl2yxP+v1TUENaTGrA/udh84AJvWIkfTJezM=";
+
+  nativeBuildInputs = [
+    pkg-config
+    gzip
+    makeWrapper
+  ];
+
+  buildInputs = [
+    openssl
+    dbus
+    sqlite
+  ];
+
+  checkInputs = [
+    file
+  ];
+
+  meta = with lib; {
+    description = "A CLI helper to manage, package and publish Nextcloud apps";
+    homepage = "https://github.com/ChristophWurst/krankerl";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ onny ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/krew/default.nix b/nixpkgs/pkgs/development/tools/krew/default.nix
new file mode 100644
index 000000000000..78e9f91b3af8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/krew/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "krew";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = "krew";
+    rev = "v${version}";
+    sha256 = "sha256-aW9yASskwDt+5Lvsdju9ZR/HeZ4x8heWljdhqK0ZTx8=";
+  };
+
+  vendorSha256 = "sha256-VXGjKzkOpaxyJClwXbxg15xmGdFi6arH8f4nN5/1SA4=";
+
+  subPackages = [ "cmd/krew" ];
+
+  meta = with lib; {
+    description = "Package manager for kubectl plugins";
+    homepage = "https://github.com/kubernetes-sigs/krew";
+    maintainers = with maintainers; [ vdemeester ];
+    license = lib.licenses.asl20;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ktlint/default.nix b/nixpkgs/pkgs/development/tools/ktlint/default.nix
new file mode 100644
index 000000000000..73fdb3dff8f2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ktlint/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre_headless }:
+
+stdenv.mkDerivation rec {
+  pname = "ktlint";
+  version = "0.44.0";
+
+  src = fetchurl {
+    url = "https://github.com/pinterest/ktlint/releases/download/${version}/ktlint";
+    sha256 = "1l2pmvqw8rjl2xmsdp31j8015clshab6p81i3i05h40rjjz57mvr";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    install -Dm755 $src $out/bin/ktlint
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/ktlint --prefix PATH : "${jre_headless}/bin"
+  '';
+
+  meta = with lib; {
+    description = "An anti-bikeshedding Kotlin linter with built-in formatter";
+    homepage = "https://ktlint.github.io/";
+    license = licenses.mit;
+    platforms = jre_headless.meta.platforms;
+    maintainers = with maintainers; [ tadfisher SubhrajyotiSen ];
+  };
+}
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..e095755df110
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kube-aws/default.nix
@@ -0,0 +1,36 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+
+with lib;
+
+buildGoPackage rec {
+  pname = "kube-aws";
+  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
+  )'';
+
+  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-linter/default.nix b/nixpkgs/pkgs/development/tools/kube-linter/default.nix
new file mode 100644
index 000000000000..1b94b956293d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kube-linter/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub, testVersion, kube-linter }:
+
+buildGoModule rec {
+  pname = "kube-linter";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "stackrox";
+    repo = pname;
+    rev = "${version}";
+    sha256 = "GUDrUEBorV4/ZqPnfNYcsbW4Zr1LpS3yL+4OgxFbTOk=";
+  };
+
+  vendorSha256 = "xGghTP9thICOGIfc5VPJK06DeXfLiTckwa4nXv83/P8=";
+
+  ldflags = [
+    "-s" "-w" "-X golang.stackrox.io/kube-linter/internal/version.version=${version}"
+  ];
+
+  passthru.tests.version = testVersion {
+    package = kube-linter;
+    command = "kube-linter version";
+  };
+
+  meta = with lib; {
+    description = "A static analysis tool that checks Kubernetes YAML files and Helm charts";
+    homepage = "https://kubelinter.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mtesseract ];
+  };
+}
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..1c6e8d56a6ac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kube-prompt/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "kube-prompt";
+  version = "1.0.11";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/c-bata/kube-prompt";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "c-bata";
+    repo = "kube-prompt";
+    sha256 = "sha256-9OWsITbC7YO51QzsRwDWvojU54DiuGJhkSGwmesEj9w=";
+  };
+
+  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..a6c4bbd445c4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kube-prompt/deps.nix
@@ -0,0 +1,993 @@
+# file generated from go.mod using vgo2nix (https://github.com/nix-community/vgo2nix)
+[
+  {
+    goPackagePath = "cloud.google.com/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/google-cloud-go";
+      rev = "v0.38.0";
+      sha256 = "0n6n13b7lri2fmc4bn4ifszyawj31dpbzvyv0xafsf81440z8cyh";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/Azure/go-autorest/autorest";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/go-autorest";
+      rev = "autorest/v0.9.0";
+      sha256 = "01fg6x3a6as2kh0km8kvjzjalq7xiqa17hnsdwawzlpnfpqgslvq";
+      moduleDir = "autorest";
+    };
+  }
+  {
+    goPackagePath = "github.com/Azure/go-autorest/autorest/adal";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/go-autorest";
+      rev = "autorest/adal/v0.5.0";
+      sha256 = "07zbbshyz1s9fj9ifa6zzks4wq7455rna50z1ahpgin92jk0s6la";
+      moduleDir = "autorest/adal";
+    };
+  }
+  {
+    goPackagePath = "github.com/Azure/go-autorest/autorest/date";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/go-autorest";
+      rev = "autorest/date/v0.1.0";
+      sha256 = "1w94wxjjkiv8m44rcdm1af9h0ap2r8kpp9198cxpxj8d5xxkaxpz";
+      moduleDir = "autorest/date";
+    };
+  }
+  {
+    goPackagePath = "github.com/Azure/go-autorest/autorest/mocks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/go-autorest";
+      rev = "autorest/mocks/v0.2.0";
+      sha256 = "04jsq3bnz9s27kp45n7q5wj2fi3bxwvxrxcmiswrhqz4pj35b561";
+      moduleDir = "autorest/mocks";
+    };
+  }
+  {
+    goPackagePath = "github.com/Azure/go-autorest/logger";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/go-autorest";
+      rev = "logger/v0.1.0";
+      sha256 = "1w94wxjjkiv8m44rcdm1af9h0ap2r8kpp9198cxpxj8d5xxkaxpz";
+      moduleDir = "logger";
+    };
+  }
+  {
+    goPackagePath = "github.com/Azure/go-autorest/tracing";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/go-autorest";
+      rev = "tracing/v0.5.0";
+      sha256 = "0n482cjr2pk6ql6awcnn6llrnygjzakihbjaahgmylf3znwil7jp";
+      moduleDir = "tracing";
+    };
+  }
+  {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "v0.3.1";
+      sha256 = "1fjdwwfzyzllgiwydknf1pwjvy49qxfsczqx5gz3y0izs7as99j6";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/NYTimes/gziphandler";
+    fetch = {
+      type = "git";
+      url = "https://github.com/NYTimes/gziphandler";
+      rev = "56545f4a5d46";
+      sha256 = "1fwk9wz6vrvq72f2gq8jhvd1nvv6grqgwrjq66vjpm0726pxar72";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/PuerkitoBio/purell";
+    fetch = {
+      type = "git";
+      url = "https://github.com/PuerkitoBio/purell";
+      rev = "v1.0.0";
+      sha256 = "1qhsy1nm96b9kb63svkvkqmmw15xg6irwcysisxdgzk64adfwqv1";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/PuerkitoBio/urlesc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/PuerkitoBio/urlesc";
+      rev = "5bd2802263f2";
+      sha256 = "15y5r3asvm7196m3nza5xvdvlc2k11p6lfs6hi917hl7r9vgi6mp";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/c-bata/go-prompt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/c-bata/go-prompt";
+      rev = "v0.2.5";
+      sha256 = "1ny9a1cshl9h6rddk3j0ar6iya1iahaw623g7qbsrbdbx38xlip3";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/client9/misspell";
+    fetch = {
+      type = "git";
+      url = "https://github.com/client9/misspell";
+      rev = "v0.3.4";
+      sha256 = "1vwf33wsc4la25zk9nylpbp9px3svlmldkm0bha4hp56jws4q9cs";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "v1.1.1";
+      sha256 = "0hka6hmyvp701adzag2g26cxdj47g21x6jz4sc6jjz1mn59d474y";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/dgrijalva/jwt-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgrijalva/jwt-go";
+      rev = "v3.2.0";
+      sha256 = "08m27vlms74pfy5z79w67f9lk9zkx6a9jd68k3c4msxy75ry36mp";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/docker/spdystream";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/spdystream";
+      rev = "449fdfce4d96";
+      sha256 = "1412cpiis971iq1kxrirzirhj2708ispjh0x0dh879b66x8507sl";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/elazarl/goproxy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/elazarl/goproxy";
+      rev = "c4fc26588b6e";
+      sha256 = "1s3v02px61a3hmvb47rqk598z5visayxq46k3c8dcrayhhngv2fw";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/emicklei/go-restful";
+    fetch = {
+      type = "git";
+      url = "https://github.com/emicklei/go-restful";
+      rev = "ff4f55a20633";
+      sha256 = "1v5lj5142abz3gvbygp6xghpdx4ps2lwswl8559ivaidahwnc21c";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/evanphx/json-patch";
+    fetch = {
+      type = "git";
+      url = "https://github.com/evanphx/json-patch";
+      rev = "v4.2.0";
+      sha256 = "0cfvyhl3hjfc4z8hbkfc40yafv6r7y513zgp3jwf88isbd13r7a6";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/fsnotify/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify";
+      rev = "v1.4.7";
+      sha256 = "07va9crci0ijlivbb7q57d2rz9h27zgn2fsm60spjsqpdbvyrx4g";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/ghodss/yaml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ghodss/yaml";
+      rev = "73d445a93680";
+      sha256 = "0pg53ky4sy3sp9j4n7vgf1p3gw4nbckwqfldcmmi9rf13kjh0mr7";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-logr/logr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-logr/logr";
+      rev = "v0.1.0";
+      sha256 = "0fhijjhxz4n2j5i24ckzv8r9kri3v44jdyklgbqjfq0xm7izqg14";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-openapi/jsonpointer";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-openapi/jsonpointer";
+      rev = "46af16f9f7b1";
+      sha256 = "0w0fphmdycjzbsm1vppdcjc9aqinkcdzcq3pxikdvdqh5p791gsc";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-openapi/jsonreference";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-openapi/jsonreference";
+      rev = "13c6e3589ad9";
+      sha256 = "1fh4xcl9ijww4bdq656sx981d57w2c9zx5148jsxlsg4bsvxmwis";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-openapi/spec";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-openapi/spec";
+      rev = "6aced65f8501";
+      sha256 = "0yf0nw7167yjpiqrikns5djarjpf2r07q6xnq9xb1cfsc4m7ynm4";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-openapi/swag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-openapi/swag";
+      rev = "1d0bd113de87";
+      sha256 = "0fmk42chj20679n87n6sig3czs25lavyj6w208000n6kccv1ns3c";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev = "65acae22fc9d";
+      sha256 = "0700alky9z0g9akhrzn20wf4jr1600d0clhs32sm8chnlbvidy46";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/glog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/glog";
+      rev = "23def4e6c14b";
+      sha256 = "0jb2834rw5sykfr937fxi8hxi2zy80sj2bdn9b3jb4b26ksqng30";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/groupcache";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/groupcache";
+      rev = "02826c3e7903";
+      sha256 = "0w46bsllddfij66nrg8jbfjsr54birvfww8a2fj9fmgyig5syn2x";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/mock";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/mock";
+      rev = "v1.2.0";
+      sha256 = "12ddj2g8ab87id6n2n67vnbhq6p8dvgsq1pzpqfriym4dk8w54fg";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "v1.3.2";
+      sha256 = "1k1wb4zr0qbwgpvz9q5ws9zhlal8hq7dmq62pwxxriksayl6hzym";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/btree";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/btree";
+      rev = "v1.0.0";
+      sha256 = "0ba430m9fbnagacp57krgidsyrgp3ycw5r7dj71brgp5r52g82p6";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/go-cmp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-cmp";
+      rev = "v0.3.0";
+      sha256 = "1hyxx3434zshl2m9ja78gwlkg1rx9yl6diqa7dnjb31xz5x4gbjj";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/gofuzz";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/gofuzz";
+      rev = "v1.0.0";
+      sha256 = "0qz439qvccm91w0mmjz4fqgx48clxdwagkvvx89cr43q1d4iry36";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/martian";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/martian";
+      rev = "v2.1.0";
+      sha256 = "197hil6vrjk50b9wvwyzf61csid83whsjj6ik8mc9r2lryxlyyrp";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/pprof";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/pprof";
+      rev = "3ea8567a2e57";
+      sha256 = "09rhjn3ms0a72dw0yzbp237p7yhqma772zspddn6mgkh3gi3kn4c";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/uuid";
+      rev = "v1.1.1";
+      sha256 = "0hfxcf9frkb57k6q0rdkrmnfs78ms21r1qfk9fhlqga2yh5xg8zb";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/googleapis/gax-go/v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/gax-go";
+      rev = "v2.0.4";
+      sha256 = "1iwnm6ky1x53lgs44mw3hpdkjzrm5qd0kfs50m0qcq2ml5m1cwdm";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/googleapis/gnostic";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/gnostic";
+      rev = "v0.2.0";
+      sha256 = "0yh3ckd7m0r9h50wmxxvba837d0wb1k5yd439zq4p1kpp4390z12";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/gophercloud/gophercloud";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gophercloud/gophercloud";
+      rev = "v0.1.0";
+      sha256 = "0794s9c144gphm4dh1wgba6ydsb4zdwgglj1p9im43jv0lvh6p81";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/gregjones/httpcache";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gregjones/httpcache";
+      rev = "9cad4c3443a7";
+      sha256 = "0wjdwcwqqcx2d5y68qvhg6qyj977il5ijmnn9h9cd6wjbdy0ay6s";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/golang-lru";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/golang-lru";
+      rev = "v0.5.1";
+      sha256 = "13f870cvk161bzjj6x41l45r5x9i1z9r2ymwmvm7768kg08zznpy";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/hpcloud/tail";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hpcloud/tail";
+      rev = "v1.0.0";
+      sha256 = "1njpzc0pi1acg5zx9y6vj9xi6ksbsc5d387rd6904hy6rh2m6kn0";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/imdario/mergo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/imdario/mergo";
+      rev = "v0.3.5";
+      sha256 = "1mvgn89vp39gcpvhiq4n7nw5ipj7fk6h03jgc6fjwgvwvss213pb";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/json-iterator/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/json-iterator/go";
+      rev = "v1.1.8";
+      sha256 = "1kbp9fj6fxfql0ir59zb6v68l4bpwlmk76xm8vaikw1hp6y9bcss";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/jstemmer/go-junit-report";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jstemmer/go-junit-report";
+      rev = "af01ea7f8024";
+      sha256 = "1lp3n94ris12hac02wi31f3whs88lcrzwgdg43a5j6cafg9p1d0s";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/kisielk/errcheck";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kisielk/errcheck";
+      rev = "v1.2.0";
+      sha256 = "0am6g10ipdxw84byscm7shda654882wjcbinq5c4696m6mhi2qrd";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/kisielk/gotool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kisielk/gotool";
+      rev = "v1.0.0";
+      sha256 = "14af2pa0ssyp8bp2mvdw184s5wcysk6akil3wzxmr05wwy951iwn";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/pretty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/pretty";
+      rev = "v0.1.0";
+      sha256 = "18m4pwg2abd0j9cn5v3k2ksk9ig4vlwxmlw9rrglanziv9l967qp";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/pty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/pty";
+      rev = "v1.1.1";
+      sha256 = "0383f0mb9kqjvncqrfpidsf8y6ns5zlrc91c6a74xpyxjwvzl2y6";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/text";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/text";
+      rev = "v0.1.0";
+      sha256 = "1gm5bsl01apvc84bw06hasawyqm4q84vx1pm32wr9jnd7a8vjgj1";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/mailru/easyjson";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mailru/easyjson";
+      rev = "d5b7844b561a";
+      sha256 = "1g84l4wns28xjpn6nl1g33dcj3sfgxlkqqsa6w8fbq2kwyd50xka";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev = "v0.1.7";
+      sha256 = "08y5c01bvyqxraj3wc0di80gbp87178rsshb74x0p3m7wwfv82l3";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev = "v0.0.12";
+      sha256 = "1dfsh27d52wmz0nmmzm2382pfrs2fcijvh6cgir7jbb4pnigr5w4";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-runewidth";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-runewidth";
+      rev = "v0.0.9";
+      sha256 = "1mvlxcdwr0vwp8b2wqs6y7hk72y28sqh03dz5x0xkg48d4y9cplj";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-tty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-tty";
+      rev = "v0.0.3";
+      sha256 = "0d1d63q02pc5k5ga8bw4yjbkrli2769vg237psajsskjirjy53vf";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/modern-go/concurrent";
+    fetch = {
+      type = "git";
+      url = "https://github.com/modern-go/concurrent";
+      rev = "bacd9c7ef1dd";
+      sha256 = "0s0fxccsyb8icjmiym5k7prcqx36hvgdwl588y0491gi18k5i4zs";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/modern-go/reflect2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/modern-go/reflect2";
+      rev = "v1.0.1";
+      sha256 = "06a3sablw53n1dqqbr2f53jyksbxdmmk8axaas4yvnhyfi55k4lf";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/munnerz/goautoneg";
+    fetch = {
+      type = "git";
+      url = "https://github.com/munnerz/goautoneg";
+      rev = "a547fc61f48d";
+      sha256 = "19khhn5xhqv1yp7d6k987gh5w5rhrjnp4p0c6fyrd8z6lzz5h9qi";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/mxk/go-flowrate";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mxk/go-flowrate";
+      rev = "cca7078d478f";
+      sha256 = "0zqs39923ja0yypdmiqk6x8pgmfs3ms5x5sl1dqv9z6zyx2xy541";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/onsi/ginkgo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/onsi/ginkgo";
+      rev = "v1.10.1";
+      sha256 = "033a42h1wzmji57p86igg9whvsbp6nvfdsypskw738ys903n3z4d";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/onsi/gomega";
+    fetch = {
+      type = "git";
+      url = "https://github.com/onsi/gomega";
+      rev = "v1.7.0";
+      sha256 = "09j6wq425wgzzsbwm9ckhfgl2capv3yyqbrf45qyrjwkzm49i02y";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/peterbourgon/diskv";
+    fetch = {
+      type = "git";
+      url = "https://github.com/peterbourgon/diskv";
+      rev = "v2.0.1";
+      sha256 = "1mxpa5aad08x30qcbffzk80g9540wvbca4blc1r2qyzl65b8929b";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/term";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/term";
+      rev = "v1.1.0";
+      sha256 = "0flyj256zv5qc7z3m3s147k46p9whr7hl06zzwgvy2dkjp90ff73";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev = "v1.0.0";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/afero";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/afero";
+      rev = "v1.2.2";
+      sha256 = "0j9r65qgd58324m85lkl49vk9dgwd62g7dwvkfcm3k6i9dc555a9";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev = "v1.0.5";
+      sha256 = "0gpmacngd0gpslnbkzi263f5ishigzgh6pbdv9hp092rnjl4nd31";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/objx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/objx";
+      rev = "v0.1.0";
+      sha256 = "19ynspzjdynbi85xw06mh8ad5j0qa1vryvxjgvbnyrr8rbm4vd8w";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "v1.4.0";
+      sha256 = "187i5g88sxfy4vxpm7dw1gwv29pa2qaq475lxrdh5livh69wqfjb";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "go.opencensus.io";
+    fetch = {
+      type = "git";
+      url = "https://github.com/census-instrumentation/opencensus-go";
+      rev = "v0.21.0";
+      sha256 = "14s0a12xdzjvad0dgksgv8m3hh7nc585abvjkvyk6r67a29lxj6x";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "60c769a6c586";
+      sha256 = "1wy2pg38dz29vf1h48yfqf8m3jqvwnbdw8vkk3ldlj5d8fbbbmv8";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/exp";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/exp";
+      rev = "509febef88a4";
+      sha256 = "02isrh39z8znrp5znplzy0dip2gnrl3jm1355raliyvhnhg04j6q";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/lint";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/lint";
+      rev = "5614ed5bae6f";
+      sha256 = "0fzn0zjv0x92xvfdq3a0v9w5sgkhr7hxkfy9zaqi8i57807z8bnx";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "13f9640d40b9";
+      sha256 = "1ba2767lvklnmfvb9jkwvd4m7z6326gaiz3rgylh795g88hy34g1";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/oauth2";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/oauth2";
+      rev = "0f29369cfe45";
+      sha256 = "06jwpvx0x2gjn2y959drbcir5kd7vg87k0r1216abk6rrdzzrzi2";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev = "cd5d95a43a6e";
+      sha256 = "1nqkyz2y1qvqcma52ijh02s8aiqmkfb95j08f6zcjhbga3ds6hds";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "af09f7315aff";
+      sha256 = "0kr94lzr8ngrc6913j5xh6g4r7g087dbdgnpzi6rjcl0bf8nsr22";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "v0.3.2";
+      sha256 = "0flv9idw0jm5nm8lx25xqanbkqgfiym6619w575p7nrdh0riqwqh";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/time";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/time";
+      rev = "9d24e82272b4";
+      sha256 = "1f5nkr4vys2vbd8wrwyiq2f5wcaahhpxmia85d1gshcbqjqf8dkb";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "e65039ee4138";
+      sha256 = "0c094599cf70wdrms49a3879qkq122pqlp2av444gs2pvc8apdcx";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/api";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/google-api-go-client";
+      rev = "v0.4.0";
+      sha256 = "1hzgrw5wasmcjlqpxsmryddzzw4cwyzf2vx14i9z51v1plwssijm";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/appengine";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/appengine";
+      rev = "v1.5.0";
+      sha256 = "0l7mkdnwhidv8m686x432vmx8z5nqcrr9f46ddgvrxbh4wvyfcll";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/genproto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/go-genproto";
+      rev = "e7d98fc518a7";
+      sha256 = "1cnavkyawwvfc5yl097ygnfy1ac69v4zc02gdfnq1bvgcvgmvnbi";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/grpc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/grpc/grpc-go";
+      rev = "v1.19.0";
+      sha256 = "1znqwpj7ix3dpzx4zch0q70sdl3z5lvbb7v3q4i8sf8kas3yv71v";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/check.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/check.v1";
+      rev = "788fd7840127";
+      sha256 = "0v3bim0j375z81zrpr5qv42knqs0y2qv2vkjiqi5axvb78slki1a";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/fsnotify.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/fsnotify.v1";
+      rev = "v1.4.7";
+      sha256 = "07va9crci0ijlivbb7q57d2rz9h27zgn2fsm60spjsqpdbvyrx4g";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/inf.v0";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/inf.v0";
+      rev = "v0.9.1";
+      sha256 = "00k5iqjcp371fllqxncv7jkf80hn1zww92zm78cclbcn4ybigkng";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/tomb.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/tomb.v1";
+      rev = "dd632973f1e7";
+      sha256 = "1lqmq1ag7s4b3gc3ddvr792c5xb5k6sfn0cchr3i2s7f1c231zjv";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "v2.2.4";
+      sha256 = "11bwj757wi8kdrcnlgfqb8vv2d2xdhlghmyagd19i62khrkchsg2";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "honnef.co/go/tools";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dominikh/go-tools";
+      rev = "3f1c8253044a";
+      sha256 = "0d3vgh0fgfj1z7i648g1s6x2pwxd07sxfjwg1xn3yagr9h06jh3h";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "k8s.io/api";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/api";
+      rev = "v0.17.0";
+      sha256 = "180gijj7nl6pgfgqg6h7rcpxissmq9c3axph8ld7llx0cwmsxdrb";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "k8s.io/apimachinery";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/apimachinery";
+      rev = "v0.17.0";
+      sha256 = "1418y3p2fx7zsf1anpwcma1fqnaymal12d6x33j600jf1y0j9g8i";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "k8s.io/client-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/client-go";
+      rev = "v0.17.0";
+      sha256 = "1v8n92g18xb6b1wvl3p2slm0hbpf8agwdyslqn2wgnwyhhgi0rfg";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "k8s.io/gengo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/gengo";
+      rev = "0689ccc1d7d6";
+      sha256 = "10c0kbm07pzxwdxpsmcgqkcxqxaijyywvwj1rciw6ssfcgx7kdc5";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "k8s.io/klog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/klog";
+      rev = "v1.0.0";
+      sha256 = "1cgannfmldcrcksb2wqdn2b5qabqyxl9r25w9y4qbljw24hhnlvn";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "k8s.io/kube-openapi";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/kube-openapi";
+      rev = "30be4d16710a";
+      sha256 = "13pksn2xzyhrz569zihqy78y9ckn4sf4f4x31w1czfwbs87n00gf";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "k8s.io/utils";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/utils";
+      rev = "e782cd3c129f";
+      sha256 = "19dp1cfqmgwy4m4yyxzbmmzklxnff4ipqknsp7y9yi02q6h4gj7r";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "sigs.k8s.io/structured-merge-diff";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes-sigs/structured-merge-diff";
+      rev = "15d366b2352e";
+      sha256 = "1anrx09ksgrwjwmbrcrk3hx8wyzjaakzmmn36nd23if36nv1xg11";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "sigs.k8s.io/yaml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes-sigs/yaml";
+      rev = "v1.1.0";
+      sha256 = "1p7hvjdr5jsyk7nys1g1pmgnf3ys6n320i6hds85afppk81k01kb";
+      moduleDir = "";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/kubectx/default.nix b/nixpkgs/pkgs/development/tools/kubectx/default.nix
new file mode 100644
index 000000000000..8ddd7685dcfb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubectx/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "kubectx";
+  version = "0.9.4";
+
+  src = fetchFromGitHub {
+    owner = "ahmetb";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-WY0zFt76mvdzk/s2Rzqys8n+DVw6qg7V6Y8JncOUVCM=";
+  };
+
+  vendorSha256 = "sha256-4sQaqC0BOsDfWH3cHy2EMQNMq6qiAcbV+RwxCdcSxsg=";
+
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion completion/*
+  '';
+
+  meta = with lib; {
+    description = "Fast way to switch between clusters and namespaces in kubectl!";
+    license = licenses.asl20;
+    homepage = "https://github.com/ahmetb/kubectx";
+    maintainers = with maintainers; [ jlesquembre ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kubeprompt/default.nix b/nixpkgs/pkgs/development/tools/kubeprompt/default.nix
new file mode 100644
index 000000000000..3624a45f9340
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubeprompt/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubeprompt";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "jlesquembre";
+    repo = pname;
+    rev = version;
+    sha256 = "0ib61af6fwsl35gmid9jj0fp8zxgzrw4qk32r03hxzkh9g7r3kla";
+  };
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X github.com/jlesquembre/kubeprompt/pkg/version.Version=${version}"
+  ];
+
+  vendorSha256 = "089lfkvyf00f05kkmr935jbrddf2c0v7m2356whqnz7ad6a2whsi";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Kubernetes prompt";
+    homepage = "https://github.com/jlesquembre/kubeprompt";
+    license = licenses.epl20;
+    maintainers = with maintainers; [ jlesquembre ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kubepug/default.nix b/nixpkgs/pkgs/development/tools/kubepug/default.nix
new file mode 100644
index 000000000000..82a130181e0c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubepug/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubepug";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "rikatz";
+    repo = "kubepug";
+    rev = "v${version}";
+    sha256 = "sha256-cjL718xTgtYev/lYL24vwZcB+joY3wIY4ixRCwAHQ4E=";
+  };
+
+  vendorSha256 = "0hynxj3q4aa1gx3w4ak56z6j5iplxi2hzqzsjkgz20fy34nfd41s";
+
+  ldflags = [
+    "-s" "-w" "-X=github.com/rikatz/kubepug/version.Version=${src.rev}"
+  ];
+
+  patches = [
+    ./skip-external-network-tests.patch
+  ];
+
+  meta = with lib; {
+    description = "Checks a Kubernetes cluster for objects using deprecated API versions";
+    homepage = "https://github.com/rikatz/kubepug";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mausch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kubepug/skip-external-network-tests.patch b/nixpkgs/pkgs/development/tools/kubepug/skip-external-network-tests.patch
new file mode 100644
index 000000000000..e24aa01ad175
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubepug/skip-external-network-tests.patch
@@ -0,0 +1,12 @@
+diff --git a/pkg/utils/downloader_test.go b/pkg/utils/downloader_test.go
+index b227760..b72dee9 100644
+--- a/pkg/utils/downloader_test.go
++++ b/pkg/utils/downloader_test.go
+@@ -7,6 +7,7 @@ import (
+ )
+ 
+ func TestDownloadSwaggerFile(t *testing.T) {
++    t.Skipf("Nix sandbox does not have networking")
+ 	var tmpdir string
+ 	// Github actions does not have a temporary dir :/
+ 	tmpdir = os.Getenv("RUNNER_TEMP")
diff --git a/nixpkgs/pkgs/development/tools/kubernetes-controller-tools/default.nix b/nixpkgs/pkgs/development/tools/kubernetes-controller-tools/default.nix
new file mode 100644
index 000000000000..e1aacd306738
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubernetes-controller-tools/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "controller-tools";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0hbai8pi59yhgsmmmxk3nghhy9hj3ma98jq2d1k46n46gr64a0q5";
+  };
+
+  vendorSha256 = "061qvq8z98d39vyk1gr46fw5ynxra154s90n3pb7k1q7q45rg76j";
+
+  doCheck = false;
+
+  subPackages = [
+    "cmd/controller-gen"
+    "cmd/type-scaffold"
+    "cmd/helpgen"
+  ];
+
+  meta = with lib; {
+    description = "Tools to use with the Kubernetes controller-runtime libraries";
+    homepage = "https://github.com/kubernetes-sigs/controller-tools";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ michojel ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kubicorn/default.nix b/nixpkgs/pkgs/development/tools/kubicorn/default.nix
new file mode 100644
index 000000000000..706b91aad251
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubicorn/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+with lib;
+
+buildGoPackage rec {
+  pname = "kubicorn";
+  version = "2018-10-13-${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 lib.maintainers; [ offline ];
+    license = lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kubie/default.nix b/nixpkgs/pkgs/development/tools/kubie/default.nix
new file mode 100644
index 000000000000..0bf711a2293d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kubie/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, installShellFiles, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kubie";
+  version = "0.16.0";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "sbstp";
+    repo = "kubie";
+    sha256 = "sha256-loVGMkB3p+xx7xRHdeSOcck+2vhV461VdNgUIpb/3O0=";
+  };
+
+  cargoSha256 = "sha256-BLKcuumF72MPL408+fUS+7MiTYjvSRORKNP2s0I7McI=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  postInstall = ''
+    installShellCompletion completion/kubie.bash
+  '';
+
+  meta = with lib; {
+    description = "Shell independent context and namespace switcher for kubectl";
+    homepage = "https://github.com/sbstp/kubie";
+    license = with licenses; [ zlib ];
+    maintainers = with maintainers; [ illiusdope ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kustomize/3.nix b/nixpkgs/pkgs/development/tools/kustomize/3.nix
new file mode 100644
index 000000000000..aa99256faa84
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kustomize/3.nix
@@ -0,0 +1,40 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kustomize_3";
+  version = "3.10.0";
+  # rev is the commit of the tag, mainly for kustomize version command output
+  rev = "602ad8aa98e2e17f6c9119e027a09757e63c8bec";
+
+  ldflags = let t = "sigs.k8s.io/kustomize/api/provenance"; in [
+    "-s -w"
+    "-X ${t}.version=${version}"
+    "-X ${t}.gitCommit=${rev}"
+  ];
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = "kustomize";
+    rev = "kustomize/v${version}";
+    sha256 = "sha256-ESIykbAKXdv8zM9be0zEJ71rBAzZby0aTg25NlCsIOM=";
+  };
+
+  doCheck = true;
+
+  # avoid finding test and development commands
+  sourceRoot = "source/kustomize";
+
+  vendorSha256 = "sha256-xLeetcmzvpILLLMhMx7oahWLxguFjG3qbYpeeWpFUlw=";
+
+  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 zaninime Chili-Man saschagrunert ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kustomize/default.nix b/nixpkgs/pkgs/development/tools/kustomize/default.nix
new file mode 100644
index 000000000000..ef258b736c95
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kustomize/default.nix
@@ -0,0 +1,41 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kustomize";
+  version = "4.5.2";
+  # rev is the commit of the tag, mainly for kustomize version command output
+  rev = "b2d65ddc98e09187a8e38adc27c30bab078c1dbf";
+
+  ldflags = let t = "sigs.k8s.io/kustomize/api/provenance"; in
+    [
+      "-s"
+      "-X ${t}.version=${version}"
+      "-X ${t}.gitCommit=${rev}"
+    ];
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = pname;
+    rev = "kustomize/v${version}";
+    sha256 = "sha256-l24uKKcTt5b7V/IHjJNMtVce55CEGdZVYlCzjUnEp1A=";
+  };
+
+  doCheck = true;
+
+  # avoid finding test and development commands
+  sourceRoot = "source/kustomize";
+
+  vendorSha256 = "sha256-GR1ohesxjxpMl1B7hWtBUAWWU8X7wHPAKdMoGM5L/VQ=";
+
+  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 Chili-Man saschagrunert ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kustomize/kustomize-sops.nix b/nixpkgs/pkgs/development/tools/kustomize/kustomize-sops.nix
new file mode 100644
index 000000000000..04024dc3acfb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kustomize/kustomize-sops.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kustomize-sops";
+  version = "3.0.1";
+
+  src = fetchFromGitHub {
+    owner = "viaduct-ai";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ZCEgv+2WC1XLDFdRtigkiWu81zLMHvmB8vvIBWN2UYY=";
+  };
+
+  vendorSha256 = "sha256-LFa0s2FBkw97P0CV+9JBmUAjaKVO+RzCX+iWGPUD9iA=";
+
+  installPhase = ''
+    mkdir -p $out/lib/viaduct.ai/v1/ksops-exec/
+    mv $GOPATH/bin/kustomize-sops $out/lib/viaduct.ai/v1/ksops-exec/ksops-exec
+  '';
+
+  # Tests are broken in a nix environment
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A Flexible Kustomize Plugin for SOPS Encrypted Resource";
+    longDescription = ''
+      KSOPS can be used to decrypt any Kubernetes resource, but is most commonly
+      used to decrypt encrypted Kubernetes Secrets and ConfigMaps.
+    '';
+    homepage = "https://github.com/viaduct-ai/kustomize-sops";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ starcraft66 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/kythe/default.nix b/nixpkgs/pkgs/development/tools/kythe/default.nix
new file mode 100644
index 000000000000..f6a4c2e6c1e6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/kythe/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, binutils , fetchurl, ncurses5 }:
+
+stdenv.mkDerivation rec {
+  version = "0.0.30";
+  pname = "kythe";
+
+  src = fetchurl {
+    url = "https://github.com/kythe/kythe/releases/download/v${version}/${pname}-v${version}.tar.gz";
+    sha256 = "12bwhqkxfbkh3mm4wfvqflwhmbzpmlhlfykdpy6h7p9ih9ky8w6r";
+  };
+
+  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 "${lib.makeLibraryPath [ stdenv.cc.cc ncurses5 ]}" $exe
+    done
+    cd ../
+    cp -R ./ $out
+    ln -s $out/tools $out/bin
+  '';
+
+  meta = with 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/lazygit/default.nix b/nixpkgs/pkgs/development/tools/lazygit/default.nix
new file mode 100644
index 000000000000..1902d9e969c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lazygit/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "lazygit";
+  version = "0.33";
+
+  src = fetchFromGitHub {
+    owner = "jesseduffield";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ltkBzhlxgNzioSBnlkBu9UtBHZlxFtnYlUhg/+lV0gc=";
+  };
+
+  vendorSha256 = null;
+  subPackages = [ "." ];
+
+  ldflags = [ "-X main.version=${version}" "-X main.buildSource=nix" ];
+
+  meta = with lib; {
+    description = "Simple terminal UI for git commands";
+    homepage = "https://github.com/jesseduffield/lazygit";
+    changelog = "https://github.com/jesseduffield/lazygit/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fpletz equirosa Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/lc3tools/0001-mangle-configure.patch b/nixpkgs/pkgs/development/tools/lc3tools/0001-mangle-configure.patch
new file mode 100644
index 000000000000..80b5c7d21174
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lc3tools/0001-mangle-configure.patch
@@ -0,0 +1,29 @@
+diff --git a/configure b/configure
+index 46f9af4..dfc1b3e 100755
+--- a/configure
++++ b/configure
+@@ -17,10 +17,11 @@ esac
+ 
+ # Some binaries that we'll need, and the places that we might find them.
+ 
+-binlist="uname flex gcc wish rm cp mkdir chmod sed"
+-pathlist="/bin /usr/bin /usr/local/bin /sw/bin /usr/x116/bin /usr/X11R6/bin"
+-libpathlist="/lib /usr/lib /usr/local/lib"
+-incpathlist="/include /usr/include /usr/local/include"
++IFS=:
++binlist="uname:flex:gcc:wish:rm:cp:mkdir:chmod:sed"
++pathlist=$PATH
++libpathlist=$LIBS
++incpathlist=$INCLUDES
+ 
+ 
+ # Find the binaries (or die trying).
+@@ -55,7 +56,7 @@ case `$uname -s` in
+ 		echo "Configuring for Cygwin..."
+ 		;;
+ 	Linux*) echo "Configuring for Linux..."
+-		OS_SIM_LIBS="-lcurses"
++		# OS_SIM_LIBS="-lcurses"
+ 		;;
+ 	SunOS*)  echo "Configuring for Solaris..."
+ 		OS_SIM_LIBS="-lcurses -lsocket -lnsl"
diff --git a/nixpkgs/pkgs/development/tools/lc3tools/0002-lc3os-path.patch b/nixpkgs/pkgs/development/tools/lc3tools/0002-lc3os-path.patch
new file mode 100644
index 000000000000..413c95e12f64
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lc3tools/0002-lc3os-path.patch
@@ -0,0 +1,21 @@
+diff --git a/lc3sim.c b/lc3sim.c
+index dac7f7a..736fd7c 100644
+--- a/lc3sim.c
++++ b/lc3sim.c
+@@ -665,14 +665,14 @@ init_machine ()
+     bzero (lc3_sym_hash, sizeof (lc3_sym_hash));
+     clear_all_breakpoints ();
+ 
+-    if (read_obj_file (INSTALL_DIR "/lc3os.obj", &os_start, &os_end) == -1) {
++    if (read_obj_file (INSTALL_DIR "/share/lc3tools/lc3os.obj", &os_start, &os_end) == -1) {
+ 	if (gui_mode)
+ 	    puts ("ERR {Failed to read LC-3 OS code.}");
+ 	else
+ 	    puts ("Failed to read LC-3 OS code.");
+ 	show_state_if_stop_visible ();
+     } else {
+-	if (read_sym_file (INSTALL_DIR "/lc3os.sym") == -1) {
++	if (read_sym_file (INSTALL_DIR "/share/lc3tools/lc3os.sym") == -1) {
+ 	    if (gui_mode)
+ 		puts ("ERR {Failed to read LC-3 OS symbols.}");
+ 	    else
diff --git a/nixpkgs/pkgs/development/tools/lc3tools/0003-lc3sim-tk-path.patch b/nixpkgs/pkgs/development/tools/lc3tools/0003-lc3sim-tk-path.patch
new file mode 100644
index 000000000000..38bc9daaf59c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lc3tools/0003-lc3sim-tk-path.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile.def b/Makefile.def
+index 34f7df3..05dc86c 100644
+--- a/Makefile.def
++++ b/Makefile.def
+@@ -155,7 +155,7 @@ dist_lc3sim-tk: lc3sim-tk
+ 
+ lc3sim-tk: lc3sim-tk.def
+ 	${SED} -e 's @@WISH@@ ${WISH} g' \
+-		-e 's*@@LC3_SIM@@*"${INSTALL_DIR}/lc3sim"*g' \
++		-e 's*@@LC3_SIM@@*"${INSTALL_DIR}/bin/lc3sim"*g' \
+ 		-e 's!@@CODE_FONT@@!${CODE_FONT}!g' \
+ 		-e 's!@@BUTTON_FONT@@!${BUTTON_FONT}!g' \
+ 		-e 's!@@CONSOLE_FONT@@!${CONSOLE_FONT}!g' \
diff --git a/nixpkgs/pkgs/development/tools/lc3tools/default.nix b/nixpkgs/pkgs/development/tools/lc3tools/default.nix
new file mode 100644
index 000000000000..3e7f81bb4e7b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/lc3tools/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl, unzip, flex, tk, ncurses, readline }:
+
+stdenv.mkDerivation {
+  pname = "lc3tools";
+  version = "0.12";
+
+  src = fetchurl {
+    url = "https://highered.mheducation.com/sites/dl/free/0072467509/104652/lc3tools_v12.zip";
+    hash = "sha256-PTM0ole8pHiJmUaahjPwcBQY8/hVVgQhADZ4bSABt3I=";
+  };
+
+  patches = [
+    # the original configure looks for things in the FHS path
+    # I have modified it to take environment vars
+    ./0001-mangle-configure.patch
+
+    # lc3sim looks for the LC3 OS in $out/share/lc3tools instead of $out
+    ./0002-lc3os-path.patch
+
+    # lc3sim-tk looks for lc3sim in $out/bin instead of $out
+    ./0003-lc3sim-tk-path.patch
+  ];
+
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [ flex tk ncurses readline ];
+
+  # lumetta published this a while ago but handrolled his configure
+  # jank in the original packaging makes this necessary:
+  LIBS = "${flex}/lib:${ncurses}/lib:${readline}/lib";
+  INCLUDES = "${flex}/include:${ncurses}/include:${readline}/include";
+
+  # it doesn't take `--prefix`
+  prefixKey = "--installdir ";
+
+  postInstall = ''
+    mkdir -p $out/{bin,share/lc3tools}
+
+    mv -t $out/share/lc3tools $out/{COPYING,NO_WARRANTY,README} $out/lc3os*
+    mv -t $out/bin $out/lc3*
+  '';
+
+  meta = with lib; {
+    description = "Toolchain and emulator for the LC-3 architecture";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ anna328p ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/leaps/default.nix b/nixpkgs/pkgs/development/tools/leaps/default.nix
new file mode 100644
index 000000000000..934881b6781c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/leaps/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "leaps";
+  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 lib.maintainers; [ qknight ];
+    platforms = 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..ee06659c72ec
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/leaps/deps.nix
@@ -0,0 +1,165 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    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://github.com/alexcesaro/statsd";
+      rev =  "7fea3f0d2fab1ad973e641e51dba45443a311a90";
+      sha256 = "02jdx68vicwsgabrnwgg1rvc45rinyh8ikinqgbqc56c5hkx3brj";
+    };
+  }
+  {
+    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/librarian-puppet-go/default.nix b/nixpkgs/pkgs/development/tools/librarian-puppet-go/default.nix
new file mode 100644
index 000000000000..6144b533d6de
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/librarian-puppet-go/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+
+buildGoPackage rec {
+  pname = "librarian-puppet-go";
+  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..5a11db8b3b94
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/libsigrok/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, pkg-config, libzip, glib, libusb1, libftdi1, check
+, libserialport, librevisa, doxygen, glibmm, python
+, version ? "0.5.1", sha256 ? "171b553dir5gn6w4f7n37waqk62nq2kf1jykx4ifjacdz5xdw3z4", doInstallCheck ? true
+}:
+
+stdenv.mkDerivation rec {
+  inherit version doInstallCheck;
+  pname = "libsigrok";
+
+  src = fetchurl {
+    url = "https://sigrok.org/download/source/${pname}/${pname}-${version}.tar.gz";
+    inherit sha256;
+  };
+
+  firmware = fetchurl {
+    url = "https://sigrok.org/download/binary/sigrok-firmware-fx2lafw/sigrok-firmware-fx2lafw-bin-0.1.6.tar.gz";
+    sha256 = "14sd8xqph4kb109g073daiavpadb20fcz7ch1ipn0waz7nlly4sw";
+  };
+
+  nativeBuildInputs = [ doxygen pkg-config python ];
+  buildInputs = [ libzip glib libusb1 libftdi1 check libserialport librevisa glibmm ];
+
+  strictDeps = true;
+
+  postInstall = ''
+    mkdir -p "$out/share/sigrok-firmware/"
+    tar --strip-components=1 -xvf "${firmware}" -C "$out/share/sigrok-firmware/"
+  '';
+
+  installCheckPhase = ''
+    # assert that c++ bindings are included
+    # note that this is only true for modern (>0.5) versions; the 0.3 series does not have these
+    [[ -f $out/include/libsigrokcxx/libsigrokcxx.hpp ]] \
+      || { echo 'C++ bindings were not generated; check configure output'; false; }
+  '';
+
+  meta = with lib; {
+    description = "Core library of the sigrok signal analysis software suite";
+    homepage = "https://sigrok.org/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with 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..06b5f5c35bba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/libsigrokdecode/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, python3, check }:
+
+stdenv.mkDerivation rec {
+  pname = "libsigrokdecode";
+  version = "0.5.3";
+
+  src = fetchurl {
+    url = "https://sigrok.org/download/source/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1h1zi1kpsgf6j2z8j8hjpv1q7n49i3fhqjn8i178rka3cym18265";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib python3 ];
+  checkInputs = [ check ];
+  doCheck = true;
+
+  meta = with 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..88b2f63fd5a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/Literate/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchgit, ldc, dub }:
+
+stdenv.mkDerivation {
+  pname = "Literate";
+  version = "unstable-2021-01-22";
+
+  src = fetchgit {
+    url = "https://github.com/zyedidia/Literate.git";
+    rev = "7004dffec0cff3068828514eca72172274fd3f7d";
+    sha256 = "0x4xgrdskybaa7ssv81grmwyc1k167v3nwj320jvp5l59xxlbcvs";
+  };
+
+  buildInputs = [ ldc dub ];
+
+  installPhase = "install -D bin/lit $out/bin/lit";
+
+  meta = with 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..caacc04903e6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/eweb/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, python3, asciidoc }:
+
+stdenv.mkDerivation rec {
+  pname = "eweb";
+  version = "9.10";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/eweb/${pname}-${version}.tar.bz2";
+    sha256 = "1xy7vm2sj5q6s620fm25klmnwnz9xkrxmx4q2f8h6c85ydisayd5";
+  };
+
+  buildInputs = [ python3 asciidoc ];
+
+  installPhase = ''
+    install -d $out/bin $out/share/doc/${pname}-${version}
+    cp etangle.py $out/bin
+    cp etangle.w etangle.html $out/share/doc/${pname}-${version}
+  '';
+
+  meta = with lib; {
+    homepage = "http://eweb.sourceforge.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..56d53104a206
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/funnelweb/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "funnelweb";
+  version = "3.20";
+
+  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 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/md-tangle/default.nix b/nixpkgs/pkgs/development/tools/literate-programming/md-tangle/default.nix
new file mode 100644
index 000000000000..fd895c96c047
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/md-tangle/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "md-tangle";
+  version = "1.3.1";
+
+  # By some strange reason, fetchPypi fails miserably
+  src = fetchFromGitHub {
+    owner = "joakimmj";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-cUME2AHK/Fva+1TSTE6hNu0SE/V1FOwcSxWF0+iZhS4=";
+  };
+
+  # Pure Python application, uses only standard modules and comes without
+  # testing suite
+  doCheck = false;
+
+  meta = with lib;{
+    homepage = "https://github.com/joakimmj/md-tangle/";
+    description = "Generates (\"tangles\") source code from Markdown documents";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+  };
+}
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..6847aff097c8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/noweb/default.nix
@@ -0,0 +1,83 @@
+{ lib, stdenv, fetchFromGitHub, nawk, groff, icon-lang, useIcon ? true }:
+
+lib.fix (noweb: stdenv.mkDerivation rec {
+  pname = "noweb";
+  version = "2.12";
+
+  src = fetchFromGitHub {
+    owner = "nrnrnr";
+    repo = "noweb";
+    rev = "v${builtins.replaceStrings ["."] ["_"] version}";
+    sha256 = "1160i2ghgzqvnb44kgwd6s3p4jnk9668rmc15jlcwl7pdf3xqm95";
+  };
+
+  sourceRoot = "source/src";
+
+  patches = [
+    # Remove FAQ
+    ./no-FAQ.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace Makefile --replace 'strip' '${stdenv.cc.targetPrefix}strip'
+  '';
+
+  nativeBuildInputs = [ groff ] ++ lib.optionals useIcon [ icon-lang ];
+  buildInputs = [ nawk ];
+
+  preBuild = ''
+    mkdir -p "$out/lib/noweb"
+  '';
+
+  makeFlags = lib.optionals useIcon [
+    "LIBSRC=icon"
+    "ICONC=icont"
+  ] ++ [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  preInstall = ''
+    mkdir -p "$tex/tex/latex/noweb"
+    installFlagsArray+=(                                   \
+        "BIN=${placeholder "out"}/bin"                     \
+        "ELISP=${placeholder "out"}/share/emacs/site-lisp" \
+        "LIB=${placeholder "out"}/lib/noweb"               \
+        "MAN=${placeholder "out"}/share/man"               \
+        "TEXINPUTS=${placeholder "tex"}/tex/latex/noweb"   \
+    )
+  '';
+
+  installTargets = [ "install-code" "install-tex" "install-elisp" ];
+
+  postInstall = ''
+    substituteInPlace "$out/bin/cpif" --replace "PATH=/bin:/usr/bin" ""
+
+    for f in $out/bin/no{index,roff,roots,untangle,web} \
+             $out/lib/noweb/to{ascii,html,roff,tex} \
+             $out/lib/noweb/{bt,empty}defn \
+             $out/lib/noweb/{noidx,pipedocs,unmarkup}; do
+        # NOTE: substituteInPlace breaks Icon binaries, so make sure the script
+        #       uses (n)awk before calling.
+        if grep -q nawk "$f"; then
+            substituteInPlace "$f" --replace "nawk" "${nawk}/bin/nawk"
+        fi
+    done
+
+    # HACK: This is ugly, but functional.
+    PATH=$out/bin:$PATH make -BC xdoc
+    make "''${installFlagsArray[@]}" install-man
+
+    ln -s "$tex" "$out/share/texmf"
+  '';
+
+  outputs = [ "out" "tex" ];
+
+  tlType = "run";
+  passthru.pkgs = [ noweb.tex ];
+
+  meta = with lib; {
+    description = "A simple, extensible literate-programming tool";
+    homepage = "https://www.cs.tufts.edu/~nr/noweb";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ yurrriq ];
+    platforms = with platforms; linux ++ darwin;
+  };
+})
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..2fa601d35c83
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/noweb/no-FAQ.patch
@@ -0,0 +1,11 @@
+--- a/Makefile	2006-06-12 22:14:20.000000000 +0200
++++ b/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..37deaacb216c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/literate-programming/nuweb/default.nix
@@ -0,0 +1,38 @@
+{lib, stdenv, fetchurl, tex}:
+
+stdenv.mkDerivation rec {
+
+  pname = "nuweb";
+  version = "1.60";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/nuweb/${pname}-${version}.tar.gz";
+    sha256 = "08xmwq48biy2c1fr8wnyknyvqs9jfsj42cb7fw638xqv35f0xxvl";
+  };
+
+  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/${pname}-${version} $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/${pname}-${version}
+  '';
+
+  meta = with lib; {
+    description = "A simple literate programming tool";
+    homepage = "http://nuweb.sourceforge.net";
+    license = licenses.free;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
+# TODO: nuweb.el Emacs integration
diff --git a/nixpkgs/pkgs/development/tools/luaformatter/default.nix b/nixpkgs/pkgs/development/tools/luaformatter/default.nix
new file mode 100644
index 000000000000..00d96a687a63
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/luaformatter/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, substituteAll, antlr4, libargs, catch2, cmake, libyamlcpp }:
+
+stdenv.mkDerivation rec {
+  pname = "luaformatter";
+  version = "1.3.6";
+
+  src = fetchFromGitHub {
+    owner = "Koihik";
+    repo = "LuaFormatter";
+    rev = version;
+    sha256 = "14l1f9hrp6m7z3cm5yl0njba6gfixzdirxjl8nihp9val0685vm0";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-lib-paths.patch;
+      antlr4RuntimeCpp = antlr4.runtime.cpp.dev;
+      inherit libargs catch2 libyamlcpp;
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ antlr4.runtime.cpp libyamlcpp ];
+
+  meta = with lib; {
+    description = "Code formatter for Lua";
+    homepage = "https://github.com/Koihik/LuaFormatter";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ figsoda SuperSandro2000 ];
+    mainProgram = "lua-format";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/luaformatter/fix-lib-paths.patch b/nixpkgs/pkgs/development/tools/luaformatter/fix-lib-paths.patch
new file mode 100644
index 000000000000..fce2347d8e0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/luaformatter/fix-lib-paths.patch
@@ -0,0 +1,67 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4a21b94..0ac7911 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -67,10 +67,10 @@ endif()
+ 
+ include_directories(
+   ${PROJECT_SOURCE_DIR}/generated/
+-  ${PROJECT_SOURCE_DIR}/third_party/
+-  ${PROJECT_SOURCE_DIR}/third_party/Catch2/single_include
+-  ${PROJECT_SOURCE_DIR}/third_party/yaml-cpp/include
+-  ${PROJECT_SOURCE_DIR}/third_party/antlr4/runtime/Cpp/runtime/src
++  @libargs@/include
++  @catch2@/include
++  @libyamlcpp@/include
++  @antlr4RuntimeCpp@/include/antlr4-runtime
+   ${PROJECT_SOURCE_DIR}/src/
+   )
+ 
+@@ -92,9 +92,6 @@ file(GLOB_RECURSE yaml-cpp-src
+   ${PROJECT_SOURCE_DIR}/third_party/yaml-cpp/src/*.cpp
+   )
+ 
+-add_library (antlr4-cpp-runtime ${antlr4-cpp-src})
+-add_library (yaml-cpp ${yaml-cpp-src})
+-
+ add_executable(lua-format ${src_dir} src/main.cpp)
+ 
+ if(WIN32)
+@@ -104,7 +101,7 @@ endif()
+ 
+ set_target_properties(lua-format PROPERTIES LINKER_LANGUAGE CXX)
+ 
+-target_link_libraries(lua-format yaml-cpp antlr4-cpp-runtime ${extra-libs})
++target_link_libraries(lua-format yaml-cpp antlr4-runtime ${extra-libs})
+ 
+ install(TARGETS lua-format
+   RUNTIME DESTINATION bin
+@@ -135,7 +132,7 @@ if(BUILD_TESTS)
+   endif()
+ 
+   target_compile_definitions(lua-format-test PUBLIC PROJECT_PATH="${PROJECT_SOURCE_DIR}")
+-  target_link_libraries(lua-format-test yaml-cpp antlr4-cpp-runtime ${extra-libs})
++  target_link_libraries(lua-format-test yaml-cpp antlr4-runtime ${extra-libs})
+ 
+   add_test(NAME args COMMAND lua-format-test [args])
+   add_test(NAME config COMMAND lua-format-test [config])
+diff --git a/src/main.cpp b/src/main.cpp
+index 38962a2..332aad6 100644
+--- a/src/main.cpp
++++ b/src/main.cpp
+@@ -1,4 +1,4 @@
+-#include <args/args.hxx>
++#include <args.hxx>
+ #include <cstdlib>
+ #include <fstream>
+ #include <iostream>
+diff --git a/test/test_args.cpp b/test/test_args.cpp
+index 69a5746..b988d00 100644
+--- a/test/test_args.cpp
++++ b/test/test_args.cpp
+@@ -1,4 +1,4 @@
+-#include <args/args.hxx>
++#include <args.hxx>
+ #include <catch2/catch.hpp>
+ #include <iostream>
+ #include <tuple>
diff --git a/nixpkgs/pkgs/development/tools/makerpm/default.nix b/nixpkgs/pkgs/development/tools/makerpm/default.nix
new file mode 100644
index 000000000000..5b7fc83df407
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/makerpm/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, zlib, libarchive, openssl }:
+
+stdenv.mkDerivation rec {
+  version = "1.0";
+  pname = "makerpm";
+
+  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 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..06cd23e40f4b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/maligned/default.nix
@@ -0,0 +1,30 @@
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  pname = "maligned-unstable";
+  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/mani/default.nix b/nixpkgs/pkgs/development/tools/mani/default.nix
new file mode 100644
index 000000000000..aa047c2471c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mani/default.nix
@@ -0,0 +1,47 @@
+{ buildGoModule, fetchFromGitHub, lib, installShellFiles, git, makeWrapper}:
+
+buildGoModule rec {
+  pname = "mani";
+  version = "0.12.2";
+
+  src = fetchFromGitHub {
+    owner = "alajmo";
+    repo = "mani";
+    rev = "v${version}";
+    sha256 = "sha256-sjudHGqSCgwafyT8alrGvTdC3yM2zmbRcYshxSm23Ko=";
+  };
+
+  vendorSha256 = "sha256-NnXQAf8m2cGLvwSOzQWXffiG1zyVqDPQnGAeqe7EUHY=";
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  ldflags = [ "-s" "-w" "-X github.com/alajmo/mani/cmd.version=${version}" ];
+
+  postInstall = ''
+    installShellCompletion --cmd mani \
+      --bash <($out/bin/mani completion bash) \
+      --fish <($out/bin/mani completion fish) \
+      --zsh <($out/bin/mani completion zsh)
+
+    wrapProgram $out/bin/mani \
+      --prefix PATH : ${lib.makeBinPath [ git ]}
+  '';
+
+  # Skip tests
+  # The repo's test folder has a README.md with detailed information. I don't
+  # know how to wrap the dependencies for these integration tests so skip for now.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "CLI tool to help you manage multiple repositories";
+    longDescription = ''
+      mani is a CLI tool that helps you manage multiple repositories. It's useful
+      when you are working with microservices, multi-project systems, many
+      libraries or just a bunch of repositories and want a central place for
+      pulling all repositories and running commands over them.
+    '';
+    homepage = "https://manicli.com/";
+    changelog = "https://github.com/alajmo/mani/releases/tag/v${version}";
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/manul/default.nix b/nixpkgs/pkgs/development/tools/manul/default.nix
new file mode 100644
index 000000000000..377cd2856df5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/manul/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage {
+  pname = "manul";
+  version = "unstable-2016-09-30";
+
+  goPackagePath = "github.com/kovetskiy/manul";
+  excludedPackages = "tests";
+
+  src = fetchFromGitHub {
+    owner = "kovetskiy";
+    repo = "manul";
+    rev = "7bddb5404b9ecc66fd28075bb899c2d6dc7a1c51";
+    sha256 = "06kglxdgj1dfpc9bdnvhsh8z0c1pdbmwmfx4km01wpppzk06dnvm";
+  };
+
+  deleteVendor = true;
+  goDeps = ./deps.nix;
+
+  meta = with 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/mars-mips/default.nix b/nixpkgs/pkgs/development/tools/mars-mips/default.nix
new file mode 100644
index 000000000000..fa98ab9da8f1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mars-mips/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenvNoCC, fetchurl, makeWrapper, copyDesktopItems, makeDesktopItem, unzip, imagemagick, jre }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "mars-mips";
+  version = "4.5";
+
+  src = fetchurl {
+    url = "https://courses.missouristate.edu/KenVollmar/MARS/MARS_${lib.replaceStrings ["."] ["_"] version}_Aug2014/Mars${lib.replaceStrings ["."] ["_"] version}.jar";
+    sha256 = "15kh1fahkkbbf4wvb6ijzny4fi5dh4pycxyzp5325dm2ddkhnd5c";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper copyDesktopItems unzip imagemagick ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      desktopName = "MARS";
+      exec = "mars-mips";
+      icon = "mars-mips";
+      comment = "An IDE for programming in MIPS assembly language";
+      categories = [ "Development" "IDE" ];
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    export JAR=$out/share/java/${pname}/${pname}.jar
+    install -D $src $JAR
+    makeWrapper ${jre}/bin/java $out/bin/${pname} \
+      --add-flags "-jar $JAR"
+
+    unzip ${src} images/MarsThumbnail.gif
+    mkdir -p $out/share/pixmaps
+    convert images/MarsThumbnail.gif $out/share/pixmaps/mars-mips.png
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "An IDE for programming in MIPS assembly language intended for educational-level use";
+    homepage = "https://courses.missouristate.edu/KenVollmar/MARS/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mask/default.nix b/nixpkgs/pkgs/development/tools/mask/default.nix
new file mode 100644
index 000000000000..ed1b80787c4e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mask/default.nix
@@ -0,0 +1,25 @@
+{ fetchFromGitHub, lib, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mask";
+  version = "0.11.1";
+
+  src = fetchFromGitHub {
+    owner = "jakedeichert";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-qRN9M/DxkxcF1/dmYqmf3qB8yHzuaN3LRENy1ehgg0c=";
+  };
+
+  cargoSha256 = "sha256-7ts63n9aGtaK8INBh11TShOQCVpV+82VADmNbKURv+g=";
+
+  # tests require mask to be installed
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A CLI task runner defined by a simple markdown file";
+    homepage = "https://github.com/jakedeichert/mask";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
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..12e7d1915477
--- /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; [ ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/mblock-mlink/default.nix b/nixpkgs/pkgs/development/tools/mblock-mlink/default.nix
new file mode 100644
index 000000000000..f43cc683c320
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mblock-mlink/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchurl, dpkg, makeWrapper, autoPatchelfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "mblock-mlink";
+  version = "1.2.0";
+
+  src = fetchurl {
+    url = "https://dl.makeblock.com/mblock5/linux/mLink-${version}-amd64.deb";
+    sha256 = "sha256-KLxj81ZjbEvhhaz0seNB4WXX5ybeZ7/WcT1dGfdWle0=";
+  };
+
+  unpackPhase = ''
+    ${dpkg}/bin/dpkg -x $src $out
+  '';
+
+  buildInputs = [
+    stdenv.cc.cc.lib
+  ];
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+  ];
+
+  installPhase = ''
+    mv $out/usr/local/makeblock $out/usr/makeblock
+    rmdir $out/usr/local
+    mkdir -p $out/bin
+    echo $out/usr/makeblock/mLink/mnode $out/usr/makeblock/mLink/app.js > $out/bin/mlink
+    chmod +x $out/bin/mlink
+  '';
+
+  meta = with lib; {
+    description = "Driver for mBlock web version";
+    homepage = "https://mblock.makeblock.com/en-us/download/";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = [ maintainers.mausch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mdk/default.nix b/nixpkgs/pkgs/development/tools/mdk/default.nix
new file mode 100644
index 000000000000..9c92764fdaf5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mdk/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, intltool, pkg-config, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "gnu-mdk";
+  version = "1.3.0";
+  src = fetchurl {
+    url = "mirror://gnu/gnu/mdk/v${version}/mdk-${version}.tar.gz";
+    sha256 = "0bhk3c82kyp8167h71vdpbcr852h5blpnwggcswqqwvvykbms7lb";
+  };
+  nativeBuildInputs = [ pkg-config ];
+  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 = lib.licenses.gpl3;
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/metal-cli/default.nix b/nixpkgs/pkgs/development/tools/metal-cli/default.nix
new file mode 100644
index 000000000000..a52a2a141c39
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/metal-cli/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "metal-cli";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "equinix";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-PsTQuEbo1ReWwZV4D14mEGsU99j49kleiL/6Xyk+g9s=";
+  };
+
+  ldflags = [
+    "-X github.com/equinix/metal-cli/cmd.Version=${version}"
+  ];
+
+  vendorSha256 = "sha256-F8d5i9jvjY11Pv6w0ZXI3jr0Wix++B/w9oRTuJGpQfE=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Official Equinix Metal CLI";
+    homepage = "https://github.com/equinix/metal-cli/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne nshalman ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/metals/default.nix b/nixpkgs/pkgs/development/tools/metals/default.nix
new file mode 100644
index 000000000000..a4fd0ee23380
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/metals/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, lib, coursier, jdk, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "metals";
+  version = "0.11.2";
+
+  deps = stdenv.mkDerivation {
+    name = "${pname}-deps-${version}";
+    buildCommand = ''
+      export COURSIER_CACHE=$(pwd)
+      ${coursier}/bin/cs fetch org.scalameta:metals_2.12:${version} \
+        -r bintray:scalacenter/releases \
+        -r sonatype:snapshots > deps
+      mkdir -p $out/share/java
+      cp -n $(< deps) $out/share/java/
+    '';
+    outputHashMode = "recursive";
+    outputHashAlgo = "sha256";
+    outputHash     = "sha256-sriiHgKs2hC8inBGWuLM9qFfGgtcYqKHh0VZWNmg51U=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jdk deps ];
+
+  dontUnpack = true;
+
+  extraJavaOpts = "-XX:+UseG1GC -XX:+UseStringDeduplication -Xss4m -Xms100m";
+
+  installPhase = ''
+    mkdir -p $out/bin
+
+    # This variant is not targeted at any particular client, clients are
+    # expected to declare their supported features in initialization options.
+    makeWrapper ${jre}/bin/java $out/bin/metals \
+      --prefix PATH : ${lib.makeBinPath [ jdk ]} \
+      --add-flags "${extraJavaOpts} -cp $CLASSPATH scala.meta.metals.Main"
+
+    # Further variants targeted at clients with featuresets pre-set.
+    makeWrapper ${jre}/bin/java $out/bin/metals-emacs \
+      --prefix PATH : ${lib.makeBinPath [ jdk ]} \
+      --add-flags "${extraJavaOpts} -Dmetals.client=emacs -cp $CLASSPATH scala.meta.metals.Main"
+
+    makeWrapper ${jre}/bin/java $out/bin/metals-vim \
+      --prefix PATH : ${lib.makeBinPath [ jdk ]} \
+      --add-flags "${extraJavaOpts} -Dmetals.client=coc.nvim -cp $CLASSPATH scala.meta.metals.Main"
+
+    makeWrapper ${jre}/bin/java $out/bin/metals-vim-lsc \
+      --prefix PATH : ${lib.makeBinPath [ jdk ]} \
+      --add-flags "${extraJavaOpts} -Dmetals.client=vim-lsc -cp $CLASSPATH scala.meta.metals.Main"
+
+    makeWrapper ${jre}/bin/java $out/bin/metals-sublime \
+      --prefix PATH : ${lib.makeBinPath [ jdk ]} \
+      --add-flags "${extraJavaOpts} -Dmetals.client=sublime -cp $CLASSPATH scala.meta.metals.Main"
+  '';
+
+  meta = with lib; {
+    homepage = "https://scalameta.org/metals/";
+    license = licenses.asl20;
+    description = "Work-in-progress language server for Scala";
+    maintainers = with maintainers; [ fabianhjr tomahna ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/micronaut/default.nix b/nixpkgs/pkgs/development/tools/micronaut/default.nix
new file mode 100644
index 000000000000..1139215fbf85
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/micronaut/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchzip, jdk, makeWrapper, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "micronaut";
+  version = "1.3.7";
+
+  src = fetchzip {
+    url = "https://github.com/micronaut-projects/micronaut-core/releases/download/v${version}/${pname}-${version}.zip";
+    sha256 = "1f9fhp10fdm18g33kxl70l6l3x1k8p81h2c3zahjmhlg0sam78zw";
+  };
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+    rm bin/mn.bat
+    cp -r . $out
+    wrapProgram $out/bin/mn \
+      --prefix JAVA_HOME : ${jdk}
+    installShellCompletion --bash --name mn.bash bin/mn_completion
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Modern, JVM-based, full-stack framework for building microservice applications";
+    longDescription = ''
+      Micronaut is a modern, JVM-based, full stack microservices framework
+      designed for building modular, easily testable microservice applications.
+      Reflection-based IoC frameworks load and cache reflection data for
+      every single field, method, and constructor in your code, whereas with
+      Micronaut, your application startup time and memory consumption are
+      not bound to the size of your codebase.
+    '';
+    homepage = "https://micronaut.io/";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ moaxcp ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/minizinc/default.nix b/nixpkgs/pkgs/development/tools/minizinc/default.nix
new file mode 100644
index 000000000000..131c899dcfb9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/minizinc/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, cmake, flex, bison }:
+stdenv.mkDerivation rec {
+  pname = "minizinc";
+  version = "2.6.1";
+
+  nativeBuildInputs = [ cmake flex bison ];
+
+  src = fetchFromGitHub {
+    owner = "MiniZinc";
+    repo = "libminizinc";
+    rev = version;
+    sha256 = "sha256-JCR2wvtMNyHBIIqrH5eBc0CIOVyo8mnPUZXtwjJt3sw=";
+  };
+
+  meta = with lib; {
+    homepage = "https://www.minizinc.org/";
+    description = "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.unix;
+    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..8c2756f801ee
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/minizinc/ide.nix
@@ -0,0 +1,41 @@
+{ lib, mkDerivation, fetchFromGitHub, qtbase, qtwebengine, qtwebkit, qmake, minizinc }:
+mkDerivation rec {
+  pname = "minizinc-ide";
+  version = "2.5.5";
+
+  nativeBuildInputs = [ qmake ];
+  buildInputs = [ qtbase qtwebengine qtwebkit ];
+
+  src = fetchFromGitHub {
+    owner = "MiniZinc";
+    repo = "MiniZincIDE";
+    rev = version;
+    sha256 = "sha256-0U3KFRDam8psbCaEOcrwqzICAy1oBgo8SFEiR/PMqZk=";
+    fetchSubmodules = true;
+  };
+
+  sourceRoot = "source/MiniZincIDE";
+
+  dontWrapQtApps = true;
+
+  postInstall = ''
+    wrapProgram $out/bin/MiniZincIDE --prefix PATH ":" ${lib.makeBinPath [ minizinc ]}
+  '';
+
+  meta = with 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..c4dda95a7f25
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/abi-compliance-checker/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, ctags, perl, binutils, abi-dumper }:
+
+stdenv.mkDerivation rec {
+  pname = "abi-compliance-checker";
+  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 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..6dd2bf41ba6f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/abi-dumper/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, ctags, perl, elfutils, vtable-dumper }:
+
+stdenv.mkDerivation rec {
+  pname = "abi-dumper";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "lvc";
+    repo = "abi-dumper";
+    rev = version;
+    sha256 = "1i00rfnddrrb9lb1l6ib19g3a76pyasl9lb7rqz2p998gav1gjp2";
+  };
+
+  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 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/act/default.nix b/nixpkgs/pkgs/development/tools/misc/act/default.nix
new file mode 100644
index 000000000000..43bcaa57309d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/act/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "act";
+  version = "0.2.25";
+
+  src = fetchFromGitHub {
+    owner = "nektos";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Eo5uWBLriYa7tLpPMa34+l6BYQe9useL1tN9gqUSt0k=";
+  };
+
+  vendorSha256 = "sha256-1v87WcQoVyTyCStiMAoThidIMRqJwdsYNF987kQp5YM=";
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  meta = with lib; {
+    description = "Run your GitHub Actions locally";
+    homepage = "https://github.com/nektos/act";
+    changelog = "https://github.com/nektos/act/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne SuperSandro2000 ];
+  };
+}
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..a2af61fb6a16
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/arcanist/default.nix
@@ -0,0 +1,81 @@
+{ bison
+, cacert
+, fetchFromGitHub
+, flex
+, php
+, lib, stdenv
+, installShellFiles
+}:
+
+# Make a custom wrapper. If `wrapProgram` is used, arcanist thinks .arc-wrapped is being
+# invoked and complains about it being an unknown toolset. We could use `makeWrapper`, but
+# then we’d need to still craft a script that does the `php libexec/arcanist/bin/...` dance
+# anyway... So just do everything at once.
+let makeArcWrapper = toolset: ''
+  cat << WRAPPER > $out/bin/${toolset}
+  #!$shell -e
+  export PATH='${php}/bin/'\''${PATH:+':'}\$PATH
+  exec ${php}/bin/php $out/libexec/arcanist/bin/${toolset} "\$@"
+  WRAPPER
+  chmod +x $out/bin/${toolset}
+'';
+
+in
+stdenv.mkDerivation {
+  pname = "arcanist";
+  version = "20200711";
+
+  src = fetchFromGitHub {
+    owner = "phacility";
+    repo = "arcanist";
+    rev = "2565cc7b4d1dbce6bc7a5b3c4e72ae94be4712fe";
+    sha256 = "0jiv4aj4m5750dqw9r8hizjkwiyxk4cg4grkr63sllsa2dpiibxw";
+  };
+
+  buildInputs = [ php ];
+
+  nativeBuildInputs = [ bison flex installShellFiles ];
+
+  postPatch = lib.optionalString stdenv.isAarch64 ''
+    substituteInPlace support/xhpast/Makefile \
+      --replace "-minline-all-stringops" ""
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+    make cleanall -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES
+    make xhpast   -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin $out/libexec
+    make install  -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES
+    make cleanall -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES
+    cp -R . $out/libexec/arcanist
+    ln -sf ${cacert}/etc/ssl/certs/ca-bundle.crt $out/libexec/arcanist/resources/ssl/default.pem
+
+    ${makeArcWrapper "arc"}
+    ${makeArcWrapper "phage"}
+
+    $out/bin/arc shell-complete --generate --
+    installShellCompletion --cmd arc --bash $out/libexec/arcanist/support/shell/rules/bash-rules.sh
+    installShellCompletion --cmd phage --bash $out/libexec/arcanist/support/shell/rules/bash-rules.sh
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/arc help diff -- > /dev/null
+    $out/bin/phage help alias -- > /dev/null
+  '';
+
+  meta = {
+    description = "Command line interface to Phabricator";
+    homepage = "http://phabricator.org";
+    license = lib.licenses.asl20;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/argbash/default.nix b/nixpkgs/pkgs/development/tools/misc/argbash/default.nix
new file mode 100644
index 000000000000..571050508146
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/argbash/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, runtimeShell, python3Packages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "argbash";
+
+  version = "2.10.0";
+
+  src = fetchFromGitHub {
+    owner = "matejak";
+    repo = "argbash";
+    rev = version;
+    sha256 = "1xdhpbnc0xjv6ydcm122hhdjcl77jhiqnccjfqjp3cd1lfmzvg8v";
+  };
+
+  sourceRoot = "source/resources";
+
+  postPatch = ''
+    chmod -R +w ..
+    patchShebangs ..
+    substituteInPlace Makefile \
+      --replace '/bin/bash' "${runtimeShell}"
+  '';
+
+  nativeBuildInputs = [ autoconf python3Packages.docutils makeWrapper ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/argbash \
+      --prefix PATH : '${autoconf}/bin'
+  '';
+
+  meta = with lib; {
+    description = "Bash argument parsing code generator";
+    homepage = "https://argbash.io/";
+    license = licenses.free; # custom license.  See LICENSE in source repo.
+    maintainers = with maintainers; [ rencire ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/asls/default.nix b/nixpkgs/pkgs/development/tools/misc/asls/default.nix
new file mode 100644
index 000000000000..bccda0185036
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/asls/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv
+, fetchurl
+, erlangR22
+}:
+
+stdenv.mkDerivation rec {
+  pname = "asls";
+  version = "0.5.1";
+
+  src = fetchurl {
+    url = "https://github.com/saulecabrera/asls/releases/download/v${version}/bin.tar.gz";
+    sha256 = "05kp44p4q4sdykfw0b4k9j3qdp0qvwgjbs48ncmnd0ass0xrmi3s";
+  };
+
+  buildInputs = [ erlangR22 ];
+  installPhase = "install -Dm755 -t $out/bin asls";
+
+  meta = with lib; {
+    description = "AssemblyScript Language Server";
+    homepage = "https://github.com/saulecabrera/asls";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ saulecabrera ];
+  };
+}
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..4ce8c1edffd4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/astyle/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, lib, fetchurl, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "astyle";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}_${version}_linux.tar.gz";
+    sha256 = "1ms54wcs7hg1bsywqwf2lhdfizgbk7qxc9ghasxk8i99jvwlrk6b";
+  };
+
+  # lots of hardcoded references to /usr
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace ' /usr/' " $out/"
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "Source code indenter, formatter, and beautifier for C, C++, C# and Java";
+    homepage = "http://astyle.sourceforge.net/";
+    license = licenses.lgpl3;
+    platforms = 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..b6970beb8734
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autobuild/default.nix
@@ -0,0 +1,36 @@
+{ fetchurl, lib, stdenv, makeWrapper, perl, openssh, rsync }:
+
+stdenv.mkDerivation rec {
+  pname = "autobuild";
+  version = "5.3";
+
+  src = fetchurl {
+    url = "mirror://savannah/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0gv7g61ja9q9zg1m30k4snqwwy1kq7b4df6sb7d2qra7kbdq8af1";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ 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 = 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..b53adfd0be06
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf-archive/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl, xz }:
+
+stdenv.mkDerivation rec {
+  pname = "autoconf-archive";
+  version = "2021.02.19";
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf-archive/autoconf-archive-${version}.tar.xz";
+    sha256 = "sha256-6KbrnSjdy6j/7z+iEWUyOem/I5q6agGmt8/Hzq7GnL0=";
+  };
+
+  buildInputs = [ xz ];
+
+  meta = with 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..dc36028332ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf/2.13.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, m4, perl, xz }:
+
+stdenv.mkDerivation rec {
+  pname = "autoconf";
+  version = "2.13";
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf/autoconf-${version}.tar.gz";
+    sha256 = "07krzl4czczdsgzrrw9fiqx35xcf32naf751khg821g5pqv12qgh";
+  };
+
+  nativebuildInputs = [ xz ];
+  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 = lib.licenses.gpl2Plus;
+    platforms = 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..8c6e104e11b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf/2.64.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, m4, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "autoconf";
+  version = "2.64";
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf/autoconf-${version}.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 = lib.licenses.gpl2Plus;
+
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autoconf/2.69.nix b/nixpkgs/pkgs/development/tools/misc/autoconf/2.69.nix
new file mode 100644
index 000000000000..870b0ae1d34a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf/2.69.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchurl, m4, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "autoconf";
+  version = "2.69";
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf/autoconf-${version}.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 = lib.licenses.gpl2Plus;
+
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/autoconf/2.71-fix-race.patch b/nixpkgs/pkgs/development/tools/misc/autoconf/2.71-fix-race.patch
new file mode 100644
index 000000000000..e3b28554352b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf/2.71-fix-race.patch
@@ -0,0 +1,36 @@
+https://savannah.gnu.org/support/index.php?110521
+https://git.savannah.gnu.org/cgit/autoconf.git/patch/?id=3a9802d60156809c139e9b4620bf04917e143ee2
+--- a/lib/Autom4te/FileUtils.pm
++++ b/lib/Autom4te/FileUtils.pm
+@@ -34,12 +34,12 @@ This perl module provides various general purpose file handling functions.
+ 
+ =cut
+ 
+-use 5.006;
++use 5.008;
+ use strict;
+ use warnings FATAL => 'all';
+ 
+ use Exporter;
+-use File::stat;
++use Time::HiRes qw(stat);
+ use IO::File;
+ 
+ use Autom4te::Channels;
+@@ -115,10 +115,11 @@ sub mtime ($)
+   return 0
+     if $file eq '-' || ! -f $file;
+ 
+-  my $stat = stat ($file)
++  my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
++    $atime,$mtime,$ctime,$blksize,$blocks) = stat ($file)
+     or fatal "cannot stat $file: $!";
+ 
+-  return $stat->mtime;
++  return $mtime;
+ }
+ 
+ 
+-- 
+cgit v1.2.1
+
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..ac342086f6c5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autoconf/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv, fetchurl, m4, perl }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "autoconf";
+  version = "2.71";
+
+  src = fetchurl {
+    url = "mirror://gnu/autoconf/autoconf-${version}.tar.xz";
+    sha256 = "197sl23irn6s9pd54rxj5vcp5y8dv65jb9yfqgr2g56cxg7q6k7i";
+  };
+  patches = [
+    # fix stale autom4te cache race condition:
+    #  https://savannah.gnu.org/support/index.php?110521
+    ./2.71-fix-race.patch
+  ];
+
+  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));
+
+  # 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"
+  '';
+
+  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 = lib.licenses.gpl3Plus;
+
+    platforms = 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..61df38f68ce9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/autogen/default.nix
@@ -0,0 +1,101 @@
+{ lib, stdenv, buildPackages, fetchurl, fetchpatch, autoreconfHook, which, pkg-config, perl, guile, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "autogen";
+  version = "5.18.16";
+
+  src = fetchurl {
+    url = "mirror://gnu/autogen/rel${version}/autogen-${version}.tar.xz";
+    sha256 = "16mlbdys8q4ckxlvxyhwkdnh1ay9f6g0cyp1kylkpalgnik398gq";
+  };
+
+  patches = let
+    dp = { ver ? "1%255.18.16-4", pname, name ? (pname + ".diff"), sha256 }: fetchurl {
+      url = "https://salsa.debian.org/debian/autogen/-/raw/debian/${ver}"
+          + "/debian/patches/${pname}.diff?inline=false";
+      inherit name sha256;
+    };
+  in [
+    (dp {
+      pname = "20_no_Werror";
+      sha256 = "08z4s2ifiqyaacjpd9pzr59w8m4j3548kkaq1bwvp2gjn29m680x";
+    })
+    (dp {
+      pname = "30_ag_macros.m4_syntax_error";
+      sha256 = "1z8vmbwbkz3505wd33i2xx91mlf8rwsa7klndq37nw821skxwyh3";
+    })
+    (dp {
+      pname = "31_allow_overriding_AGexe_for_crossbuild";
+      sha256 = "0h9wkc9bqb509knh8mymi43hg6n6sxg2lixvjlchcx7z0j7p8xkf";
+    })
+    # Next upstream release will contain guile-3 support. We apply non-invasive
+    # patch meanwhile.
+    (fetchpatch {
+      name = "guile-3.patch";
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/sys-devel/autogen/files/autogen-5.18.16-guile-3.patch?id=43bcc61c56a5a7de0eaf806efec7d8c0e4c01ae7";
+      sha256 = "18d7y1f6164dm1wlh7rzbacfygiwrmbc35a7qqsbdawpkhydm5lr";
+    })
+  ];
+
+  outputs = [ "bin" "dev" "lib" "out" "man" "info" ];
+
+  nativeBuildInputs = [
+    which pkg-config perl autoreconfHook/*patches applied*/
+  ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    # autogen needs a build autogen when cross-compiling
+    buildPackages.buildPackages.autogen buildPackages.texinfo
+  ];
+  buildInputs = [
+    guile libxml2
+  ];
+
+  preConfigure = ''
+    export MAN_PAGE_DATE=$(date '+%Y-%m-%d' -d "@$SOURCE_DATE_EPOCH")
+  '';
+
+  configureFlags = [
+    "--with-libxml2=${libxml2.dev}"
+    "--with-libxml2-cflags=-I${libxml2.dev}/include/libxml2"
+    # Make sure to use a static value for the timeout. If we do not set a value
+    # here autogen will select one based on the execution time of the configure
+    # phase which is not really reproducible.
+    #
+    # If you are curious about the number 78, it has been cargo-culted from
+    # Debian: https://salsa.debian.org/debian/autogen/-/blob/master/debian/rules#L21
+    "--enable-timeout=78"
+  ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    # the configure check for regcomp wants to run a host program
+    "libopts_cv_with_libregex=yes"
+    #"MAKEINFO=${buildPackages.texinfo}/bin/makeinfo"
+  ]
+  # See: https://sourceforge.net/p/autogen/bugs/187/
+  ++ lib.optionals stdenv.isDarwin [ "ac_cv_func_utimensat=no" ];
+
+  #doCheck = true; # not reliable
+
+  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
+
+  '' + lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
+    # remove build directory (/build/**, or /tmp/nix-build-**) from RPATHs
+    for f in "$bin"/bin/*; do
+      local nrp="$(patchelf --print-rpath "$f" | sed -E 's@(:|^)'$NIX_BUILD_TOP'[^:]*:@\1@g')"
+      patchelf --set-rpath "$nrp" "$f"
+    done
+  '';
+
+  meta = with 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..02d9f4c4872e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.11.x.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchurl, perl, autoconf }:
+
+stdenv.mkDerivation rec {
+  pname = "automake";
+  version = "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/automake-${version}.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 = lib.licenses.gpl2Plus;
+
+    platforms = 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..470827c2b45e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.15.x.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, perl, autoconf }:
+
+stdenv.mkDerivation rec {
+  pname = "automake";
+  version = "1.15.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/automake/automake-${version}.tar.xz";
+    sha256 = "1bzd9g32dfm4rsbw93ld9x7b5nc1y6i4m6zp032qf1i28a8s6sxg";
+  };
+
+  nativeBuildInputs = [ autoconf perl ];
+  buildInputs = [ autoconf ];
+
+  setupHook = ./setup-hook.sh;
+
+  patches = [ ./help2man-SOURCE_DATE_EPOCH-support.patch ];
+
+  # 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 = 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 = 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..89a5b4879004
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/automake-1.16.x.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, perl, autoconf }:
+
+stdenv.mkDerivation rec {
+  pname = "automake";
+  version = "1.16.5";
+
+  src = fetchurl {
+    url = "mirror://gnu/automake/automake-${version}.tar.xz";
+    sha256 = "0sdl32qxdy7m06iggmkkvf7j520rmmgbsjzbm7fgnxwxdp6mh7gh";
+  };
+
+  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 = with lib; {
+    branch = "1.16";
+    homepage = "https://www.gnu.org/software/automake/";
+    description = "GNU standard-compliant makefile generator";
+    license = 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 = 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/help2man-SOURCE_DATE_EPOCH-support.patch b/nixpkgs/pkgs/development/tools/misc/automake/help2man-SOURCE_DATE_EPOCH-support.patch
new file mode 100644
index 000000000000..048f75e63343
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automake/help2man-SOURCE_DATE_EPOCH-support.patch
@@ -0,0 +1,41 @@
+From 2e3357d7f0d63f1caeb40d9644c2436a5cd0da5f Mon Sep 17 00:00:00 2001
+From: David Terry <me@xwvvvvwx.com>
+Date: Fri, 18 Oct 2019 10:23:11 +0200
+Subject: [PATCH] help2man: add support for SOURCE_DATE_EPOCH
+
+---
+ doc/help2man | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/doc/help2man b/doc/help2man
+index af4306f..4a64167 100755
+--- a/doc/help2man
++++ b/doc/help2man
+@@ -213,11 +213,23 @@ sub get_option_value;
+ my $help_text   = get_option_value $ARGV[0], $help_option;
+ $version_text ||= get_option_value $ARGV[0], $version_option;
+ 
++# By default the generated manual pages will include the current date.  This may
++# however be overriden by setting the environment variable $SOURCE_DATE_EPOCH
++# to an integer value of the seconds since the UNIX epoch.  This is primarily
++# intended to support reproducible builds (wiki.debian.org/ReproducibleBuilds)
++# and will additionally ensure that the output date string is UTC.
++my $epoch_secs = time;
++if (exists $ENV{SOURCE_DATE_EPOCH} and $ENV{SOURCE_DATE_EPOCH} =~ /^(\d+)$/)
++{
++    $epoch_secs = $1;
++    $ENV{TZ} = 'UTC';
++}
++
+ # Translators: the following message is a strftime(3) format string, which in
+ # the English version expands to the month as a word and the full year.  It
+ # is used on the footer of the generated manual pages.  If in doubt, you may
+ # just use %x as the value (which should be the full locale-specific date).
+-my $date = enc strftime _("%B %Y"), localtime;
++my $date = enc strftime _("%B %Y"), localtime $epoch_secs;
+ (my $program = $ARGV[0]) =~ s!.*/!!;
+ my $package = $program;
+ my $version;
+-- 
+2.23.0
+
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/automaticcomponenttoolkit/default.nix b/nixpkgs/pkgs/development/tools/misc/automaticcomponenttoolkit/default.nix
new file mode 100644
index 000000000000..cf84a98467d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automaticcomponenttoolkit/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchFromGitHub, go }:
+
+stdenv.mkDerivation rec {
+  pname = "AutomaticComponentToolkit";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "Autodesk";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1r0sbw82cf9dbcj3vgnbd4sc1lklzvijic2z5wgkvs21azcm0yzh";
+  };
+
+  nativeBuildInputs = [ go ];
+
+  buildPhase = ''
+    cd Source
+    export HOME=/tmp
+    go build -o act *.go
+  '';
+
+  installPhase = ''
+    install -Dm0755 act $out/bin/act
+  '';
+
+  meta = with lib; {
+    description = "Toolkit to automatically generate software components: abstract API, implementation stubs and language bindings";
+    homepage = "https://github.com/Autodesk/AutomaticComponentToolkit";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ gebner ];
+    platforms = platforms.all;
+  };
+}
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..ac027ec45301
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/automoc4/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, cmake, qt4 }:
+
+stdenv.mkDerivation rec {
+  pname = "automoc4";
+  version = "0.9.88";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/automoc4/0.9.88/${pname}.tar.bz2";
+    sha256 = "0jackvg0bdjg797qlbbyf9syylm0qjs55mllhn11vqjsq3s1ch93";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ qt4 ];
+
+  meta = with 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/aviator/default.nix b/nixpkgs/pkgs/development/tools/misc/aviator/default.nix
new file mode 100644
index 000000000000..66b2ae450351
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/aviator/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "aviator";
+  version = "1.8.1";
+
+  src = fetchFromGitHub {
+    owner = "herrjulz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Oa4z8n+q7LKWMnwk+xj9UunzOa3ChaPBCTo828yYJGQ=";
+  };
+
+  deleteVendor = true;
+  vendorSha256 = "sha256-rYOphvI1ZE8X5UExfgxHnWBn697SDkNnmxeY7ihIZ1s=";
+
+  meta = with lib; {
+    description = "Merge YAML/JSON files in a in a convenient fashion";
+    homepage = "https://github.com/herrjulz/aviator";
+    license = licenses.mit;
+    maintainers = with maintainers; [ risson ];
+  };
+}
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..b73f1dc04502
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/awf/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, gtk2, gtk3, pkg-config
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "awf";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "valr";
+    repo = "awf";
+    rev = "v${version}";
+    sha256 = "0jl2kxwpvf2n8974zzyp69mqhsbjnjcqm39y0jvijvjb1iy8iman";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config wrapGAppsHook ];
+
+  buildInputs = [ gtk2 gtk3 ];
+
+  autoreconfPhase = ''
+    patchShebangs ./autogen.sh
+    ./autogen.sh
+  '';
+
+  meta = with 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..3dc424f106bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/babeltrace/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, libuuid, popt, elfutils }:
+
+stdenv.mkDerivation rec {
+  pname = "babeltrace";
+  version = "1.5.8";
+
+  src = fetchurl {
+    url = "https://www.efficios.com/files/babeltrace/${pname}-${version}.tar.bz2";
+    sha256 = "1hkg3phnamxfrhwzmiiirbhdgckzfkqwhajl0lmr1wfps7j47wcz";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib libuuid popt elfutils ];
+
+  meta = with 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..918dd90aa83f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/bashdb/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, makeWrapper
+, python3Packages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bashdb";
+  version = "5.0-1.1.2";
+
+  src = fetchurl {
+    url =  "mirror://sourceforge/bashdb/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-MBdtKtKMWwCy4tIcXqGu+PuvQKj52fcjxnxgUx87czA=";
+  };
+
+  patches = [
+    # Enable building with bash 5.1/5.2
+    # Remove with any upstream 5.1-x.y.z release
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/freebsd/freebsd-ports/569fbb806d9ee813afa8b27d2098a44f93433922/devel/bashdb/files/patch-configure";
+      sha256 = "19zfzcnxavndyn6kfxp775kjcd0gigsm4y3bnh6fz5ilhnnbbbgr";
+    })
+  ];
+  patchFlags = "-p0";
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/bashdb --prefix PYTHONPATH ":" "$(toPythonPath ${python3Packages.pygments})"
+  '';
+
+  meta = {
+    description = "Bash script debugger";
+    homepage = "http://bashdb.sourceforge.net/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2020-35448.patch b/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2020-35448.patch
new file mode 100644
index 000000000000..2eba7b51849f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2020-35448.patch
@@ -0,0 +1,77 @@
+From 8642dafaef21aa6747cec01df1977e9c52eb4679 Mon Sep 17 00:00:00 2001
+From: Alan Modra <amodra@gmail.com>
+Date: Fri, 4 Sep 2020 19:19:18 +0930
+Subject: [PATCH] PR26574, heap buffer overflow in
+ _bfd_elf_slurp_secondary_reloc_section
+
+A horribly fuzzed object with section headers inside the ELF header.
+Disallow that, and crazy reloc sizes.
+
+	PR 26574
+	* elfcode.h (elf_object_p): Sanity check section header offset.
+	* elf.c (_bfd_elf_slurp_secondary_reloc_section): Sanity check
+	sh_entsize.
+---
+ bfd/elf.c     | 4 +++-
+ bfd/elfcode.h | 8 ++++----
+ 3 files changed, 14 insertions(+), 5 deletions(-)
+
+diff --git a/bfd/elf.c b/bfd/elf.c
+index ac2095f787d..5a02f8dc309 100644
+--- a/bfd/elf.c
++++ b/bfd/elf.c
+@@ -12576,7 +12576,9 @@ _bfd_elf_slurp_secondary_reloc_section (bfd *      abfd,
+       Elf_Internal_Shdr * hdr = & elf_section_data (relsec)->this_hdr;
+ 
+       if (hdr->sh_type == SHT_SECONDARY_RELOC
+-	  && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx)
++	  && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx
++	  && (hdr->sh_entsize == ebd->s->sizeof_rel
++	      || hdr->sh_entsize == ebd->s->sizeof_rela))
+ 	{
+ 	  bfd_byte * native_relocs;
+ 	  bfd_byte * native_reloc;
+diff --git a/bfd/elfcode.h b/bfd/elfcode.h
+index 2ed2f135c34..606ff64fd4d 100644
+--- a/bfd/elfcode.h
++++ b/bfd/elfcode.h
+@@ -571,7 +571,7 @@ elf_object_p (bfd *abfd)
+ 
+   /* If this is a relocatable file and there is no section header
+      table, then we're hosed.  */
+-  if (i_ehdrp->e_shoff == 0 && i_ehdrp->e_type == ET_REL)
++  if (i_ehdrp->e_shoff < sizeof (x_ehdr) && i_ehdrp->e_type == ET_REL)
+     goto got_wrong_format_error;
+ 
+   /* As a simple sanity check, verify that what BFD thinks is the
+@@ -581,7 +581,7 @@ elf_object_p (bfd *abfd)
+     goto got_wrong_format_error;
+ 
+   /* Further sanity check.  */
+-  if (i_ehdrp->e_shoff == 0 && i_ehdrp->e_shnum != 0)
++  if (i_ehdrp->e_shoff < sizeof (x_ehdr) && i_ehdrp->e_shnum != 0)
+     goto got_wrong_format_error;
+ 
+   ebd = get_elf_backend_data (abfd);
+@@ -618,7 +618,7 @@ elf_object_p (bfd *abfd)
+       && ebd->elf_osabi != ELFOSABI_NONE)
+     goto got_wrong_format_error;
+ 
+-  if (i_ehdrp->e_shoff != 0)
++  if (i_ehdrp->e_shoff >= sizeof (x_ehdr))
+     {
+       file_ptr where = (file_ptr) i_ehdrp->e_shoff;
+ 
+@@ -819,7 +819,7 @@ elf_object_p (bfd *abfd)
+ 	}
+     }
+ 
+-  if (i_ehdrp->e_shstrndx != 0 && i_ehdrp->e_shoff != 0)
++  if (i_ehdrp->e_shstrndx != 0 && i_ehdrp->e_shoff >= sizeof (x_ehdr))
+     {
+       unsigned int num_sec;
+ 
+-- 
+2.27.0
+
+
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2021-3487.patch b/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2021-3487.patch
new file mode 100644
index 000000000000..004271bd45ab
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2021-3487.patch
@@ -0,0 +1,73 @@
+From: Nick Clifton <nickc@redhat.com>
+Date: Thu, 26 Nov 2020 17:08:33 +0000 (+0000)
+Subject: Prevent a memory allocation failure when parsing corrupt DWARF debug sections.
+X-Git-Tag: binutils-2_36~485
+X-Git-Url: https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff_plain;h=647cebce12a6b0a26960220caff96ff38978cf24;hp=239ca5e497dda2c151009d664d500086a5c2173a
+
+Prevent a memory allocation failure when parsing corrupt DWARF debug sections.
+
+	PR 26946
+	* dwarf2.c (read_section): Check for debug sections with excessive
+	sizes.
+---
+
+diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
+index 977bf43a6a1..8bbfc81d3e7 100644
+--- a/bfd/dwarf2.c
++++ b/bfd/dwarf2.c
+@@ -531,22 +531,24 @@ read_section (bfd *	      abfd,
+ 	      bfd_byte **     section_buffer,
+ 	      bfd_size_type * section_size)
+ {
+-  asection *msec;
+   const char *section_name = sec->uncompressed_name;
+   bfd_byte *contents = *section_buffer;
+-  bfd_size_type amt;
+ 
+   /* The section may have already been read.  */
+   if (contents == NULL)
+     {
++      bfd_size_type amt;
++      asection *msec;
++      ufile_ptr filesize;
++
+       msec = bfd_get_section_by_name (abfd, section_name);
+-      if (! msec)
++      if (msec == NULL)
+ 	{
+ 	  section_name = sec->compressed_name;
+ 	  if (section_name != NULL)
+ 	    msec = bfd_get_section_by_name (abfd, section_name);
+ 	}
+-      if (! msec)
++      if (msec == NULL)
+ 	{
+ 	  _bfd_error_handler (_("DWARF error: can't find %s section."),
+ 			      sec->uncompressed_name);
+@@ -554,12 +556,23 @@ read_section (bfd *	      abfd,
+ 	  return FALSE;
+ 	}
+ 
+-      *section_size = msec->rawsize ? msec->rawsize : msec->size;
++      amt = bfd_get_section_limit_octets (abfd, msec);
++      filesize = bfd_get_file_size (abfd);
++      if (amt >= filesize)
++	{
++	  /* PR 26946 */
++	  _bfd_error_handler (_("DWARF error: section %s is larger than its filesize! (0x%lx vs 0x%lx)"),
++			      section_name, (long) amt, (long) filesize);
++	  bfd_set_error (bfd_error_bad_value);
++	  return FALSE;
++	}
++      *section_size = amt;
+       /* Paranoia - alloc one extra so that we can make sure a string
+ 	 section is NUL terminated.  */
+-      amt = *section_size + 1;
++      amt += 1;
+       if (amt == 0)
+ 	{
++	  /* Paranoia - this should never happen.  */
+ 	  bfd_set_error (bfd_error_no_memory);
+ 	  return FALSE;
+ 	}
+
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2021-45078.patch b/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2021-45078.patch
new file mode 100644
index 000000000000..af1c95fac806
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2021-45078.patch
@@ -0,0 +1,239 @@
+based on upstream https://sourceware.org/git/?p=binutils-gdb.git;a=patch;h=161e87d12167b1e36193385485c1f6ce92f74f02;hp=d5c94731766bf4f276146fd29c1df8eebc2aaf69
+
+adapted by ris to apply to 2.35.2 (simply capitalizing booleans)
+
+diff --git a/binutils/stabs.c b/binutils/stabs.c
+index 274bfb0e7fa..83ee3ea5fa4 100644
+--- a/binutils/stabs.c
++++ b/binutils/stabs.c
+@@ -202,7 +202,7 @@ static debug_type stab_find_type (void *, struct stab_handle *, const int *);
+ static bool stab_record_type
+   (void *, struct stab_handle *, const int *, debug_type);
+ static debug_type stab_xcoff_builtin_type
+-  (void *, struct stab_handle *, int);
++  (void *, struct stab_handle *, unsigned int);
+ static debug_type stab_find_tagged_type
+   (void *, struct stab_handle *, const char *, int, enum debug_type_kind);
+ static debug_type *stab_demangle_argtypes
+@@ -3496,166 +3496,167 @@ stab_record_type (void *dhandle ATTRIBUTE_UNUSED, struct stab_handle *info,
+ 
+ static debug_type
+ stab_xcoff_builtin_type (void *dhandle, struct stab_handle *info,
+-			 int typenum)
++			 unsigned int typenum)
+ {
+   debug_type rettype;
+   const char *name;
+ 
+-  if (typenum >= 0 || typenum < -XCOFF_TYPE_COUNT)
++  typenum = -typenum - 1;
++  if (typenum >= XCOFF_TYPE_COUNT)
+     {
+-      fprintf (stderr, _("Unrecognized XCOFF type %d\n"), typenum);
++      fprintf (stderr, _("Unrecognized XCOFF type %d\n"), -typenum - 1);
+       return DEBUG_TYPE_NULL;
+     }
+-  if (info->xcoff_types[-typenum] != NULL)
+-    return info->xcoff_types[-typenum];
++  if (info->xcoff_types[typenum] != NULL)
++    return info->xcoff_types[typenum];
+ 
+-  switch (-typenum)
++  switch (typenum)
+     {
+-    case 1:
++    case 0:
+       /* The size of this and all the other types are fixed, defined
+ 	 by the debugging format.  */
+       name = "int";
+       rettype = debug_make_int_type (dhandle, 4, FALSE);
+       break;
+-    case 2:
++    case 1:
+       name = "char";
+       rettype = debug_make_int_type (dhandle, 1, FALSE);
+       break;
+-    case 3:
++    case 2:
+       name = "short";
+       rettype = debug_make_int_type (dhandle, 2, FALSE);
+       break;
+-    case 4:
++    case 3:
+       name = "long";
+       rettype = debug_make_int_type (dhandle, 4, FALSE);
+       break;
+-    case 5:
++    case 4:
+       name = "unsigned char";
+       rettype = debug_make_int_type (dhandle, 1, TRUE);
+       break;
+-    case 6:
++    case 5:
+       name = "signed char";
+       rettype = debug_make_int_type (dhandle, 1, FALSE);
+       break;
+-    case 7:
++    case 6:
+       name = "unsigned short";
+       rettype = debug_make_int_type (dhandle, 2, TRUE);
+       break;
+-    case 8:
++    case 7:
+       name = "unsigned int";
+       rettype = debug_make_int_type (dhandle, 4, TRUE);
+       break;
+-    case 9:
++    case 8:
+       name = "unsigned";
+       rettype = debug_make_int_type (dhandle, 4, TRUE);
+       break;
+-    case 10:
++    case 9:
+       name = "unsigned long";
+       rettype = debug_make_int_type (dhandle, 4, TRUE);
+       break;
+-    case 11:
++    case 10:
+       name = "void";
+       rettype = debug_make_void_type (dhandle);
+       break;
+-    case 12:
++    case 11:
+       /* IEEE single precision (32 bit).  */
+       name = "float";
+       rettype = debug_make_float_type (dhandle, 4);
+       break;
+-    case 13:
++    case 12:
+       /* IEEE double precision (64 bit).  */
+       name = "double";
+       rettype = debug_make_float_type (dhandle, 8);
+       break;
+-    case 14:
++    case 13:
+       /* This is an IEEE double on the RS/6000, and different machines
+ 	 with different sizes for "long double" should use different
+ 	 negative type numbers.  See stabs.texinfo.  */
+       name = "long double";
+       rettype = debug_make_float_type (dhandle, 8);
+       break;
+-    case 15:
++    case 14:
+       name = "integer";
+       rettype = debug_make_int_type (dhandle, 4, FALSE);
+       break;
+-    case 16:
++    case 15:
+       name = "boolean";
+       rettype = debug_make_bool_type (dhandle, 4);
+       break;
+-    case 17:
++    case 16:
+       name = "short real";
+       rettype = debug_make_float_type (dhandle, 4);
+       break;
+-    case 18:
++    case 17:
+       name = "real";
+       rettype = debug_make_float_type (dhandle, 8);
+       break;
+-    case 19:
++    case 18:
+       /* FIXME */
+       name = "stringptr";
+       rettype = NULL;
+       break;
+-    case 20:
++    case 19:
+       /* FIXME */
+       name = "character";
+       rettype = debug_make_int_type (dhandle, 1, TRUE);
+       break;
+-    case 21:
++    case 20:
+       name = "logical*1";
+       rettype = debug_make_bool_type (dhandle, 1);
+       break;
+-    case 22:
++    case 21:
+       name = "logical*2";
+       rettype = debug_make_bool_type (dhandle, 2);
+       break;
+-    case 23:
++    case 22:
+       name = "logical*4";
+       rettype = debug_make_bool_type (dhandle, 4);
+       break;
+-    case 24:
++    case 23:
+       name = "logical";
+       rettype = debug_make_bool_type (dhandle, 4);
+       break;
+-    case 25:
++    case 24:
+       /* Complex type consisting of two IEEE single precision values.  */
+       name = "complex";
+       rettype = debug_make_complex_type (dhandle, 8);
+       break;
+-    case 26:
++    case 25:
+       /* Complex type consisting of two IEEE double precision values.  */
+       name = "double complex";
+       rettype = debug_make_complex_type (dhandle, 16);
+       break;
+-    case 27:
++    case 26:
+       name = "integer*1";
+       rettype = debug_make_int_type (dhandle, 1, FALSE);
+       break;
+-    case 28:
++    case 27:
+       name = "integer*2";
+       rettype = debug_make_int_type (dhandle, 2, FALSE);
+       break;
+-    case 29:
++    case 28:
+       name = "integer*4";
+       rettype = debug_make_int_type (dhandle, 4, FALSE);
+       break;
+-    case 30:
++    case 29:
+       /* FIXME */
+       name = "wchar";
+       rettype = debug_make_int_type (dhandle, 2, FALSE);
+       break;
+-    case 31:
++    case 30:
+       name = "long long";
+       rettype = debug_make_int_type (dhandle, 8, FALSE);
+       break;
+-    case 32:
++    case 31:
+       name = "unsigned long long";
+       rettype = debug_make_int_type (dhandle, 8, TRUE);
+       break;
+-    case 33:
++    case 32:
+       name = "logical*8";
+       rettype = debug_make_bool_type (dhandle, 8);
+       break;
+-    case 34:
++    case 33:
+       name = "integer*8";
+       rettype = debug_make_int_type (dhandle, 8, FALSE);
+       break;
+@@ -3664,9 +3665,7 @@ stab_xcoff_builtin_type (void *dhandle, struct stab_handle *info,
+     }
+ 
+   rettype = debug_name_type (dhandle, name, rettype);
+-
+-  info->xcoff_types[-typenum] = rettype;
+-
++  info->xcoff_types[typenum] = rettype;
+   return rettype;
+ }
+ 
+-- 
+2.27.0
+
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/R_ARM_COPY.patch b/nixpkgs/pkgs/development/tools/misc/binutils/R_ARM_COPY.patch
new file mode 100644
index 000000000000..874809863523
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/R_ARM_COPY.patch
@@ -0,0 +1,29 @@
+@@ -, +, @@ 
+---
+ bfd/elf32-arm.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+--- a/bfd/elf32-arm.c	
++++ a/bfd/elf32-arm.c	
+@@ -15398,7 +15398,11 @@ elf32_arm_adjust_dynamic_symbol (struct bfd_link_info * info,
+      linker to copy the initial value out of the dynamic object and into
+      the runtime process image.  We need to remember the offset into the
+      .rel(a).bss section we are going to use.  */
+-  if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
++  if (info->nocopyreloc == 0
++      && (h->root.u.def.section->flags & SEC_ALLOC) != 0
++      /* PR 16177: A copy is only needed if the input section is readonly.  */
++      && (h->root.u.def.section->flags & SEC_READONLY) != 0
++      && h->size != 0)
+     {
+       s = globals->root.sdynrelro;
+       srel = globals->root.sreldynrelro;
+@@ -15410,6 +15414,8 @@ elf32_arm_adjust_dynamic_symbol (struct bfd_link_info * info,
+     }
+   if (info->nocopyreloc == 0
+       && (h->root.u.def.section->flags & SEC_ALLOC) != 0
++      /* PR 16177: A copy is only needed if the input section is readonly.  */
++      && (h->root.u.def.section->flags & SEC_READONLY) != 0
+       && h->size != 0)
+     {
+       elf32_arm_allocate_dynrelocs (info, srel, 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/bfd-elf-Dont-read-non-existing-secondary-relocs.patch b/nixpkgs/pkgs/development/tools/misc/binutils/bfd-elf-Dont-read-non-existing-secondary-relocs.patch
new file mode 100644
index 000000000000..c166066c9803
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/bfd-elf-Dont-read-non-existing-secondary-relocs.patch
@@ -0,0 +1,26 @@
+X-Git-Url: https://sourceware.org/git/?p=binutils-gdb.git;a=blobdiff_plain;f=bfd%2Felf.c;h=af62aadc3d446cd5b1f0201b207c90c22e7809b1;hp=36733e080dd9d9be28b576b246aaf5bd8c8569c7;hb=84fd26d8209e99fc3a432dd0b09b6c053de1ce65;hpb=abe2a28aaa7a2bfd0f3061c72a98eb898976b721
+
+diff --git a/bfd/elf.c b/bfd/elf.c
+index 36733e080dd..af62aadc3d4 100644
+--- a/bfd/elf.c
++++ b/bfd/elf.c
+@@ -2454,6 +2454,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
+ 		     "for section %pA found - ignoring"),
+ 		   abfd, name, target_sect);
+ 	      }
++	    else
++	      esdt->has_secondary_relocs = TRUE;
+ 	    goto success;
+ 	  }
+ 
+@@ -12587,6 +12589,9 @@ _bfd_elf_slurp_secondary_reloc_section (bfd *       abfd,
+ #endif
+     r_sym = elf32_r_sym;
+   
++  if (!elf_section_data (sec)->has_secondary_relocs)
++    return TRUE;
++
+   /* Discover if there are any secondary reloc sections
+      associated with SEC.  */
+   for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
+
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..38fa4934a28a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/build-components-separately.patch
@@ -0,0 +1,164 @@
+diff --git a/bfd/configure.ac b/bfd/configure.ac
+index c5bfbd5d..45ad4c26 100644
+--- a/bfd/configure.ac
++++ b/bfd/configure.ac
+@@ -278,31 +278,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
+-
+   case "${host}" in
+   # More hacks to build DLLs on Windows.
+   *-*-cygwin*)
+     SHARED_LDFLAGS="-no-undefined"
+-    SHARED_LIBADD="-L`pwd`/../libiberty -liberty -L`pwd`/../intl -lintl -lcygwin -lkernel32"
++    SHARED_LIBADD="-liberty -lintl -lcygwin -lkernel32"
+   ;;
+ 
+   # Use built-in libintl on macOS, since it is not provided by libc.
+   *-*-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 4f06074a..6836c589 100644
+--- a/opcodes/Makefile.am
++++ b/opcodes/Makefile.am
+@@ -51,7 +51,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@
+@@ -301,7 +301,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
+@@ -322,12 +322,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 00be9c88..6e589ae4 100644
+--- a/opcodes/configure.ac
++++ b/opcodes/configure.ac
+@@ -86,6 +86,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])
+ 
+@@ -137,61 +138,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
+ 
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..8d759457fa11
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/default.nix
@@ -0,0 +1,203 @@
+let
+  execFormatIsELF = platform: platform.parsed.kernel.execFormat.name == "elf";
+in
+
+{ stdenv, lib, buildPackages
+, fetchFromGitHub, fetchurl, zlib, autoreconfHook, gettext
+# Enabling all targets increases output size to a multiple.
+, withAllTargets ? false, libbfd, libopcodes
+, enableShared ? !stdenv.hostPlatform.isStatic
+, noSysDirs
+, gold ? execFormatIsELF stdenv.targetPlatform
+, bison ? null
+, flex
+, texinfo
+, perl
+}:
+
+# configure silently disables ld.gold if it's unsupported,
+# so we need to make sure that intent matches result ourselves.
+assert gold -> execFormatIsELF stdenv.targetPlatform;
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+let
+  reuseLibs = enableShared && withAllTargets;
+
+  version = "2.35.2";
+  basename = "binutils";
+  # 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}-";
+  vc4-binutils-src = fetchFromGitHub {
+    owner = "itszor";
+    repo = "binutils-vc4";
+    rev = "708acc851880dbeda1dd18aca4fd0a95b2573b36";
+    sha256 = "1kdrz6fki55lm15rwwamn74fnqpy0zlafsida2zymk76n3656c63";
+  };
+  # HACK to ensure that we preserve source from bootstrap binutils to not rebuild LLVM
+  normal-src = stdenv.__bootPackages.binutils-unwrapped.src or (fetchurl {
+    url = "mirror://gnu/binutils/${basename}-${version}.tar.bz2";
+    sha256 = "sha256-z6dkTb7PRZHhNutAfBwdoWV4vSsD8MLorNzroZS7nWE=";
+  });
+in
+
+stdenv.mkDerivation {
+  pname = targetPrefix + basename;
+  inherit version;
+
+  src = if stdenv.targetPlatform.isVc4 then vc4-binutils-src else normal-src;
+
+  patches = [
+    # Make binutils output deterministic by default.
+    ./deterministic.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
+
+    # Fix quadratic slowdown in `strip` performance.
+    # See #129467 and https://sourceware.org/bugzilla/show_bug.cgi?id=28058
+    # Remove when we're on binutils > 2.36.1.
+    # The patch is downloaded from
+    #     https://sourceware.org/git/?p=binutils-gdb.git;a=blobdiff_plain;f=bfd/elf.c;h=af62aadc3d446cd5b1f0201b207c90c22e7809b1;hp=36733e080dd9d9be28b576b246aaf5bd8c8569c7;hb=84fd26d8209e99fc3a432dd0b09b6c053de1ce65;hpb=abe2a28aaa7a2bfd0f3061c72a98eb898976b721
+    # which is the 2.36 backport (using `TRUE` instead of `true` of binutils master commit:
+    #     https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=956ea65cd707707c0f725930214cbc781367a831
+    ./bfd-elf-Dont-read-non-existing-secondary-relocs.patch
+
+    # Fix building plv8’s v8.
+    # https://github.com/NixOS/nixpkgs/issues/134190
+    # Obtained from: https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=586e30940e640f67bd55bd72e1d1355a4faf8079
+    ./gold-Update-GNU_PROPERTY_X86_XXX-macros.patch
+
+    ./CVE-2020-35448.patch
+    ./CVE-2021-3487.patch
+    ./CVE-2021-45078.patch
+  ] ++ lib.optional stdenv.targetPlatform.isiOS ./support-ios.patch
+    ++ # This patch was suggested by Nick Clifton to fix
+       # https://sourceware.org/bugzilla/show_bug.cgi?id=16177
+       # It can be removed when that 7-year-old bug is closed.
+       # This binutils bug causes GHC to emit broken binaries on armv7, and
+       # indeed GHC will refuse to compile with a binutils suffering from it. See
+       # this comment for more information:
+       # https://gitlab.haskell.org/ghc/ghc/issues/4210#note_78333
+       lib.optional (stdenv.targetPlatform.isAarch32 && stdenv.hostPlatform.system != stdenv.targetPlatform.system) ./R_ARM_COPY.patch
+    ++ lib.optional stdenv.targetPlatform.isWindows ./windres-locate-gcc.patch;
+
+  outputs = [ "out" "info" "man" ];
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [
+    bison
+    perl
+    texinfo
+  ] ++ (lib.optionals stdenv.targetPlatform.isiOS [
+    autoreconfHook
+  ]) ++ lib.optionals stdenv.targetPlatform.isVc4 [ flex ];
+  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" ];
+
+  configurePlatforms = [ "build" "host" "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"
+
+    # force target prefix. Some versions of binutils will make it empty
+    # if `--host` and `--target` are too close, even if Nixpkgs thinks
+    # the platforms are different (e.g. because not all the info makes
+    # the `config`). Other versions of binutils will always prefix if
+    # `--target` is passed, even if `--host` and `--target` are the same.
+    # The easiest thing for us to do is not leave it to chance, and force
+    # the program prefix to be what we want it to be.
+    "--program-prefix=${targetPrefix}"
+  ] ++ 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;
+    hasGold = gold;
+    isGNU = true;
+  };
+
+  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-Update-GNU_PROPERTY_X86_XXX-macros.patch b/nixpkgs/pkgs/development/tools/misc/binutils/gold-Update-GNU_PROPERTY_X86_XXX-macros.patch
new file mode 100644
index 000000000000..c4eef87a0c8d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/gold-Update-GNU_PROPERTY_X86_XXX-macros.patch
@@ -0,0 +1,292 @@
+From 586e30940e640f67bd55bd72e1d1355a4faf8079 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Tue, 13 Oct 2020 05:20:49 -0700
+Subject: [PATCH] gold: Update GNU_PROPERTY_X86_XXX macros
+
+This patch updates GNU_PROPERTY_X86_XXX macros for gold:
+
+1. GNU_PROPERTY_X86_UINT32_AND_XXX: A 4-byte unsigned integer property.
+A bit is set if it is set in all relocatable inputs:
+
+ #define GNU_PROPERTY_X86_UINT32_AND_LO      0xc0000002
+ #define GNU_PROPERTY_X86_UINT32_AND_HI      0xc0007fff
+
+2. GNU_PROPERTY_X86_UINT32_OR_XXX: A 4-byte unsigned integer property.
+A bit is set if it is set in any relocatable inputs:
+
+ #define GNU_PROPERTY_X86_UINT32_OR_LO    0xc0008000
+ #define GNU_PROPERTY_X86_UINT32_OR_HI    0xc000ffff
+
+3. GNU_PROPERTY_X86_UINT32_OR_AND_XXX: A 4-byte unsigned integer property.
+A bit is set if it is set in any relocatable inputs and the property is
+present in all relocatable inputs:
+
+ #define GNU_PROPERTY_X86_UINT32_OR_AND_LO   0xc0010000
+ #define GNU_PROPERTY_X86_UINT32_OR_AND_HI   0xc0017fff
+
+4. GNU_PROPERTY_X86_FEATURE_2_NEEDED, GNU_PROPERTY_X86_FEATURE_2_USED
+and GNU_PROPERTY_X86_FEATURE_2_XXX bits.
+
+GNU_PROPERTY_X86_FEATURE_1_AND is unchanged.  GNU_PROPERTY_X86_ISA_1_USED
+and GNU_PROPERTY_X86_ISA_1_NEEDED are updated to better support targeted
+processors since GNU_PROPERTY_X86_ISA_1_?86 aren't isn't very useful.
+A new set of GNU_PROPERTY_X86_ISA_1_XXX bits are defined.  The previous
+GNU_PROPERTY_X86_ISA_1_XXX macros are deprecated and renamed to
+GNU_PROPERTY_X86_COMPAT_ISA_1_XXX and GNU_PROPERTY_X86_COMPAT_2_ISA_1_XXX.
+
+elfcpp/
+
+	* elfcpp.h (GNU_PROPERTY_X86_ISA_1_USED): Renamed to ...
+	(GNU_PROPERTY_X86_COMPAT_ISA_1_USED): This.
+	(GNU_PROPERTY_X86_ISA_1_NEEDED): Renamed to ...
+	(GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED): This.
+	(GNU_PROPERTY_X86_UINT32_AND_LO): New.
+	(GNU_PROPERTY_X86_UINT32_AND_HI): Likewise.
+	(GNU_PROPERTY_X86_UINT32_OR_LO): Likewise.
+	(GNU_PROPERTY_X86_UINT32_OR_HI): Likewise.
+	(GNU_PROPERTY_X86_UINT32_OR_AND_LO): Likewise.
+	(GNU_PROPERTY_X86_UINT32_OR_AND_HI): Likewise.
+	(GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED): New.
+	(GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED): Likewise.
+	(GNU_PROPERTY_X86_FEATURE_1_AND): Updated to
+	(GNU_PROPERTY_X86_UINT32_AND_LO + 0).
+	(GNU_PROPERTY_X86_ISA_1_NEEDED): New.  Defined to
+	GNU_PROPERTY_X86_UINT32_OR_LO + 2.
+	(GNU_PROPERTY_X86_FEATURE_2_NEEDED): New.  Defined to
+	(GNU_PROPERTY_X86_UINT32_OR_LO + 1).
+	(GNU_PROPERTY_X86_ISA_1_USED): New.  Defined to
+	GNU_PROPERTY_X86_UINT32_OR_AND_LO + 2.
+	(GNU_PROPERTY_X86_FEATURE_2_USED): New.  Defined to
+	(GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1).
+
+gold/
+
+	* x86_64.cc (Target_x86_64::Target_x86_64): Initialize
+	feature_2_used_, feature_2_needed_ and object_feature_2_used_.
+	(Target_x86_64::feature_2_used_): New data member.
+	(Target_x86_64::feature_2_needed_): Likewise.
+	(Target_x86_64::object_isa_1_used_): Likewise.
+	(Target_x86_64::record_gnu_property): Support
+	GNU_PROPERTY_X86_COMPAT_ISA_1_USED,
+	GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED,
+	GNU_PROPERTY_X86_COMPAT_2_ISA_1_USED,
+	GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED,
+	GNU_PROPERTY_X86_FEATURE_2_USED and
+	GNU_PROPERTY_X86_FEATURE_2_NEEDED.
+	(Target_x86_64::merge_gnu_properties): Merge FEATURE_2_USED bits.
+	Initialize object_feature_2_used_.
+	(Target_x86_64::do_finalize_gnu_properties): Support
+	GNU_PROPERTY_X86_FEATURE_2_USED and
+	GNU_PROPERTY_X86_FEATURE_2_NEEDED.
+	* testsuite/gnu_property_a.S (GNU_PROPERTY_X86_ISA_1_USED): Set
+	to 0xc0010002.
+	(GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002.
+	* testsuite/gnu_property_b.S (GNU_PROPERTY_X86_ISA_1_USED): Set
+	to 0xc0010002.
+	(GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002.
+	* testsuite/gnu_property_c.S (GNU_PROPERTY_X86_ISA_1_USED): Set
+	to 0xc0010002.
+	(GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002.
+	* testsuite/gnu_property_test.sh: Updated.
+---
+ elfcpp/ChangeLog                    | [omitted]
+ elfcpp/elfcpp.h                     | 18 ++++++++++++---
+ gold/ChangeLog                      | [omitted]
+ gold/testsuite/gnu_property_a.S     |  4 ++--
+ gold/testsuite/gnu_property_b.S     |  4 ++--
+ gold/testsuite/gnu_property_c.S     |  4 ++--
+ gold/testsuite/gnu_property_test.sh |  4 ++--
+ gold/x86_64.cc                      | 34 +++++++++++++++++++++++++++--
+ 8 files changed, 110 insertions(+), 13 deletions(-)
+
+diff --git a/elfcpp/elfcpp.h b/elfcpp/elfcpp.h
+index 65d803c00e2..4b6ff94a654 100644
+--- a/elfcpp/elfcpp.h
++++ b/elfcpp/elfcpp.h
+@@ -1013,9 +1013,21 @@ enum
+   GNU_PROPERTY_STACK_SIZE = 1,
+   GNU_PROPERTY_NO_COPY_ON_PROTECTED = 2,
+   GNU_PROPERTY_LOPROC = 0xc0000000,
+-  GNU_PROPERTY_X86_ISA_1_USED = 0xc0000000,
+-  GNU_PROPERTY_X86_ISA_1_NEEDED = 0xc0000001,
+-  GNU_PROPERTY_X86_FEATURE_1_AND = 0xc0000002,
++  GNU_PROPERTY_X86_COMPAT_ISA_1_USED = 0xc0000000,
++  GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED = 0xc0000001,
++  GNU_PROPERTY_X86_UINT32_AND_LO = 0xc0000002,
++  GNU_PROPERTY_X86_UINT32_AND_HI = 0xc0007fff,
++  GNU_PROPERTY_X86_UINT32_OR_LO = 0xc0008000,
++  GNU_PROPERTY_X86_UINT32_OR_HI = 0xc000ffff,
++  GNU_PROPERTY_X86_UINT32_OR_AND_LO = 0xc0010000,
++  GNU_PROPERTY_X86_UINT32_OR_AND_HI = 0xc0017fff,
++  GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED = GNU_PROPERTY_X86_UINT32_OR_LO + 0,
++  GNU_PROPERTY_X86_COMPAT_2_ISA_1_USED = GNU_PROPERTY_X86_UINT32_OR_AND_LO + 0,
++  GNU_PROPERTY_X86_FEATURE_1_AND = GNU_PROPERTY_X86_UINT32_AND_LO + 0,
++  GNU_PROPERTY_X86_ISA_1_NEEDED = GNU_PROPERTY_X86_UINT32_OR_LO + 2,
++  GNU_PROPERTY_X86_FEATURE_2_NEEDED = GNU_PROPERTY_X86_UINT32_OR_LO + 1,
++  GNU_PROPERTY_X86_ISA_1_USED = GNU_PROPERTY_X86_UINT32_OR_AND_LO + 2,
++  GNU_PROPERTY_X86_FEATURE_2_USED = GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1,
+   GNU_PROPERTY_HIPROC = 0xdfffffff,
+   GNU_PROPERTY_LOUSER = 0xe0000000,
+   GNU_PROPERTY_HIUSER = 0xffffffff
+diff --git a/gold/testsuite/gnu_property_a.S b/gold/testsuite/gnu_property_a.S
+index 463bc8e52fe..5fbbbc9c4bb 100644
+--- a/gold/testsuite/gnu_property_a.S
++++ b/gold/testsuite/gnu_property_a.S
+@@ -1,8 +1,8 @@
+ #define NT_GNU_PROPERTY_TYPE_0 5
+ 
+ #define GNU_PROPERTY_STACK_SIZE 1
+-#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000
+-#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001
++#define GNU_PROPERTY_X86_ISA_1_USED 0xc0010002
++#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0008002
+ #define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002
+ 
+ #if __SIZEOF_PTRDIFF_T__  == 8
+diff --git a/gold/testsuite/gnu_property_b.S b/gold/testsuite/gnu_property_b.S
+index 0c0c038ead1..7028f73d7ab 100644
+--- a/gold/testsuite/gnu_property_b.S
++++ b/gold/testsuite/gnu_property_b.S
+@@ -2,8 +2,8 @@
+ 
+ #define GNU_PROPERTY_STACK_SIZE 1
+ #define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2
+-#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000
+-#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001
++#define GNU_PROPERTY_X86_ISA_1_USED 0xc0010002
++#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0008002
+ #define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002
+ 
+ #if __SIZEOF_PTRDIFF_T__  == 8
+diff --git a/gold/testsuite/gnu_property_c.S b/gold/testsuite/gnu_property_c.S
+index ace159a9a9d..c8cbd8bce28 100644
+--- a/gold/testsuite/gnu_property_c.S
++++ b/gold/testsuite/gnu_property_c.S
+@@ -2,8 +2,8 @@
+ 
+ #define GNU_PROPERTY_STACK_SIZE 1
+ #define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2
+-#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000
+-#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001
++#define GNU_PROPERTY_X86_ISA_1_USED 0xc0010002
++#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0008002
+ #define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002
+ 
+ #if __SIZEOF_PTRDIFF_T__  == 8
+diff --git a/gold/testsuite/gnu_property_test.sh b/gold/testsuite/gnu_property_test.sh
+index 1806d3474cc..a4096005b78 100755
+--- a/gold/testsuite/gnu_property_test.sh
++++ b/gold/testsuite/gnu_property_test.sh
+@@ -77,8 +77,8 @@ check_count gnu_property_test.stdout "^  NOTE" 2
+ 
+ check gnu_property_test.stdout "stack size: 0x111100"
+ check gnu_property_test.stdout "no copy on protected"
+-check gnu_property_test.stdout "x86 ISA used: i486, SSE2, SSE4_2, AVX512CD"
+-check gnu_property_test.stdout "x86 ISA needed: i486, SSE2, SSE4_2, AVX512CD"
++check gnu_property_test.stdout "x86 ISA used: x86-64-v2, <unknown: 10>, <unknown: 100>, <unknown: 1000>"
++check gnu_property_test.stdout "x86 ISA needed: x86-64-v2, <unknown: 10>, <unknown: 100>, <unknown: 1000>"
+ check gnu_property_test.stdout "x86 feature: IBT"
+ 
+ exit 0
+diff --git a/gold/x86_64.cc b/gold/x86_64.cc
+index 9cb2cf0a322..378bac16f78 100644
+--- a/gold/x86_64.cc
++++ b/gold/x86_64.cc
+@@ -706,8 +706,9 @@ class Target_x86_64 : public Sized_target<size, false>
+       rela_irelative_(NULL), copy_relocs_(elfcpp::R_X86_64_COPY),
+       got_mod_index_offset_(-1U), tlsdesc_reloc_info_(),
+       tls_base_symbol_defined_(false), isa_1_used_(0), isa_1_needed_(0),
+-      feature_1_(0), object_isa_1_used_(0), object_feature_1_(0),
+-      seen_first_object_(false)
++      feature_1_(0), feature_2_used_(0), feature_2_needed_(0),
++      object_isa_1_used_(0), object_feature_1_(0),
++      object_feature_2_used_(0), seen_first_object_(false)
+   { }
+ 
+   // Hook for a new output section.
+@@ -1382,6 +1383,8 @@ class Target_x86_64 : public Sized_target<size, false>
+   uint32_t isa_1_used_;
+   uint32_t isa_1_needed_;
+   uint32_t feature_1_;
++  uint32_t feature_2_used_;
++  uint32_t feature_2_needed_;
+   // Target-specific properties from the current object.
+   // These bits get ORed into ISA_1_USED_ after all properties for the object
+   // have been processed. But if either is all zeroes (as when the property
+@@ -1391,6 +1394,7 @@ class Target_x86_64 : public Sized_target<size, false>
+   // These bits get ANDed into FEATURE_1_ after all properties for the object
+   // have been processed.
+   uint32_t object_feature_1_;
++  uint32_t object_feature_2_used_;
+   // Whether we have seen our first object, for use in initializing FEATURE_1_.
+   bool seen_first_object_;
+ };
+@@ -1594,9 +1598,15 @@ Target_x86_64<size>::record_gnu_property(
+ 
+   switch (pr_type)
+     {
++    case elfcpp::GNU_PROPERTY_X86_COMPAT_ISA_1_USED:
++    case elfcpp::GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED:
++    case elfcpp::GNU_PROPERTY_X86_COMPAT_2_ISA_1_USED:
++    case elfcpp::GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED:
+     case elfcpp::GNU_PROPERTY_X86_ISA_1_USED:
+     case elfcpp::GNU_PROPERTY_X86_ISA_1_NEEDED:
+     case elfcpp::GNU_PROPERTY_X86_FEATURE_1_AND:
++    case elfcpp::GNU_PROPERTY_X86_FEATURE_2_USED:
++    case elfcpp::GNU_PROPERTY_X86_FEATURE_2_NEEDED:
+       if (pr_datasz != 4)
+ 	{
+ 	  gold_warning(_("%s: corrupt .note.gnu.property section "
+@@ -1625,6 +1635,12 @@ Target_x86_64<size>::record_gnu_property(
+       // If we see multiple feature props in one object, OR them together.
+       this->object_feature_1_ |= val;
+       break;
++    case elfcpp::GNU_PROPERTY_X86_FEATURE_2_USED:
++      this->object_feature_2_used_ |= val;
++      break;
++    case elfcpp::GNU_PROPERTY_X86_FEATURE_2_NEEDED:
++      this->feature_2_needed_ |= val;
++      break;
+     }
+ }
+ 
+@@ -1642,15 +1658,23 @@ Target_x86_64<size>::merge_gnu_properties(const Object*)
+       else if (this->isa_1_used_ != 0)
+ 	this->isa_1_used_ |= this->object_isa_1_used_;
+       this->feature_1_ &= this->object_feature_1_;
++      // If any object is missing the FEATURE_2_USED property, we must
++      // omit it from the output file.
++      if (this->object_feature_2_used_ == 0)
++	this->feature_2_used_ = 0;
++      else if (this->feature_2_used_ != 0)
++	this->feature_2_used_ |= this->object_feature_2_used_;
+     }
+   else
+     {
+       this->isa_1_used_ = this->object_isa_1_used_;
+       this->feature_1_ = this->object_feature_1_;
++      this->feature_2_used_ = this->object_feature_2_used_;
+       this->seen_first_object_ = true;
+     }
+   this->object_isa_1_used_ = 0;
+   this->object_feature_1_ = 0;
++  this->object_feature_2_used_ = 0;
+ }
+ 
+ static inline void
+@@ -1676,6 +1700,12 @@ Target_x86_64<size>::do_finalize_gnu_properties(Layout* layout) const
+   if (this->feature_1_ != 0)
+     add_property(layout, elfcpp::GNU_PROPERTY_X86_FEATURE_1_AND,
+ 		 this->feature_1_);
++  if (this->feature_2_used_ != 0)
++    add_property(layout, elfcpp::GNU_PROPERTY_X86_FEATURE_2_USED,
++		 this->feature_2_used_);
++  if (this->feature_2_needed_ != 0)
++    add_property(layout, elfcpp::GNU_PROPERTY_X86_FEATURE_2_NEEDED,
++		 this->feature_2_needed_);
+ }
+ 
+ // Write the first three reserved words of the .got.plt section.
+-- 
+2.27.0
+
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/binutils/windres-locate-gcc.patch b/nixpkgs/pkgs/development/tools/misc/binutils/windres-locate-gcc.patch
new file mode 100644
index 000000000000..721667c62cec
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/windres-locate-gcc.patch
@@ -0,0 +1,19 @@
+diff --git a/binutils/resrc.c b/binutils/resrc.c
+index a875c3a4..0411d047 100644
+--- a/binutils/resrc.c
++++ b/binutils/resrc.c
+@@ -521,7 +521,13 @@ read_rc_file (const char *filename, const char *preprocessor,
+ 
+       cpp_pipe = 0;
+ 
+-      if (dash)
++      /* Nixpkgs specific : look first at the prefixed path
++        ( there should be no gcc in the binutils folder ) */
++      if (slash && dash) {
++        cpp_pipe = look_for_default(cmd, slash + 1, dash - slash, preprocargs, filename);
++      }
++
++      if (dash && ! cpp_pipe)
+ 	{
+ 	  /* First, try looking for a prefixed gcc in the windres
+ 	     directory, with the same prefix as windres */
diff --git a/nixpkgs/pkgs/development/tools/misc/blackfire/default.nix b/nixpkgs/pkgs/development/tools/misc/blackfire/default.nix
new file mode 100644
index 000000000000..6f82e0731088
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/blackfire/default.nix
@@ -0,0 +1,65 @@
+{ stdenv
+, lib
+, fetchurl
+, dpkg
+, autoPatchelfHook
+, writeShellScript
+, curl
+, jq
+, common-updater-scripts
+}:
+
+stdenv.mkDerivation rec {
+  pname = "blackfire";
+  version = "2.5.2";
+
+  src = fetchurl {
+    url = "https://packages.blackfire.io/debian/pool/any/main/b/blackfire/blackfire_${version}_amd64.deb";
+    sha256 = "1RO5yabSNpIz5lWXngMOZ1S2vtnLEkXIj1ZoIinRrQ0=";
+  };
+
+  nativeBuildInputs = [
+    dpkg
+    autoPatchelfHook
+  ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    dpkg-deb -x $src $out
+    mv $out/usr/* $out
+    rmdir $out/usr
+
+    # Fix ExecStart path and replace deprecated directory creation method,
+    # use dynamic user.
+    substituteInPlace "$out/lib/systemd/system/blackfire-agent.service" \
+      --replace '/usr/' "$out/" \
+      --replace 'ExecStartPre=/bin/mkdir -p /var/run/blackfire' 'RuntimeDirectory=blackfire' \
+      --replace 'ExecStartPre=/bin/chown blackfire: /var/run/blackfire' "" \
+      --replace 'User=blackfire' 'DynamicUser=yes' \
+      --replace 'PermissionsStartOnly=true' ""
+
+    # Modernize socket path.
+    substituteInPlace "$out/etc/blackfire/agent" \
+      --replace '/var/run' '/run'
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    updateScript = writeShellScript "update-${pname}" ''
+      export PATH="${lib.makeBinPath [ curl jq common-updater-scripts ]}"
+      update-source-version "$UPDATE_NIX_ATTR_PATH" "$(curl https://blackfire.io/api/v1/releases | jq .cli --raw-output)"
+    '';
+  };
+
+  meta = with lib; {
+    description = "Blackfire Profiler agent and client";
+    homepage = "https://blackfire.io/";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/blackfire/php-probe.nix b/nixpkgs/pkgs/development/tools/misc/blackfire/php-probe.nix
new file mode 100644
index 000000000000..c66c2a5bfd8e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/blackfire/php-probe.nix
@@ -0,0 +1,65 @@
+{ stdenv
+, lib
+, fetchurl
+, dpkg
+, autoPatchelfHook
+, php
+, writeShellScript
+, curl
+, jq
+, common-updater-scripts
+}:
+
+let
+  soFile = {
+    "7.3" = "blackfire-20180731";
+    "7.4" = "blackfire-20190902";
+    "8.0" = "blackfire-20200930";
+    "8.1" = "blackfire-20210902";
+  }.${lib.versions.majorMinor php.version} or (throw "Unsupported PHP version.");
+in stdenv.mkDerivation rec {
+  pname = "php-blackfire";
+  version = "1.74.0";
+
+  src = fetchurl {
+    url = "https://packages.blackfire.io/debian/pool/any/main/b/blackfire-php/blackfire-php_${version}_amd64.deb";
+    sha256 = "79uOQmTovGbY0NLpc3m/xFULS899u2XdR16qd8L4FLw=";
+  };
+
+  nativeBuildInputs = [
+    dpkg
+    autoPatchelfHook
+  ];
+
+  unpackPhase = ''
+    runHook preUnpack
+
+    dpkg-deb -x $src pkg
+    sourceRoot=pkg
+
+    runHook postUnpack
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D usr/lib/blackfire-php/amd64/${soFile}${lib.optionalString php.ztsSupport "-zts"}.so $out/lib/php/extensions/blackfire.so
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    updateScript = writeShellScript "update-${pname}" ''
+      export PATH="${lib.makeBinPath [ curl jq common-updater-scripts ]}"
+      update-source-version "$UPDATE_NIX_ATTR_PATH" "$(curl https://blackfire.io/api/v1/releases | jq .probe.php --raw-output)"
+    '';
+  };
+
+  meta = with lib; {
+    description = "Blackfire Profiler PHP module";
+    homepage = "https://blackfire.io/";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/bonnmotion/default.nix b/nixpkgs/pkgs/development/tools/misc/bonnmotion/default.nix
new file mode 100644
index 000000000000..7ec9f3e1400a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/bonnmotion/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, lib, fetchzip, substituteAll, bash, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "bonnmotion";
+  version = "3.0.1";
+
+  src = fetchzip {
+    url = "https://sys.cs.uos.de/bonnmotion/src/bonnmotion-${version}.zip";
+    sha256 = "16bjgr0hy6an892m5r3x9yq6rqrl11n91f9rambq5ik1cxjqarxw";
+  };
+
+  patches = [
+    # The software has a non-standard install bash script which kind of works.
+    # However, to make it fully functional, the automatically detection of the
+    # program paths must be substituted with full paths.
+    (substituteAll {
+      src = ./install.patch;
+      inherit bash jre;
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    ./install
+
+    mkdir -p $out/bin $out/share/bonnmotion
+    cp -r ./classes ./lib $out/share/bonnmotion/
+    cp ./bin/bm $out/bin/
+
+    substituteInPlace $out/bin/bm \
+      --replace /build/source $out/share/bonnmotion
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A mobility scenario generation and analysis tool";
+    longDescription = ''
+      BonnMotion is a Java software which creates and analyzes mobility
+      scenarios and is most commonly used as a tool for the investigation of
+      mobile ad hoc network characteristics. The scenarios can also be exported
+      for several network simulators, such as ns-2, ns-3, GloMoSim/QualNet,
+      COOJA, MiXiM, and ONE.
+    '';
+    homepage = "https://sys.cs.uos.de/bonnmotion/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/bonnmotion/install.patch b/nixpkgs/pkgs/development/tools/misc/bonnmotion/install.patch
new file mode 100644
index 000000000000..86be99b3dd5e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/bonnmotion/install.patch
@@ -0,0 +1,75 @@
+diff --git a/install b/install
+index 95afa2c..70c5fca 100755
+--- a/install
++++ b/install
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!@bash@/bin/bash
+ 
+ echo "BonnMotion - a mobility scenario generation and analysis tool"
+ echo "Copyright (C) 2002-2012 University of Bonn"
+@@ -19,28 +19,11 @@ echo "along with this program; if not, write to the Free Software"
+ echo "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA"
+ echo
+ 
+-OS=`uname -s | tr A-Z a-z | sed -e s/_.\*//`
+-
+ PACKAGE=edu.bonn.cs.iv.bonnmotion
+-JAVAPATH=`which java 2> /dev/null`
+-if [ ! "$JAVAPATH" = "" ]
+-then
+-	JAVAPATH=`dirname ${JAVAPATH}`
+-fi
+-echo -n Please enter your Java binary path \[$JAVAPATH\]:\ 
+-read KBDENTRY
+-if [ ! "$KBDENTRY" = "" ]
+-then
+-	JAVAPATH=$KBDENTRY
+-fi
++JAVAPATH="@jre@/bin"
+ if [ -x "${JAVAPATH}/java" ]
+ then
+-	cd `dirname $0`
+-	BONNMOTION=`pwd`
+-
+-	cd "${JAVAPATH}"
+-	JAVAPATH=`pwd`
+-	cd "${BONNMOTION}"
++  BONNMOTION="$(realpath .)"
+ 
+ 	CLASSPATH="${BONNMOTION}/classes"
+ 	DOCPATH="${BONNMOTION}/javadoc"
+@@ -52,14 +35,7 @@ then
+ 	then
+ 		mkdir "${DOCPATH}"
+ 	fi
+-	if [ $OS = "cygwin" ]
+-	then
+-		cd "${CLASSPATH}"
+-		CLASSPATH=`cmd.exe /c cd`
+-		cd "${DOCPATH}"
+-		DOCPATH=`cmd.exe /c cd`
+-	fi
+-	
++
+ 	for l in $BONNMOTION/lib/*.jar
+ 	do
+ 		LIBRARYPATH=$LIBRARYPATH:$l
+@@ -69,7 +45,7 @@ then
+ 	APPS=`ls`
+ 	cd "${BONNMOTION}/bin"
+ 
+-	echo \#\!/bin/bash > .head
++	echo \#\!@bash@/bin/bash > .head
+ 	echo >> .head
+ 	echo BONNMOTION=\"$BONNMOTION\" >> .head
+ 	echo PACKAGE=\"$PACKAGE\" >> .head
+@@ -103,8 +79,6 @@ then
+ 	fi
+ 	echo "done."
+ 	echo
+-	echo "$ ./bin/bm -h"
+-	./bm
+ else
+ 	echo No executable \"$JAVAPATH/java\", aborting.
+ fi
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..e3bfc958437a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/bsdbuild/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchurl, perl, libtool, pkg-config, gettext, mandoc, ed }:
+
+stdenv.mkDerivation rec {
+  pname = "bsdbuild";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "http://stable.hypertriton.com/bsdbuild/${pname}-${version}.tar.gz";
+    sha256 = "1zrdjh7a6z4khhfw9zrp490afq306cpl5v8wqz2z55ys7k1n5ifl";
+  };
+
+  buildInputs = [ perl mandoc ed ];
+  nativeBuildInputs = [ pkg-config 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 = lib.licenses.bsd3;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/c2ffi/default.nix b/nixpkgs/pkgs/development/tools/misc/c2ffi/default.nix
new file mode 100644
index 000000000000..6db9557c6e1b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/c2ffi/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, fetchFromGitHub
+, cmake
+, llvmPackages_11
+, unstableGitUpdater
+}:
+
+let
+  c2ffiBranch = "llvm-11.0.0";
+  llvmPackages = llvmPackages_11;
+in
+
+llvmPackages.stdenv.mkDerivation {
+  pname = "c2ffi-${c2ffiBranch}";
+  version = "unstable-2021-06-15";
+
+  src = fetchFromGitHub {
+    owner = "rpav";
+    repo = "c2ffi";
+    rev = "f50243926a0afb589de1078a073ac08910599582";
+    sha256 = "UstGicFzFY0/Jge5HGYTPwYSnh9OUBY5346ObZYfR54=";
+  };
+
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://github.com/rpav/c2ffi.git";
+    branch = c2ffiBranch;
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    llvmPackages.llvm
+    llvmPackages.clang
+    llvmPackages.libclang
+  ];
+
+  # This isn't much, but...
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/c2ffi --help 2>&1 >/dev/null
+  '';
+
+  # LLVM may be compiled with -fno-rtti, so let's just turn it off.
+  # A mismatch between lib{clang,LLVM}* and us can lead to the link time error:
+  # undefined reference to `typeinfo for clang::ASTConsumer'
+  CXXFLAGS="-fno-rtti";
+
+  meta = with lib; {
+    homepage = "https://github.com/rpav/c2ffi";
+    description = "An LLVM based tool for extracting definitions from C, C++, and Objective C header files for use with foreign function call interfaces";
+    license = licenses.lgpl21Only;
+    maintainers = with maintainers; [ attila-lendvai ];
+ };
+}
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..a8f6e32f1e08
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cbrowser/default.nix
@@ -0,0 +1,36 @@
+{ fetchurl, lib, stdenv, tk, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "cbrowser";
+  version = "0.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1050mirjab23qsnq3lp3a9vwcbavmh9kznzjm7dr5vkx8b7ffcji";
+  };
+
+  patches = [ ./backslashes-quotes.diff ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ tk ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/${pname}-${version}
+    cp -R * $out/share/${pname}-${version}/
+
+    makeWrapper $out/share/${pname}-${version}/cbrowser $out/bin/cbrowser \
+      --prefix PATH : ${tk}/bin
+  '';
+
+  meta = {
+    description = "Tcl/Tk GUI front-end to cscope";
+
+    license = lib.licenses.gpl2Plus;
+
+    homepage = "https://sourceforge.net/projects/cbrowser/";
+
+    maintainers = with lib.maintainers; [viric];
+
+    platforms = with 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..8b5e61580590
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ccache/default.nix
@@ -0,0 +1,126 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, substituteAll
+, binutils
+, asciidoctor
+, cmake
+, perl
+, zstd
+, bashInteractive
+, xcodebuild
+, makeWrapper
+, nix-update-script
+}:
+
+let ccache = stdenv.mkDerivation rec {
+  pname = "ccache";
+  version = "4.6";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "011i1aczv4nixq4gvjixcd73df2xplcrldfv0w12yaz5iy4vaw6b";
+  };
+
+  outputs = [ "out" "man" ];
+
+  patches = [
+    # When building for Darwin, test/run uses dwarfdump, whereas on
+    # Linux it uses objdump. We don't have dwarfdump packaged for
+    # Darwin, so this patch updates the test to also use objdump on
+    # Darwin.
+    (substituteAll {
+      src = ./force-objdump-on-darwin.patch;
+      objdump = "${binutils.bintools}/bin/objdump";
+    })
+  ];
+
+  nativeBuildInputs = [ asciidoctor cmake perl ];
+  buildInputs = [ zstd ];
+
+  cmakeFlags = [
+    # Build system does not autodetect redis library presence.
+    # Requires explicit flag.
+    "-DREDIS_STORAGE_BACKEND=OFF"
+  ];
+
+  doCheck = true;
+  checkInputs = [
+    # test/run requires the compgen function which is available in
+    # bashInteractive, but not bash.
+    bashInteractive
+  ] ++ lib.optional stdenv.isDarwin xcodebuild;
+
+  checkPhase = let
+    badTests = [
+      "test.trim_dir" # flaky on hydra (possibly filesystem-specific?)
+    ] ++ lib.optionals stdenv.isDarwin [
+      "test.basedir"
+      "test.multi_arch"
+      "test.nocpp2"
+    ];
+  in ''
+    runHook preCheck
+    export HOME=$(mktemp -d)
+    ctest --output-on-failure -E '^(${lib.concatStringsSep "|" badTests})$'
+    runHook postCheck
+  '';
+
+  passthru = {
+    # A derivation that provides gcc and g++ commands, but that
+    # will end up calling ccache for the given cacheDir
+    links = {unwrappedCC, extraConfig}: stdenv.mkDerivation {
+      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 ${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
+      '';
+    };
+  };
+
+  passthru.updateScript = nix-update-script {
+    attrPath = pname;
+  };
+
+  meta = with lib; {
+    description = "Compiler cache for fast recompilation of C/C++ code";
+    homepage = "https://ccache.dev";
+    downloadPage = "https://ccache.dev/download.html";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kira-bruneau r-burns ];
+    platforms = platforms.unix;
+  };
+};
+in ccache
diff --git a/nixpkgs/pkgs/development/tools/misc/ccache/force-objdump-on-darwin.patch b/nixpkgs/pkgs/development/tools/misc/ccache/force-objdump-on-darwin.patch
new file mode 100644
index 000000000000..81a4f27ab736
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ccache/force-objdump-on-darwin.patch
@@ -0,0 +1,31 @@
+diff --git a/test/run b/test/run
+index 9623e49d..3df1c5a8 100755
+--- a/test/run
++++ b/test/run
+@@ -126,23 +126,17 @@ file_size() {
+ objdump_cmd() {
+     local file="$1"
+ 
+-    if $HOST_OS_APPLE; then
+-        xcrun dwarfdump -r 0 "$file"
+-    elif $HOST_OS_WINDOWS || $HOST_OS_CYGWIN; then
++    if $HOST_OS_WINDOWS || $HOST_OS_CYGWIN; then
+         # For some reason objdump only shows the basename of the file, so fall
+         # back to brute force and ignorance.
+         strings "$1"
+     else
+-        objdump -W "$file"
++        @objdump@ -W "$file"
+     fi
+ }
+ 
+ objdump_grep_cmd() {
+-    if $HOST_OS_APPLE; then
+-        fgrep -q "\"$1\""
+-    else
+-        fgrep -q ": $1"
+-    fi
++    fgrep -q ": $1"
+ }
+ 
+ expect_stat() {
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..bd753016fc8b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ccls/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub
+, cmake, llvmPackages, rapidjson, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "ccls";
+  version = "0.20210330";
+
+  src = fetchFromGitHub {
+    owner = "MaskRay";
+    repo = "ccls";
+    rev = version;
+    sha256 = "sha256-jipSipgD0avd7XODlpxnqjHK3s6nacaxbIQIddix7X8=";
+  };
+
+  nativeBuildInputs = [ cmake llvmPackages.llvm.dev ];
+  buildInputs = with llvmPackages; [ libclang llvm rapidjson ];
+
+  cmakeFlags = [ "-DCCLS_VERSION=${version}" ];
+
+  preConfigure = ''
+    cmakeFlagsArray+=(-DCMAKE_CXX_FLAGS="-fvisibility=hidden -fno-rtti")
+  '';
+
+  clang = llvmPackages.clang;
+  shell = runtimeShell;
+
+  postFixup = ''
+    export wrapped=".ccls-wrapped"
+    mv $out/bin/ccls $out/bin/$wrapped
+    substituteAll ${./wrapper} $out/bin/ccls
+    chmod --reference=$out/bin/$wrapped $out/bin/ccls
+  '';
+
+  meta = with 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 = with maintainers; [ mic92 tobim ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/ccls/wrapper b/nixpkgs/pkgs/development/tools/misc/ccls/wrapper
new file mode 100644
index 000000000000..294b60893a3f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ccls/wrapper
@@ -0,0 +1,9 @@
+#! @shell@ -e
+
+printf -v extraArgs ',\"%s\"' \
+  $(cat @clang@/nix-support/libc-cflags \
+        @clang@/nix-support/libcxx-cxxflags) \
+  ${NIX_CFLAGS_COMPILE}
+initString="--init={\"clang\":{\"extraArgs\":[${extraArgs:1}],\"resourceDir\":\"@clang@/resource-root\"}}"
+
+exec -a "$0" "@out@/bin/@wrapped@" "${initString}" "$@"
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..ab9966c6fca6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cflow/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, gettext, emacs }:
+
+stdenv.mkDerivation rec {
+  pname = "cflow";
+  version = "1.7";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-0BFGyvkAHiZhM0F8KoJYpktfwW/LCCoU9lKCBNDJcIY=";
+  };
+
+  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.
+    lib.optional
+      (! (lib.lists.any (x: stdenv.hostPlatform.system == x)
+              [ "i686-cygwin" ]))
+      emacs;
+
+  doCheck = true;
+
+  meta = with 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 ];
+
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
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..e8136be0eb40
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cgdb/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, ncurses, readline, flex, texinfo }:
+
+stdenv.mkDerivation rec {
+  pname = "cgdb";
+  version = "0.8.0";
+
+  src = fetchurl {
+    url = "https://cgdb.me/files/${pname}-${version}.tar.gz";
+    sha256 = "sha256-DTi1JNN3JXsQa61thW2K4zBBQOHuJAhTQ+bd8bZYEfE=";
+  };
+
+  buildInputs = [ ncurses readline flex texinfo ];
+
+  meta = with 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..6222bb312bb0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/checkbashisms/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, perl, installShellFiles }:
+stdenv.mkDerivation rec {
+  version = "2.21.1";
+  pname = "checkbashisms";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/d/devscripts/devscripts_${version}.tar.xz";
+    hash = "sha256-1ZbIiUrFd38uMVLy7YayLLm5RrmcovsA++JTb8PbTFI=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+  buildInputs = [ perl ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    substituteInPlace ./scripts/checkbashisms.pl \
+      --replace '###VERSION###' "$version"
+
+    runHook postBuild
+  '';
+  installPhase = ''
+    runHook preInstall
+
+    installManPage scripts/$pname.1
+    installShellCompletion --bash --name $pname scripts/$pname.bash_completion
+    install -D -m755 scripts/$pname.pl $out/bin/$pname
+
+    runHook postInstall
+  '';
+
+  meta = {
+    homepage = "https://sourceforge.net/projects/checkbaskisms/";
+    description = "Check shell scripts for non-portable syntax";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ kaction ];
+    platforms = 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..97da80cc7339
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/chrpath/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "chrpath";
+  version = "0.16";
+
+  src = fetchurl {
+    url = "https://alioth-archive.debian.org/releases/${pname}/${pname}/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0yvfq891mcdkf8g18gjjkn2m5rvs8z4z4cl1vwdhx6f2p9a4q3dv";
+  };
+
+  meta = with 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://tracker.debian.org/pkg/chrpath";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/chruby-fish/default.nix b/nixpkgs/pkgs/development/tools/misc/chruby-fish/default.nix
new file mode 100644
index 000000000000..6268c740e212
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/chruby-fish/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchFromGitHub, chruby }:
+
+stdenv.mkDerivation rec {
+  pname = "chruby-fish";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "JeanMertz";
+    repo = "chruby-fish";
+    rev = "v${version}";
+    sha256 = "15q0ywsn9pcypbpvlq0wb41x4igxm9bsvhg9a05dqw1n437qjhyb";
+  };
+
+  postInstall = ''
+    sed -i -e '1iset CHRUBY_ROOT ${chruby}' $out/share/chruby/auto.fish
+    sed -i -e '1iset CHRUBY_ROOT ${chruby}' $out/share/chruby/chruby.fish
+  '';
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "Thin wrapper around chruby to make it work with the Fish shell";
+    homepage = "https://github.com/JeanMertz/chruby-fish";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
+    maintainers = [ lib.maintainers.cohei ];
+  };
+}
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..1aef6d52075f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/chruby/default.nix
@@ -0,0 +1,43 @@
+{ 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 {
+  pname = "chruby";
+
+  version = "0.3.9";
+
+  src = fetchFromGitHub {
+    owner = "postmodern";
+    repo = "chruby";
+    rev = "v${version}";
+    sha256 = "1894g6fymr8kra9vwhbmnrcr58l022mcd7g9ans4zd3izla2j3gx";
+  };
+
+  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..5184f22aecdc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/circleci-cli/default.nix
@@ -0,0 +1,39 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "circleci-cli";
+  version = "0.1.16947";
+
+  src = fetchFromGitHub {
+    owner = "CircleCI-Public";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-RGkC1XhrssrX4IBh1OrzEowvbPPUK7jXZxxa+FEV/WE=";
+  };
+
+  vendorSha256 = "sha256-7u2y1yBVpXf+D19tslD4s3B1KmABl4OWNzzLaBNL/2U=";
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X github.com/CircleCI-Public/circleci-cli/version.Version=${version}" "-X github.com/CircleCI-Public/circleci-cli/version.Commit=${src.rev}" "-X github.com/CircleCI-Public/circleci-cli/version.packageManager=nix" ];
+
+  preBuild = ''
+    substituteInPlace data/data.go \
+      --replace 'packr.New("circleci-cli-box", "../_data")' 'packr.New("circleci-cli-box", "${placeholder "out"}/share/circleci-cli")'
+  '';
+
+  postInstall = ''
+    install -Dm644 -t $out/share/circleci-cli _data/data.yml
+  '';
+
+  meta = with 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 ];
+    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..35cfd01ff925
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cl-launch/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl }:
+stdenv.mkDerivation rec {
+  pname = "cl-launch";
+  version = "4.1.4.1";
+
+  src = fetchurl {
+    url = "http://common-lisp.net/project/xcvb/cl-launch/cl-launch-${version}.tar.gz";
+    sha256 = "sha256-v5aURs2Verhn2HmGiijvY9br20OTPFrOGBWsb6cHhSQ=";
+  };
+
+  preConfigure = ''
+    export makeFlags="$makeFlags PREFIX='$out'"
+    mkdir -p "$out/bin"
+  '';
+
+  preBuild = ''
+    sed -e 's/\t\t@/\t\t/g' -i Makefile
+  '';
+
+  meta = with lib; {
+    description = "Common Lisp launcher script";
+    license = licenses.llgpl21;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+  };
+}
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..dbab7c880efb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cli11/default.nix
@@ -0,0 +1,41 @@
+{
+  lib, stdenv,
+  fetchFromGitHub,
+  cmake,
+  gtest,
+  python3,
+  boost
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cli11";
+  version = "1.9.1";
+
+  src = fetchFromGitHub {
+    owner = "CLIUtils";
+    repo = "CLI11";
+    rev = "v${version}";
+    sha256 = "0hbch0vk8irgmiaxnfqlqys65v1770rxxdfn3d23m2vqyjh0j9l6";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  checkInputs = [ boost python3 ];
+
+  doCheck = true;
+
+  preConfigure = ''
+    rm -rfv extern/googletest
+    ln -sfv ${gtest.src} extern/googletest
+    sed -i '/TrueFalseTest/d' tests/CMakeLists.txt
+  '';
+
+  meta = with lib; {
+    description = "Command line parser for C++11";
+    homepage = "https://github.com/CLIUtils/CLI11";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/clojure-lsp/default.nix b/nixpkgs/pkgs/development/tools/misc/clojure-lsp/default.nix
new file mode 100644
index 000000000000..6a372fb40f19
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/clojure-lsp/default.nix
@@ -0,0 +1,64 @@
+{ lib, stdenv, buildGraalvmNativeImage, babashka, fetchurl, fetchFromGitHub, clojure, writeScript }:
+
+buildGraalvmNativeImage rec {
+  pname = "clojure-lsp";
+  version = "2022.02.23-12.12.12";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-PfO1G66Z3zQ+Hyjb6J0bomsT8juQURwF2mPKJY5auMw=";
+  };
+
+  jar = fetchurl {
+    url = "https://github.com/clojure-lsp/clojure-lsp/releases/download/${version}/clojure-lsp-standalone.jar";
+    sha256 = "sha256-f8bEALl9j0aDkKZtThLTseqibeYIUeOx4ulelPWQkoo=";
+  };
+
+  extraNativeImageBuildArgs = [
+    "--no-fallback"
+    "--native-image-info"
+  ];
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+
+    export HOME="$(mktemp -d)"
+    ./${pname} --version | fgrep -q '${version}'
+  ''
+    # TODO: fix classpath issue per https://github.com/NixOS/nixpkgs/pull/153770
+    #${babashka}/bin/bb integration-test ./${pname}
+  + ''
+    runHook postCheck
+  '';
+
+  passthru.updateScript = writeScript "update-clojure-lsp" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p curl common-updater-scripts gnused jq nix
+
+    set -eu -o pipefail
+
+    latest_version=$(curl -s https://api.github.com/repos/clojure-lsp/clojure-lsp/releases/latest | jq --raw-output .tag_name)
+
+    old_jar_hash=$(nix-instantiate --eval --strict -A "clojure-lsp-standalone.jar.drvAttrs.outputHash" | tr -d '"' | sed -re 's|[+]|\\&|g')
+
+    curl -o clojure-lsp.jar -sL https://github.com/clojure-lsp/clojure-lsp/releases/download/$latest_version/clojure-lsp-standalone.jar
+    new_jar_hash=$(nix-hash --flat --type sha256 clojure-lsp-standalone.jar | sed -re 's|[+]|\\&|g')
+
+    rm -f clojure-lsp-standalone.jar
+
+    nixFile=$(nix-instantiate --eval --strict -A "clojure-lsp.meta.position" | sed -re 's/^"(.*):[0-9]+"$/\1/')
+
+    sed -i "$nixFile" -re "s|\"$old_jar_hash\"|\"$new_jar_hash\"|"
+    update-source-version clojure-lsp "$latest_version"
+  '';
+
+  meta = with lib; {
+    description = "Language Server Protocol (LSP) for Clojure";
+    homepage = "https://github.com/clojure-lsp/clojure-lsp";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ericdallo babariviere ];
+  };
+}
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..2d9aa55ed050
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/coccinelle/default.nix
@@ -0,0 +1,41 @@
+{ fetchurl, lib, stdenv, python3, ncurses, ocamlPackages, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "coccinelle";
+  version = "1.1.0";
+
+  src = fetchurl {
+    url = "https://coccinelle.gitlabpages.inria.fr/website/distrib/${pname}-${version}.tar.gz";
+    sha256 = "0k0x4qnxzj8fymkp6y9irggcah070hj7hxq8l6ddj8ccpmjbhnsb";
+  };
+
+  buildInputs = with ocamlPackages; [
+    ocaml findlib menhir
+    ocaml_pcre parmap stdcompat
+    python3 ncurses pkg-config
+  ];
+
+  doCheck = false;
+
+  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 = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+    maintainers = [ 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..6e70fbcfcde5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/complexity/default.nix
@@ -0,0 +1,32 @@
+{ fetchurl, lib, stdenv, autogen }:
+
+stdenv.mkDerivation rec {
+  pname = "complexity";
+  version = "1.10";
+
+  src = fetchurl {
+    url = "mirror://gnu/complexity/${pname}-${version}.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 = lib.licenses.gpl3Plus;
+
+    homepage = "https://www.gnu.org/software/complexity/";
+
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/default.nix b/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/default.nix
new file mode 100644
index 000000000000..c49fb15610e3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/default.nix
@@ -0,0 +1,77 @@
+{ lib, callPackage }:
+let
+  common = arch: callPackage (
+    { bison
+    , callPackage
+    , curl
+    , fetchgit
+    , flex
+    , getopt
+    , git
+    , gnat11
+    , lib
+    , perl
+    , stdenvNoCC
+    , zlib
+    }:
+
+    stdenvNoCC.mkDerivation rec {
+      pname = "coreboot-toolchain-${arch}";
+      version = "4.16";
+
+      src = fetchgit {
+        url = "https://review.coreboot.org/coreboot";
+        rev = version;
+        sha256 = "073n8yid3v0l9wgwnrdqrlgzaj9mnhs33a007dgr7xq3z0iw3i52";
+        fetchSubmodules = false;
+        leaveDotGit = true;
+        postFetch = ''
+          patchShebangs $out/util/crossgcc/buildgcc
+          PATH=${lib.makeBinPath [ getopt ]}:$PATH $out/util/crossgcc/buildgcc -W > $out/.crossgcc_version
+          rm -rf $out/.git
+        '';
+      };
+
+      nativeBuildInputs = [ bison curl git perl ];
+      buildInputs = [ flex gnat11 zlib ];
+
+      enableParallelBuilding = true;
+      dontConfigure = true;
+      dontInstall = true;
+
+      postPatch = ''
+        mkdir -p util/crossgcc/tarballs
+
+        ${lib.concatMapStringsSep "\n" (
+          file: "ln -s ${file.archive} util/crossgcc/tarballs/${file.name}"
+          ) (callPackage ./stable.nix { })
+        }
+
+        patchShebangs util/genbuild_h/genbuild_h.sh
+      '';
+
+      buildPhase = ''
+        export CROSSGCC_VERSION=$(cat .crossgcc_version)
+        make crossgcc-${arch} CPUS=$NIX_BUILD_CORES DEST=$out
+      '';
+
+      meta = with lib; {
+        homepage = "https://www.coreboot.org";
+        description = "coreboot toolchain for ${arch} targets";
+        license = with licenses; [ bsd2 bsd3 gpl2 lgpl2Plus gpl3Plus ];
+        maintainers = with maintainers; [ felixsinger ];
+        platforms = platforms.linux;
+      };
+    }
+  );
+in
+
+lib.listToAttrs (map (arch: lib.nameValuePair arch (common arch {})) [
+  "i386"
+  "x64"
+  "arm"
+  "aarch64"
+  "riscv"
+  "ppc64"
+  "nds32le"
+])
diff --git a/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/stable.nix b/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/stable.nix
new file mode 100644
index 000000000000..64ee3da1ad92
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/stable.nix
@@ -0,0 +1,51 @@
+{ fetchurl }: [
+  {
+    name = "gmp-6.2.1.tar.xz";
+    archive = fetchurl {
+      sha256 = "1wml97fdmpcynsbw9yl77rj29qibfp652d0w3222zlfx5j8jjj7x";
+      url = "mirror://gnu/gmp/gmp-6.2.1.tar.xz";
+    };
+  }
+  {
+    name = "mpfr-4.1.0.tar.xz";
+    archive = fetchurl {
+      sha256 = "0zwaanakrqjf84lfr5hfsdr7hncwv9wj0mchlr7cmxigfgqs760c";
+      url = "mirror://gnu/mpfr/mpfr-4.1.0.tar.xz";
+    };
+  }
+  {
+    name = "mpc-1.2.1.tar.gz";
+    archive = fetchurl {
+      sha256 = "0n846hqfqvmsmim7qdlms0qr86f1hck19p12nq3g3z2x74n3sl0p";
+      url = "mirror://gnu/mpc/mpc-1.2.1.tar.gz";
+    };
+  }
+  {
+    name = "gcc-11.2.0.tar.xz";
+    archive = fetchurl {
+      sha256 = "12zs6vd2rapp42x154m479hg3h3lsafn3xhg06hp5hsldd9xr3nh";
+      url = "mirror://gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.xz";
+    };
+  }
+  {
+    name = "binutils-2.37.tar.xz";
+    archive = fetchurl {
+      sha256 = "0b53hhgfnafw27y0c3nbmlfidny2cc5km29pnfffd8r0y0j9f3c2";
+      url = "mirror://gnu/binutils/binutils-2.37.tar.xz";
+    };
+  }
+  {
+    name = "acpica-unix2-20211217.tar.gz";
+    archive = fetchurl {
+      sha256 = "0521hmaw2zhi0mpgnaf2i83dykfgql4bx98cg7xqy8wmj649z194";
+      url = "https://acpica.org/sites/acpica/files/acpica-unix2-20211217.tar.gz";
+    };
+  }
+  {
+    name = "nasm-2.15.05.tar.bz2";
+    archive = fetchurl {
+      sha256 = "1l1gxs5ncdbgz91lsl4y7w5aapask3w02q9inayb2m5bwlwq6jrw";
+      url = "https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.bz2";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/update.sh b/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/update.sh
new file mode 100755
index 000000000000..3acf22e2cd7d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/coreboot-toolchain/update.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env nix-shell
+#!nix-shell --pure -i bash -p nix cacert git getopt
+
+if [ ! -d .git ]; then
+  echo "This script needs to be run from the root directory of nixpkgs. Exiting."
+  exit 1
+fi
+
+pkg_dir="$(dirname "$0")"
+
+src="$(nix-build . --no-out-link -A coreboot-toolchain.i386.src)"
+urls=$($src/util/crossgcc/buildgcc -u)
+
+tmp=$(mktemp)
+echo '{ fetchurl }: [' > $tmp
+
+for url in $urls; do
+  name="$(basename $url)"
+  hash="$(nix-prefetch-url "$url")"
+
+  cat << EOF >> $tmp
+  {
+    name = "$name";
+    archive = fetchurl {
+      sha256 = "$hash";
+      url = "$url";
+    };
+  }
+EOF
+done
+
+echo ']' >> $tmp
+
+sed -ie 's/https\:\/\/ftpmirror\.gnu\.org/mirror\:\/\/gnu/g' $tmp
+
+mv $tmp $pkg_dir/sources.nix
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..b0dcfc6aa5ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cppi/default.nix
@@ -0,0 +1,32 @@
+{ fetchurl, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "cppi";
+  version = "1.18";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.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 = lib.licenses.gpl3Plus;
+
+    maintainers = [ ];
+    platforms = 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..c8448f44153b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cproto/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, flex, bison }:
+
+stdenv.mkDerivation rec {
+  pname = "cproto";
+  version = "4.7t";
+
+  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 = "sha256-PM6CpxaHtp4KPiNIn+glunLmk+VZzPGTOVIIrA65b+U=";
+  };
+
+  # 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 lib; {
+    description = "Tool to generate C function prototypes from C source code";
+    homepage = "https://invisible-island.net/cproto/";
+    license = licenses.publicDomain;
+    platforms = platforms.all;
+  };
+}
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..77493bd16647
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/creduce/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchurl, cmake, makeWrapper
+, llvm, libclang
+, flex
+, zlib
+, perlPackages
+, util-linux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "creduce";
+  version = "2.10.0";
+
+  src = fetchurl {
+    url = "https://embed.cs.utah.edu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "2xwPEjln8k1iCwQM69UwAb89zwPkAPeFVqL/LhH+oGM=";
+  };
+
+  nativeBuildInputs = [ cmake makeWrapper llvm.dev ];
+  buildInputs = [
+    # Ensure stdenv's CC is on PATH before clang-unwrapped
+    stdenv.cc
+    # Actual deps:
+    llvm libclang
+    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 = lib.optionalString stdenv.isLinux ''
+    substituteInPlace creduce/creduce_utils.pm --replace \
+      lscpu ${util-linux}/bin/lscpu
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/creduce --prefix PERL5LIB : "$PERL5LIB"
+  '';
+
+  meta = with 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..c79a2d252012
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cscope/default.nix
@@ -0,0 +1,54 @@
+{ fetchurl, lib, stdenv, ncurses
+, emacsSupport ? true, emacs
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cscope";
+  version = "15.9";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0ngiv4aj3rr35k3q3wjx0y19gh7i1ydqa0cqip6sjwd8fph5ll65";
+  };
+
+  configureFlags = [ "--with-ncurses=${ncurses.dev}" ];
+
+  buildInputs = [ ncurses ];
+  nativeBuildInputs = lib.optional emacsSupport emacs;
+
+  postInstall = 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 lib.maintainers; [viric];
+
+    platforms = 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..0643e81edf99
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/csmith/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, m4, makeWrapper, libbsd, perlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "csmith";
+  version = "2.3.0";
+
+  src = fetchurl {
+    url = "https://embed.cs.utah.edu/csmith/${pname}-${version}.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/${pname}-${version} \
+      --replace ' ''${CSMITH_HOME}/runtime' " $out/include/${pname}-${version}" \
+      --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 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..fde7307b27dc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ctags/default.nix
@@ -0,0 +1,43 @@
+{ lib, 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" ];
+
+  patches = [
+    # Library defines an `__unused__` which is a reserved name, and may
+    # conflict with the standard library definition. One such conflict is with
+    # macOS headers.
+    ./unused-collision.patch
+  ];
+
+  meta = with 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/unused-collision.patch b/nixpkgs/pkgs/development/tools/misc/ctags/unused-collision.patch
new file mode 100644
index 000000000000..595f67a01b5a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ctags/unused-collision.patch
@@ -0,0 +1,246 @@
+--- a/c.c	(revision 816)
++++ b/c.c	(working copy)
+@@ -619,7 +619,7 @@
+ 	return name;
+ }
+ 
+-static void __unused__ pt (tokenInfo *const token)
++static void UNUSED pt (tokenInfo *const token)
+ {
+ 	if (isType (token, TOKEN_NAME))
+ 		printf ("type: %-12s: %-13s   line: %lu\n",
+@@ -634,7 +634,7 @@
+ 			tokenString (token->type), token->lineNumber);
+ }
+ 
+-static void __unused__ ps (statementInfo *const st)
++static void UNUSED ps (statementInfo *const st)
+ {
+ 	unsigned int i;
+ 	printf ("scope: %s   decl: %s   gotName: %s   gotParenName: %s\n",
+--- a/eiffel.c	(revision 816)
++++ b/eiffel.c	(working copy)
+@@ -807,7 +807,7 @@
+ 
+ static boolean parseType (tokenInfo *const token);
+ 
+-static void parseGeneric (tokenInfo *const token, boolean declaration __unused__)
++static void parseGeneric (tokenInfo *const token, boolean declaration UNUSED)
+ {
+ 	unsigned int depth = 0;
+ #ifdef TYPE_REFERENCE_TOOL
+--- a/general.h	(revision 816)
++++ b/general.h	(working copy)
+@@ -57,10 +57,10 @@
+  *  to prevent warnings about unused variables.
+  */
+ #if (__GNUC__ > 2  ||  (__GNUC__ == 2  &&  __GNUC_MINOR__ >= 7)) && !defined (__GNUG__)
+-# define __unused__  __attribute__((unused))
++# define UNUSED  __attribute__((unused))
+ # define __printf__(s,f)  __attribute__((format (printf, s, f)))
+ #else
+-# define __unused__
++# define UNUSED
+ # define __printf__(s,f)
+ #endif
+ 
+--- a/lregex.c	(revision 816)
++++ b/lregex.c	(working copy)
+@@ -538,11 +538,11 @@
+ #endif  /* HAVE_REGEX */
+ 
+ extern void addTagRegex (
+-		const langType language __unused__,
+-		const char* const regex __unused__,
+-		const char* const name __unused__,
+-		const char* const kinds __unused__,
+-		const char* const flags __unused__)
++		const langType language UNUSED,
++		const char* const regex UNUSED,
++		const char* const name UNUSED,
++		const char* const kinds UNUSED,
++		const char* const flags UNUSED)
+ {
+ #ifdef HAVE_REGEX
+ 	Assert (regex != NULL);
+@@ -564,10 +564,10 @@
+ }
+ 
+ extern void addCallbackRegex (
+-		const langType language __unused__,
+-		const char* const regex __unused__,
+-		const char* const flags __unused__,
+-		const regexCallback callback __unused__)
++		const langType language UNUSED,
++		const char* const regex UNUSED,
++		const char* const flags UNUSED,
++		const regexCallback callback UNUSED)
+ {
+ #ifdef HAVE_REGEX
+ 	Assert (regex != NULL);
+@@ -581,7 +581,7 @@
+ }
+ 
+ extern void addLanguageRegex (
+-		const langType language __unused__, const char* const regex __unused__)
++		const langType language UNUSED, const char* const regex UNUSED)
+ {
+ #ifdef HAVE_REGEX
+ 	if (! regexBroken)
+@@ -602,7 +602,7 @@
+ */
+ 
+ extern boolean processRegexOption (const char *const option,
+-								   const char *const parameter __unused__)
++								   const char *const parameter UNUSED)
+ {
+ 	boolean handled = FALSE;
+ 	const char* const dash = strchr (option, '-');
+@@ -624,7 +624,7 @@
+ 	return handled;
+ }
+ 
+-extern void disableRegexKinds (const langType language __unused__)
++extern void disableRegexKinds (const langType language UNUSED)
+ {
+ #ifdef HAVE_REGEX
+ 	if (language <= SetUpper  &&  Sets [language].count > 0)
+@@ -639,8 +639,8 @@
+ }
+ 
+ extern boolean enableRegexKind (
+-		const langType language __unused__,
+-		const int kind __unused__, const boolean mode __unused__)
++		const langType language UNUSED,
++		const int kind UNUSED, const boolean mode UNUSED)
+ {
+ 	boolean result = FALSE;
+ #ifdef HAVE_REGEX
+@@ -660,7 +660,7 @@
+ 	return result;
+ }
+ 
+-extern void printRegexKinds (const langType language __unused__, boolean indent __unused__)
++extern void printRegexKinds (const langType language UNUSED, boolean indent UNUSED)
+ {
+ #ifdef HAVE_REGEX
+ 	if (language <= SetUpper  &&  Sets [language].count > 0)
+--- a/lua.c	(revision 816)
++++ b/lua.c	(working copy)
+@@ -37,7 +37,7 @@
+ */
+ 
+ /* for debugging purposes */
+-static void __unused__ print_string (char *p, char *q)
++static void UNUSED print_string (char *p, char *q)
+ {
+ 	for ( ; p != q; p++)
+ 		fprintf (errout, "%c", *p);
+--- a/main.c	(revision 816)
++++ b/main.c	(working copy)
+@@ -522,7 +522,7 @@
+  *		Start up code
+  */
+ 
+-extern int main (int __unused__ argc, char **argv)
++extern int main (int UNUSED argc, char **argv)
+ {
+ 	cookedArgs *args;
+ #ifdef VMS
+--- a/options.c	(revision 816)
++++ b/options.c	(working copy)
+@@ -730,7 +730,7 @@
+ }
+ 
+ static void processExcludeOption (
+-		const char *const option __unused__, const char *const parameter)
++		const char *const option UNUSED, const char *const parameter)
+ {
+ 	const char *const fileName = parameter + 1;
+ 	if (parameter [0] == '\0')
+@@ -867,7 +867,7 @@
+ }
+ 
+ static void processFilterTerminatorOption (
+-		const char *const option __unused__, const char *const parameter)
++		const char *const option UNUSED, const char *const parameter)
+ {
+ 	freeString (&Option.filterTerminator);
+ 	Option.filterTerminator = stringCopy (parameter);
+@@ -930,8 +930,8 @@
+ }
+ 
+ static void processHelpOption (
+-		const char *const option __unused__,
+-		const char *const parameter __unused__)
++		const char *const option UNUSED,
++		const char *const parameter UNUSED)
+ {
+ 	printProgramIdentification ();
+ 	putchar ('\n');
+@@ -1139,8 +1139,8 @@
+ }
+ 
+ static void processLicenseOption (
+-		const char *const option __unused__,
+-		const char *const parameter __unused__)
++		const char *const option UNUSED,
++		const char *const parameter UNUSED)
+ {
+ 	printProgramIdentification ();
+ 	puts ("");
+@@ -1166,8 +1166,8 @@
+ }
+ 
+ static void processListMapsOption (
+-		const char *const __unused__ option,
+-		const char *const __unused__ parameter)
++		const char *const UNUSED option,
++		const char *const UNUSED parameter)
+ {
+ 	if (parameter [0] == '\0' || strcasecmp (parameter, "all") == 0)
+ 	    printLanguageMaps (LANG_AUTO);
+@@ -1183,8 +1183,8 @@
+ }
+ 
+ static void processListLanguagesOption (
+-		const char *const option __unused__,
+-		const char *const parameter __unused__)
++		const char *const option UNUSED,
++		const char *const parameter UNUSED)
+ {
+ 	printLanguageList ();
+ 	exit (0);
+@@ -1358,8 +1358,8 @@
+ }
+ 
+ static void processVersionOption (
+-		const char *const option __unused__,
+-		const char *const parameter __unused__)
++		const char *const option UNUSED,
++		const char *const parameter UNUSED)
+ {
+ 	printProgramIdentification ();
+ 	exit (0);
+--- a/parse.c	(revision 816)
++++ b/parse.c	(working copy)
+@@ -376,7 +376,7 @@
+ */
+ 
+ extern void processLanguageDefineOption (
+-		const char *const option, const char *const parameter __unused__)
++		const char *const option, const char *const parameter UNUSED)
+ {
+ #ifdef HAVE_REGEX
+ 	if (parameter [0] == '\0')
+--- a/routines.c	(revision 816)
++++ b/routines.c	(working copy)
+@@ -526,7 +526,7 @@
+ 
+ #if ! defined (HAVE_STAT_ST_INO)
+ 
+-static void canonicalizePath (char *const path __unused__)
++static void canonicalizePath (char *const path UNUSED)
+ {
+ #if defined (MSDOS_STYLE_PATH)
+ 	char *p;
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..f658e78d5db0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ctags/wrapped.nix
@@ -0,0 +1,78 @@
+{ pkgs, ctags }:
+
+with pkgs.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/cvise/default.nix b/nixpkgs/pkgs/development/tools/misc/cvise/default.nix
new file mode 100644
index 000000000000..d6ad65164b74
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cvise/default.nix
@@ -0,0 +1,52 @@
+{ lib, buildPythonApplication, fetchFromGitHub, bash, cmake, flex
+, libclang, llvm, unifdef
+, chardet, pebble, psutil, pytestCheckHook, pytest-flake8
+}:
+
+buildPythonApplication rec {
+  pname = "cvise";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "marxin";
+    repo = "cvise";
+    rev = "v${version}";
+    sha256 = "0cfzikkhp91hjgxjk3izzczb8d9p8v9zsfyk6iklk92n5qf1aakq";
+  };
+
+  patches = [
+    # Refer to unifdef by absolute path.
+    ./unifdef.patch
+  ];
+
+  nativeBuildInputs = [ cmake flex llvm.dev ];
+  buildInputs = [ bash libclang llvm llvm.dev unifdef ];
+  propagatedBuildInputs = [ chardet pebble psutil ];
+  checkInputs = [ pytestCheckHook pytest-flake8 unifdef ];
+
+  # 'cvise --command=...' generates a script with hardcoded shebang.
+  postPatch = ''
+    substituteInPlace cvise.py \
+      --replace "#!/bin/bash" "#!${bash}/bin/bash"
+  '';
+
+  preCheck = ''
+    patchShebangs cvise.py
+  '';
+  disabledTests = [
+    # Needs gcc, fails when run noninteractively (without tty).
+    "test_simple_reduction"
+  ];
+
+  dontUsePipInstall = true;
+  dontUseSetuptoolsBuild = true;
+  dontUseSetuptoolsCheck = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/marxin/cvise";
+    description = "Super-parallel Python port of C-Reduce";
+    license = licenses.ncsa;
+    maintainers = with maintainers; [ orivej ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/cvise/unifdef.patch b/nixpkgs/pkgs/development/tools/misc/cvise/unifdef.patch
new file mode 100644
index 000000000000..d15ca6dce0bd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cvise/unifdef.patch
@@ -0,0 +1,8 @@
+--- a/cvise.py
++++ b/cvise.py
+@@ -93,4 +93,5 @@ def find_external_programs():
+     # Special case for clang-format
+     programs['clang-format'] = '@CLANG_FORMAT_PATH@'
++    programs['unifdef'] = '@UNIFDEF@'
+ 
+     return programs
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..055a24f3fe0a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/cwebbin/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv, fetchFromGitHub, fetchurl, tie }:
+
+stdenv.mkDerivation rec {
+  pname = "cwebbin";
+  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";
+  };
+
+  # Remove references to __DATE__ and __TIME__
+  postPatch = ''
+    substituteInPlace wmerg-patch.ch --replace ' ("__DATE__", "__TIME__")' ""
+    substituteInPlace ctang-patch.ch --replace ' ("__DATE__", "__TIME__")' ""
+    substituteInPlace ctangle.cxx --replace ' ("__DATE__", "__TIME__")' ""
+    substituteInPlace cweav-patch.ch --replace ' ("__DATE__", "__TIME__")' ""
+  '';
+
+  nativeBuildInputs = [ 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=${stdenv.cc.targetPrefix}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 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..3db895f4de01
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/d-feet/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, pkg-config
+, fetchurl
+, meson
+, ninja
+, glib
+, gtk3
+, python3
+, wrapGAppsHook
+, gnome
+, libwnck
+, gobject-introspection
+, gettext
+, itstool
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "d-feet";
+  version = "0.3.16";
+
+  format = "other";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/d-feet/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "hzPOS5qaVOwYWx2Fv02p2dEQUogqiAdg/2D5d5stHMs=";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    gobject-introspection
+    itstool
+    meson
+    ninja
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gnome.adwaita-icon-theme
+    gtk3
+    libwnck
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pygobject3
+  ];
+
+  mesonFlags = [
+    "-Dtests=false" # needs dbus
+  ];
+
+  # Temporary fix
+  # See https://github.com/NixOS/nixpkgs/issues/56943
+  strictDeps = false;
+
+  postPatch = ''
+    chmod +x meson_post_install.py
+    patchShebangs meson_post_install.py
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "dfeet";
+      versionPolicy = "none";
+    };
+  };
+
+  meta = with lib; {
+    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 = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with 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..78b743ef9f1b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dbench/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchgit, autoconf, popt, zlib, rpcsvc-proto, libtirpc }:
+
+stdenv.mkDerivation rec {
+  pname = "dbench";
+  version = "2013-01-01";
+
+  src = fetchgit {
+    url = "git://git.samba.org/sahlberg/${pname}.git";
+    rev = "65b19870ed8d25bff14cafa1c30beb33f1fb6597";
+    sha256 = "16lcbwmmx8z5i73k3dnf54yffrpx7ql3y9k3cpkss9dcyxb1p83i";
+  };
+
+  nativeBuildInputs = [ autoconf rpcsvc-proto ];
+  buildInputs = [ popt zlib libtirpc ];
+  NIX_CFLAGS_COMPILE = [ "-I${libtirpc.dev}/include/tirpc" ];
+  NIX_LDFLAGS = [ "-ltirpc" ];
+
+  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 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..49186c75c9a1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ddd/default.nix
@@ -0,0 +1,31 @@
+{lib, stdenv, fetchurl, motif, ncurses, libX11, libXt}:
+
+stdenv.mkDerivation rec {
+  pname = "ddd";
+  version = "3.3.12";
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0p5nx387857w3v2jbgvps2p6mlm0chajcdw5sfrddcglsxkwvmis";
+  };
+  buildInputs = [motif ncurses libX11 libXt];
+  configureFlags = [ "--with-x" ];
+
+  patches = [
+    # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=504868
+    ./gcc44.patch
+  ];
+
+  NIX_CFLAGS_COMPILE = "-fpermissive";
+
+  postInstall = ''
+    install -D icons/ddd.xpm $out/share/pixmaps/ddd.xpm
+  '';
+
+  meta = {
+    homepage = "https://www.gnu.org/software/ddd";
+    description = "Graphical front-end for command-line debuggers";
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ emilytrau ];
+  };
+}
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/debugedit/default.nix b/nixpkgs/pkgs/development/tools/misc/debugedit/default.nix
new file mode 100644
index 000000000000..afac7168c5b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/debugedit/default.nix
@@ -0,0 +1,30 @@
+#TODO@deliciouslytyped The tool seems to unnecessarily force mutable access for the debugedit `-l` feature
+{fetchgit, lib, stdenv, autoreconfHook, pkg-config, elfutils, help2man, util-linux}:
+stdenv.mkDerivation rec {
+  pname = "debugedit";
+  version = "5.0";
+
+  nativeBuildInputs = [ autoreconfHook pkg-config help2man ];
+  buildInputs = [ elfutils ];
+  checkInputs = [ util-linux ]; # Tests use `rev`
+
+  src = fetchgit {
+    url = "git://sourceware.org/git/debugedit.git";
+    rev = "debugedit-${version}";
+    sha256 = "VTZ7ybQT3DfKIfK0lH+JiehCJyJ+qpQ0bAn1/f+Pscs=";
+  };
+
+  preBuild = ''
+    patchShebangs scripts/find-debuginfo.in
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Provides programs and scripts for creating debuginfo and source file distributions, collect build-ids and rewrite source paths in DWARF data for debugging, tracing and profiling";
+    homepage = "https://sourceware.org/debugedit/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ deliciouslytyped ];
+  };
+}
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..45edeb89a9c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dejagnu/default.nix
@@ -0,0 +1,63 @@
+{ fetchurl, lib, stdenv, expect, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "dejagnu";
+  version = "1.6.3";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1qx2cv6qkxbiqg87jh217jb62hk3s7dmcs4cz1llm2wmsynfznl7";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ expect ];
+
+  # dejagnu-1.6.3 can't successfully run tests in source tree:
+  #   https://wiki.linuxfromscratch.org/lfs/ticket/4871
+  preConfigure = ''
+    mkdir build
+    cd build
+  '';
+  configureScript = "../configure";
+
+  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 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..062f68c83438
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dfu-programmer/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, libusb-compat-0_1 }:
+stdenv.mkDerivation rec {
+  pname = "dfu-programmer";
+  version = "0.7.2";
+
+  buildInputs = [ libusb-compat-0_1 ];
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dfu-programmer/${pname}-${version}.tar.gz";
+    sha256 = "15gr99y1z9vbvhrkd25zqhnzhg6zjmaam3vfjzf2mazd39mx7d0x";
+  };
+
+  configureFlags = [ "--disable-libusb_1_0" ];
+
+  meta = with 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/";
+    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..2b9d543fb791
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dfu-util/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, pkg-config, libusb1 }:
+
+stdenv.mkDerivation rec {
+  pname = "dfu-util";
+  version = "0.11";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libusb1 ];
+
+  src = fetchurl {
+    url = "http://dfu-util.sourceforge.net/releases/${pname}-${version}.tar.gz";
+    sha256 = "sha256-tLU7ohqC7349TEffKVKt9fpJT0mbawtXxYxdBK6P8Z4=";
+  };
+
+  meta = with 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/direvent/default.nix b/nixpkgs/pkgs/development/tools/misc/direvent/default.nix
new file mode 100644
index 000000000000..79a238ad0c0c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/direvent/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "direvent";
+  version = "5.3";
+
+  src = fetchurl {
+    url = "mirror://gnu/direvent/direvent-${version}.tar.gz";
+    sha256 = "sha256-lAWop32kn+krvkrxi/kl/5H20zdMELfXAKAxusuUxJc=";
+  };
+
+  meta = with lib; {
+    description = "Directory event monitoring daemon";
+    homepage = "https://www.gnu.org.ua/software/direvent/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ puffnfresh ];
+  };
+}
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..f5fb8e8eeb1a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/distcc/default.nix
@@ -0,0 +1,84 @@
+{ lib, stdenv, fetchFromGitHub, popt, avahi, pkg-config, python3, gtk3, runCommand
+, gcc, autoconf, automake, which, procps, libiberty_static
+, runtimeShell
+, sysconfDir ? ""   # set this parameter to override the default value $out/etc
+, static ? false
+}:
+
+let
+  pname = "distcc";
+  version = "2021-03-11";
+  distcc = stdenv.mkDerivation {
+    inherit pname version;
+    src = fetchFromGitHub {
+      owner = "distcc";
+      repo = "distcc";
+      rev = "de21b1a43737fbcf47967a706dab4c60521dbbb1";
+      sha256 = "0zjba1090awxkmgifr9jnjkxf41zhzc4f6mrnbayn3v6s77ca9x4";
+    };
+
+  nativeBuildInputs = [ pkg-config ];
+    buildInputs = [popt avahi pkg-config python3 gtk3 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 gtk3 != 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 = lib.platforms.linux;
+      maintainers = with 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..27840481a109
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/distcc/masq.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, gccRaw, binutils }:
+
+stdenv.mkDerivation {
+  name = "distcc-masq-${gccRaw.name}";
+
+  dontUnpack = true;
+
+  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 = 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..d346f94b4784
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/doclifter/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, python3, makeWrapper, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "doclifter";
+  version = "2.20";
+  src = fetchurl {
+    url = "http://www.catb.org/~esr/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-BEuMbICJ8TD3+VjUr8rmhss7XlPNjxSy1P0SkmKLPsc=";
+  };
+  buildInputs = [ python3 ];
+  nativeBuildInputs = [ python3 makeWrapper ];
+
+  strictDeps = true;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+    substituteInPlace manlifter \
+      --replace '/usr/bin/env python2' '/usr/bin/env python3'
+    2to3 -w manlifter
+    cp manlifter $out/bin
+    wrapProgram "$out/bin/manlifter" \
+        --prefix PATH : "${libxml2}/bin:$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 = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/docopts/default.nix b/nixpkgs/pkgs/development/tools/misc/docopts/default.nix
new file mode 100644
index 000000000000..7a3202df40f3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/docopts/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "docopts";
+  version = "0.6.4-with-no-mangle-double-dash";
+
+  src = fetchFromGitHub {
+    owner = "docopt";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0zxax0kl8wqpkzmw9ij4qgfhjbk4r7996pjyp9xf5icyk8knp00q";
+  };
+
+  goPackagePath = "github.com/docopt/${pname}";
+
+  goDeps = ./deps.nix;
+
+  subPackages = [ "./" ];
+
+  postInstall = ''
+    install -D -m 755 ./go/src/$goPackagePath/docopts.sh $out/bin/docopts.sh
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/docopt/${pname}";
+    description = "docopt CLI tool for shell scripting";
+    license = licenses.mit;
+    maintainers = [ maintainers.confus ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/docopts/deps.nix b/nixpkgs/pkgs/development/tools/misc/docopts/deps.nix
new file mode 100644
index 000000000000..8cc1686de7d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/docopts/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "github.com/docopt/docopt-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docopt/docopt.go";
+      rev = "ee0de3bc6815ee19d4a46c7eb90f829db0e014b1"; # "0.6.2";
+      sha256 = "sha256-0mCKIC5x7aauBL8ahXB9ExMfoTJl55HaafWWWPNRmUI=";
+    };
+  }
+]
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..8cafab36f2ac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/drush/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, fetchFromGitHub, php, which, makeWrapper, bash, coreutils, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "drush";
+  version = "8.4.10";
+
+  src = fetchurl {
+    url = "https://github.com/drush-ops/drush/releases/download/${version}/drush.phar";
+    sha256 = "sha256-yXSoTDFLsjDiYkRfrIxv2WTVdHzgxZRvtn3Pht5XF4k=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -D $src $out/libexec/drush/drush.phar
+    makeWrapper ${php}/bin/php $out/bin/drush \
+      --add-flags "$out/libexec/drush/drush.phar" \
+      --prefix PATH : "${lib.makeBinPath [ which php bash coreutils ncurses ]}"
+  '';
+
+  meta = with 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;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dura/default.nix b/nixpkgs/pkgs/development/tools/misc/dura/default.nix
new file mode 100644
index 000000000000..621058be664c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dura/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchFromGitHub, rustPlatform, openssl, pkg-config }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dura";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "tkellogg";
+    repo = "dura";
+    rev = "v0.1.0";
+    sha256 = "sha256-XnsR1oL9iImtj0X7wJ8Pp/An0/AVF5y+sD551yX4IGo=";
+  };
+
+  cargoSha256 = "sha256-+Tq0a5cs2XZoT7yzTf1oIPd3kgD6SyrQqxQ1neTcMwk=";
+
+  doCheck = false;
+
+  buildInputs = [
+    openssl
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  meta = with lib; {
+    description = "A background process that saves uncommited changes on git";
+    longDescription = ''
+      Dura is a background process that watches your Git repositories and
+      commits your uncommitted changes without impacting HEAD, the current
+      branch, or the Git index (staged files). If you ever get into an
+      "oh snap!" situation where you think you just lost days of work,
+      checkout a "dura" branch and recover.
+    '';
+    homepage = "https://github.com/tkellogg/dura";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ drupol ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/dwz/default.nix b/nixpkgs/pkgs/development/tools/misc/dwz/default.nix
new file mode 100644
index 000000000000..0a13d4a68dd0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/dwz/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, elfutils }:
+
+stdenv.mkDerivation rec {
+  pname = "dwz";
+  version = "0.14";
+
+  src = fetchurl {
+    url = "https://www.sourceware.org/ftp/${pname}/releases/${pname}-${version}.tar.gz";
+    sha256 = "07qdvzfk4mvbqj5z3aff7vc195dxqn1mi27w2dzs1w2zhymnw01k";
+  };
+
+  nativeBuildInputs = [ elfutils ];
+
+  makeFlags = [ "prefix=${placeholder "out"}" ];
+
+  meta = with lib; {
+    homepage = "https://sourceware.org/dwz/";
+    description = "DWARF optimization and duplicate removal tool";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ jbcrail ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/edb/default.nix b/nixpkgs/pkgs/development/tools/misc/edb/default.nix
new file mode 100644
index 000000000000..ec65ca62fa30
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/edb/default.nix
@@ -0,0 +1,42 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkg-config, boost, capstone
+, double-conversion, graphviz, qtxmlpatterns }:
+
+mkDerivation rec {
+  pname = "edb";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "eteran";
+    repo = "edb-debugger";
+    rev = "1.3.0";
+    fetchSubmodules = true;
+    sha256 = "fFUau8XnsRFjC83HEsqyhrwCCBOfDmV6oACf3txm7O8=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ boost.dev capstone double-conversion graphviz qtxmlpatterns ];
+
+  postPatch = ''
+    # Remove CMAKE_INSTALL_PREFIX from DEFAULT_PLUGIN_PATH otherwise the nix store path will appear twice.
+    substituteInPlace ./src/CMakeLists.txt --replace \
+        '-DDEFAULT_PLUGIN_PATH=\"''${CMAKE_INSTALL_PREFIX}/''${CMAKE_INSTALL_LIBDIR}/edb\"' \
+        '-DDEFAULT_PLUGIN_PATH=\"''${CMAKE_INSTALL_LIBDIR}/edb\"'
+
+    # The build script checks for the presence of .git to determine whether
+    # submodules were fetched and will throw an error if it's not there.
+    # Avoid using leaveDotGit in the fetchFromGitHub options as it is non-deterministic.
+    mkdir -p src/qhexview/.git
+
+    # Change default optional terminal program path to one that is more likely to work on NixOS.
+    substituteInPlace ./src/Configuration.cpp --replace "/usr/bin/xterm" "xterm";
+  '';
+
+  meta = with lib; {
+    description = "Cross platform AArch32/x86/x86-64 debugger";
+    homepage = "https://github.com/eteran/edb-debugger";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ lihop maxxk ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/editorconfig-checker/default.nix b/nixpkgs/pkgs/development/tools/misc/editorconfig-checker/default.nix
new file mode 100644
index 000000000000..13377334cce4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/editorconfig-checker/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "editorconfig-checker";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "editorconfig-checker";
+    repo = "editorconfig-checker";
+    rev = version;
+    sha256 = "sha256-uP+AgQO1k9fic7r0pOKqO5lUHKEf7Pwaw2U2a6ghzz0=";
+  };
+
+  vendorSha256 = "sha256-SrBrYyExeDHXhezvtfGLtm8NM1eX4/8kzwUICQLZDjo=";
+
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-X main.version=${version}" ];
+
+  postInstall = ''
+    installManPage docs/editorconfig-checker.1
+  '';
+
+  meta = with lib; {
+    description = "A tool to verify that your files are in harmony with your .editorconfig";
+    homepage = "https://editorconfig-checker.github.io/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ uri-canva zowoq ];
+  };
+}
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..893a1925dd71
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/editorconfig-core-c/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pcre, doxygen }:
+
+stdenv.mkDerivation rec {
+  pname = "editorconfig-core-c";
+  version = "0.12.1";
+
+  src = fetchFromGitHub {
+    owner = "editorconfig";
+    repo = "editorconfig-core-c";
+    rev = "v${version}";
+    sha256 = "sha256-pFsbyqIt7okfaiOwlYN8EXm1SFlCUnsHVbOgyIZZlys=";
+    fetchSubmodules = true;
+  };
+
+  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 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 ];
+    maintainers = with maintainers; [ dochang ];
+    platforms = platforms.unix;
+    mainProgram = "editorconfig";
+  };
+}
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..c5ede8488511
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/eggdbus/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, dbus, dbus-glib }:
+
+stdenv.mkDerivation rec {
+  pname = "eggdbus";
+  version = "0.6";
+
+  src = fetchurl {
+    url = "https://hal.freedesktop.org/releases/${pname}-${version}.tar.gz";
+    sha256 = "118hj63ac65zlg71kydv4607qcg1qpdlql4kvhnwnnhar421jnq4";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib dbus dbus-glib ];
+
+  meta = with 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..e3ee51c58fdc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/elfinfo/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "elfinfo";
+  version = "1.1.0";
+
+  goPackagePath = "github.com/xyproto/elfinfo";
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "xyproto";
+    repo = "elfinfo";
+    sha256 = "1n8bg0rcq9fqa6rdnk6x9ngvm59hcayblkpjv9j5myn2vmm6fv8m";
+  };
+
+  meta = with 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..7220ca31443a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/elfkickers/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "elfkickers";
+  version = "3.2";
+
+  src = fetchurl {
+    url = "https://www.muppetlabs.com/~breadbox/pub/software/ELFkickers-${version}.tar.gz";
+    sha256 = "sha256-m4HmxT4MlPwZjZiC63NxVvNtVlFS3DIRiJfHewaiaHw=";
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" "prefix:=${placeholder "out"}" ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://www.muppetlabs.com/~breadbox/software/elfkickers.html";
+    description = "A collection of programs that access and manipulate ELF files";
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+    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..adee94dafa91
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/elfutils/default.nix
@@ -0,0 +1,93 @@
+{ lib, stdenv, fetchurl, fetchpatch, pkg-config, musl-fts
+, musl-obstack, m4, zlib, zstd, bzip2, bison, flex, gettext, xz, setupDebugInfoDirs
+, argp-standalone
+, enableDebuginfod ? false, sqlite, curl, libmicrohttpd_0_9_70, libarchive
+}:
+
+# TODO: Look at the hardcoded paths to kernel, modules etc.
+stdenv.mkDerivation rec {
+  pname = "elfutils";
+  version = "0.186";
+
+  src = fetchurl {
+    url = "https://sourceware.org/elfutils/ftp/${version}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-f2+5FJsWc9ONkXig0+D7ih7E9TqfTC/4lGlgmHlkEXc=";
+  };
+
+  patches = [
+    ./debug-info-from-env.patch
+    (fetchpatch {
+      name = "fix-aarch64_fregs.patch";
+      url = "https://git.alpinelinux.org/aports/plain/main/elfutils/fix-aarch64_fregs.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9";
+      sha256 = "zvncoRkQx3AwPx52ehjA2vcFroF+yDC2MQR5uS6DATs=";
+    })
+    (fetchpatch {
+      name = "musl-asm-ptrace-h.patch";
+      url = "https://git.alpinelinux.org/aports/plain/main/elfutils/musl-asm-ptrace-h.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9";
+      sha256 = "8D1wPcdgAkE/TNBOgsHaeTZYhd9l+9TrZg8d5C7kG6k=";
+    })
+    (fetchpatch {
+      name = "musl-macros.patch";
+      url = "https://git.alpinelinux.org/aports/plain/main/elfutils/musl-macros.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9";
+      sha256 = "tp6O1TRsTAMsFe8vw3LMENT/vAu6OmyA8+pzgThHeA8=";
+    })
+    (fetchpatch {
+      name = "musl-strndupa.patch";
+      url = "https://git.alpinelinux.org/aports/plain/main/elfutils/musl-strndupa.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9";
+      sha256 = "sha256-7daehJj1t0wPtQzTv+/Rpuqqs5Ng/EYnZzrcf2o/Lb0=";
+    })
+  ] ++ lib.optionals stdenv.hostPlatform.isMusl [ ./musl-error_h.patch ];
+
+  postPatch = ''
+    patchShebangs tests/*.sh
+  '';
+
+  outputs = [ "bin" "dev" "out" "man" ];
+
+  # 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 ]
+    ++ lib.optional enableDebuginfod pkg-config;
+  buildInputs = [ zlib zstd bzip2 xz ]
+    ++ lib.optionals stdenv.hostPlatform.isMusl [
+    argp-standalone
+    musl-fts
+    musl-obstack
+  ] ++ lib.optionals enableDebuginfod [
+    sqlite
+    curl
+    libmicrohttpd_0_9_70
+    libarchive
+  ];
+
+  propagatedNativeBuildInputs = [ setupDebugInfoDirs ];
+
+  NIX_CFLAGS_COMPILE = lib.optionals stdenv.hostPlatform.isMusl [
+    "-Wno-null-dereference"
+  ];
+
+  configureFlags = [
+    "--program-prefix=eu-" # prevent collisions with binutils
+    "--enable-deterministic-archives"
+    (lib.enableFeature enableDebuginfod "libdebuginfod")
+    (lib.enableFeature enableDebuginfod "debuginfod")
+  ];
+
+  enableParallelBuilding = true;
+
+  # Backtrace unwinding tests rely on glibc-internal symbol names.
+  # Musl provides slightly different forms and fails.
+  # Let's disable tests there until musl support is fully upstreamed.
+  doCheck = !stdenv.hostPlatform.isMusl;
+  doInstallCheck = !stdenv.hostPlatform.isMusl;
+
+  meta = with lib; {
+    homepage = "https://sourceware.org/elfutils/";
+    description = "A set of utilities to handle ELF objects";
+    platforms = platforms.linux;
+    # licenses are GPL2 or LGPL3+ for libraries, GPL3+ for bins,
+    # but since this package isn't split that way, all three are listed.
+    license = with licenses; [ gpl2Only lgpl3Plus gpl3Plus ];
+    maintainers = with maintainers; [ eelco r-burns ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/elfutils/musl-error_h.patch b/nixpkgs/pkgs/development/tools/misc/elfutils/musl-error_h.patch
new file mode 100644
index 000000000000..711928078d35
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/elfutils/musl-error_h.patch
@@ -0,0 +1,66 @@
+diff -crb --new-file a/lib/error.h b/lib/error.h
+*** a/lib/error.h	1969-12-31 19:00:00.000000000 -0500
+--- b/lib/error.h	2021-01-21 04:38:25.000000000 -0500
+***************
+*** 0 ****
+--- 1,27 ----
++ #ifndef _ERROR_H_
++ #define _ERROR_H_
++ 
++ #include <stdarg.h>
++ #include <stdio.h>
++ #include <stdlib.h>
++ #include <string.h>
++ #include <errno.h>
++ 
++ static unsigned int error_message_count = 0;
++ 
++ static inline void error(int status, int errnum, const char* format, ...)
++ {
++ 	va_list ap;
++ 	fprintf(stderr, "%s: ", program_invocation_name);
++ 	va_start(ap, format);
++ 	vfprintf(stderr, format, ap);
++ 	va_end(ap);
++ 	if (errnum)
++ 		fprintf(stderr, ": %s", strerror(errnum));
++ 	fprintf(stderr, "\n");
++ 	error_message_count++;
++ 	if (status)
++ 		exit(status);
++ }
++ 
++ #endif	/* _ERROR_H_ */
+diff -crb --new-file a/src/error.h b/src/error.h
+*** a/src/error.h	1969-12-31 19:00:00.000000000 -0500
+--- b/src/error.h	2021-01-21 04:38:29.000000000 -0500
+***************
+*** 0 ****
+--- 1,27 ----
++ #ifndef _ERROR_H_
++ #define _ERROR_H_
++ 
++ #include <stdarg.h>
++ #include <stdio.h>
++ #include <stdlib.h>
++ #include <string.h>
++ #include <errno.h>
++ 
++ static unsigned int error_message_count = 0;
++ 
++ static inline void error(int status, int errnum, const char* format, ...)
++ {
++ 	va_list ap;
++ 	fprintf(stderr, "%s: ", program_invocation_name);
++ 	va_start(ap, format);
++ 	vfprintf(stderr, format, ap);
++ 	va_end(ap);
++ 	if (errnum)
++ 		fprintf(stderr, ": %s", strerror(errnum));
++ 	fprintf(stderr, "\n");
++ 	error_message_count++;
++ 	if (status)
++ 		exit(status);
++ }
++ 
++ #endif	/* _ERROR_H_ */
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..b83bb8d33283
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/epm/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, rpm
+}:
+
+stdenv.mkDerivation rec {
+  pname = "epm";
+  version = "5.0.0";
+
+  src = fetchFromGitHub {
+    owner = "jimjag";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-o4B5lWBeve+U70FDgF1DrtNrXxaEY4etkPpwbqF7fmc=";
+  };
+
+  patches = [
+    # Makefile fix: INSTALL command
+    (fetchpatch {
+      url = "https://github.com/jimjag/epm/commit/dc5fcd6fa6e3a74baa28be060769a2b47f9368e7.patch";
+      sha256 = "1gfyz493w0larin841xx3xalb7m3sp1r2vv1xki6rz35ybrnb96c";
+    })
+    # Makefile fix: man pages filenames and docdir target
+    (fetchpatch {
+      url = "https://github.com/jimjag/epm/commit/96bb48d4d7b463a09d5a25debfb51c88dcd7398c.patch";
+      sha256 = "11aws0qac6vyy3w5z39vkjy4symmfzxfq9qgbgkk74fvx9vax42a";
+    })
+  ];
+
+  buildInputs = [ rpm ];
+
+  meta = with lib; {
+    description = "The ESP Package Manager generates distribution archives for a variety of platforms";
+    homepage = "https://jimjag.github.io/epm/";
+    license = licenses.asl20;
+    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..6773e9bc0bd4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/findnewest/default.nix
@@ -0,0 +1,22 @@
+{ lib, 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 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..4d3661b6c201
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/fsatrace/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "fsatrace";
+  version = "0.0.1-324";
+
+  src = fetchFromGitHub {
+    owner = "jacereda";
+    repo = "fsatrace";
+    rev = "41fbba17da580f81ababb32ec7e6e5fd49f11473";
+    sha256 = "1ihm2v723idd6m0kc1z9v73hmfvh2v0vjs8wvx5w54jaxh3lmj1y";
+  };
+
+  installDir = "libexec/${pname}-${version}";
+
+  makeFlags = [ "INSTALLDIR=$(out)/$(installDir)" ];
+
+  preInstall = ''
+    mkdir -p $out/$installDir
+  '';
+
+  postInstall = ''
+    mkdir -p $out/bin
+    ln -s $out/$installDir/fsatrace $out/bin/fsatrace
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/jacereda/fsatrace";
+    description = "filesystem access tracer";
+    license = licenses.isc;
+    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..5eb252a9c0e4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/fswatch/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv
+, fetchFromGitHub
+, autoreconfHook
+                     # for xargs
+, gettext
+, libtool
+, makeWrapper
+, texinfo
+, CoreServices
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fswatch";
+  version = "1.16.0";
+
+  src = fetchFromGitHub {
+    owner = "emcrisostomo";
+    repo = "fswatch";
+    rev = version;
+    sha256 = "sha256-EKbo5gkrWuijLJgYsNBDtxy0ioXu/yHxnPPeOpk620g=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper ] ++ lib.optionals stdenv.isDarwin [ CoreServices ];
+  buildInputs = [ gettext libtool texinfo ];
+
+  enableParallelBuilding = true;
+
+  meta = with 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..978a67950569
--- /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
+@@ -3644,7 +3644,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..de59bd2d17bb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gdb/debug-info-from-env.patch
@@ -0,0 +1,24 @@
+diff -ur a/gdb/main.c b/gdb/main.c
+--- a/gdb/main.c	2020-02-08 13:50:14.000000000 +0100
++++ b/gdb/main.c	2020-02-24 10:02:07.731806739 +0100
+@@ -567,9 +567,17 @@
+       gdb_sysroot = xstrdup (TARGET_SYSROOT_PREFIX);
+     }
+ 
+-  debug_file_directory
+-    = xstrdup (relocate_gdb_directory (DEBUGDIR,
+-				     DEBUGDIR_RELOCATABLE).c_str ());
++  debug_file_directory = getenv ("NIX_DEBUG_INFO_DIRS");
++  if (debug_file_directory != NULL)
++    // This might be updated later using
++    // $ set debug-file-directory /to/some/path
++    // which will use xfree. We must then have a xmallocated
++    // copy of the string that can be xfeed later.
++    debug_file_directory = xstrdup (debug_file_directory);
++  else
++    debug_file_directory
++      = xstrdup (relocate_gdb_directory (DEBUGDIR,
++                                         DEBUGDIR_RELOCATABLE).c_str ());
+ 
+   gdb_datadir = relocate_gdb_directory (GDB_DATADIR,
+ 					GDB_DATADIR_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..c173b96f6eb0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gdb/default.nix
@@ -0,0 +1,128 @@
+{ lib, stdenv, targetPackages
+
+# Build time
+, fetchurl, fetchpatch, pkg-config, perl, texinfo, setupDebugInfoDirs, buildPackages
+
+# Run time
+, ncurses, readline, gmp, mpfr, expat, libipt, zlib, dejagnu, sourceHighlight
+
+, pythonSupport ? stdenv.hostPlatform == stdenv.buildPlatform && !stdenv.hostPlatform.isCygwin, python3 ? null
+, enableDebuginfod ? false, elfutils
+, guile ? null
+, safePaths ? [
+   # $debugdir:$datadir/auto-load are whitelisted by default by GDB
+   "$debugdir" "$datadir/auto-load"
+   # targetPackages so we get the right libc when cross-compiling and using buildPackages.gdb
+   targetPackages.stdenv.cc.cc.lib
+  ]
+}:
+
+let
+  basename = "gdb";
+  targetPrefix = lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform)
+                 "${stdenv.targetPlatform.config}-";
+in
+
+assert pythonSupport -> python3 != null;
+
+stdenv.mkDerivation rec {
+  pname = targetPrefix + basename;
+  version = "11.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/gdb/${basename}-${version}.tar.xz";
+    sha256 = "151z6d0265hv9cgx9zqqa4bd6vbp20hrljhd6bxl7lr0gd0crkyc";
+  };
+
+  postPatch = if stdenv.isDarwin then ''
+    substituteInPlace gdb/darwin-nat.c \
+      --replace '#include "bfd/mach-o.h"' '#include "mach-o.h"'
+  '' else null;
+
+  patches = [
+    ./debug-info-from-env.patch
+
+    # Pull upstream fix for gcc-12. Will be included in gdb-12.
+    (fetchpatch {
+      name = "gcc-12.patch";
+      url = "https://sourceware.org/git/?p=binutils-gdb.git;a=patch;h=e97436b1b789dcdb6ffb502263f4c86f8bc22996";
+      sha256 = "1mpgw6s9qgnwhwyg3hagc6vhqhvia0l1s8nr22bcahwqxi3wvzcw";
+    })
+  ] ++ lib.optionals stdenv.isDarwin [
+    ./darwin-target-match.patch
+  ];
+
+  nativeBuildInputs = [ pkg-config texinfo perl setupDebugInfoDirs ];
+
+  buildInputs = [ ncurses readline gmp mpfr expat libipt zlib guile sourceHighlight ]
+    ++ lib.optional pythonSupport python3
+    ++ lib.optional doCheck dejagnu
+    ++ lib.optional enableDebuginfod (elfutils.override { enableDebuginfod = true; });
+
+  propagatedNativeBuildInputs = [ setupDebugInfoDirs ];
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  enableParallelBuilding = true;
+
+  # darwin build fails with format hardening since v7.12
+  hardeningDisable = lib.optionals stdenv.isDarwin [ "format" ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-format-nonliteral";
+
+  configurePlatforms = [ "build" "host" "target" ];
+
+  # GDB have to be built out of tree.
+  preConfigure = ''
+    mkdir _build
+    cd _build
+  '';
+  configureScript = "../configure";
+
+  configureFlags = with lib; [
+    # Set the program prefix to the current targetPrefix.
+    # This ensures that the prefix always conforms to
+    # nixpkgs' expectations instead of relying on the build
+    # system which only receives `config` which is merely a
+    # subset of the platform description.
+    "--program-prefix=${targetPrefix}"
+
+    "--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}"
+    "--with-auto-load-safe-path=${builtins.concatStringsSep ":" safePaths}"
+  ] ++ lib.optional (!pythonSupport) "--without-python"
+    ++ lib.optional stdenv.hostPlatform.isMusl "--disable-nls"
+    ++ lib.optional enableDebuginfod "--with-debuginfod=yes";
+
+  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 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 = lib.licenses.gpl3Plus;
+
+    platforms = with platforms; linux ++ cygwin ++ darwin;
+    maintainers = with maintainers; [ pierron globin lsix ];
+  };
+}
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..a82ff178c9eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gdbgui/default.nix
@@ -0,0 +1,96 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, gdb
+, flask
+, six
+, bidict
+, python-engineio
+, python-socketio
+, flask-socketio
+, flask-compress
+, pygdbmi
+, pygments
+, gevent
+, gevent-websocket
+, eventlet
+, }:
+
+let
+  # gdbgui only works with the latest previous major version of flask-socketio,
+  # which depends itself on the latest previous major versions of dependencies.
+  python-engineio' = python-engineio.overridePythonAttrs (old: rec {
+    version = "3.14.2";
+    src = fetchPypi {
+      inherit (old) pname;
+      inherit version;
+      sha256 = "119halljynqsgswlhlh750qv56js1p7j52sc0nbwxh8450zmbd7a";
+    };
+    propagatedBuildInputs = [ six ];
+    doCheck = false;
+  });
+  python-socketio' = python-socketio.overridePythonAttrs (old: rec {
+    version = "4.6.1";
+    src = fetchPypi {
+      inherit (old) pname;
+      inherit version;
+      sha256 = "047syhrrxh327p0fnab0d1zy25zijnj3gs1qg3kjpsy1jaj5l7yd";
+    };
+    propagatedBuildInputs = [ bidict python-engineio' ];
+    doCheck = false;
+  });
+  flask-socketio' = flask-socketio.overridePythonAttrs (old: rec {
+    version = "4.3.2";
+    src = fetchPypi {
+      inherit (old) pname;
+      inherit version;
+      sha256 = "0s2xs9kv9cbwy8bcxszhdwlcb9ldv0fj33lwilf5vypj0wsin01p";
+    };
+    propagatedBuildInputs = [ flask python-socketio' ];
+    doCheck = false;
+  });
+in
+buildPythonApplication rec {
+  pname = "gdbgui";
+  version = "0.14.0.2";
+
+  buildInputs = [ gdb ];
+  propagatedBuildInputs = [
+    flask
+    flask-socketio'
+    flask-compress
+    pygdbmi
+    pygments
+    gevent
+    gevent-websocket
+    eventlet
+  ];
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1v6wwsncgnhlg5c7gsmzcp52hfblfnz5kf5pk4d0zybflsxak02d";
+  };
+
+  postPatch = ''
+    echo ${version} > gdbgui/VERSION.txt
+    # remove upper version bound
+    sed -ie 's!, <.*"!"!' setup.py
+    sed -i 's/greenlet==/greenlet>=/' setup.py
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/gdbgui \
+      --prefix PATH : ${lib.makeBinPath [ gdb ]}
+  '';
+
+  # tests do not work without stdout/stdin
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A browser-based frontend for GDB";
+    homepage = "https://www.gdbgui.com/";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ yrashk dump_stack ];
+  };
+}
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..e56910bb132b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gede/default.nix
@@ -0,0 +1,35 @@
+{ mkDerivation, lib, fetchurl, makeWrapper, python3, qmake, ctags, gdb }:
+
+mkDerivation rec {
+  pname = "gede";
+  version = "2.18.2";
+
+  src = fetchurl {
+    url = "http://gede.dexar.se/uploads/source/${pname}-${version}.tar.xz";
+    sha256 = "sha256-QWrDHV+2trl+wKKibWiDa+kVREN116OwQ6DomaKj3LY=";
+  };
+
+  nativeBuildInputs = [ qmake makeWrapper python3 ];
+
+  buildInputs = [ ctags ];
+
+  strictDeps = true;
+
+  dontUseQmakeConfigure = true;
+
+  dontBuild = true;
+
+  installPhase = ''
+    python build.py install --verbose --prefix="$out"
+    wrapProgram $out/bin/gede \
+      --prefix PATH : ${lib.makeBinPath [ ctags gdb ]}
+  '';
+
+  meta = with lib; {
+    description = "Graphical frontend (GUI) to GDB";
+    homepage = "http://gede.dexar.se";
+    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..d24d4b66d66c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gengetopt/default.nix
@@ -0,0 +1,46 @@
+{ fetchurl, lib, stdenv, texinfo, help2man }:
+
+stdenv.mkDerivation rec {
+  pname = "gengetopt";
+  version = "2.23";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "1b44fn0apsgawyqa4alx2qj5hls334mhbszxsy6rfr0q074swhdr";
+  };
+
+  doCheck = true;
+  # attempts to open non-existent file
+  preCheck = ''
+    rm tests/test_conf_parser_save.sh
+  '';
+
+  # test suite is not thread safe
+  enableParallelBuilding = false;
+
+  nativeBuildInputs = [ texinfo help2man ];
+
+  #Fix, see #28255
+  postPatch = ''
+    substituteInPlace configure --replace \
+      'set -o posix' \
+      'set +o posix'
+  '';
+
+  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 = lib.licenses.gpl3Plus;
+
+    maintainers = [ ];
+    platforms = 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..70ec9278ae13
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/global/default.nix
@@ -0,0 +1,61 @@
+{ fetchurl, lib, stdenv, libtool, makeWrapper
+, coreutils, ctags, ncurses, python3Packages, sqlite, universal-ctags
+}:
+
+let
+  pygments = python3Packages.pygments;
+in stdenv.mkDerivation rec {
+  pname = "global";
+  version = "6.6.7";
+
+  src = fetchurl {
+    url = "mirror://gnu/global/${pname}-${version}.tar.gz";
+    sha256 = "sha256-aaD3f1OCfFVoF2wdOCFm3zYedCY6BH8LMFiqLyrVijw=";
+  };
+
+  nativeBuildInputs = [ libtool makeWrapper ];
+
+  buildInputs = [ ncurses ];
+
+  propagatedBuildInputs = [ 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 ${pygments})"
+    wrapProgram $out/bin/global \
+      --prefix PYTHONPATH : "$(toPythonPath ${pygments})"
+  '';
+
+  meta = with 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/default.nix b/nixpkgs/pkgs/development/tools/misc/gnum4/default.nix
new file mode 100644
index 000000000000..806625934d95
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gnum4/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "gnum4";
+  version = "1.4.19";
+
+  src = fetchurl {
+    url = "mirror://gnu/m4/m4-${version}.tar.bz2";
+    sha256 = "sha256-swapHA/ZO8QoDPwumMt6s5gf91oYe+oyk4EfRSyJqMg=";
+  };
+
+  doCheck = false;
+
+  configureFlags = [ "--with-syscmd-shell=${stdenv.shell}" ];
+
+  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 = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.unix ++ lib.platforms.windows;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/go-license-detector/default.nix b/nixpkgs/pkgs/development/tools/misc/go-license-detector/default.nix
new file mode 100644
index 000000000000..91c6518bc26d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/go-license-detector/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-license-detector";
+  version = "3.1.0";
+
+  src = fetchFromGitHub {
+    owner = "src-d";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0ln1z3y9q5igf9djkxw05ql2hb1ijcvvz0mrbwz11cdv9xrsa4z4";
+  };
+
+  vendorSha256 = "0gan5l7vsq0hixxcymhhs8p07v92w60r0lhgvrr9a99nic12vmia";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Reliable project licenses detector";
+    homepage = "https://github.com/src-d/go-license-detector";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/go-md2man/default.nix b/nixpkgs/pkgs/development/tools/misc/go-md2man/default.nix
new file mode 100644
index 000000000000..8c43fe7f5947
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/go-md2man/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-md2man";
+  version = "2.0.1";
+
+  vendorSha256 = null;
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "cpuguy83";
+    repo = "go-md2man";
+    sha256 = "sha256-DnXWnHWtczNnLaQg9Wnp9U/K4h/FbhqGgba44P6VNBQ=";
+  };
+
+  meta = with lib; {
+    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/gob2/default.nix b/nixpkgs/pkgs/development/tools/misc/gob2/default.nix
new file mode 100644
index 000000000000..06487845fb3d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gob2/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, bison, flex, gnome }:
+
+stdenv.mkDerivation rec {
+  pname = "gob2";
+  version = "2.0.20";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "5fe5d7990fd65b0d4b617ba894408ebaa6df453f2781c15a1cfdf2956c0c5428";
+  };
+
+  # configure script looks for d-bus but it is only needed for tests
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib bison flex ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      versionPolicy = "none";
+    };
+  };
+
+  meta = {
+    description = "Preprocessor for making GObjects with inline C code";
+    homepage = "https://www.jirka.org/gob.html";
+    license = lib.licenses.gpl2Plus;
+    platforms = 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..f83b245417ee
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gperf/3.0.x.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "gperf";
+  version = "3.0.4";
+
+  src = fetchurl {
+    url = "mirror://gnu/gperf/gperf-${version}.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 = lib.licenses.gpl3Plus;
+
+    homepage = "https://www.gnu.org/software/gperf/";
+    platforms = 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..71b0bbd0b0d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gperf/default.nix
@@ -0,0 +1,34 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "gperf";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.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 = lib.licenses.gpl3Plus;
+
+    homepage = "https://www.gnu.org/software/gperf/";
+    platforms = 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..f5298d685eba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gpshell/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, pkg-config, globalplatform, pcsclite, gppcscconnectionplugin
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gpshell";
+  version = "1.4.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/globalplatform/gpshell-${version}.tar.gz";
+    sha256 = "19a77zvyf2vazbv17185s4pynhylk2ky8vhl4i8pg9zww29sicqi";
+  };
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [ globalplatform pcsclite ];
+
+  postFixup = ''
+    wrapProgram "$out/bin/gpshell" --prefix LD_LIBRARY_PATH : "${gppcscconnectionplugin}/lib"
+  '';
+
+  meta = with 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/gpuvis/default.nix b/nixpkgs/pkgs/development/tools/misc/gpuvis/default.nix
new file mode 100644
index 000000000000..83c04495f8cc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gpuvis/default.nix
@@ -0,0 +1,41 @@
+{ fetchFromGitHub
+, freetype
+, gtk3
+, lib
+, meson
+, ninja
+, pkg-config
+, SDL2
+, stdenv
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gpuvis";
+  version = "20211204";
+
+  src = fetchFromGitHub {
+    owner = "mikesart";
+    repo = pname;
+    rev = "7f47419470687c7ecbdf086b81f5bafdb05d1bef";
+    sha256 = "sha256-29Bv+y0zWzn7QtpsjRV6hr19bCeyVJusPcYiAIEIluk=";
+  };
+
+  # patch dlopen path for gtk3
+  postPatch = ''
+    substituteInPlace src/hook_gtk3.h \
+      --replace "libgtk-3.so" "${lib.getLib gtk3}/lib/libgtk-3.so"
+  '';
+
+  nativeBuildInputs = [ pkg-config meson ninja wrapGAppsHook ];
+
+  buildInputs = [ SDL2 gtk3 freetype ];
+
+  meta = with lib; {
+    description = "GPU Trace Visualizer";
+    homepage = "https://github.com/mikesart/gpuvis";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emantor ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/grcov/default.nix b/nixpkgs/pkgs/development/tools/misc/grcov/default.nix
new file mode 100644
index 000000000000..45e1ba8e4bc0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/grcov/default.nix
@@ -0,0 +1,38 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "grcov";
+  version = "0.8.7";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-4McF9tLIjDCftyGI29pm/LnTUBVWG+pY5z+mGFKySQM=";
+  };
+
+  cargoSha256 = "sha256-/filuQ4AWsKVIsXbDX7S1yhCArLNTZpOMEn3ID6WuMo=";
+
+  # tests do not find grcov path correctly
+  checkFlags = let
+    skipList = [
+      "test_coveralls_service_job_id_is_not_sufficient"
+      "test_coveralls_service_name_is_not_sufficient"
+      "test_coveralls_works_with_just_service_name_and_job_id_args"
+      "test_coveralls_works_with_just_token_arg"
+      "test_integration"
+      "test_integration_guess_single_file"
+      "test_integration_zip_dir"
+      "test_integration_zip_zip"
+    ];
+    skipFlag = test: "--skip " + test;
+  in builtins.concatStringsSep " " (builtins.map skipFlag skipList);
+
+  meta = with lib; {
+    description =
+      "Rust tool to collect and aggregate code coverage data for multiple source files";
+    homepage = "https://github.com/mozilla/grcov";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ DieracDelta ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/grpc-tools/default.nix b/nixpkgs/pkgs/development/tools/misc/grpc-tools/default.nix
new file mode 100644
index 000000000000..96bdce6d0ef6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/grpc-tools/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, cmake
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "grpc-tools";
+  version = "1.11.2";
+
+  src = fetchFromGitHub {
+    owner = "grpc";
+    repo = "grpc-node";
+    rev = "grpc-tools@${version}";
+    sha256 = "00432y19pjcimwachjcqpzra21vzmlqchhhlqxnk98bfh25kxdcb";
+    fetchSubmodules = true;
+  };
+
+  sourceRoot = "source/packages/grpc-tools";
+
+  nativeBuildInputs = [ cmake ];
+
+  installPhase = ''
+    install -Dm755 -t $out/bin grpc_node_plugin
+    install -Dm755 -t $out/bin deps/protobuf/protoc
+  '';
+
+  meta = with lib; {
+    description = "Distribution of protoc and the gRPC Node protoc plugin for ease of installation with npm";
+    longDescription = ''
+      This package distributes the Protocol Buffers compiler protoc along with
+      the plugin for generating client and service objects for use with the Node
+      gRPC libraries.
+    '';
+    homepage = "https://github.com/grpc/grpc-node/tree/master/packages/grpc-tools";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = [ maintainers.nzhang-zh ];
+  };
+}
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..9e6d846e80a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gtkdialog/default.nix
@@ -0,0 +1,22 @@
+{lib, stdenv, fetchurl, gtk2, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "gtkdialog";
+  version = "0.8.3";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "ff89d2d7f1e6488e5df5f895716ac1d4198c2467a2a5dc1f51ab408a2faec38e";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 ];
+
+  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 = lib.licenses.gpl2Plus;
+    platforms = 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..ff5fe7bcba40
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/gtkperf/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, gtk2, pkg-config, libintl }:
+
+stdenv.mkDerivation rec {
+  pname = "gtkperf";
+  version = "0.40.0";
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}_${lib.versions.majorMinor version}.tar.gz";
+    sha256 = "0yxj3ap3yfi76vqg6xjvgc16nfi9arm9kp87s35ywf10fd73814p";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 libintl ];
+
+  # https://openbenchmarking.org/innhold/7e9780c11550d09aa67bdba71248facbe2d781db
+  patches = [ ./bench.patch ];
+
+  meta = with 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..4521eee95a21
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/help2man/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchurl, perlPackages, gettext }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "help2man";
+  version = "1.48.5";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-ZznkyqQuau0zmb5Dh8p5OZZAlnM06RcohjuOqpIlgr4=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ gettext perlPackages.perl perlPackages.LocaleGettext ];
+  buildInputs = [ 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}
+    ${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 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..e5bf07089861
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/hound/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, mercurial
+, git
+}:
+
+buildGoModule rec {
+  pname = "hound";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "hound-search";
+    repo = "hound";
+    rev = "v${version}";
+    sha256 = "0p5w54fr5xz19ff8k5xkyq3iqhjki8wc0hj2x1pnmk6hzrz6hf65";
+  };
+
+  vendorSha256 = "0x1nhhhvqmz3qssd2d44zaxbahj8lh9r4m5jxdvzqk6m3ly7y0b6";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  # requires network access
+  doCheck = false;
+
+  postInstall = ''
+    wrapProgram $out/bin/houndd --prefix PATH : ${lib.makeBinPath [ mercurial git ]}
+  '';
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Lightning fast code searching made easy";
+    license = licenses.mit;
+    maintainers = with maintainers; [ grahamc SuperSandro2000 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/hydra-cli/default.nix b/nixpkgs/pkgs/development/tools/misc/hydra-cli/default.nix
new file mode 100644
index 000000000000..1332885bbdbe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/hydra-cli/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, lib, pkg-config, openssl, fetchFromGitHub, rustPlatform, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hydra-cli";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "nlewo";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1fd3swdjx249971ak1bgndm5kh6rlzbfywmydn122lhfi6ry6a03";
+  };
+  cargoSha256 = "16446ppkvc6l8087x5m5kyy5gk4f7inyj7rzrfysriw4fvqxjsf3";
+
+  buildInputs = [ openssl ]
+                ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  meta = with lib; {
+    description = "A client for the Hydra CI";
+    homepage = "https://github.com/nlewo/hydra-cli";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ gilligan lewo ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/hydra/common.nix b/nixpkgs/pkgs/development/tools/misc/hydra/common.nix
new file mode 100644
index 000000000000..1ae54d629acc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/hydra/common.nix
@@ -0,0 +1,142 @@
+{ stdenv, nix, perlPackages, buildEnv
+, makeWrapper, autoconf, automake, libtool, unzip, pkg-config, sqlite, libpqxx_6
+, top-git, mercurial, darcs, subversion, breezy, openssl, bzip2, libxslt
+, perl, postgresql, nukeReferences, git, boehmgc, nlohmann_json
+, docbook_xsl, openssh, gnused, coreutils, findutils, gzip, xz, gnutar
+, rpm, dpkg, cdrkit, pixz, lib, boost, autoreconfHook, src ? null, version ? null
+, migration ? false, patches ? []
+, tests ? {}, mdbook
+}:
+
+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; lib.closePropagation
+      [ ModulePluggable
+        CatalystActionREST
+        CatalystAuthenticationStoreDBIxClass
+        CatalystDevel
+        CatalystDispatchTypeRegex
+        CatalystPluginAccessLog
+        CatalystPluginAuthorizationRoles
+        CatalystPluginCaptcha
+        CatalystPluginPrometheusTiny
+        CatalystPluginSessionStateCookie
+        CatalystPluginSessionStoreFastMmap
+        CatalystPluginSmartURI
+        CatalystPluginStackTrace
+        CatalystRuntime
+        CatalystTraitForRequestProxyBase
+        CatalystViewDownload
+        CatalystViewJSON
+        CatalystViewTT
+        CatalystXScriptServerStarman
+        CatalystXRoleApplicator
+        CryptPassphrase
+        CryptPassphraseArgon2
+        CryptRandPasswd
+        DBDPg
+        DBDSQLite
+        DataDump
+        DateTime
+        DigestSHA1
+        EmailMIME
+        EmailSender
+        FileSlurp
+        IOCompress
+        IPCRun
+        JSON
+        JSONAny
+        JSONXS
+        LWP
+        LWPProtocolHttps
+        NetAmazonS3
+        NetPrometheus
+        NetStatsd
+        PadWalker
+        PrometheusTinyShared
+        Readonly
+        SQLSplitStatement
+        SetScalar
+        Starman
+        StringCompareConstantTime
+        SysHostnameLong
+        TermSizeAny
+        TextDiff
+        TextTable
+        XMLSimple
+        YAML
+        nix
+        nix.perl-bindings
+        git
+        boehmgc
+      ];
+  };
+in stdenv.mkDerivation rec {
+  pname = "hydra";
+
+  inherit stdenv src version patches;
+
+  buildInputs =
+    [ makeWrapper autoconf automake libtool unzip nukeReferences sqlite libpqxx_6
+      top-git mercurial /*darcs*/ subversion breezy openssl bzip2 libxslt
+      perlDeps perl nix
+      postgresql # for running the tests
+      nlohmann_json
+      boost
+    ];
+
+  hydraPath = lib.makeBinPath (
+    [ sqlite subversion openssh nix coreutils findutils pixz
+      gzip bzip2 xz gnutar unzip git top-git mercurial /*darcs*/ gnused breezy
+    ] ++ lib.optionals stdenv.isLinux [ rpm dpkg cdrkit ] );
+
+  nativeBuildInputs = [ autoreconfHook pkg-config mdbook ];
+
+  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 = { inherit perlDeps migration tests; };
+
+  meta = with lib; {
+    description = "Nix-based continuous build system";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
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..27ff31dae963
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/hydra/default.nix
@@ -0,0 +1,19 @@
+{ fetchFromGitHub, callPackage, nixVersions, nixosTests }:
+
+{
+  hydra-unstable = callPackage ./common.nix {
+    version = "2021-08-11";
+    src = fetchFromGitHub {
+      owner = "NixOS";
+      repo = "hydra";
+      rev = "9bce425c3304173548d8e822029644bb51d35263";
+      sha256 = "sha256-tGzwKNW/odtAYcazWA9bPVSmVXMGKfXsqCA1UYaaxmU=";
+    };
+    patches = [ ./eval.patch ];
+    nix = nixVersions.unstable;
+
+    tests = {
+      basic = nixosTests.hydra.hydra-unstable;
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/hydra/eval.patch b/nixpkgs/pkgs/development/tools/misc/hydra/eval.patch
new file mode 100644
index 000000000000..a1b7599cc2b4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/hydra/eval.patch
@@ -0,0 +1,34 @@
+--- a/src/hydra-eval-jobs/hydra-eval-jobs.cc
++++ b/src/hydra-eval-jobs/hydra-eval-jobs.cc
+@@ -64,11 +64,11 @@
+ 
+ static std::string queryMetaStrings(EvalState & state, DrvInfo & drv, const string & name, const string & subAttribute)
+ {
+-    Strings res;
++    std::list<std::string_view> res;
+     std::function<void(Value & v)> rec;
+ 
+     rec = [&](Value & v) {
+-        state.forceValue(v);
++        state.forceValue(v, noPos);
+         if (v.type() == nString)
+             res.push_back(v.string.s);
+         else if (v.isList())
+@@ -112,7 +112,7 @@
+         callFlake(state, lockedFlake, *vFlake);
+ 
+         auto vOutputs = vFlake->attrs->get(state.symbols.create("outputs"))->value;
+-        state.forceValue(*vOutputs);
++        state.forceValue(*vOutputs, noPos);
+ 
+         auto aHydraJobs = vOutputs->attrs->get(state.symbols.create("hydraJobs"));
+         if (!aHydraJobs)
+@@ -191,7 +191,7 @@
+                     state.forceList(*a->value, *a->pos);
+                     for (unsigned int n = 0; n < a->value->listSize(); ++n) {
+                         auto v = a->value->listElems()[n];
+-                        state.forceValue(*v);
++                        state.forceValue(*v, noPos);
+                         if (v->type() == nString)
+                             job["namedConstituents"].push_back(state.forceStringNoCtx(*v));
+                     }
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..930327a880db
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/icon-naming-utils/default.nix
@@ -0,0 +1,19 @@
+{lib, stdenv, fetchurl, perl, librsvg}:
+
+stdenv.mkDerivation rec {
+  pname = "icon-naming-utils";
+  version = "0.8.90";
+
+  src = fetchurl {
+    url = "http://tango.freedesktop.org/releases/${pname}-${version}.tar.gz";
+    sha256 = "071fj2jm5kydlz02ic5sylhmw6h2p3cgrm3gwdfabinqkqcv4jh4";
+  };
+
+  buildInputs = [ librsvg (perl.withPackages (p: [ p.XMLSimple ])) ];
+
+  meta = with 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..47f41f130bef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/igprof/default.nix
@@ -0,0 +1,43 @@
+{lib, stdenv, fetchFromGitHub, libunwind, cmake, pcre, gdb}:
+
+stdenv.mkDerivation rec {
+  version = "5.9.16";
+  pname = "igprof";
+
+  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 = lib.licenses.gpl2;
+
+    homepage = "https://igprof.org/";
+    platforms = lib.platforms.linux;
+    maintainers = with 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..ce8ce9d8a48b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/indent/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, texinfo, buildPackages, pkgsStatic }:
+
+stdenv.mkDerivation rec {
+  pname = "indent";
+  version = "2.2.12";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "12xvcd16cwilzglv9h7sgh4h1qqjd1h8s48ji2dla58m4706hzg7";
+  };
+
+  patches = [ ./darwin.patch ];
+  makeFlags = [ "AR=${stdenv.cc.targetPrefix}ar" ];
+
+  strictDeps = true;
+  nativeBuildInputs = [ texinfo ];
+  pkgsBuildBuild = [ buildPackages.stdenv.cc ]; # needed when cross-compiling
+
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang
+    "-Wno-implicit-function-declaration";
+
+  hardeningDisable = [ "format" ];
+
+  passthru.tests.static = pkgsStatic.indent;
+  meta = {
+    homepage = "https://www.gnu.org/software/indent/";
+    description = "A source code reformatter";
+    license = lib.licenses.gpl3Plus;
+    maintainers = [ lib.maintainers.mmahut ];
+    platforms = 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..b382cc51fa1e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/inotify-tools/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, autoreconfHook, fetchFromGitHub, nix-update-script }:
+
+stdenv.mkDerivation rec {
+  pname = "inotify-tools";
+  version = "3.22.1.0";
+
+  src = fetchFromGitHub {
+    repo = "inotify-tools";
+    owner = "inotify-tools";
+    rev = version;
+    sha256 = "sha256-I0kr+wFUWnovH9MXVsGaCBtp4+RnnMWD7sPecI3xz+Y=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/inotify-tools/inotify-tools/wiki";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ marcweber pSub shamilton ];
+    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..40cf1e14e94d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/intel-gpu-tools/default.nix
@@ -0,0 +1,100 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, pkg-config
+, libdrm
+, libpciaccess
+, cairo
+, xorgproto
+, udev
+, libX11
+, libXext
+, libXv
+, libXrandr
+, glib
+, bison
+, libunwind
+, python3
+, kmod
+, procps
+, utilmacros
+, gtk-doc
+, docbook_xsl
+, openssl
+, peg
+, elfutils
+, meson
+, ninja
+, valgrind
+, xmlrpc_c
+, gsl
+, alsa-lib
+, curl
+, json_c
+, liboping
+, flex
+, docutils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "intel-gpu-tools";
+  version = "1.26";
+
+  src = fetchurl {
+    url = "https://xorg.freedesktop.org/archive/individual/app/igt-gpu-tools-${version}.tar.xz";
+    sha256 = "1dwvxh1yplsh1a7h3gpp40g91v12cfxy6yy99s1v9yr2kwxikm1n";
+  };
+
+  patches = [
+    # fix build with meson 0.60
+    (fetchpatch {
+      url = "https://github.com/freedesktop/xorg-intel-gpu-tools/commit/963917a3565466832a3b2fc22e9285d34a0bf944.patch";
+      sha256 = "sha256-goO2N7aK2dJYMhFGS1DlvjEYMSijN6stV6Q5z/RP8Ko=";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config utilmacros meson ninja flex bison gtk-doc docutils docbook_xsl ];
+  buildInputs = [
+    libdrm
+    libpciaccess
+    cairo
+    xorgproto
+    udev
+    libX11
+    kmod
+    libXext
+    libXv
+    libXrandr
+    glib
+    libunwind
+    python3
+    procps
+    openssl
+    peg
+    elfutils
+    valgrind
+    xmlrpc_c
+    gsl
+    alsa-lib
+    curl
+    json_c
+    liboping
+  ];
+
+  NIX_CFLAGS_COMPILE = [ "-Wno-error=array-bounds" ];
+
+  preConfigure = ''
+    patchShebangs tests man
+  '';
+
+  hardeningDisable = [ "bindnow" ];
+
+  meta = with 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..967fc442a73d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/intltool/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, fetchpatch, gettext, perlPackages, buildPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "intltool";
+  version = "0.51.0";
+
+  src = fetchurl {
+    url = "https://launchpad.net/intltool/trunk/${version}/+download/${pname}-${version}.tar.gz";
+    sha256 = "1karx4sb7bnm2j67q0q74hspkfn6lqprpy5r99vkn5bb36a4viv7";
+  };
+
+  # fix "unescaped left brace" errors when using intltool in some cases
+  patches = [(fetchpatch {
+    name = "perl5.26-regex-fixes.patch";
+    urls = [
+      "https://sources.debian.org/data/main/i/intltool/0.51.0-5/debian/patches/perl5.26-regex-fixes.patch"
+      "https://src.fedoraproject.org/rpms/intltool/raw/d8d2ef29fb122a42a6b6678eb1ec97ae56902af2/f/intltool-perl5.26-regex-fixes.patch"
+    ];
+    sha256 = "12q2140867r5d0dysly72khi7b0mm2gd7nlm1k81iyg7fxgnyz45";
+  })];
+
+  nativeBuildInputs = with perlPackages; [ perl XMLParser ];
+  propagatedBuildInputs = [ gettext ] ++ (with perlPackages; [ perl XMLParser ]);
+
+  postInstall = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    for f in $out/bin/*; do
+      substituteInPlace $f --replace "${buildPackages.perl}" "${perlPackages.perl}"
+    done
+  '';
+  meta = with 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..ad62d1048732
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/iozone/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, lib, 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 {
+  pname = "iozone";
+  version = "3.490";
+
+  src = fetchurl {
+    url = "http://www.iozone.org/src/current/iozone${lib.replaceStrings ["."] ["_"] version}.tar";
+    sha256 = "1vagmm2k2bzlpahl2a2arpfmk3cd5nzhxi842a8mdag2b8iv9bay";
+  };
+
+  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     = lib.licenses.unfreeRedistributable;
+    platforms   = ["i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux" ];
+    maintainers = with lib.maintainers; [ Baughn makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/itm-tools/cargo-lock.patch b/nixpkgs/pkgs/development/tools/misc/itm-tools/cargo-lock.patch
new file mode 100644
index 000000000000..1559510cd9f1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/itm-tools/cargo-lock.patch
@@ -0,0 +1,321 @@
+diff --git a/Cargo.lock b/Cargo.lock
+new file mode 100644
+index 0000000..d9d39e5
+--- /dev/null
++++ b/Cargo.lock
+@@ -0,0 +1,315 @@
++# This file is automatically @generated by Cargo.
++# It is not intended for manual editing.
++[[package]]
++name = "addr2line"
++version = "0.12.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "602d785912f476e480434627e8732e6766b760c045bbf897d9dfaa9f4fbd399c"
++dependencies = [
++ "gimli",
++]
++
++[[package]]
++name = "adler32"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "567b077b825e468cc974f0020d4082ee6e03132512f207ef1a02fd5d00d1f32d"
++
++[[package]]
++name = "ansi_term"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
++dependencies = [
++ "winapi",
++]
++
++[[package]]
++name = "atty"
++version = "0.2.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
++dependencies = [
++ "hermit-abi",
++ "libc",
++ "winapi",
++]
++
++[[package]]
++name = "backtrace"
++version = "0.3.49"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "05100821de9e028f12ae3d189176b41ee198341eb8f369956407fea2f5cc666c"
++dependencies = [
++ "addr2line",
++ "cfg-if",
++ "libc",
++ "miniz_oxide",
++ "object",
++ "rustc-demangle",
++]
++
++[[package]]
++name = "bitflags"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
++
++[[package]]
++name = "byteorder"
++version = "1.3.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
++
++[[package]]
++name = "cfg-if"
++version = "0.1.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
++
++[[package]]
++name = "clap"
++version = "2.33.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129"
++dependencies = [
++ "ansi_term",
++ "atty",
++ "bitflags",
++ "strsim",
++ "textwrap",
++ "unicode-width",
++ "vec_map",
++]
++
++[[package]]
++name = "either"
++version = "1.5.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
++
++[[package]]
++name = "exitfailure"
++version = "0.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2ff5bd832af37f366c6c194d813a11cd90ac484f124f079294f28e357ae40515"
++dependencies = [
++ "failure",
++]
++
++[[package]]
++name = "failure"
++version = "0.1.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
++dependencies = [
++ "backtrace",
++ "failure_derive",
++]
++
++[[package]]
++name = "failure_derive"
++version = "0.1.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++ "synstructure",
++]
++
++[[package]]
++name = "gimli"
++version = "0.21.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bcc8e0c9bce37868955864dbecd2b1ab2bdf967e6f28066d65aaac620444b65c"
++
++[[package]]
++name = "hermit-abi"
++version = "0.1.15"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3deed196b6e7f9e44a2ae8d94225d80302d81208b1bb673fd21fe634645c85a9"
++dependencies = [
++ "libc",
++]
++
++[[package]]
++name = "itm"
++version = "0.4.0"
++source = "git+https://github.com/rust-embedded/itm#5dd476d03de0738062a876fd3845900ab04833a4"
++dependencies = [
++ "byteorder",
++ "either",
++ "thiserror",
++]
++
++[[package]]
++name = "itm-tools"
++version = "0.1.0"
++dependencies = [
++ "clap",
++ "exitfailure",
++ "failure",
++ "itm",
++ "rustc-demangle",
++ "xmas-elf",
++]
++
++[[package]]
++name = "libc"
++version = "0.2.71"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49"
++
++[[package]]
++name = "miniz_oxide"
++version = "0.3.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
++dependencies = [
++ "adler32",
++]
++
++[[package]]
++name = "object"
++version = "0.20.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1ab52be62400ca80aa00285d25253d7f7c437b7375c4de678f5405d3afe82ca5"
++
++[[package]]
++name = "proc-macro2"
++version = "1.0.18"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "beae6331a816b1f65d04c45b078fd8e6c93e8071771f41b8163255bbd8d7c8fa"
++dependencies = [
++ "unicode-xid",
++]
++
++[[package]]
++name = "quote"
++version = "1.0.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
++dependencies = [
++ "proc-macro2",
++]
++
++[[package]]
++name = "rustc-demangle"
++version = "0.1.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
++
++[[package]]
++name = "strsim"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
++
++[[package]]
++name = "syn"
++version = "1.0.33"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e8d5d96e8cbb005d6959f119f773bfaebb5684296108fb32600c00cde305b2cd"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "unicode-xid",
++]
++
++[[package]]
++name = "synstructure"
++version = "0.12.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++ "unicode-xid",
++]
++
++[[package]]
++name = "textwrap"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
++dependencies = [
++ "unicode-width",
++]
++
++[[package]]
++name = "thiserror"
++version = "1.0.20"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7dfdd070ccd8ccb78f4ad66bf1982dc37f620ef696c6b5028fe2ed83dd3d0d08"
++dependencies = [
++ "thiserror-impl",
++]
++
++[[package]]
++name = "thiserror-impl"
++version = "1.0.20"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "unicode-width"
++version = "0.1.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
++
++[[package]]
++name = "unicode-xid"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
++
++[[package]]
++name = "vec_map"
++version = "0.8.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
++
++[[package]]
++name = "winapi"
++version = "0.3.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
++dependencies = [
++ "winapi-i686-pc-windows-gnu",
++ "winapi-x86_64-pc-windows-gnu",
++]
++
++[[package]]
++name = "winapi-i686-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
++
++[[package]]
++name = "winapi-x86_64-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
++
++[[package]]
++name = "xmas-elf"
++version = "0.6.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "22678df5df766e8d1e5d609da69f0c3132d794edf6ab5e75e7abcd2270d4cf58"
++dependencies = [
++ "zero",
++]
++
++[[package]]
++name = "zero"
++version = "0.1.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5f1bc8a6b2005884962297587045002d8cfb8dcec9db332f4ca216ddc5de82c5"
diff --git a/nixpkgs/pkgs/development/tools/misc/itm-tools/default.nix b/nixpkgs/pkgs/development/tools/misc/itm-tools/default.nix
new file mode 100644
index 000000000000..0abdd0179013
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/itm-tools/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, rustPlatform, pkg-config }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "itm-tools";
+  version = "unstable-2019-11-15";
+
+  src = fetchFromGitHub {
+    owner = "japaric";
+    repo = pname;
+    rev = "e94155e44019d893ac8e6dab51cc282d344ab700";
+    sha256 = "19xkjym0i7y52cfhvis49c59nzvgw4906cd8bkz8ka38mbgfqgiy";
+  };
+
+  cargoPatches = [ ./cargo-lock.patch ];
+
+  cargoSha256 = "1hqv530x8k4rf9zzyl5p5z58bymk1p4qwrcxs21gr0zm2hqjlxy4";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tools for analyzing ITM traces";
+    homepage = "https://github.com/japaric/itm-tools";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ hh sb0 ];
+  };
+}
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..2c189cbf5a61
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/itstool/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, lib, fetchurl, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "itstool";
+  version = "2.0.6";
+
+  src = fetchurl {
+    url = "http://files.itstool.org/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "1acjgf8zlyk7qckdk19iqaca4jcmywd7vxjbcs1mm6kaf8icqcv2";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ python3 python3.pkgs.wrapPython ];
+  buildInputs = [ python3 python3.pkgs.libxml2 ];
+  pythonPath = [ python3.pkgs.libxml2 ];
+
+  postFixup = ''
+    wrapPythonPrograms
+  '';
+
+  meta = {
+    homepage = "http://itstool.org/";
+    description = "XML to PO and back again";
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/jiq/default.nix b/nixpkgs/pkgs/development/tools/misc/jiq/default.nix
new file mode 100644
index 000000000000..61477a4c7de0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/jiq/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub, jq, makeWrapper }:
+
+buildGoModule rec {
+  pname = "jiq";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "fiatjaf";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-txhttYngN+dofA3Yp3gZUZPRRZWGug9ysXq1Q0RP7ig=";
+  };
+
+  vendorSha256 = "sha256-ZUmOhPGy+24AuxdeRVF0Vnu8zDGFrHoUlYiDdfIV5lc=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  checkInputs = [ jq ];
+
+  postInstall = ''
+    wrapProgram $out/bin/jiq \
+      --prefix PATH : ${lib.makeBinPath [ jq ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/fiatjaf/jiq";
+    license = licenses.mit;
+    description = "jid on jq - interactive JSON query tool using jq expressions";
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
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..83dbfb93c86d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/jscoverage/default.nix
@@ -0,0 +1,55 @@
+{ autoconf, fetchurl, makedepend, perl, python3, lib, stdenv, zip }:
+
+stdenv.mkDerivation rec {
+  pname = "jscoverage";
+  version = "0.5.1";
+
+  src = fetchurl {
+    url = "https://siliconforks.com/${pname}/download/${pname}-${version}.tar.bz2";
+    sha256 = "c45f051cec18c10352f15f9844f47e37e8d121d5fd16680e2dd0f3b4420eb7f4";
+  };
+
+  patches = [
+    ./jsfalse_to_null.patch
+  ];
+
+  nativeBuildInputs = [ perl python3 zip ];
+
+  strictDeps = true;
+
+  # 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 = lib.licenses.gpl2;
+    platforms = 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/k2tf/default.nix b/nixpkgs/pkgs/development/tools/misc/k2tf/default.nix
new file mode 100644
index 000000000000..fef4d7d405c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/k2tf/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "k2tf";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = "sl1pm4t";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-75L8fcmZbG7PbZrF4cScRQjqbuu5eTnLIaDGzgF57/0=";
+  };
+
+  vendorSha256 = "sha256-YsSOw3G5ufxBn8Wu5J8md2Aaqhl0VJa7uB6ZzSPWo/A=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" "-X main.commit=v${version}" ];
+
+  meta = with lib; {
+    description = "Kubernetes YAML to Terraform HCL converter";
+    homepage = "https://github.com/sl1pm4t/k2tf";
+    license = licenses.mpl20;
+    maintainers = [ maintainers.flokli ];
+  };
+}
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..03044fe5c444
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/kconfig-frontends/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, pkg-config, bison, flex, gperf, ncurses, python3, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "kconfig-frontends";
+  version = "4.11.0.1";
+
+  src = fetchurl {
+    sha256 = "1xircdw3k7aaz29snf96q2fby1cs48bidz5l1kkj0a5gbivw31i3";
+    url = "http://ymorin.is-a-geek.org/download/kconfig-frontends/kconfig-frontends-${version}.tar.xz";
+  };
+
+  nativeBuildInputs = [ bison flex gperf pkg-config ];
+  buildInputs = [ bash ncurses python3 ];
+
+  strictDeps = true;
+
+  configureFlags = [
+    "--enable-frontends=conf,mconf,nconf"
+  ];
+
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=format-security";
+
+  meta = with 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..35e0a52865fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/kdbg/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, cmake, extra-cmake-modules, qt5,
+  ki18n, kconfig, kiconthemes, kxmlgui, kwindowsystem,
+  qtbase, makeWrapper,
+}:
+
+stdenv.mkDerivation rec {
+  pname = "kdbg";
+  version = "3.0.1";
+  src = fetchurl {
+    url = "mirror://sourceforge/kdbg/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1gax6xll8svmngw0z1rzhd77xysv01zp0i68x4n5pq0xgh7gi7a4";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules makeWrapper ];
+  buildInputs = [ qt5.qtbase ki18n kconfig kiconthemes kxmlgui kwindowsystem ];
+
+  postInstall = ''
+    wrapProgram $out/bin/kdbg --prefix QT_PLUGIN_PATH : ${qtbase}/${qtbase.qtPluginPrefix}
+  '';
+
+  dontWrapQtApps = true;
+
+  meta = with lib; {
+    homepage = "https://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/6.x.nix b/nixpkgs/pkgs/development/tools/misc/kibana/6.x.nix
new file mode 100644
index 000000000000..cd81975ee445
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/kibana/6.x.nix
@@ -0,0 +1,63 @@
+{ elk6Version
+, enableUnfree ? true
+, lib, stdenv
+, makeWrapper
+, fetchurl
+, nodejs-10_x
+, coreutils
+, which
+}:
+
+with 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  = "1a501lavxhckb3l93sbrbqyshicwkk6p89frry4x8p037xcfpy0x";
+      x86_64-darwin = "0zm45af30shhcg3mdhcma6rms1hyrx62rm5jzwnz9kxv4d30skbw";
+    }
+    else {
+      x86_64-linux  = "0wfdipf21apyily7mvlqgyc7m5jpr96zgrryzwa854z3xb2vw8zg";
+      x86_64-darwin = "1nklfx4yz6hsxlljvnvwjy7pncv9mzngl84710xad5jlyras3sdj";
+    };
+
+in stdenv.mkDerivation rec {
+  pname = "kibana${optionalString (!enableUnfree) "-oss"}";
+  version = elk6Version;
+
+  src = fetchurl {
+    url = "https://artifacts.elastic.co/downloads/kibana/${pname}-${version}-${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
+  ];
+
+  nativeBuildInputs = [ 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 : "${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 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..455f95a69eb0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/kibana/7.x.nix
@@ -0,0 +1,60 @@
+{ elk7Version
+, enableUnfree ? true
+, lib
+, stdenv
+, makeWrapper
+, fetchurl
+, nodejs-16_x
+, coreutils
+, which
+}:
+
+with lib;
+let
+  nodejs = nodejs-16_x;
+  inherit (builtins) elemAt;
+  info = splitString "-" stdenv.hostPlatform.system;
+  arch = elemAt info 0;
+  plat = elemAt info 1;
+  shas =
+    {
+      x86_64-linux  = "0jivwsrq31n0qfznrsjfsn65sg3wpbd990afn2wzjnj4drq7plz6";
+      x86_64-darwin = "02483aqzrccq1x6rwznmcazijdd46yxj9vnbihnvp2xyp3w9as45";
+      aarch64-linux = "0iw155gkkl1hshc80lfj95rssg039ig21wz1l3srmmf2x4f934s9";
+    };
+
+in stdenv.mkDerivation rec {
+  pname = "kibana";
+  version = elk7Version;
+
+  src = fetchurl {
+    url = "https://artifacts.elastic.co/downloads/kibana/${pname}-${version}-${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-7.patch
+  ];
+
+  nativeBuildInputs = [ 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 : "${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.elastic;
+    maintainers = with maintainers; [ offline basvandijk ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/kibana/disable-nodejs-version-check-7.patch b/nixpkgs/pkgs/development/tools/misc/kibana/disable-nodejs-version-check-7.patch
new file mode 100644
index 000000000000..ef4c207764c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/kibana/disable-nodejs-version-check-7.patch
@@ -0,0 +1,19 @@
+diff --git a/src/setup_node_env/node_version_validator.js b/src/setup_node_env/node_version_validator.js
+index 3f611e5a..f5c60c85 100644
+--- a/src/setup_node_env/node_version_validator.js
++++ b/src/setup_node_env/node_version_validator.js
+@@ -25,11 +25,11 @@ var pkg = require('../../package.json'); // Note: This is written in ES5 so we c
+ 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; // Validates current the NodeJS version compatibility when Kibana starts.
++var isVersionValid = !!currentVersion && !!requiredVersion; // Validates current the NodeJS version compatibility when Kibana starts.
+ 
+ if (!isVersionValid) {
+   var errorMessage = 'Kibana does not support the current Node.js version ' + currentVersion + '. Please use Node.js ' + requiredVersion + '.'; // 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/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..1cd195a3132d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/libtool/default.nix
@@ -0,0 +1,42 @@
+{lib, stdenv, fetchurl, m4, perl}:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "libtool";
+  version = "1.5.26";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.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 = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/libtool/libtool2-macos11.patch b/nixpkgs/pkgs/development/tools/misc/libtool/libtool2-macos11.patch
new file mode 100644
index 000000000000..1552ae7a949f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/libtool/libtool2-macos11.patch
@@ -0,0 +1,32 @@
+Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
+---
+ m4/libtool.m4 | 13 ++++---------
+ 1 file changed, 4 insertions(+), 9 deletions(-)
+
+diff --git a/m4/libtool.m4 b/m4/libtool.m4
+index f2d1f398..b971e8e7 100644
+--- a/m4/libtool.m4
++++ b/m4/libtool.m4
+@@ -1067,16 +1067,11 @@ _LT_EOF
+       _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+     darwin1.*)
+       _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+-    darwin*) # darwin 5.x on
+-      # if running on 10.5 or later, the deployment target defaults
+-      # to the OS version, if on x86, and 10.4, the deployment
+-      # target defaults to 10.4. Don't you love it?
+-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+-	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+-	  _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+-	10.[[012]][[,.]]*)
++    darwin*)
++      case ${MACOSX_DEPLOYMENT_TARGET},$host in
++	10.[[012]],*|,*powerpc*)
+ 	  _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+-	10.*)
++	*)
+ 	  _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+       esac
+     ;;
+-- 
+2.24.3 (Apple Git-128)
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..44e4c8665c83
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/libtool/libtool2.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchurl, fetchpatch, autoconf, automake, m4, perl, help2man
+}:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "libtool";
+  version = "2.4.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/libtool/${pname}-${version}.tar.gz";
+    sha256 = "1qq61k6lp1fp75xs398yzi6wvbx232l7xbyn3p13cnh27mflvgg3";
+  };
+
+  outputs = [ "out" "lib" ];
+
+  patches = [
+    # Suport macOS version 11.0
+    # https://lists.gnu.org/archive/html/libtool-patches/2020-06/msg00001.html
+    ./libtool2-macos11.patch
+  ];
+
+  # Normally we'd use autoreconfHook, but that includes libtoolize.
+  postPatch = ''
+    aclocal -I m4
+    automake
+    autoconf
+
+    pushd libltdl
+    aclocal -I ../m4
+    automake
+    autoconf
+    popd
+  '';
+
+  nativeBuildInputs = [ perl help2man m4 ] ++ [ autoconf automake ];
+  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;
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    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 = licenses.gpl2Plus;
+    maintainers = [ ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/libtree/default.nix b/nixpkgs/pkgs/development/tools/misc/libtree/default.nix
new file mode 100644
index 000000000000..f852b7ea7adf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/libtree/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, binutils
+, chrpath
+, cmake
+, cxxopts
+, elfio
+, termcolor
+, gtest
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libtree";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "haampie";
+    repo = "libtree";
+    rev = "v${version}";
+    sha256 = "sha256-j54fUwMkX4x4MwL8gMraguK9GqQRBjCC+W6ojFnQdHQ=";
+  };
+
+  patches = [
+    # add missing include
+    # https://github.com/haampie/libtree/pull/42
+    (fetchpatch {
+      url = "https://github.com/haampie/libtree/commit/219643ff6edcae42c9546b8ba38cfec9d19b034e.patch";
+      sha256 = "sha256-vdFmmBdBiOT3QBcwd3SuiolcaFTFAb88kU1KN8229K0=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace src/main.cpp \
+      --replace "std::string strip = \"strip\";" "std::string strip = \"${binutils}/bin/strip\";" \
+      --replace "std::string chrpath = \"chrpath\";" "std::string chrpath = \"${chrpath}/bin/chrpath\";"
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ cxxopts elfio termcolor ];
+
+  doCheck = true;
+
+  checkInputs = [ gtest ];
+
+  cmakeFlags = [ "-DLIBTREE_BUILD_TESTS=ON" ];
+
+  meta = with lib; {
+    description = "Tree ldd with an option to bundle dependencies into a single folder";
+    homepage = "https://github.com/haampie/libtree";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ prusnak rardiol ];
+  };
+}
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..aeda5271142a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/libwhich/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "libwhich";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "vtjnash";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0s0pqai61jszmi495k621rdlf288ij67adkz72hwqqarqp54idhb";
+  };
+
+  installPhase = ''
+    install -Dm755 -t $out/bin libwhich
+  '';
+
+  meta = with 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..da608ba5a061
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/linuxkit/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname   = "linuxkit";
+  version = "0.8";
+
+  goPackagePath = "github.com/linuxkit/linuxkit";
+
+  src = fetchFromGitHub {
+    owner = "linuxkit";
+    repo = "linuxkit";
+    rev = "v${version}";
+    sha256 = "15jj60k8wz9cahjbdscnwyyfb1k1grjh7yrilb1cj4r8mby4sp2g";
+  };
+
+  subPackages = [ "src/cmd/linuxkit" ];
+
+  ldflags = [ "-s" "-w" "-X ${goPackagePath}/src/cmd/linuxkit/version.GitCommit=${src.rev}" "-X ${goPackagePath}/src/cmd/linuxkit/version.Version=${version}" ];
+
+  meta = with lib; {
+    description = "A toolkit for building secure, portable and lean operating systems for containers";
+    license = licenses.asl20;
+    homepage = "https://github.com/linuxkit/linuxkit";
+    maintainers = [ maintainers.nicknovitski ];
+    platforms = 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..8a36c52e7ae3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lit/default.nix
@@ -0,0 +1,25 @@
+{ lib, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "lit";
+  version = "13.0.0";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "4da976f3d114e4ba6ba06cbe660ce1393230f4519c4df15b90bc1840f00e4195";
+  };
+
+  passthru = {
+    python = python3;
+  };
+
+  # 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..32a14404c606
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/loccount/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoPackage, fetchFromGitLab }:
+buildGoPackage rec {
+  pname = "loccount";
+  version = "1.2";
+
+  goPackagePath = "gitlab.com/esr/loccount";
+  excludedPackages = "tests";
+
+  src = fetchFromGitLab {
+    owner = "esr";
+    repo = "loccount";
+    rev = version;
+    sha256 = "18z7ai7wy2k9yd3w65d37apfqs3h9bc2c15y7v1bydppi44zfsdk";
+  };
+
+  meta = with 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/default.nix b/nixpkgs/pkgs/development/tools/misc/lsof/default.nix
new file mode 100644
index 000000000000..94e3722598b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lsof/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchFromGitHub, buildPackages, ncurses }:
+
+let dialect = with lib; last (splitString "-" stdenv.hostPlatform.system); in
+
+stdenv.mkDerivation rec {
+  pname = "lsof";
+  version = "4.94.0";
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  buildInputs = [ ncurses ];
+
+  src = fetchFromGitHub {
+    owner = "lsof-org";
+    repo = "lsof";
+    rev = version;
+    sha256 = "0yxv2jg6rnzys49lyrz9yjb4knamah4xvlqj596y6ix3vm4k3chp";
+  };
+
+  patches = [ ./no-build-info.patch ];
+
+  postPatch = lib.optionalString stdenv.hostPlatform.isMusl ''
+    substituteInPlace dialects/linux/dlsof.h --replace "defined(__UCLIBC__)" 1
+  '' + lib.optionalString stdenv.isDarwin ''
+    sed -i 's|lcurses|lncurses|g' Configure
+  '';
+
+  # Stop build scripts from searching global include paths
+  LSOF_INCLUDE = "${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 = ''
+    # Fix references from man page https://github.com/lsof-org/lsof/issues/66
+    substituteInPlace Lsof.8 \
+      --replace ".so ./00DIALECTS" "" \
+      --replace ".so ./version" ".ds VN ${version}"
+    mkdir -p $out/bin $out/man/man8
+    cp Lsof.8 $out/man/man8/lsof.8
+    cp lsof $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/lsof-org/lsof";
+    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..ce176aac4a65
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ltrace/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, elfutils, libunwind }:
+
+stdenv.mkDerivation rec {
+  pname = "ltrace";
+  version = "0.7.3";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/l/${pname}/${pname}_${version}.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 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..b7eabf6f9a20
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lttng-tools/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, pkg-config, popt, libuuid, liburcu, lttng-ust, kmod, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "lttng-tools";
+  version = "2.13.4";
+
+  src = fetchurl {
+    url = "https://lttng.org/files/lttng-tools/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-Vl8xAkEKU9SE9Mj/UXl48dxZ9n+dFvhy9DV/PKEiAPY=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ popt libuuid liburcu lttng-ust libxml2 kmod ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Tracing tools (kernel + user space) for Linux";
+    homepage = "https://lttng.org/";
+    license = with licenses; [ lgpl21Only gpl2Only ];
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/lttng-ust/2.12.nix b/nixpkgs/pkgs/development/tools/misc/lttng-ust/2.12.nix
new file mode 100644
index 000000000000..b3ef1fe65e7f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lttng-ust/2.12.nix
@@ -0,0 +1,4 @@
+import ./generic.nix {
+  version = "2.12.2";
+  sha256 = "sha256-vNDwZLbKiMcthOdg6sNHKuXIKEEcY0Q1kivun841n8c=";
+}
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..3bace16de56d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lttng-ust/default.nix
@@ -0,0 +1,4 @@
+import ./generic.nix {
+  version = "2.13.1";
+  sha256 = "sha256-Vme/Amnh5i4tnLl0xFb/huBAG9eqO/yNX9uXIzJJ7dw=";
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/lttng-ust/generic.nix b/nixpkgs/pkgs/development/tools/misc/lttng-ust/generic.nix
new file mode 100644
index 000000000000..e6e67352c859
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lttng-ust/generic.nix
@@ -0,0 +1,44 @@
+{ version, sha256 }:
+
+{ lib, stdenv, fetchurl, pkg-config, liburcu, numactl, python3 }:
+
+# 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 {
+  pname = "lttng-ust";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://lttng.org/files/lttng-ust/${pname}-${version}.tar.bz2";
+    inherit sha256;
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ numactl python3 ];
+
+  preConfigure = ''
+    patchShebangs .
+  '';
+
+  propagatedBuildInputs = [ liburcu ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "LTTng Userspace Tracer libraries";
+    homepage = "https://lttng.org/";
+    license = with licenses; [ lgpl21Only gpl2Only mit ];
+    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..1e89be8a0c22
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/lttv/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, gtk2, popt, babeltrace }:
+
+stdenv.mkDerivation rec {
+  pname = "lttv";
+  version = "1.5";
+
+  src = fetchurl {
+    url = "https://lttng.org/files/packages/${pname}-${version}.tar.bz2";
+    sha256 = "1faldxnh9dld5k0vxckwpqw241ya1r2zv286l6rpgqr500zqw7r1";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib gtk2 popt babeltrace ];
+
+  meta = with 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/3.7.nix b/nixpkgs/pkgs/development/tools/misc/luarocks/3.7.nix
new file mode 100644
index 000000000000..95fa79c6d125
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/luarocks/3.7.nix
@@ -0,0 +1,81 @@
+{lib, stdenv, fetchFromGitHub
+, curl, makeWrapper, which, unzip
+, lua
+# for 'luarocks pack'
+, zip
+# some packages need to be compiled with cmake
+, cmake
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "luarocks";
+  version = "3.7.0";
+
+  src = fetchFromGitHub {
+    owner = "luarocks";
+    repo = "luarocks";
+    rev = "v${version}";
+    sha256 = "1sn2j7hv8nbdjqj1747glk9770zw8q5v8ivaxhvwbk3vl038ck9d";
+  };
+
+  patches = [ ./darwin-3.7.0.patch ];
+
+  postPatch = lib.optionalString stdenv.targetPlatform.isDarwin ''
+    substituteInPlace src/luarocks/core/cfg.lua --subst-var-by 'darwinMinVersion' '${stdenv.targetPlatform.darwinMinVersion}'
+  '';
+
+  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
+  '';
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  buildInputs = [ lua curl 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
+
+    installShellCompletion --cmd luarocks --bash <($out/bin/luarocks completion bash)
+    installShellCompletion --cmd luarocks --zsh <($out/bin/luarocks completion zsh)
+  '';
+
+  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 lib; {
+    description = "A package manager for Lua";
+    license = licenses.mit ;
+    maintainers = with maintainers; [raskin teto];
+    platforms = platforms.linux ++ platforms.darwin;
+    downloadPage = "http://luarocks.org/releases/";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/luarocks/darwin-3.1.3.patch b/nixpkgs/pkgs/development/tools/misc/luarocks/darwin-3.1.3.patch
new file mode 100644
index 000000000000..8070af173aaf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/luarocks/darwin-3.1.3.patch
@@ -0,0 +1,24 @@
+diff --git a/src/luarocks/core/cfg.lua b/src/luarocks/core/cfg.lua
+index c5af5a2..1949fdc 100644
+--- a/src/luarocks/core/cfg.lua
++++ b/src/luarocks/core/cfg.lua
+@@ -425,7 +425,7 @@ 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"
+-      local version = util.popen_read("sw_vers -productVersion")
++      local version = os.getenv("MACOSX_DEPLOYMENT_TARGET") or "@darwinMinVersion@"
+       version = tonumber(version and version:match("^[^.]+%.([^.]+)")) or 3
+       if version >= 10 then
+          version = 8
+@@ -434,8 +434,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/darwin-3.7.0.patch b/nixpkgs/pkgs/development/tools/misc/luarocks/darwin-3.7.0.patch
new file mode 100644
index 000000000000..3252e6ae7b4f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/luarocks/darwin-3.7.0.patch
@@ -0,0 +1,24 @@
+diff --git a/src/luarocks/core/cfg.lua b/src/luarocks/core/cfg.lua
+index 535bd69..b017161 100644
+--- a/src/luarocks/core/cfg.lua
++++ b/src/luarocks/core/cfg.lua
+@@ -436,7 +436,7 @@ 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"
+-      local version = util.popen_read("sw_vers -productVersion")
++      local version = os.getenv("MACOSX_DEPLOYMENT_TARGET") or "@darwinMinVersion@"
+       if not (version:match("^%d+%.%d+%.%d+$") or version:match("^%d+%.%d+$")) then
+          version = "10.3"
+       end
+@@ -448,8 +448,8 @@ local function make_defaults(lua_version, target_cpu, platforms, home)
+       else
+          defaults.gcc_rpath = false
+       end
+-      defaults.variables.CC = "env MACOSX_DEPLOYMENT_TARGET="..tostring(version).." gcc"
+-      defaults.variables.LD = "env MACOSX_DEPLOYMENT_TARGET="..tostring(version).." gcc"
++      defaults.variables.CC = "env MACOSX_DEPLOYMENT_TARGET="..tostring(version).." clang"
++      defaults.variables.LD = "env MACOSX_DEPLOYMENT_TARGET="..tostring(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..58f5996992af
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/luarocks/default.nix
@@ -0,0 +1,81 @@
+{lib, stdenv, fetchFromGitHub
+, curl, makeWrapper, which, unzip
+, lua
+# for 'luarocks pack'
+, zip
+# some packages need to be compiled with cmake
+, cmake
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "luarocks";
+  version = "3.2.1";
+
+  src = fetchFromGitHub {
+    owner = "luarocks";
+    repo = "luarocks";
+    rev = "v${version}";
+    sha256 = "0viiafmb8binksda79ah828q1dfnb6jsqlk7vyndl2xvx9yfn4y2";
+  };
+
+  patches = [ ./darwin-3.1.3.patch ];
+
+  postPatch = lib.optionalString stdenv.targetPlatform.isDarwin ''
+    substituteInPlace src/luarocks/core/cfg.lua --subst-var-by 'darwinMinVersion' '${stdenv.targetPlatform.darwinMinVersion}'
+  '';
+
+  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
+  '';
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  buildInputs = [ lua curl 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
+
+    installShellCompletion --cmd luarocks --bash <($out/bin/luarocks completion bash)
+    installShellCompletion --cmd luarocks --zsh <($out/bin/luarocks completion zsh)
+  '';
+
+  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 lib; {
+    description = "A package manager for Lua";
+    license = licenses.mit ;
+    maintainers = with maintainers; [raskin teto];
+    platforms = platforms.linux ++ platforms.darwin;
+    downloadPage = "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..05770464de7d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/luarocks/luarocks-nix.nix
@@ -0,0 +1,14 @@
+{ luarocks, fetchFromGitHub }:
+luarocks.overrideAttrs(old: {
+  pname = "luarocks-nix";
+  version = "2021-01-22";
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "luarocks-nix";
+    rev = "standalone";
+    sha256 = "sha256-53Zi+GTayO9EQTCIVrzPeRRHeIkHLqy0mHyBDzbcQQk=";
+  };
+  patches = [];
+
+  meta.mainProgram = "luarocks";
+})
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..504b79c50048
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/macdylibbundler/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, makeWrapper, fetchFromGitHub, cctools }:
+
+stdenv.mkDerivation rec {
+  pname = "macdylibbundler";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "auriamg";
+    repo = "macdylibbundler";
+    rev = version;
+    sha256 = "0j4ij48jf5izgymzxxaakf6vc50w9q0761yir6nfj1n6qlnrlidf";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/dylibbundler \
+      --prefix PATH ":" "${cctools}/bin"
+  '';
+
+  meta = with 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/mdctags/default.nix b/nixpkgs/pkgs/development/tools/misc/mdctags/default.nix
new file mode 100644
index 000000000000..7d8992b4e201
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mdctags/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage {
+  pname = "mdctags";
+  version = "unstable-2020-06-11"; # v0.1.0 does not build with our rust version
+
+  src = fetchFromGitHub {
+    owner = "wsdjeg";
+    repo = "mdctags.rs";
+    rev = "0ed9736ea0c77e6ff5b560dda46f5ed0a983ed82";
+    sha256 = "14gryhgh9czlkfk75ml0620c6v8r74i6h3ykkkmc7gx2z8h1jxrb";
+  };
+
+  cargoSha256 = "1kdbrcpvxiq91m5vq33vzjhsp4j3flzrpbj5hmxf0k3al1a7qk1g";
+
+  meta = {
+    description = "tags for markdown file";
+    homepage = "https://github.com/wsdjeg/mdctags.rs";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ pacien ];
+  };
+}
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..0e5b7b016722
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mdl/Gemfile.lock
@@ -0,0 +1,30 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    chef-utils (16.7.61)
+    kramdown (2.3.0)
+      rexml
+    kramdown-parser-gfm (1.1.0)
+      kramdown (~> 2.0)
+    mdl (0.11.0)
+      kramdown (~> 2.3)
+      kramdown-parser-gfm (~> 1.1)
+      mixlib-cli (~> 2.1, >= 2.1.1)
+      mixlib-config (>= 2.2.1, < 4)
+      mixlib-shellout
+    mixlib-cli (2.1.8)
+    mixlib-config (3.0.9)
+      tomlrb
+    mixlib-shellout (3.2.2)
+      chef-utils
+    rexml (3.2.4)
+    tomlrb (2.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  mdl
+
+BUNDLED WITH
+   2.1.4
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..ada686f2498a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mdl/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "mdl";
+  gemdir = ./.;
+  exes = [ "mdl" ];
+
+  passthru.updateScript = bundlerUpdateScript "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 nicknovitski ];
+    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..eaaa7bed5a5e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mdl/gemset.nix
@@ -0,0 +1,97 @@
+{
+  chef-utils = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14xd2md3cda42afl28hr5q4ng195zmqfn04w2bxr4s2fb0gglbrz";
+      type = "gem";
+    };
+    version = "16.7.61";
+  };
+  kramdown = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vmw752c26ny2jwl0npn0gbyqwgz4hdmlpxnsld9qi9xhk5b1qh7";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  kramdown-parser-gfm = {
+    dependencies = ["kramdown"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  mdl = {
+    dependencies = ["kramdown" "kramdown-parser-gfm" "mixlib-cli" "mixlib-config" "mixlib-shellout"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vgzq6v2scd8n4cmx8rrypqmchnhg4wccrhiakg2i8fzv7wxplqq";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  mixlib-cli = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ydxlfgd7nnj3rp1y70k4yk96xz5cywldjii2zbnw3sq9pippwp6";
+      type = "gem";
+    };
+    version = "2.1.8";
+  };
+  mixlib-config = {
+    dependencies = ["tomlrb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1askip583sfnz25gywd508l3vj5wnvx9vp7gm1sfnixm7amssrwq";
+      type = "gem";
+    };
+    version = "3.0.9";
+  };
+  mixlib-shellout = {
+    dependencies = ["chef-utils"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y1z0phkdhpbsn8vz7a86nhkr7ra619j86z5p75amz61kfpw42z9";
+      type = "gem";
+    };
+    version = "3.2.2";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mkvkcw9fhpaizrhca0pdgjcrbns48rlz4g6lavl5gjjq3rk2sq3";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  tomlrb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ssyvjcvaisv70f21arlmnw5a1ryzmxzz4538vdwfslz9xxl27sr";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/micronucleus/default.nix b/nixpkgs/pkgs/development/tools/misc/micronucleus/default.nix
new file mode 100644
index 000000000000..d3bca0b684c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/micronucleus/default.nix
@@ -0,0 +1,35 @@
+{ stdenv
+, libusb-compat-0_1
+, fetchFromGitHub
+, lib
+}:
+stdenv.mkDerivation rec {
+  pname = "micronucleus";
+  version = "2.04";
+
+  sourceRoot = "source/commandline";
+
+  src = fetchFromGitHub {
+    owner = "micronucleus";
+    repo = "micronucleus";
+    rev = version;
+    sha256 = "14msy9amlbflw5mqrbs57b7bby3nsgx43srr7215zyhfdgsla0in";
+  };
+
+  buildInputs = [ libusb-compat-0_1 ];
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/lib/udev
+    cp micronucleus $out/bin
+    cp 49-micronucleus.rules $out/lib/udev
+  '';
+
+  meta = with lib; {
+    description = "Upload tool for micronucleus";
+    homepage = "https://github.com/micronucleus/micronucleus";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.cab404 ];
+  };
+}
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..bfd551570090
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/mkcert/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mkcert";
+  version = "1.4.3";
+
+  src = fetchFromGitHub {
+    owner = "FiloSottile";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0q0069ripnpb027krc4yk47552xl5rp0ymxf1j2mln9wdmfq65ba";
+  };
+
+  vendorSha256 = "133vlx825g4zay88ppylsz93q4gnd9ari12x1h57qvk45rwxqx95";
+
+  doCheck = false;
+
+  ldflags = [
+    "-s" "-w" "-X main.Version=v${version}"
+  ];
+
+  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/msitools/default.nix b/nixpkgs/pkgs/development/tools/misc/msitools/default.nix
new file mode 100644
index 000000000000..84a9a1135b51
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/msitools/default.nix
@@ -0,0 +1,88 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, meson
+, ninja
+, vala
+, gobject-introspection
+, perl
+, bison
+, gettext
+, glib
+, pkg-config
+, libgsf
+, gcab
+, bzip2
+, gnome
+}:
+
+stdenv.mkDerivation rec {
+  pname = "msitools";
+  version = "0.101";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "DMTS4NEI+m8rQIW5qX3VvG2fyt7N2TPyCU+Guv2+hf4=";
+  };
+
+  patches = [
+    # Fix executable bit on tools (regression in Meson migration).
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/msitools/commit/25c4353cf173cddeb76c0a2dd6621bcb753cabf8.patch";
+      sha256 = "VknfZCCn4jxwn9l9noXdGczv2kV+IbOsw9cNBE67P1U=";
+    })
+
+    # Fix failure on big-endian platforms.
+    # https://gitlab.gnome.org/GNOME/msitools/issues/31
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/skitt/msitools/commit/3668c8288085d5beefae7c1387330ce9599b8365.patch";
+      sha256 = "x3Mp+9TRqBAJIdzVn68HyYt0lujyMk5h5xSBUQHe9Oo=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    vala
+    gobject-introspection
+    perl
+    bison
+    gettext
+    pkg-config
+  ];
+
+  buildInputs = [
+    glib
+    libgsf
+    gcab
+    bzip2
+  ];
+
+  # WiX tests fail on darwin
+  doCheck = !stdenv.isDarwin;
+
+  postPatch = ''
+    patchShebangs subprojects/bats-core/{bin,libexec}
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      versionPolicy = "none";
+    };
+  };
+
+  meta = with lib; {
+    description = "Set of programs to inspect and build Windows Installer (.MSI) files";
+    homepage = "https://wiki.gnome.org/msitools";
+    license = with licenses; [
+      # Library
+      lgpl21Plus
+      # Tools
+      gpl2Plus
+    ];
+    maintainers = with maintainers; [ PlushBeaver ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/netcoredbg/default.nix b/nixpkgs/pkgs/development/tools/misc/netcoredbg/default.nix
new file mode 100644
index 000000000000..cb0c1cdc8ec7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/netcoredbg/default.nix
@@ -0,0 +1,71 @@
+{ lib, clangStdenv, stdenvNoCC, cmake, fetchFromGitHub, dotnetCorePackages, buildDotnetModule }:
+let
+  pname = "netcoredbg";
+  version = "1.2.0-825";
+
+  # according to CMakeLists.txt, this should be 3.1 even when building for .NET 5
+  coreclr-version = "3.1.19";
+  coreclr-src = fetchFromGitHub {
+    owner = "dotnet";
+    repo = "coreclr";
+    rev = "v${coreclr-version}";
+    sha256 = "o1KafmXqNjX9axr6sSxPKrfUX0e+b/4ANiVQt4T2ybw=";
+  };
+
+  dotnet-sdk = dotnetCorePackages.sdk_5_0;
+
+  src = fetchFromGitHub {
+    owner = "Samsung";
+    repo = pname;
+    rev = version;
+    sha256 = "JQhDI1+bVbOIFNkXixZnFB/5+dzqCbInR0zJvykcFCg=";
+  };
+
+  unmanaged = clangStdenv.mkDerivation rec {
+    inherit src pname version;
+
+    nativeBuildInputs = [ cmake dotnet-sdk ];
+
+    hardeningDisable = [ "strictoverflow" ];
+
+    preConfigure = ''
+      dotnetVersion="$(${dotnet-sdk}/bin/dotnet --list-runtimes | grep -Po '^Microsoft.NETCore.App \K.*?(?= )')"
+      cmakeFlagsArray+=(
+        "-DDBGSHIM_RUNTIME_DIR=${dotnet-sdk}/shared/Microsoft.NETCore.App/$dotnetVersion"
+      )
+    '';
+
+    cmakeFlags = [
+      "-DCORECLR_DIR=${coreclr-src}"
+      "-DDOTNET_DIR=${dotnet-sdk}"
+      "-DBUILD_MANAGED=0"
+    ];
+  };
+
+  managed = buildDotnetModule {
+    inherit pname version src dotnet-sdk;
+
+    projectFile = "src/managed/ManagedPart.csproj";
+    nugetDeps = ./deps.nix;
+
+    executables = [ ];
+  };
+in
+stdenvNoCC.mkDerivation {
+  inherit pname version;
+
+  buildCommand = ''
+    mkdir -p $out/share/netcoredbg $out/bin
+    cp ${unmanaged}/* $out/share/netcoredbg
+    cp ${managed}/lib/netcoredbg/* $out/share/netcoredbg
+    ln -s $out/share/netcoredbg/netcoredbg $out/bin/netcoredbg
+  '';
+
+  meta = with lib; {
+    description = "Managed code debugger with MI interface for CoreCLR";
+    homepage = "https://github.com/Samsung/netcoredbg";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.leo60228 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/netcoredbg/deps.nix b/nixpkgs/pkgs/development/tools/misc/netcoredbg/deps.nix
new file mode 100644
index 000000000000..8285009fc20f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/netcoredbg/deps.nix
@@ -0,0 +1,84 @@
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "1.1.0"; sha256 = "08r667hj2259wbim1p3al5qxkshydykmb7nd9ygbjlg4mmydkapc"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "2.3.0"; sha256 = "1p29v4499qpyh7k7fv1li2y3c688zg95ic8gq9if1nqmjciz5w7p"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "2.3.0"; sha256 = "1g893rqc8hmd59hdigq0fwm3w261i7cm1h2wciqp7406f0gz67x5"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Scripting"; version = "2.3.0"; sha256 = "121dhnfjd5jzm410dk79s8xk5jvd09xa0w5q3lbpqc7bs4wxmq4p"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Scripting.Common"; version = "2.3.0"; sha256 = "11f11kvgrdgs86ykz4104jx1iw78v6af48hpdrhmr7y7h5334ziq"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.4.0"; sha256 = "1niyzqqfyhvh4zpxn8bcyyldynqlw0rfr1apwry4b3yrdnjh1hhh"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.3"; sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.3.1"; sha256 = "17615br2x5riyx8ivf1dcqwj6q3ipq1bi5hqhw54yfyxmx38ddva"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.FileVersionInfo"; version = "4.3.0"; sha256 = "094hx249lb3vb336q7dg3v257hbxvz2jnalj695l7cg5kxzqwai7"; })
+  (fetchNuGet { pname = "System.Diagnostics.StackTrace"; version = "4.3.0"; sha256 = "0ash4h9k0m7xsm0yl79r0ixrdz369h7y922wipp5gladmlbvpyjd"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.4.2"; sha256 = "08b7b43vczlliv8k7q43jinjfrxwpljsglw7sxmc6sd7d54pd1vi"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.3.0"; sha256 = "0lgxg1gn7pg7j0f942pfdc9q7wamzxsgq3ng248ikdasxz0iadkv"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Parallel"; version = "4.3.0"; sha256 = "1rr3qa4hxwyj531s4nb3bwrxnxxwz617i0n9gh6x7nr7dd3ayzgh"; })
+  (fetchNuGet { pname = "System.Threading.Thread"; version = "4.3.0"; sha256 = "0y2xiwdfcph7znm2ysxanrhbqqss6a3shi1z3c779pj2s523mjx4"; })
+  (fetchNuGet { pname = "System.ValueTuple"; version = "4.3.0"; sha256 = "1227k7fxbxapq7dms4lvwwjdf3pr1jcsmhy2nzzhj6g6hs530hxn"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
+  (fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.3.0"; sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi"; })
+  (fetchNuGet { pname = "System.Xml.XPath"; version = "4.3.0"; sha256 = "1cv2m0p70774a0sd1zxc8fm8jk3i5zk2bla3riqvi8gsm0r4kpci"; })
+  (fetchNuGet { pname = "System.Xml.XPath.XDocument"; version = "4.3.0"; sha256 = "1wxckyb7n1pi433xzz0qcwcbl1swpra64065mbwwi8dhdc4kiabn"; })
+]
diff --git a/nixpkgs/pkgs/development/tools/misc/nimlsp/default.nix b/nixpkgs/pkgs/development/tools/misc/nimlsp/default.nix
new file mode 100644
index 000000000000..41eb9567150c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/nimlsp/default.nix
@@ -0,0 +1,32 @@
+{ lib, nimPackages, fetchFromGitHub, srcOnly, nim }:
+
+nimPackages.buildNimPackage rec {
+  pname = "nimlsp";
+  version = "0.4.0";
+  nimBinOnly = true;
+
+  src = fetchFromGitHub {
+    owner = "PMunch";
+    repo = "nimlsp";
+    rev = "v${version}";
+    sha256 = "sha256-eih8JmofLFXkidanRocjtA6wv84HkA1bi0M4dxkiDr4=";
+  };
+
+  buildInputs = with nimPackages; [ jsonschema ];
+
+  nimFlags = [
+    "--threads:on"
+    "-d:explicitSourcePath=${srcOnly nimPackages.nim.passthru.nim}"
+    "-d:tempDir=/tmp"
+  ];
+
+  nimDefines = [ "nimcore" "nimsuggest" "debugCommunication" "debugLogging" ];
+
+  meta = with lib; {
+    description = "Language Server Protocol implementation for Nim";
+    homepage = "https://github.com/PMunch/nimlsp";
+    license = licenses.mit;
+    platforms = nim.meta.platforms;
+    maintainers = [ maintainers.marsam ];
+  };
+}
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..8e8fb6bb5972
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ninka/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, perl, perlPackages }:
+
+assert stdenv ? glibc;
+
+perlPackages.buildPerlPackage {
+  pname = "ninka";
+  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 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/nix-build-uncached/default.nix b/nixpkgs/pkgs/development/tools/misc/nix-build-uncached/default.nix
new file mode 100644
index 000000000000..bda19f75ff01
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/nix-build-uncached/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub, makeWrapper }:
+
+buildGoModule rec {
+  pname = "nix-build-uncached";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "Mic92";
+    repo = "nix-build-uncached";
+    rev = "v${version}";
+    sha256 = "sha256-9oc5zoOlwV02cY3ek+qYLgZaFQk4dPE9xgF8mAePGBI=";
+  };
+
+  vendorSha256 = null;
+
+  doCheck = false;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  meta = with lib; {
+    description = "A CI friendly wrapper around nix-build";
+    license = licenses.mit;
+    homepage = "https://github.com/Mic92/nix-build-uncached";
+    maintainers = [ maintainers.mic92 ];
+    platforms = platforms.unix;
+  };
+}
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..bcddf4479eb0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/nixbang/default.nix
@@ -0,0 +1,21 @@
+{ lib, pythonPackages, fetchFromGitHub }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "nixbang";
+  version = "0.1.2";
+  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..848afb5b2ca8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/nrfutil/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkgs
+, python3
+, python3Packages
+}:
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+
+      libusb1 = super.libusb1.overridePythonAttrs (oldAttrs: rec {
+        version = "1.9.3";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "0j8p7jb7sibiiib18vyv3w5rrk0f4d2dl99bs18nwkq6pqvwxrk0";
+        };
+
+        postPatch = ''
+          substituteInPlace usb1/libusb1.py --replace \
+            "ctypes.util.find_library(base_name)" \
+            "'${pkgs.libusb1}/lib/libusb-1.0${stdenv.hostPlatform.extensions.sharedLibrary}'"
+        '';
+      });
+    };
+  };
+in
+with py.pkgs;
+
+buildPythonApplication rec {
+  pname = "nrfutil";
+  version = "6.1.3";
+
+  src = fetchFromGitHub {
+    owner = "NordicSemiconductor";
+    repo = "pc-nrfutil";
+    rev = "v${version}";
+    sha256 = "1gpxjdcjn4rjvk649vpkh563c7lx3rrfvamazb1qjii1pxrvvqa7";
+  };
+
+  propagatedBuildInputs = [
+    click
+    crcmod
+    ecdsa
+    libusb1
+    intelhex
+    pc-ble-driver-py
+    piccata
+    protobuf
+    pyserial
+    pyspinel
+    pyyaml
+    tqdm
+  ];
+
+  checkInputs = [
+    behave
+    nose
+  ];
+
+  postPatch = ''
+    mkdir test-reports
+  '';
+
+  meta = with 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/nxpmicro-mfgtools/default.nix b/nixpkgs/pkgs/development/tools/misc/nxpmicro-mfgtools/default.nix
new file mode 100644
index 000000000000..63f42ffe07cc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/nxpmicro-mfgtools/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, bzip2
+, installShellFiles
+, libusb1
+, libzip
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nxpmicro-mfgtools";
+  version = "1.4.165";
+
+  src = fetchFromGitHub {
+    owner = "NXPmicro";
+    repo = "mfgtools";
+    rev = "uuu_${version}";
+    sha256 = "0k309lp27d4k6x4qq0badbk8i47xsc6f3fffz73650iyfs4hcniw";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config installShellFiles ];
+
+  buildInputs = [ bzip2 libusb1 libzip openssl ];
+
+  preConfigure = "echo ${version} > .tarball-version";
+
+  postInstall = ''
+    # rules printed by the following invocation are static,
+    # they come from hardcoded configs in libuuu/config.cpp:48
+    $out/bin/uuu -udev > udev-rules 2>stderr.txt
+    rules_file="$(cat stderr.txt|grep '1: put above udev run into'|sed 's|^.*/||')"
+    install -D udev-rules "$out/lib/udev/rules.d/$rules_file"
+    installShellCompletion --cmd uuu \
+      --bash ../snap/local/bash-completion/universal-update-utility
+  '';
+
+  meta = with lib; {
+    description = "Freescale/NXP I.MX chip image deploy tools";
+    longDescription = ''
+      UUU (Universal Update Utility) is a command line tool, evolved out of
+      MFGTools (aka MFGTools v3).
+
+      One of the main purposes is to upload images to I.MX SoC's using at least
+      their boot ROM.
+
+      With time, the need for an update utility portable to Linux and Windows
+      increased. UUU has the same usage on both Windows and Linux. It means the same
+      script works on both OS.
+    '';
+    homepage = "https://github.com/NXPmicro/mfgtools";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ bmilanov jraygauthier ];
+    platforms = platforms.all;
+  };
+}
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..55147e9a16db
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/objconv/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "objconv";
+  version = "2.52";
+
+  src = fetchurl {
+    # Versioned archive of objconv sources maintained by orivej.
+    url = "https://archive.org/download/objconv/${pname}-${version}.zip";
+    sha256 = "0r117r7yvqvvdgwgwxpkyzi6p5nm0xb6p67wvkmvggm9fdyl3z8v";
+  };
+
+  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 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..db20c8b0ffdc
--- /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.1.0)
+      bindata (~> 2)
+    one_gadget (1.7.2)
+      elftools (>= 1.0.2, < 1.2.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  one_gadget
+
+BUNDLED WITH
+   2.1.4
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..c3d0a6b57b45
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/one_gadget/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "one_gadget";
+  gemdir = ./.;
+  exes = [ "one_gadget" ];
+
+  passthru.updateScript = bundlerUpdateScript "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 = with maintainers; [ artemist nicknovitski ];
+    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..89425f805b43
--- /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 = "0kdf0ck4rzxpd006y09rfwppdrqb3sxww4gzfpv2053yq4mkimbn";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  one_gadget = {
+    dependencies = ["elftools"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07s2nigjw1yik895gliz3a7ps0m9j5nccq82zwdd30sv740jmf5b";
+      type = "gem";
+    };
+    version = "1.7.2";
+  };
+}
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..0a2bbc30fb52
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/opengrok/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, jre, ctags, makeWrapper, coreutils, git, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "opengrok";
+  version = "1.0";
+
+  # binary distribution
+  src = fetchurl {
+    url = "https://github.com/oracle/opengrok/releases/download/${version}/${pname}-${version}.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 : "${lib.makeBinPath [ ctags git ]}" \
+      --set JAVA_HOME "${jre}" \
+      --set OPENGROK_TOMCAT_BASE "/var/tomcat"
+  '';
+
+  meta = with lib; {
+    description = "Source code search and cross reference engine";
+    homepage = "https://opengrok.github.io/OpenGrok/";
+    license = licenses.cddl;
+    maintainers = [ ];
+  };
+}
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..1ca9c2c5112f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pahole/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchgit, pkg-config, libbpf, cmake, elfutils, zlib, argp-standalone, musl-obstack }:
+
+stdenv.mkDerivation rec {
+  pname = "pahole";
+  version = "1.23";
+  src = fetchgit {
+    url = "https://git.kernel.org/pub/scm/devel/pahole/pahole.git";
+    rev = "v${version}";
+    sha256 = "sha256-Dt3ZcUfjwdtTTv6qRFRgwK5GFWXdpN7fvb9KhpS1O94=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ elfutils zlib libbpf ]
+    ++ lib.optional stdenv.hostPlatform.isMusl [
+    argp-standalone
+    musl-obstack
+  ];
+
+  # Put libraries in "lib" subdirectory, not top level of $out
+  cmakeFlags = [ "-D__LIB=lib" "-DLIBBPF_EMBEDDED=OFF" ];
+
+  meta = with lib; {
+    homepage = "https://git.kernel.org/cgit/devel/pahole/pahole.git/";
+    description = "Pahole and other DWARF utils";
+    license = licenses.gpl2Only;
+
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bosu martinetd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/patchelf/0.9.nix b/nixpkgs/pkgs/development/tools/misc/patchelf/0.9.nix
new file mode 100644
index 000000000000..142e6b0d7603
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/patchelf/0.9.nix
@@ -0,0 +1,17 @@
+{ stdenv, fetchurl, patchelf }:
+
+stdenv.mkDerivation rec {
+  pname = "patchelf";
+  version = "0.9";
+
+  src = fetchurl {
+    url = "https://nixos.org/releases/patchelf/patchelf-${version}/patchelf-${version}.tar.bz2";
+    sha256 = "a0f65c1ba148890e9f2f7823f4bedf7ecad5417772f64f994004f59a39014f83";
+  };
+
+  setupHook = [ ./setup-hook.sh ];
+
+  doCheck = false; # fails 8 out of 24 tests, problems when loading libc.so.6
+
+  inherit (patchelf) meta;
+}
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..dcb4d2362c8e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/patchelf/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "patchelf";
+  version = "0.14.3";
+
+  src = fetchurl {
+    url = "https://github.com/NixOS/${pname}/releases/download/${version}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-oBfsPSFSoZ/ZacDYez+LQ+MqZuT/q9yHZ6VgYrmuwnA=";
+  };
+
+  setupHook = [ ./setup-hook.sh ];
+
+  # fails 8 out of 24 tests, problems when loading libc.so.6
+  doCheck = stdenv.name == "stdenv-linux";
+
+  meta = with lib; {
+    homepage = "https://github.com/NixOS/patchelf";
+    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..576b9ca2103e
--- /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..e62805867504
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/patchelf/unstable.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, autoreconfHook, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "patchelf";
+  version = "2021-11-16";
+
+  src = fetchFromGitHub {
+    owner = "NixOS";
+    repo = "patchelf";
+    rev = "a174cf3006baf31e0e9eaa62bc9adead93af63f7";
+    sha256 = "sha256-cKZ4DE70R5XiIqfnIVAl2s7a1bJxaaPpuCmxs3pxFRU=";
+  };
+
+  # Drop test that fails on musl (?)
+  postPatch = lib.optionalString stdenv.hostPlatform.isMusl ''
+    substituteInPlace tests/Makefile.am \
+      --replace "set-rpath-library.sh" ""
+  '';
+
+  setupHook = [ ./setup-hook.sh ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ ];
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    homepage = "https://github.com/NixOS/patchelf";
+    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/perfect-hash/default.nix b/nixpkgs/pkgs/development/tools/misc/perfect-hash/default.nix
new file mode 100644
index 000000000000..71747f0d1172
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/perfect-hash/default.nix
@@ -0,0 +1,35 @@
+{ lib, python3, fetchFromGitHub }:
+python3.pkgs.buildPythonApplication rec {
+  pname = "perfect-hash";
+  version = "0.4.1";
+
+  # Archive on pypi does not contain examples, which are very helpful to
+  # understand how to use this program, so we use git source.
+  src = fetchFromGitHub {
+    owner = "ilanschnell";
+    repo = "perfect-hash";
+    rev = version;
+    sha256 = "0gkc3n613hl0q4jknrh2nm1n96j97p36q9jjgarb9d8yii9q7792";
+  };
+
+  postInstall = ''
+    mkdir -p $out/share/doc/perfect-hash
+    cp README.md $out/share/doc/perfect-hash
+    cp -r examples $out/share/doc/perfect-hash
+  '';
+
+  meta = with lib; {
+    description = "Minimal perfect hash function generator";
+    longDescription = ''
+      Generate a minimal perfect hash function for a given set of keys.
+      A given code template is filled with parameters, such that the
+      output is code which implements the hash function. Templates can
+      easily be constructed for any programming language.
+    '';
+    license = licenses.bsd3;
+    maintainers = [ maintainers.kaction ];
+
+    homepage = "https://github.com/ilanschnell/perfect-hash";
+    platforms = platforms.unix;
+  };
+}
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..b0b3115700fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pkg-config/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchurl, libiconv, vanilla ? false }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "pkg-config";
+  version = "0.29.2";
+
+  src = fetchurl {
+    url = "https://pkg-config.freedesktop.org/releases/${pname}-${version}.tar.gz";
+    sha256 = "14fmwzki1rlz8bs2p810lk6jqdxsk966d8drgsjmi54cd00rrikg";
+  };
+
+  outputs = [ "out" "man" "doc" ];
+
+  # Process Requires.private properly, see
+  # http://bugs.freedesktop.org/show_bug.cgi?id=4738, migrated to
+  # https://gitlab.freedesktop.org/pkg-config/pkg-config/issues/28
+  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 = if vanilla then null else ''
+    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/pkgconf/default.nix b/nixpkgs/pkgs/development/tools/misc/pkgconf/default.nix
new file mode 100644
index 000000000000..e3e0de4e7f16
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pkgconf/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, removeReferencesTo }:
+
+stdenv.mkDerivation rec {
+  pname = "pkgconf";
+  version = "1.8.0";
+
+  nativeBuildInputs = [ removeReferencesTo ];
+
+  outputs = [ "out" "lib" "dev" "man" "doc" ];
+
+  enableParallelBuilding = true;
+
+  src = fetchurl {
+    url = "https://distfiles.dereferenced.org/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-75x+YYIrfLg1bm6eHcpY2VVvMgDXisqzXkNH6dTCu68=";
+  };
+
+  # Debian has outputs like these too:
+  # https://packages.debian.org/source/buster/pkgconf, so take it this
+  # reference removing is safe.
+  postFixup = ''
+    remove-references-to \
+      -t "${placeholder "dev"}" \
+      "${placeholder "lib"}"/lib/* \
+      "${placeholder "out"}"/bin/*
+    remove-references-to \
+      -t "${placeholder "out"}" \
+      "${placeholder "lib"}"/lib/*
+  ''
+  # Move back share/aclocal. Yes, this normally goes in the dev output for good
+  # reason, but in this case the dev output is for the `libpkgconf` library,
+  # while the aclocal stuff is for the tool. The tool is already for use during
+  # development, so there is no reason to have separate "dev-bin" and "dev-lib"
+  # outputs or someting.
+  + ''
+    mv ${placeholder "dev"}/share ${placeholder "out"}
+  '';
+
+  meta = with 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..1fd58fd14a2f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pmccabe/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "pmccabe";
+  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 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/polylith/default.nix b/nixpkgs/pkgs/development/tools/misc/polylith/default.nix
new file mode 100644
index 000000000000..a8330895e7c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/polylith/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, jdk, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "polylith";
+  version = "0.2.13-alpha";
+
+  src = fetchurl {
+    url = "https://github.com/polyfy/polylith/releases/download/v${version}/poly-${version}.jar";
+    sha256 = "sha256-iLN92qurc8+D0pt7Hwag+TFGoeFl9DvEeS67sKmmoSI=";
+  };
+
+  dontUnpack = true;
+
+  passAsFile = [ "polyWrapper" ];
+  polyWrapper = ''
+    #!${runtimeShell}
+    ARGS=""
+    while [ "$1" != "" ] ; do
+      ARGS="$ARGS $1"
+      shift
+    done
+    exec "${jdk}/bin/java" "-jar" "${src}" $ARGS
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp "$polyWrapperPath" $out/bin/poly
+    chmod a+x $out/bin/poly
+
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/poly help | fgrep -q '${version}'
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "A tool used to develop Polylith based architectures in Clojure";
+    homepage = "https://github.com/polyfy/polylith";
+    license = licenses.epl10;
+    maintainers = with maintainers; [ ericdallo jlesquembre ];
+    platforms = jdk.meta.platforms;
+  };
+}
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..2fbee4ca5f52
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/prelink/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, libelf }:
+
+stdenv.mkDerivation rec {
+  pname = "prelink";
+  version = "20130503";
+
+  buildInputs = [
+    libelf stdenv.cc.libc (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 = 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..c05581f5591a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/premake/3.nix
@@ -0,0 +1,27 @@
+{lib, stdenv, fetchurl, unzip}:
+
+stdenv.mkDerivation rec {
+  pname = "premake";
+  version  = "3.7";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sourceforge/premake/premake-src-${version}.zip";
+    sha256 = "b59841a519e75d5b6566848a2c5be2f91455bf0cc6ae4d688fcbd4c40db934d5";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    install -Dm755 bin/premake $out/bin/premake
+  '';
+
+  premake_cmd = "premake";
+  setupHook = ./setup-hook.sh;
+
+  meta = {
+    homepage = "https://premake.github.io/";
+    description = "A simple build configuration and project generation tool using lua";
+    license = lib.licenses.bsd3;
+    platforms = 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..bb0269d0cc3b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/premake/5.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, Foundation, readline }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "premake5";
+  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 = 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..35c651f4a18c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/premake/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "premake";
+  version  = "4.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/premake/premake-${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 lib; {
+    homepage = "https://premake.github.io/";
+    description = "A simple build configuration and project generation tool using lua";
+    license = 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..6e65e9e8c73f
--- /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/ptags/default.nix b/nixpkgs/pkgs/development/tools/misc/ptags/default.nix
new file mode 100644
index 000000000000..b8be0ee3dc6d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ptags/default.nix
@@ -0,0 +1,41 @@
+{ fetchFromGitHub
+, cargo
+, ctags
+, lib
+, makeWrapper
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ptags";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "dalance";
+    repo = "ptags";
+    rev = "v${version}";
+    sha256 = "1xr1szh4dfrcmi6s6dj791k1ix2zbv75rqkqbyb1lmh5548kywkg";
+  };
+
+  cargoSha256 = "1pz5hvn1iq26i8c2cmqavhnri8h0sn40khrxvcdkj9q47nsj5wcx";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    # `ctags` must be accessible in `PATH` for `ptags` to work.
+    wrapProgram "$out/bin/ptags" \
+      --prefix PATH : "${lib.makeBinPath [ ctags ]}"
+  '';
+
+  # Sanity check.
+  checkPhase = ''
+    $releaseDir/ptags --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "A parallel universal-ctags wrapper for git repository";
+    homepage = "https://github.com/dalance/ptags";
+    maintainers = with maintainers; [ pamplemousse ];
+    license = licenses.mit;
+  };
+}
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..add0c7a5809c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/pwndbg/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, python3
+, fetchFromGitHub
+, makeWrapper
+, gdb
+}:
+
+let
+  pythonPath = with python3.pkgs; makePythonPath [
+    future
+    isort
+    psutil
+    pycparser
+    pyelftools
+    python-ptrace
+    ropgadget
+    six
+    unicorn
+    pygments
+  ];
+
+in stdenv.mkDerivation rec {
+  pname = "pwndbg";
+  version = "2022.01.05";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "pwndbg";
+    repo = "pwndbg";
+    rev = version;
+    sha256 = "sha256-24WWA3wLUxylC8LkukwTOcqbpxpAg8DfrEkI3Ikyzlk=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/share/pwndbg
+    cp -r *.py pwndbg $out/share/pwndbg
+    chmod +x $out/share/pwndbg/gdbinit.py
+    makeWrapper ${gdb}/bin/gdb $out/bin/pwndbg \
+      --add-flags "-q -x $out/share/pwndbg/gdbinit.py" \
+      --set NIX_PYTHONPATH ${pythonPath}
+  '';
+
+  meta = with lib; {
+    description = "Exploit Development and Reverse Engineering with GDB Made Easy";
+    homepage = "https://github.com/pwndbg/pwndbg";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/qtspim/default.nix b/nixpkgs/pkgs/development/tools/misc/qtspim/default.nix
new file mode 100644
index 000000000000..7329ad509671
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/qtspim/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchsvn, wrapQtAppsHook, qtbase, qttools, qmake, bison, flex, ... }:
+stdenv.mkDerivation rec {
+  pname = "qtspim";
+  version = "9.1.23";
+
+  src = fetchsvn {
+    url = "https://svn.code.sf.net/p/spimsimulator/code/";
+    rev = "r749";
+    sha256 = "0iazl7mlcilrdbw8gb98v868a8ldw2lmkn1xs8hnfvr93l6aj0rp";
+  };
+
+  postPatch = ''
+    cd QtSpim
+
+    substituteInPlace QtSpim.pro --replace /usr/lib/qtspim/lib $out/lib
+    substituteInPlace menu.cpp \
+      --replace /usr/lib/qtspim/bin/assistant ${qttools.dev}/bin/assistant \
+      --replace /usr/lib/qtspim/help/qtspim.qhc $out/share/help/qtspim.qhc
+    substituteInPlace ../Setup/qtspim_debian_deployment/qtspim.desktop \
+      --replace /usr/bin/qtspim qtspim \
+      --replace /usr/lib/qtspim/qtspim.png qtspim
+  '';
+
+  nativeBuildInputs = [ wrapQtAppsHook qttools qmake bison flex ];
+  buildInputs = [ qtbase ];
+  QT_PLUGIN_PATH = "${qtbase}/${qtbase.qtPluginPrefix}";
+
+  qmakeFlags = [
+    "QtSpim.pro"
+    "-spec"
+    "linux-g++"
+    "CONFIG+=release"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D QtSpim $out/bin/qtspim
+    install -D ../Setup/qtspim_debian_deployment/copyright $out/share/licenses/qtspim/copyright
+    install -D ../Setup/qtspim_debian_deployment/qtspim.desktop $out/share/applications/qtspim.desktop
+    install -D ../Setup/NewIcon48x48.png $out/share/icons/hicolor/48x48/apps/qtspim.png
+    install -D ../Setup/NewIcon256x256.png $out/share/icons/hicolor/256x256/apps/qtspim.png
+    cp -r help $out/share/help
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "New user interface for spim, a MIPS simulator";
+    homepage = "http://spimsimulator.sourceforge.net/";
+    license = licenses.bsdOriginal;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/remarkable/remarkable-toolchain/default.nix b/nixpkgs/pkgs/development/tools/misc/remarkable/remarkable-toolchain/default.nix
new file mode 100644
index 000000000000..e5ed098af8e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/remarkable/remarkable-toolchain/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, libarchive, python3, file, which }:
+
+stdenv.mkDerivation rec {
+  pname = "remarkable-toolchain";
+  version = "3.1.2";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/remarkable-codex-toolchain/codex-x86_64-cortexa9hf-neon-rm10x-toolchain-${version}.sh";
+    sha256 = "sha256-ocODUUx2pgmqxMk8J+D+OvqlSHBSay6YzcqnxC9n59w=";
+    executable = true;
+  };
+
+  nativeBuildInputs = [
+    libarchive
+    python3
+    file
+    which
+  ];
+
+  dontUnpack = true;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out
+    ENVCLEANED=1 $src -y -d $out
+  '';
+
+  meta = with lib; {
+    description = "A toolchain for cross-compiling to reMarkable tablets";
+    homepage = "https://remarkable.engineering/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ nickhu siraben ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/remarkable/remarkable2-toolchain/default.nix b/nixpkgs/pkgs/development/tools/misc/remarkable/remarkable2-toolchain/default.nix
new file mode 100644
index 000000000000..fe54390c7858
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/remarkable/remarkable2-toolchain/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, libarchive, python3, file, which }:
+
+stdenv.mkDerivation rec {
+  pname = "remarkable2-toolchain";
+  version = "3.1.2";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/remarkable-codex-toolchain/codex-x86_64-cortexa7hf-neon-rm11x-toolchain-${version}.sh";
+    sha256 = "sha256-JKMDRbkvoxwHiTm/o4JdLn3Mm2Ld1LyxTnCCwvnxk4c=";
+    executable = true;
+  };
+
+  nativeBuildInputs = [
+    libarchive
+    python3
+    file
+    which
+  ];
+
+  dontUnpack = true;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out
+    ENVCLEANED=1 $src -y -d $out
+  '';
+
+  meta = with lib; {
+    description = "A toolchain for cross-compiling to reMarkable 2 tablets";
+    homepage = "https://remarkable.engineering/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ tadfisher ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/replacement/default.nix b/nixpkgs/pkgs/development/tools/misc/replacement/default.nix
new file mode 100644
index 000000000000..cbdd8e37c5cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/replacement/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "replacement";
+  version = "0.4.4";
+
+  disabled = python3Packages.isPy27;
+
+  src = fetchFromGitHub {
+    owner = "siriobalmelli";
+    repo = "replacement";
+    rev = "v${version}";
+    sha256 = "0j4lvn3rx1kqvxcsd8nhc2lgk48jyyl7qffhlkvakhy60f9lymj3";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    ruamel-yaml
+  ];
+
+  checkInputs = with python3Packages; [
+    pytestCheckHook
+    sh
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/siriobalmelli/replacement";
+    description = "A tool to execute yaml templates and output text";
+    longDescription = ''
+        Replacement is a python utility
+        that parses a yaml template and outputs text.
+
+        A 'template' is a YAML file containing a 'replacement' object.
+
+        A 'replacement' object contains a list of blocks,
+        each of which is executed in sequence.
+
+        This tool is useful in generating configuration files,
+        static websites and the like.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ siriobalmelli ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/reviewdog/default.nix b/nixpkgs/pkgs/development/tools/misc/reviewdog/default.nix
new file mode 100644
index 000000000000..24038d1c8d4e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/reviewdog/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "reviewdog";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-mMpbV02yoso+Nvq1wkenvlbmTsOcTlpfKIhvyttrIf8=";
+  };
+
+  vendorSha256 = "sha256-UQbZjN7GaGXvBmMPAeQqaWriV+t3XSUd6hUOuZCiR24=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/reviewdog" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/reviewdog/reviewdog/commands.Version=${version}" ];
+
+  meta = with lib; {
+    description = "Automated code review tool integrated with any code analysis tools regardless of programming language";
+    homepage = "https://github.com/reviewdog/reviewdog";
+    changelog = "https://github.com/reviewdog/reviewdog/raw/v${version}/CHANGELOG.md";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.mit;
+  };
+}
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..99f3d8c13e74
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/rman/default.nix
@@ -0,0 +1,34 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "rman";
+  version = "3.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/polyglotman/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0prdld6nbkdlkcgc2r1zp13h2fh8r0mlwxx423dnc695ddlk18b8";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace ginstall install \
+      --replace gcc '${stdenv.cc.targetPrefix}cc'
+  '';
+
+  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 = lib.platforms.all;
+  };
+}
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..7b084fae891e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/rolespec/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "rolespec";
+  version = "20161104";
+
+  src = fetchFromGitHub {
+    owner = "nickjj";
+    repo = "rolespec";
+    rev = "d9ee530cd709168882059776c482fc37f46cb743";
+    sha256 = "1jkidw6aqr0zfqwmcvlpi9qa140z2pxcfsd43xm5ikx6jcwjdrzl";
+  };
+
+  nativeBuildInputs = [ 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 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;
+    maintainers = [ maintainers.dochang ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/rtss/default.nix b/nixpkgs/pkgs/development/tools/misc/rtss/default.nix
new file mode 100644
index 000000000000..cb5b55b8894c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/rtss/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rtss";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "Freaky";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-WeeZsB42/4SlIaWwKvOqWiPNV5p0QOToynI8ozVVxJM=";
+  };
+
+  cargoSha256 = "sha256-aHK9KBzRbU2IYr7vOdlz0Aw4iYGjD6VedbWPE/V7AVc=";
+
+  meta = with lib; {
+    description = "Annotate output with relative durations between lines";
+    homepage = "https://github.com/Freaky/rtss";
+    license = licenses.mit;
+    maintainers = with maintainers; [ djanatyn ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/saleae-logic-2/default.nix b/nixpkgs/pkgs/development/tools/misc/saleae-logic-2/default.nix
new file mode 100644
index 000000000000..242d76174ce9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/saleae-logic-2/default.nix
@@ -0,0 +1,75 @@
+{ lib, fetchurl, makeDesktopItem, appimageTools, gtk3 }:
+let
+  name = "saleae-logic-2";
+  version = "2.3.45";
+  src = fetchurl {
+    url = "https://downloads.saleae.com/logic2/Logic-${version}-master.AppImage";
+    sha256 = "sha256-kX8jMCUkz7B0muxsEwEttEX+DA2P+6swdZJGHyo7ScA=";
+  };
+  desktopItem = makeDesktopItem {
+    inherit name;
+    exec = name;
+    icon = "Logic";
+    comment = "Software for Saleae logic analyzers";
+    desktopName = "Saleae Logic";
+    genericName = "Logic analyzer";
+    categories = [ "Development" ];
+  };
+in
+appimageTools.wrapType2 {
+  inherit name src;
+
+  extraInstallCommands =
+    let
+      appimageContents = appimageTools.extractType2 { inherit name src; };
+    in
+      ''
+        mkdir -p $out/etc/udev/rules.d
+        cp ${appimageContents}/resources/linux/99-SaleaeLogic.rules $out/etc/udev/rules.d/
+        mkdir -p $out/share/pixmaps
+        ln -s ${desktopItem}/share/applications $out/share/
+        cp ${appimageContents}/usr/share/icons/hicolor/256x256/apps/Logic.png $out/share/pixmaps/Logic.png
+      '';
+
+  profile = ''
+    export XDG_DATA_DIRS="${gtk3}/share/gsettings-schemas/${gtk3.name}''${XDG_DATA_DIRS:+:"''$XDG_DATA_DIRS"}"
+  '';
+
+  extraPkgs = pkgs: with pkgs; [
+    wget
+    unzip
+    glib
+    xorg.libX11
+    xorg.libxcb
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXrender
+    xorg.libXtst
+    nss
+    nspr
+    dbus
+    gdk-pixbuf
+    gtk3
+    pango
+    atk
+    cairo
+    expat
+    xorg.libXrandr
+    xorg.libXScrnSaver
+    alsa-lib
+    at-spi2-core
+    cups
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.saleae.com/";
+    description = "Software for Saleae logic analyzers";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = [ maintainers.j-hui ];
+  };
+}
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..487445e0fc35
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/saleae-logic/default.nix
@@ -0,0 +1,97 @@
+# 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.
+
+{ lib, 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 = 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";
+
+  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 = [ "Development" ];
+  };
+
+  nativeBuildInputs = [ 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 lib; {
+    description = "Software for Saleae logic analyzers";
+    homepage = "https://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/scc/default.nix b/nixpkgs/pkgs/development/tools/misc/scc/default.nix
new file mode 100644
index 000000000000..9dfa5955f5c9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/scc/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "scc";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "boyter";
+    repo = "scc";
+    rev = "v${version}";
+    sha256 = "sha256-G5LYOtAUnu82cgDdtYzcfVx/WFg9/HvFQAlQtd6GaDE=";
+  };
+
+  vendorSha256 = null;
+
+  # scc has a scripts/ sub-package that's for testing.
+  excludedPackages = [ "scripts" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/boyter/scc";
+    description = "A very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go";
+    maintainers = with maintainers; [ sigma Br1ght0ne ];
+    license = with licenses; [ unlicense /* or */ mit ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/sccache/default.nix b/nixpkgs/pkgs/development/tools/misc/sccache/default.nix
new file mode 100644
index 000000000000..d2833ce9da62
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/sccache/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromGitHub, rustPlatform, pkg-config, openssl, Security }:
+
+rustPlatform.buildRustPackage rec {
+  version = "0.2.15";
+  pname = "sccache";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = "sccache";
+    rev = "v${version}";
+    sha256 = "1kygk7ilv7la36kv4jdn1ird7f3896wgr88kyqf0iagfqkzb2vsb";
+  };
+
+  cargoSha256 = "1f42cqaqnjwi9k4ihqil6z2dqh5dnf76x54gk7mndzkrfg3rl573";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ] ++ lib.optional stdenv.isDarwin Security;
+
+  buildFeatures = lib.optionals (!stdenv.isDarwin) [ "dist-client" "dist-server" ];
+
+  # Tests fail because of client server setup which is not possible inside the pure environment,
+  # see https://github.com/mozilla/sccache/issues/460
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Ccache with Cloud Storage";
+    homepage = "https://github.com/mozilla/sccache";
+    maintainers = with maintainers; [ doronbehar ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/segger-ozone/default.nix b/nixpkgs/pkgs/development/tools/misc/segger-ozone/default.nix
new file mode 100644
index 000000000000..5e1c6888b8e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/segger-ozone/default.nix
@@ -0,0 +1,84 @@
+{ stdenv
+, fetchurl
+, fontconfig
+, freetype
+, lib
+, libICE
+, libSM
+, udev
+, libX11
+, libXcursor
+, libXext
+, libXfixes
+, libXrandr
+, libXrender
+}:
+
+stdenv.mkDerivation rec {
+  pname = "segger-ozone";
+  version = "3.22a";
+
+  src = fetchurl {
+    url = "https://www.segger.com/downloads/jlink/Ozone_Linux_V${(lib.replaceChars ["."] [""] version)}_x86_64.tgz";
+    sha256 = "0v1r8qvp1w2f3yip9fys004pa0smlmq69p7w77lfvghs1rmg1649";
+  };
+
+  rpath = lib.makeLibraryPath [
+    fontconfig
+    freetype
+    libICE
+    libSM
+    udev
+    libX11
+    libXcursor
+    libXext
+    libXfixes
+    libXrandr
+    libXrender
+  ]
+  + ":${stdenv.cc.cc.lib}/lib64";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv Lib lib
+    mv * $out
+    ln -s $out/Ozone $out/bin
+  '';
+
+  postFixup = ''
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$out/Ozone" \
+      --set-rpath ${rpath}:$out/lib "$out/Ozone"
+
+    for file in $(find $out/lib -maxdepth 1 -type f -and -name \*.so\*); do
+      patchelf --set-rpath ${rpath}:$out/lib $file
+    done
+  '';
+
+  meta = with lib; {
+    description = "J-Link Debugger and Performance Analyzer";
+    longDescription = ''
+      Ozone is a cross-platform debugger and performance analyzer for J-Link
+      and J-Trace.
+
+        - Stand-alone graphical debugger
+        - Debug output of any tool chain and IDE 1
+        - C/C++ source level debugging and assembly instruction debugging
+        - Debug information windows for any purpose: disassembly, memory,
+          globals and locals, (live) watches, CPU and peripheral registers
+        - Source editor to fix bugs immediately
+        - High-speed programming of the application into the target
+        - Direct use of J-Link built-in features (Unlimited Flash
+          Breakpoints, Flash Download, Real Time Terminal, Instruction Trace)
+        - Scriptable project files to set up everything automatically
+          - New project wizard to ease the basic configuration of new projects
+
+      1 Ozone has been tested with the output of the following compilers:
+      GCC, Clang, ARM, IAR. Output of other compilers may be supported but is
+      not guaranteed to be.
+    '';
+    homepage = "https://www.segger.com/products/development-tools/ozone-j-link-debugger";
+    license = licenses.unfree;
+    maintainers = [ maintainers.bmilanov ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
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..407185a474b9
--- /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 = "3.3.0";
+
+  src = fetchFromGitHub {
+    owner = "fsaintjacques";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-LqZTHFiis4BYL1bnJoeuW56wf8+o38Ygs++CV9CKNhM=";
+  };
+
+  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.asl20;
+    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..0d5ceba12530
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/sipp/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, ncurses, libpcap, cmake, openssl, git, lksctp-tools }:
+
+stdenv.mkDerivation rec {
+  version = "3.6.1";
+  pname = "sipp";
+
+  src = fetchurl {
+    url = "https://github.com/SIPp/${pname}/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-alYOg6/5gvMx3byt+zvVMMWJbNW3V91utoITPMhg7LE=";
+  };
+
+  postPatch = ''
+    cp version.h src/version.h
+  '';
+
+  cmakeFlags = [
+    "-DUSE_GSL=1"
+    "-DUSE_PCAP=1"
+    "-DUSE_SSL=1"
+    "-DUSE_SCTP=${if stdenv.isLinux then "1" else "0"}"
+  ];
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ cmake git ];
+  buildInputs = [ ncurses libpcap openssl ]
+    ++ lib.optional (stdenv.isLinux) lksctp-tools;
+
+  meta = with 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..fc619612a48b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/sloccount/default.nix
@@ -0,0 +1,73 @@
+{ fetchurl, lib, stdenv, perl, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "sloccount";
+  version = "2.26";
+
+  src = fetchurl {
+    url = "https://www.dwheeler.com/${pname}/${pname}-${version}.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=${stdenv.cc.targetPrefix}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 = lib.licenses.gpl2Plus;
+
+    homepage = "https://www.dwheeler.com/sloccount/";
+
+    maintainers = [ ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/spruce/default.nix b/nixpkgs/pkgs/development/tools/misc/spruce/default.nix
new file mode 100644
index 000000000000..7c10a6ee0ca7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/spruce/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "spruce";
+  version = "unstable-2022-02-10";
+
+  src = fetchFromGitHub {
+    owner = "geofffranks";
+    repo = pname;
+    rev = "473931f33fceae90b3f5cfb7616c296343a9559b";
+    sha256 = "sha256-TFyWkoAKmj3KH2pqhVKMtP6QKTtu0s7H5gNP+fotUzg=";
+  };
+
+  deleteVendor = true;
+  vendorSha256 = "sha256-VeC5c/BgcxK3Qawb2QOhqtfTIgbQbrQj546zX6yPD+s=";
+
+  meta = with lib; {
+    description = "A BOSH template merge tool";
+    homepage = "https://github.com/geofffranks/spruce";
+    license = licenses.mit;
+    maintainers = with maintainers; [ risson ];
+  };
+}
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..5e3c3bc37c64
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/sqitch/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, lib
+, perlPackages
+, makeWrapper
+, shortenPerlShebang
+, mysqlSupport ? false
+, postgresqlSupport ? false
+}:
+
+let
+  sqitch = perlPackages.AppSqitch;
+  modules = with perlPackages; [ ]
+    ++ lib.optional mysqlSupport DBDmysql
+    ++ lib.optional postgresqlSupport DBDPg;
+in
+
+stdenv.mkDerivation {
+  pname = "sqitch";
+  version = sqitch.version;
+
+  nativeBuildInputs = [ makeWrapper ] ++ lib.optional stdenv.isDarwin shortenPerlShebang;
+
+  src = sqitch;
+  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 ${sqitch}/$d ]; then
+        ln -s ${sqitch}/$d $out/$d
+      fi
+    done
+  '' + lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang $out/bin/sqitch
+  '';
+  dontStrip = true;
+  postFixup = ''
+    wrapProgram $out/bin/sqitch --prefix PERL5LIB : ${perlPackages.makeFullPerlPath modules}
+  '';
+
+  meta = {
+    inherit (sqitch.meta) description homepage license platforms;
+  };
+}
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..d986ef052433
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/srecord/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, boost, libtool, groff, ghostscript, libgcrypt ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "srecord";
+  version = "1.64";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1qk75q0k5vzmm3932q9hqz2gp8n9rrdfjacsswxc02656f3l3929";
+  };
+
+  buildInputs = [ boost libtool groff ghostscript libgcrypt ];
+
+  configureFlags = lib.optional (libgcrypt == null) "--without-gcrypt";
+
+  meta = with lib; {
+    description = "Collection of powerful tools for manipulating EPROM load files";
+    homepage = "http://srecord.sourceforge.net/";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.bjornfor ];
+    platforms = 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..2fbb60a0ddcc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/stlink/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, libusb1
+, gtk3
+, pkg-config
+, wrapGAppsHook
+, withGUI ? false
+}:
+
+let
+  # The Darwin build of stlink explicitly refers to static libusb.
+  libusb1' = if stdenv.isDarwin then libusb1.override { withStatic = true; } else libusb1;
+
+# IMPORTANT: You need permissions to access the stlink usb devices.
+# Add services.udev.packages = [ pkgs.stlink ] to your configuration.nix
+
+in stdenv.mkDerivation rec {
+  pname = "stlink";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "stlink-org";
+    repo = "stlink";
+    rev = "v${version}";
+    sha256 = "03xypffpbp4imrczbxmq69vgkr7mbp0ps9dk815br5wwlz6vgygl";
+  };
+
+  buildInputs = [
+    libusb1'
+  ] ++ lib.optionals withGUI [
+    gtk3
+  ];
+  nativeBuildInputs = [
+    cmake
+  ] ++ lib.optionals withGUI [
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  cmakeFlags = [
+    "-DSTLINK_MODPROBED_DIR=${placeholder "out"}/etc/modprobe.d"
+    "-DSTLINK_UDEV_RULES_DIR=${placeholder "out"}/lib/udev/rules.d"
+  ];
+
+  meta = with 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/strace/default.nix b/nixpkgs/pkgs/development/tools/misc/strace/default.nix
new file mode 100644
index 000000000000..865784171786
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/strace/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, perl, libunwind, buildPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "strace";
+  version = "5.16";
+
+  src = fetchurl {
+    url = "https://strace.io/files/${version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-3H2yMP8+V8JJgwupSsqyuGLaH8qsVUF+m4UEGoM8ooU=";
+  };
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ perl ];
+
+  # On RISC-V platforms, LLVM's libunwind implementation is unsupported by strace.
+  # The build will silently fall back and -k will not work on RISC-V.
+  buildInputs = [ libunwind ]; # support -k
+
+  configureFlags = [ "--enable-mpers=check" ];
+
+  meta = with 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 ma27 qyliss ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/svls/default.nix b/nixpkgs/pkgs/development/tools/misc/svls/default.nix
new file mode 100644
index 000000000000..2e3075c7b128
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/svls/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "svls";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "dalance";
+    repo = "svls";
+    rev = "v${version}";
+    sha256 = "sha256-WZuFYiPV6HbBH9QT4h9FbnmkbFBadUaV0HujiQ0hu7I=";
+  };
+
+  cargoSha256 = "sha256-tafxN3ots1UTSv950NlwCs6TItMnKz5tn5vw7PTcARU=";
+
+  meta = with lib; {
+    description = "SystemVerilog language server";
+    homepage = "https://github.com/dalance/svls";
+    license = licenses.mit;
+    maintainers = with maintainers; [ trepetti ];
+  };
+}
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..1068b3e2ad9d
--- /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 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..109243b54ba1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/swig/3.x.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, bison, pcre }:
+
+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 lib; {
+    description = "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/4.nix b/nixpkgs/pkgs/development/tools/misc/swig/4.nix
new file mode 100644
index 000000000000..56106143027f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/swig/4.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, bison, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "swig";
+  version = "4.0.2";
+
+  src = fetchFromGitHub {
+    owner = "swig";
+    repo = "swig";
+    rev = "rel-${version}";
+    sha256 = "12vlps766xvwck8q0i280s8yx21qm2dxl34710ybpmz3c1cfdjsc";
+  };
+
+  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 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;
+    maintainers = with maintainers; [ orivej ];
+    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..3c1a5b82dc2a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/swig/default.nix
@@ -0,0 +1,26 @@
+{ lib, 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 = lib.optionals doCheck [ boost tcl ];
+
+  configureFlags = [ "--disable-ccache" ];
+
+
+  meta = with 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..2cf8c91d3bf9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/sysbench/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, libmysqlclient, libaio
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sysbench";
+  version = "1.0.20";
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libmysqlclient libaio ];
+
+  src = fetchFromGitHub {
+    owner = "akopytov";
+    repo = pname;
+    rev = version;
+    sha256 = "1sanvl2a52ff4shj62nw395zzgdgywplqvwip74ky8q7s6qjf5qy";
+  };
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Modular, cross-platform and multi-threaded benchmark tool";
+    homepage = "https://github.com/akopytov/sysbench";
+    license = lib.licenses.gpl2;
+    platforms = 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..25121bf1ad7d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tcptrack/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, ncurses, libpcap }:
+
+stdenv.mkDerivation rec {
+  pname = "tcptrack";
+  version = "unstable-2017-04-29";
+
+  src = fetchFromGitHub {
+    owner = "bchretien";
+    repo = "tcptrack";
+    rev = "2b096ac103af2884bbd7648cff8adcbadbda9394";
+    sha256 = "0084g9s0ynv1az67j08q9nz4p07bqqz9k6w5lprzj3ljlh0x10gj";
+  };
+
+  patches = [
+    # Fix pending upstream inclusion for ncurses-6.3 support:
+    #  https://github.com/bchretien/tcptrack/pull/10
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://github.com/bchretien/tcptrack/commit/409007afbce8ec5a81312a2a4123dd83b62b4494.patch";
+      sha256 = "00641jyr52ksww5bbzvxlprmbb36jnvzg2w1aj1jgnm75jiajcfc";
+    })
+  ];
+
+  buildInputs = [ ncurses libpcap ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=cpp";
+
+  meta = with 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/terracognita/default.nix b/nixpkgs/pkgs/development/tools/misc/terracognita/default.nix
new file mode 100644
index 000000000000..b3fd7a54ec0b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/terracognita/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "terracognita";
+  version = "0.7.4";
+
+  src = fetchFromGitHub {
+    owner = "cycloidio";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-QaJoHnuzSQXxEuGpui9lyKAjT2wdz4XmMAh5cAOKvBg=";
+  };
+
+  vendorSha256 = "sha256-HcUH3cnaeyB2XnfcRLulsRcHaCwdLkiIb518Ucl2tv8=";
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" "-X github.com/cycloidio/terracognita/cmd.Version=${version}" ];
+
+  meta = with lib; {
+    description = "Reads from existing Cloud Providers (reverse Terraform) and generates your infrastructure as code on Terraform configuration";
+    homepage = "https://github.com/cycloidio/terracognita";
+    changelog = "https://github.com/cycloidio/terracognita/raw/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/terraform-ls/default.nix b/nixpkgs/pkgs/development/tools/misc/terraform-ls/default.nix
new file mode 100644
index 000000000000..de928d35fa0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/terraform-ls/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub, stdenv }:
+
+buildGoModule rec {
+  pname = "terraform-ls";
+  version = "0.25.2";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-dFmXROqh1HYPthzmOE07oyZglaQyx7JqxqYDlLpysrM=";
+  };
+  vendorSha256 = "sha256-5g/s8WDzxobORFY12YdDQ6rDmr9gQzViv1FFrVwrVIE=";
+
+  ldflags = [ "-s" "-w" "-X main.version=v${version}" "-X main.prerelease=" ];
+
+  # There's a mixture of tests that use networking and several that fail on aarch64
+  doCheck = false;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/terraform-ls --help
+    $out/bin/terraform-ls version | grep "v${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "Terraform Language Server (official)";
+    homepage = "https://github.com/hashicorp/terraform-ls";
+    changelog = "https://github.com/hashicorp/terraform-ls/blob/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ mbaillie jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/terraform-lsp/default.nix b/nixpkgs/pkgs/development/tools/misc/terraform-lsp/default.nix
new file mode 100644
index 000000000000..d55367e70658
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/terraform-lsp/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "terraform-lsp";
+  version = "0.0.12";
+
+  src = fetchFromGitHub {
+    owner = "juliosueiras";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "111350jbq0dp0qhk48j12hrlisd1fwzqpcv357igrbqf6ki7r78q";
+  };
+
+  goPackagePath = "github.com/juliosueiras/terraform-lsp";
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" "-X main.GitCommit=${src.rev}" ];
+
+  meta = with lib; {
+    description = "Language Server Protocol for Terraform";
+    homepage = "https://github.com/juliosueiras/terraform-lsp";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/terraformer/default.nix b/nixpkgs/pkgs/development/tools/misc/terraformer/default.nix
new file mode 100644
index 000000000000..d4609db2d34e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/terraformer/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "terraformer";
+  version = "0.8.18";
+
+  src = fetchFromGitHub {
+    owner = "GoogleCloudPlatform";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-F+OmeXCb0Q2Qqu0T+dqdxvUYszg4ED/zoayH9iO6PCM=";
+  };
+
+  vendorSha256 = "sha256-fCovSA3ZbKn9DrDlb/SXoe8iQTTEAiiDZFSpHUPmxzo=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "CLI tool to generate terraform files from existing infrastructure (reverse Terraform). Infrastructure to Code";
+    homepage = "https://github.com/GoogleCloudPlatform/terraformer";
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
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..6bfcb3129236
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tet/default.nix
@@ -0,0 +1,29 @@
+{ fetchurl, lib, stdenv }:
+
+stdenv.mkDerivation ({
+  version = "3.8";
+  pname = "tet";
+
+  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 = lib.licenses.artistic1;
+    platforms = 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..98f846b7c2f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texi2html/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, perl, gettext, buildPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "texi2html";
+  version = "5.0";
+
+  src = fetchurl {
+    url = "mirror://savannah/texi2html/${pname}-${version}.tar.bz2";
+    sha256 = "1yprv64vrlcbksqv25asplnjg07mbq38lfclp1m5lj8cw878pag8";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ gettext perl ];
+  buildInputs = [ perl ];
+
+  postPatch = ''
+    patchShebangs separated_to_hash.pl
+  '';
+
+  postInstall = lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+    for f in $out/bin/*; do
+      substituteInPlace $f --replace "${buildPackages.perl}" "${perl}"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Perl script which converts Texinfo source files to HTML output";
+    homepage = "https://www.nongnu.org/texi2html/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.marcweber ];
+    platforms = 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..b8da38ace6fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/4.13a.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, texinfo, ncurses, xz }:
+
+stdenv.mkDerivation rec {
+  pname = "texinfo";
+  version = "4.13a";
+
+  src = fetchurl {
+    url = "mirror://gnu/texinfo/${pname}-${version}.tar.lzma";
+    sha256 = "1rf9ckpqwixj65bw469i634897xwlgkm5i9g2hv3avl6mv7b0a3d";
+  };
+
+  buildInputs = [ ncurses ];
+  nativeBuildInputs = [ xz ];
+
+  # 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/6.7.nix b/nixpkgs/pkgs/development/tools/misc/texinfo/6.7.nix
new file mode 100644
index 000000000000..7915d6e3c6be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/6.7.nix
@@ -0,0 +1,4 @@
+import ./common.nix {
+  version = "6.7";
+  sha256 = "1aicn1v3czqii08wc91jw089n1x3gfchkf808q2as59dak0h714q";
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/texinfo/6.8.nix b/nixpkgs/pkgs/development/tools/misc/texinfo/6.8.nix
new file mode 100644
index 000000000000..11435bf329f6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/6.8.nix
@@ -0,0 +1,4 @@
+import ./common.nix {
+  version = "6.8";
+  sha256 = "1i7yb7mrp3inz25zbzv2pllr4y7d58v818f1as7iz8mw53nm7dwf";
+}
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..b379df09a4b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/common.nix
@@ -0,0 +1,87 @@
+{ version, sha256 }:
+
+{ lib, stdenv, buildPackages, fetchurl, perl, xz, gettext
+
+# we are a dependency of gcc, this simplifies bootstraping
+, interactive ? false, ncurses, procps
+}:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+let
+  crossBuildTools = stdenv.hostPlatform != stdenv.buildPlatform;
+in
+
+with lib;
+
+stdenv.mkDerivation {
+  pname = "texinfo${optionalString interactive "-interactive"}";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://gnu/texinfo/texinfo-${version}.tar.xz";
+    inherit sha256;
+  };
+
+  patches = optional crossBuildTools ./cross-tools-flags.patch;
+
+  # ncurses is required to build `makedoc'
+  # this feature is introduced by the ./cross-tools-flags.patch
+  NATIVE_TOOLS_CFLAGS = if crossBuildTools then "-I${getDev buildPackages.ncurses}/include" else null;
+  NATIVE_TOOLS_LDFLAGS = if crossBuildTools then "-L${getLib buildPackages.ncurses}/lib" else null;
+
+  # 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 ]
+    ++ optionals stdenv.isDarwin [ gettext ]
+    ++ optional interactive ncurses;
+
+  configureFlags = [ "PERL=${buildPackages.perl}/bin/perl" ]
+    ++ lib.optional stdenv.isSunOS "AWK=${gawk}/bin/awk";
+
+  installFlags = [ "TEXMF=$(out)/texmf-dist" ];
+  installTargets = [ "install" "install-tex" ];
+
+  checkInputs = [ procps ];
+
+  doCheck = interactive
+    && !stdenv.isDarwin
+    && !stdenv.isSunOS; # flaky
+
+  checkFlagsArray = [
+    # Test is known to fail on various locales on texinfo-6.8:
+    #   https://lists.gnu.org/r/bug-texinfo/2021-07/msg00012.html
+    "XFAIL_TESTS=test_scripts/layout_formatting_fr_icons.sh"
+  ];
+
+  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/cross-tools-flags.patch b/nixpkgs/pkgs/development/tools/misc/texinfo/cross-tools-flags.patch
new file mode 100644
index 000000000000..f0a8c4dfdc1e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texinfo/cross-tools-flags.patch
@@ -0,0 +1,13 @@
+diff -ur texinfo-6.5/configure texinfo-6.5-patched/configure
+--- texinfo-6.5/configure	2017-09-13 03:50:18.000000000 +0900
++++ texinfo-6.5-patched/configure	2019-12-28 17:39:06.692818866 +0900
+@@ -23281,7 +23281,7 @@
+   # env -i gives this build host configure a clean environment;
+   # consequently, we have to re-initialize $PATH.
+-  env -i CC="$BUILD_CC" AR="$BUILD_AR" RANLIB="$BUILD_RANLIB" \
+-      PATH="$PATH" \
++  env -i CC="$CC_FOR_BUILD" AR="$AR_FOR_BUILD" RANLIB="$RANLIB_FOR_BUILD" \
++      PATH="$PATH" CFLAGS="$NATIVE_TOOLS_CFLAGS" LDFLAGS="$NATIVE_TOOLS_LDFLAGS" \
+       tools_only=1 \
+     ${confdir}/configure --build=${build} --host=${build} \
+                          --disable-rpath --disable-nls
diff --git a/nixpkgs/pkgs/development/tools/misc/texlab/default.nix b/nixpkgs/pkgs/development/tools/misc/texlab/default.nix
new file mode 100644
index 000000000000..8cf86d9d782e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/texlab/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, libiconv
+, Security
+, CoreServices
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "texlab";
+  version = "3.3.2";
+
+  src = fetchFromGitHub {
+    owner = "latex-lsp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-SpfX/3uM1y8skN5BqudUtswkCpinrmHWT7ixbgg8QNI=";
+  };
+
+  cargoSha256 = "sha256-0YipSDKss8qaINkUw9dW8n0fVKp4FmagI9+9jFyXaLA=";
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security CoreServices ];
+
+  postInstall = ''
+    installManPage texlab.1
+
+    # Remove generated dylib of html2md dependency. TexLab statically
+    # links to the generated rlib and doesn't reference the dylib. I
+    # couldn't find any way to prevent building this by passing cargo flags.
+    # See https://gitlab.com/Kanedias/html2md/-/blob/0.2.10/Cargo.toml#L20
+    rm "$out/lib/libhtml2md${stdenv.hostPlatform.extensions.sharedLibrary}"
+    rmdir "$out/lib"
+  '';
+
+  passthru.updateScript = nix-update-script {
+    attrPath = pname;
+  };
+
+  meta = with lib; {
+    description = "An implementation of the Language Server Protocol for LaTeX";
+    homepage = "https://texlab.netlify.app";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar kira-bruneau ];
+    platforms = platforms.all;
+  };
+}
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..52a740ed1c8c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tie/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "tie";
+  version = "2.4";
+
+  src = fetchurl {
+    url = "http://mirrors.ctan.org/web/tie/${pname}-${version}.tar.gz";
+    sha256 = "1m5952kdfffiz33p1jw0wv7dh272mmw28mpxw9v7lkb352zv4xsj";
+  };
+
+  buildPhase = ''
+    ${stdenv.cc.targetPrefix}cc tie.c -o tie
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp tie $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.ctan.org/tex-archive/web/tie";
+    description = "Allow multiple web change files";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ vrthra ];
+    license = licenses.abstyles;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/tockloader/default.nix b/nixpkgs/pkgs/development/tools/misc/tockloader/default.nix
new file mode 100644
index 000000000000..8924cbf2fae5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tockloader/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "tockloader";
+  version = "1.6.0";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "1aqkj1nplcw3gmklrhq6vxy6v9ad5mqiw4y1svasak2zkqdk1wyc";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    argcomplete
+    colorama
+    crcmod
+    pyserial
+    pytoml
+    tqdm
+  ];
+
+  # has no test suite
+  checkPhase = ''
+    runHook preCheck
+    $out/bin/tockloader --version | grep -q ${version}
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/tock/tockloader";
+    license = licenses.mit;
+    description = "Tool for programming Tock onto hardware boards";
+    maintainers = with maintainers; [ ];
+  };
+}
+
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..a93eee5cb1d1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/tokei/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, libiconv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tokei";
+  version = "12.1.2";
+
+  src = fetchFromGitHub {
+    owner = "XAMPPRocky";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-jqDsxUAMD/MCCI0hamkGuCYa8rEXNZIR8S+84S8FbgI=";
+  };
+
+  cargoSha256 = "sha256-U7Bode8qwDsNf4FVppfEHA9uiOFz74CtKgXG6xyYlT8=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    libiconv Security
+  ];
+
+  # enable all output formats
+  buildFeatures = [ "all" ];
+
+  meta = with lib; {
+    description = "A program that allows you to count your code, quickly";
+    longDescription = ''
+      Tokei is a program that displays statistics about your code. Tokei will show number of files, total lines within those files and code, comments, and blanks grouped by language.
+    '';
+    homepage = "https://github.com/XAMPPRocky/tokei";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ gebner lilyball ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/travis/Gemfile b/nixpkgs/pkgs/development/tools/misc/travis/Gemfile
new file mode 100644
index 000000000000..3da9975913e8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/travis/Gemfile
@@ -0,0 +1,4 @@
+source "https://rubygems.org"
+
+gem "travis"
+gem "pry", "~> 0.11.0"
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..91df15a9bb65
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/travis/Gemfile.lock
@@ -0,0 +1,71 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (5.2.4.3)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 0.7, < 2)
+      minitest (~> 5.1)
+      tzinfo (~> 1.1)
+    addressable (2.7.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    coderay (1.1.3)
+    concurrent-ruby (1.1.6)
+    ethon (0.12.0)
+      ffi (>= 1.3.0)
+    faraday (1.0.1)
+      multipart-post (>= 1.2, < 3)
+    faraday_middleware (1.0.0)
+      faraday (~> 1.0)
+    ffi (1.13.1)
+    gh (0.17.0)
+      activesupport (~> 5.0)
+      addressable (~> 2.4)
+      faraday (~> 1.0)
+      faraday_middleware (~> 1.0)
+      multi_json (~> 1.0)
+      net-http-persistent (~> 2.9)
+      net-http-pipeline
+    highline (2.0.3)
+    i18n (1.8.3)
+      concurrent-ruby (~> 1.0)
+    json (2.3.0)
+    launchy (2.4.3)
+      addressable (~> 2.3)
+    method_source (0.9.2)
+    minitest (5.14.1)
+    multi_json (1.14.1)
+    multipart-post (2.1.1)
+    net-http-persistent (2.9.4)
+    net-http-pipeline (1.0.1)
+    pry (0.11.3)
+      coderay (~> 1.1.0)
+      method_source (~> 0.9.0)
+    public_suffix (4.0.5)
+    pusher-client (0.6.2)
+      json
+      websocket (~> 1.0)
+    thread_safe (0.3.6)
+    travis (1.9.1)
+      faraday (~> 1.0)
+      faraday_middleware (~> 1.0)
+      gh (~> 0.13)
+      highline (~> 2.0)
+      json (~> 2.3)
+      launchy (~> 2.1, < 2.5.0)
+      pusher-client (~> 0.4)
+      typhoeus (~> 0.6, >= 0.6.8)
+    typhoeus (0.8.0)
+      ethon (>= 0.8.0)
+    tzinfo (1.2.7)
+      thread_safe (~> 0.1)
+    websocket (1.2.8)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  pry (~> 0.11.0)
+  travis
+
+BUNDLED WITH
+   2.1.4
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..0be7721fe080
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/travis/default.nix
@@ -0,0 +1,16 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
+
+bundlerEnv {
+  inherit ruby;
+  pname = "travis";
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "travis";
+
+  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 nicknovitski ];
+  };
+}
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..02b39bfca947
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/travis/gemset.nix
@@ -0,0 +1,269 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02fdawr3wyvpzpja3r7mvb8lmn2mm5jdw502bx3ncr2sy2nw1kx6";
+      type = "gem";
+    };
+    version = "5.2.4.3";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  coderay = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "094387x4yasb797mv07cs3g6f08y56virc2rjcpb1k79rzaj3nhl";
+      type = "gem";
+    };
+    version = "1.1.6";
+  };
+  ethon = {
+    dependencies = ["ffi"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gggrgkcq839mamx7a8jbnp2h7x2ykfn34ixwskwb0lzx2ak17g9";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wwks9652xwgjm7yszcq5xr960pjypc07ivwzbjzpvy9zh2fw6iq";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jik2kgfinwnfi6fpp512vlvs0mlggign3gkbpkg5fw1jr9his0r";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12lpwaw82bb0rm9f52v1498bpba8aj2l2q359mkwbxsswhpga5af";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  gh = {
+    dependencies = ["activesupport" "addressable" "faraday" "faraday_middleware" "multi_json" "net-http-persistent" "net-http-pipeline"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nj2dm2pahfa4d39y8csvjv5l3hpsm6yjq2y96vj2bqgg0qs26bj";
+      type = "gem";
+    };
+    version = "0.17.0";
+  };
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yclf57n2j3cw8144ania99h1zinf8q3f5zrhqa754j6gl95rp9d";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10nq1xjqvkhngiygji831qx9bryjwws95r4vrnlq9142bzkg670s";
+      type = "gem";
+    };
+    version = "1.8.3";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nrmw2r4nfxlfgprfgki3hjifgrcrs3l5zvm3ca3gb4743yr25mn";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  launchy = {
+    dependencies = ["addressable"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "190lfbiy1vwxhbgn4nl4dcbzxvm049jwc158r2x7kq3g5khjrxa2";
+      type = "gem";
+    };
+    version = "2.4.3";
+  };
+  method_source = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq";
+      type = "gem";
+    };
+    version = "0.9.2";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09bz9nsznxgaf06cx3b5z71glgl0hdw469gqx3w7bqijgrb55p5g";
+      type = "gem";
+    };
+    version = "5.14.1";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xy54mjf7xg41l8qrg1bqri75agdqmxap9z466fjismc1rn2jwfr";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  multipart-post = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  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";
+  };
+  pry = {
+    dependencies = ["coderay" "method_source"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mh312k3y94sj0pi160wpia0ps8f4kmzvm505i6bvwynfdh7v30g";
+      type = "gem";
+    };
+    version = "0.11.3";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vywld400fzi17cszwrchrzcqys4qm6sshbv73wy5mwcixmrgg7g";
+      type = "gem";
+    };
+    version = "4.0.5";
+  };
+  pusher-client = {
+    dependencies = ["json" "websocket"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18ymxz34gmg7jff3h0nyzp5vdg5i06dbdxlrdl2nq4hf14qwj1f4";
+      type = "gem";
+    };
+    version = "0.6.2";
+  };
+  thread_safe = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  travis = {
+    dependencies = ["faraday" "faraday_middleware" "gh" "highline" "json" "launchy" "pusher-client" "typhoeus"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yizj5nqvyrfbyiv1kfwc33dylhsmk5l007z06djj152v04z63i3";
+      type = "gem";
+    };
+    version = "1.9.1";
+  };
+  typhoeus = {
+    dependencies = ["ethon"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03x3fxjsnhgayl4s96h0a9975awlvx2v9nmx2ba0cnliglyczdr8";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1i3jh086w1kbdj3k5l60lc3nwbanmzdf8yjj3mlrx9b2gjjxhi9r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  websocket = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f11rcn4qgffb1rq4kjfwi7di79w8840x9l74pkyif5arp0mb08x";
+      type = "gem";
+    };
+    version = "1.2.8";
+  };
+}
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/uncrustify/default.nix b/nixpkgs/pkgs/development/tools/misc/uncrustify/default.nix
new file mode 100644
index 000000000000..3c191d7c6a91
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/uncrustify/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, cmake, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "uncrustify";
+  version = "0.74.0";
+
+  src = fetchFromGitHub {
+    owner = "uncrustify";
+    repo = "uncrustify";
+    rev = "uncrustify-${version}";
+    sha256 = "0v48vhmzxjzysbf0vhxzayl2pkassvbabvwg84xd6b8n5i74ijxd";
+  };
+
+  nativeBuildInputs = [ cmake python3 ];
+
+  meta = with 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..ebb034a92e72
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/unifdef/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "unifdef";
+  version = "2.12";
+
+  src = fetchurl {
+    url = "https://dotat.at/prog/unifdef/unifdef-${version}.tar.xz";
+    sha256 = "00647bp3m9n01ck6ilw6r24fk4mivmimamvm4hxp5p6wxh10zkj3";
+  };
+
+  makeFlags = [
+    "prefix=$(out)"
+    "DESTDIR="
+  ];
+
+  meta = with lib; {
+    homepage = "https://dotat.at/prog/unifdef/";
+    description = "Selectively remove C preprocessor conditionals";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ orivej 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..51ea6302743a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/universal-ctags/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, buildPackages, fetchFromGitHub, autoreconfHook, coreutils, pkg-config, perl, python3Packages, libiconv, jansson }:
+
+stdenv.mkDerivation rec {
+  pname = "universal-ctags";
+  version = "5.9.20220220.0";
+
+  src = fetchFromGitHub {
+    owner = "universal-ctags";
+    repo = "ctags";
+    rev = "p${version}";
+    sha256 = "1118iq33snxyw1jk8nwvsl08f3zdainksh0yiapzvg0y5906jjjd";
+  };
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ autoreconfHook coreutils pkg-config python3Packages.docutils ];
+  buildInputs = [ jansson ] ++ lib.optional stdenv.isDarwin libiconv;
+
+  # to generate makefile.in
+  autoreconfPhase = ''
+    ./autogen.sh
+  '';
+
+  configureFlags = [ "--enable-tmpdir=/tmp" ];
+
+  postPatch = ''
+    # Remove source of non-determinism
+    substituteInPlace main/options.c \
+      --replace "printf (\"  Compiled: %s, %s\n\", __DATE__, __TIME__);" ""
+
+    substituteInPlace Tmain/utils.sh \
+      --replace /bin/echo ${coreutils}/bin/echo
+
+    # Remove git-related housekeeping from check phase
+    substituteInPlace makefiles/testing.mak \
+      --replace "check: tmain units tlib man-test check-genfile" \
+                "check: tmain units tlib man-test"
+  '';
+
+  postConfigure = ''
+    sed -i 's|/usr/bin/env perl|${perl}/bin/perl|' misc/optlib2c
+  '';
+
+  doCheck = true;
+
+  meta = with 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.mimame ];
+  };
+}
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/unused/default.nix b/nixpkgs/pkgs/development/tools/misc/unused/default.nix
new file mode 100644
index 000000000000..4c3872377142
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/unused/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform, cmake }:
+rustPlatform.buildRustPackage rec {
+  pname = "unused";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "unused-code";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-1R50oCVvk+XJG4EhLusY1aY6RjWNeZvlIDS8PJXIA7o=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  cargoSha256 = "sha256-PjCR+kHlgPWkTkhN0idotGmLSe/FaKkgI9AMEJtoRz8=";
+
+  meta = with lib; {
+    description = "A tool to identify potentially unused code";
+    homepage = "https://unused.codes";
+    license = licenses.mit;
+    maintainers = [ maintainers.lrworth ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/configurable-usb-modeswitch.patch b/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/configurable-usb-modeswitch.patch
new file mode 100644
index 000000000000..d55caab22e69
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/configurable-usb-modeswitch.patch
@@ -0,0 +1,283 @@
+Index: usb-modeswitch-2.6.0/Makefile
+===================================================================
+--- usb-modeswitch-2.6.0.orig/Makefile
++++ usb-modeswitch-2.6.0/Makefile
+@@ -5,17 +5,24 @@ CFLAGS      += -Wall -Wno-deprecated-dec
+ LIBS        = `pkg-config --libs --cflags libusb-1.0`
+ RM          = /bin/rm -f
+ OBJS        = usb_modeswitch.c
+-PREFIX      = $(DESTDIR)/usr
+-ETCDIR      = $(DESTDIR)/etc
++PREFIX      = /usr/local
++ETCDIR      = $(PREFIX)/etc
+ SYSDIR      = $(ETCDIR)/systemd/system
+ UPSDIR      = $(ETCDIR)/init
+-UDEVDIR     = $(DESTDIR)/lib/udev
++UDEVDIR     = $(PREFIX)/lib/udev
+ SBINDIR     = $(PREFIX)/sbin
+ MANDIR      = $(PREFIX)/share/man/man1
+ 
++USE_UPSTART=$(shell if command -v initctl > /dev/null; then echo "true"; fi)
++USE_SYSTEMD=$(shell if command -v systemctl > /dev/null; then echo "true"; fi)
++
+ .PHONY: clean install install-common uninstall \
+ 	dispatcher-script dispatcher-dynlink dispatcher-statlink \
+-	install-script install-dynlink install-statlink
++	install-script install-dynlink install-statlink \
++	install-upstart install-systemd \
++	configure-dispatcher configure-script \
++	configure-upstart configure-systemd \
++	configure
+ 
+ all: all-with-script-dispatcher
+ 
+@@ -28,7 +35,25 @@ all-with-statlink-dispatcher: $(PROG) di
+ $(PROG): $(OBJS) usb_modeswitch.h
+ 	$(CC) -o $(PROG) $(OBJS) $(CFLAGS) $(LIBS) $(LDFLAGS)
+ 
+-dispatcher-script: usb_modeswitch_dispatcher.tcl
++configure-dispatcher:
++	sed -i \
++	  -e 's,^\(set setup(sbindir) \).*$$,\1$(SBINDIR),' \
++	  -e 's,^\(set setup(etcdir) \).*$$,\1$(ETCDIR),' \
++	  usb_modeswitch_dispatcher.tcl
++
++configure-script:
++	sed -i -e 's,^\(SBINDIR=\).*$$,\1$(SBINDIR),' usb_modeswitch.sh
++
++configure-systemd:
++	sed -i -e 's,@sbindir@,$(SBINDIR),' usb_modeswitch@.service
++
++configure-upstart:
++	sed -i -e 's,@sbindir@,$(SBINDIR),' usb-modeswitch-upstart.conf
++
++configure: configure-dispatcher configure-script \
++	configure-systemd configure-upstart
++
++dispatcher-script: configure-dispatcher usb_modeswitch_dispatcher.tcl
+ 	DISPATCH=dispatcher-script
+ 	cp -f usb_modeswitch_dispatcher.tcl usb_modeswitch_dispatcher
+ 
+@@ -53,16 +78,28 @@ distclean: clean
+ # If the systemd folder is present, install the service for starting the dispatcher
+ # If not, use the dispatcher directly from the udev rule as in previous versions
+ 
+-install-common: $(PROG) $(DISPATCH)
+-	install -D --mode=755 usb_modeswitch $(SBINDIR)/usb_modeswitch
+-	install -D --mode=755 usb_modeswitch.sh $(UDEVDIR)/usb_modeswitch
+-	install -D --mode=644 usb_modeswitch.conf $(ETCDIR)/usb_modeswitch.conf
+-	install -D --mode=644 usb_modeswitch.1 $(MANDIR)/usb_modeswitch.1
+-	install -D --mode=644 usb_modeswitch_dispatcher.1 $(MANDIR)/usb_modeswitch_dispatcher.1
+-	install -D --mode=755 usb_modeswitch_dispatcher $(SBINDIR)/usb_modeswitch_dispatcher
++install-common: $(PROG) configure $(DISPATCH)
++	install -D --mode=755 usb_modeswitch $(DESTDIR)$(SBINDIR)/usb_modeswitch
++	install -D --mode=755 usb_modeswitch.sh $(DESTDIR)$(UDEVDIR)/usb_modeswitch
++	install -D --mode=644 usb_modeswitch.conf $(DESTDIR)$(ETCDIR)/usb_modeswitch.conf
++	install -D --mode=644 usb_modeswitch.1 $(DESTDIR)$(MANDIR)/usb_modeswitch.1
++	install -D --mode=644 usb_modeswitch_dispatcher.1 $(DESTDIR)$(MANDIR)/usb_modeswitch_dispatcher.1
++	install -D --mode=755 usb_modeswitch_dispatcher $(DESTDIR)$(SBINDIR)/usb_modeswitch_dispatcher
+ 	install -d $(DESTDIR)/var/lib/usb_modeswitch
+-	test -d $(UPSDIR) -a -e /sbin/initctl && install --mode=644 usb-modeswitch-upstart.conf $(UPSDIR) || test 1
+-	test -d $(SYSDIR) -a \( -e /usr/bin/systemctl -o -e /bin/systemctl \) && install --mode=644 usb_modeswitch@.service $(SYSDIR) || test 1
++
++install-upstart:
++	install -D --mode=644 usb-modeswitch-upstart.conf $(DESTDIR)$(UPSDIR)/usb-modeswitch-upstart.conf
++
++install-systemd:
++	install -D --mode=644 usb_modeswitch@.service $(DESTDIR)$(SYSDIR)/usb_modeswitch@.service
++
++ifeq ($(USE_UPSTART),true)
++install-common: install-upstart
++endif
++
++ifeq ($(USE_SYSTEMD),true)
++install-common: install-systemd
++endif
+ 
+ install: install-script
+ 
+@@ -73,10 +110,10 @@ install-dynlink: dispatcher-dynlink inst
+ install-statlink: dispatcher-statlink install-common
+ 
+ uninstall:
+-	$(RM) $(SBINDIR)/usb_modeswitch
+-	$(RM) $(SBINDIR)/usb_modeswitch_dispatcher
+-	$(RM) $(UDEVDIR)/usb_modeswitch
+-	$(RM) $(ETCDIR)/usb_modeswitch.conf
+-	$(RM) $(MANDIR)/usb_modeswitch.1
++	$(RM) $(DESTDIR)$(SBINDIR)/usb_modeswitch
++	$(RM) $(DESTDIR)$(SBINDIR)/usb_modeswitch_dispatcher
++	$(RM) $(DESTDIR)$(UDEVDIR)/usb_modeswitch
++	$(RM) $(DESTDIR)$(ETCDIR)/usb_modeswitch.conf
++	$(RM) $(DESTDIR)$(MANDIR)/usb_modeswitch.1
+ 	$(RM) -R $(DESTDIR)/var/lib/usb_modeswitch
+-	$(RM) $(SYSDIR)/usb_modeswitch@.service
++	$(RM) $(DESTDIR)$(SYSDIR)/usb_modeswitch@.service
+Index: usb-modeswitch-2.6.0/usb-modeswitch-upstart.conf
+===================================================================
+--- usb-modeswitch-2.6.0.orig/usb-modeswitch-upstart.conf
++++ usb-modeswitch-2.6.0/usb-modeswitch-upstart.conf
+@@ -1,5 +1,5 @@
+ start on usb-modeswitch-upstart
+ task
+ script
+-	exec /usr/sbin/usb_modeswitch_dispatcher --switch-mode $UMS_PARAM
++	exec @sbindir@/usb_modeswitch_dispatcher --switch-mode $UMS_PARAM
+ end script
+Index: usb-modeswitch-2.6.0/usb_modeswitch.sh
+===================================================================
+--- usb-modeswitch-2.6.0.orig/usb_modeswitch.sh
++++ usb-modeswitch-2.6.0/usb_modeswitch.sh
+@@ -1,5 +1,9 @@
+ #!/bin/sh
+ # part of usb_modeswitch 2.6.0
++
++# Compile time configuration, injected by the Makefile
++SBINDIR=/usr/sbin
++
+ device_in()
+ {
+ 	if [ ! -e /var/lib/usb_modeswitch/$1 ]; then
+@@ -37,7 +41,7 @@ if [ $(expr "$1" : "--.*") ]; then
+ 		v_id=$3
+ 	fi
+ fi
+-PATH=/sbin:/usr/sbin:$PATH
++
+ case "$1" in
+ 	--driver-bind)
+ 		# driver binding code removed
+@@ -46,9 +50,7 @@ case "$1" in
+ 	--symlink-name)
+ 		device_in "link_list" $v_id $p_id
+ 		if [ "$?" = "1" ]; then
+-			if [ -e "/usr/sbin/usb_modeswitch_dispatcher" ]; then
+-				exec usb_modeswitch_dispatcher $1 $2 2>>/dev/null
+-			fi
++			exec $SBINDIR/usb_modeswitch_dispatcher $1 $2 2>>/dev/null
+ 		fi
+ 		exit 0
+ 		;;
+@@ -61,15 +63,13 @@ if [ "$p2" = "" -a "$p1" != "" ]; then
+ 	p2=$p1
+ fi
+ 
+-PATH=/bin:/sbin:/usr/bin:/usr/sbin
+-init_path=`readlink -f /sbin/init`
+-if [ `basename $init_path` = "systemd" ]; then
++if command -v systemctl > /dev/null; then
+ 	systemctl --no-block restart usb_modeswitch@$p2.service
+-elif [ -e "/etc/init/usb-modeswitch-upstart.conf" ]; then
++elif command -v initctl > /dev/null; then
+ 	initctl emit --no-wait usb-modeswitch-upstart UMS_PARAM=$p2
+ else
+ 	# only old distros, new udev will kill all subprocesses
+ 	exec 1<&- 2<&- 5<&- 7<&-
+-	exec usb_modeswitch_dispatcher --switch-mode $p2 &
++	exec $SBINDIR/usb_modeswitch_dispatcher --switch-mode $p2 &
+ fi
+ exit 0
+Index: usb-modeswitch-2.6.0/usb_modeswitch@.service
+===================================================================
+--- usb-modeswitch-2.6.0.orig/usb_modeswitch@.service
++++ usb-modeswitch-2.6.0/usb_modeswitch@.service
+@@ -3,6 +3,6 @@ Description=USB_ModeSwitch_%i
+ 
+ [Service]
+ Type=oneshot
+-ExecStart=/usr/sbin/usb_modeswitch_dispatcher --switch-mode %i
++ExecStart=@sbindir@/usb_modeswitch_dispatcher --switch-mode %i
+ #ExecStart=/bin/echo %i
+ 
+Index: usb-modeswitch-2.6.0/usb_modeswitch_dispatcher.tcl
+===================================================================
+--- usb-modeswitch-2.6.0.orig/usb_modeswitch_dispatcher.tcl
++++ usb-modeswitch-2.6.0/usb_modeswitch_dispatcher.tcl
+@@ -12,6 +12,16 @@
+ # Part of usb-modeswitch-2.6.0 package
+ # (C) Josua Dietze 2009-2019
+ 
++# Compile-time configuration, injected by the Makefile.
++set setup(sbindir) /usr/sbin
++set setup(etcdir) /etc
++
++# External dependency default location
++set setup(dbdir) /usr/share/usb_modeswitch
++
++# Derived configuration
++set setup(dbdir_etc) $setup(etcdir)/usb_modeswitch.d
++
+ set arg0 [lindex $argv 0]
+ if [regexp {\.tcl$} $arg0] {
+ 	if [file exists $arg0] {
+@@ -115,10 +125,8 @@ if {![regexp {(.*?):.*$} $arg1 d device]
+ 	}
+ }
+ 
+-set setup(dbdir) /usr/share/usb_modeswitch
+-set setup(dbdir_etc) /etc/usb_modeswitch.d
+ if {![file exists $setup(dbdir)] && ![file exists $setup(dbdir_etc)]} {
+-	Log "\nError: no config database found in /usr/share or /etc. Exit"
++	Log "\nError: no config database found in $setup(dbdir) or $setup(dbdir_etc). Exit"
+ 	SafeExit
+ }
+ 
+@@ -285,7 +293,7 @@ if {$config(NoMBIMCheck)==0 && $usb(bNum
+ 	if [CheckMBIM] {
+ 		Log " driver for MBIM devices is available"
+ 		Log "Find MBIM configuration number ..."
+-		if [catch {set cfgno [exec /usr/sbin/usb_modeswitch -j -Q $busParam $devParam -v $usb(idVendor) -p $usb(idProduct)]} err] {
++		if [catch {set cfgno [exec $setup(sbindir)/usb_modeswitch -j -Q $busParam $devParam -v $usb(idVendor) -p $usb(idProduct)]} err] {
+ 			Log "Error when trying to find MBIM configuration, switch to legacy modem mode"
+ 		} else {
+ 			set cfgno [string trim $cfgno]
+@@ -321,7 +329,7 @@ if {$report == ""} {
+ 	# Now we are actually switching
+ 	if $flags(logging) {
+ 		Log "Command line:\nusb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f \$flags(config)"
+-		catch {set report [exec /usr/sbin/usb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report
++		catch {set report [exec $setup(sbindir)/usb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report
+ 		Log "\nVerbose debug output of usb_modeswitch and libusb follows"
+ 		Log "(Note that some USB errors are to be expected in the process)"
+ 		Log "--------------------------------"
+@@ -329,7 +337,7 @@ if {$report == ""} {
+ 		Log "--------------------------------"
+ 		Log "(end of usb_modeswitch output)\n"
+ 	} else {
+-		catch {set report [exec /usr/sbin/usb_modeswitch -Q -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report
++		catch {set report [exec $setup(sbindir)/usb_modeswitch -Q -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report
+ 	}
+ }
+ 
+@@ -522,12 +530,12 @@ return 1
+ 
+ proc {ParseGlobalConfig} {path} {
+ 
+-global flags
++global flags setup
+ set configFile ""
+ if [string length $path] {
+ 	set places [list $path]
+ } else {
+-	set places [list /etc/usb_modeswitch.conf /etc/sysconfig/usb_modeswitch /etc/default/usb_modeswitch]
++	set places [list $setup(etcdir)/usb_modeswitch.conf $setup(etcdir)/sysconfig/usb_modeswitch $setup(etcdir)/default/usb_modeswitch]
+ }
+ foreach cfg $places {
+ 	if [file exists $cfg] {
+@@ -923,10 +931,12 @@ proc {SysLog} {msg} {
+ 
+ global flags
+ if {![info exists flags(logger)]} {
+-	set flags(logger) ""
+-	foreach fn {/bin/logger /usr/bin/logger} {
+-		if [file exists $fn] {
+-			set flags(logger) $fn
++	set flags(logger) [exec sh -c "command -v logger || true"]
++	if {$flags(logger) == ""} {
++		foreach fn {/bin/logger /usr/bin/logger} {
++			if [file exists $fn] {
++				set flags(logger) $fn
++			}
+ 		}
+ 	}
+ 	Log "Logger is $flags(logger)"
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..7bb9fc69c58a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/data.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, tcl, usb-modeswitch }:
+
+stdenv.mkDerivation rec {
+  pname = "usb-modeswitch-data";
+  version = "20191128";
+
+  src = fetchurl {
+    url    = "http://www.draisberghof.de/usb_modeswitch/${pname}-${version}.tar.bz2";
+    sha256 = "1ygahl3r26r38ai8yyblq9nhf3v5i6n6r6672p5wf88wg5h9n0rz";
+  };
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "DESTDIR=$(out)"
+  ];
+
+  prePatch = ''
+    sed -i 's@usb_modeswitch@${usb-modeswitch}/lib/udev/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 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..4f9dbe92d2b7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/usb-modeswitch/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, lib, fetchurl, pkg-config, makeWrapper
+, libusb1, tcl, util-linux, coreutils, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "usb-modeswitch";
+  version = "2.6.0";
+
+  src = fetchurl {
+    url    = "http://www.draisberghof.de/usb_modeswitch/${pname}-${version}.tar.bz2";
+    sha256 = "18wbbxc5cfsmikba0msdvd5qlaga27b32nhrzicyd9mdddp265f2";
+  };
+
+  patches = [ ./configurable-usb-modeswitch.patch ];
+
+  # Remove attempts to write to /etc and /var/lib.
+  postPatch = ''
+    sed -i \
+      -e '/^\tinstall .* usb_modeswitch.conf/s,$(ETCDIR),$(out)/etc,' \
+      -e '\,^\tinstall -d .*/var/lib/usb_modeswitch,d' \
+      Makefile
+  '';
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "ETCDIR=/etc"
+    "USE_UPSTART=false"
+    "USE_SYSTEMD=true"
+    "SYSDIR=$(out)/lib/systemd/system"
+    "UDEVDIR=$(out)/lib/udev"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/usb_modeswitch_dispatcher \
+      --set PATH ${lib.makeBinPath [ util-linux coreutils bash ]}
+  '';
+
+  buildInputs = [ libusb1 tcl ];
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+
+  meta = with 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/usbsdmux/default.nix b/nixpkgs/pkgs/development/tools/misc/usbsdmux/default.nix
new file mode 100644
index 000000000000..07db23607ceb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/usbsdmux/default.nix
@@ -0,0 +1,22 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "usbsdmux";
+  version = "0.2.1";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-gCxwR5jxzkH22B6nxBwAd0HpwWMIj/zp5VROJ0IWq7c=";
+  };
+
+  # usbsdmux is not meant to be used as an importable module and has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Control software for the LXA USB-SD-Mux";
+    homepage = "https://github.com/linux-automation/usbsdmux";
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ emantor ];
+    platforms = with 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..1bd59aa9944a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/vtable-dumper/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, libelf }:
+
+stdenv.mkDerivation rec {
+  pname = "vtable-dumper";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "lvc";
+    repo = "vtable-dumper";
+    rev = version;
+    sha256 = "0sl7lnjr2l4c2f7qaazvpwpzsp4gckkvccfam88wcq9f7j9xxbyp";
+  };
+
+  buildInputs = [ libelf ];
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with 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..9e3c166400f3
--- /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
+   2.1.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..4d17680471d2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/watson-ruby/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, bundlerEnv, ruby, bundlerUpdateScript }:
+
+stdenv.mkDerivation rec {
+  pname = "watson-ruby";
+  version = (import ./gemset.nix).watson-ruby.version;
+
+  dontUnpack = true;
+
+  installPhase = let
+    env = bundlerEnv {
+      name = "watson-ruby-gems-${version}";
+      inherit ruby;
+      # expects Gemfile, Gemfile.lock and gemset.nix in the same directory
+      gemdir = ./.;
+    };
+  in ''
+    mkdir -p $out/bin
+    ln -s ${env}/bin/watson $out/bin/watson
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "watson-ruby";
+
+  meta = with lib; {
+    description = "An inline issue manager";
+    homepage    = "https://goosecode.com/watson/";
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ robertodr nicknovitski ];
+    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..2f865820f5aa
--- /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";
+  };
+}
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..d448251bf13d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/whatstyle/default.nix
@@ -0,0 +1,30 @@
+{ lib, python3, fetchFromGitHub, clang-unwrapped }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "whatstyle";
+  version = "0.1.8";
+  src = fetchFromGitHub {
+    owner = "mikr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "08lfd8h5fnvy5gci4f3an411cypad7p2yiahvbmlp51r9xwpaiwr";
+  };
+
+  # 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 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/wishbone-tool/default.nix b/nixpkgs/pkgs/development/tools/misc/wishbone-tool/default.nix
new file mode 100644
index 000000000000..0465fb74aa1a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/wishbone-tool/default.nix
@@ -0,0 +1,33 @@
+{ lib, fetchFromGitHub, rustPlatform, libusb-compat-0_1 }:
+
+let
+  version = "0.6.9";
+  src = fetchFromGitHub {
+    owner = "litex-hub";
+    repo = "wishbone-utils";
+    rev = "v${version}";
+    sha256 = "0gq359ybxnqvcp93cn154bs9kwlai62gnm71yvl2nhzjdlcr3fhp";
+  };
+in
+rustPlatform.buildRustPackage {
+  pname = "wishbone-tool";
+  inherit version;
+
+  src = "${src}/wishbone-tool";
+
+  # N.B. The cargo vendor consistency checker searches in "source" for lockfile
+  cargoDepsHook = ''
+    ln -s wishbone-tool source
+  '';
+  cargoSha256 = "1b12wpmzv7wxidc4hd8hmp8iwqhqlycxh8bdv3rf701sqsazkc5x";
+
+  buildInputs = [ libusb-compat-0_1 ];
+
+  meta = with lib; {
+    description = "Manipulate a Wishbone device over some sort of bridge";
+    homepage = "https://github.com/litex-hub/wishbone-utils";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ edef ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/xspim/default.nix b/nixpkgs/pkgs/development/tools/misc/xspim/default.nix
new file mode 100644
index 000000000000..6e11c81cbde0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/xspim/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchsvn, imake, bison, flex, xlibsWrapper, libXaw, libXpm, ... }:
+
+stdenv.mkDerivation rec {
+  pname = "xspim";
+  version = "9.1.22";
+
+  src = fetchsvn {
+    url = "https://svn.code.sf.net/p/spimsimulator/code/";
+    rev = "r739";
+    sha256 = "1kazfgrbmi4xq7nrkmnqw1280rhdyc1hmr82flrsa3g1b1rlmj1s";
+  };
+
+  nativeBuildInputs = [ imake bison flex ];
+  buildInputs = [ xlibsWrapper libXaw libXpm ];
+
+  preConfigure = ''
+    cd xspim
+    xmkmf
+  '';
+
+  makeFlags = [
+    "BIN_DIR=${placeholder "out"}/bin"
+    "EXCEPTION_DIR=${placeholder "out"}/share/spim"
+    "MAN_DIR=${placeholder "out"}/share/man/man1"
+  ];
+
+  doCheck = true;
+  preCheck = ''
+    pushd ../spim
+  '';
+  postCheck = ''
+    popd
+  '';
+
+  preInstall = ''
+    mkdir -p $out/share/spim
+    install -D ../spim/spim $out/bin/spim
+    install -D ../Documentation/spim.man $out/share/man/man1/spim.1
+    install -D ../Documentation/xspim.man $out/share/man/man1/xspim.1
+  '';
+
+  meta = with lib; {
+    description = "A MIPS32 simulator";
+    homepage = "http://spimsimulator.sourceforge.net/";
+    license = licenses.bsdOriginal;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.linux;
+  };
+}
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..c187ad42c0e9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/xxdiff/default.nix
@@ -0,0 +1,51 @@
+{ lib, mkDerivation, fetchFromBitbucket, docutils, bison, flex, qmake
+, qtbase
+}:
+
+mkDerivation rec {
+  pname = "xxdiff";
+  version = "5.0b1";
+
+  src = fetchFromBitbucket {
+    owner = "blais";
+    repo = pname;
+    rev = "5e5f885dfc43559549a81c59e9e8c9525306356a";
+    sha256 = "0gbvxrkwkbvag3298j89smszghpr8ilxxfb0cvsknfqdf15b296w";
+  };
+
+  nativeBuildInputs = [ bison docutils flex qmake ];
+
+  buildInputs = [ qtbase ];
+
+  dontUseQmakeConfigure = true;
+
+  # c++11 and above is needed for building with Qt 5.9+
+  NIX_CFLAGS_COMPILE = [ "-std=c++14" ];
+
+  sourceRoot = "source/src";
+
+  postPatch = ''
+    substituteInPlace xxdiff.pro --replace ../bin ./bin
+  '';
+
+  preConfigure = ''
+    make -f Makefile.bootstrap
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin                ./bin/xxdiff
+    install -Dm444 -t $out/share/doc/${pname} ${src}/README
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Graphical file and directories comparator and merge tool";
+    homepage = "http://furius.ca/xxdiff/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pSub raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/xxgdb/default.nix b/nixpkgs/pkgs/development/tools/misc/xxgdb/default.nix
new file mode 100644
index 000000000000..cd14705e1ebd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/xxgdb/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, imake, xlibsWrapper, gccmakedep, libXaw }:
+
+stdenv.mkDerivation rec {
+  pname = "xxgdb";
+  version = "1.12";
+
+  src = fetchurl {
+    url = "http://deb.debian.org/debian/pool/main/x/xxgdb/xxgdb_${version}.orig.tar.gz";
+    sha256 = "0jwazg99wk2l7r390ggw0yr8xipl07bp0qynni141xss530i6d1a";
+  };
+
+  patches = [
+    # http://zhu-qy.blogspot.com.es/2012/11/slackware-14-i-still-got-xxgdb-all-ptys.html
+    ./xxgdb-pty.patch
+  ];
+
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [ xlibsWrapper libXaw ];
+
+  preConfigure = ''
+    mkdir build
+    xmkmf
+  '';
+
+  makeFlags = [
+    "DESTDIR=build"
+  ];
+
+  postInstall = ''
+    # Fix up install paths
+    shopt -s globstar
+    mv build/**/bin $out/bin
+
+    install -D xxgdb.1 $out/share/man/man1/xxgdb.1
+  '';
+
+  meta = with lib; {
+    description = "A simple but powerful graphical interface to gdb";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/misc/xxgdb/xxgdb-pty.patch b/nixpkgs/pkgs/development/tools/misc/xxgdb/xxgdb-pty.patch
new file mode 100644
index 000000000000..735bb1b0b5fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/xxgdb/xxgdb-pty.patch
@@ -0,0 +1,84 @@
+--- xxgdb-1.12-org/calldbx.c	2012-10-26 17:17:49.810750909 -0700
++++ xxgdb-1.12/calldbx.c	2012-10-26 17:53:59.209918816 -0700
+@@ -69,6 +69,12 @@
+  *    create_io_window(): create an io window for gdb to use 
+  */
+ 
++#ifdef linux
++#ifndef _GNU_SOURCE
++#define _GNU_SOURCE
++#endif
++#endif
++
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+@@ -126,6 +132,13 @@
+ {
+     int master;
+     
++#ifdef _POSIX_SOURCE
++    if ((master = posix_openpt (O_RDWR|O_NOCTTY)) < 0) {
++	perror("posix_openpt failed:");
++    } else {
++	return master;
++    }
++#else
+ #ifdef SVR4				/* (MJH) Use STREAMS */
+ 
+     if((master = open(MASTER_CLONE, O_RDWR)) < 0)
+@@ -152,6 +165,7 @@
+ 	}
+ #endif
+ #endif /* SVR4 */
++#endif /*  _POSIX_SOURCE */
+ 
+ #ifdef GDB
+     fprintf(stderr, "xxgdb: all ptys in use\n");
+@@ -167,7 +181,28 @@
+ {
+     int slave;
+ 
+-#ifdef SVR4				/* (MJH) */
++#ifdef _POSIX_SOURCE
++    char *slave_name = ptsname (master);
++    if (slave_name == NULL) {
++	perror ("Pseudo-tty slave");
++	exit (2);
++    } // end if
++    if (grantpt (master) < 0) {
++	perror ("grantpt error");
++	exit (3);
++    }
++    if (unlockpt (master) < 0) {
++	perror ("unlockpt error");
++	exit (4);
++    }
++    if ((slave = open (slave_name, O_RDWR)) < 0) {
++	perror (slave_name);
++	exit (5);
++    } // end if
++    return slave;
++#else
++#ifdef SVR4		
++	/* (MJH) */
+     char *slave_name = "unknown";
+     extern char *ptsname(int master);
+     void (*handler)();
+@@ -194,6 +229,7 @@
+ 	    }
+     return slave;
+ #endif /* SVR4 */
++#endif /*  _POSIX_SOURCE */
+ }
+ 
+ #ifdef CREATE_IO_WINDOW 
+@@ -230,7 +266,7 @@
+     {
+ 	/* child */
+ 	/* printf("xterm xterm -l -e xxgdbiowin\n");*/
+-	if (execlp("xterm", "xterm", "-e", "xxgdbiowin", 0))
++	if (execlp("xterm", "xterm", "-e", "xxgdbiowin", NULL))
+ 	{
+ 	    printf("exec of 'xterm -e xxgdbiowin' fails\n");
+ 	    unlink("/tmp/iowindowtty");
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..f77ced3a2ada
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/ycmd/default.nix
@@ -0,0 +1,94 @@
+{ stdenv, lib, fetchgit, cmake, llvmPackages, boost, python
+, withGocode ? true, gocode
+, withGodef ? true, godef
+, withGotools? true, gotools
+, withTypescript ? true, nodePackages
+, fixDarwinDylibNames, Cocoa
+}:
+
+stdenv.mkDerivation {
+  pname = "ycmd";
+  version = "unstable-2020-02-22";
+  disabled = !python.isPy3k;
+
+  # required for third_party directory creation
+  src = fetchgit {
+    url = "https://github.com/Valloric/ycmd.git";
+    rev = "9a6b86e3a156066335b678c328f226229746bae5";
+    sha256 = "1c5axdngxaxj5vc6lr8sxb99mr5adsm1dnjckaxc23kq78pc8cn7";
+  };
+
+  nativeBuildInputs = [ cmake ]
+    ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames;
+  buildInputs = [ boost llvmPackages.libclang ]
+    ++ lib.optional stdenv.isDarwin Cocoa;
+
+  buildPhase = ''
+    export EXTRA_CMAKE_ARGS=-DPATH_TO_LLVM_ROOT=${llvmPackages.clang-unwrapped}
+    ${python.interpreter} build.py --system-libclang --clang-completer --system-boost
+  '';
+
+  dontConfigure = true;
+
+  # 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
+
+    # Copy everything: the structure of third_party has been known to change.
+    # When linking our own libraries below, do so with '-f'
+    # to clobber anything we may have copied here.
+    mkdir -p $out/lib/ycmd/third_party
+    cp -r third_party/* $out/lib/ycmd/third_party/
+
+  '' + lib.optionalString withGocode ''
+    TARGET=$out/lib/ycmd/third_party/gocode
+    mkdir -p $TARGET
+    ln -sf ${gocode}/bin/gocode $TARGET
+  '' + lib.optionalString withGodef ''
+    TARGET=$out/lib/ycmd/third_party/godef
+    mkdir -p $TARGET
+    ln -sf ${godef}/bin/godef $TARGET
+  '' + lib.optionalString withGotools ''
+    TARGET=$out/lib/ycmd/third_party/go/src/golang.org/x/tools/cmd/gopls
+    mkdir -p $TARGET
+    ln -sf ${gotools}/bin/gopls $TARGET
+  '' + lib.optionalString withTypescript ''
+    TARGET=$out/lib/ycmd/third_party/tsserver
+    ln -sf ${nodePackages.typescript} $TARGET
+  '';
+
+  # 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 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..2eee78c1c19c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/yodl/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchFromGitLab, perl, icmake, util-linux }:
+
+stdenv.mkDerivation rec {
+  pname = "yodl";
+  version = "4.03.03";
+
+  nativeBuildInputs = [ icmake ];
+
+  buildInputs = [ perl ];
+
+  src = fetchFromGitLab {
+    sha256 = "sha256-MeD/jjhwoiWTb/G8pHrnEEX22h+entPr9MhJ6WHO3DM=";
+    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 ${util-linux}/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 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/mix2nix/default.nix b/nixpkgs/pkgs/development/tools/mix2nix/default.nix
new file mode 100644
index 000000000000..21520d9dbe3d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mix2nix/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, fetchFromGitHub, elixir, erlang }:
+
+stdenv.mkDerivation rec {
+  pname = "mix2nix";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "ydlr";
+    repo = "mix2nix";
+    rev = version;
+    sha256 = "0q4yq8glrdj72j7b9xnwb6j3cli3cccimh9sb7acb4npaiivvf69";
+  };
+
+  nativeBuildInputs = [ elixir ];
+  buildInputs = [ erlang ];
+
+  buildPhase = "mix escript.build";
+  installPhase = "install -Dt $out/bin mix2nix";
+
+  meta = with lib; {
+    description = "Generate nix expressions from mix.lock file.";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ydlr ] ++ teams.beam.members;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mmixware/default.nix b/nixpkgs/pkgs/development/tools/mmixware/default.nix
new file mode 100644
index 000000000000..4f0515eec2f5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mmixware/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitLab, tetex }:
+
+stdenv.mkDerivation {
+  pname = "mmixware";
+  version = "unstable-2021-06-18";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.lrz.de";
+    owner = "mmix";
+    repo = "mmixware";
+    rev = "7c790176d50d13ae2422fa7457ccc4c2d29eba9b";
+    sha256 = "sha256-eSwHiJ5SP/Nennalv4QFTgVnM6oan/DWDZRqtk0o6Z0=";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  postPatch = ''
+    substituteInPlace Makefile --replace 'rm abstime.h' ""
+  '';
+
+  nativeBuildInputs = [ tetex ];
+  enableParallelBuilding = true;
+
+  makeFlags = [ "all" "doc" "CFLAGS=-O2" ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/share/doc
+    cp *.ps $out/share/doc
+    install -Dm755 mmixal -t $out/bin
+    install -Dm755 mmix -t $out/bin
+    install -Dm755 mmotype -t $out/bin
+    install -Dm755 mmmix -t $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description  = "MMIX simulator and assembler";
+    homepage     = "https://www-cs-faculty.stanford.edu/~knuth/mmix-news.html";
+    maintainers  = with maintainers; [ siraben ];
+    platforms    = platforms.unix;
+    license      = licenses.publicDomain;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mockgen/default.nix b/nixpkgs/pkgs/development/tools/mockgen/default.nix
new file mode 100644
index 000000000000..af3e21afc914
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mockgen/default.nix
@@ -0,0 +1,23 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+buildGoModule rec {
+  pname = "mockgen";
+  version = "1.6.0";
+  src = fetchFromGitHub {
+    owner = "golang";
+    repo = "mock";
+    rev = "v${version}";
+    sha256 = "sha256-5Kp7oTmd8kqUN+rzm9cLqp9nb3jZdQyltGGQDiRSWcE=";
+  };
+  vendorSha256 = "sha256-5gkrn+OxbNN8J1lbgbxM8jACtKA7t07sbfJ7gVJWpJM=";
+
+  doCheck = false;
+
+  subPackages = [ "mockgen" ];
+
+  meta = with lib; {
+    description = "GoMock is a mocking framework for the Go programming language";
+    homepage = "https://github.com/golang/mock";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bouk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mod/default.nix b/nixpkgs/pkgs/development/tools/mod/default.nix
new file mode 100644
index 000000000000..c1d17bba57b9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mod/default.nix
@@ -0,0 +1,31 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "mod";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "marwan-at-work";
+    repo = "mod";
+    rev = "v${version}";
+    sha256 = "sha256-IPdZ2PSS4rYVoMxrunse8Z2NHXLjXAoBcDvB6D70ki0=";
+  };
+
+  vendorSha256 = "sha256-1+06/yXi07iWZhcCEGNnoL2DpeVRYMW/NdyEhZQePbk=";
+
+  doCheck = false;
+
+  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..c42e364b88ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/modd/default.nix
@@ -0,0 +1,20 @@
+{ buildGoPackage, fetchFromGitHub, lib }:
+
+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" ];
+  meta = with 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 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mold/default.nix b/nixpkgs/pkgs/development/tools/mold/default.nix
new file mode 100644
index 000000000000..db1c13da2f98
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mold/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+, autoPatchelfHook
+, cmake
+, llvmPackages_latest
+, xxHash
+, zlib
+, openssl
+, nix-update-script
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mold";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "rui314";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-+uPVt3w3A25JFyENxqhAcjZMRzSowi2uHwGjkeQP8Og=";
+  };
+
+  buildInputs = [ zlib openssl ];
+  nativeBuildInputs = [ autoPatchelfHook cmake xxHash ];
+
+  enableParallelBuilding = true;
+  dontUseCmakeConfigure = true;
+  EXTRA_LDFLAGS = "-fuse-ld=${llvmPackages_latest.lld}/bin/ld.lld";
+  LTO = 1;
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "A high performance drop-in replacement for existing unix linkers";
+    homepage = "https://github.com/rui314/mold";
+    license = lib.licenses.agpl3Plus;
+    maintainers = with maintainers; [ nitsky ];
+    broken = stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/mpfshell/default.nix b/nixpkgs/pkgs/development/tools/mpfshell/default.nix
new file mode 100644
index 000000000000..e8a2a9b89217
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mpfshell/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonPackage rec {
+  pname = "mpfshell-unstable";
+  version = "2020-04-11";
+
+  src = fetchFromGitHub {
+    owner = "wendlers";
+    repo = "mpfshell";
+    rev = "429469fcccbda770fddf7a4277f5db92b1217664";
+    sha256 = "0md6ih9vp65dacqy8gki3b2p4v76xb9ijqmxymk4b4f9z684x2m7";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    pyserial colorama websocket-client
+  ];
+
+  doCheck = false;
+  pythonImportsCheck = [ "mp.mpfshell" ];
+
+  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..a7b3c36d87b2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/msgpack-tools/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "msgpack-tools";
+  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
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with 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..7e21d415c79b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/mustache-go/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "mustache-go";
+  version = "1.3.0";
+
+  goPackagePath = "github.com/cbroglie/mustache";
+
+  src = fetchFromGitHub {
+    owner = "cbroglie";
+    repo = "mustache";
+    rev = "v${version}";
+    sha256 = "sha256-Z33hHOcx2K34v3j/qFD1VqeuUaqH0jqoMsVZQnLFx4U=";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/cbroglie/mustache";
+    description = "The mustache template language in Go";
+    license = [ licenses.mit ];
+    maintainers = with maintainers; [ Zimmi48 ];
+    mainProgram = "mustache";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nailgun/default.nix b/nixpkgs/pkgs/development/tools/nailgun/default.nix
new file mode 100644
index 000000000000..9832de15140a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nailgun/default.nix
@@ -0,0 +1,39 @@
+{ lib, 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 {
+  pname = "nailgun";
+  inherit 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 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/neil/default.nix b/nixpkgs/pkgs/development/tools/neil/default.nix
new file mode 100644
index 000000000000..643ca8773cb7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/neil/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, babashka
+}:
+
+stdenv.mkDerivation rec {
+  pname = "neil";
+  version = "0.0.13";
+
+  src = fetchFromGitHub {
+    owner = "babashka";
+    repo = "neil";
+    rev = "v${version}";
+    sha256 = "0jiyl0d39d8kk5bpangwxiy90vqipj4lgp8x84rh4z5m53knjpkd";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -D neil $out/bin/neil
+    wrapProgram $out/bin/neil \
+      --prefix PATH : "${lib.makeBinPath [ babashka ]}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/babashka/neil";
+    description = "A CLI to add common aliases and features to deps.edn-based projects";
+    license = licenses.mit;
+    platforms = babashka.meta.platforms;
+    maintainers = with maintainers; [ jlesquembre ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nemiver/default.nix b/nixpkgs/pkgs/development/tools/nemiver/default.nix
new file mode 100644
index 000000000000..7894dfe797d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nemiver/default.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv
+, fetchurl
+, fetchpatch
+, pkg-config
+, gnome
+, gtk3
+, libxml2
+, intltool
+, itstool
+, gdb
+, boost
+, sqlite
+, libgtop
+, glibmm
+, gtkmm3
+, vte
+, gtksourceview
+, gsettings-desktop-schemas
+, gtksourceviewmm
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nemiver";
+  version = "0.9.6";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/nemiver/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "85ab8cf6c4f83262f441cb0952a6147d075c3c53d0687389a3555e946b694ef2";
+  };
+
+  nativeBuildInputs = [
+    libxml2
+    intltool
+    itstool
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    gdb
+    boost
+    sqlite
+    libgtop
+    glibmm
+    gtkmm3
+    vte
+    gtksourceview
+    gtksourceviewmm
+    gsettings-desktop-schemas
+  ];
+
+  patches = [
+    # build fixes
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/nemiver/commit/e0e42221ceb77d88be64fac1c09792dc5c9e2f43.patch";
+      sha256 = "1g0ixll6yqfj6ysf50p0c7nmh3lgmb6ds15703q7ibnw7dyidvj8";
+    })
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/nemiver/commit/7005393a8c4d914eac9705e7f47818d0f4de3578.patch";
+      sha256 = "1mxb1sdqdj7dm204gja8cdygx8579bjriqqbb7cna9rj0m9c8pjg";
+    })
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/nemiver/commit/262cf9657f9c2727a816972b348692adcc666008.patch";
+      sha256 = "03jv6z54b8nzvplplapk4aj206zl1gvnv6iz0mad19g6yvfbw7a7";
+    })
+  ];
+
+  configureFlags = [
+    "--enable-gsettings"
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "nemiver";
+      versionPolicy = "none";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Nemiver";
+    description = "Easy to use standalone C/C++ debugger";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.juliendehos ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/neoload/default.nix b/nixpkgs/pkgs/development/tools/neoload/default.nix
new file mode 100644
index 000000000000..0fcb121e4603
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/neoload/default.nix
@@ -0,0 +1,96 @@
+{ lib, 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 {
+  pname = "neoload";
+  version = "4.1.4";
+
+  src = fetchurl (
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      { url = "http://neoload.installers.neotys.com/documents/download/${pname}/v${lib.versions.majorMinor version}/${pname}_${lib.replaceStrings ["."] ["_"] version}_linux_x64.sh";
+        sha256 = "199jcf5a0nwfm8wfld2rcjgq64g91vvz2bkmki8dxfzf1yasifcd"; }
+    else
+      { url = "http://neoload.installers.neotys.com/documents/download/${pname}/v${lib.versions.majorMinor version}/${pname}_${lib.replaceStrings ["."] ["_"] version}_linux_x86.sh";
+        sha256 = "1z66jiwcxixsqqwa0f4q8m2p5kna4knq6lic8y8l74dgv25mw912"; } );
+
+  nativeBuildInputs = [ 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 = lib.licenses.unfree;
+
+    maintainers = [ 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..da85be926715
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/node-webkit/nw12.nix
@@ -0,0 +1,59 @@
+{ stdenv, lib, fetchurl, buildEnv, makeWrapper
+, xorg, alsa-lib, 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 alsa-lib 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 {
+  pname = "nwjs";
+  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";
+  };
+
+  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 ${lib.getLib systemd}/lib/libudev.so $out/share/nwjs/libudev.so.0
+
+    patchelf --set-rpath "${nwEnv}/lib:${nwEnv}/lib64:${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
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  meta = with 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/nodenv/default.nix b/nixpkgs/pkgs/development/tools/nodenv/default.nix
new file mode 100644
index 000000000000..d1e38d7bda74
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nodenv/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nodenv";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "nodenv";
+    repo = "nodenv";
+    rev = "v${version}";
+    sha256 = "0fgc23jd95rjll3dy5hnli8ksfc7rwscw53sdgss4yaharwlg8l2";
+  };
+
+  buildPhase = ''
+    runHook preBuild
+
+    bash src/configure
+    make -C src
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    cp -r libexec $out/
+    cp -r bin $out/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Manage multiple NodeJS versions";
+    homepage = "https://github.com/nodenv/nodenv/";
+    changelog = "https://github.com/nodenv/nodenv/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ alexnortung ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/nrpl/default.nix b/nixpkgs/pkgs/development/tools/nrpl/default.nix
new file mode 100644
index 000000000000..84147faf74e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nrpl/default.nix
@@ -0,0 +1,40 @@
+{ lib, nimPackages, fetchFromGitHub, fetchpatch, makeWrapper, pcre, tinycc }:
+
+nimPackages.buildNimPackage {
+  pname = "nrpl";
+  version = "20150522";
+  nimBinOnly = true;
+
+  src = fetchFromGitHub {
+    owner  = "wheineman";
+    repo   = "nrpl";
+    rev    = "6d6c189ab7d1c905cc29dc678d66e9e132026f69";
+    sha256 = "1cly9lhrawnc42r31b7r0p0i6hcx8r00aa17gv7w9pcpj8ngb4v2";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ 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";
+
+  postFixup = ''
+    wrapProgram $out/bin/nrpl \
+      --prefix PATH : ${lib.makeBinPath [ nimPackages.nim tinycc ]}
+  '';
+
+  meta = with 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..4820d8bb4b7d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nsis/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, stdenv
+, symlinkJoin
+, fetchurl
+, fetchzip
+, sconsPackages
+, zlib
+, libiconv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nsis";
+  version = "3.06.1";
+
+  src =
+    fetchurl {
+      url = "mirror://sourceforge/project/nsis/NSIS%203/${version}/nsis-${version}-src.tar.bz2";
+      sha256 = "1w1z2m982l6j8lw8hy91c3979wbnqglcf4148f9v79vl32znhpcv";
+    };
+  srcWinDistributable =
+    fetchzip {
+      url = "mirror://sourceforge/project/nsis/NSIS%203/${version}/nsis-${version}.zip";
+      sha256 = "04qm9jqbcybpwcrjlksggffdyafzwxxcaz9xhjw8w5rb95x7lw5q";
+    };
+
+  postUnpack = ''
+    mkdir -p $out/share/nsis
+    cp -avr ${srcWinDistributable}/{Contrib,Include,Plugins,Stubs} \
+      $out/share/nsis
+    chmod -R u+w $out/share/nsis
+  '';
+
+  nativeBuildInputs = [ sconsPackages.scons_3_1_2 ];
+  buildInputs = [ zlib ] ++ lib.optionals stdenv.isDarwin [ libiconv ];
+
+  CPPPATH = symlinkJoin {
+     name = "nsis-includes";
+     paths = [ zlib.dev ] ++ lib.optionals stdenv.isDarwin [ libiconv ];
+  };
+
+  LIBPATH = symlinkJoin {
+    name = "nsis-libs";
+    paths = [ zlib ] ++ lib.optionals stdenv.isDarwin [ libiconv ];
+  };
+
+  sconsFlags = [
+    "SKIPSTUBS=all"
+    "SKIPPLUGINS=all"
+    "SKIPUTILS=all"
+    "SKIPMISC=all"
+    "NSIS_CONFIG_CONST_DATA=no"
+  ] ++ lib.optional stdenv.isDarwin "APPEND_LINKFLAGS=-liconv";
+
+  preBuild = ''
+    sconsFlagsArray+=(
+      "PATH=$PATH"
+      "CC=$CC"
+      "CXX=$CXX"
+      "APPEND_CPPPATH=$CPPPATH/include"
+      "APPEND_LIBPATH=$LIBPATH/lib"
+    )
+  '';
+
+  prefixKey = "PREFIX=";
+  installTargets = [ "install-compiler" ];
+
+  meta = with lib; {
+    description = "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.unix;
+    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..dd3d9cf6faaf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/nwjs/default.nix
@@ -0,0 +1,98 @@
+{ stdenv, lib, fetchurl, buildEnv, makeWrapper
+
+, xorg, alsa-lib, at-spi2-core, dbus, glib, gtk3, atk, pango, freetype
+, fontconfig , gdk-pixbuf, cairo, mesa, nss, nspr, expat, systemd
+, libcap, libdrm, libxkbcommon
+, 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 gtk3 atk at-spi2-core pango cairo gdk-pixbuf
+      freetype fontconfig xorg.libXcomposite alsa-lib xorg.libXdamage
+      xorg.libXext xorg.libXfixes mesa nss nspr expat dbus
+      xorg.libXtst xorg.libXi xorg.libXcursor xorg.libXrandr
+      xorg.libXScrnSaver xorg.libxshmfence cups
+      libcap libdrm libnotify
+      libxkbcommon
+      # libnw-specific (not chromium dependencies)
+      ffmpeg libxcb
+      # chromium runtime deps (dlopen’d)
+      sqlite udev
+      libuuid
+    ];
+
+    extraOutputsToInstall = [ "lib" "out" ];
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "nwjs";
+  version = "0.54.1";
+
+  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
+      "sha256-1qeU4+EIki0M7yJPkRuzFwMdswfDOni5gltdmM6A/ds=" else
+      "sha256-wDEGePE9lrKa6OAzeiDLhVj992c0TJgiMHb8lJ4PF80=";
+  } else fetchurl {
+    url = "https://dl.nwjs.io/v${version}/nwjs-v${version}-linux-${bits}.tar.gz";
+    sha256 = if bits == "x64" then
+      "sha256-TACEM06K2t6dDXRD44lSW7GRi77yzSW4BZJw8gT+fl4=" else
+      "sha256-yX9knqFV5VQTT3TJDmQoDgt17NqH8fLt+bLQAqKleTU=";
+  };
+
+  # we have runtime deps like sqlite3 that should remain
+  dontPatchELF = true;
+
+  installPhase =
+    let ccPath = 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 ${lib.getLib systemd}/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
+
+      mkdir $out/lib
+      ln -s $out/share/nwjs/lib/libnw.so $out/lib/libnw.so
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  meta = with 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..5c3153a88493
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/camlidl/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchurl, ocaml, writeText }:
+
+let
+  pname = "camlidl";
+  webpage = "https://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";
+  };
+
+  nativeBuildInputs = [ ocaml ];
+
+  # build fails otherwise
+  enableParallelBuilding = false;
+
+  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 = [ 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..97a769628fe0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/camlp4/default.nix
@@ -0,0 +1,92 @@
+{ lib, stdenv, fetchzip, which, ocaml, ocamlbuild }:
+
+if lib.versionAtLeast ocaml.version "4.14"
+then throw "camlp4 is not available for OCaml ${ocaml.version}"
+else
+
+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"; };
+  "4.08" = {
+     version = "4.08+1";
+     sha256 = "0qplawvxwai25bi27niw2cgz2al01kcnkj8wxwhxslpi21z6pyx1"; };
+  "4.09" = {
+     version = "4.09+1";
+     sha256 = "1gr33x6xs1rs0bpyq4vzyfxd6vn47jfkg8imi81db2r0cbs0kxx1"; };
+  "4.10" = {
+     version = "4.10+1";
+     sha256 = "093bc1c28wid5li0jwglnd4p3csxw09fmbs9ffybq2z41a5mgay6"; };
+  "4.11" = {
+     version = "4.11+1";
+     sha256 = "0sn7f6im940qh0ixmx1k738xrwwdvy9g7r19bv5218jb6mh0g068"; };
+  "4.12" = {
+     version = "4.12+1";
+     sha256 = "1cfk5ppnd511vzsr9gc0grxbafmh0m3m897aij198rppzxps5kyz"; };
+  "4.13" = {
+     version = "4.13+1";
+     sha256 = "0fzxa1zdhk74mlxpin7p90flks6sp4gkc0mfclmj9zak15rii55n"; };
+  }.${ocaml.meta.branch};
+in
+
+stdenv.mkDerivation rec {
+  pname = "camlp4";
+  inherit (param) version;
+
+  src = fetchzip {
+    url = "https://github.com/ocaml/camlp4/archive/${version}.tar.gz";
+    inherit (param) sha256;
+  };
+
+  buildInputs = [ which ocaml ocamlbuild ];
+
+  # build fails otherwise
+  enableParallelBuilding = false;
+
+  dontAddPrefix = true;
+
+  preConfigure = ''
+    # increase stack space for spacetime variant of the compiler
+    # https://github.com/ocaml/ocaml/issues/7435
+    # but disallowed by darwin sandbox
+    ulimit -s unlimited || true
+
+    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 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..65debca11c23
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/camlp5/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, ocaml, perl }:
+
+if lib.versionOlder ocaml.version "4.02"
+|| lib.versionOlder "4.13" ocaml.version
+then throw "camlp5 is not available for OCaml ${ocaml.version}"
+else
+
+stdenv.mkDerivation rec {
+
+  pname = "camlp5";
+  version = "7.14";
+
+  src = fetchFromGitHub {
+    owner = "camlp5";
+    repo = "camlp5";
+    rev = "rel${builtins.replaceStrings [ "." ] [ "" ] version}";
+    sha256 = "1dd68bisbpqn5lq2pslm582hxglcxnbkgfkwhdz67z4w9d5nvr7w";
+  };
+
+  buildInputs = [ ocaml perl ];
+
+  prefixKey = "-prefix ";
+
+  preConfigure = ''
+    configureFlagsArray=(--strict --libdir $out/lib/ocaml/${ocaml.version}/site-lib)
+    patchShebangs ./config/find_stuffversion.pl
+  '';
+
+  buildFlags = [ "world.opt" ];
+
+  dontStrip = true;
+
+  meta = with 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; [
+      maggesi 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..55e9692a0a3b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/cppo/default.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv, fetchFromGitHub, ocaml, findlib, ocamlbuild
+, buildDunePackage
+}:
+
+let
+  pname = "cppo";
+
+  meta = with 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 = "https://github.com/ocaml-community/${pname}";
+    maintainers = [ maintainers.vbgl ];
+    license = licenses.bsd3;
+  };
+
+in
+
+if lib.versionAtLeast ocaml.version "4.02" then
+
+buildDunePackage rec {
+  inherit pname;
+  version = "1.6.8";
+
+  useDune2 = true;
+
+  src = fetchFromGitHub {
+    owner = "ocaml-community";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256:0xjb1dnj8lvdcccskrhrakknd9q4vfy5330sjbqpf4h95dsz90k9";
+  };
+
+  doCheck = true;
+
+  inherit meta;
+}
+
+else
+
+let version = "1.5.0"; in
+
+stdenv.mkDerivation {
+
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "mjambon";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1xqldjz9risndnabvadw41fdbi5sa2hl4fnqls7j9xfbby1izbg8";
+  };
+
+  buildInputs = [ ocaml findlib ocamlbuild ];
+
+  inherit meta;
+
+  createFindlibDestdir = true;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  preBuild = ''
+    mkdir $out/bin
+  '';
+
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/cppo/ocamlbuild.nix b/nixpkgs/pkgs/development/tools/ocaml/cppo/ocamlbuild.nix
new file mode 100644
index 000000000000..633dc6bc7bf6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/cppo/ocamlbuild.nix
@@ -0,0 +1,17 @@
+{ lib, buildDunePackage, cppo, ocamlbuild }:
+
+if !lib.versionAtLeast (lib.getVersion cppo) "1.6"
+then cppo
+else
+
+buildDunePackage rec {
+  pname = "cppo_ocamlbuild";
+
+  inherit (cppo) version useDune2 src;
+
+  propagatedBuildInputs = [ ocamlbuild ];
+
+  meta = cppo.meta // {
+    description = "Plugin to use cppo with ocamlbuild";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/crunch/default.nix b/nixpkgs/pkgs/development/tools/ocaml/crunch/default.nix
new file mode 100644
index 000000000000..07082b7f5d22
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/crunch/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildDunePackage, fetchurl, ocaml, cmdliner, ptime }:
+
+buildDunePackage rec {
+
+  pname = "crunch";
+  version = "3.1.0";
+
+  useDune2 = true;
+
+  src = fetchurl {
+    url = "https://github.com/mirage/ocaml-crunch/releases/download/v${version}/crunch-v${version}.tbz";
+    sha256 = "0d26715a4h9r1wibnc12xy690m1kan7hrcgbb5qk8x78zsr67lnf";
+  };
+
+  propagatedBuildInputs = [ cmdliner ptime ];
+
+  outputs = [ "lib" "bin" "out" ];
+
+  installPhase = ''
+    dune install --prefix=$bin --libdir=$lib/lib/ocaml/${ocaml.version}/site-lib/
+  '';
+
+  meta = {
+    homepage = "https://github.com/mirage/ocaml-crunch";
+    description = "Convert a filesystem into a static OCaml module";
+    license = lib.licenses.isc;
+    maintainers = [ lib.maintainers.vbgl ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/dune-release/default.nix b/nixpkgs/pkgs/development/tools/ocaml/dune-release/default.nix
new file mode 100644
index 000000000000..32ff517178cb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/dune-release/default.nix
@@ -0,0 +1,62 @@
+{ lib, buildDunePackage, fetchurl, makeWrapper, fetchpatch
+, curly, fmt, bos, cmdliner, re, rresult, logs, fpath
+, odoc, opam-format, opam-core, opam-state, yojson, astring
+, opam, git, findlib, mercurial, bzip2, gnutar, coreutils
+, alcotest
+}:
+
+# don't include dune as runtime dep, so user can
+# choose between dune and dune_2
+let runtimeInputs = [ opam findlib git mercurial bzip2 gnutar coreutils ];
+in buildDunePackage rec {
+  pname = "dune-release";
+  version = "1.5.2";
+
+  minimumOCamlVersion = "4.06";
+
+  src = fetchurl {
+    url = "https://github.com/ocamllabs/${pname}/releases/download/${version}/${pname}-${version}.tbz";
+    sha256 = "1r6bz1zz1al5y762ws3w98d8bnyi5ipffajgczixacmbrxvp3zgx";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ curly fmt cmdliner re opam-format opam-state opam-core
+                  rresult logs odoc bos yojson astring fpath ];
+  checkInputs = [ alcotest ] ++ runtimeInputs;
+  doCheck = true;
+
+  useDune2 = true;
+
+  patches = [
+    # add missing git config calls to avoid failing due to the lack of a global git config
+    (fetchpatch {
+      name = "tests-missing-git-config.patch";
+      url = "https://github.com/ocamllabs/dune-release/commit/87e7ffe2a9c574620d4e2fc0d79eed8772eab973.patch";
+      sha256 = "0wrzcpzr54dwrdjdc75mijh78xk4bmsmqs1pci06fb2nf03vbd2k";
+    })
+  ];
+
+  postPatch = ''
+    # remove check for curl in PATH, since curly is patched
+    # to have a fixed path to the binary in nix store
+    sed -i '/must_exist (Cmd\.v "curl"/d' lib/github.ml
+  '';
+
+  preCheck = ''
+    # it fails when it tries to reference "./make_check_deterministic.exe"
+    rm -r tests/bin/check
+  '';
+
+  # tool specific env vars have been deprecated, use PATH
+  preFixup = ''
+    wrapProgram $out/bin/dune-release \
+      --prefix PATH : "${lib.makeBinPath runtimeInputs}"
+  '';
+
+  meta = with lib; {
+    description = "Release dune packages in opam";
+    homepage = "https://github.com/ocamllabs/dune-release";
+    license = licenses.isc;
+    maintainers = with maintainers; [ sternenseemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/dune/1.nix b/nixpkgs/pkgs/development/tools/ocaml/dune/1.nix
new file mode 100644
index 000000000000..74deb9d2fa55
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/dune/1.nix
@@ -0,0 +1,37 @@
+{ stdenv, lib, fetchurl, ocaml, findlib, ncurses }:
+
+if !lib.versionAtLeast ocaml.version "4.02"
+|| lib.versionAtLeast ocaml.version "4.12"
+then throw "dune 1 is not available for OCaml ${ocaml.version}"
+else
+
+stdenv.mkDerivation rec {
+  pname = "dune";
+  version = "1.11.4";
+  src = fetchurl {
+    url = "https://github.com/ocaml/dune/releases/download/${version}/dune-build-info-${version}.tbz";
+    sha256 = "1rkc8lqw30ifjaz8d81la6i8j05ffd0whpxqsbg6dci16945zjvp";
+  };
+
+  nativeBuildInputs = [ ocaml findlib ];
+  buildInputs = [ ncurses ];
+  strictDeps = true;
+
+  buildFlags = [ "release" ];
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "LIBDIR=$(OCAMLFIND_DESTDIR)"
+  ];
+
+  dontAddPrefix = true;
+  dontAddStaticConfigureFlags = true;
+  configurePlatforms = [];
+
+  meta = with lib; {
+    homepage = "https://dune.build/";
+    description = "A composable build system";
+    maintainers = [ maintainers.vbgl maintainers.marsam ];
+    license = licenses.mit;
+    inherit (ocaml.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/dune/2.nix b/nixpkgs/pkgs/development/tools/ocaml/dune/2.nix
new file mode 100644
index 000000000000..30962eeba311
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/dune/2.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, ocaml, findlib }:
+
+if lib.versionOlder ocaml.version "4.08"
+then throw "dune 2 is not available for OCaml ${ocaml.version}"
+else
+
+stdenv.mkDerivation rec {
+  pname = "dune";
+  version = "2.9.3";
+
+  src = fetchurl {
+    url = "https://github.com/ocaml/dune/releases/download/${version}/dune-site-${version}.tbz";
+    sha256 = "sha256:1ml8bxym8sdfz25bx947al7cvsi2zg5lcv7x9w6xb01cmdryqr9y";
+  };
+
+  nativeBuildInputs = [ ocaml findlib ];
+  strictDeps = true;
+
+  buildFlags = "release";
+
+  dontAddPrefix = true;
+  dontAddStaticConfigureFlags = true;
+  configurePlatforms = [];
+
+  installFlags = [ "PREFIX=${placeholder "out"}" "LIBDIR=$(OCAMLFIND_DESTDIR)" ];
+
+  meta = {
+    homepage = "https://dune.build/";
+    description = "A composable build system";
+    changelog = "https://github.com/ocaml/dune/raw/${version}/CHANGES.md";
+    maintainers = [ lib.maintainers.vbgl lib.maintainers.marsam ];
+    license = lib.licenses.mit;
+    inherit (ocaml.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/dune/3.nix b/nixpkgs/pkgs/development/tools/ocaml/dune/3.nix
new file mode 100644
index 000000000000..f6f45944a816
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/dune/3.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, ocaml, findlib, darwin }:
+
+if lib.versionOlder ocaml.version "4.08"
+then throw "dune 3 is not available for OCaml ${ocaml.version}"
+else
+
+stdenv.mkDerivation rec {
+  pname = "dune";
+  version = "3.0.3";
+
+  src = fetchurl {
+    url = "https://github.com/ocaml/dune/releases/download/${version}/fiber-${version}.tbz";
+    sha256 = "sha256-1QRJmhZY8Nmcrvv/1zhvLjHUbOynMWcVf+RobEHlcy8=";
+  };
+
+  nativeBuildInputs = [ ocaml findlib ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Foundation
+  ];
+
+  strictDeps = true;
+
+  buildFlags = "release";
+
+  dontAddPrefix = true;
+  dontAddStaticConfigureFlags = true;
+  configurePlatforms = [];
+
+  installFlags = [ "PREFIX=${placeholder "out"}" "LIBDIR=$(OCAMLFIND_DESTDIR)" ];
+
+  meta = {
+    homepage = "https://dune.build/";
+    description = "A composable build system";
+    changelog = "https://github.com/ocaml/dune/raw/${version}/CHANGES.md";
+    maintainers = [ lib.maintainers.vbgl lib.maintainers.marsam ];
+    license = 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..e7abf32eae5f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/findlib/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchurl, fetchpatch, m4, ncurses, ocaml, writeText }:
+
+stdenv.mkDerivation rec {
+  pname = "ocaml-findlib";
+  version = "1.9.1";
+
+  src = fetchurl {
+    url = "http://download.camlcity.org/download/findlib-${version}.tar.gz";
+    sha256 = "sha256-K0K4vVRIjWTEvzy3BUtLN70wwdwSvUMeoeTXrYqYD+I=";
+  };
+
+  nativeBuildInputs = [m4 ocaml];
+  buildInputs = [ ncurses ];
+
+  patches = [ ./ldconf.patch ./install_topfind.patch ];
+
+  dontAddPrefix=true;
+  dontAddStaticConfigureFlags = true;
+  configurePlatforms = [];
+
+  configureFlags = [
+      "-bindir" "${placeholder "out"}/bin"
+      "-mandir" "${placeholder "out"}/share/man"
+      "-sitelib" "${placeholder "out"}/lib/ocaml/${ocaml.version}/site-lib"
+      "-config" "${placeholder "out"}/etc/findlib.conf"
+  ];
+
+  buildFlags = [ "all" "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
+    }
+    exportOcamlDestDir () {
+        export OCAMLFIND_DESTDIR="''$out/lib/ocaml/${ocaml.version}/site-lib/"
+    }
+    createOcamlDestDir () {
+        if test -n "''${createFindlibDestdir-}"; then
+          mkdir -p $OCAMLFIND_DESTDIR
+        fi
+    }
+
+    # run for every buildInput
+    addEnvHooks "$targetOffset" addOCamlPath
+    # run before installPhase, even without buildInputs, and not in nix-shell
+    preInstallHooks+=(createOcamlDestDir)
+    # run even in nix-shell, and even without buildInputs
+    addEnvHooks "$hostOffset" exportOcamlDestDir
+  '';
+
+  meta = {
+    homepage = "http://projects.camlcity.org/projects/findlib.html";
+    description = "O'Caml library manager";
+    license = lib.licenses.mit;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = [
+      lib.maintainers.maggesi
+      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..dbdb0edd6cb1
--- /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$(LIB_SUFFIX) 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$(LIB_SUFFIX) findlib_top.cmxs findlib_dynload.cma findlib_dynload.cmxa findlib_dynload$(LIB_SUFFIX) 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/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..39f6d5f7aa2d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/camlp4.nix
@@ -0,0 +1,21 @@
+{ buildDunePackage, fetchFromGitHub, js_of_ocaml-compiler
+, camlp4, ocsigen_deriving
+}:
+
+buildDunePackage rec {
+  version = "3.2.1";
+  pname = "js_of_ocaml-camlp4";
+
+  useDune2 = false;
+
+  src = fetchFromGitHub {
+    owner = "ocsigen";
+    repo = "js_of_ocaml";
+    rev = version;
+    sha256 = "1v2hfq0ra9j07yz6pj6m03hrvgys4vmx0gclchv94yywpb2wc7ik";
+  };
+
+  inherit (js_of_ocaml-compiler) meta;
+
+  buildInputs = [ camlp4 ocsigen_deriving ];
+}
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..82d84c819dd2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/compiler.nix
@@ -0,0 +1,28 @@
+{ lib, fetchurl, buildDunePackage
+, cmdliner, yojson, ppxlib
+, menhir, menhirLib
+}:
+
+buildDunePackage rec {
+  pname = "js_of_ocaml-compiler";
+  version = "3.11.0";
+  useDune2 = true;
+
+  src = fetchurl {
+    url = "https://github.com/ocsigen/js_of_ocaml/releases/download/${version}/js_of_ocaml-${version}.tbz";
+    sha256 = "sha256:0flws9mw0yjfw4d8d3y3k408mivy2xgky70xk1br3iqs4zksz38m";
+  };
+
+  nativeBuildInputs = [ menhir ];
+  buildInputs = [ cmdliner ppxlib ];
+
+  configurePlatforms = [];
+  propagatedBuildInputs = [ menhirLib yojson ];
+
+  meta = {
+    description = "Compiler from OCaml bytecode to Javascript";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.vbgl ];
+    homepage = "https://ocsigen.org/js_of_ocaml/";
+  };
+}
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..25826e94eb3a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/default.nix
@@ -0,0 +1,13 @@
+{ buildDunePackage, js_of_ocaml-compiler
+, ppxlib, uchar
+}:
+
+buildDunePackage {
+  pname = "js_of_ocaml";
+
+  inherit (js_of_ocaml-compiler) version src meta useDune2;
+
+  buildInputs = [ ppxlib ];
+
+  propagatedBuildInputs = [ js_of_ocaml-compiler uchar ];
+}
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..81b1a41614b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/lwt.nix
@@ -0,0 +1,13 @@
+{ buildDunePackage, js_of_ocaml-compiler, js_of_ocaml-ppx
+, js_of_ocaml, ocaml_lwt, lwt_log
+}:
+
+buildDunePackage {
+  pname = "js_of_ocaml-lwt";
+
+  inherit (js_of_ocaml-compiler) version src meta useDune2;
+
+  buildInputs = [ js_of_ocaml-ppx ];
+
+  propagatedBuildInputs = [ js_of_ocaml ocaml_lwt lwt_log ];
+}
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..c67d05c15038
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ocamlbuild.nix
@@ -0,0 +1,13 @@
+{ buildDunePackage, js_of_ocaml-compiler
+, ocamlbuild
+}:
+
+buildDunePackage {
+  pname = "js_of_ocaml-ocamlbuild";
+
+  inherit (js_of_ocaml-compiler) version src meta useDune2;
+
+  minimalOCamlVersion = "4.02";
+
+  propagatedBuildInputs = [ 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..3c0f8c761239
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx.nix
@@ -0,0 +1,13 @@
+{ buildDunePackage, js_of_ocaml-compiler
+, ppxlib
+, js_of_ocaml
+}:
+
+buildDunePackage {
+  pname = "js_of_ocaml-ppx";
+
+  inherit (js_of_ocaml-compiler) version src meta useDune2;
+
+  buildInputs = [ js_of_ocaml ];
+  propagatedBuildInputs = [ ppxlib ];
+}
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..d862d4bc67b7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/ppx_deriving_json.nix
@@ -0,0 +1,11 @@
+{ buildDunePackage, js_of_ocaml-compiler
+, js_of_ocaml, ppxlib
+}:
+
+buildDunePackage {
+  pname = "js_of_ocaml-ppx_deriving_json";
+
+  inherit (js_of_ocaml-compiler) version src meta useDune2;
+
+  propagatedBuildInputs = [ js_of_ocaml ppxlib ];
+}
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..7082e4b86c97
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/js_of_ocaml/tyxml.nix
@@ -0,0 +1,14 @@
+{ buildDunePackage, js_of_ocaml-compiler
+, js_of_ocaml-ppx
+, js_of_ocaml, reactivedata, tyxml
+}:
+
+buildDunePackage {
+  pname = "js_of_ocaml-tyxml";
+
+  inherit (js_of_ocaml-compiler) version src meta useDune2;
+
+  buildInputs = [ js_of_ocaml-ppx ];
+
+  propagatedBuildInputs = [ js_of_ocaml reactivedata tyxml ];
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/merlin/4.x.nix b/nixpkgs/pkgs/development/tools/ocaml/merlin/4.x.nix
new file mode 100644
index 000000000000..2d030b2d1560
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/merlin/4.x.nix
@@ -0,0 +1,89 @@
+{ lib
+, substituteAll
+, fetchurl
+, ocaml
+, dune_2
+, buildDunePackage
+, yojson
+, csexp
+, result
+, dot-merlin-reader
+, jq
+, menhir
+, menhirLib
+, menhirSdk
+}:
+
+let
+  merlinVersion = "4.4";
+
+  hashes = {
+    "4.4-411" = "sha256:0chx28098mmnjbnaz5wgzsn82rh1w9dhzqmsykb412cq13msl1q4";
+    "4.4-412" = "sha256:18xjpsiz7xbgjdnsxfc52l7yfh22harj0birlph4xm42d14pkn0n";
+    "4.4-413" = "sha256:1ilmh2gqpwgr51w2ba8r0s5zkj75h00wkw4az61ssvivn9jxr7k0";
+  };
+
+  ocamlVersionShorthand = lib.concatStrings
+    (lib.take 2 (lib.splitVersion ocaml.version));
+
+  version = "${merlinVersion}-${ocamlVersionShorthand}";
+in
+
+if !lib.hasAttr version hashes
+then builtins.throw "merlin ${merlinVersion} is not available for OCaml ${ocaml.version}"
+else
+
+buildDunePackage {
+  pname = "merlin";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://github.com/ocaml/merlin/releases/download/v${version}/merlin-${version}.tbz";
+    sha256 = hashes."${version}";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      dot_merlin_reader = "${dot-merlin-reader}/bin/dot-merlin-reader";
+      dune = "${dune_2}/bin/dune";
+    })
+  ] ++ lib.optional (!lib.versionAtLeast ocaml.version "4.12")
+    # This fixes the test-suite on macOS
+    # See https://github.com/ocaml/merlin/pull/1399
+    # Fixed in 4.4 for OCaml ≥ 4.12
+    ./test.patch
+  ;
+
+  useDune2 = true;
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    menhir
+    jq
+  ];
+  buildInputs = [
+    dot-merlin-reader
+    yojson
+    csexp
+    result
+    menhirSdk
+    menhirLib
+  ];
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+    patchShebangs tests/merlin-wrapper
+    dune runtest # filtering with -p disables tests
+    runHook postCheck
+  '';
+
+  meta = with 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 maintainers.sternenseemann ];
+  };
+}
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..3db5d1377831
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/merlin/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchurl, buildDunePackage, substituteAll
+, dot-merlin-reader, dune_2, yojson, csexp, result, menhirSdk }:
+
+buildDunePackage rec {
+  pname = "merlin";
+  version = "3.4.2";
+
+  src = fetchurl {
+    url = "https://github.com/ocaml/merlin/releases/download/v${version}/merlin-v${version}.tbz";
+    sha256 = "e1b7b897b11119d92995c558530149fd07bd67a4aaf140f55f3c4ffb5e882a81";
+  };
+
+  useDune2 = true;
+
+  minimumOCamlVersion = "4.02.3";
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      dot_merlin_reader = "${dot-merlin-reader}/bin/dot-merlin-reader";
+      dune = "${dune_2}/bin/dune";
+    })
+  ];
+
+  strictDeps = true;
+
+  buildInputs = [ dot-merlin-reader yojson csexp result menhirSdk ];
+
+  meta = with 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/merlin/dot-merlin-reader.nix b/nixpkgs/pkgs/development/tools/ocaml/merlin/dot-merlin-reader.nix
new file mode 100644
index 000000000000..894fe6f75ae9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/merlin/dot-merlin-reader.nix
@@ -0,0 +1,24 @@
+{ lib, fetchurl, yojson, csexp, result, buildDunePackage }:
+
+buildDunePackage rec {
+  pname = "dot-merlin-reader";
+  version = "4.1";
+
+  useDune2 = true;
+
+  minimumOCamlVersion = "4.06";
+
+  src = fetchurl {
+    url = "https://github.com/ocaml/merlin/releases/download/v${version}/dot-merlin-reader-v${version}.tbz";
+    sha256 = "14a36d6fb8646a5df4530420a7861722f1a4ee04753717947305e3676031e7cd";
+  };
+
+  buildInputs = [ yojson csexp result ];
+
+  meta = with lib; {
+    description = "Reads config files for merlin";
+    homepage = "https://github.com/ocaml/merlin";
+    license = licenses.mit;
+    maintainers = [ maintainers.hongchangwu ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/merlin/fix-paths.patch b/nixpkgs/pkgs/development/tools/ocaml/merlin/fix-paths.patch
new file mode 100644
index 000000000000..05fafacc09c0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/merlin/fix-paths.patch
@@ -0,0 +1,15 @@
+--- a/src/kernel/mconfig_dot.ml
++++ b/src/kernel/mconfig_dot.ml
+@@ -126,10 +126,10 @@ module Configurator = struct
+       let prog, args =
+         match cfg with
+         | Dot_merlin ->
+-          let prog = "dot-merlin-reader" in
++          let prog = "@dot_merlin_reader@" in
+           prog, [| prog |]
+         | Dune ->
+-          let prog = "dune" in
++          let prog = "@dune@" in
+           prog, [| prog; "ocaml-merlin"; "--no-print-directory" |]
+       in
+       log ~title:"get_config" "Using %s configuration provider." (to_string cfg);
diff --git a/nixpkgs/pkgs/development/tools/ocaml/merlin/test.patch b/nixpkgs/pkgs/development/tools/ocaml/merlin/test.patch
new file mode 100644
index 000000000000..0101e825b967
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/merlin/test.patch
@@ -0,0 +1,19 @@
+commit 282eed37f39ff216add8d53766fd59f3737eb87f
+Author: Vincent Laporte <Vincent.Laporte@gmail.com>
+Date:   Thu Nov 4 06:24:07 2021 +0100
+
+    Ignore dune stderr in tests
+
+diff --git a/tests/test-dirs/document/src-documentation.t/run.t b/tests/test-dirs/document/src-documentation.t/run.t
+index 2c9e1419..4f4c4327 100644
+--- a/tests/test-dirs/document/src-documentation.t/run.t
++++ b/tests/test-dirs/document/src-documentation.t/run.t
+@@ -42,7 +42,7 @@ documentation for the non-last defined value (in the same file) is show
+   > jq '.value'
+   " List reversal. "
+ 
+-  $ dune build --root=. ./doc.exe
++  $ dune build --root=. ./doc.exe 2> /dev/null
+   $ cat >.merlin <<EOF
+   > B _build/default/.doc.eobjs/byte
+   > S .
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..d35ddbe210bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/oasis/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchurl, ocaml, findlib, ocamlbuild, ocamlmod, ocamlify }:
+
+stdenv.mkDerivation {
+  version = "0.4.10";
+  pname = "ocaml-oasis";
+
+  # 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;
+
+  strictDeps = true;
+
+  nativeBuildInputs =
+    [
+      ocaml findlib ocamlbuild ocamlmod ocamlify
+    ];
+
+  buildInputs = [ ocamlbuild ];
+
+  configurePhase = ''
+    runHook preConfigure
+    ocaml setup.ml -configure --prefix $out
+    runHook postConfigure
+  '';
+  buildPhase = ''
+    runHook preBuild
+    ocaml setup.ml -build
+    runHook postBuild
+  '';
+  installPhase = ''
+    runHook preInstall
+    ocaml setup.ml -install
+    runHook postInstall
+  '';
+
+  meta = with 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 maggesi
+    ];
+  };
+}
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..a37a8c8b3927
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/obelisk/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, ocamlPackages, menhir }:
+
+ocamlPackages.buildDunePackage rec {
+  pname = "obelisk";
+  version = "0.6.0";
+  useDune2 = true;
+  src = fetchFromGitHub {
+    owner = "Lelio-Brun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1jjaqa2b7msl9qd3x7j34vdh1s9alq8hbvzk8a5srb4yyfyim15b";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ menhir ];
+  buildInputs = with ocamlPackages; [ re ];
+
+  meta = {
+    description = "A simple tool which produces pretty-printed output from a Menhir parser file (.mly)";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.vbgl ];
+    homepage = "https://github.com/Lelio-Brun/Obelisk";
+  };
+}
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..318e9f517dcf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/obuild/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, ocaml }:
+
+stdenv.mkDerivation rec {
+  pname = "obuild";
+  version = "0.1.10";
+
+  src = fetchFromGitHub {
+    owner = "ocaml-obuild";
+    repo = "obuild";
+    rev = "obuild-v${version}";
+    sha256 = "sha256-dqWP9rwWmr7i3O29v/kipJL01B3qQozaToOFCdfTWZU=";
+  };
+
+  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 = lib.licenses.lgpl21;
+    maintainers = with lib.maintainers; [ volth ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocaml-recovery-parser/default.nix b/nixpkgs/pkgs/development/tools/ocaml/ocaml-recovery-parser/default.nix
new file mode 100644
index 000000000000..619d0ded7b32
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocaml-recovery-parser/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchFromGitHub
+, buildDunePackage
+, fix
+, menhirLib
+, menhirSdk
+}:
+
+buildDunePackage rec {
+  pname = "ocaml-recovery-parser";
+  version = "0.2.2";
+
+  minimalOCamlVersion = "4.08";
+  useDune2 = true;
+
+  src = fetchFromGitHub {
+    owner = "serokell";
+    repo = pname;
+    rev = version;
+    sha256 = "qQHvAPNQBbsvlQRh19sz9BtfhhMOp3uPthVozc1fpw8=";
+  };
+
+  propagatedBuildInputs = [
+    fix
+    menhirLib
+    menhirSdk
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/serokell/ocaml-recovery-parser";
+    description = "A simple fork of OCaml parser with support for error recovery";
+    license = with licenses; [ lgpl2Only mit mpl20 ];
+    maintainers = with maintainers; [ romildo ];
+  };
+}
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..92ad6aa452ea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocaml-top/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, ncurses, ocamlPackages }:
+
+with ocamlPackages; buildDunePackage rec {
+  pname = "ocaml-top";
+  version = "1.2.0-rc";
+
+  useDune2 = true;
+
+  src = fetchFromGitHub {
+    owner = "OCamlPro";
+    repo = "ocaml-top";
+    rev = version;
+    sha256 = "sha256-ZXnPnPvJmHshkTwYWeBojrgJYAF/R6vUo0XkvVMFSeQ=";
+  };
+
+  buildInputs = [ ncurses ocp-build lablgtk3-sourceview3 ocp-index ];
+
+  configurePhase = ''
+    export TERM=xterm
+    ocp-build -init
+  '';
+
+  meta = {
+    homepage = "https://www.typerex.org/ocaml-top.html";
+    license = lib.licenses.gpl3;
+    description = "A simple cross-platform OCaml code editor built for top-level evaluation";
+    maintainers = with 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..7f53ba9203d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlbuild/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, ocaml, findlib }:
+stdenv.mkDerivation rec {
+  pname = "ocaml${ocaml.version}-ocamlbuild";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "ocaml";
+    repo = "ocamlbuild";
+    rev = version;
+    sha256 = "1hb5mcdz4wv7sh1pj7dq9q4fgz5h3zg7frpiya6s8zd3ypwzq0kh";
+  };
+
+  createFindlibDestdir = true;
+
+  nativeBuildInputs = [ ocaml findlib ];
+  strictDeps = true;
+
+  # x86_64-unknown-linux-musl-ld: -r and -pie may not be used together
+  hardeningDisable = lib.optional stdenv.hostPlatform.isStatic "pie";
+
+  configurePhase = ''
+  runHook preConfigure
+
+  make -f configure.make Makefile.config \
+    "OCAMLBUILD_PREFIX=$out" \
+    "OCAMLBUILD_BINDIR=$out/bin" \
+    "OCAMLBUILD_MANDIR=$out/share/man" \
+    "OCAMLBUILD_LIBDIR=$OCAMLFIND_DESTDIR"
+
+  runHook postConfigure
+  '';
+
+  meta = with 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..096fe1b4324a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlformat/default.nix
@@ -0,0 +1,72 @@
+{ lib, fetchurl, fetchzip, callPackage }:
+
+let mkOCamlformat = callPackage ./generic.nix; in
+
+# Older versions should be removed when their usage decrease
+# This script scraps Github looking for OCamlformat's options and versions usage:
+#  https://gist.github.com/Julow/110dc94308d6078225e0665e3eccd433
+
+rec {
+  ocamlformat_0_11_0 = mkOCamlformat {
+    version = "0.11.0";
+  };
+
+  ocamlformat_0_12 = mkOCamlformat {
+    version = "0.12";
+  };
+
+  ocamlformat_0_13_0 = mkOCamlformat rec {
+    version = "0.13.0";
+    tarballName = "ocamlformat-${version}-2.tbz";
+  };
+
+  ocamlformat_0_14_0 = mkOCamlformat {
+    version = "0.14.0";
+  };
+
+  ocamlformat_0_14_1 = mkOCamlformat {
+    version = "0.14.1";
+  };
+
+  ocamlformat_0_14_2 = mkOCamlformat {
+    version = "0.14.2";
+  };
+
+  ocamlformat_0_14_3 = mkOCamlformat {
+    version = "0.14.3";
+  };
+
+  ocamlformat_0_15_0 = mkOCamlformat {
+    version = "0.15.0";
+  };
+
+  ocamlformat_0_15_1 = mkOCamlformat {
+    version = "0.15.1";
+  };
+
+  ocamlformat_0_16_0 = mkOCamlformat {
+    version = "0.16.0";
+  };
+
+  ocamlformat_0_17_0 = mkOCamlformat {
+    version = "0.17.0";
+  };
+
+  ocamlformat_0_18_0 = mkOCamlformat {
+    version = "0.18.0";
+  };
+
+  ocamlformat_0_19_0 = mkOCamlformat {
+    version = "0.19.0";
+  };
+
+  ocamlformat_0_20_0 = mkOCamlformat {
+    version = "0.20.0";
+  };
+
+  ocamlformat_0_20_1 = mkOCamlformat {
+    version = "0.20.1";
+  };
+
+  ocamlformat = ocamlformat_0_20_1;
+}
diff --git a/nixpkgs/pkgs/development/tools/ocaml/ocamlformat/generic.nix b/nixpkgs/pkgs/development/tools/ocaml/ocamlformat/generic.nix
new file mode 100644
index 000000000000..517ca6585fe1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlformat/generic.nix
@@ -0,0 +1,181 @@
+{ lib, fetchurl, fetchzip, ocaml-ng
+, version
+, tarballName ? "ocamlformat-${version}.tbz",
+}:
+
+let src =
+  if version == "0.11.0"
+  then fetchzip {
+    url = "https://github.com/ocaml-ppx/ocamlformat/archive/0.11.0.tar.gz";
+    sha256 = "0zvjn71jd4d3znnpgh0yphb2w8ggs457b6bl6cg1fmpdgxnds6yx";
+  } else fetchurl {
+    url = "https://github.com/ocaml-ppx/ocamlformat/releases/download/${version}/${tarballName}";
+    sha256 = {
+      "0.12" = "1zi8x597dhp2822j6j28s84yyiqppl7kykpwqqclx6ybypvlzdpj";
+      "0.13.0" = "0ki2flqi3xkhw9mfridivb6laxm7gml8rj9qz42vqmy9yx76jjxq";
+      "0.14.0" = "070c0x6z5y0lyls56zm34g8lyc093wkr0jfp50dvrkr9fk1sx2wi";
+      "0.14.1" = "03wn46xib63748157xchj7gflkw5000fcjw6n89h9g82q9slazaa";
+      "0.14.2" = "16phz1sg9b070p6fm8d42j0piizg05vghdjmw8aj7xm82b1pm7sz";
+      "0.14.3" = "13pfakdncddm41cp61p0l98scawbvhx1q4zdsglv7ph87l7zwqfl";
+      "0.15.0" = "0190vz59n6ma9ca1m3syl3mc8i1smj1m3d8x1jp21f710y4llfr6";
+      "0.15.1" = "1x6fha495sgk4z05g0p0q3zfqm5l6xzmf6vjm9g9g7c820ym2q9a";
+      "0.16.0" = "1vwjvvwha0ljc014v8jp8snki5zsqxlwd7x0dl0rg2i9kcmwc4mr";
+      "0.17.0" = "0f1lxp697yq61z8gqxjjaqd2ns8fd1vjfggn55x0gh9dx098p138";
+      "0.18.0" = "0571kzmb1h03qj74090n3mg8wfbh29qqrkdjkai6rnl5chll86lq";
+      "0.19.0" = "0ihgwl7d489g938m1jvgx8azdgq9f5np5mzqwwya797hx2m4dz32";
+      "0.20.0" = "sha256-JtmNCgwjbCyUE4bWqdH5Nc2YSit+rekwS43DcviIfgk=";
+      "0.20.1" = "sha256-fTpRZFQW+ngoc0T6A69reEUAZ6GmHkeQvxspd5zRAjU=";
+    }."${version}";
+  };
+  ocamlPackages =
+  if lib.versionAtLeast version "0.19.0"
+  then ocaml-ng.ocamlPackages
+  else if lib.versionAtLeast version "0.17.0"
+  then ocaml-ng.ocamlPackages_4_12
+  else if lib.versionAtLeast version "0.14.3"
+  then ocaml-ng.ocamlPackages_4_10
+  else ocaml-ng.ocamlPackages_4_07
+; in
+
+with ocamlPackages;
+
+buildDunePackage {
+  pname = "ocamlformat";
+  inherit src version;
+
+  minimumOCamlVersion =
+    if lib.versionAtLeast version "0.17.0"
+    then "4.08"
+    else "4.06";
+
+  useDune2 = true;
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    menhir
+  ];
+
+  buildInputs =
+    if lib.versionAtLeast version "0.20.0"
+    then [
+      base
+      cmdliner
+      dune-build-info
+      either
+      fix
+      fpath
+      menhirLib
+      menhirSdk
+      ocaml-version
+      ocp-indent
+      (if version == "0.20.0" then odoc-parser.override { version = "0.9.0"; } else odoc-parser)
+      re
+      stdio
+      uuseg
+      uutf
+    ]
+    else if lib.versionAtLeast version "0.19.0"
+    then [
+      base
+      cmdliner
+      fpath
+      re
+      stdio
+      uuseg
+      uutf
+      fix
+      menhirLib
+      menhirSdk
+      ocp-indent
+      dune-build-info
+      (odoc-parser.override { version = "0.9.0"; })
+    ]
+    else if lib.versionAtLeast version "0.18.0"
+    then [
+      base
+      cmdliner
+      fpath
+      odoc
+      re
+      stdio
+      uuseg
+      uutf
+      fix
+      menhirLib
+      menhirSdk
+      dune-build-info
+      ocaml-version
+      # Changed since 0.16.0:
+      (ppxlib.override { version = "0.22.0"; })
+    ]
+    else if lib.versionAtLeast version "0.17.0"
+    then [
+      base
+      cmdliner
+      fpath
+      odoc
+      re
+      stdio
+      uuseg
+      uutf
+      fix
+      menhirLib
+      menhirSdk
+      dune-build-info
+      ocaml-version
+      # Changed since 0.16.0:
+      (ppxlib.override { version = "0.22.0"; })
+      ocaml-migrate-parsetree-2
+    ]
+    else if lib.versionAtLeast version "0.15.1"
+    then [
+      base
+      cmdliner
+      fpath
+      odoc
+      re
+      stdio
+      uuseg
+      uutf
+      fix
+      menhirLib
+      menhirSdk
+      (ppxlib.override { version = "0.18.0"; })
+      dune-build-info # lib.versionAtLeast version "0.16.0"
+      ocaml-version # lib.versionAtLeast version "0.16.0"
+    ]
+    else if lib.versionAtLeast version "0.14"
+    then [
+      base
+      cmdliner
+      fpath
+      ocaml-migrate-parsetree
+      odoc
+      re
+      stdio
+      uuseg
+      uutf
+      fix
+      menhirLib
+      menhirSdk
+    ] else [
+      base
+      cmdliner
+      fpath
+      ocaml-migrate-parsetree
+      odoc
+      re
+      stdio
+      uuseg
+      uutf
+    ];
+
+  meta = {
+    homepage = "https://github.com/ocaml-ppx/ocamlformat";
+    description = "Auto-formatter for OCaml code";
+    maintainers = [ lib.maintainers.Zimmi48 lib.maintainers.marsam ];
+    license = 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..b40c8b42546b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlify/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, ocaml, findlib, ocamlbuild }:
+
+stdenv.mkDerivation rec {
+  pname = "ocamlify";
+  version = "0.0.2";
+
+  src = fetchurl {
+    url = "https://forge.ocamlcore.org/frs/download.php/1209/${pname}-${version}.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 = "https://forge.ocamlcore.org/projects/ocamlmod/ocamlmod";
+    description = "Generate OCaml modules from source files";
+    platforms = ocaml.meta.platforms or [];
+    license = lib.licenses.lgpl21;
+    maintainers = with lib.maintainers; [
+      maggesi
+    ];
+  };
+}
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..cf24a132210b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlmod/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, ocaml, findlib, ocamlbuild, ounit }:
+
+let
+  # ounit is only available for OCaml >= 4.04
+  doCheck = lib.versionAtLeast ocaml.version "4.04";
+in
+
+stdenv.mkDerivation {
+  pname = "ocamlmod";
+  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 ];
+
+  configurePhase = "ocaml setup.ml -configure --prefix $out"
+    + lib.optionalString doCheck " --enable-tests";
+  buildPhase     = "ocaml setup.ml -build";
+  installPhase   = "ocaml setup.ml -install";
+
+  inherit doCheck;
+  checkInputs = [ ounit ];
+
+  checkPhase = "ocaml setup.ml -test";
+
+  dontStrip = true;
+
+  meta = {
+    homepage = "https://forge.ocamlcore.org/projects/ocamlmod/ocamlmod";
+    description = "Generate OCaml modules from source files";
+    platforms = ocaml.meta.platforms or [];
+    maintainers = with lib.maintainers; [
+      maggesi
+    ];
+  };
+}
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..82a495b733b5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocamlscript/default.nix
@@ -0,0 +1,27 @@
+{lib, stdenv, fetchurl, ocaml, findlib, camlp4}:
+stdenv.mkDerivation rec {
+  pname = "ocamlscript";
+  version = "2.0.3";
+  src = fetchurl {
+    url = "https://mjambon.com/releases/${pname}/${pname}-${version}.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 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..583468521817
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocp-build/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, ocaml, findlib, ncurses, cmdliner, re }:
+
+stdenv.mkDerivation rec {
+  pname = "ocaml${ocaml.version}-ocp-build";
+  version = "1.99.21";
+
+  src = fetchFromGitHub {
+    owner = "OCamlPro";
+    repo = "ocp-build";
+    rev = "v${version}";
+    sha256 = "1641xzik98c7xnjwxpacijd6d9jzx340fmdn6i372z8h554jjlg9";
+  };
+
+  patches = [
+    # Fix compilation with OCaml 4.12
+    (fetchpatch {
+      url = "https://github.com/OCamlPro/ocp-build/commit/104e4656ca6dba9edb03b62539c9f1e10abcaae8.patch";
+      sha256 = "0sbyi4acig9q8x1ky4hckfg5pm2nad6zasi51ravaf1spgl148c2";
+    })
+  ];
+
+  buildInputs = [ ocaml findlib cmdliner re ];
+  propagatedBuildInputs = [ ncurses ];
+  preInstall = "mkdir -p $out/bin";
+
+  meta = with 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..29673d99dd0b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocp-indent/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, buildDunePackage, cmdliner }:
+
+buildDunePackage rec {
+  version = "1.8.2";
+  pname = "ocp-indent";
+
+  useDune2 = true;
+
+  src = fetchFromGitHub {
+    owner = "OCamlPro";
+    repo = "ocp-indent";
+    rev = version;
+    sha256 = "sha256-IyvURw/6R0eKrnahV1fqLV0iIeypykrmxDbliECgbLc=";
+  };
+
+  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..1ca8cfb5c52c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocp-index/default.nix
@@ -0,0 +1,30 @@
+{ lib, fetchFromGitHub, buildDunePackage, cppo, ocp-indent, cmdliner, re }:
+
+buildDunePackage rec {
+  pname = "ocp-index";
+  version = "1.3.1";
+
+  useDune2 = true;
+
+  src = fetchFromGitHub {
+    owner = "OCamlPro";
+    repo = "ocp-index";
+    rev = version;
+    sha256 = "120w72fqymjp6ibicbp31jyx9yv34mdvgkr0zdfpzvfb7lgd8rc7";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ cppo ];
+  buildInputs = [ cmdliner re ];
+
+  propagatedBuildInputs = [ ocp-indent ];
+
+  meta = {
+    homepage = "https://www.typerex.org/ocp-index.html";
+    description = "A simple and light-weight documentation extractor for OCaml";
+    changelog = "https://github.com/OCamlPro/ocp-index/raw/${version}/CHANGES.md";
+    license = lib.licenses.lgpl3;
+    maintainers = with 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..54e1ee55a7bf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/ocsigen-i18n/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, ocamlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "ocsigen-i18n";
+  version = "3.7.0";
+
+  buildInputs = with ocamlPackages; [ ocaml findlib ppx_tools ];
+
+  dontStrip = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    make bindir=$out/bin install
+  '';
+
+  src = fetchFromGitHub {
+    owner = "besport";
+    repo = "ocsigen-i18n";
+    rev = version;
+    sha256 = "sha256-PmdDyn+MUcNFrZpP/KLGQzdXUFRr+dYRAZjTZxHSeaw=";
+  };
+
+  meta = {
+    homepage = "https://github.com/besport/ocsigen-i18n";
+    description = "I18n made easy for web sites written with eliom";
+    license = lib.licenses.lgpl21;
+    maintainers = [ 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..090794b33116
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/omake/0.9.8.6-rc1.nix
@@ -0,0 +1,44 @@
+{lib, stdenv, fetchurl, makeWrapper, ocaml, ncurses}:
+let
+  pname = "omake";
+  version = "0.9.8.6-0.rc1";
+  webpage = "http://omake.metaprl.org";
+in
+
+if 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 ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ ocaml ncurses ];
+
+  dontInstall = true;
+  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..bcfd86a2d4de
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/omake/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, ocaml, ncurses }:
+
+stdenv.mkDerivation rec {
+
+  pname = "omake";
+  version = "0.10.3";
+
+  src = fetchurl {
+    url = "http://download.camlcity.org/download/${pname}-${version}.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 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..d9ba33bb473e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opaline/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, ocamlPackages }:
+
+stdenv.mkDerivation rec {
+  version = "0.3.2";
+  pname = "opaline";
+
+  src = fetchFromGitHub {
+    owner = "jaapb";
+    repo = "opaline";
+    rev = "v${version}";
+    sha256 = "1aj1fdqymq3pnr39h47hn3kxk5v9pnwx0jap1z2jzh78x970z21m";
+  };
+
+  nativeBuildInputs = with ocamlPackages; [ ocaml findlib ocamlbuild ];
+  buildInputs = with ocamlPackages; [ opam-file-format ];
+
+  preInstall = "mkdir -p $out/bin";
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "OPAm Light INstaller Engine";
+    license = lib.licenses.mit;
+    maintainers = [ 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..60804684ccbc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam/1.2.2.nix
@@ -0,0 +1,93 @@
+{ 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 {
+  pname = "opam";
+  version = "1.2.2";
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+  buildInputs = [ curl ncurses ocaml ];
+
+  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 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..aa7cced5016d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam/default.nix
@@ -0,0 +1,136 @@
+{ stdenv, lib, fetchurl, makeWrapper, getconf,
+  ocaml, unzip, ncurses, curl, aspcud, bubblewrap
+}:
+
+assert lib.versionAtLeast ocaml.version "4.02.3";
+
+let
+  srcs = {
+    "0install-solver" = fetchurl {
+      url = "https://github.com/0install/0install/releases/download/v2.17/0install-v2.17.tbz";
+      sha256 = "08q95mzmf9pyyqs68ff52422f834hi313cxmypwrxmxsabcfa10p";
+    };
+    "cmdliner" = fetchurl {
+      url = "http://erratique.ch/software/cmdliner/releases/cmdliner-1.0.4.tbz";
+      sha256 = "1h04q0zkasd0mw64ggh4y58lgzkhg6yhzy60lab8k8zq9ba96ajw";
+    };
+    "cppo" = fetchurl {
+      url = "https://github.com/ocaml-community/cppo/releases/download/v1.6.7/cppo-v1.6.7.tbz";
+      sha256 = "17ajdzrnmnyfig3s6hinb56mcmhywbssxhsq32dz0v90dhz3wmfv";
+    };
+    "cudf" = fetchurl {
+      url = "https://github.com/ocaml/opam-source-archives/raw/main/cudf-0.9.tar.gz";
+      sha256 = "0771lwljqwwn3cryl0plny5a5dyyrj4z6bw66ha5n8yfbpcy8clr";
+    };
+    "dose3" = fetchurl {
+      url = "https://gitlab.com/irill/dose3/-/archive/5.0.1/dose3-5.0.1.tar.gz";
+      sha256 = "1mh6fv8qbf8xx4h2dc0dpv2lzygvikzjhw1idrknibbwsjw3jg9c";
+    };
+    "dune-local" = fetchurl {
+      url = "https://github.com/ocaml/dune/releases/download/2.9.0/dune-2.9.0.tbz";
+      sha256 = "07m476kgagpd6kzm3jq30yfxqspr2hychah0xfqs14z82zxpq8dv";
+    };
+    "extlib" = fetchurl {
+      url = "https://ygrek.org/p/release/ocaml-extlib/extlib-1.7.7.tar.gz";
+      sha256 = "1sxmzc1mx3kg62j8kbk0dxkx8mkf1rn70h542cjzrziflznap0s1";
+    };
+    "mccs" = fetchurl {
+      url = "https://github.com/AltGr/ocaml-mccs/archive/1.1+13.tar.gz";
+      sha256 = "05nnji9h8mss3hzjr5faid2v3xfr7rcv2ywmpcxxp28y6h2kv9gv";
+    };
+    "ocamlgraph" = fetchurl {
+      url = "https://github.com/backtracking/ocamlgraph/releases/download/2.0.0/ocamlgraph-2.0.0.tbz";
+      sha256 = "029692bvdz3hxpva9a2jg5w5381fkcw55ysdi8424lyyjxvjdzi0";
+    };
+    "opam-0install-cudf" = fetchurl {
+      url = "https://github.com/ocaml-opam/opam-0install-solver/releases/download/v0.4.2/opam-0install-cudf-v0.4.2.tbz";
+      sha256 = "10wma4hh9l8hk49rl8nql6ixsvlz3163gcxspay5fwrpbg51fmxr";
+    };
+    "opam-file-format" = fetchurl {
+      url = "https://github.com/ocaml/opam-file-format/archive/2.1.3.tar.gz";
+      sha256 = "1bqyrlsvmjf4gqzmzbiyja9m1ph30ic9i18x23p5ziymyylw2sfg";
+    };
+    "re" = fetchurl {
+      url = "https://github.com/ocaml/ocaml-re/releases/download/1.9.0/re-1.9.0.tbz";
+      sha256 = "1gas4ky49zgxph3870nffzkr6y41kkpqp4nj38pz1gh49zcf12aj";
+    };
+    "result" = fetchurl {
+      url = "https://github.com/janestreet/result/releases/download/1.5/result-1.5.tbz";
+      sha256 = "0cpfp35fdwnv3p30a06wd0py3805qxmq3jmcynjc3x2qhlimwfkw";
+    };
+    "seq" = fetchurl {
+      url = "https://github.com/c-cube/seq/archive/0.2.2.tar.gz";
+      sha256 = "1ck15v3pg8bacdg6d6iyp2jc3kgrzxk5jsgzx3287x2ycb897j53";
+    };
+    "stdlib-shims" = fetchurl {
+      url = "https://github.com/ocaml/stdlib-shims/releases/download/0.3.0/stdlib-shims-0.3.0.tbz";
+      sha256 = "0jnqsv6pqp5b5g7lcjwgd75zqqvcwcl5a32zi03zg1kvj79p5gxs";
+    };
+    opam = fetchurl {
+      url = "https://github.com/ocaml/opam/archive/2.1.2.zip";
+      sha256 = "0yq3dgx869016xrf65xv0glmqill1nk2ad12x3l36l70pn90rmyd";
+    };
+  };
+in stdenv.mkDerivation {
+  pname = "opam";
+  version = "2.1.2";
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+  buildInputs = [ curl ncurses ocaml getconf ] ++ lib.optional stdenv.isLinux bubblewrap;
+
+  src = srcs.opam;
+
+  postUnpack = ''
+    ln -sv ${srcs."0install-solver"} $sourceRoot/src_ext/0install-solver.tbz
+    ln -sv ${srcs."cmdliner"} $sourceRoot/src_ext/cmdliner.tbz
+    ln -sv ${srcs."cppo"} $sourceRoot/src_ext/cppo.tbz
+    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.tbz
+    ln -sv ${srcs."opam-0install-cudf"} $sourceRoot/src_ext/opam-0install-cudf.tbz
+    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
+    ln -sv ${srcs."stdlib-shims"} $sourceRoot/src_ext/stdlib-shims.tbz
+  '';
+
+  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 lib; {
+    description = "A package manager for OCaml";
+    homepage = "https://opam.ocaml.org/";
+    maintainers = [ maintainers.henrytill maintainers.marsam ];
+    platforms = platforms.all;
+  };
+}
+# Generated by: ./opam.nix.pl -v 2.1.2 -p opam-shebangs.patch
diff --git a/nixpkgs/pkgs/development/tools/ocaml/opam/installer.nix b/nixpkgs/pkgs/development/tools/ocaml/opam/installer.nix
new file mode 100644
index 000000000000..4501ddd63f04
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam/installer.nix
@@ -0,0 +1,17 @@
+{ lib, unzip, opam, ocamlPackages }:
+
+ocamlPackages.buildDunePackage {
+  pname = "opam-installer";
+
+  useDune2 = true;
+
+  inherit (opam) version src;
+  nativeBuildInputs = [ unzip ];
+
+  configureFlags = [ "--disable-checks" "--prefix=$out" ];
+  buildInputs = with ocamlPackages; [ opam-format cmdliner ];
+
+  meta = opam.meta // {
+    description = "Handle (un)installation from opam install files";
+  };
+}
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..72efec0a9105
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam/opam-shebangs.patch
@@ -0,0 +1,131 @@
+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,14 +35,18 @@ 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 not_open_free_bsd_filter =
+   FNot (FOr (openbsd_filter,  freebsd_filter))
+ let win32_filter = os_filter "win32"
+ 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..c914bac8b5c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/opam/opam.nix.pl
@@ -0,0 +1,132 @@
+#!/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 =~ /^  "ocaml" {>= "(.*)"}$/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 {
+  pname = "opam";
+  version = "$OPAM_RELEASE";
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+  buildInputs = [ curl ncurses ocaml 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 lib; {
+    description = "A package manager for OCaml";
+    homepage = "https://opam.ocaml.org/";
+    maintainers = [ maintainers.henrytill maintainers.marsam ];
+    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..3e5471db5ae0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ocaml/utop/default.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv, fetchurl, ocaml, findlib
+, lambda-term, cppo, makeWrapper, buildDunePackage
+}:
+
+buildDunePackage rec {
+  pname = "utop";
+  version = "2.9.0";
+
+  useDune2 = true;
+
+  minimalOCamlVersion = "4.03";
+
+  src = fetchurl {
+    url = "https://github.com/ocaml-community/utop/releases/download/${version}/utop-${version}.tbz";
+    sha256 = "sha256:17jd61bc6pva5wqmnc9xq70ysyjplrzf1p25sq1s7wgrfq2vlyyd";
+  };
+
+  nativeBuildInputs = [ makeWrapper cppo ];
+
+  propagatedBuildInputs = [ lambda-term ];
+
+  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 {
+       pname = "utop-runtime-env";
+       inherit version;
+
+       buildInputs = [ findlib ] ++ propagatedBuildInputs;
+
+       dontUnpack = true;
+
+       installPhase = ''
+         mkdir -p "$out"/${path}
+         for e in OCAMLPATH CAML_LD_LIBRARY_PATH; do
+           [[ -v "$e" ]] || continue
+           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/${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 = lib.licenses.bsd3;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = [
+      lib.maintainers.gal_bolle
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ofono-phonesim/default.nix b/nixpkgs/pkgs/development/tools/ofono-phonesim/default.nix
new file mode 100644
index 000000000000..c9728f9cbbf6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ofono-phonesim/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, mkDerivation
+, fetchgit
+, autoreconfHook
+, pkg-config
+, qtbase
+}:
+
+mkDerivation {
+  pname = "ofono-phonesim";
+  version = "unstable-2019-11-18";
+
+  src = fetchgit {
+    url = "git://git.kernel.org/pub/scm/network/ofono/phonesim.git";
+    rev = "adf231a84cd3708b825dc82c56e841dd7e3b4541";
+    sha256 = "1840914sz46l8h2jwa0lymw6dvgj72wq9bhp3k4v4rk6masbf6hp";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    qtbase
+  ];
+
+  makeFlags = [
+    "MOC=${qtbase.dev}/bin/moc"
+    "UIC=${qtbase.dev}/bin/uic"
+  ];
+
+  meta = with lib; {
+    description = "Phone Simulator for modem testing";
+    homepage = "https://01.org/ofono";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/omniorb/default.nix b/nixpkgs/pkgs/development/tools/omniorb/default.nix
new file mode 100644
index 000000000000..4acf2264fc9c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/omniorb/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, python3
+}:
+
+stdenv.mkDerivation rec {
+
+  pname = "omniorb";
+  version = "4.3.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/omniorb/omniORB/omniORB-${version}/omniORB-${version}.tar.bz2";
+    hash = "sha256-l2BFojQfTpqFBosh9L2SiZMpKTPu7O/qNy2wngIZ6t0=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ python3 ];
+
+  enableParallelBuilding = true;
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "A robust high performance CORBA ORB for C++ and Python";
+    longDescription = ''
+      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     = with licenses; [ gpl2Plus lgpl21Plus ];
+    maintainers = with maintainers; [ smironov ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/omnisharp-roslyn/create-deps.sh b/nixpkgs/pkgs/development/tools/omnisharp-roslyn/create-deps.sh
new file mode 100755
index 000000000000..46cbb06951b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/omnisharp-roslyn/create-deps.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=../../../../.. -i bash -p dotnet-sdk_6 jq xmlstarlet curl
+set -euo pipefail
+
+cat << EOL
+{ fetchurl }: [
+EOL
+
+tmpdir="$(mktemp -d -p "$(pwd)")" # must be under source root
+trap 'rm -rf "$tmpdir"' EXIT
+
+mapfile -t repos < <(
+    xmlstarlet sel -t -v 'configuration/packageSources/add/@value' -n NuGet.Config |
+        while IFS= read index
+        do
+            curl --compressed -fsL "$index" | \
+                jq -r '.resources[] | select(."@type" == "PackageBaseAddress/3.0.0")."@id"'
+        done
+    )
+
+dotnet msbuild -t:restore -p:Configuration=Release -p:RestorePackagesPath="$tmpdir" \
+        -p:RestoreNoCache=true -p:RestoreForce=true \
+        src/OmniSharp.Stdio.Driver/OmniSharp.Stdio.Driver.csproj >&2
+
+cd "$tmpdir"
+for package in *
+do
+    cd "$package"
+    for version in *
+    do
+        found=false
+        for repo in "${repos[@]}"
+        do
+            url="$repo$package/$version/$package.$version.nupkg"
+            if curl -fsL "$url" -o /dev/null
+            then
+                found=true
+                break
+            fi
+        done
+
+        if ! $found
+        then
+            echo "couldn't find $package $version" >&2
+            exit 1
+        fi
+
+        sha256=$(nix-prefetch-url "$url" 2>/dev/null)
+        cat << EOL
+  {
+    pname = "$package";
+    version = "$version";
+    src = fetchurl {
+      url = "$url";
+      sha256 = "$sha256";
+    };
+  }
+EOL
+    done
+    cd ..
+done
+cd ..
+
+cat << EOL
+]
+EOL
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..1099e7cc800c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/omnisharp-roslyn/default.nix
@@ -0,0 +1,106 @@
+{ lib, stdenv
+, fetchFromGitHub
+, fetchurl
+, dotnetCorePackages
+, makeWrapper
+, unzip
+, writeText
+}:
+
+let
+
+  dotnet-sdk = dotnetCorePackages.sdk_6_0;
+
+  deps = map (package: stdenv.mkDerivation (with package; {
+    inherit pname version src;
+
+    buildInputs = [ unzip ];
+    unpackPhase = ''
+      unzip $src
+      chmod -R u+r .
+      function traverseRename () {
+        for e in *
+        do
+          t="$(echo "$e" | sed -e "s/%20/\ /g" -e "s/%2B/+/g")"
+          [ "$t" != "$e" ] && mv -vn "$e" "$t"
+          if [ -d "$t" ]
+          then
+            cd "$t"
+            traverseRename
+            cd ..
+          fi
+        done
+      }
+
+      traverseRename
+    '';
+
+    installPhase = ''
+      runHook preInstall
+
+      package=$out/lib/dotnet/${pname}/${version}
+      mkdir -p $package
+      cp -r . $package
+      echo "{}" > $package/.nupkg.metadata
+
+      runHook postInstall
+    '';
+
+    dontFixup = true;
+  }))
+    (import ./deps.nix { inherit fetchurl; });
+
+  nuget-config = writeText "NuGet.Config" ''
+    <?xml version="1.0" encoding="utf-8"?>
+    <configuration>
+      <packageSources>
+        <clear />
+      </packageSources>
+      <fallbackPackageFolders>
+        ${lib.concatStringsSep "\n" (map (package: "<add key=\"${package}\" value=\"${package}/lib/dotnet\"/>") deps)}
+      </fallbackPackageFolders>
+    </configuration>
+  '';
+
+in stdenv.mkDerivation rec {
+
+  pname = "omnisharp-roslyn";
+  version = "1.38.0";
+
+  src = fetchFromGitHub {
+    owner = "OmniSharp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "00V+7Z1IoCSuSM0RClM81IslzCzC/FNYxHIKtnI9QDg=";
+  };
+
+  nativeBuildInputs = [ makeWrapper dotnet-sdk ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    HOME=$(pwd)/fake-home dotnet msbuild -r \
+      -p:Configuration=Release \
+      -p:RestoreConfigFile=${nuget-config} \
+      src/OmniSharp.Stdio.Driver/OmniSharp.Stdio.Driver.csproj
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r bin/Release/OmniSharp.Stdio.Driver/net6.0 $out/src
+    makeWrapper $out/src/OmniSharp $out/bin/omnisharp \
+      --prefix DOTNET_ROOT : ${dotnet-sdk} \
+      --suffix PATH : ${dotnet-sdk}/bin
+  '';
+
+  meta = with lib; {
+    description = "OmniSharp based on roslyn workspaces";
+    homepage = "https://github.com/OmniSharp/omnisharp-roslyn";
+    platforms = platforms.unix;
+    license = licenses.mit;
+    maintainers = with maintainers; [ tesq0 ericdallo corngood ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/omnisharp-roslyn/deps.nix b/nixpkgs/pkgs/development/tools/omnisharp-roslyn/deps.nix
new file mode 100644
index 000000000000..47af76fdd4ac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/omnisharp-roslyn/deps.nix
@@ -0,0 +1,2738 @@
+{ fetchurl }: [
+  {
+    pname = "cake.scripting.abstractions";
+    version = "0.8.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/cake.scripting.abstractions/0.8.1/cake.scripting.abstractions.0.8.1.nupkg";
+      sha256 = "0hrr7a3z1qddfm21pp21wr94q2f85w5kq1gavn5dylajiaqz505c";
+    };
+  }
+  {
+    pname = "cake.scripting.transport";
+    version = "0.8.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/cake.scripting.transport/0.8.1/cake.scripting.transport.0.8.1.nupkg";
+      sha256 = "0pfpgyr62r74s9h4i3kdxb92d21x14pmvwa1bfk3v2s5qdb3fxj8";
+    };
+  }
+  {
+    pname = "dotnet.script.dependencymodel";
+    version = "1.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/dotnet.script.dependencymodel/1.1.0/dotnet.script.dependencymodel.1.1.0.nupkg";
+      sha256 = "0ly1jwvzndrhgvrwy7kagabyca40j8w9p5jvvfj4wlpffvxq44xl";
+    };
+  }
+  {
+    pname = "dotnet.script.dependencymodel.nuget";
+    version = "1.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/dotnet.script.dependencymodel.nuget/1.1.0/dotnet.script.dependencymodel.nuget.1.1.0.nupkg";
+      sha256 = "1kvjrm28jlfmcsy5fna8hy814chbcsc39ka12h8mgpdvjkr93njr";
+    };
+  }
+  {
+    pname = "humanizer.core";
+    version = "2.2.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/humanizer.core/2.2.0/humanizer.core.2.2.0.nupkg";
+      sha256 = "08mzg65y9d3zvq16rsmpapcdan71ggq2mpks6k777h3wlm2sh3p5";
+    };
+  }
+  {
+    pname = "icsharpcode.decompiler";
+    version = "7.1.0.6543";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/icsharpcode.decompiler/7.1.0.6543/icsharpcode.decompiler.7.1.0.6543.nupkg";
+      sha256 = "1xrajs5dcd7aqsg9ibhdcy39yrd8737kknkmqf907n7fqs2jxr46";
+    };
+  }
+  {
+    pname = "mcmaster.extensions.commandlineutils";
+    version = "3.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/mcmaster.extensions.commandlineutils/3.1.0/mcmaster.extensions.commandlineutils.3.1.0.nupkg";
+      sha256 = "075n1mfsxwz514r94l8i3ax0wp43c3xb4f9w25a96h6xxnj0k2hd";
+    };
+  }
+  {
+    pname = "mediatr";
+    version = "8.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/mediatr/8.1.0/mediatr.8.1.0.nupkg";
+      sha256 = "0cqx7yfh998xhsfk5pr6229lcjcs1jxxyqz7dwskc9jddl6a2akp";
+    };
+  }
+  {
+    pname = "microsoft.aspnetcore.app.runtime.win-arm64";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.win-arm64/6.0.0/microsoft.aspnetcore.app.runtime.win-arm64.6.0.0.nupkg";
+      sha256 = "0k2011d3jbfblfm4qspwjyv5pg1xqac408vblshgmf4sz7hlyzb3";
+    };
+  }
+  {
+    pname = "microsoft.aspnetcore.app.runtime.win-x64";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.win-x64/6.0.0/microsoft.aspnetcore.app.runtime.win-x64.6.0.0.nupkg";
+      sha256 = "1j8cn97swc67ly7ca7m05akczrswbg0gjsk7473vad6770ph79vm";
+    };
+  }
+  {
+    pname = "microsoft.aspnetcore.app.runtime.win-x86";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.win-x86/6.0.0/microsoft.aspnetcore.app.runtime.win-x86.6.0.0.nupkg";
+      sha256 = "0l64rphcqjwlbsxvfc8albzs494xyhl3bgw6ll68h3imhml193k5";
+    };
+  }
+  {
+    pname = "microsoft.bcl.asyncinterfaces";
+    version = "1.1.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.bcl.asyncinterfaces/1.1.1/microsoft.bcl.asyncinterfaces.1.1.1.nupkg";
+      sha256 = "0a1ahssqds2ympr7s4xcxv5y8jgxs7ahd6ah6fbgglj4rki1f1vw";
+    };
+  }
+  {
+    pname = "microsoft.bcl.asyncinterfaces";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.bcl.asyncinterfaces/5.0.0/microsoft.bcl.asyncinterfaces.5.0.0.nupkg";
+      sha256 = "0cp5jbax2mf6xr3dqiljzlwi05fv6n9a35z337s92jcljiq674kf";
+    };
+  }
+  {
+    pname = "microsoft.bcl.asyncinterfaces";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.bcl.asyncinterfaces/6.0.0/microsoft.bcl.asyncinterfaces.6.0.0.nupkg";
+      sha256 = "15gqy2m14fdlvy1g59207h5kisznm355kbw010gy19vh47z8gpz3";
+    };
+  }
+  {
+    pname = "microsoft.build";
+    version = "17.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.build/17.0.0/microsoft.build.17.0.0.nupkg";
+      sha256 = "166brl88y8xn9llc0hmn911k6y74gapmk1mrnfxbv73qj77jxsn1";
+    };
+  }
+  {
+    pname = "microsoft.build.framework";
+    version = "17.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.build.framework/17.0.0/microsoft.build.framework.17.0.0.nupkg";
+      sha256 = "08c257dmfa6n41lq4fxb34khi8jbwlqfy1168x7h7zsbh3wss7yq";
+    };
+  }
+  {
+    pname = "microsoft.build.locator";
+    version = "1.4.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.build.locator/1.4.1/microsoft.build.locator.1.4.1.nupkg";
+      sha256 = "0j119rri7a401rca67cxdyrn3rprzdl1b2wrblqc23xsff1xvlrx";
+    };
+  }
+  {
+    pname = "microsoft.build.tasks.core";
+    version = "17.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.build.tasks.core/17.0.0/microsoft.build.tasks.core.17.0.0.nupkg";
+      sha256 = "087mn3rz5plnj7abjqk2di5is35mmfgmdjf0kcdn7jld8rbhk5hx";
+    };
+  }
+  {
+    pname = "microsoft.build.tasks.git";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.build.tasks.git/1.0.0/microsoft.build.tasks.git.1.0.0.nupkg";
+      sha256 = "0avwja8vk56f2kr2pmrqx3h60bnwbs7ds062lhvhcxv87m5yfqnj";
+    };
+  }
+  {
+    pname = "microsoft.build.utilities.core";
+    version = "17.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.build.utilities.core/17.0.0/microsoft.build.utilities.core.17.0.0.nupkg";
+      sha256 = "0b7kylnvdqs81nmxdw7alwij8b19wm00iqicb9gkiklxjfyd8xav";
+    };
+  }
+  {
+    pname = "microsoft.codeanalysis.analyzers";
+    version = "3.3.2";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.analyzers/3.3.2/microsoft.codeanalysis.analyzers.3.3.2.nupkg";
+      sha256 = "162vb5894zxps0cf5n9gc08an7gwybzz87allx3lsszvllr9ldx4";
+    };
+  }
+  {
+    pname = "microsoft.codeanalysis.analyzerutilities";
+    version = "3.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.analyzerutilities/3.3.0/microsoft.codeanalysis.analyzerutilities.3.3.0.nupkg";
+      sha256 = "0b2xy6m3l1y6j2xc97cg5llia169jv4nszrrrqclh505gpw6qccz";
+    };
+  }
+  {
+    pname = "microsoft.codeanalysis.common";
+    version = "4.0.0-6.21526.21";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.common/4.0.0-6.21526.21/microsoft.codeanalysis.common.4.0.0-6.21526.21.nupkg";
+      sha256 = "0sv5hxadf9pbclssc9kq2cnvfkrnb0f2f4gmqhp2cy4xkr9fjn92";
+    };
+  }
+  {
+    pname = "microsoft.codeanalysis.csharp";
+    version = "4.0.0-6.21526.21";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.csharp/4.0.0-6.21526.21/microsoft.codeanalysis.csharp.4.0.0-6.21526.21.nupkg";
+      sha256 = "0cgp6rjw0lj3hr19sg5xvb5g29amrnng6y23rzcv5knw7a6zavs7";
+    };
+  }
+  {
+    pname = "microsoft.codeanalysis.csharp.features";
+    version = "4.0.0-6.21526.21";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.csharp.features/4.0.0-6.21526.21/microsoft.codeanalysis.csharp.features.4.0.0-6.21526.21.nupkg";
+      sha256 = "1a8xhrc4g2xlhmangcj0hv9872fw3zv1bcq52b54vczm6aym39pj";
+    };
+  }
+  {
+    pname = "microsoft.codeanalysis.csharp.scripting";
+    version = "4.0.0-6.21526.21";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.csharp.scripting/4.0.0-6.21526.21/microsoft.codeanalysis.csharp.scripting.4.0.0-6.21526.21.nupkg";
+      sha256 = "1mlf75v2nabfi9hwx9q2d14mcxlz3n8gdkczpyvvyfh3f72pl4x3";
+    };
+  }
+  {
+    pname = "microsoft.codeanalysis.csharp.workspaces";
+    version = "4.0.0-6.21526.21";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.csharp.workspaces/4.0.0-6.21526.21/microsoft.codeanalysis.csharp.workspaces.4.0.0-6.21526.21.nupkg";
+      sha256 = "04r6crnqml1c8mabsfrjzxc6bq6ndc9wwqwy8zsal80gwa54yj3v";
+    };
+  }
+  {
+    pname = "microsoft.codeanalysis.externalaccess.omnisharp";
+    version = "4.0.0-6.21526.21";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.externalaccess.omnisharp/4.0.0-6.21526.21/microsoft.codeanalysis.externalaccess.omnisharp.4.0.0-6.21526.21.nupkg";
+      sha256 = "1f7wp5829wz8nrafqwlr74p3xgw86591cl2d9dnhs8cp9p6y5ah9";
+    };
+  }
+  {
+    pname = "microsoft.codeanalysis.externalaccess.omnisharp.csharp";
+    version = "4.0.0-6.21526.21";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.externalaccess.omnisharp.csharp/4.0.0-6.21526.21/microsoft.codeanalysis.externalaccess.omnisharp.csharp.4.0.0-6.21526.21.nupkg";
+      sha256 = "1mc9h0svsqdrmr8bk1zgvjn1awc06mwhsp34q8grcb6n1w641hsp";
+    };
+  }
+  {
+    pname = "microsoft.codeanalysis.features";
+    version = "4.0.0-6.21526.21";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.features/4.0.0-6.21526.21/microsoft.codeanalysis.features.4.0.0-6.21526.21.nupkg";
+      sha256 = "0bg93pzv89v0s74mn52ng4cz2ys2bk8z96b3ml06r9wa3piz08la";
+    };
+  }
+  {
+    pname = "microsoft.codeanalysis.scripting.common";
+    version = "4.0.0-6.21526.21";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.scripting.common/4.0.0-6.21526.21/microsoft.codeanalysis.scripting.common.4.0.0-6.21526.21.nupkg";
+      sha256 = "0s5h10zj2qyfs0a09agdba06vc09pcq2wamr7pf8dx415vkjswyj";
+    };
+  }
+  {
+    pname = "microsoft.codeanalysis.workspaces.common";
+    version = "4.0.0-6.21526.21";
+    src = fetchurl {
+      url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.codeanalysis.workspaces.common/4.0.0-6.21526.21/microsoft.codeanalysis.workspaces.common.4.0.0-6.21526.21.nupkg";
+      sha256 = "0kp2l72zpfydfqv5cm8wqvk86wpgh946j8sw9hvhm3xwzflchl7b";
+    };
+  }
+  {
+    pname = "microsoft.csharp";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.csharp/4.0.1/microsoft.csharp.4.0.1.nupkg";
+      sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj";
+    };
+  }
+  {
+    pname = "microsoft.csharp";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.csharp/4.3.0/microsoft.csharp.4.3.0.nupkg";
+      sha256 = "0gw297dgkh0al1zxvgvncqs0j15lsna9l1wpqas4rflmys440xvb";
+    };
+  }
+  {
+    pname = "microsoft.diasymreader";
+    version = "1.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.diasymreader/1.3.0/microsoft.diasymreader.1.3.0.nupkg";
+      sha256 = "1nswah83z3pfibaqmjd8y96fgnkrak8005qqinc8nqs5mpkf5pfb";
+    };
+  }
+  {
+    pname = "microsoft.dotnet.platformabstractions";
+    version = "3.1.6";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.dotnet.platformabstractions/3.1.6/microsoft.dotnet.platformabstractions.3.1.6.nupkg";
+      sha256 = "0b9myd7gqbpaw9pkd2bx45jhik9mwj0f1ss57sk2cxmag2lkdws5";
+    };
+  }
+  {
+    pname = "microsoft.extensions.caching.abstractions";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.caching.abstractions/6.0.0/microsoft.extensions.caching.abstractions.6.0.0.nupkg";
+      sha256 = "0qn30d3pg4rx1x2k525jj4x5g1fxm2v5m0ksz2dmk1gmqalpask8";
+    };
+  }
+  {
+    pname = "microsoft.extensions.caching.memory";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.caching.memory/6.0.0/microsoft.extensions.caching.memory.6.0.0.nupkg";
+      sha256 = "0dq1x7962zsp926rj76i4akk4hsy7r5ldys8r4xsd78rq5f67rhq";
+    };
+  }
+  {
+    pname = "microsoft.extensions.configuration";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.configuration/2.0.0/microsoft.extensions.configuration.2.0.0.nupkg";
+      sha256 = "0yssxq9di5h6xw2cayp5hj3l9b2p0jw9wcjz73rwk4586spac9s9";
+    };
+  }
+  {
+    pname = "microsoft.extensions.configuration";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.configuration/6.0.0/microsoft.extensions.configuration.6.0.0.nupkg";
+      sha256 = "1zdyai2rzngmsp3706d12qrdk315c1s3ja218fzb3nc3wd1vz0s8";
+    };
+  }
+  {
+    pname = "microsoft.extensions.configuration.abstractions";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.configuration.abstractions/2.0.0/microsoft.extensions.configuration.abstractions.2.0.0.nupkg";
+      sha256 = "1ilz2yrgg9rbjyhn6a5zh9pr51nmh11z7sixb4p7vivgydj9gxwf";
+    };
+  }
+  {
+    pname = "microsoft.extensions.configuration.abstractions";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.configuration.abstractions/6.0.0/microsoft.extensions.configuration.abstractions.6.0.0.nupkg";
+      sha256 = "0w6wwxv12nbc3sghvr68847wc9skkdgsicrz3fx4chgng1i3xy0j";
+    };
+  }
+  {
+    pname = "microsoft.extensions.configuration.binder";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.configuration.binder/2.0.0/microsoft.extensions.configuration.binder.2.0.0.nupkg";
+      sha256 = "1prvdbma6r18n5agbhhabv6g357p1j70gq4m9g0vs859kf44nrgc";
+    };
+  }
+  {
+    pname = "microsoft.extensions.configuration.binder";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.configuration.binder/6.0.0/microsoft.extensions.configuration.binder.6.0.0.nupkg";
+      sha256 = "15hb2rbzgri1fq8wpj4ll7czm3rxqzszs02phnhjnncp90m5rmpc";
+    };
+  }
+  {
+    pname = "microsoft.extensions.configuration.commandline";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.configuration.commandline/6.0.0/microsoft.extensions.configuration.commandline.6.0.0.nupkg";
+      sha256 = "1hb4qrq9xdxzh2px515pv1vkz1jigwaxw1hfg9w8s6pgl8z04l4c";
+    };
+  }
+  {
+    pname = "microsoft.extensions.configuration.environmentvariables";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.configuration.environmentvariables/6.0.0/microsoft.extensions.configuration.environmentvariables.6.0.0.nupkg";
+      sha256 = "19w2vxliz1xangbach3hkx72x2pxqhc9n9c3kc3l8mhicl8w6vdl";
+    };
+  }
+  {
+    pname = "microsoft.extensions.configuration.fileextensions";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.configuration.fileextensions/6.0.0/microsoft.extensions.configuration.fileextensions.6.0.0.nupkg";
+      sha256 = "02nna984iwnyyz4jjh9vs405nlj0yk1g5vz4v2x30z2c89mx5f9w";
+    };
+  }
+  {
+    pname = "microsoft.extensions.configuration.json";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.configuration.json/6.0.0/microsoft.extensions.configuration.json.6.0.0.nupkg";
+      sha256 = "1c6l5szma1pdn61ncq1kaqibg0dz65hbma2xl626a8d1m6awn353";
+    };
+  }
+  {
+    pname = "microsoft.extensions.dependencyinjection";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.dependencyinjection/2.0.0/microsoft.extensions.dependencyinjection.2.0.0.nupkg";
+      sha256 = "018izzgykaqcliwarijapgki9kp2c560qv8qsxdjywr7byws5apq";
+    };
+  }
+  {
+    pname = "microsoft.extensions.dependencyinjection";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.dependencyinjection/6.0.0/microsoft.extensions.dependencyinjection.6.0.0.nupkg";
+      sha256 = "1wlhb2vygzfdjbdzy7waxblmrx0q3pdcqvpapnpmq9fcx5m8r6w1";
+    };
+  }
+  {
+    pname = "microsoft.extensions.dependencyinjection.abstractions";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.dependencyinjection.abstractions/2.0.0/microsoft.extensions.dependencyinjection.abstractions.2.0.0.nupkg";
+      sha256 = "1pwrfh9b72k9rq6mb2jab5qhhi225d5rjalzkapiayggmygc8nhz";
+    };
+  }
+  {
+    pname = "microsoft.extensions.dependencyinjection.abstractions";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.dependencyinjection.abstractions/6.0.0/microsoft.extensions.dependencyinjection.abstractions.6.0.0.nupkg";
+      sha256 = "1vi67fw7q99gj7jd64gnnfr4d2c0ijpva7g9prps48ja6g91x6a9";
+    };
+  }
+  {
+    pname = "microsoft.extensions.dependencymodel";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.dependencymodel/6.0.0/microsoft.extensions.dependencymodel.6.0.0.nupkg";
+      sha256 = "08c4fh1n8vsish1vh7h73mva34g0as4ph29s4lvps7kmjb4z64nl";
+    };
+  }
+  {
+    pname = "microsoft.extensions.fileproviders.abstractions";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.fileproviders.abstractions/6.0.0/microsoft.extensions.fileproviders.abstractions.6.0.0.nupkg";
+      sha256 = "1fbqmfapxdz77drcv1ndyj2ybvd2rv4c9i9pgiykcpl4fa6dc65q";
+    };
+  }
+  {
+    pname = "microsoft.extensions.fileproviders.physical";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.fileproviders.physical/6.0.0/microsoft.extensions.fileproviders.physical.6.0.0.nupkg";
+      sha256 = "1ikc3kf325xig6njbi2aj5kmww4xlaq9lsrpc8v764fsm4x10474";
+    };
+  }
+  {
+    pname = "microsoft.extensions.filesystemglobbing";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.filesystemglobbing/6.0.0/microsoft.extensions.filesystemglobbing.6.0.0.nupkg";
+      sha256 = "09gyyv4fwy9ys84z3aq4lm9y09b7bd1d4l4gfdinmg0z9678f1a4";
+    };
+  }
+  {
+    pname = "microsoft.extensions.logging";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.logging/2.0.0/microsoft.extensions.logging.2.0.0.nupkg";
+      sha256 = "1jkwjcq1ld9znz1haazk8ili2g4pzfdp6i7r7rki4hg3jcadn386";
+    };
+  }
+  {
+    pname = "microsoft.extensions.logging";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.logging/6.0.0/microsoft.extensions.logging.6.0.0.nupkg";
+      sha256 = "0fd9jii3y3irfcwlsiww1y9npjgabzarh33rn566wpcz24lijszi";
+    };
+  }
+  {
+    pname = "microsoft.extensions.logging.abstractions";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.logging.abstractions/2.0.0/microsoft.extensions.logging.abstractions.2.0.0.nupkg";
+      sha256 = "1x5isi71z02khikzvm7vaschb006pqqrsv86ky1x08a4hir4s43h";
+    };
+  }
+  {
+    pname = "microsoft.extensions.logging.abstractions";
+    version = "2.1.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.logging.abstractions/2.1.1/microsoft.extensions.logging.abstractions.2.1.1.nupkg";
+      sha256 = "1sgpwj0sa0ac7m5fnkb482mnch8fsv8hfbvk53c6lyh47s1xhdjg";
+    };
+  }
+  {
+    pname = "microsoft.extensions.logging.abstractions";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.logging.abstractions/6.0.0/microsoft.extensions.logging.abstractions.6.0.0.nupkg";
+      sha256 = "0b75fmins171zi6bfdcq1kcvyrirs8n91mknjnxy4c3ygi1rrnj0";
+    };
+  }
+  {
+    pname = "microsoft.extensions.logging.configuration";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.logging.configuration/6.0.0/microsoft.extensions.logging.configuration.6.0.0.nupkg";
+      sha256 = "0plx785hk61arjxf0m3ywy9hl5nii25raj4523n3ql7mmv6hxqr1";
+    };
+  }
+  {
+    pname = "microsoft.extensions.logging.console";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.logging.console/6.0.0/microsoft.extensions.logging.console.6.0.0.nupkg";
+      sha256 = "1383b0r33dzz0hrch9cqzzxr9vxr21qq0a5vnrpkfq71m2fky31d";
+    };
+  }
+  {
+    pname = "microsoft.extensions.options";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.options/2.0.0/microsoft.extensions.options.2.0.0.nupkg";
+      sha256 = "0g4zadlg73f507krilhaaa7h0jdga216syrzjlyf5fdk25gxmjqh";
+    };
+  }
+  {
+    pname = "microsoft.extensions.options";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.options/6.0.0/microsoft.extensions.options.6.0.0.nupkg";
+      sha256 = "008pnk2p50i594ahz308v81a41mbjz9mwcarqhmrjpl2d20c868g";
+    };
+  }
+  {
+    pname = "microsoft.extensions.options.configurationextensions";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.options.configurationextensions/2.0.0/microsoft.extensions.options.configurationextensions.2.0.0.nupkg";
+      sha256 = "1isc3rjbzz60f7wbmgcwslx5d10hm5hisnk7v54vfi2bz7132gll";
+    };
+  }
+  {
+    pname = "microsoft.extensions.options.configurationextensions";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.options.configurationextensions/6.0.0/microsoft.extensions.options.configurationextensions.6.0.0.nupkg";
+      sha256 = "1k6q91vrhq1r74l4skibn7wzxzww9l74ibxb2i8gg4q6fzbiivba";
+    };
+  }
+  {
+    pname = "microsoft.extensions.primitives";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.primitives/2.0.0/microsoft.extensions.primitives.2.0.0.nupkg";
+      sha256 = "1xppr5jbny04slyjgngxjdm0maxdh47vq481ps944d7jrfs0p3mb";
+    };
+  }
+  {
+    pname = "microsoft.extensions.primitives";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.primitives/6.0.0/microsoft.extensions.primitives.6.0.0.nupkg";
+      sha256 = "1kjiw6s4yfz9gm7mx3wkhp06ghnbs95icj9hi505shz9rjrg42q2";
+    };
+  }
+  {
+    pname = "microsoft.netcore.app.host.win-arm64";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.win-arm64/6.0.0/microsoft.netcore.app.host.win-arm64.6.0.0.nupkg";
+      sha256 = "1cbqpyha0ys7f6pm90mxmr0f070imhqfnn9kgvi3hqszbv9fv808";
+    };
+  }
+  {
+    pname = "microsoft.netcore.app.host.win-x64";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.win-x64/6.0.0/microsoft.netcore.app.host.win-x64.6.0.0.nupkg";
+      sha256 = "1016ld3kg4dav2yxxh0i32cy0ixv7s0wl9czydbhkbs2d8669kfx";
+    };
+  }
+  {
+    pname = "microsoft.netcore.app.host.win-x86";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.win-x86/6.0.0/microsoft.netcore.app.host.win-x86.6.0.0.nupkg";
+      sha256 = "19fyd762mhgjw6zr65hms0gi32pg0iinsrzz88i00n75y6cmyg36";
+    };
+  }
+  {
+    pname = "microsoft.netcore.app.runtime.win-arm64";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.win-arm64/6.0.0/microsoft.netcore.app.runtime.win-arm64.6.0.0.nupkg";
+      sha256 = "0jd3h6q09v4wfam9dbl6yfkjy6b7y1wn87gqv2gzf088q9hfc1mc";
+    };
+  }
+  {
+    pname = "microsoft.netcore.app.runtime.win-x64";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.win-x64/6.0.0/microsoft.netcore.app.runtime.win-x64.6.0.0.nupkg";
+      sha256 = "13x1nkigy3nhbr8gxalij7krmzxpciyq4i8k7jdy9278zs1lm5a6";
+    };
+  }
+  {
+    pname = "microsoft.netcore.app.runtime.win-x86";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.win-x86/6.0.0/microsoft.netcore.app.runtime.win-x86.6.0.0.nupkg";
+      sha256 = "0p0y3njb618l4ihbsh033jhd8yn1sp8gfhwn722my2166saisjg5";
+    };
+  }
+  {
+    pname = "microsoft.netcore.platforms";
+    version = "1.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.platforms/1.0.1/microsoft.netcore.platforms.1.0.1.nupkg";
+      sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr";
+    };
+  }
+  {
+    pname = "microsoft.netcore.platforms";
+    version = "1.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.platforms/1.1.0/microsoft.netcore.platforms.1.1.0.nupkg";
+      sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm";
+    };
+  }
+  {
+    pname = "microsoft.netcore.platforms";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.platforms/2.0.0/microsoft.netcore.platforms.2.0.0.nupkg";
+      sha256 = "1fk2fk2639i7nzy58m9dvpdnzql4vb8yl8vr19r2fp8lmj9w2jr0";
+    };
+  }
+  {
+    pname = "microsoft.netcore.platforms";
+    version = "2.1.2";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.platforms/2.1.2/microsoft.netcore.platforms.2.1.2.nupkg";
+      sha256 = "1507hnpr9my3z4w1r6xk5n0s1j3y6a2c2cnynj76za7cphxi1141";
+    };
+  }
+  {
+    pname = "microsoft.netcore.platforms";
+    version = "3.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.platforms/3.0.0/microsoft.netcore.platforms.3.0.0.nupkg";
+      sha256 = "1bk8r4r3ihmi6322jmcag14jmw11mjqys202azqjzglcx59pxh51";
+    };
+  }
+  {
+    pname = "microsoft.netcore.platforms";
+    version = "3.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.platforms/3.1.0/microsoft.netcore.platforms.3.1.0.nupkg";
+      sha256 = "1gc1x8f95wk8yhgznkwsg80adk1lc65v9n5rx4yaa4bc5dva0z3j";
+    };
+  }
+  {
+    pname = "microsoft.netcore.targets";
+    version = "1.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.targets/1.0.1/microsoft.netcore.targets.1.0.1.nupkg";
+      sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p";
+    };
+  }
+  {
+    pname = "microsoft.netcore.targets";
+    version = "1.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.targets/1.1.0/microsoft.netcore.targets.1.1.0.nupkg";
+      sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh";
+    };
+  }
+  {
+    pname = "microsoft.netframework.referenceassemblies";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netframework.referenceassemblies/1.0.0/microsoft.netframework.referenceassemblies.1.0.0.nupkg";
+      sha256 = "0na724xhvqm63vq9y18fl9jw9q2v99bdwr353378s5fsi11qzxp9";
+    };
+  }
+  {
+    pname = "microsoft.netframework.referenceassemblies.net472";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.netframework.referenceassemblies.net472/1.0.0/microsoft.netframework.referenceassemblies.net472.1.0.0.nupkg";
+      sha256 = "1bqinq2nxnpqxziypg1sqy3ly0nymxxjpn8fwkn3rl4vl6gdg3rc";
+    };
+  }
+  {
+    pname = "microsoft.net.stringtools";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.net.stringtools/1.0.0/microsoft.net.stringtools.1.0.0.nupkg";
+      sha256 = "06yakiyzgss399giivfx6xdrnfxqfsvy5fzm90scjanvandv0sdj";
+    };
+  }
+  {
+    pname = "microsoft.sourcelink.common";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.sourcelink.common/1.0.0/microsoft.sourcelink.common.1.0.0.nupkg";
+      sha256 = "1zxkpx01zdv17c39iiy8fx25ran89n14qwddh1f140v1s4dn8z9c";
+    };
+  }
+  {
+    pname = "microsoft.sourcelink.github";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.sourcelink.github/1.0.0/microsoft.sourcelink.github.1.0.0.nupkg";
+      sha256 = "029ixyaqn48cjza87m5qf0g1ynyhlm6irgbx1n09src9g666yhpd";
+    };
+  }
+  {
+    pname = "microsoft.testplatform.objectmodel";
+    version = "17.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.testplatform.objectmodel/17.0.0/microsoft.testplatform.objectmodel.17.0.0.nupkg";
+      sha256 = "1bh5scbvl6ndldqv20sl34h4y257irm9ziv2wyfc3hka6912fhn7";
+    };
+  }
+  {
+    pname = "microsoft.testplatform.translationlayer";
+    version = "17.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.testplatform.translationlayer/17.0.0/microsoft.testplatform.translationlayer.17.0.0.nupkg";
+      sha256 = "08c6d9aiicpj8hsjb77rz7d2vmw7ivkcc0l1vgdgxddzjhjpy0pi";
+    };
+  }
+  {
+    pname = "microsoft.visualstudio.sdk.embedinteroptypes";
+    version = "15.0.12";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.visualstudio.sdk.embedinteroptypes/15.0.12/microsoft.visualstudio.sdk.embedinteroptypes.15.0.12.nupkg";
+      sha256 = "083pva0a0xxvqqrjv75if25wr3rq034wgjhbax74zhzdb665nzsw";
+    };
+  }
+  {
+    pname = "microsoft.visualstudio.setup.configuration.interop";
+    version = "1.14.114";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.visualstudio.setup.configuration.interop/1.14.114/microsoft.visualstudio.setup.configuration.interop.1.14.114.nupkg";
+      sha256 = "062mqkmjf4k6zm3wi9ih0lzypfsnv82lgh88r35fj66akihn86gv";
+    };
+  }
+  {
+    pname = "microsoft.visualstudio.setup.configuration.interop";
+    version = "1.16.30";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.visualstudio.setup.configuration.interop/1.16.30/microsoft.visualstudio.setup.configuration.interop.1.16.30.nupkg";
+      sha256 = "14022lx03vdcqlvbbdmbsxg5pqfx1rfq2jywxlyaz9v68cvsb0g4";
+    };
+  }
+  {
+    pname = "microsoft.visualstudio.threading";
+    version = "16.7.56";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.visualstudio.threading/16.7.56/microsoft.visualstudio.threading.16.7.56.nupkg";
+      sha256 = "13x0xrsjxd86clf9cjjwmpzlyp8pkrf13riya7igs8zy93zw2qap";
+    };
+  }
+  {
+    pname = "microsoft.visualstudio.threading.analyzers";
+    version = "16.7.56";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.visualstudio.threading.analyzers/16.7.56/microsoft.visualstudio.threading.analyzers.16.7.56.nupkg";
+      sha256 = "04v9df0k7bsc0rzgkw4mnvi43pdrh42vk6xdcwn9m6im33m0nnz2";
+    };
+  }
+  {
+    pname = "microsoft.visualstudio.validation";
+    version = "15.5.31";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.visualstudio.validation/15.5.31/microsoft.visualstudio.validation.15.5.31.nupkg";
+      sha256 = "1ah99rn922qa0sd2k3h64m324f2r32pw8cn4cfihgvwx4qdrpmgw";
+    };
+  }
+  {
+    pname = "microsoft.win32.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.win32.primitives/4.3.0/microsoft.win32.primitives.4.3.0.nupkg";
+      sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq";
+    };
+  }
+  {
+    pname = "microsoft.win32.registry";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.win32.registry/4.3.0/microsoft.win32.registry.4.3.0.nupkg";
+      sha256 = "1gxyzxam8163vk1kb6xzxjj4iwspjsz9zhgn1w9rjzciphaz0ig7";
+    };
+  }
+  {
+    pname = "microsoft.win32.registry";
+    version = "4.6.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.win32.registry/4.6.0/microsoft.win32.registry.4.6.0.nupkg";
+      sha256 = "0i4y782yrqqyx85pg597m20gm0v126w0j9ddk5z7xb3crx4z9f2s";
+    };
+  }
+  {
+    pname = "microsoft.win32.systemevents";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/microsoft.win32.systemevents/4.7.0/microsoft.win32.systemevents.4.7.0.nupkg";
+      sha256 = "0pjll2a62hc576hd4wgyasva0lp733yllmk54n37svz5ac7nfz0q";
+    };
+  }
+  {
+    pname = "nerdbank.streams";
+    version = "2.6.81";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nerdbank.streams/2.6.81/nerdbank.streams.2.6.81.nupkg";
+      sha256 = "06wihcaga8537ibh0mkj28m720m6vzkqk562zkynhca85nd236yi";
+    };
+  }
+  {
+    pname = "netstandard.library";
+    version = "1.6.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/netstandard.library/1.6.1/netstandard.library.1.6.1.nupkg";
+      sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8";
+    };
+  }
+  {
+    pname = "netstandard.library";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/netstandard.library/2.0.0/netstandard.library.2.0.0.nupkg";
+      sha256 = "1bc4ba8ahgk15m8k4nd7x406nhi0kwqzbgjk2dmw52ss553xz7iy";
+    };
+  }
+  {
+    pname = "netstandard.library";
+    version = "2.0.3";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/netstandard.library/2.0.3/netstandard.library.2.0.3.nupkg";
+      sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y";
+    };
+  }
+  {
+    pname = "newtonsoft.json";
+    version = "11.0.2";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/newtonsoft.json/11.0.2/newtonsoft.json.11.0.2.nupkg";
+      sha256 = "1784xi44f4k8v1fr696hsccmwpy94bz7kixxqlri98zhcxn406b2";
+    };
+  }
+  {
+    pname = "newtonsoft.json";
+    version = "13.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/newtonsoft.json/13.0.1/newtonsoft.json.13.0.1.nupkg";
+      sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb";
+    };
+  }
+  {
+    pname = "newtonsoft.json";
+    version = "9.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/newtonsoft.json/9.0.1/newtonsoft.json.9.0.1.nupkg";
+      sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r";
+    };
+  }
+  {
+    pname = "nuget.common";
+    version = "5.2.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.common/5.2.0/nuget.common.5.2.0.nupkg";
+      sha256 = "14y7axpmdl9fg8jfc42gxpcq9wj8k3vzc07npmgjnzqlp5xjyyac";
+    };
+  }
+  {
+    pname = "nuget.common";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.common/6.0.0/nuget.common.6.0.0.nupkg";
+      sha256 = "0vbvmx2zzg54fv6617afi3z49cala70qj7jfxqnldjbc1z2c4b7r";
+    };
+  }
+  {
+    pname = "nuget.configuration";
+    version = "5.2.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.configuration/5.2.0/nuget.configuration.5.2.0.nupkg";
+      sha256 = "0b4dkym3vnj7qldnqqq6h6ry0gkql5c2ps5wy72b8s4fc3dmnvf1";
+    };
+  }
+  {
+    pname = "nuget.configuration";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.configuration/6.0.0/nuget.configuration.6.0.0.nupkg";
+      sha256 = "1qnrahn4rbb55ra4zg9c947kbm9wdiv344f12c3b4c5i7bfmivx3";
+    };
+  }
+  {
+    pname = "nuget.dependencyresolver.core";
+    version = "5.2.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.dependencyresolver.core/5.2.0/nuget.dependencyresolver.core.5.2.0.nupkg";
+      sha256 = "156yjfsk9pzqviiwy69lxfqf61yyj4hn4vdgfcbqvw4d567i150r";
+    };
+  }
+  {
+    pname = "nuget.dependencyresolver.core";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.dependencyresolver.core/6.0.0/nuget.dependencyresolver.core.6.0.0.nupkg";
+      sha256 = "04w7wbfsb647apqrrzx3gj2jjlg09wdzmxj62bx43ngr34i4q83n";
+    };
+  }
+  {
+    pname = "nuget.frameworks";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.frameworks/5.0.0/nuget.frameworks.5.0.0.nupkg";
+      sha256 = "18ijvmj13cwjdrrm52c8fpq021531zaz4mj4b4zapxaqzzxf2qjr";
+    };
+  }
+  {
+    pname = "nuget.frameworks";
+    version = "5.2.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.frameworks/5.2.0/nuget.frameworks.5.2.0.nupkg";
+      sha256 = "1fh4rp26m77jq5dyln68wz9qm217la9vv21amis2qvcy6gknk2wp";
+    };
+  }
+  {
+    pname = "nuget.frameworks";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.frameworks/6.0.0/nuget.frameworks.6.0.0.nupkg";
+      sha256 = "11p6mhh36s3vmnylfzw125fqivjk1xj75bvcxdav8n4sbk7d3gqs";
+    };
+  }
+  {
+    pname = "nuget.librarymodel";
+    version = "5.2.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.librarymodel/5.2.0/nuget.librarymodel.5.2.0.nupkg";
+      sha256 = "0vxd0y7rzzxvmxji9bzp95p2rx48303r3nqrlhmhhfc4z5fxjlqk";
+    };
+  }
+  {
+    pname = "nuget.librarymodel";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.librarymodel/6.0.0/nuget.librarymodel.6.0.0.nupkg";
+      sha256 = "0pg4m6v2j5vvld7s57fvx28ix7wlah6dakhi55qpavmkmnzp6g3f";
+    };
+  }
+  {
+    pname = "nuget.packaging";
+    version = "5.2.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.packaging/5.2.0/nuget.packaging.5.2.0.nupkg";
+      sha256 = "14frrbdkka9jd6g52bv4lbqnpckw09yynr08f9kfgbc3j8pklqqb";
+    };
+  }
+  {
+    pname = "nuget.packaging";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.packaging/6.0.0/nuget.packaging.6.0.0.nupkg";
+      sha256 = "0vlcda74h6gq3q569kbbz4n3d26vihxaldvvi2md3phqf8jpvhjb";
+    };
+  }
+  {
+    pname = "nuget.packaging.core";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.packaging.core/6.0.0/nuget.packaging.core.6.0.0.nupkg";
+      sha256 = "1kk7rf7cavdicxb4bmwcgwykr53nrk38m6r49hvs85jhhvg9jmyf";
+    };
+  }
+  {
+    pname = "nuget.projectmodel";
+    version = "5.2.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.projectmodel/5.2.0/nuget.projectmodel.5.2.0.nupkg";
+      sha256 = "1j23jk2zql52v2nqgi0k6d7z63pjjzrvw8y1s38zpf0sn7lzdr0h";
+    };
+  }
+  {
+    pname = "nuget.projectmodel";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.projectmodel/6.0.0/nuget.projectmodel.6.0.0.nupkg";
+      sha256 = "1fldxlw88jqgy0cfgfa7drqpxf909kfchcvk4nxj7vyhza2q715y";
+    };
+  }
+  {
+    pname = "nuget.protocol";
+    version = "5.2.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.protocol/5.2.0/nuget.protocol.5.2.0.nupkg";
+      sha256 = "1vlrrlcy7p2sf23wqax8mfhplnzppd73xqlr2g83ya056w0yf2rd";
+    };
+  }
+  {
+    pname = "nuget.protocol";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.protocol/6.0.0/nuget.protocol.6.0.0.nupkg";
+      sha256 = "16rs9hfra4bly8jp0lxsg0gbpi9wvxh7nrxrdkbjm01vb0azw823";
+    };
+  }
+  {
+    pname = "nuget.versioning";
+    version = "5.2.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.versioning/5.2.0/nuget.versioning.5.2.0.nupkg";
+      sha256 = "08ay8bhddj9yiq6h9lk814l65fpx5gh1iprkl7pcp78g57a6k45k";
+    };
+  }
+  {
+    pname = "nuget.versioning";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/nuget.versioning/6.0.0/nuget.versioning.6.0.0.nupkg";
+      sha256 = "0xxrz0p9vd2ax8hcrdxcp3h6gv8qcy6mngp49dvg1ijjjr1jb85k";
+    };
+  }
+  {
+    pname = "omnisharp.extensions.jsonrpc";
+    version = "0.19.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/omnisharp.extensions.jsonrpc/0.19.0/omnisharp.extensions.jsonrpc.0.19.0.nupkg";
+      sha256 = "0m9lw21iz90ayl35f24ir3vbiydf4sjqw590qqgwknykpzsi1ai2";
+    };
+  }
+  {
+    pname = "omnisharp.extensions.jsonrpc.generators";
+    version = "0.19.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/omnisharp.extensions.jsonrpc.generators/0.19.0/omnisharp.extensions.jsonrpc.generators.0.19.0.nupkg";
+      sha256 = "17akjdh9dnyxr01lnlsa41ca52psqnny8j3wxz904zs15pz932ln";
+    };
+  }
+  {
+    pname = "omnisharp.extensions.languageprotocol";
+    version = "0.19.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/omnisharp.extensions.languageprotocol/0.19.0/omnisharp.extensions.languageprotocol.0.19.0.nupkg";
+      sha256 = "06d4wakdaj42c9qnlhdyqrjnm97azp4hrvfg70f96ldl765y9vrf";
+    };
+  }
+  {
+    pname = "omnisharp.extensions.languageserver";
+    version = "0.19.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/omnisharp.extensions.languageserver/0.19.0/omnisharp.extensions.languageserver.0.19.0.nupkg";
+      sha256 = "0k1z3zchl1d82fj0ha63i54g5j046iaz8vb3cyxpjb6kp7zah28v";
+    };
+  }
+  {
+    pname = "omnisharp.extensions.languageserver.shared";
+    version = "0.19.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/omnisharp.extensions.languageserver.shared/0.19.0/omnisharp.extensions.languageserver.shared.0.19.0.nupkg";
+      sha256 = "0s3h9v5p043ip27g9jcvd0np9q3hn2pfv6gn539m45yb5d74a6i5";
+    };
+  }
+  {
+    pname = "runtime.any.system.collections";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.collections/4.3.0/runtime.any.system.collections.4.3.0.nupkg";
+      sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0";
+    };
+  }
+  {
+    pname = "runtime.any.system.diagnostics.tools";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.diagnostics.tools/4.3.0/runtime.any.system.diagnostics.tools.4.3.0.nupkg";
+      sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk";
+    };
+  }
+  {
+    pname = "runtime.any.system.diagnostics.tracing";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.diagnostics.tracing/4.3.0/runtime.any.system.diagnostics.tracing.4.3.0.nupkg";
+      sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn";
+    };
+  }
+  {
+    pname = "runtime.any.system.globalization";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.globalization/4.3.0/runtime.any.system.globalization.4.3.0.nupkg";
+      sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x";
+    };
+  }
+  {
+    pname = "runtime.any.system.globalization.calendars";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.globalization.calendars/4.3.0/runtime.any.system.globalization.calendars.4.3.0.nupkg";
+      sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201";
+    };
+  }
+  {
+    pname = "runtime.any.system.io";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.io/4.3.0/runtime.any.system.io.4.3.0.nupkg";
+      sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x";
+    };
+  }
+  {
+    pname = "runtime.any.system.reflection";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.reflection/4.3.0/runtime.any.system.reflection.4.3.0.nupkg";
+      sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly";
+    };
+  }
+  {
+    pname = "runtime.any.system.reflection.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.reflection.extensions/4.3.0/runtime.any.system.reflection.extensions.4.3.0.nupkg";
+      sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33";
+    };
+  }
+  {
+    pname = "runtime.any.system.reflection.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.reflection.primitives/4.3.0/runtime.any.system.reflection.primitives.4.3.0.nupkg";
+      sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf";
+    };
+  }
+  {
+    pname = "runtime.any.system.resources.resourcemanager";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.resources.resourcemanager/4.3.0/runtime.any.system.resources.resourcemanager.4.3.0.nupkg";
+      sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl";
+    };
+  }
+  {
+    pname = "runtime.any.system.runtime";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.runtime/4.3.0/runtime.any.system.runtime.4.3.0.nupkg";
+      sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b";
+    };
+  }
+  {
+    pname = "runtime.any.system.runtime.handles";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.runtime.handles/4.3.0/runtime.any.system.runtime.handles.4.3.0.nupkg";
+      sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x";
+    };
+  }
+  {
+    pname = "runtime.any.system.runtime.interopservices";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.runtime.interopservices/4.3.0/runtime.any.system.runtime.interopservices.4.3.0.nupkg";
+      sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19";
+    };
+  }
+  {
+    pname = "runtime.any.system.text.encoding";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.text.encoding/4.3.0/runtime.any.system.text.encoding.4.3.0.nupkg";
+      sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3";
+    };
+  }
+  {
+    pname = "runtime.any.system.text.encoding.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.text.encoding.extensions/4.3.0/runtime.any.system.text.encoding.extensions.4.3.0.nupkg";
+      sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8";
+    };
+  }
+  {
+    pname = "runtime.any.system.threading.tasks";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.threading.tasks/4.3.0/runtime.any.system.threading.tasks.4.3.0.nupkg";
+      sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va";
+    };
+  }
+  {
+    pname = "runtime.any.system.threading.timer";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.any.system.threading.timer/4.3.0/runtime.any.system.threading.timer.4.3.0.nupkg";
+      sha256 = "0aw4phrhwqz9m61r79vyfl5la64bjxj8l34qnrcwb28v49fg2086";
+    };
+  }
+  {
+    pname = "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d";
+    };
+  }
+  {
+    pname = "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59";
+    };
+  }
+  {
+    pname = "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa";
+    };
+  }
+  {
+    pname = "runtime.native.system";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.native.system/4.3.0/runtime.native.system.4.3.0.nupkg";
+      sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4";
+    };
+  }
+  {
+    pname = "runtime.native.system.io.compression";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.native.system.io.compression/4.3.0/runtime.native.system.io.compression.4.3.0.nupkg";
+      sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d";
+    };
+  }
+  {
+    pname = "runtime.native.system.net.http";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.native.system.net.http/4.3.0/runtime.native.system.net.http.4.3.0.nupkg";
+      sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk";
+    };
+  }
+  {
+    pname = "runtime.native.system.security.cryptography.apple";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.native.system.security.cryptography.apple/4.3.0/runtime.native.system.security.cryptography.apple.4.3.0.nupkg";
+      sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q";
+    };
+  }
+  {
+    pname = "runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.native.system.security.cryptography.openssl/4.3.0/runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97";
+    };
+  }
+  {
+    pname = "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3";
+    };
+  }
+  {
+    pname = "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf";
+    };
+  }
+  {
+    pname = "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg";
+      sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi";
+    };
+  }
+  {
+    pname = "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3";
+    };
+  }
+  {
+    pname = "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn";
+    };
+  }
+  {
+    pname = "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3";
+    };
+  }
+  {
+    pname = "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy";
+    };
+  }
+  {
+    pname = "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5";
+    };
+  }
+  {
+    pname = "runtime.win10-arm64.runtime.native.system.io.compression";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.win10-arm64.runtime.native.system.io.compression/4.3.0/runtime.win10-arm64.runtime.native.system.io.compression.4.3.0.nupkg";
+      sha256 = "1jrmrmqscn8cn2n3piar8n85gfsra7vlai23w9ldzprh0y4dw3v1";
+    };
+  }
+  {
+    pname = "runtime.win7.system.private.uri";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.win7.system.private.uri/4.3.0/runtime.win7.system.private.uri.4.3.0.nupkg";
+      sha256 = "0bxkcmklp556dc43bra8ngc8wymcbbflcydi0xwq0j22gm66xf2m";
+    };
+  }
+  {
+    pname = "runtime.win7-x64.runtime.native.system.io.compression";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.win7-x64.runtime.native.system.io.compression/4.3.0/runtime.win7-x64.runtime.native.system.io.compression.4.3.0.nupkg";
+      sha256 = "1dmbmksnxg12fk2p0k7rzy16448mddr2sfrnqs0rhhrzl0z22zi5";
+    };
+  }
+  {
+    pname = "runtime.win7-x86.runtime.native.system.io.compression";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.win7-x86.runtime.native.system.io.compression/4.3.0/runtime.win7-x86.runtime.native.system.io.compression.4.3.0.nupkg";
+      sha256 = "08ppln62lcq3bz2kyxqyvh98payd5a7w8fzmb53mznkcfv32n55b";
+    };
+  }
+  {
+    pname = "runtime.win.microsoft.win32.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.win.microsoft.win32.primitives/4.3.0/runtime.win.microsoft.win32.primitives.4.3.0.nupkg";
+      sha256 = "0k1h8nnp1s0p8rjwgjyj1387cc1yycv0k22igxc963lqdzrx2z36";
+    };
+  }
+  {
+    pname = "runtime.win.system.console";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.win.system.console/4.3.0/runtime.win.system.console.4.3.0.nupkg";
+      sha256 = "0x2yajfrbc5zc6g7nmlr44xpjk6p1hxjq47jn3xki5j7i33zw9jc";
+    };
+  }
+  {
+    pname = "runtime.win.system.diagnostics.debug";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.win.system.diagnostics.debug/4.3.0/runtime.win.system.diagnostics.debug.4.3.0.nupkg";
+      sha256 = "16fbn4bcynad1ygdq0yk1wmckvs8jvrrf104xa5dc2hlc8y3x58f";
+    };
+  }
+  {
+    pname = "runtime.win.system.io.filesystem";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.win.system.io.filesystem/4.3.0/runtime.win.system.io.filesystem.4.3.0.nupkg";
+      sha256 = "1c01nklbxywszsbfaxc76hsz7gdxac3jkphrywfkdsi3v4bwd6g8";
+    };
+  }
+  {
+    pname = "runtime.win.system.net.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.win.system.net.primitives/4.3.0/runtime.win.system.net.primitives.4.3.0.nupkg";
+      sha256 = "1dixh195bi7473n17hspll6i562gghdz9m4jk8d4kzi1mlzjk9cf";
+    };
+  }
+  {
+    pname = "runtime.win.system.net.sockets";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.win.system.net.sockets/4.3.0/runtime.win.system.net.sockets.4.3.0.nupkg";
+      sha256 = "0lr3zki831vs6qhk5wckv2b9qbfk9rcj0ds2926qvj1b9y9m6sck";
+    };
+  }
+  {
+    pname = "runtime.win.system.runtime.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/runtime.win.system.runtime.extensions/4.3.0/runtime.win.system.runtime.extensions.4.3.0.nupkg";
+      sha256 = "1700famsxndccfbcdz9q14qb20p49lax67mqwpgy4gx3vja1yczr";
+    };
+  }
+  {
+    pname = "sqlitepclraw.bundle_green";
+    version = "2.0.4";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/sqlitepclraw.bundle_green/2.0.4/sqlitepclraw.bundle_green.2.0.4.nupkg";
+      sha256 = "1197ynpm4fl6il9vi0mi1s1pmw3rk3j0a05kwrxpqlfgp7iwhc22";
+    };
+  }
+  {
+    pname = "sqlitepclraw.core";
+    version = "2.0.4";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/sqlitepclraw.core/2.0.4/sqlitepclraw.core.2.0.4.nupkg";
+      sha256 = "0lb5vwfl1hd24xzzdaj2p4k2hv2k0i3mgdri6fjj0ssb37mcyir1";
+    };
+  }
+  {
+    pname = "sqlitepclraw.lib.e_sqlite3";
+    version = "2.0.4";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/sqlitepclraw.lib.e_sqlite3/2.0.4/sqlitepclraw.lib.e_sqlite3.2.0.4.nupkg";
+      sha256 = "0kmx1w5qllmwxldr8338qxwmpfzc6g2lmyrah7wfaxd3mvfzky5c";
+    };
+  }
+  {
+    pname = "sqlitepclraw.provider.dynamic_cdecl";
+    version = "2.0.4";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/sqlitepclraw.provider.dynamic_cdecl/2.0.4/sqlitepclraw.provider.dynamic_cdecl.2.0.4.nupkg";
+      sha256 = "084r98kilpm0q1aw41idq8slncpd7cz65g0m1wr0p8d12x8z5g6j";
+    };
+  }
+  {
+    pname = "sqlitepclraw.provider.e_sqlite3";
+    version = "2.0.4";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/sqlitepclraw.provider.e_sqlite3/2.0.4/sqlitepclraw.provider.e_sqlite3.2.0.4.nupkg";
+      sha256 = "1vm8w8xvqi11sihdz5s6y4w7ghq4pp5f2ksixdhlbycvs6m4h7i7";
+    };
+  }
+  {
+    pname = "system.appcontext";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.appcontext/4.3.0/system.appcontext.4.3.0.nupkg";
+      sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya";
+    };
+  }
+  {
+    pname = "system.buffers";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.buffers/4.3.0/system.buffers.4.3.0.nupkg";
+      sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy";
+    };
+  }
+  {
+    pname = "system.buffers";
+    version = "4.4.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.buffers/4.4.0/system.buffers.4.4.0.nupkg";
+      sha256 = "183f8063w8zqn99pv0ni0nnwh7fgx46qzxamwnans55hhs2l0g19";
+    };
+  }
+  {
+    pname = "system.buffers";
+    version = "4.5.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.buffers/4.5.1/system.buffers.4.5.1.nupkg";
+      sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3";
+    };
+  }
+  {
+    pname = "system.codedom";
+    version = "4.4.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.codedom/4.4.0/system.codedom.4.4.0.nupkg";
+      sha256 = "1zgbafm5p380r50ap5iddp11kzhr9khrf2pnai6k593wjar74p1g";
+    };
+  }
+  {
+    pname = "system.collections";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.collections/4.0.11/system.collections.4.0.11.nupkg";
+      sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6";
+    };
+  }
+  {
+    pname = "system.collections";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.collections/4.3.0/system.collections.4.3.0.nupkg";
+      sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9";
+    };
+  }
+  {
+    pname = "system.collections.concurrent";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.collections.concurrent/4.3.0/system.collections.concurrent.4.3.0.nupkg";
+      sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8";
+    };
+  }
+  {
+    pname = "system.collections.immutable";
+    version = "1.5.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.collections.immutable/1.5.0/system.collections.immutable.1.5.0.nupkg";
+      sha256 = "1d5gjn5afnrf461jlxzawcvihz195gayqpcfbv6dd7pxa9ialn06";
+    };
+  }
+  {
+    pname = "system.collections.immutable";
+    version = "1.7.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.collections.immutable/1.7.1/system.collections.immutable.1.7.1.nupkg";
+      sha256 = "1nh4nlxfc7lbnbl86wwk1a3jwl6myz5j6hvgh5sp4krim9901hsq";
+    };
+  }
+  {
+    pname = "system.collections.immutable";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.collections.immutable/5.0.0/system.collections.immutable.5.0.0.nupkg";
+      sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r";
+    };
+  }
+  {
+    pname = "system.componentmodel.annotations";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.componentmodel.annotations/5.0.0/system.componentmodel.annotations.5.0.0.nupkg";
+      sha256 = "021h7x98lblq9avm1bgpa4i31c2kgsa7zn4sqhxf39g087ar756j";
+    };
+  }
+  {
+    pname = "system.componentmodel.composition";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.componentmodel.composition/4.5.0/system.componentmodel.composition.4.5.0.nupkg";
+      sha256 = "196ihd17in5idnxq5l5xvpa1fhqamnihjg3mcmv1k4n8bjrrj5y7";
+    };
+  }
+  {
+    pname = "system.composition";
+    version = "1.0.31";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.composition/1.0.31/system.composition.1.0.31.nupkg";
+      sha256 = "0aa27jz73qb0xm6dyxv22qhfrmyyqjyn2dvvsd9asi82lcdh9i61";
+    };
+  }
+  {
+    pname = "system.composition.attributedmodel";
+    version = "1.0.31";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.composition.attributedmodel/1.0.31/system.composition.attributedmodel.1.0.31.nupkg";
+      sha256 = "1ipyb86hvw754kmk47vjmzyilvj5hymg9nqabz70sbgsz1fygrdv";
+    };
+  }
+  {
+    pname = "system.composition.convention";
+    version = "1.0.31";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.composition.convention/1.0.31/system.composition.convention.1.0.31.nupkg";
+      sha256 = "00gqcdrql7vhynxh4xq0s9j5nw27kghmn2n773v7lhzjh3ash18r";
+    };
+  }
+  {
+    pname = "system.composition.hosting";
+    version = "1.0.31";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.composition.hosting/1.0.31/system.composition.hosting.1.0.31.nupkg";
+      sha256 = "1f1bnk3j7ndx9r7zpzibmrhw78clys1pspl20j2dhnmkiwhl23vy";
+    };
+  }
+  {
+    pname = "system.composition.runtime";
+    version = "1.0.31";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.composition.runtime/1.0.31/system.composition.runtime.1.0.31.nupkg";
+      sha256 = "1shfybfzsn4g6aim4pggb5ha31g0fz2kkk0519c4vj6m166g39ws";
+    };
+  }
+  {
+    pname = "system.composition.typedparts";
+    version = "1.0.31";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.composition.typedparts/1.0.31/system.composition.typedparts.1.0.31.nupkg";
+      sha256 = "1m4j19zx50lbbdx1xxbgpsd1dai2r3kzkyapw47kdvkb89qjkl63";
+    };
+  }
+  {
+    pname = "system.configuration.configurationmanager";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.configuration.configurationmanager/4.7.0/system.configuration.configurationmanager.4.7.0.nupkg";
+      sha256 = "0pav0n21ghf2ax6fiwjbng29f27wkb4a2ddma0cqx04s97yyk25d";
+    };
+  }
+  {
+    pname = "system.console";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.console/4.3.0/system.console.4.3.0.nupkg";
+      sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay";
+    };
+  }
+  {
+    pname = "system.diagnostics.debug";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.diagnostics.debug/4.0.11/system.diagnostics.debug.4.0.11.nupkg";
+      sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz";
+    };
+  }
+  {
+    pname = "system.diagnostics.debug";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.diagnostics.debug/4.3.0/system.diagnostics.debug.4.3.0.nupkg";
+      sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y";
+    };
+  }
+  {
+    pname = "system.diagnostics.diagnosticsource";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.diagnostics.diagnosticsource/4.3.0/system.diagnostics.diagnosticsource.4.3.0.nupkg";
+      sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq";
+    };
+  }
+  {
+    pname = "system.diagnostics.diagnosticsource";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.diagnostics.diagnosticsource/6.0.0/system.diagnostics.diagnosticsource.6.0.0.nupkg";
+      sha256 = "0rrihs9lnb1h6x4h0hn6kgfnh58qq7hx8qq99gh6fayx4dcnx3s5";
+    };
+  }
+  {
+    pname = "system.diagnostics.process";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.diagnostics.process/4.3.0/system.diagnostics.process.4.3.0.nupkg";
+      sha256 = "0g4prsbkygq8m21naqmcp70f24a1ksyix3dihb1r1f71lpi3cfj7";
+    };
+  }
+  {
+    pname = "system.diagnostics.tools";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.diagnostics.tools/4.0.1/system.diagnostics.tools.4.0.1.nupkg";
+      sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x";
+    };
+  }
+  {
+    pname = "system.diagnostics.tools";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.diagnostics.tools/4.3.0/system.diagnostics.tools.4.3.0.nupkg";
+      sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1";
+    };
+  }
+  {
+    pname = "system.diagnostics.tracing";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.diagnostics.tracing/4.3.0/system.diagnostics.tracing.4.3.0.nupkg";
+      sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4";
+    };
+  }
+  {
+    pname = "system.drawing.common";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.drawing.common/4.7.0/system.drawing.common.4.7.0.nupkg";
+      sha256 = "0yfw7cpl54mgfcylvlpvrl0c8r1b0zca6p7r3rcwkvqy23xqcyhg";
+    };
+  }
+  {
+    pname = "system.dynamic.runtime";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.dynamic.runtime/4.3.0/system.dynamic.runtime.4.3.0.nupkg";
+      sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk";
+    };
+  }
+  {
+    pname = "system.formats.asn1";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.formats.asn1/5.0.0/system.formats.asn1.5.0.0.nupkg";
+      sha256 = "1axc8z0839yvqi2cb63l73l6d9j6wd20lsbdymwddz9hvrsgfwpn";
+    };
+  }
+  {
+    pname = "system.globalization";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.globalization/4.0.11/system.globalization.4.0.11.nupkg";
+      sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d";
+    };
+  }
+  {
+    pname = "system.globalization";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.globalization/4.3.0/system.globalization.4.3.0.nupkg";
+      sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki";
+    };
+  }
+  {
+    pname = "system.globalization.calendars";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.globalization.calendars/4.3.0/system.globalization.calendars.4.3.0.nupkg";
+      sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq";
+    };
+  }
+  {
+    pname = "system.globalization.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.globalization.extensions/4.3.0/system.globalization.extensions.4.3.0.nupkg";
+      sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls";
+    };
+  }
+  {
+    pname = "system.io";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.io/4.1.0/system.io.4.1.0.nupkg";
+      sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp";
+    };
+  }
+  {
+    pname = "system.io";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.io/4.3.0/system.io.4.3.0.nupkg";
+      sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f";
+    };
+  }
+  {
+    pname = "system.io.compression";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.io.compression/4.3.0/system.io.compression.4.3.0.nupkg";
+      sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz";
+    };
+  }
+  {
+    pname = "system.io.compression.zipfile";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.io.compression.zipfile/4.3.0/system.io.compression.zipfile.4.3.0.nupkg";
+      sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar";
+    };
+  }
+  {
+    pname = "system.io.filesystem";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.io.filesystem/4.0.1/system.io.filesystem.4.0.1.nupkg";
+      sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1";
+    };
+  }
+  {
+    pname = "system.io.filesystem";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.io.filesystem/4.3.0/system.io.filesystem.4.3.0.nupkg";
+      sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw";
+    };
+  }
+  {
+    pname = "system.io.filesystem.primitives";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.io.filesystem.primitives/4.0.1/system.io.filesystem.primitives.4.0.1.nupkg";
+      sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612";
+    };
+  }
+  {
+    pname = "system.io.filesystem.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.io.filesystem.primitives/4.3.0/system.io.filesystem.primitives.4.3.0.nupkg";
+      sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c";
+    };
+  }
+  {
+    pname = "system.io.pipelines";
+    version = "4.7.3";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.io.pipelines/4.7.3/system.io.pipelines.4.7.3.nupkg";
+      sha256 = "0djp59x56klidi04xx8p5jc1nchv5zvd1d59diphqxwvgny3aawy";
+    };
+  }
+  {
+    pname = "system.io.pipelines";
+    version = "5.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.io.pipelines/5.0.1/system.io.pipelines.5.0.1.nupkg";
+      sha256 = "1zvfcd2l1d5qxifsqd0cjyv57nr61a9ac2ca5jinyqmj32wgjd6v";
+    };
+  }
+  {
+    pname = "system.linq";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.linq/4.1.0/system.linq.4.1.0.nupkg";
+      sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5";
+    };
+  }
+  {
+    pname = "system.linq";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.linq/4.3.0/system.linq.4.3.0.nupkg";
+      sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7";
+    };
+  }
+  {
+    pname = "system.linq.expressions";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.linq.expressions/4.1.0/system.linq.expressions.4.1.0.nupkg";
+      sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg";
+    };
+  }
+  {
+    pname = "system.linq.expressions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.linq.expressions/4.3.0/system.linq.expressions.4.3.0.nupkg";
+      sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv";
+    };
+  }
+  {
+    pname = "system.memory";
+    version = "4.5.3";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.memory/4.5.3/system.memory.4.5.3.nupkg";
+      sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a";
+    };
+  }
+  {
+    pname = "system.memory";
+    version = "4.5.4";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.memory/4.5.4/system.memory.4.5.4.nupkg";
+      sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y";
+    };
+  }
+  {
+    pname = "system.net.http";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.net.http/4.3.0/system.net.http.4.3.0.nupkg";
+      sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j";
+    };
+  }
+  {
+    pname = "system.net.http";
+    version = "4.3.4";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.net.http/4.3.4/system.net.http.4.3.4.nupkg";
+      sha256 = "0kdp31b8819v88l719j6my0yas6myv9d1viql3qz5577mv819jhl";
+    };
+  }
+  {
+    pname = "system.net.nameresolution";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.net.nameresolution/4.3.0/system.net.nameresolution.4.3.0.nupkg";
+      sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq";
+    };
+  }
+  {
+    pname = "system.net.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.net.primitives/4.3.0/system.net.primitives.4.3.0.nupkg";
+      sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii";
+    };
+  }
+  {
+    pname = "system.net.sockets";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.net.sockets/4.3.0/system.net.sockets.4.3.0.nupkg";
+      sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla";
+    };
+  }
+  {
+    pname = "system.net.websockets";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.net.websockets/4.3.0/system.net.websockets.4.3.0.nupkg";
+      sha256 = "1gfj800078kggcgl0xyl00a6y5k4wwh2k2qm69rjy22wbmq7fy4p";
+    };
+  }
+  {
+    pname = "system.numerics.vectors";
+    version = "4.4.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.numerics.vectors/4.4.0/system.numerics.vectors.4.4.0.nupkg";
+      sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba";
+    };
+  }
+  {
+    pname = "system.numerics.vectors";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.numerics.vectors/4.5.0/system.numerics.vectors.4.5.0.nupkg";
+      sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59";
+    };
+  }
+  {
+    pname = "system.objectmodel";
+    version = "4.0.12";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.objectmodel/4.0.12/system.objectmodel.4.0.12.nupkg";
+      sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj";
+    };
+  }
+  {
+    pname = "system.objectmodel";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.objectmodel/4.3.0/system.objectmodel.4.3.0.nupkg";
+      sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2";
+    };
+  }
+  {
+    pname = "system.private.uri";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.private.uri/4.3.0/system.private.uri.4.3.0.nupkg";
+      sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx";
+    };
+  }
+  {
+    pname = "system.reactive";
+    version = "4.4.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reactive/4.4.1/system.reactive.4.4.1.nupkg";
+      sha256 = "0gx8jh3hny2y5kijz5k9pxiqw481d013787c04zlhps21ygklw4a";
+    };
+  }
+  {
+    pname = "system.reflection";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection/4.1.0/system.reflection.4.1.0.nupkg";
+      sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9";
+    };
+  }
+  {
+    pname = "system.reflection";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection/4.3.0/system.reflection.4.3.0.nupkg";
+      sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m";
+    };
+  }
+  {
+    pname = "system.reflection.dispatchproxy";
+    version = "4.5.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.dispatchproxy/4.5.1/system.reflection.dispatchproxy.4.5.1.nupkg";
+      sha256 = "0cdnl4i9mfk7kx2ylglayqwqw7kl5k1xr8siaxch45hfyc2cpds8";
+    };
+  }
+  {
+    pname = "system.reflection.emit";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.emit/4.0.1/system.reflection.emit.4.0.1.nupkg";
+      sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp";
+    };
+  }
+  {
+    pname = "system.reflection.emit";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.emit/4.3.0/system.reflection.emit.4.3.0.nupkg";
+      sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74";
+    };
+  }
+  {
+    pname = "system.reflection.emit.ilgeneration";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.emit.ilgeneration/4.0.1/system.reflection.emit.ilgeneration.4.0.1.nupkg";
+      sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0";
+    };
+  }
+  {
+    pname = "system.reflection.emit.ilgeneration";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.emit.ilgeneration/4.3.0/system.reflection.emit.ilgeneration.4.3.0.nupkg";
+      sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q";
+    };
+  }
+  {
+    pname = "system.reflection.emit.lightweight";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.emit.lightweight/4.0.1/system.reflection.emit.lightweight.4.0.1.nupkg";
+      sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr";
+    };
+  }
+  {
+    pname = "system.reflection.emit.lightweight";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.emit.lightweight/4.3.0/system.reflection.emit.lightweight.4.3.0.nupkg";
+      sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c";
+    };
+  }
+  {
+    pname = "system.reflection.extensions";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.extensions/4.0.1/system.reflection.extensions.4.0.1.nupkg";
+      sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn";
+    };
+  }
+  {
+    pname = "system.reflection.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.extensions/4.3.0/system.reflection.extensions.4.3.0.nupkg";
+      sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq";
+    };
+  }
+  {
+    pname = "system.reflection.metadata";
+    version = "1.6.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.metadata/1.6.0/system.reflection.metadata.1.6.0.nupkg";
+      sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4";
+    };
+  }
+  {
+    pname = "system.reflection.metadata";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.metadata/5.0.0/system.reflection.metadata.5.0.0.nupkg";
+      sha256 = "17qsl5nanlqk9iz0l5wijdn6ka632fs1m1fvx18dfgswm258r3ss";
+    };
+  }
+  {
+    pname = "system.reflection.primitives";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.primitives/4.0.1/system.reflection.primitives.4.0.1.nupkg";
+      sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28";
+    };
+  }
+  {
+    pname = "system.reflection.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.primitives/4.3.0/system.reflection.primitives.4.3.0.nupkg";
+      sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276";
+    };
+  }
+  {
+    pname = "system.reflection.typeextensions";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.typeextensions/4.1.0/system.reflection.typeextensions.4.1.0.nupkg";
+      sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7";
+    };
+  }
+  {
+    pname = "system.reflection.typeextensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.reflection.typeextensions/4.3.0/system.reflection.typeextensions.4.3.0.nupkg";
+      sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1";
+    };
+  }
+  {
+    pname = "system.resources.extensions";
+    version = "4.6.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.resources.extensions/4.6.0/system.resources.extensions.4.6.0.nupkg";
+      sha256 = "0inch9jgchgmsg3xjivbhh9mpin40mhdd8dgf4i1p3g42i0hzc0j";
+    };
+  }
+  {
+    pname = "system.resources.resourcemanager";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.resources.resourcemanager/4.0.1/system.resources.resourcemanager.4.0.1.nupkg";
+      sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi";
+    };
+  }
+  {
+    pname = "system.resources.resourcemanager";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.resources.resourcemanager/4.3.0/system.resources.resourcemanager.4.3.0.nupkg";
+      sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49";
+    };
+  }
+  {
+    pname = "system.runtime";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime/4.1.0/system.runtime.4.1.0.nupkg";
+      sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m";
+    };
+  }
+  {
+    pname = "system.runtime";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime/4.3.0/system.runtime.4.3.0.nupkg";
+      sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7";
+    };
+  }
+  {
+    pname = "system.runtime.compilerservices.unsafe";
+    version = "4.4.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/4.4.0/system.runtime.compilerservices.unsafe.4.4.0.nupkg";
+      sha256 = "0a6ahgi5b148sl5qyfpyw383p3cb4yrkm802k29fsi4mxkiwir29";
+    };
+  }
+  {
+    pname = "system.runtime.compilerservices.unsafe";
+    version = "4.5.2";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/4.5.2/system.runtime.compilerservices.unsafe.4.5.2.nupkg";
+      sha256 = "1vz4275fjij8inf31np78hw50al8nqkngk04p3xv5n4fcmf1grgi";
+    };
+  }
+  {
+    pname = "system.runtime.compilerservices.unsafe";
+    version = "4.5.3";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/4.5.3/system.runtime.compilerservices.unsafe.4.5.3.nupkg";
+      sha256 = "1afi6s2r1mh1kygbjmfba6l4f87pi5sg13p4a48idqafli94qxln";
+    };
+  }
+  {
+    pname = "system.runtime.compilerservices.unsafe";
+    version = "4.7.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/4.7.1/system.runtime.compilerservices.unsafe.4.7.1.nupkg";
+      sha256 = "119br3pd85lq8zcgh4f60jzmv1g976q1kdgi3hvqdlhfbw6siz2j";
+    };
+  }
+  {
+    pname = "system.runtime.compilerservices.unsafe";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/5.0.0/system.runtime.compilerservices.unsafe.5.0.0.nupkg";
+      sha256 = "02k25ivn50dmqx5jn8hawwmz24yf0454fjd823qk6lygj9513q4x";
+    };
+  }
+  {
+    pname = "system.runtime.compilerservices.unsafe";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/6.0.0/system.runtime.compilerservices.unsafe.6.0.0.nupkg";
+      sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc";
+    };
+  }
+  {
+    pname = "system.runtime.extensions";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.extensions/4.1.0/system.runtime.extensions.4.1.0.nupkg";
+      sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z";
+    };
+  }
+  {
+    pname = "system.runtime.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.extensions/4.3.0/system.runtime.extensions.4.3.0.nupkg";
+      sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60";
+    };
+  }
+  {
+    pname = "system.runtime.handles";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.handles/4.0.1/system.runtime.handles.4.0.1.nupkg";
+      sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g";
+    };
+  }
+  {
+    pname = "system.runtime.handles";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.handles/4.3.0/system.runtime.handles.4.3.0.nupkg";
+      sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8";
+    };
+  }
+  {
+    pname = "system.runtime.interopservices";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.interopservices/4.1.0/system.runtime.interopservices.4.1.0.nupkg";
+      sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1";
+    };
+  }
+  {
+    pname = "system.runtime.interopservices";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.interopservices/4.3.0/system.runtime.interopservices.4.3.0.nupkg";
+      sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j";
+    };
+  }
+  {
+    pname = "system.runtime.interopservices.runtimeinformation";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.interopservices.runtimeinformation/4.0.0/system.runtime.interopservices.runtimeinformation.4.0.0.nupkg";
+      sha256 = "0glmvarf3jz5xh22iy3w9v3wyragcm4hfdr17v90vs7vcrm7fgp6";
+    };
+  }
+  {
+    pname = "system.runtime.interopservices.runtimeinformation";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.interopservices.runtimeinformation/4.3.0/system.runtime.interopservices.runtimeinformation.4.3.0.nupkg";
+      sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii";
+    };
+  }
+  {
+    pname = "system.runtime.interopservices.windowsruntime";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.interopservices.windowsruntime/4.3.0/system.runtime.interopservices.windowsruntime.4.3.0.nupkg";
+      sha256 = "0bpsy91yqm2ryp5y9li8p6yh4yrxcvg9zvm569ifw25rpy67bgp9";
+    };
+  }
+  {
+    pname = "system.runtime.numerics";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.numerics/4.3.0/system.runtime.numerics.4.3.0.nupkg";
+      sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z";
+    };
+  }
+  {
+    pname = "system.runtime.serialization.primitives";
+    version = "4.1.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.runtime.serialization.primitives/4.1.1/system.runtime.serialization.primitives.4.1.1.nupkg";
+      sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k";
+    };
+  }
+  {
+    pname = "system.security.accesscontrol";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.accesscontrol/4.5.0/system.security.accesscontrol.4.5.0.nupkg";
+      sha256 = "1wvwanz33fzzbnd2jalar0p0z3x0ba53vzx1kazlskp7pwyhlnq0";
+    };
+  }
+  {
+    pname = "system.security.accesscontrol";
+    version = "4.6.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.accesscontrol/4.6.0/system.security.accesscontrol.4.6.0.nupkg";
+      sha256 = "1wl1dyghi0qhpap1vgfhg2ybdyyhy9vc2a7dpm1xb30vfgmlkjmf";
+    };
+  }
+  {
+    pname = "system.security.accesscontrol";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.accesscontrol/4.7.0/system.security.accesscontrol.4.7.0.nupkg";
+      sha256 = "0n0k0w44flkd8j0xw7g3g3vhw7dijfm51f75xkm1qxnbh4y45mpz";
+    };
+  }
+  {
+    pname = "system.security.claims";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.claims/4.3.0/system.security.claims.4.3.0.nupkg";
+      sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn";
+    };
+  }
+  {
+    pname = "system.security.cryptography.algorithms";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.algorithms/4.3.0/system.security.cryptography.algorithms.4.3.0.nupkg";
+      sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml";
+    };
+  }
+  {
+    pname = "system.security.cryptography.algorithms";
+    version = "4.3.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.algorithms/4.3.1/system.security.cryptography.algorithms.4.3.1.nupkg";
+      sha256 = "1m2wnzg3m3c0s11jg4lshcl2a47d78zri8khc21yrz34jjkbyls2";
+    };
+  }
+  {
+    pname = "system.security.cryptography.cng";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.cng/4.3.0/system.security.cryptography.cng.4.3.0.nupkg";
+      sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv";
+    };
+  }
+  {
+    pname = "system.security.cryptography.cng";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.cng/4.7.0/system.security.cryptography.cng.4.7.0.nupkg";
+      sha256 = "00797sqbba8lys486ifxblz9j52m29kidclvmqpk531820k55x9j";
+    };
+  }
+  {
+    pname = "system.security.cryptography.cng";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.cng/5.0.0/system.security.cryptography.cng.5.0.0.nupkg";
+      sha256 = "06hkx2za8jifpslkh491dfwzm5dxrsyxzj5lsc0achb6yzg4zqlw";
+    };
+  }
+  {
+    pname = "system.security.cryptography.csp";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.csp/4.3.0/system.security.cryptography.csp.4.3.0.nupkg";
+      sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1";
+    };
+  }
+  {
+    pname = "system.security.cryptography.encoding";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.encoding/4.3.0/system.security.cryptography.encoding.4.3.0.nupkg";
+      sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32";
+    };
+  }
+  {
+    pname = "system.security.cryptography.openssl";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.openssl/4.3.0/system.security.cryptography.openssl.4.3.0.nupkg";
+      sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc";
+    };
+  }
+  {
+    pname = "system.security.cryptography.pkcs";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.pkcs/4.7.0/system.security.cryptography.pkcs.4.7.0.nupkg";
+      sha256 = "1mwvzl5ask8kk0vdgchhqr90nl61kagg47warb7dxrb03cxjd4wm";
+    };
+  }
+  {
+    pname = "system.security.cryptography.pkcs";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.pkcs/5.0.0/system.security.cryptography.pkcs.5.0.0.nupkg";
+      sha256 = "0hb2mndac3xrw3786bsjxjfh19bwnr991qib54k6wsqjhjyyvbwj";
+    };
+  }
+  {
+    pname = "system.security.cryptography.primitives";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.primitives/4.3.0/system.security.cryptography.primitives.4.3.0.nupkg";
+      sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby";
+    };
+  }
+  {
+    pname = "system.security.cryptography.protecteddata";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.protecteddata/4.3.0/system.security.cryptography.protecteddata.4.3.0.nupkg";
+      sha256 = "1kg264xmqabyz8gfg8ymp6qp6aw43vawfp0znf0909d7b5jd3dq9";
+    };
+  }
+  {
+    pname = "system.security.cryptography.protecteddata";
+    version = "4.4.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.protecteddata/4.4.0/system.security.cryptography.protecteddata.4.4.0.nupkg";
+      sha256 = "1q8ljvqhasyynp94a1d7jknk946m20lkwy2c3wa8zw2pc517fbj6";
+    };
+  }
+  {
+    pname = "system.security.cryptography.protecteddata";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.protecteddata/4.7.0/system.security.cryptography.protecteddata.4.7.0.nupkg";
+      sha256 = "1s1sh8k10s0apa09c5m2lkavi3ys90y657whg2smb3y8mpkfr5vm";
+    };
+  }
+  {
+    pname = "system.security.cryptography.x509certificates";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.x509certificates/4.3.0/system.security.cryptography.x509certificates.4.3.0.nupkg";
+      sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h";
+    };
+  }
+  {
+    pname = "system.security.cryptography.xml";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.xml/4.7.0/system.security.cryptography.xml.4.7.0.nupkg";
+      sha256 = "08c82yb1nhfqr15rrypc36c7pysp7jymkwnra84w72nd53h3dfgb";
+    };
+  }
+  {
+    pname = "system.security.permissions";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.permissions/4.5.0/system.security.permissions.4.5.0.nupkg";
+      sha256 = "192ww5rm3c9mirxgl1nzyrwd18am3izqls0hzm0fvcdjl5grvbhm";
+    };
+  }
+  {
+    pname = "system.security.permissions";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.permissions/4.7.0/system.security.permissions.4.7.0.nupkg";
+      sha256 = "13f366sj36jwbvld957gk2q64k2xbj48r8b0k9avrri2nlq1fs04";
+    };
+  }
+  {
+    pname = "system.security.principal";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.principal/4.3.0/system.security.principal.4.3.0.nupkg";
+      sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf";
+    };
+  }
+  {
+    pname = "system.security.principal.windows";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.principal.windows/4.3.0/system.security.principal.windows.4.3.0.nupkg";
+      sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr";
+    };
+  }
+  {
+    pname = "system.security.principal.windows";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.principal.windows/4.5.0/system.security.principal.windows.4.5.0.nupkg";
+      sha256 = "0rmj89wsl5yzwh0kqjgx45vzf694v9p92r4x4q6yxldk1cv1hi86";
+    };
+  }
+  {
+    pname = "system.security.principal.windows";
+    version = "4.6.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.principal.windows/4.6.0/system.security.principal.windows.4.6.0.nupkg";
+      sha256 = "1jmfzfz1n8hp63s5lja5xxpzkinbp6g59l3km9h8avjiisdrg5wm";
+    };
+  }
+  {
+    pname = "system.security.principal.windows";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.security.principal.windows/4.7.0/system.security.principal.windows.4.7.0.nupkg";
+      sha256 = "1a56ls5a9sr3ya0nr086sdpa9qv0abv31dd6fp27maqa9zclqq5d";
+    };
+  }
+  {
+    pname = "system.text.encoding";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.text.encoding/4.0.11/system.text.encoding.4.0.11.nupkg";
+      sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw";
+    };
+  }
+  {
+    pname = "system.text.encoding";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.text.encoding/4.3.0/system.text.encoding.4.3.0.nupkg";
+      sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr";
+    };
+  }
+  {
+    pname = "system.text.encoding.codepages";
+    version = "4.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.text.encoding.codepages/4.0.1/system.text.encoding.codepages.4.0.1.nupkg";
+      sha256 = "00wpm3b9y0k996rm9whxprngm8l500ajmzgy2ip9pgwk0icp06y3";
+    };
+  }
+  {
+    pname = "system.text.encoding.codepages";
+    version = "4.5.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.text.encoding.codepages/4.5.1/system.text.encoding.codepages.4.5.1.nupkg";
+      sha256 = "1z21qyfs6sg76rp68qdx0c9iy57naan89pg7p6i3qpj8kyzn921w";
+    };
+  }
+  {
+    pname = "system.text.encoding.extensions";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.text.encoding.extensions/4.0.11/system.text.encoding.extensions.4.0.11.nupkg";
+      sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs";
+    };
+  }
+  {
+    pname = "system.text.encoding.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.text.encoding.extensions/4.3.0/system.text.encoding.extensions.4.3.0.nupkg";
+      sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy";
+    };
+  }
+  {
+    pname = "system.text.encodings.web";
+    version = "5.0.1";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.text.encodings.web/5.0.1/system.text.encodings.web.5.0.1.nupkg";
+      sha256 = "00yg63qnp94q2qryxxggzigi276bibb8b3b96gcvsyrxy7b703n9";
+    };
+  }
+  {
+    pname = "system.text.encodings.web";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.text.encodings.web/6.0.0/system.text.encodings.web.6.0.0.nupkg";
+      sha256 = "06n9ql3fmhpjl32g3492sj181zjml5dlcc5l76xq2h38c4f87sai";
+    };
+  }
+  {
+    pname = "system.text.json";
+    version = "5.0.2";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.text.json/5.0.2/system.text.json.5.0.2.nupkg";
+      sha256 = "0vd0wd29cdhgcjngl9sw391sn2s8xm974y15zvym0whsdgjwiqfx";
+    };
+  }
+  {
+    pname = "system.text.json";
+    version = "6.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.text.json/6.0.0/system.text.json.6.0.0.nupkg";
+      sha256 = "1si2my1g0q0qv1hiqnji4xh9wd05qavxnzj9dwgs23iqvgjky0gl";
+    };
+  }
+  {
+    pname = "system.text.regularexpressions";
+    version = "4.1.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.text.regularexpressions/4.1.0/system.text.regularexpressions.4.1.0.nupkg";
+      sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7";
+    };
+  }
+  {
+    pname = "system.text.regularexpressions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.text.regularexpressions/4.3.0/system.text.regularexpressions.4.3.0.nupkg";
+      sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l";
+    };
+  }
+  {
+    pname = "system.threading";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.threading/4.0.11/system.threading.4.0.11.nupkg";
+      sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls";
+    };
+  }
+  {
+    pname = "system.threading";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.threading/4.3.0/system.threading.4.3.0.nupkg";
+      sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34";
+    };
+  }
+  {
+    pname = "system.threading.overlapped";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.threading.overlapped/4.3.0/system.threading.overlapped.4.3.0.nupkg";
+      sha256 = "1nahikhqh9nk756dh8p011j36rlcp1bzz3vwi2b4m1l2s3vz8idm";
+    };
+  }
+  {
+    pname = "system.threading.tasks";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.threading.tasks/4.0.11/system.threading.tasks.4.0.11.nupkg";
+      sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5";
+    };
+  }
+  {
+    pname = "system.threading.tasks";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.threading.tasks/4.3.0/system.threading.tasks.4.3.0.nupkg";
+      sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7";
+    };
+  }
+  {
+    pname = "system.threading.tasks.dataflow";
+    version = "5.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.threading.tasks.dataflow/5.0.0/system.threading.tasks.dataflow.5.0.0.nupkg";
+      sha256 = "028fimgwn5j9fv6m547c975a8b90d9qcnb89k5crjyspsnjcqbhy";
+    };
+  }
+  {
+    pname = "system.threading.tasks.extensions";
+    version = "4.0.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.threading.tasks.extensions/4.0.0/system.threading.tasks.extensions.4.0.0.nupkg";
+      sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr";
+    };
+  }
+  {
+    pname = "system.threading.tasks.extensions";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.threading.tasks.extensions/4.3.0/system.threading.tasks.extensions.4.3.0.nupkg";
+      sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z";
+    };
+  }
+  {
+    pname = "system.threading.tasks.extensions";
+    version = "4.5.3";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.threading.tasks.extensions/4.5.3/system.threading.tasks.extensions.4.5.3.nupkg";
+      sha256 = "0g7r6hm572ax8v28axrdxz1gnsblg6kszq17g51pj14a5rn2af7i";
+    };
+  }
+  {
+    pname = "system.threading.tasks.extensions";
+    version = "4.5.4";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.threading.tasks.extensions/4.5.4/system.threading.tasks.extensions.4.5.4.nupkg";
+      sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153";
+    };
+  }
+  {
+    pname = "system.threading.thread";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.threading.thread/4.3.0/system.threading.thread.4.3.0.nupkg";
+      sha256 = "0y2xiwdfcph7znm2ysxanrhbqqss6a3shi1z3c779pj2s523mjx4";
+    };
+  }
+  {
+    pname = "system.threading.threadpool";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.threading.threadpool/4.3.0/system.threading.threadpool.4.3.0.nupkg";
+      sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1";
+    };
+  }
+  {
+    pname = "system.threading.timer";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.threading.timer/4.3.0/system.threading.timer.4.3.0.nupkg";
+      sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56";
+    };
+  }
+  {
+    pname = "system.valuetuple";
+    version = "4.5.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.valuetuple/4.5.0/system.valuetuple.4.5.0.nupkg";
+      sha256 = "00k8ja51d0f9wrq4vv5z2jhq8hy31kac2rg0rv06prylcybzl8cy";
+    };
+  }
+  {
+    pname = "system.windows.extensions";
+    version = "4.7.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.windows.extensions/4.7.0/system.windows.extensions.4.7.0.nupkg";
+      sha256 = "11dmyx3j0jafjx5r9mkj1v4w2a4rzrdn8fgwm2d1g7fs1ayqcvy9";
+    };
+  }
+  {
+    pname = "system.xml.readerwriter";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.xml.readerwriter/4.0.11/system.xml.readerwriter.4.0.11.nupkg";
+      sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5";
+    };
+  }
+  {
+    pname = "system.xml.readerwriter";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.xml.readerwriter/4.3.0/system.xml.readerwriter.4.3.0.nupkg";
+      sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1";
+    };
+  }
+  {
+    pname = "system.xml.xdocument";
+    version = "4.0.11";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.xml.xdocument/4.0.11/system.xml.xdocument.4.0.11.nupkg";
+      sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18";
+    };
+  }
+  {
+    pname = "system.xml.xdocument";
+    version = "4.3.0";
+    src = fetchurl {
+      url = "https://api.nuget.org/v3-flatcontainer/system.xml.xdocument/4.3.0/system.xml.xdocument.4.3.0.nupkg";
+      sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/open-policy-agent/default.nix b/nixpkgs/pkgs/development/tools/open-policy-agent/default.nix
new file mode 100644
index 000000000000..66648faed1d8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/open-policy-agent/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+
+, enableWasmEval ? false
+}:
+
+buildGoModule rec {
+  pname = "open-policy-agent";
+  version = "0.38.1";
+
+  src = fetchFromGitHub {
+    owner = "open-policy-agent";
+    repo = "opa";
+    rev = "v${version}";
+    sha256 = "sha256-x8mSlZ2X0DdkhaW5QXs5axERJkwARu8tHueQHXfamXM=";
+  };
+  vendorSha256 = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" "-X github.com/open-policy-agent/opa/version.Version=${version}" ];
+
+  tags = lib.optional enableWasmEval (
+    builtins.trace
+      ("Warning: enableWasmEval breaks reproducability, "
+        + "ensure you need wasm evaluation. "
+        + "`opa build` does not need this feature.")
+      "opa_wasm");
+
+  preCheck = ''
+    # Feed in all but the e2e tests for testing
+    # This is because subPackages above limits what is built to just what we
+    # want but also limits the tests
+    getGoDirs() {
+      go list ./... | grep -v e2e
+    }
+
+    # Remove test case that fails on < go1.17
+    rm test/cases/testdata/cryptox509parsecertificates/test-cryptox509parsecertificates-0123.yaml
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd opa \
+      --bash <($out/bin/opa completion bash) \
+      --fish <($out/bin/opa completion fish) \
+      --zsh <($out/bin/opa completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/opa --help
+    $out/bin/opa version | grep "Version: ${version}"
+
+    ${lib.optionalString enableWasmEval ''
+      # If wasm is enabled verify it works
+      $out/bin/opa eval -t wasm 'trace("hello from wasm")'
+    ''}
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.openpolicyagent.org";
+    changelog = "https://github.com/open-policy-agent/opa/blob/v${version}/CHANGELOG.md";
+    description = "General-purpose policy engine";
+    longDescription = ''
+      The Open Policy Agent (OPA, pronounced "oh-pa") is an open source, general-purpose policy engine that unifies
+      policy enforcement across the stack. OPA provides a high-level declarative language that let’s you specify policy
+      as code and simple APIs to offload policy decision-making from your software. You can use OPA to enforce policies
+      in microservices, Kubernetes, CI/CD pipelines, API gateways, and more.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lewo jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/operator-sdk/default.nix b/nixpkgs/pkgs/development/tools/operator-sdk/default.nix
new file mode 100644
index 000000000000..0cad56864222
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/operator-sdk/default.nix
@@ -0,0 +1,36 @@
+{ buildGoModule, go, lib, fetchFromGitHub, makeWrapper }:
+
+buildGoModule rec {
+  pname = "operator-sdk";
+  version = "1.18.0";
+
+  src = fetchFromGitHub {
+    owner = "operator-framework";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-TamtjFnh+HT7JHcRTEpALdkXM9MyZGulb644bNr/BQI=";
+  };
+
+  vendorSha256 = "sha256-uci8/gQqLtjmxxqSlpgZhgBnvMotMvklNfwR+ua8H3M=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/operator-sdk" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ go ];
+
+  # operator-sdk uses the go compiler at runtime
+  allowGoReference = true;
+  postFixup = ''
+    wrapProgram $out/bin/operator-sdk --prefix PATH : ${lib.makeBinPath [ go ]}
+  '';
+
+  meta = with lib; {
+    description = "SDK for building Kubernetes applications. Provides high level APIs, useful abstractions, and project scaffolding";
+    homepage = "https://github.com/operator-framework/operator-sdk";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ arnarg ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/oq/default.nix b/nixpkgs/pkgs/development/tools/oq/default.nix
new file mode 100644
index 000000000000..32be12511612
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/oq/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, fetchFromGitHub
+, crystal
+, jq
+, libxml2
+, makeWrapper
+}:
+
+crystal.buildCrystalPackage rec {
+  pname = "oq";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "Blacksmoke16";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-iGKyP3NrAnR3ISOBq+YR/vwarlnIY4u4ZwdqSBnBC7U=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jq libxml2 ];
+
+  format = "shards";
+
+  postInstall = ''
+    wrapProgram "$out/bin/oq" \
+      --prefix PATH : "${lib.makeBinPath [ jq ]}"
+  '';
+
+  meta = with lib; {
+    description = "A performant, and portable jq wrapper";
+    homepage = "https://blacksmoke16.github.io/oq/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/oshka/default.nix b/nixpkgs/pkgs/development/tools/oshka/default.nix
new file mode 100644
index 000000000000..5e7ca5a7da2a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/oshka/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "oshka";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "k1LoW";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-fpWhqFK5h/U7DCC/SyhAlMyCMhjZHRLMlwakvlhOd3w=";
+  };
+
+  vendorSha256 = "sha256-ZBI3WDXfJKBEF2rmUN3LvOOPT1185dHmj88qJKsdUiE=";
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X github.com/k1LoW/oshka/version.Version=${version}"
+  ];
+
+  # Tests requires a running Docker instance
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool for extracting nested CI/CD supply chains and executing commands";
+    homepage = "https://github.com/k1LoW/oshka";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/osslsigncode/default.nix b/nixpkgs/pkgs/development/tools/osslsigncode/default.nix
new file mode 100644
index 000000000000..212a710de6e2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/osslsigncode/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, curl
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "osslsigncode";
+  version = "2.3";
+
+  src = fetchFromGitHub {
+    owner = "mtrojnar";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-KJyGDrT3dr8DfjfRrWIENoBFuiWrgQx4qz1V+mT8/yI=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ curl openssl ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mtrojnar/osslsigncode";
+    description = "OpenSSL based Authenticode signing for PE/MSI/Java CAB files";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ mmahut prusnak ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/out-of-tree/default.nix b/nixpkgs/pkgs/development/tools/out-of-tree/default.nix
new file mode 100644
index 000000000000..597d680cc2bb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/out-of-tree/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchgit, qemu, docker, which, makeWrapper }:
+
+buildGoModule rec {
+  pname = "out-of-tree";
+  version = "1.4.0";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchgit {
+    rev = "refs/tags/v${version}";
+    url = "https://code.dumpstack.io/tools/${pname}.git";
+    sha256 = "1rn824l3dzh3xjxsbzzj053qg1abhzjimc8l73r0n5qrl44k2qk2";
+  };
+
+  vendorSha256 = "0kg5c4h7xnwfcfshrh5n76xv98wzr73kxzr8q65iphsjimbxcpy3";
+
+  doCheck = false;
+
+  postFixup = ''
+    wrapProgram $out/bin/out-of-tree \
+      --prefix PATH : "${lib.makeBinPath [ qemu docker which ]}"
+  '';
+
+  meta = with lib; {
+    description = "kernel {module, exploit} development tool";
+    homepage = "https://out-of-tree.io";
+    maintainers = [ maintainers.dump_stack ];
+    license = licenses.agpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/overcommit/Gemfile b/nixpkgs/pkgs/development/tools/overcommit/Gemfile
new file mode 100644
index 000000000000..39325c7561b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/overcommit/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'overcommit'
diff --git a/nixpkgs/pkgs/development/tools/overcommit/Gemfile.lock b/nixpkgs/pkgs/development/tools/overcommit/Gemfile.lock
new file mode 100644
index 000000000000..9a6441e76b89
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/overcommit/Gemfile.lock
@@ -0,0 +1,17 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    childprocess (3.0.0)
+    iniparse (1.4.4)
+    overcommit (0.51.0)
+      childprocess (>= 0.6.3, < 4)
+      iniparse (~> 1.4)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  overcommit
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/overcommit/default.nix b/nixpkgs/pkgs/development/tools/overcommit/default.nix
new file mode 100644
index 000000000000..6b90160245d8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/overcommit/default.nix
@@ -0,0 +1,15 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "overcommit";
+  gemdir = ./.;
+  exes = [ "overcommit" ];
+
+  meta = with lib; {
+    description = "Tool to manage and configure Git hooks";
+    homepage    = "https://github.com/sds/overcommit";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/overcommit/gemset.nix b/nixpkgs/pkgs/development/tools/overcommit/gemset.nix
new file mode 100644
index 000000000000..95244c1afe6d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/overcommit/gemset.nix
@@ -0,0 +1,33 @@
+{
+  childprocess = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ic028k8xgm2dds9mqnvwwx3ibaz32j8455zxr9f4bcnviyahya5";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  iniparse = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xbik6838gfh5yq9ahh1m7dzszxlk0g7x5lvhb8amk60mafkrgws";
+      type = "gem";
+    };
+    version = "1.4.4";
+  };
+  overcommit = {
+    dependencies = ["childprocess" "iniparse"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fjrrm9dy9mry5ss96sizn6xcphia5l54ydz9c31phipm61nwmfk";
+      type = "gem";
+    };
+    version = "0.51.0";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/packer/default.nix b/nixpkgs/pkgs/development/tools/packer/default.nix
new file mode 100644
index 000000000000..d42bb9e2860a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/packer/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "packer";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = "packer";
+    rev = "v${version}";
+    sha256 = "sha256-rvOfDMALzZx8LfChgB3nC4GCTlSET43SkhW1EkA59zo=";
+  };
+
+  vendorSha256 = "sha256-ZQ+7F49VnpPtxWlZVBez2mpVCx8gIPEDKBD5qM9NcMo=";
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --zsh contrib/zsh-completion/_packer
+  '';
+
+  meta = with 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 ma27 techknowlogick ];
+    changelog   = "https://github.com/hashicorp/packer/blob/v${version}/CHANGELOG.md";
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/packet-sd/default.nix b/nixpkgs/pkgs/development/tools/packet-sd/default.nix
new file mode 100644
index 000000000000..f01d87be6e46
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/packet-sd/default.nix
@@ -0,0 +1,24 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+buildGoModule rec {
+  pname = "prometheus-packet-sd";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "packethost";
+    repo = "prometheus-packet-sd";
+    rev = "v${version}";
+    sha256 = "sha256-2k8AsmyhQNNZCzpVt6JdgvI8IFb5pRi4ic6Yn2NqHMM=";
+  };
+
+  vendorSha256 = null;
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Prometheus service discovery for Equinix Metal";
+    homepage = "https://github.com/packethost/prometheus-packet-sd";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/packet/default.nix b/nixpkgs/pkgs/development/tools/packet/default.nix
new file mode 100644
index 000000000000..61e9b210683f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/packet/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "packet";
+  version = "2.2.2";
+
+  goPackagePath = "github.com/ebsarr/packet";
+
+  src = fetchFromGitHub {
+    owner = "ebsarr";
+    repo = "packet";
+    rev = "v${version}";
+    sha256 = "sha256-jm9u+LQE48aqO6CLdLZAw38woH1phYnEYpEsRbNwyKI=";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "a CLI tool to manage packet.net services";
+    homepage = "https://github.com/ebsarr/packet";
+    license = licenses.mit;
+    maintainers = with maintainers; [ grahamc ];
+    platforms = 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/pactorio/default.nix b/nixpkgs/pkgs/development/tools/pactorio/default.nix
new file mode 100644
index 000000000000..e9ff420eea29
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pactorio/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, bzip2
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pactorio";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "figsoda";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-tRmchXDg8flvByjg6GLwwdwQgp/5NdZIgnjYgPLcLP8=";
+  };
+
+  cargoSha256 = "sha256-FIn+6wflDAjshP2Vz/rXRTrrjPQFW63XtXo8hBHMdkg=";
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  buildInputs = [ bzip2 ] ++ lib.optional stdenv.isDarwin Security;
+
+  postInstall = ''
+    completions=($releaseDir/build/pactorio-*/out/completions)
+    installShellCompletion $completions/pactorio.{bash,fish} --zsh $completions/_pactorio
+  '';
+
+  GEN_COMPLETIONS = 1;
+
+  meta = with lib; {
+    description = "Mod packager for factorio";
+    homepage = "https://github.com/figsoda/pactorio";
+    changelog = "https://github.com/figsoda/pactorio/blob/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pandoc/default.nix b/nixpkgs/pkgs/development/tools/pandoc/default.nix
new file mode 100644
index 000000000000..a61f39c15b67
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pandoc/default.nix
@@ -0,0 +1,37 @@
+{ haskellPackages, fetchpatch, haskell, removeReferencesTo }:
+
+let
+  static = haskell.lib.compose.justStaticExecutables haskellPackages.pandoc;
+
+in
+  (haskell.lib.compose.overrideCabal (drv: {
+    configureFlags = drv.configureFlags or [] ++ ["-fembed_data_files"];
+    buildDepends = drv.buildDepends or [] ++ [haskellPackages.file-embed];
+    buildTools = (drv.buildTools or []) ++ [ removeReferencesTo ];
+    patches = (drv.patches or []) ++ [
+      # Support citerefentry DocBook element.
+      # https://github.com/jgm/pandoc/pull/7437
+      (fetchpatch {
+        url = "https://github.com/jgm/pandoc/commit/06408d08e5ccf06a6a04c9b77470e6a67d98e52c.patch";
+        sha256 = "gOtrWVylzwgu0YLD4SztqlXxtaXXGOf8nTqLwUBS7qs=";
+      })
+    ];
+  }) static).overrideAttrs (drv: {
+
+    # These libraries are still referenced, because they generate
+    # a `Paths_*` module for figuring out their version.
+    # The `Paths_*` module is generated by Cabal, and contains the
+    # version, but also paths to e.g. the data directories, which
+    # lead to a transitive runtime dependency on the whole GHC distribution.
+    # This should ideally be fixed in haskellPackages (or even Cabal),
+    # but a minimal pandoc is important enough to patch it manually.
+    disallowedReferences = [ haskellPackages.pandoc-types haskellPackages.HTTP ];
+    postInstall = drv.postInstall or "" + ''
+      remove-references-to \
+        -t ${haskellPackages.pandoc-types} \
+        $out/bin/pandoc
+      remove-references-to \
+        -t ${haskellPackages.HTTP} \
+        $out/bin/pandoc
+    '';
+  })
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..61fa49b0adba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parinfer-rust/default.nix
@@ -0,0 +1,36 @@
+{ lib, rustPlatform, fetchFromGitHub, llvmPackages }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "parinfer-rust";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    owner = "eraserhd";
+    repo = "parinfer-rust";
+    rev = "v${version}";
+    sha256 = "0hj5in5h7pj72m4ag80ing513fh65q8xlsf341qzm3vmxm3y3jgd";
+  };
+
+  cargoSha256 = "1lam4gwzcj6w0pyxf61l2cpbvvf5gmj2gwi8dangnhd60qhlnvrx";
+
+  nativeBuildInputs = [ llvmPackages.clang ];
+  buildInputs = [ llvmPackages.libclang ];
+  LIBCLANG_PATH = "${llvmPackages.libclang.lib}/lib";
+
+  postInstall = ''
+    mkdir -p $out/share/kak/autoload/plugins
+    cp rc/parinfer.kak $out/share/kak/autoload/plugins/
+
+    rtpPath=$out/plugin
+    mkdir -p $rtpPath
+    sed "s,let s:libdir = .*,let s:libdir = '${placeholder "out"}/lib'," \
+      plugin/parinfer.vim > $rtpPath/parinfer.vim
+  '';
+
+  meta = with lib; {
+    description = "Infer parentheses for Clojure, Lisp, and Scheme";
+    homepage = "https://github.com/eraserhd/parinfer-rust";
+    license = licenses.isc;
+    maintainers = with maintainers; [ eraserhd ];
+  };
+}
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..33dbd0fec181
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parse-cli-bin/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "parse-cli-bin";
+  version = "3.0.5";
+
+  src = fetchurl {
+    url = "https://github.com/ParsePlatform/parse-cli/releases/download/release_${version}/parse_linux";
+    sha256 = "1iyfizbbxmr87wjgqiwqds51irgw6l3vm9wn89pc3zpj2zkyvf5h";
+  };
+
+  meta = with lib; {
+    description = "Parse Command Line Interface";
+    homepage    = "https://parse.com";
+    platforms   = platforms.linux;
+    license     = licenses.bsd3;
+  };
+
+  dontUnpack = true;
+
+  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..3fc1b2cd8661
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/2.7.7.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, jdk, python2 }:
+
+stdenv.mkDerivation rec {
+  pname = "antlr";
+  version = "2.7.7";
+  src = fetchurl {
+    url = "https://www.antlr2.org/download/antlr-${version}.tar.gz";
+    sha256 = "1ffvcwdw73id0dk6pj2mlxjvbg0662qacx4ylayqcxgg381fnfl5";
+  };
+  patches = [ ./2.7.7-fixes.patch ];
+  buildInputs = [ jdk ];
+  nativeBuildInputs = [ python2 ];
+
+  meta = with 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..962cd079a8e9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/3.4.nix
@@ -0,0 +1,39 @@
+{lib, stdenv, fetchurl, jre}:
+
+stdenv.mkDerivation rec {
+  pname = "antlr";
+  version = "3.4";
+  src = fetchurl {
+    url ="https://www.antlr3.org/download/antlr-${version}-complete.jar";
+    sha256 = "1xqbam8vf04q5fasb0m2n1pn5dbp2yw763sj492ncq04c5mqcglx";
+  };
+
+  dontUnpack = 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 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..cb6263aca424
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/3.5.nix
@@ -0,0 +1,52 @@
+{lib, stdenv, fetchpatch, fetchurl, fetchFromGitHub, jre}:
+
+stdenv.mkDerivation rec {
+  pname = "antlr";
+  version = "3.5.2";
+  jar = fetchurl {
+    url = "https://www.antlr3.org/download/antlr-${version}-complete.jar";
+    sha256 = "0srjwxipwsfzmpi0v32d1l5lzk9gi5in8ayg33sq8wyp8ygnbji6";
+  };
+  src = fetchFromGitHub {
+    owner = "antlr";
+    repo = "antlr3";
+    rev = "5c2a916a10139cdb5c7c8851ee592ed9c3b3d4ff";
+    sha256 = "1i0w2v9prrmczlwkfijfp4zfqfgrss90a7yk2hg3y0gkg2s4abbk";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/antlr3/raw/f1bb8d639678047935e1761c3bf3c1c7da8d0f1d/f/0006-antlr3memory.hpp-fix-for-C-20-mode.patch";
+      sha256 = "0apk904afjqbad6c7z9r72a9lkbz69vwrl8j2a6zgxjn8dfb2p8b";
+    })
+  ];
+
+  installPhase = ''
+    mkdir -p "$out"/{lib/antlr,bin,include}
+    cp "$jar" "$out/lib/antlr/antlr-${version}-complete.jar"
+    cp runtime/Cpp/include/* $out/include/
+
+    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 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;
+    maintainers = [ lib.maintainers.farlion ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/antlr/4.8.nix b/nixpkgs/pkgs/development/tools/parsing/antlr/4.8.nix
new file mode 100644
index 000000000000..0e69227aa786
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/4.8.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv, fetchurl, jre
+, fetchFromGitHub, cmake, ninja, pkg-config, libuuid, darwin }:
+
+let
+  version = "4.8";
+  source = fetchFromGitHub {
+    owner = "antlr";
+    repo = "antlr4";
+    rev = version;
+    sha256 = "1qal3add26qxskm85nk7r758arladn5rcyjinmhlhznmpbbv9j8m";
+  };
+
+  runtime = {
+    cpp = stdenv.mkDerivation {
+      pname = "antlr-runtime-cpp";
+      inherit version;
+      src = source;
+
+      outputs = [ "out" "dev" "doc" ];
+
+      nativeBuildInputs = [ cmake ninja pkg-config ];
+      buildInputs = lib.optional stdenv.isLinux libuuid
+        ++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.CoreFoundation;
+
+      # Install CMake config files, used to locate the runtime from another
+      # CMake project, using the find_package function.
+      cmakeFlags = [ "-DANTLR4_INSTALL=ON" ];
+
+      postUnpack = ''
+        export sourceRoot=$sourceRoot/runtime/Cpp
+      '';
+
+      meta = with lib; {
+        description = "C++ target for ANTLR 4";
+        homepage = "https://www.antlr.org/";
+        license = licenses.bsd3;
+        platforms = platforms.unix;
+      };
+    };
+  };
+
+  antlr = stdenv.mkDerivation {
+    pname = "antlr";
+    inherit version;
+
+    src = fetchurl {
+      url ="https://www.antlr.org/download/antlr-${version}-complete.jar";
+      sha256 = "0nms976cnqyr1ndng3haxkmknpdq6xli4cpf4x4al0yr21l9v93k";
+    };
+
+    dontUnpack = 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 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/4.9.nix b/nixpkgs/pkgs/development/tools/parsing/antlr/4.9.nix
new file mode 100644
index 000000000000..efc478ecd987
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/antlr/4.9.nix
@@ -0,0 +1,95 @@
+{ lib, stdenv, fetchurl, jre
+, fetchpatch, fetchFromGitHub, cmake, ninja, pkg-config, libuuid, utf8cpp, darwin }:
+
+let
+  version = "4.9.2";
+  source = fetchFromGitHub {
+    owner = "antlr";
+    repo = "antlr4";
+    rev = version;
+    sha256 = "0rpqgl2y22iiyg42y8jyiy2g7x421yf0q16cf17j76iai6y0bm5p";
+  };
+
+  runtime = {
+    cpp = stdenv.mkDerivation {
+      pname = "antlr-runtime-cpp";
+      inherit version;
+      src = source;
+
+      outputs = [ "out" "dev" "doc" ];
+
+      patches = [
+        (fetchpatch {
+          name = "use-utfcpp-from-system.patch";
+          url = "https://github.com/antlr/antlr4/commit/5a808b470e1314b63b0a921178040ccabb357945.patch";
+          sha256 = "0nq7iajy9inllcspyqpxskfg3k5s1fwm7ph75i8lfc25rl35k1w7";
+        })
+      ];
+
+      patchFlags = [ "-p3" ];
+
+      nativeBuildInputs = [ cmake ninja pkg-config ];
+      buildInputs = [ utf8cpp ]
+        ++ lib.optional stdenv.isLinux libuuid
+        ++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.CoreFoundation;
+
+      postUnpack = ''
+        export sourceRoot=$sourceRoot/runtime/Cpp
+      '';
+
+      meta = with lib; {
+        description = "C++ target for ANTLR 4";
+        homepage = "https://www.antlr.org/";
+        license = licenses.bsd3;
+        platforms = platforms.unix;
+      };
+    };
+  };
+
+  antlr = stdenv.mkDerivation {
+    pname = "antlr";
+    inherit version;
+
+    src = fetchurl {
+      url = "https://www.antlr.org/download/antlr-${version}-complete.jar";
+      sha256 = "1k9pw5gv2zhh06n1vys76kchlz4mz0vgv3iiba8w47b9fqa7n4dv";
+    };
+
+    dontUnpack = 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 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/default.nix b/nixpkgs/pkgs/development/tools/parsing/bison/default.nix
new file mode 100644
index 000000000000..3d2daba239a3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/bison/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, m4, perl, help2man }:
+
+# Note: this package is used for bootstrapping fetchurl, and thus
+# cannot use fetchpatch! All mutable patches (generated by GitHub or
+# cgit) that are needed here should be included directly in Nixpkgs as
+# files.
+
+stdenv.mkDerivation rec {
+  pname = "bison";
+  version = "3.8.2";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-BsnhO99+sk1M62tZIFpPZ8LH5yExGWREMP6C+9FKCrs=";
+  };
+
+  # gnulib relies on --host= to detect iconv() features on musl().
+  # Otherwise tests fail due to incorrect unicode symbol oconversion.
+  configurePlatforms = [ "build" "host" ];
+
+  nativeBuildInputs = [ m4 perl ] ++ lib.optional stdenv.isSunOS help2man;
+  propagatedBuildInputs = [ m4 ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+  doInstallCheck = true;
+
+  meta = {
+    homepage = "https://www.gnu.org/software/bison/";
+    description = "Yacc-compatible parser generator";
+    license = 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 = lib.platforms.unix;
+  };
+
+  passthru = { glrSupport = true; };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/bisonc++/default.nix b/nixpkgs/pkgs/development/tools/parsing/bisonc++/default.nix
new file mode 100644
index 000000000000..5a38c6679eb2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/bisonc++/default.nix
@@ -0,0 +1,55 @@
+{lib, stdenv, fetchurl, fetchFromGitLab
+, yodl, icmake, flexcpp, bobcat
+}:
+stdenv.mkDerivation rec {
+  pname = "bisonc++";
+  version = "6.04.00";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.com";
+    owner = "fbb-git";
+    repo = "bisoncpp";
+    rev = "6.04.00";
+    sha256 = "sha256:0aa9bij4g08ilsk6cgrbgi03vyhqr9fn6j2164sjin93m63212wl";
+  };
+
+  buildInputs = [ bobcat ];
+
+  nativeBuildInputs = [ yodl icmake flexcpp ];
+
+  setSourceRoot = ''
+    sourceRoot="$(echo */bisonc++)"
+  '';
+
+  gpl = fetchurl {
+    url = "https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt";
+    sha256 = "sha256:0hq6i0dm4420825fdm0lnnppbil6z67ls67n5kgjcd912dszjxw1";
+  };
+
+  postPatch = ''
+    substituteInPlace INSTALL.im --replace /usr $out
+    patchShebangs .
+    for file in $(find documentation -type f); do
+      substituteInPlace "$file" --replace /usr/share/common-licenses/GPL ${gpl}
+      substituteInPlace "$file" --replace /usr $out
+    done
+  '';
+
+  buildPhase = ''
+    ./build program
+    ./build man
+    ./build manual
+  '';
+
+  installPhase = ''
+    ./build install x
+  '';
+
+  meta = with lib; {
+    description = "A parser generator like bison, but it generates C++ code";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    homepage = "https://fbb-git.gitlab.io/bisoncpp/";
+  };
+}
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..90bd3f38c3b6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/byacc/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "byacc";
+  version = "20220128";
+
+  src = fetchurl {
+    urls = [
+      "ftp://ftp.invisible-island.net/byacc/${pname}-${version}.tgz"
+      "https://invisible-mirror.net/archives/byacc/${pname}-${version}.tgz"
+    ];
+    sha256 = "sha256-QsGAXMUpMU5qdjJv4bM+gMcIYqRLAUdNo2Li99stdJw=";
+  };
+
+  configureFlags = [
+    "--program-transform-name='s,^,b,'"
+  ];
+
+  doCheck = true;
+
+  postInstall = ''
+    ln -s $out/bin/byacc $out/bin/yacc
+  '';
+
+  meta = with 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..a80e75559df3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/flex/2.5.35.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, autoreconfHook, flex, bison, texinfo, help2man, m4 }:
+
+stdenv.mkDerivation rec {
+  pname = "flex";
+  version = "2.5.35";
+
+  src = fetchurl {
+    url = "https://github.com/westes/flex/archive/flex-${lib.replaceStrings ["."] ["-"] version}.tar.gz";
+    sha256 = "0wh06nix8bd4w1aq4k2fbbkdq5i30a9lxz3xczf3ff28yy0kfwzm";
+  };
+
+  postPatch = ''
+    patchShebangs tests
+  '';
+
+  nativeBuildInputs = [ flex bison texinfo help2man autoreconfHook ];
+
+  propagatedBuildInputs = [ m4 ];
+
+  preConfigure = lib.optionalString (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 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/default.nix b/nixpkgs/pkgs/development/tools/parsing/flex/default.nix
new file mode 100644
index 000000000000..58f0bb54fb1a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/flex/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv, buildPackages, fetchurl, bison, m4
+, autoreconfHook, help2man
+}:
+
+# Avoid 'fetchpatch' to allow 'flex' to be used as a possible 'gcc'
+# dependency during bootstrap. Useful when gcc is built from snapshot
+# or from a git tree (flex lexers are not pre-generated there).
+
+stdenv.mkDerivation rec {
+  pname = "flex";
+  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 = [(fetchurl {
+    name = "glibc-2.26.patch";
+    url = "https://raw.githubusercontent.com/lede-project/source/0fb14a2b1ab2f82ce63f4437b062229d73d90516/tools/flex/patches/200-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch";
+    sha256 = "0mpp41zdg17gx30kcpj83jl8hssks3adbks0qzbhcz882b9c083r";
+  })];
+
+  postPatch = ''
+    patchShebangs tests
+  '' + 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 = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    export ac_cv_func_malloc_0_nonnull=yes
+    export ac_cv_func_realloc_0_nonnull=yes
+  '';
+
+  postConfigure = lib.optionalString (stdenv.isDarwin || stdenv.isCygwin) ''
+    sed -i Makefile -e 's/-no-undefined//;'
+  '';
+
+  dontDisableStatic = stdenv.buildPlatform != stdenv.hostPlatform;
+
+  meta = with 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..e4db5631e7fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/flexc++/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, bobcat, icmake, yodl }:
+
+stdenv.mkDerivation rec {
+  pname = "flexc++";
+  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 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..402f83bea16b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/hammer/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchgit, glib, pkg-config, scons }:
+
+stdenv.mkDerivation {
+  pname = "hammer";
+  version = "e7aa734";
+
+  src = fetchgit {
+    url = "git://github.com/UpstandingHackers/hammer";
+    sha256 = "01l0wbhz7dymxlndacin2vi8sqwjlw81ds2i9xyi200w51nsdm38";
+    rev = "47f34b81e4de834fd3537dd71928c4f3cdb7f533";
+  };
+
+  nativeBuildInputs = [ pkg-config scons ];
+  buildInputs = [ glib ];
+
+  strictDeps = true;
+
+  meta = with 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/javacc/default.nix b/nixpkgs/pkgs/development/tools/parsing/javacc/default.nix
new file mode 100644
index 000000000000..d074e3dda93e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/javacc/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, fetchFromGitHub, ant, jdk }:
+
+stdenv.mkDerivation rec {
+  pname = "javacc";
+  version = "7.0.10";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "120jva4sw1kylkwgqf869zxddss01mcn1nmimx9vmd4xaadz7cf2";
+  };
+
+  nativeBuildInputs = [ ant jdk ];
+
+  buildPhase = ''
+    ant jar
+  '';
+
+  installPhase = ''
+    mkdir -p $out/target
+    mv scripts $out/bin
+    mv target/javacc.jar $out/target/
+  '';
+
+  meta = with lib; {
+    homepage = "https://javacc.github.io/javacc";
+    description = "A parser generator for building parsers from grammars";
+    license = licenses.bsd2;
+    maintainers = [ teams.deshaw.members ];
+  };
+}
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..8179855e6ebc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/jikespg/default.nix
@@ -0,0 +1,29 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "jikespg";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/jikes/${pname}-${version}.tar.gz";
+    sha256 = "083ibfxaiw1abxmv1crccx1g6sixkbyhxn2hsrlf6fwii08s6rgw";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile --replace "gcc" "${stdenv.cc.targetPrefix}cc"
+  '';
+
+  sourceRoot = "jikespg/src";
+
+  installPhase = ''
+    install -Dm755 -t $out/bin jikespg
+  '';
+
+  meta = with lib; {
+    homepage = "http://jikes.sourceforge.net/";
+    description = "The Jikes Parser Generator";
+    platforms = platforms.all;
+    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..04a1a637207d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/jshon/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch, jansson }:
+
+stdenv.mkDerivation rec {
+  pname = "jshon";
+  version = "20170302";
+
+  src = fetchFromGitHub {
+    owner = "keenerd";
+    repo = "jshon";
+    rev = "d919aeaece37962251dbe6c1ee50f0028a5c90e4";
+    sha256 = "1x4zfmsjq0l2y994bxkhx3mn5vzjxxr39iib213zjchi9h6yxvnc";
+  };
+
+  buildInputs = [ jansson ];
+
+  patches = [
+    (fetchpatch {
+      # https://github.com/keenerd/jshon/pull/62
+      url = "https://github.com/keenerd/jshon/commit/96b4e9dbf578be7b31f29740b608aa7b34df3318.patch";
+      sha256 = "0kwbn3xb37iqb5y1n8vhzjiwlbg5jmki3f38pzakc24kzc5ksmaa";
+    })
+  ];
+
+  postPatch =
+    ''
+      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..9c8786950d22
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/lemon/default.nix
@@ -0,0 +1,45 @@
+{ lib, 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 {
+  pname = "lemon";
+  version = "1.69";
+
+  dontUnpack = true;
+
+  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 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..d53eec12e806
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/peg/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "peg";
+  version = "0.1.18";
+
+  src = fetchurl {
+    url = "${meta.homepage}/${pname}-${version}.tar.gz";
+    sha256 = "114h1y4k8fwcq9m0hfk33dsp7ah8zxzjjzlk71x4iirzczfkn690";
+  };
+
+  preBuild="makeFlagsArray+=( PREFIX=$out )";
+
+  meta = with lib; {
+    homepage = "http://piumarta.com/software/peg/";
+    description = "Tools for generating recursive-descent parsers: programs that perform pattern matching on text";
+    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..8e000cd0fc29
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/ragel/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, fig2dev, tex, ghostscript, colm
+, build-manual ? false
+}:
+
+let
+  generic = { version, sha256, license }:
+    stdenv.mkDerivation rec {
+      pname = "ragel";
+      inherit version;
+
+      src = fetchurl {
+        url = "https://www.colm.net/files/ragel/${pname}-${version}.tar.gz";
+        inherit sha256;
+      };
+
+      buildInputs = lib.optional build-manual [ fig2dev ghostscript tex ];
+
+      preConfigure = lib.optionalString build-manual ''
+        sed -i "s/build_manual=no/build_manual=yes/g" DIST
+      '';
+
+      configureFlags = [ "--with-colm=${colm}" ];
+
+      NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isGNU "-std=gnu++98";
+
+      doCheck = true;
+
+      meta = with 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 = lib.licenses.gpl2;
+  };
+
+  ragelDev = generic {
+    version = "7.0.0.12";
+    sha256 = "0x3si355lv6q051lgpg8bpclpiq5brpri5lv3p8kk2qhzfbyz69r";
+    license = 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..41ec653a409b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/re2c/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, nix-update-script
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "re2c";
+  version = "3.0";
+
+  src = fetchFromGitHub {
+    owner  = "skvadrik";
+    repo   = "re2c";
+    rev    = version;
+    sha256 = "sha256-ovwmltu97fzNQT0oZHefrAo4yV9HV1NwcY4PTSM5Bro=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    python3
+  ];
+
+  doCheck = true;
+  enableParallelBuilding = true;
+
+  preCheck = ''
+    patchShebangs run_tests.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "Tool for writing very fast and very flexible scanners";
+    homepage    = "https://re2c.org";
+    license     = licenses.publicDomain;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/default.nix b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/default.nix
new file mode 100644
index 000000000000..484254a099c3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/default.nix
@@ -0,0 +1,171 @@
+{ lib
+, stdenv
+, fetchgit
+, fetchFromGitHub
+, fetchurl
+, writeShellScript
+, runCommand
+, which
+, formats
+, rustPlatform
+, jq
+, nix-prefetch-git
+, xe
+, curl
+, emscripten
+, Security
+, callPackage
+, linkFarm
+
+, enableShared ? !stdenv.hostPlatform.isStatic
+, enableStatic ? stdenv.hostPlatform.isStatic
+, webUISupport ? false
+}:
+
+# TODO: move to carnix or https://github.com/kolloch/crate2nix
+let
+  # to update:
+  # 1) change all these hashes
+  # 2) nix-build -A tree-sitter.updater.update-all-grammars
+  # 3) OPTIONAL: Set GITHUB_TOKEN env variable to avoid api rate limit
+  # 4) run the ./result script that is output by that (it updates ./grammars)
+  version = "0.20.6";
+  sha256 = "sha256-zaxy8VCfJKK8NtfuFFojmmP5a19FP1zO/eB5q1EoQPw=";
+  cargoSha256 = "sha256-sOOhzm2nz+HC6dvT+8hj/wh19o+OB2zQ6Uz+H89txSA=";
+
+  src = fetchFromGitHub {
+    owner = "tree-sitter";
+    repo = "tree-sitter";
+    rev = "v${version}";
+    inherit sha256;
+    fetchSubmodules = true;
+  };
+
+  update-all-grammars = import ./update.nix {
+    inherit writeShellScript nix-prefetch-git curl jq xe src formats lib;
+  };
+
+  fetchGrammar = (v: fetchgit { inherit (v) url rev sha256 fetchSubmodules; });
+
+  grammars =
+    runCommand "grammars" { } (''
+      mkdir $out
+    '' + (lib.concatStrings (lib.mapAttrsToList
+      (name: grammar: "ln -s ${fetchGrammar grammar} $out/${name}\n")
+      (import ./grammars { inherit lib; }))));
+
+  builtGrammars =
+    let
+      change = name: grammar:
+        callPackage ./grammar.nix { } {
+          language = if grammar ? language then grammar.language else name;
+          inherit version;
+          source = fetchGrammar grammar;
+          location = if grammar ? location then grammar.location else null;
+        };
+      grammars' = (import ./grammars { inherit lib; });
+      grammars = grammars' //
+        { tree-sitter-ocaml = grammars'.tree-sitter-ocaml // { location = "ocaml"; }; } //
+        { tree-sitter-ocaml-interface = grammars'.tree-sitter-ocaml // { location = "interface"; }; } //
+        { tree-sitter-org-nvim = grammars'.tree-sitter-org-nvim // { language = "org"; }; } //
+        { tree-sitter-typescript = grammars'.tree-sitter-typescript // { location = "typescript"; }; } //
+        { tree-sitter-tsx = grammars'.tree-sitter-typescript // { location = "tsx"; }; };
+    in
+    lib.mapAttrs change grammars;
+
+  # Usage:
+  # pkgs.tree-sitter.withPlugins (p: [ p.tree-sitter-c p.tree-sitter-java ... ])
+  #
+  # or for all grammars:
+  # pkgs.tree-sitter.withPlugins (_: allGrammars)
+  # which is equivalent to
+  # pkgs.tree-sitter.withPlugins (p: builtins.attrValues p)
+  withPlugins = grammarFn:
+    let
+      grammars = grammarFn builtGrammars;
+    in
+    linkFarm "grammars"
+      (map
+        (drv:
+          let
+            name = lib.strings.getName drv;
+          in
+          {
+            name =
+              (lib.strings.replaceStrings [ "-" ] [ "_" ]
+                (lib.strings.removePrefix "tree-sitter-"
+                  (lib.strings.removeSuffix "-grammar" name)))
+              + stdenv.hostPlatform.extensions.sharedLibrary;
+            path = "${drv}/parser";
+          }
+        )
+        grammars);
+
+  allGrammars = builtins.attrValues builtGrammars;
+
+in
+rustPlatform.buildRustPackage {
+  pname = "tree-sitter";
+  inherit src version cargoSha256;
+
+  buildInputs =
+    lib.optionals stdenv.isDarwin [ Security ];
+  nativeBuildInputs =
+    [ which ]
+    ++ lib.optionals webUISupport [ emscripten ];
+
+  postPatch = lib.optionalString (!webUISupport) ''
+    # remove web interface
+    sed -e '/pub mod web_ui/d' \
+        -i cli/src/lib.rs
+    sed -e 's/web_ui,//' \
+        -e 's/web_ui::serve(&current_dir.*$/println!("ERROR: web-ui is not available in this nixpkgs build; enable the webUISupport"); std::process::exit(1);/' \
+        -i cli/src/main.rs
+  '';
+
+  # Compile web assembly with emscripten. The --debug flag prevents us from
+  # minifying the JavaScript; passing it allows us to side-step more Node
+  # JS dependencies for installation.
+  preBuild = lib.optionalString webUISupport ''
+    bash ./script/build-wasm --debug
+  '';
+
+  postInstall = ''
+    PREFIX=$out make install
+    ${lib.optionalString (!enableShared) "rm $out/lib/*.so{,.*}"}
+    ${lib.optionalString (!enableStatic) "rm $out/lib/*.a"}
+  '';
+
+  # test result: FAILED. 120 passed; 13 failed; 0 ignored; 0 measured; 0 filtered out
+  doCheck = false;
+
+  passthru = {
+    updater = {
+      inherit update-all-grammars;
+    };
+    inherit grammars builtGrammars withPlugins allGrammars;
+
+    tests = {
+      # make sure all grammars build
+      builtGrammars = lib.recurseIntoAttrs builtGrammars;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/tree-sitter/tree-sitter";
+    description = "A parser generator tool and an incremental parsing library";
+    longDescription = ''
+      Tree-sitter is a parser generator tool and an incremental parsing library.
+      It can build a concrete syntax tree for a source file and efficiently update the syntax tree as the source file is edited.
+
+      Tree-sitter aims to be:
+
+      * General enough to parse any programming language
+      * Fast enough to parse on every keystroke in a text editor
+      * Robust enough to provide useful results even in the presence of syntax errors
+      * Dependency-free so that the runtime library (which is written in pure C) can be embedded in any application
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ Profpatsch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammar.nix b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammar.nix
new file mode 100644
index 000000000000..96486c0c2b50
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammar.nix
@@ -0,0 +1,60 @@
+{ stdenv
+, tree-sitter
+, lib
+}:
+
+# Build a parser grammar and put the resulting shared object in `$out/parser`
+
+{
+  # language name
+  language
+  # version of tree-sitter
+, version
+  # source for the language grammar
+, source
+, location ? null
+}:
+
+stdenv.mkDerivation rec {
+
+  pname = "${language}-grammar";
+  inherit version;
+
+  src = if location == null then source else "${source}/${location}";
+
+  buildInputs = [ tree-sitter ];
+
+  dontUnpack = true;
+  dontConfigure = true;
+
+  CFLAGS = [ "-I${src}/src" "-O2" ];
+  CXXFLAGS = [ "-I${src}/src" "-O2" ];
+
+  # When both scanner.{c,cc} exist, we should not link both since they may be the same but in
+  # different languages. Just randomly prefer C++ if that happens.
+  buildPhase = ''
+    runHook preBuild
+    if [[ -e "$src/src/scanner.cc" ]]; then
+      $CXX -c "$src/src/scanner.cc" -o scanner.o $CXXFLAGS
+    elif [[ -e "$src/src/scanner.c" ]]; then
+      $CC -c "$src/src/scanner.c" -o scanner.o $CFLAGS
+    fi
+    $CC -c "$src/src/parser.c" -o parser.o $CFLAGS
+    $CXX -shared -o parser *.o
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir $out
+    mv parser $out/
+    runHook postInstall
+  '';
+
+  # Strip failed on darwin: strip: error: symbols referenced by indirect symbol table entries that can't be stripped
+  fixupPhase = lib.optionalString stdenv.isLinux ''
+    runHook preFixup
+    $STRIP $out/parser
+    runHook postFixup
+  '';
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/default.nix b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/default.nix
new file mode 100644
index 000000000000..eb2275d2724c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/default.nix
@@ -0,0 +1,89 @@
+{ lib }:
+{
+  tree-sitter-agda = lib.importJSON ./tree-sitter-agda.json;
+  tree-sitter-bash = lib.importJSON ./tree-sitter-bash.json;
+  tree-sitter-beancount = lib.importJSON ./tree-sitter-beancount.json;
+  tree-sitter-bibtex = lib.importJSON ./tree-sitter-bibtex.json;
+  tree-sitter-c = lib.importJSON ./tree-sitter-c.json;
+  tree-sitter-c-sharp = lib.importJSON ./tree-sitter-c-sharp.json;
+  tree-sitter-clojure = lib.importJSON ./tree-sitter-clojure.json;
+  tree-sitter-cmake = lib.importJSON ./tree-sitter-cmake.json;
+  tree-sitter-comment = lib.importJSON ./tree-sitter-comment.json;
+  tree-sitter-commonlisp = lib.importJSON ./tree-sitter-commonlisp.json;
+  tree-sitter-cpp = lib.importJSON ./tree-sitter-cpp.json;
+  tree-sitter-css = lib.importJSON ./tree-sitter-css.json;
+  tree-sitter-cuda = lib.importJSON ./tree-sitter-cuda.json;
+  tree-sitter-dart = lib.importJSON ./tree-sitter-dart.json;
+  tree-sitter-devicetree = lib.importJSON ./tree-sitter-devicetree.json;
+  tree-sitter-dockerfile = lib.importJSON ./tree-sitter-dockerfile.json;
+  tree-sitter-dot = lib.importJSON ./tree-sitter-dot.json;
+  tree-sitter-elisp = lib.importJSON ./tree-sitter-elisp.json;
+  tree-sitter-elixir = lib.importJSON ./tree-sitter-elixir.json;
+  tree-sitter-elm = lib.importJSON ./tree-sitter-elm.json;
+  tree-sitter-embedded-template = lib.importJSON ./tree-sitter-embedded-template.json;
+  tree-sitter-erlang = lib.importJSON ./tree-sitter-erlang.json;
+  tree-sitter-fennel = lib.importJSON ./tree-sitter-fennel.json;
+  tree-sitter-fish = lib.importJSON ./tree-sitter-fish.json;
+  tree-sitter-fluent = lib.importJSON ./tree-sitter-fluent.json;
+  tree-sitter-fortran = lib.importJSON ./tree-sitter-fortran.json;
+  tree-sitter-gdscript = lib.importJSON ./tree-sitter-gdscript.json;
+  tree-sitter-glimmer = lib.importJSON ./tree-sitter-glimmer.json;
+  tree-sitter-glsl = lib.importJSON ./tree-sitter-glsl.json;
+  tree-sitter-go = lib.importJSON ./tree-sitter-go.json;
+  tree-sitter-godot-resource = lib.importJSON ./tree-sitter-godot-resource.json;
+  tree-sitter-gomod = lib.importJSON ./tree-sitter-gomod.json;
+  tree-sitter-graphql = lib.importJSON ./tree-sitter-graphql.json;
+  tree-sitter-haskell = lib.importJSON ./tree-sitter-haskell.json;
+  tree-sitter-heex = lib.importJSON ./tree-sitter-heex.json;
+  tree-sitter-hjson = lib.importJSON ./tree-sitter-hjson.json;
+  tree-sitter-html = lib.importJSON ./tree-sitter-html.json;
+  tree-sitter-http = lib.importJSON ./tree-sitter-http.json;
+  tree-sitter-java = lib.importJSON ./tree-sitter-java.json;
+  tree-sitter-javascript = lib.importJSON ./tree-sitter-javascript.json;
+  tree-sitter-jsdoc = lib.importJSON ./tree-sitter-jsdoc.json;
+  tree-sitter-json = lib.importJSON ./tree-sitter-json.json;
+  tree-sitter-json5 = lib.importJSON ./tree-sitter-json5.json;
+  tree-sitter-julia = lib.importJSON ./tree-sitter-julia.json;
+  tree-sitter-kotlin = lib.importJSON ./tree-sitter-kotlin.json;
+  tree-sitter-latex = lib.importJSON ./tree-sitter-latex.json;
+  tree-sitter-ledger = lib.importJSON ./tree-sitter-ledger.json;
+  tree-sitter-llvm = lib.importJSON ./tree-sitter-llvm.json;
+  tree-sitter-lua = lib.importJSON ./tree-sitter-lua.json;
+  tree-sitter-make = lib.importJSON ./tree-sitter-make.json;
+  tree-sitter-markdown = lib.importJSON ./tree-sitter-markdown.json;
+  tree-sitter-nix = lib.importJSON ./tree-sitter-nix.json;
+  tree-sitter-norg = lib.importJSON ./tree-sitter-norg.json;
+  tree-sitter-ocaml = lib.importJSON ./tree-sitter-ocaml.json;
+  tree-sitter-org-nvim = lib.importJSON ./tree-sitter-org-nvim.json;
+  tree-sitter-perl = lib.importJSON ./tree-sitter-perl.json;
+  tree-sitter-php = lib.importJSON ./tree-sitter-php.json;
+  tree-sitter-pioasm = lib.importJSON ./tree-sitter-pioasm.json;
+  tree-sitter-prisma = lib.importJSON ./tree-sitter-prisma.json;
+  tree-sitter-pug = lib.importJSON ./tree-sitter-pug.json;
+  tree-sitter-python = lib.importJSON ./tree-sitter-python.json;
+  tree-sitter-ql = lib.importJSON ./tree-sitter-ql.json;
+  tree-sitter-query = lib.importJSON ./tree-sitter-query.json;
+  tree-sitter-r = lib.importJSON ./tree-sitter-r.json;
+  tree-sitter-regex = lib.importJSON ./tree-sitter-regex.json;
+  tree-sitter-rst = lib.importJSON ./tree-sitter-rst.json;
+  tree-sitter-ruby = lib.importJSON ./tree-sitter-ruby.json;
+  tree-sitter-rust = lib.importJSON ./tree-sitter-rust.json;
+  tree-sitter-scala = lib.importJSON ./tree-sitter-scala.json;
+  tree-sitter-scss = lib.importJSON ./tree-sitter-scss.json;
+  tree-sitter-sparql = lib.importJSON ./tree-sitter-sparql.json;
+  tree-sitter-supercollider = lib.importJSON ./tree-sitter-supercollider.json;
+  tree-sitter-surface = lib.importJSON ./tree-sitter-surface.json;
+  tree-sitter-svelte = lib.importJSON ./tree-sitter-svelte.json;
+  tree-sitter-swift = lib.importJSON ./tree-sitter-swift.json;
+  tree-sitter-tlaplus = lib.importJSON ./tree-sitter-tlaplus.json;
+  tree-sitter-toml = lib.importJSON ./tree-sitter-toml.json;
+  tree-sitter-tsq = lib.importJSON ./tree-sitter-tsq.json;
+  tree-sitter-turtle = lib.importJSON ./tree-sitter-turtle.json;
+  tree-sitter-typescript = lib.importJSON ./tree-sitter-typescript.json;
+  tree-sitter-verilog = lib.importJSON ./tree-sitter-verilog.json;
+  tree-sitter-vim = lib.importJSON ./tree-sitter-vim.json;
+  tree-sitter-vue = lib.importJSON ./tree-sitter-vue.json;
+  tree-sitter-yaml = lib.importJSON ./tree-sitter-yaml.json;
+  tree-sitter-yang = lib.importJSON ./tree-sitter-yang.json;
+  tree-sitter-zig = lib.importJSON ./tree-sitter-zig.json;
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-agda.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-agda.json
new file mode 100644
index 000000000000..36dd834d4d0f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-agda.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-agda",
+  "rev": "d710ff14d15ddee3764fd73a0837c6c4c8c913e9",
+  "date": "2019-09-20T18:06:06+08:00",
+  "path": "/nix/store/wqz9v9znaiwhhqi19hgig9bn0yvl4i9s-tree-sitter-agda",
+  "sha256": "1wpfj47l97pxk3i9rzdylqipy849r482fnj3lmx8byhalv7z1vm6",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bash.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bash.json
new file mode 100644
index 000000000000..090ee63616ec
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bash.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-bash",
+  "rev": "b6667bed364733c8a8f8e5973749f86cfa04ba2a",
+  "date": "2021-03-04T14:15:26-08:00",
+  "path": "/nix/store/nvlvdv02wdy4dq4w19bvzq6nlkgvpj20-tree-sitter-bash",
+  "sha256": "18c030bb65r50i6z37iy7jb9z9i8i36y7b08dbc9bchdifqsijs5",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-beancount.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-beancount.json
new file mode 100644
index 000000000000..254e657260a3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-beancount.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/polarmutex/tree-sitter-beancount",
+  "rev": "78b8ddca3ab774573a4e3bf64eabd79e9452cea9",
+  "date": "2021-11-11T10:25:06-05:00",
+  "path": "/nix/store/lzvc19ky1wxbc1cjf2zr351hbdfq22mm-tree-sitter-beancount",
+  "sha256": "19s1fgn1vgxz5q6qvcfdr1lqj1vnkjrwlkl9chapbdaliw0dy110",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bibtex.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bibtex.json
new file mode 100644
index 000000000000..24fc75ec25cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-bibtex.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/latex-lsp/tree-sitter-bibtex",
+  "rev": "ccfd77db0ed799b6c22c214fe9d2937f47bc8b34",
+  "date": "2021-03-26T15:53:50+01:00",
+  "path": "/nix/store/pg00zy53rni7znda2vbyyhkkclgja3kq-tree-sitter-bibtex",
+  "sha256": "0m7f3dkqbmy8x1bhl11m8f4p6n76wfvh99rp46zrqv39355nw1y2",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c-sharp.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c-sharp.json
new file mode 100644
index 000000000000..487f3a27e072
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c-sharp.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-c-sharp",
+  "rev": "352a4630c81a7a5cbd3bc67327743bd8d38f2dd2",
+  "date": "2022-01-03T12:31:17+00:00",
+  "path": "/nix/store/c7k10h98vzqag0rsywm0p71jaz57880x-tree-sitter-c-sharp",
+  "sha256": "198n5i9bvks0mmbqgzjgrhv6hy1afnx806jnap10241iyd817jbf",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c.json
new file mode 100644
index 000000000000..82ca08f94f32
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-c.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-c",
+  "rev": "e348e8ec5efd3aac020020e4af53d2ff18f393a9",
+  "date": "2021-09-20T10:21:48-07:00",
+  "path": "/nix/store/bnc2zml2igbpprx4i0h053inv023z6nj-tree-sitter-c",
+  "sha256": "0fmh8b94ra5fi0j9by9yqbc1pf9sh9pjwc3symrslg855w8a0yx7",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-clojure.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-clojure.json
new file mode 100644
index 000000000000..3fccfc5f7b01
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-clojure.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/sogaiu/tree-sitter-clojure",
+  "rev": "39bf0977d223879436c1425fe6bfeb3bcfd86f92",
+  "date": "2021-08-15T13:16:31+09:00",
+  "path": "/nix/store/7kpf74gw4a68fby6jiw4n7lc4jfkgcf4-tree-sitter-clojure",
+  "sha256": "0ryj75znysvyvv4qaghygx1srrhlwhfmzmdilm652prkgj6yzh6b",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cmake.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cmake.json
new file mode 100644
index 000000000000..9e5bce1b0a43
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cmake.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/uyha/tree-sitter-cmake",
+  "rev": "5020572408a386d5d2dfac3516584f5edda7a49b",
+  "date": "2022-01-26T22:53:15+01:00",
+  "path": "/nix/store/in8jrkjf5vca2azpnyq2dgmzz9jcvjy6-tree-sitter-cmake",
+  "sha256": "0y49x8d36vdq2lcj67f3ms53qxym3578b3aw9gs2ckibwzrbfbgy",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-comment.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-comment.json
new file mode 100644
index 000000000000..56e0ad099ce3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-comment.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/stsewd/tree-sitter-comment",
+  "rev": "6975eb268f42df2afc313f96c0693e284685dba7",
+  "date": "2022-01-22T20:58:19-05:00",
+  "path": "/nix/store/nl4whdipy7a4g3ds2yv3c0qr7z4pifwn-tree-sitter-comment",
+  "sha256": "009krarzs9qykd8fas67gychjzcbgj8j0jm9h0963dlxs4hyay73",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-commonlisp.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-commonlisp.json
new file mode 100644
index 000000000000..ed62f80e237d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-commonlisp.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/thehamsta/tree-sitter-commonlisp",
+  "rev": "c7e814975ab0d0d04333d1f32391c41180c58919",
+  "date": "2022-01-28T21:33:11+01:00",
+  "path": "/nix/store/1696bj1f92y8vqfk71cha8bzk9cx9rls-tree-sitter-commonlisp",
+  "sha256": "1hq3pwrp8509scgn983g0mi8pjy2q21pms30xlc3q7yyjxvpsw7b",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cpp.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cpp.json
new file mode 100644
index 000000000000..47c6b811ff16
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cpp.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-cpp",
+  "rev": "656d7ea44b2b0daece78791e30281e283f30001e",
+  "date": "2022-01-17T09:06:11-06:00",
+  "path": "/nix/store/w4qqya24zf0cd7rqw1440szrrad8nf23-tree-sitter-cpp",
+  "sha256": "0vfgv9rw8pw4d41p5rndy7cjw8w0k0vnn54cwpxkm3r2vblnjn58",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-css.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-css.json
new file mode 100644
index 000000000000..d1d55711895c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-css.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-css",
+  "rev": "a03f1d2d1dfbf6f8e0fdca5f9ff030228241eb57",
+  "date": "2021-09-15T14:32:51-07:00",
+  "path": "/nix/store/zamdl9ixsmgi7rdsb7mx2a1g0i8gfvdy-tree-sitter-css",
+  "sha256": "0i5xf97m6vxgcpa21h2gzlgj9n5rlv9mz3w738bwvcz5k6nbx6np",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cuda.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cuda.json
new file mode 100644
index 000000000000..d9fb78dd2723
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-cuda.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/thehamsta/tree-sitter-cuda",
+  "rev": "14cd86e18ba45e327017de5b3e0f8d8f7f8e98ec",
+  "date": "2022-01-24T00:39:28+01:00",
+  "path": "/nix/store/3lskjrhqd16ymvsbrwzcsdd80cyr7ljj-tree-sitter-cuda",
+  "sha256": "09qpl5mfv39788smz87zbzp04i3rdhsckjjqngvr0w24dsw30nyx",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dart.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dart.json
new file mode 100644
index 000000000000..6d79d851fd4d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dart.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/usernobody14/tree-sitter-dart",
+  "rev": "6a25376685d1d47968c2cef06d4db8d84a70025e",
+  "date": "2021-06-04T09:39:40-06:00",
+  "path": "/nix/store/vdygn1702kn92k222kygk9i50h10z9km-tree-sitter-dart",
+  "sha256": "0z06sphmgjggx5j2rjfy3f85fh1m9s79sql8a7d4kvsamz9rwakl",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-devicetree.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-devicetree.json
new file mode 100644
index 000000000000..4b301bb0f577
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-devicetree.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/joelspadin/tree-sitter-devicetree",
+  "rev": "fa70098cd70393f84785f85cdc6a45299b59cd5b",
+  "date": "2021-03-28T12:08:53-05:00",
+  "path": "/nix/store/6nqsmnd75vwbvkj764vg5slkmjzkmdd9-tree-sitter-devicetree",
+  "sha256": "0mr3q2l7js6csb1fp8xjysikj26l94p3mmsiik4qwnw5kg694yam",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dockerfile.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dockerfile.json
new file mode 100644
index 000000000000..951daa9e3d9f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dockerfile.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/camdencheek/tree-sitter-dockerfile",
+  "rev": "7af32bc04a66ab196f5b9f92ac471f29372ae2ce",
+  "date": "2021-12-16T07:47:57-07:00",
+  "path": "/nix/store/gh1pnracilf89q9z5czqr4z7lkd480xb-tree-sitter-dockerfile",
+  "sha256": "06hy683mrp1jcg2ypd6msbmv0pm2z85y8nqxgrnbr9vbi6syvmp5",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dot.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dot.json
new file mode 100644
index 000000000000..63660cccfb3b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-dot.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/rydesun/tree-sitter-dot",
+  "rev": "92877bac7033e409ccfb3f07fe28ef1dfd359457",
+  "date": "2021-10-13T19:28:51+08:00",
+  "path": "/nix/store/h3dyw3kcgw77lma750wjgr1n8pjllxn6-tree-sitter-dot",
+  "sha256": "1l8g348nqqil7lygkhzw1ydwf3q2m5786qddp1f9jg1bdrv9p8rl",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elisp.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elisp.json
new file mode 100644
index 000000000000..f6e11391fab2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elisp.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/wilfred/tree-sitter-elisp",
+  "rev": "4b0e4a3891337514126ec72c7af394c0ff2cf48c",
+  "date": "2021-10-02T12:14:40-07:00",
+  "path": "/nix/store/1g3q3xzv5n9wzi84awrlbxwm6q3zh8qz-tree-sitter-elisp",
+  "sha256": "1g6qmpxn1y9hzk2kkpp9gpkphaq9j7vvm4nl5zv8a4wzy3w8p1wv",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elixir.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elixir.json
new file mode 100644
index 000000000000..b0bad04a86fb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elixir.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/elixir-lang/tree-sitter-elixir",
+  "rev": "de20391afe5cb03ef1e8a8e43167e7b58cc52869",
+  "date": "2022-01-10T10:35:12-06:00",
+  "path": "/nix/store/099pwd7iv86g1j4fplgq33a4jpwbvv60-tree-sitter-elixir",
+  "sha256": "0zrkrwhw3g1vazsxcwrfd1fk4wvs9hdwmwp6073mfh370bz4140h",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elm.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elm.json
new file mode 100644
index 000000000000..19129d053a05
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-elm.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/elm-tooling/tree-sitter-elm",
+  "rev": "5128296ba8542853d59e6b7c8dfe3d1fb9a637ea",
+  "date": "2022-02-04T13:10:25+01:00",
+  "path": "/nix/store/8brpvn8y88x3f3dsbgqql57kp9bygj3w-tree-sitter-elm",
+  "sha256": "10hbi4vyj4hjixqswdcbvzl60prldczz29mlp02if61wvwiwvqrw",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-embedded-template.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-embedded-template.json
new file mode 100644
index 000000000000..266de6ad18b5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-embedded-template.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-embedded-template",
+  "rev": "d21df11b0ecc6fd211dbe11278e92ef67bd17e97",
+  "date": "2021-12-23T08:53:16-08:00",
+  "path": "/nix/store/zy74brmd1x2q68bpvi5v4z52bhmkcmy8-tree-sitter-embedded-template",
+  "sha256": "0h3nj6fz512riyx2b65pg9pjprkpkasnglwljlzi6s1in9fdig3x",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-erlang.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-erlang.json
new file mode 100644
index 000000000000..b824f34f27a0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-erlang.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/abstractmachineslab/tree-sitter-erlang",
+  "rev": "9d5fd0c329280a156bf7614a49dc5e8c58cc037c",
+  "date": "2021-08-03T11:57:52+02:00",
+  "path": "/nix/store/35ydhh12dgf4q016gjka35wnqnkwc1jg-tree-sitter-erlang",
+  "sha256": "0d6wl95wgys21vcix6j0bf7l000glkmk1n6shgcnp4baw9wxh009",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fennel.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fennel.json
new file mode 100644
index 000000000000..8684e176cb69
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fennel.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/travonted/tree-sitter-fennel",
+  "rev": "fce4331731a960077ff5f98939bc675179f1908a",
+  "date": "2021-09-30T09:09:52-04:00",
+  "path": "/nix/store/mhpkw4gl6lzi306q21kckafqcdc0a715-tree-sitter-fennel",
+  "sha256": "1k8acyav26248liz0psk2r9dl7472mqgdyrjwg3pfxx94jgqjcik",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fish.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fish.json
new file mode 100644
index 000000000000..b32445c2804c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fish.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/ram02z/tree-sitter-fish",
+  "rev": "04e54ab6585dfd4fee6ddfe5849af56f101b6d4f",
+  "date": "2021-08-02T21:46:56+01:00",
+  "path": "/nix/store/0n3jfh7gk16bmikix34y5m534ac12xgc-tree-sitter-fish",
+  "sha256": "1810z8ah1b09qpxcr4bh63bxsnxx24r6d2h46v2cpqv1lg0g4z14",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fluent.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fluent.json
new file mode 100644
index 000000000000..6eeb5ccfe0a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fluent.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-fluent",
+  "rev": "858fdd6f1e81992e00d3541bfb31bac9365d7a47",
+  "date": "2018-06-18T13:00:38-07:00",
+  "path": "/nix/store/zbj8abdlrqi9swm8qn8rhpqmjwcz145f-tree-sitter-fluent",
+  "sha256": "0528v9w0cs73p9048xrddb1wpdhr92sn1sw8yyqfrq5sq0danr9k",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fortran.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fortran.json
new file mode 100644
index 000000000000..6b3198e73187
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-fortran.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/stadelmanma/tree-sitter-fortran",
+  "rev": "f0f2f100952a353e64e26b0fa710b4c296d7af13",
+  "date": "2021-09-02T21:24:27-04:00",
+  "path": "/nix/store/5abj5miyzb7dvyq4zw0j1mxgdxqyj2yx-tree-sitter-fortran",
+  "sha256": "17iiz38s7adkzv9rw97nn5nd9kvn1vyccm7r6ywipaa5aim0nm6a",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gdscript.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gdscript.json
new file mode 100644
index 000000000000..23d0dd98a00f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gdscript.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/prestonknopp/tree-sitter-gdscript",
+  "rev": "2a6abdaa47fcb91397e09a97c7433fd995ea46c6",
+  "date": "2021-12-20T23:14:36-08:00",
+  "path": "/nix/store/kzps55mk9caigy4s9smvsqwm1savaaq7-tree-sitter-gdscript",
+  "sha256": "0k7lgli5b9f6dlsafl29lrmzd221ayj50q1axjihm7w70miwyck0",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glimmer.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glimmer.json
new file mode 100644
index 000000000000..5dc18d6c7b28
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glimmer.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/alexlafroscia/tree-sitter-glimmer",
+  "rev": "5ed38d3cba65376e4734b0f1763c2f049ad5a1cf",
+  "date": "2021-09-25T09:50:19-04:00",
+  "path": "/nix/store/z0nhsn3v519mbxrhj5x1y7h7k7giviw2-tree-sitter-glimmer",
+  "sha256": "0whij8420niywdi0lna8w5fizq30vhldz3wssisw91gjfdn8d9mz",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glsl.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glsl.json
new file mode 100644
index 000000000000..0b67ae1632de
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-glsl.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/thehamsta/tree-sitter-glsl",
+  "rev": "ffb93961426926554a0ba4a389ea6e9d6fafdea9",
+  "date": "2022-01-24T11:15:06+01:00",
+  "path": "/nix/store/x508b69xq0y2ly4hspkgyq5g0v29xvjz-tree-sitter-glsl",
+  "sha256": "1b91wamhdzqq76l9k3vkmrdb1j98w5slzw8d4piqlgp70j396813",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-go.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-go.json
new file mode 100644
index 000000000000..622f2863290c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-go.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-go",
+  "rev": "0fa917a7022d1cd2e9b779a6a8fc5dc7fad69c75",
+  "date": "2022-01-06T10:54:10+01:00",
+  "path": "/nix/store/bw2hilbj37ys9lig2fzz58cvjy7nhn3l-tree-sitter-go",
+  "sha256": "0kgy4yyd0z8pydldnfwsfw2iwbhn4f43qxfhy94wvpwiwi74kfmg",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-godot-resource.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-godot-resource.json
new file mode 100644
index 000000000000..19b3463215ee
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-godot-resource.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/prestonknopp/tree-sitter-godot-resource",
+  "rev": "b6ef0768711086a86b3297056f9ffb5cc1d77b4a",
+  "date": "2021-12-20T22:40:16-08:00",
+  "path": "/nix/store/3lmwkk16jmjnkx8lrl33i7a19hjca2jz-tree-sitter-godot-resource",
+  "sha256": "0agnvg95fx60xkr5fivl1x3yhcw6ca58f7bpx3dq6fl7pyfgrky2",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gomod.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gomod.json
new file mode 100644
index 000000000000..2b8fe79a3d24
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-gomod.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/camdencheek/tree-sitter-go-mod",
+  "rev": "3cbcb572109ea0bc476a292208722c326c9e6c3a",
+  "date": "2021-12-16T14:44:10-07:00",
+  "path": "/nix/store/jxc3lqcxagfvlk7l62fg8z98mjrn7pgz-tree-sitter-go-mod",
+  "sha256": "0csrvmpvihwmw3772j4lkj49myqqp0f7imi7c11h9x9szz3lc8x8",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-graphql.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-graphql.json
new file mode 100644
index 000000000000..b543c81fbd68
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-graphql.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/bkegley/tree-sitter-graphql",
+  "rev": "5e66e961eee421786bdda8495ed1db045e06b5fe",
+  "date": "2021-05-10T09:09:29-05:00",
+  "path": "/nix/store/am2ld0br0yhdny5c2ndp6l0bl3c78wwq-tree-sitter-graphql",
+  "sha256": "0xvrd6p9rxdjpqfq575ap6hpl2f7dad5i4d4m05w1qk9jx33vw9n",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-haskell.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-haskell.json
new file mode 100644
index 000000000000..31114781f58c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-haskell.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-haskell",
+  "rev": "d6ccd2d9c40bdec29fee0027ef04fe5ff1ae4ceb",
+  "date": "2022-01-07T03:13:04+01:00",
+  "path": "/nix/store/biyjfajma7nr175xviaw65jksqfak893-tree-sitter-haskell",
+  "sha256": "0zfxi3adqhy7d1w2dvnywkms8a4vfxkjswdhar7p5sxyps8a5wry",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-heex.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-heex.json
new file mode 100644
index 000000000000..654a89b5979b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-heex.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/connorlay/tree-sitter-heex",
+  "rev": "592e22292a367312c35e13de7fdb888f029981d6",
+  "date": "2022-01-30T14:04:04-08:00",
+  "path": "/nix/store/21n6sqyvkfd0q5ass9nj2wgicm9ljmgv-tree-sitter-heex",
+  "sha256": "1k4nhlbbn7lqrjmkz8rr81rsrfkl9qfwm9q7qd2b18ygzr52payh",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-hjson.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-hjson.json
new file mode 100644
index 000000000000..d3ee4fba8cf5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-hjson.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/winston0410/tree-sitter-hjson",
+  "rev": "02fa3b79b3ff9a296066da6277adfc3f26cbc9e0",
+  "date": "2021-08-02T21:41:53+01:00",
+  "path": "/nix/store/cvbkxylvkpgxcmkv87fvknlfxg4q09bg-tree-sitter-hjson",
+  "sha256": "0zqf4bxqd2bpzdsw4kghq0jmn7l4sgdlrrlhc567b03p6kfdzi1n",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-html.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-html.json
new file mode 100644
index 000000000000..211e170adced
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-html.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-html",
+  "rev": "161a92474a7bb2e9e830e48e76426f38299d99d1",
+  "date": "2021-08-17T11:20:56-07:00",
+  "path": "/nix/store/pv8x73j4sbngsqplwfm73jlpwc31mc17-tree-sitter-html",
+  "sha256": "1gwvgwk0py09pp65vnga522l5r16dvgwxsc76fg66y07k2i63cfk",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-http.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-http.json
new file mode 100644
index 000000000000..71664391b230
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-http.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/ntbbloodbath/tree-sitter-http",
+  "rev": "bfddd16b1cf78e0042fd1f6846a179f76a254e20",
+  "date": "2021-11-04T16:44:58-04:00",
+  "path": "/nix/store/l776a8vyhzg64pzna22hy96cia71l1sq-tree-sitter-http",
+  "sha256": "0va7lxddkpbsjpbih4dwv6i9minnl2a4lq7i6dm3fk99c71y4ghg",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-java.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-java.json
new file mode 100644
index 000000000000..6f9344437bfa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-java.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-java",
+  "rev": "a24ae7d16de3517bff243a87d087d0b4877a65c5",
+  "date": "2022-01-12T08:57:59-08:00",
+  "path": "/nix/store/dipis7syj55xrmc72gvx2f9q672mn6dg-tree-sitter-java",
+  "sha256": "0p01xkxzdjwx32hd6k4kqidlhkgj8q9b9lp4g4fra5gx9w159iqm",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-javascript.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-javascript.json
new file mode 100644
index 000000000000..b4a4b7b44719
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-javascript.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-javascript",
+  "rev": "fdeb68ac8d2bd5a78b943528bb68ceda3aade2eb",
+  "date": "2021-10-04T13:07:24-04:00",
+  "path": "/nix/store/psmsgqhg4di7mkkd6sgyvcs41jvvq2c3-tree-sitter-javascript",
+  "sha256": "175yrk382n2di0c2xn4gpv8y4n83x1lg4hqn04vabf0yqynlkq67",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-jsdoc.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-jsdoc.json
new file mode 100644
index 000000000000..3f9b7203f3ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-jsdoc.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-jsdoc",
+  "rev": "189a6a4829beb9cdbe837260653b4a3dfb0cc3db",
+  "date": "2021-03-04T14:39:14-08:00",
+  "path": "/nix/store/dpm11vziss6jbgp3dxvmgkb0dgg1ygc8-tree-sitter-jsdoc",
+  "sha256": "0qpsy234p30j6955wpjlaqwbr21bi56p0ln5vhrd84s99ac7s6b6",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json.json
new file mode 100644
index 000000000000..13e67533f401
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-json",
+  "rev": "203e239408d642be83edde8988d6e7b20a19f0e8",
+  "date": "2021-08-18T10:35:07-07:00",
+  "path": "/nix/store/yqbmn17vs2lxqg5wa8b269fcsd5wr4bv-tree-sitter-json",
+  "sha256": "08igb9ylfdsjasyn0p9j4sqpp0i2x1qcdzacbmsag02jmkyi6s7f",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json5.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json5.json
new file mode 100644
index 000000000000..cd9bc3e8dc80
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-json5.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/joakker/tree-sitter-json5",
+  "rev": "5dd5cdc418d9659682556b6adca2dd9ace0ac6d2",
+  "date": "2021-08-24T18:08:31-04:00",
+  "path": "/nix/store/0qhffwc84sp97d8im4lfrd06jsyvmzc4-tree-sitter-json5",
+  "sha256": "1la7bq5vi21gy0kf4zpwh0c0jfyv1bb62a3v7158hnxdyd5ijz07",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-julia.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-julia.json
new file mode 100644
index 000000000000..9f093a4d4e37
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-julia.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-julia",
+  "rev": "12ea597262125fc22fd2e91aa953ac69b19c26ca",
+  "date": "2021-05-03T17:44:45-07:00",
+  "path": "/nix/store/lbz23r698hn7cha09qq0dbfay7dh74gg-tree-sitter-julia",
+  "sha256": "0rmd7k3rv567psxrlqv17gvckijs19xs6mxni045rpayxmk441sk",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-kotlin.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-kotlin.json
new file mode 100644
index 000000000000..f7e29af84f15
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-kotlin.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/fwcd/tree-sitter-kotlin",
+  "rev": "607af7be5606ad6580246cd9c68fc615e1ad97fd",
+  "date": "2021-10-12T01:11:47+02:00",
+  "path": "/nix/store/49cvpcypxjzpb0srcpd383ay9f0g19dy-tree-sitter-kotlin",
+  "sha256": "1sisvx7cp95d309ykhimn8bhbwd1lzcwrpz3s0mdsb2i44p69469",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-latex.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-latex.json
new file mode 100644
index 000000000000..5cf20f27968f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-latex.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/latex-lsp/tree-sitter-latex",
+  "rev": "323b609de40b7729073482a3c59de76cfba7744f",
+  "date": "2022-02-08T21:23:53+01:00",
+  "path": "/nix/store/f6kvr0x41rbb64s36ii6bj30fqaallz4-tree-sitter-latex",
+  "sha256": "1qsw5wcqs65ip0qq17vq6bf2snnpvw61iq2ahgwl9842ir15hrbr",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ledger.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ledger.json
new file mode 100644
index 000000000000..a75a61764912
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ledger.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/cbarrete/tree-sitter-ledger",
+  "rev": "0cdeb0e51411a3ba5493662952c3039de08939ca",
+  "date": "2021-09-06T18:36:51-04:00",
+  "path": "/nix/store/8gh6lfvqczb6n6ncnmszvk3kj527m75w-tree-sitter-ledger",
+  "sha256": "1z0r2aphijzq6j67gb2lx2qr3fi2qpiz2x9dwkjvppdb4ch7ga7m",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-llvm.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-llvm.json
new file mode 100644
index 000000000000..caa2f13a358c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-llvm.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/benwilliamgraham/tree-sitter-llvm",
+  "rev": "3b213925b9c4f42c1acfe2e10bfbb438d9c6834d",
+  "date": "2021-12-27T14:02:51-05:00",
+  "path": "/nix/store/hjg9z82l3iqyjw0s9lf1kkm31p5wlv3d-tree-sitter-llvm",
+  "sha256": "0ymrdcajji11852c158w67mgcsycphwj9mh777q3n4jn8pp37y8j",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-lua.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-lua.json
new file mode 100644
index 000000000000..a11ac648fed2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-lua.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/MunifTanjim/tree-sitter-lua",
+  "rev": "547184a6cfcc900fcac4a2a56538fa8bcdb293e6",
+  "date": "2022-01-28T20:44:16+06:00",
+  "path": "/nix/store/gvq91asqk6911bci8xxx5wjbp2p3c2lk-tree-sitter-lua",
+  "sha256": "04z182d591r3jlw0yx29m0hhzw4b14f8m85rz2bw959p0yghs88k",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-make.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-make.json
new file mode 100644
index 000000000000..468146ac47d0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-make.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/alemuller/tree-sitter-make",
+  "rev": "a4b9187417d6be349ee5fd4b6e77b4172c6827dd",
+  "date": "2021-12-16T17:14:17+00:00",
+  "path": "/nix/store/v01s3lfi1w3bm433gf6zi0wb0r603906-tree-sitter-make",
+  "sha256": "07gz4x12xhigar2plr3jgazb2z4f9xp68nscmvy9a7wafak9l2m9",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-markdown.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-markdown.json
new file mode 100644
index 000000000000..e34455069bc3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-markdown.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/MDeiml/tree-sitter-markdown",
+  "rev": "8bee14c30ecadd55c2d65633973b4e81f93525e0",
+  "date": "2022-01-16T14:47:09+01:00",
+  "path": "/nix/store/cv7xqvcj4bjifzddkx5n2jd723dc6vlf-tree-sitter-markdown",
+  "sha256": "0vibmpp86pkqllfhb0kg6zhaz09sh8m6a2d1xa8p2qdi7ryy7wqa",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nix.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nix.json
new file mode 100644
index 000000000000..801634201c86
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-nix.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/cstrahan/tree-sitter-nix",
+  "rev": "6d6aaa50793b8265b6a8b6628577a0083d3b923d",
+  "date": "2021-11-29T00:27:21-06:00",
+  "path": "/nix/store/6cjadxvqbrh205lsqnk2rnzq3badxdxv-tree-sitter-nix",
+  "sha256": "0cbk6dqppasrvnm87pwfgm718z6b0xmy9m7zj8ysil0h8bklz1w9",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-norg.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-norg.json
new file mode 100644
index 000000000000..1743d2252cd6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-norg.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/nvim-neorg/tree-sitter-norg",
+  "rev": "b7f879eaf9f20852f6b670439154b0128fbb6558",
+  "date": "2022-02-08T12:24:02+01:00",
+  "path": "/nix/store/q02py98zm9cmalzc5a0yqw8lg73ybx9g-tree-sitter-norg",
+  "sha256": "07hm5sysb25ivlz52ijnbka02hlqksha259w7v03awap85i9ydk6",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ocaml.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ocaml.json
new file mode 100644
index 000000000000..abf7df917efe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ocaml.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-ocaml",
+  "rev": "23d419ba45789c5a47d31448061557716b02750a",
+  "date": "2021-08-26T21:21:27+02:00",
+  "path": "/nix/store/942q4rv9vs77wwvvw46yx0jnqja2cbig-tree-sitter-ocaml",
+  "sha256": "1bh3afd3iix0gf6ldjngf2c65nyfdwvbmsq25gcxm04jwbg9c6k8",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-org-nvim.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-org-nvim.json
new file mode 100644
index 000000000000..67e75cd60ee2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-org-nvim.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/milisims/tree-sitter-org",
+  "rev": "1c3eb533a9cf6800067357b59e03ac3f91fc3a54",
+  "date": "2022-02-05T14:19:52-05:00",
+  "path": "/nix/store/n51rx6d005iibpvb1bb2d7az1l6p6vlq-tree-sitter-org",
+  "sha256": "06xkhhdlkikvxadp7wnk8riz51mjq9ks1jchdy9x3fmq6bj72y1p",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-perl.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-perl.json
new file mode 100644
index 000000000000..9585b6c60768
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-perl.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/ganezdragon/tree-sitter-perl",
+  "rev": "ab2b39439f2fc82fd5ea0b7e08509760d4cbacd5",
+  "date": "2022-01-23T13:55:11-05:00",
+  "path": "/nix/store/s55aybm3r5n7l7nx916mhjyry96xcvin-tree-sitter-perl",
+  "sha256": "16ap0yq9gmh0kbyka7zcpjw3dl368n23sxp3v82z4ccwzmgfmaw4",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-php.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-php.json
new file mode 100644
index 000000000000..856d6bbb7e5c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-php.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-php",
+  "rev": "0ce134234214427b6aeb2735e93a307881c6cd6f",
+  "date": "2022-01-31T19:53:17+01:00",
+  "path": "/nix/store/kdddnbbsik9wvnjh1wnbyzzr1x8v64ps-tree-sitter-php",
+  "sha256": "0gg3p1zpwfhf0qz0isnca0zi5zkxs5j5bmjix99dv3rkw911vk17",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pioasm.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pioasm.json
new file mode 100644
index 000000000000..9c753e26305e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pioasm.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/leo60228/tree-sitter-pioasm",
+  "rev": "924aadaf5dea2a6074d72027b064f939acf32e20",
+  "date": "2021-08-27T17:22:56-04:00",
+  "path": "/nix/store/nhxzw33vljxh5i90d0fb5nzdfjp5h9bl-tree-sitter-pioasm",
+  "sha256": "1lxvgc0zkd2sv8dxp2fy6b1k3gqrbkxgqy25lw9sbd4kij7463m2",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-prisma.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-prisma.json
new file mode 100644
index 000000000000..ec69a798aad6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-prisma.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/victorhqc/tree-sitter-prisma",
+  "rev": "74a721e8eed1a4a25cf495d45974ba24f315f81a",
+  "date": "2021-11-19T19:52:32+01:00",
+  "path": "/nix/store/rbr2p57ic1kn0121ca6k0bh2r8svw066-tree-sitter-prisma",
+  "sha256": "1b8yil6v9jz9ndx2kzln639fkjkj1xb0qfcip1njxcq5mlqlfswd",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pug.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pug.json
new file mode 100644
index 000000000000..cf72f03519cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-pug.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/zealot128/tree-sitter-pug",
+  "rev": "5875f9a7d94836708119b0a1102bb5792e8bf673",
+  "date": "2021-07-13T22:48:45+02:00",
+  "path": "/nix/store/3bwj01nmxkd4cmvjyrfv2a6wq07hbqig-tree-sitter-pug",
+  "sha256": "1sjw632yidi8dq34g1nqmld9861j40qnrlg4c8w478kl8hmhnvmb",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-python.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-python.json
new file mode 100644
index 000000000000..e724e7bbebc4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-python.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-python",
+  "rev": "78c4e9b6b2f08e1be23b541ffced47b15e2972ad",
+  "date": "2022-02-07T12:53:14-08:00",
+  "path": "/nix/store/9i5fh21cwa6w2zq9fkcn46207pbk2fzn-tree-sitter-python",
+  "sha256": "09xq6ymwa2ap4432yln5qs0y41iaxbrpp4m07pvydgcmyk3blxvv",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ql.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ql.json
new file mode 100644
index 000000000000..d1a73a02c0b4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ql.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-ql",
+  "rev": "8e7fd7e638d4a0ec7a792ee16b19dbc6407aa810",
+  "date": "2021-06-02T18:46:47+02:00",
+  "path": "/nix/store/yhyi9y09shv1fm87gka43vnv9clvyd92-tree-sitter-ql",
+  "sha256": "0x5f9989ymqvw3g8acckyk4j7zpmnc667qishbgly9icl9rkmv7w",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-query.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-query.json
new file mode 100644
index 000000000000..4da8b33c4852
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-query.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/nvim-treesitter/tree-sitter-query",
+  "rev": "5217c6805c09f8fc00ed13d17d5fcb791437aee6",
+  "date": "2021-12-23T16:48:02-05:00",
+  "path": "/nix/store/b8n553bwlyzi05p8vn08qv6vbzg9875q-tree-sitter-query",
+  "sha256": "00q6cpw5rkb20cypx820glqhfs4vsgqdymj5y0sknd874lq6crfg",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-r.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-r.json
new file mode 100644
index 000000000000..f77e92922533
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-r.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/r-lib/tree-sitter-r",
+  "rev": "c19e54de252d5573cc2a762a030957074526fe99",
+  "date": "2022-01-27T09:41:27-05:00",
+  "path": "/nix/store/b2h3khs1x0j4j2fvs2sbkx1dp3d8fx4g-tree-sitter-r",
+  "sha256": "1zan8dhjpxrn7vy7mvbc85hcdd5lls3vzpk6nchvn3j0i1ach85h",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-razor.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-razor.json
new file mode 100644
index 000000000000..6905f4145aaf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-razor.json
@@ -0,0 +1,10 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-razor",
+  "rev": "60edbd8e798e416f5226a746396efa6a8614fa9b",
+  "date": "2016-07-08T15:17:50-07:00",
+  "path": "/nix/store/2vkxw48wc0xf07awi65r4rg2m1lpqq6c-tree-sitter-razor",
+  "sha256": "1ldsn9nxldxkxdy7irywx88d6a56q05f6907lypzass07piyqp2i",
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-regex.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-regex.json
new file mode 100644
index 000000000000..3a2c6f258ae3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-regex.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-regex",
+  "rev": "e1cfca3c79896ff79842f057ea13e529b66af636",
+  "date": "2022-01-03T09:37:11-08:00",
+  "path": "/nix/store/24lr7jzznsd3z7cld007aww25kbwcf51-tree-sitter-regex",
+  "sha256": "0j6j0h8ciyhgmcq9iy3843anyfvd7s0biqzgbsqgwbgbqbg2nfwl",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rst.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rst.json
new file mode 100644
index 000000000000..db200508b4bc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rst.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/stsewd/tree-sitter-rst",
+  "rev": "b74770c0166f28c1a0ab293513a78712ca1c338b",
+  "date": "2022-01-22T20:59:44-05:00",
+  "path": "/nix/store/ymhzq6hwq43gf918zyxk7can4qfkz7n1-tree-sitter-rst",
+  "sha256": "0q50vwk72lrgnrdjjn5aj1fjksrwkd0gfmdnrjy59a6cw8m1gmf0",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ruby.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ruby.json
new file mode 100644
index 000000000000..86320373d7ea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-ruby.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-ruby",
+  "rev": "fe6a2d634da0e16b11b5aa255cc3df568a4572fd",
+  "date": "2021-03-03T16:54:30-08:00",
+  "path": "/nix/store/ragrvqj7hm98r74v5b3fljvc47gd3nhj-tree-sitter-ruby",
+  "sha256": "0m3h4928rbs300wcb6776h9r88hi32rybbhcaf6rdympl5nzi83v",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rust.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rust.json
new file mode 100644
index 000000000000..87cc40f83b89
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-rust.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-rust",
+  "rev": "a250c4582510ff34767ec3b7dcdd3c24e8c8aa68",
+  "date": "2022-02-04T13:11:35-08:00",
+  "path": "/nix/store/i1f2zyrqghy98pl7dfnvcpbs3jsnmhay-tree-sitter-rust",
+  "sha256": "174j5pxwf80c4xniri39l3a6bb7nq96g2s8hh5sgv4i7xvbpfsmg",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scala.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scala.json
new file mode 100644
index 000000000000..09559a4a7a22
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scala.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-scala",
+  "rev": "0a3dd53a7fc4b352a538397d054380aaa28be54c",
+  "date": "2021-10-10T10:34:22-07:00",
+  "path": "/nix/store/mys098cdap3mdp6x4qwlk7b9v84998b0-tree-sitter-scala",
+  "sha256": "1lwyipn5b36fskr8cm60qjblj2chf8336zkqbsifq49z1lj0wvpi",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scss.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scss.json
new file mode 100644
index 000000000000..0b2637a14389
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-scss.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/serenadeai/tree-sitter-scss",
+  "rev": "c478c6868648eff49eb04a4df90d703dc45b312a",
+  "date": "2022-02-03T21:48:21+00:00",
+  "path": "/nix/store/s49l3jbhjni3l1d0m3xrpzml39aq9yr3-tree-sitter-scss",
+  "sha256": "15r3jiv36hzx2pmjmp63am3pbc01s52z36xfraa1aw4wlx7lqnq4",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-sparql.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-sparql.json
new file mode 100644
index 000000000000..4180f5844073
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-sparql.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/bonabeavis/tree-sitter-sparql",
+  "rev": "05f949d3c1c15e3261473a244d3ce87777374dec",
+  "date": "2021-08-16T15:50:03+02:00",
+  "path": "/nix/store/vvgvb1jcv0qrn3xj0jbf83qwi1lh2m68-tree-sitter-sparql",
+  "sha256": "012c1pi4vc6hkvllymvl2yah3ix8k4pi7997iydy949fc33aa5i8",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-supercollider.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-supercollider.json
new file mode 100644
index 000000000000..24f577629497
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-supercollider.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/madskjeldgaard/tree-sitter-supercollider",
+  "rev": "0f0e5b5a96dd3e048a9c3db648ed969c44068bff",
+  "date": "2022-02-01T13:46:31+01:00",
+  "path": "/nix/store/5rzm6vnqvpwxwakrjyy93hg0glfvcx93-tree-sitter-supercollider",
+  "sha256": "0nxl43j7ddsddqcq56p921h1r5jkx8v49zxjzr6mcj6y1ljzndm2",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-surface.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-surface.json
new file mode 100644
index 000000000000..d12ff52a5563
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-surface.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/connorlay/tree-sitter-surface",
+  "rev": "21b7676859c1187645a27ff301f76738af5dfd44",
+  "date": "2021-08-15T10:33:50-07:00",
+  "path": "/nix/store/7i1klj80jbcvwgad7nrbcs7hvn68f125-tree-sitter-surface",
+  "sha256": "122v1d2zb0w2k5h7xqgm1c42rwfrp59dzyb2lly7kxmylyazmshy",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-svelte.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-svelte.json
new file mode 100644
index 000000000000..0052b3f8e718
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-svelte.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/Himujjal/tree-sitter-svelte",
+  "rev": "98274d94ec33e994e8354d9ddfdef58cca471294",
+  "date": "2021-10-28T16:53:33+05:30",
+  "path": "/nix/store/q3dapi6k6zdnnr0lki2ic9l6cbxdi2rq-tree-sitter-svelte",
+  "sha256": "1kav0h755sa1j9j930kjrykb17aih017mbi0a97ncjjrlc6nyak5",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-swift.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-swift.json
new file mode 100644
index 000000000000..7232c7b54aca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-swift.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-swift",
+  "rev": "db675450dcc1478ee128c96ecc61c13272431aab",
+  "date": "2022-01-13T10:47:55-08:00",
+  "path": "/nix/store/l3535ndrmi24v5nidxppi1rqccj4s17v-tree-sitter-swift",
+  "sha256": "06mq1an55p75ajwn6pvcy9vlcmzrj8qmbri3mn4bxq53icnj4fya",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tlaplus.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tlaplus.json
new file mode 100644
index 000000000000..2ffc311fd943
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tlaplus.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tlaplus-community/tree-sitter-tlaplus",
+  "rev": "dde405e5128c3c47ab8aa014d21b6e5296ca450f",
+  "date": "2022-02-03T12:27:54-05:00",
+  "path": "/nix/store/vwmr9wd4agmym5ryrchl470qa46j8ymr-tree-sitter-tlaplus",
+  "sha256": "06g5pbx4rydfryfxfqjq37akhqn2465xwh90r5yc5rdv0kppvbhq",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-toml.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-toml.json
new file mode 100644
index 000000000000..ae182486506a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-toml.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/ikatyang/tree-sitter-toml",
+  "rev": "8bd2056818b21860e3d756b5a58c4f6e05fb744e",
+  "date": "2021-05-11T12:47:32+08:00",
+  "path": "/nix/store/isgpadcxmgkb14w9yg67pb8lx7wlfhnn-tree-sitter-toml",
+  "sha256": "0yasw5fp4mq6vzrdwlc3dxlss8a94bsffv4mzrfp0b3iw0s1dlyg",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tsq.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tsq.json
new file mode 100644
index 000000000000..6119c6e1603d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-tsq.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-tsq",
+  "rev": "b665659d3238e6036e22ed0e24935e60efb39415",
+  "date": "2021-05-18T15:57:40-04:00",
+  "path": "/nix/store/j59y4s3bsv6d5nbmhhdgb043hmk8157k-tree-sitter-tsq",
+  "sha256": "03bch2wp2jwxk69zjplvm0gbyw06qqdy7il9qkiafvhrbh03ayd9",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-turtle.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-turtle.json
new file mode 100644
index 000000000000..6430be302fbf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-turtle.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/bonabeavis/tree-sitter-turtle",
+  "rev": "085437f5cb117703b7f520dd92161140a684f092",
+  "date": "2021-08-16T15:17:50+02:00",
+  "path": "/nix/store/c90hph3wfyhjmri3qbfb5lpy1bl855zv-tree-sitter-turtle",
+  "sha256": "1l5djvz90sq9w14kfcrffdigqs61r1p8v17xpj92sxz8z3ngpgmr",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-typescript.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-typescript.json
new file mode 100644
index 000000000000..fc04fd069e4f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-typescript.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-typescript",
+  "rev": "e8e8e8dc2745840b036421b4e43286750443cb13",
+  "date": "2022-01-10T13:42:45-08:00",
+  "path": "/nix/store/zl36qsk7pd9pcawfsy368axax97d83wz-tree-sitter-typescript",
+  "sha256": "1z1v7fjgp418qsp0xkycfpvc8vm4a2ai5kx10xif1dvjpfgcj1qq",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-verilog.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-verilog.json
new file mode 100644
index 000000000000..28e2deacc8a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-verilog.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/tree-sitter/tree-sitter-verilog",
+  "rev": "6fae7414fa854b5052bee9111b200e9137797f3d",
+  "date": "2021-10-04T10:25:49-07:00",
+  "path": "/nix/store/aklrgpy0si72r8vac5fqjbzvcpqiy5lk-tree-sitter-verilog",
+  "sha256": "0yjhb2rp7drwkwfp35fgwnp6d7qf6k1k6zlf0dfxygjywnjy0bfs",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vim.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vim.json
new file mode 100644
index 000000000000..12322fe82b40
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vim.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/vigoux/tree-sitter-viml",
+  "rev": "bc573ef552adf8bed9e36eb687a0cccf43158634",
+  "date": "2022-01-24T16:13:56+01:00",
+  "path": "/nix/store/2i9n2fvjk0ymxv32ziq5z9ykv95svi7d-tree-sitter-viml",
+  "sha256": "0ckx9jh9fqfw5x9yb0sljczb0xsgxs8j6v2qbqywh5z6fcqx8sjc",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vue.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vue.json
new file mode 100644
index 000000000000..f40c0054c948
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-vue.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/ikatyang/tree-sitter-vue",
+  "rev": "91fe2754796cd8fba5f229505a23fa08f3546c06",
+  "date": "2021-04-04T11:51:48+08:00",
+  "path": "/nix/store/9bw35fa56xli7r2k3b3bzzlm7vkpxzcy-tree-sitter-vue",
+  "sha256": "0l0kqy9ajm5izqcywd39aavgmc281s8qrhmjkbwl6r8arfj8vsrm",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yaml.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yaml.json
new file mode 100644
index 000000000000..1942b47e081d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yaml.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/ikatyang/tree-sitter-yaml",
+  "rev": "0e36bed171768908f331ff7dff9d956bae016efb",
+  "date": "2021-05-11T12:47:24+08:00",
+  "path": "/nix/store/7d7m4zs4ydnwbn3xnfm3pvpy7gvkrmg8-tree-sitter-yaml",
+  "sha256": "0wyvjh62zdp5bhd2y8k7k7x4wz952l55i1c8d94rhffsbbf9763f",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yang.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yang.json
new file mode 100644
index 000000000000..73d187230271
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-yang.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/hubro/tree-sitter-yang",
+  "rev": "8e9d175982afcefa3dac8ca20d40d1643accd2bd",
+  "date": "2021-07-29T23:07:25+02:00",
+  "path": "/nix/store/ark7nssjv3jzy1kw9anlma7li5k9zpnb-tree-sitter-yang",
+  "sha256": "044q9fikaxnrcrnfwc7cfjnwdg6v7jb6rg7mj556iryv0bkv48s1",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-zig.json b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-zig.json
new file mode 100644
index 000000000000..5ab34fb0e25b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/grammars/tree-sitter-zig.json
@@ -0,0 +1,11 @@
+{
+  "url": "https://github.com/maxxnino/tree-sitter-zig",
+  "rev": "93331b8bd8b4ebee2b575490b2758f16ad4e9f30",
+  "date": "2022-01-10T15:22:15+09:00",
+  "path": "/nix/store/g54w7vid7nf9shzfipch646dk4d88ah7-tree-sitter-zig",
+  "sha256": "0irckd6bh3i1vr5bi2lwsbvibbpih3jv3xqdq0dbsiy447dfiv50",
+  "fetchLFS": false,
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/nixpkgs/pkgs/development/tools/parsing/tree-sitter/update.nix b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/update.nix
new file mode 100644
index 000000000000..246574895e3c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/parsing/tree-sitter/update.nix
@@ -0,0 +1,450 @@
+{ writeShellScript
+, nix-prefetch-git
+, formats
+, lib
+, curl
+, jq
+, xe
+, src
+}:
+
+# Grammar list:
+# https://github.com/tree-sitter/tree-sitter/blob/master/docs/index.md
+
+let
+  # Grammars we want to fetch from the tree-sitter github orga
+  knownTreeSitterOrgGrammarRepos = [
+    "tree-sitter-javascript"
+    "tree-sitter-c"
+    "tree-sitter-swift"
+    "tree-sitter-json"
+    "tree-sitter-cpp"
+    "tree-sitter-ruby"
+    "tree-sitter-go"
+    "tree-sitter-c-sharp"
+    "tree-sitter-python"
+    "tree-sitter-typescript"
+    "tree-sitter-rust"
+    "tree-sitter-bash"
+    "tree-sitter-php"
+    "tree-sitter-java"
+    "tree-sitter-scala"
+    "tree-sitter-ocaml"
+    "tree-sitter-julia"
+    "tree-sitter-agda"
+    "tree-sitter-fluent"
+    "tree-sitter-html"
+    "tree-sitter-haskell"
+    "tree-sitter-regex"
+    "tree-sitter-css"
+    "tree-sitter-verilog"
+    "tree-sitter-jsdoc"
+    "tree-sitter-ql"
+    "tree-sitter-embedded-template"
+    "tree-sitter-tsq"
+  ];
+  knownTreeSitterOrgGrammarReposJson = jsonFile "known-tree-sitter-org-grammar-repos" knownTreeSitterOrgGrammarRepos;
+
+  # repos of the tree-sitter github orga we want to ignore (not grammars)
+  ignoredTreeSitterOrgRepos = [
+    "tree-sitter"
+    "tree-sitter-cli"
+    # this is the haskell language bindings, tree-sitter-haskell is the grammar
+    "haskell-tree-sitter"
+    # this is the ruby language bindings, tree-sitter-ruby is the grammar
+    "ruby-tree-sitter"
+    # this is the (unmaintained) rust language bindings, tree-sitter-rust is the grammar
+    "rust-tree-sitter"
+    # this is the nodejs language bindings, tree-sitter-javascript is the grammar
+    "node-tree-sitter"
+    # this is the python language bindings, tree-sitter-python is the grammar
+    "py-tree-sitter"
+    # afl fuzzing for tree sitter
+    "afl-tree-sitter"
+    # archived
+    "highlight-schema"
+    # website
+    "tree-sitter.github.io"
+    # not maintained
+    "tree-sitter-razor"
+    # rust library for constructing arbitrary graph structures from source code
+    "tree-sitter-graph"
+  ];
+  ignoredTreeSitterOrgReposJson = jsonFile "ignored-tree-sitter-org-repos" ignoredTreeSitterOrgRepos;
+
+  # Additional grammars that are not in the official github orga.
+  # If you need a grammar that already exists in the official orga,
+  # make sure to give it a different name.
+  otherGrammars = {
+    "tree-sitter-beancount" = {
+      orga = "polarmutex";
+      repo = "tree-sitter-beancount";
+    };
+    "tree-sitter-clojure" = {
+      orga = "sogaiu";
+      repo = "tree-sitter-clojure";
+    };
+    "tree-sitter-comment" = {
+      orga = "stsewd";
+      repo = "tree-sitter-comment";
+    };
+    "tree-sitter-dart" = {
+      orga = "usernobody14";
+      repo = "tree-sitter-dart";
+    };
+    "tree-sitter-elisp" = {
+      orga = "wilfred";
+      repo = "tree-sitter-elisp";
+    };
+    "tree-sitter-nix" = {
+      orga = "cstrahan";
+      repo = "tree-sitter-nix";
+    };
+    "tree-sitter-latex" = {
+      orga = "latex-lsp";
+      repo = "tree-sitter-latex";
+    };
+    "tree-sitter-lua" = {
+      orga = "MunifTanjim";
+      repo = "tree-sitter-lua";
+    };
+    "tree-sitter-fennel" = {
+      orga = "travonted";
+      repo = "tree-sitter-fennel";
+    };
+    "tree-sitter-make" = {
+      orga = "alemuller";
+      repo = "tree-sitter-make";
+    };
+    "tree-sitter-markdown" = {
+      orga = "MDeiml";
+      repo = "tree-sitter-markdown";
+    };
+    "tree-sitter-rst" = {
+      orga = "stsewd";
+      repo = "tree-sitter-rst";
+    };
+    "tree-sitter-svelte" = {
+      orga = "Himujjal";
+      repo = "tree-sitter-svelte";
+    };
+    "tree-sitter-vim" = {
+      orga = "vigoux";
+      repo = "tree-sitter-viml";
+    };
+    "tree-sitter-yaml" = {
+      orga = "ikatyang";
+      repo = "tree-sitter-yaml";
+    };
+    "tree-sitter-toml" = {
+      orga = "ikatyang";
+      repo = "tree-sitter-toml";
+    };
+    "tree-sitter-zig" = {
+      orga = "maxxnino";
+      repo = "tree-sitter-zig";
+    };
+    "tree-sitter-fish" = {
+      orga = "ram02z";
+      repo = "tree-sitter-fish";
+    };
+    "tree-sitter-dot" = {
+      orga = "rydesun";
+      repo = "tree-sitter-dot";
+    };
+    "tree-sitter-norg" = {
+      orga = "nvim-neorg";
+      repo = "tree-sitter-norg";
+    };
+    "tree-sitter-commonlisp" = {
+      orga = "thehamsta";
+      repo = "tree-sitter-commonlisp";
+    };
+    "tree-sitter-cuda" = {
+      orga = "thehamsta";
+      repo = "tree-sitter-cuda";
+    };
+    "tree-sitter-glsl" = {
+      orga = "thehamsta";
+      repo = "tree-sitter-glsl";
+    };
+    "tree-sitter-dockerfile" = {
+      orga = "camdencheek";
+      repo = "tree-sitter-dockerfile";
+    };
+    "tree-sitter-ledger" = {
+      orga = "cbarrete";
+      repo = "tree-sitter-ledger";
+    };
+    "tree-sitter-gomod" = {
+      orga = "camdencheek";
+      repo = "tree-sitter-go-mod";
+    };
+    "tree-sitter-graphql" = {
+      orga = "bkegley";
+      repo = "tree-sitter-graphql";
+    };
+    "tree-sitter-perl" = {
+      orga = "ganezdragon";
+      repo = "tree-sitter-perl";
+    };
+    "tree-sitter-kotlin" = {
+      orga = "fwcd";
+      repo = "tree-sitter-kotlin";
+    };
+    "tree-sitter-scss" = {
+      orga = "serenadeai";
+      repo = "tree-sitter-scss";
+    };
+    "tree-sitter-erlang" = {
+      orga = "abstractmachineslab";
+      repo = "tree-sitter-erlang";
+    };
+    "tree-sitter-elixir" = {
+      orga = "elixir-lang";
+      repo = "tree-sitter-elixir";
+    };
+    "tree-sitter-surface" = {
+      orga = "connorlay";
+      repo = "tree-sitter-surface";
+    };
+    "tree-sitter-heex" = {
+      orga = "connorlay";
+      repo = "tree-sitter-heex";
+    };
+    "tree-sitter-supercollider" = {
+      orga = "madskjeldgaard";
+      repo = "tree-sitter-supercollider";
+    };
+    "tree-sitter-tlaplus" = {
+      orga = "tlaplus-community";
+      repo = "tree-sitter-tlaplus";
+    };
+    "tree-sitter-glimmer" = {
+      orga = "alexlafroscia";
+      repo = "tree-sitter-glimmer";
+    };
+    "tree-sitter-pug" = {
+      orga = "zealot128";
+      repo = "tree-sitter-pug";
+    };
+    "tree-sitter-vue" = {
+      orga = "ikatyang";
+      repo = "tree-sitter-vue";
+    };
+    "tree-sitter-elm" = {
+      orga = "elm-tooling";
+      repo = "tree-sitter-elm";
+    };
+    "tree-sitter-yang" = {
+      orga = "hubro";
+      repo = "tree-sitter-yang";
+    };
+    "tree-sitter-query" = {
+      orga = "nvim-treesitter";
+      repo = "tree-sitter-query";
+    };
+    "tree-sitter-sparql" = {
+      orga = "bonabeavis";
+      repo = "tree-sitter-sparql";
+    };
+    "tree-sitter-gdscript" = {
+      orga = "prestonknopp";
+      repo = "tree-sitter-gdscript";
+    };
+    "tree-sitter-godot-resource" = {
+      orga = "prestonknopp";
+      repo = "tree-sitter-godot-resource";
+    };
+    "tree-sitter-turtle" = {
+      orga = "bonabeavis";
+      repo = "tree-sitter-turtle";
+    };
+    "tree-sitter-devicetree" = {
+      orga = "joelspadin";
+      repo = "tree-sitter-devicetree";
+    };
+    "tree-sitter-r" = {
+      orga = "r-lib";
+      repo = "tree-sitter-r";
+    };
+    "tree-sitter-bibtex" = {
+      orga = "latex-lsp";
+      repo = "tree-sitter-bibtex";
+    };
+    "tree-sitter-fortran" = {
+      orga = "stadelmanma";
+      repo = "tree-sitter-fortran";
+    };
+    "tree-sitter-cmake" = {
+      orga = "uyha";
+      repo = "tree-sitter-cmake";
+    };
+    "tree-sitter-json5" = {
+      orga = "joakker";
+      repo = "tree-sitter-json5";
+    };
+    "tree-sitter-pioasm" = {
+      orga = "leo60228";
+      repo = "tree-sitter-pioasm";
+    };
+    "tree-sitter-hjson" = {
+      orga = "winston0410";
+      repo = "tree-sitter-hjson";
+    };
+    "tree-sitter-llvm" = {
+      orga = "benwilliamgraham";
+      repo = "tree-sitter-llvm";
+    };
+    "tree-sitter-http" = {
+      orga = "ntbbloodbath";
+      repo = "tree-sitter-http";
+    };
+    "tree-sitter-prisma" = {
+      orga = "victorhqc";
+      repo = "tree-sitter-prisma";
+    };
+    "tree-sitter-org-nvim" = {
+      orga = "milisims";
+      repo = "tree-sitter-org";
+    };
+  };
+
+  allGrammars =
+    let
+      treeSitterOrgaGrammars =
+        lib.listToAttrs (map
+          (repo:
+            {
+              name = repo;
+              value = {
+                orga = "tree-sitter";
+                inherit repo;
+              };
+            })
+          knownTreeSitterOrgGrammarRepos);
+
+    in
+    mergeAttrsUnique otherGrammars treeSitterOrgaGrammars;
+
+  # TODO: move to lib
+  mergeAttrsUnique = left: right:
+    let intersect = lib.intersectLists (lib.attrNames left) (lib.attrNames right); in
+    assert
+    lib.assertMsg (intersect == [ ])
+      (lib.concatStringsSep "\n" [
+        "mergeAttrsUnique: keys in attrset overlapping:"
+        "left: ${lib.generators.toPretty {} (lib.getAttrs intersect left)}"
+        "right: ${lib.generators.toPretty {} (lib.getAttrs intersect right)}"
+      ]);
+    left // right;
+
+
+
+  jsonFile = name: val: (formats.json { }).generate name val;
+
+  # check the tree-sitter orga repos
+  checkTreeSitterRepos = writeShellScript "get-grammars.sh" ''
+    set -euo pipefail
+    res=$(${jq}/bin/jq \
+      --slurpfile known "${knownTreeSitterOrgGrammarReposJson}" \
+      --slurpfile ignore "${ignoredTreeSitterOrgReposJson}" \
+      '. - ($known[0] + $ignore[0])' \
+      )
+    if [ ! "$res" == "[]" ]; then
+      echo "These repositories are neither known nor ignored:" 1>&2
+      echo "$res" 1>&2
+      exit 1
+    fi
+  '';
+
+  # TODO
+  urlEscape = x: x;
+
+  # generic bash script to find the latest github release for a repo
+  latestGithubRelease = { orga, repo }: writeShellScript "latest-github-release" ''
+    set -euo pipefail
+
+    args=( '--silent' )
+    if [ -n "''${GITHUB_TOKEN:-}" ]; then
+      args+=( "-H" "Authorization: token ''${GITHUB_TOKEN}" )
+    fi
+    args+=( "https://api.github.com/repos/${urlEscape orga}/${urlEscape repo}/releases/latest" )
+
+    res=$(${curl}/bin/curl "''${args[@]}")
+
+    if [[ "$(printf "%s" "$res" | ${jq}/bin/jq '.message?')" =~ "rate limit" ]]; then
+      echo "rate limited" >&2
+    fi
+    release="$(printf "%s" "$res" | ${jq}/bin/jq -r '.tag_name')"
+    # github sometimes returns an empty list even tough there are releases
+    if [ "$release" = "null" ]; then
+      echo "uh-oh, latest for ${orga + "/" + repo} is not there, using HEAD" >&2
+      release="HEAD"
+    fi
+    echo "$release"
+  '';
+
+  # find the latest repos of a github organization
+  latestGithubRepos = { orga }: writeShellScript "latest-github-repos" ''
+    set -euo pipefail
+
+    args=( '--silent' )
+    if [ -n "''${GITHUB_TOKEN:-}" ]; then
+      args+=( "-H" "Authorization: token ''${GITHUB_TOKEN}" )
+    fi
+    args+=( 'https://api.github.com/orgs/${urlEscape orga}/repos?per_page=100' )
+
+    res=$(${curl}/bin/curl "''${args[@]}")
+
+    if [[ "$(printf "%s" "$res" | ${jq}/bin/jq '.message?')" =~ "rate limit" ]]; then
+      echo "rate limited" >&2
+      exit 1
+    elif [[ "$(printf "%s" "$res" | ${jq}/bin/jq '.message?')" =~ "Bad credentials" ]]; then
+      echo "bad credentials" >&2
+      exit 1
+    fi
+
+    printf "%s" "$res" | ${jq}/bin/jq 'map(.name)' \
+      || echo "failed $res"
+  '';
+
+  # update one tree-sitter grammar repo and print their nix-prefetch-git output
+  updateGrammar = { orga, repo }: writeShellScript "update-grammar.sh" ''
+    set -euo pipefail
+    latest="$(${latestGithubRelease { inherit orga repo; }})"
+    echo "Fetching latest release ($latest) of ${repo} …" >&2
+    ${nix-prefetch-git}/bin/nix-prefetch-git \
+      --quiet \
+      --no-deepClone \
+      --url "https://github.com/${urlEscape orga}/${urlEscape repo}" \
+      --rev "$latest"
+  '';
+
+  foreachSh = attrs: f:
+    lib.concatMapStringsSep "\n" f
+      (lib.mapAttrsToList (k: v: { name = k; } // v) attrs);
+
+  update-all-grammars = writeShellScript "update-all-grammars.sh" ''
+    set -euo pipefail
+    echo "fetching list of grammars" 1>&2
+    treeSitterRepos=$(${latestGithubRepos { orga = "tree-sitter"; }})
+    echo "checking the tree-sitter repo list against the grammars we know" 1>&2
+    printf '%s' "$treeSitterRepos" | ${checkTreeSitterRepos}
+    outputDir="${toString ./.}/grammars"
+    echo "writing files to $outputDir" 1>&2
+    mkdir -p "$outputDir"
+    ${foreachSh allGrammars
+      ({name, orga, repo}: ''${updateGrammar { inherit orga repo; }} > $outputDir/${name}.json'')}
+    ( echo "{ lib }:"
+      echo "{"
+      ${foreachSh allGrammars
+        ({name, ...}: ''
+           # indentation hack
+             printf "  %s = lib.importJSON ./%s.json;\n" "${name}" "${name}"'')}
+      echo "}" ) \
+      > "$outputDir/default.nix"
+  '';
+
+in
+update-all-grammars
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..1731dabf3704
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pax-rs/default.nix
@@ -0,0 +1,41 @@
+{ lib, fetchFromGitHub, fetchurl, rustPlatform, runCommand } :
+with rustPlatform;
+
+buildRustPackage rec {
+  pname = "pax-rs";
+  version = "0.4.0";
+
+  meta = with 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;
+    mainProgram = "px";
+  };
+
+  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 = "0d6g52hjflnw2zvlx10pz78527vh7mw5n43yi8q6dwr3pkbds1fs";
+}
diff --git a/nixpkgs/pkgs/development/tools/perseus-cli/default.nix b/nixpkgs/pkgs/development/tools/perseus-cli/default.nix
new file mode 100644
index 000000000000..9ec8aa21e2d3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/perseus-cli/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchCrate, makeWrapper, wasm-pack }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "perseus-cli";
+  version = "0.3.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-YyQQjuxNUxuo2PFluGyT/CpG22tgjRCfmFKA5MFRgHo=";
+  };
+
+  cargoSha256 = "sha256-SKxPsltXFH+ENexn/KDD43hGLSTgvtU9hv9Vdi2oeFA=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/perseus \
+      --prefix PATH : "${lib.makeBinPath [ wasm-pack ]}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://arctic-hen7.github.io/perseus";
+    description = "A high-level web development framework for Rust with full support for server-side rendering and static generation";
+    maintainers = with maintainers; [ max-niederman ];
+    license = with licenses; [ mit ];
+    mainProgram = "perseus";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pet/default.nix b/nixpkgs/pkgs/development/tools/pet/default.nix
new file mode 100644
index 000000000000..d759efb2b5b7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pet/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "pet";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "knqyf263";
+    repo = "pet";
+    rev = "v${version}";
+    sha256 = "sha256-gVTpzmXekQxGMucDKskGi+e+34nJwwsXwvQTjRO6Gdg=";
+  };
+
+  vendorSha256 = "sha256-dUvp7FEW09V0xMuhewPGw3TuAic/sD7xyXEYviZ2Ivs=";
+
+  doCheck = false;
+
+  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..2d7294ec1052
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pew/default.nix
@@ -0,0 +1,30 @@
+{ lib, python3 }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "pew";
+  version = "1.2.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "04anak82p4v9w0lgfs55s7diywxil6amq8c8bhli143ca8l2fcdq";
+  };
+
+  propagatedBuildInputs = [ virtualenv virtualenv-clone setuptools ];
+
+  # no tests are packaged
+  checkPhase = ''
+    $out/bin/pew > /dev/null
+  '';
+
+  pythonImportsCheck = [ "pew" ];
+
+  meta = with 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/pgformatter/default.nix b/nixpkgs/pkgs/development/tools/pgformatter/default.nix
new file mode 100644
index 000000000000..16ef0a99390e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pgformatter/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, perlPackages, fetchFromGitHub, shortenPerlShebang }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "pgformatter";
+  version = "5.2";
+
+  src = fetchFromGitHub {
+    owner = "darold";
+    repo = "pgFormatter";
+    rev = "v${version}";
+    sha256 = "sha256-NNdg3H+tB5ovKWGneOs496c0b2dv/zFYF4CZhuH07Fs=";
+  };
+
+  outputs = [ "out" ];
+
+  makeMakerFlags = [ "INSTALLDIRS=vendor" ];
+
+  # Avoid creating perllocal.pod, which contains a timestamp
+  installTargets = [ "pure_install" ];
+
+  # Makefile.PL only accepts DESTDIR and INSTALLDIRS, but we need to set more to make this work for NixOS.
+  patchPhase = ''
+    substituteInPlace pg_format \
+      --replace "#!/usr/bin/env perl" "#!/usr/bin/perl"
+    substituteInPlace Makefile.PL \
+      --replace "'DESTDIR'      => \$DESTDIR," "'DESTDIR'      => '$out/'," \
+      --replace "'INSTALLDIRS'  => \$INSTALLDIRS," "'INSTALLDIRS'  => \$INSTALLDIRS, 'INSTALLVENDORLIB' => 'bin/lib', 'INSTALLVENDORBIN' => 'bin', 'INSTALLVENDORSCRIPT' => 'bin', 'INSTALLVENDORMAN1DIR' => 'share/man/man1', 'INSTALLVENDORMAN3DIR' => 'share/man/man3',"
+  '';
+
+  nativeBuildInputs = lib.optional stdenv.isDarwin shortenPerlShebang;
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang $out/bin/pg_format
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A PostgreSQL SQL syntax beautifier that can work as a console program or as a CGI";
+    homepage = "https://github.com/darold/pgFormatter";
+    changelog = "https://github.com/darold/pgFormatter/releases/tag/v${version}";
+    maintainers = [ maintainers.marsam ];
+    license = [ licenses.postgresql licenses.artistic2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pgloader/default.nix b/nixpkgs/pkgs/development/tools/pgloader/default.nix
new file mode 100644
index 000000000000..b33216a5fac3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pgloader/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, makeWrapper, sbcl_2_0_8, sqlite, freetds, libzip, curl, git, cacert, openssl }:
+stdenv.mkDerivation rec {
+  pname = "pgloader";
+  version = "3.6.2";
+
+  src = fetchurl {
+    url = "https://github.com/dimitri/pgloader/releases/download/v3.6.2/pgloader-bundle-3.6.2.tgz";
+    sha256 = "1jqnw6pw11kwyy8zm2g7g85r8197fy0q4l70yybw9wr87wnqqnz3";
+  };
+
+  nativeBuildInputs = [ git makeWrapper ];
+  buildInputs = [ sbcl_2_0_8 cacert sqlite freetds libzip curl openssl ];
+
+  LD_LIBRARY_PATH = 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 lib; {
+    homepage = "https://pgloader.io/";
+    description = "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/pgtop/default.nix b/nixpkgs/pkgs/development/tools/pgtop/default.nix
new file mode 100644
index 000000000000..722f701892e4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pgtop/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, perlPackages, fetchFromGitHub, shortenPerlShebang }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "pgtop";
+  version = "0.11";
+
+  src = fetchFromGitHub {
+    owner = "cosimo";
+    repo = "pgtop";
+    rev = "v${version}";
+    sha256 = "1awyl6ddfihm7dfr5y2z15r1si5cyipnlyyj3m1l19pk98s4x66l";
+  };
+
+  outputs = [ "out" ];
+
+  buildInputs = with perlPackages; [ DBI DBDPg TermReadKey JSON LWP ];
+
+  nativeBuildInputs = lib.optional stdenv.isDarwin shortenPerlShebang;
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang $out/bin/pgtop
+  '';
+
+  meta = with lib; {
+    description = "a PostgreSQL clone of `mytop', which in turn is a `top' clone for MySQL";
+    homepage = "https://github.com/cosimo/pgtop";
+    changelog = "https://github.com/cosimo/pgtop/releases/tag/v${version}";
+    maintainers = [ maintainers.hagl ];
+    license = [ licenses.gpl2Only ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/phantomjs2/default.nix b/nixpkgs/pkgs/development/tools/phantomjs2/default.nix
new file mode 100644
index 000000000000..d9e4ec1fb199
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/phantomjs2/default.nix
@@ -0,0 +1,118 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch
+, bison, flex, fontconfig, freetype, gperf, icu, openssl, libjpeg
+, libpng, perl, python2, 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 {
+  pname = "phantomjs";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "ariya";
+    repo = "phantomjs";
+    rev = version;
+    sha256 = "1zsbpk1sgh9a16f1a5nx3qvk77ibjn812wqkxqck8n6fia85m5iq";
+  };
+
+  nativeBuildInputs = [ qmake ];
+  buildInputs = [
+    bison flex fontconfig freetype gperf icu openssl
+    libjpeg libpng perl python2 ruby sqlite qtwebkit qtbase
+    makeWrapper
+  ] ++ 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"
+  '';
+
+  # Avoids error in webpage.cpp:80:89:
+  # invalid suffix on literal; C++11 requires a space between litend identifier
+  NIX_CFLAGS_COMPILE = "-Wno-reserved-user-defined-literal";
+
+  __impureHostDeps = lib.optional stdenv.isDarwin "/usr/lib/libicucore.dylib";
+
+  dontWrapQtApps = 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
+  '' + 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 : ${lib.makeBinPath [ qtbase ]}
+  '';
+
+  meta = with 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 = "https://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/picotool/default.nix b/nixpkgs/pkgs/development/tools/picotool/default.nix
new file mode 100644
index 000000000000..507284081f5a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/picotool/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, libusb1, pico-sdk }:
+
+stdenv.mkDerivation rec {
+  pname = "picotool";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "raspberrypi";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-YjDHoRcDoezyli42bJ0bnfjdNNY8l6ZilrxhOudqvwE=";
+  };
+
+  buildInputs = [ libusb1 pico-sdk ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  cmakeFlags = [ "-DPICO_SDK_PATH=${pico-sdk}/lib/pico-sdk" ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 ./picotool -t $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/raspberrypi/picotool";
+    description = "Tool for interacting with a RP2040 device in BOOTSEL mode, or with a RP2040 binary";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ musfay ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pigeon/default.nix b/nixpkgs/pkgs/development/tools/pigeon/default.nix
new file mode 100644
index 000000000000..ae5435330593
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pigeon/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+buildGoPackage {
+  pname = "pigeon";
+  version = "20190810-f3db42a662";
+
+  goPackagePath = "github.com/mna/pigeon";
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "mna";
+    repo = "pigeon";
+    rev = "f3db42a662eded7550fc7cd11605d05311dfa30f";
+    sha256 = "1n0zqidwbqqfslrirpbqw14ylgiry6ggcp9ll4h8rf1chqwk6dhv";
+  };
+
+  meta = {
+    homepage = "https://github.com/mna/pigeon";
+    description = "A PEG parser generator for Go";
+    maintainers = with lib.maintainers; [ zimbatm ];
+    license = with lib.licenses; [ bsd3 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pigeon/deps.nix b/nixpkgs/pkgs/development/tools/pigeon/deps.nix
new file mode 100644
index 000000000000..d836dc43c7cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pigeon/deps.nix
@@ -0,0 +1,66 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+  {
+    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 = "3b0461eec859";
+      sha256 = "0l00c8l0a8xnv6qdpwfzxxsr58jggacgzdrwiprrfx2xqm37b6d5";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev = "112230192c58";
+      sha256 = "05i2k43j2d0llq768hg5pf3hb2yhfzp9la1w5wp0rsnnzblr0lfn";
+    };
+  }
+  {
+    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 = "b29f5f60c37a";
+      sha256 = "118rvb59hc1fykbmif4008rbxw1p0dblc8dxkq96yaapd6p0vbpn";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/xerrors";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/xerrors";
+      rev = "a985d3407aa7";
+      sha256 = "00wzr5w8aadipgc3rkk8f11i41znskfj9ix5nhhaxyg7isrslgcj";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/pipenv/default.nix b/nixpkgs/pkgs/development/tools/pipenv/default.nix
new file mode 100644
index 000000000000..c7d22015d47a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pipenv/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, python3
+, installShellFiles
+}:
+
+with python3.pkgs;
+
+let
+
+  runtimeDeps = ps: with ps; [
+    certifi
+    setuptools
+    pip
+    virtualenv
+    virtualenv-clone
+  ];
+
+  pythonEnv = python3.withPackages runtimeDeps;
+
+in buildPythonApplication rec {
+  pname = "pipenv";
+  version = "2022.1.8";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "f84d7119239b22ab2ac2b8fbc7d619d83cf41135206d72a17c4f151cda529fd0";
+  };
+
+  LC_ALL = "en_US.UTF-8";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postPatch = ''
+    # pipenv invokes python in a subprocess to create a virtualenv
+    # and to call setup.py.
+    # It would use sys.executable, which in our case points to a python that
+    # does not have the required dependencies.
+    substituteInPlace pipenv/core.py \
+      --replace "sys.executable" "'${pythonEnv.interpreter}'"
+  '';
+
+  propagatedBuildInputs = runtimeDeps python3.pkgs;
+
+  postInstall = ''
+    installShellCompletion --cmd pipenv \
+      --bash <(_PIPENV_COMPLETE=bash_source $out/bin/pipenv) \
+      --zsh <(_PIPENV_COMPLETE=zsh_source $out/bin/pipenv) \
+      --fish <(_PIPENV_COMPLETE=fish_source $out/bin/pipenv)
+  '';
+
+  doCheck = true;
+  checkPhase = ''
+    export HOME=$(mktemp -d)
+    cp -r --no-preserve=mode ${wheel.src} $HOME/wheel-src
+    $out/bin/pipenv install $HOME/wheel-src
+  '';
+
+  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/poetry2nix/poetry2nix/README.md b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/README.md
new file mode 100644
index 000000000000..ac4861534f58
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/README.md
@@ -0,0 +1,6 @@
+Dont change these files here, they are maintained at https://github.com/nix-community/poetry2nix
+
+The update procedure is as-follows:
+1. Send your change to the upstream poetry2nix repository
+2. Get it approved with tests passing
+3. Run the update script in pkgs/development/tools/poetry2nix
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/bin/poetry2nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/bin/poetry2nix
new file mode 100755
index 000000000000..559025f3ec45
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/bin/poetry2nix
@@ -0,0 +1,157 @@
+#!/usr/bin/env python
+from concurrent.futures import ThreadPoolExecutor
+import subprocess
+import textwrap
+import argparse
+import toml
+import json
+import sys
+
+from typing import Dict, Any, Tuple, List
+
+
+class Package:
+    def __init__(self, attrs: Dict[str, Any]) -> None:
+        self.attrs = attrs
+        self.name = attrs["name"]
+        self.source = self.attrs["source"]
+
+    def fetch(self) -> Tuple["Package", subprocess.CompletedProcess]:
+        raise NotImplementedError()
+
+    def expression(self, output: str) -> str:
+        raise NotImplementedError()
+
+
+class UrlPackage(Package):
+    def fetch(self) -> Tuple[Package, subprocess.CompletedProcess]:
+        return (
+            self,
+            subprocess.run(
+                [
+                    "nix-prefetch-url",
+                    "--unpack",
+                    self.source["url"],
+                ],
+                stdout=subprocess.PIPE,
+                stderr=subprocess.PIPE,
+                text=True
+            ),
+        )
+
+    def expression(self, output: str) -> str:
+        sha256 = output.rstrip()
+        return textwrap.dedent("""
+            %s = super.%s.overridePythonAttrs (
+              _: {
+                src = pkgs.fetchzip {
+                  url = "%s";
+                  sha256 = "%s";
+                };
+              }
+            );""" % (self.name, self.name, self.source["url"], sha256))
+
+
+class GitPackage(Package):
+    def fetch(self) -> Tuple[Package, subprocess.CompletedProcess]:
+        reference = self.source.get("resolved_reference", self.source["reference"])
+
+        return (
+            self,
+            subprocess.run(
+                [
+                    "nix-prefetch-git",
+                    "--fetch-submodules",
+                    "--url",
+                    self.source["url"],
+                    "--rev",
+                    reference,
+                ],
+                stdout=subprocess.PIPE,
+                stderr=subprocess.PIPE,
+                text=True
+            ),
+        )
+
+    def expression(self, output: str) -> str:
+        meta = json.loads(output)
+        return textwrap.dedent("""
+            %s = super.%s.overridePythonAttrs (
+              _: {
+                src = pkgs.fetchgit {
+                  url = "%s";
+                  rev = "%s";
+                  sha256 = "%s";
+                };
+              }
+            );""" % (self.name, self.name, meta["url"], meta["rev"], meta["sha256"]))
+
+
+def parse_args() -> argparse.Namespace:
+    argparser = argparse.ArgumentParser(description="Poetry2nix CLI")
+
+    subparsers = argparser.add_subparsers(dest="subcommand")
+    subparsers.required = True
+
+    parser_lock = subparsers.add_parser("lock", help="Generate overrides for git hashes",)
+    parser_lock.add_argument(
+        "--lock", default="poetry.lock", help="Path to input poetry.lock",
+    )
+    parser_lock.add_argument(
+        "--out", default="poetry-git-overlay.nix", help="Output file",
+    )
+    return argparser.parse_args()
+
+
+def indent(expr: str, spaces: int = 2) -> str:
+    i = " " * spaces
+    return "\n".join([(i if l != "" else "") + l for l in expr.split("\n")])
+
+
+def main() -> None:
+    args = parse_args()
+
+    with open(args.lock) as lockf:
+        lock = toml.load(lockf)
+
+    pkgs: List[Package] = []
+    for pkg in lock["package"]:
+        if "source" in pkg:
+            source_type = pkg["source"]["type"]
+            if source_type == "git":
+                pkgs.append(GitPackage(pkg))
+            elif source_type == "url":
+                pkgs.append(UrlPackage(pkg))
+
+    with ThreadPoolExecutor() as e:
+        futures = []
+
+        for pkg in pkgs:
+            futures.append(e.submit(pkg.fetch))
+
+        lines = [
+            "{ pkgs }:",
+            "self: super: {",
+        ]
+
+        for f in futures:
+            package, p = f.result()
+            if p.returncode != 0:
+                sys.stderr.write(p.stderr)
+                sys.stderr.flush()
+                exit(p.returncode)
+            expr = package.expression(p.stdout)
+            lines.append(indent(expr))
+
+        lines.extend(["", "}", ""])
+
+        expr = "\n".join(lines)
+
+    with open(args.out, "w") as fout:
+        fout.write(expr)
+
+    print(f"Wrote {args.out}")
+
+
+if __name__ == "__main__":
+    main()
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/cli.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/cli.nix
new file mode 100644
index 000000000000..b96316e59d83
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/cli.nix
@@ -0,0 +1,49 @@
+{ pkgs ? import <nixpkgs> { }
+, lib ? pkgs.lib
+, version
+}:
+let
+  inherit (pkgs) python3;
+in
+pkgs.stdenv.mkDerivation {
+  pname = "poetry2nix";
+  inherit version;
+
+  buildInputs = [
+    (python3.withPackages (ps: [ ps.toml ]))
+  ];
+
+  nativeBuildInputs = [
+    pkgs.makeWrapper
+  ];
+
+  src = ./bin;
+
+  dontConfigure = true;
+
+  buildPhase = ''
+    runHook preBuild
+    patchShebangs poetry2nix
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    mv poetry2nix $out/bin
+
+    wrapProgram $out/bin/poetry2nix --prefix PATH ":" ${lib.makeBinPath [
+      pkgs.nix-prefetch-git
+    ]}
+
+    runHook postInstall
+  '';
+
+  meta = {
+    homepage = "https://github.com/nix-community/poetry2nix";
+    description = "CLI to supplement sha256 hashes for git dependencies";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.adisbladis ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/default.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/default.nix
new file mode 100644
index 000000000000..c9b70c83bfee
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/default.nix
@@ -0,0 +1,454 @@
+{ pkgs ? import <nixpkgs> { }
+, lib ? pkgs.lib
+, poetry ? null
+, poetryLib ? import ./lib.nix { inherit lib pkgs; stdenv = pkgs.stdenv; }
+}:
+let
+  # Poetry2nix version
+  version = "1.26.0";
+
+  inherit (poetryLib) isCompatible readTOML moduleName;
+
+  /* The default list of poetry2nix override overlays */
+  mkEvalPep508 = import ./pep508.nix {
+    inherit lib poetryLib;
+    stdenv = pkgs.stdenv;
+  };
+  getFunctorFn = fn: if builtins.typeOf fn == "set" then fn.__functor else fn;
+
+  # Map SPDX identifiers to license names
+  spdxLicenses = lib.listToAttrs (lib.filter (pair: pair.name != null) (builtins.map (v: { name = if lib.hasAttr "spdxId" v then v.spdxId else null; value = v; }) (lib.attrValues lib.licenses)));
+  # Get license by id falling back to input string
+  getLicenseBySpdxId = spdxId: spdxLicenses.${spdxId} or spdxId;
+
+  # Experimental withPlugins functionality
+  toPluginAble = (import ./plugins.nix { inherit pkgs lib; }).toPluginAble;
+
+  mkInputAttrs =
+    { py
+    , pyProject
+    , attrs
+    , includeBuildSystem ? true
+    }:
+    let
+      getInputs = attr: attrs.${attr} or [ ];
+
+      # Get dependencies and filter out depending on interpreter version
+      getDeps = depAttr:
+        let
+          compat = isCompatible (poetryLib.getPythonVersion py);
+          deps = pyProject.tool.poetry.${depAttr} or { };
+          depAttrs = builtins.map (d: lib.toLower d) (builtins.attrNames deps);
+        in
+        (
+          builtins.map
+            (
+              dep:
+              let
+                pkg = py.pkgs."${moduleName dep}";
+                constraints = deps.${dep}.python or "";
+                isCompat = compat constraints;
+              in
+              if isCompat then pkg else null
+            )
+            depAttrs
+        );
+
+      buildSystemPkgs = poetryLib.getBuildSystemPkgs {
+        inherit pyProject;
+        pythonPackages = py.pkgs;
+      };
+
+      mkInput = attr: extraInputs: getInputs attr ++ extraInputs;
+
+    in
+    {
+      buildInputs = mkInput "buildInputs" (if includeBuildSystem then buildSystemPkgs else [ ]);
+      propagatedBuildInputs = mkInput "propagatedBuildInputs" (getDeps "dependencies") ++ ([ py.pkgs.setuptools ]);
+      nativeBuildInputs = mkInput "nativeBuildInputs" [ ];
+      checkInputs = mkInput "checkInputs" (getDeps "dev-dependencies");
+    };
+
+
+in
+lib.makeScope pkgs.newScope (self: {
+
+  inherit version;
+
+  /* Returns a package of editable sources whose changes will be available without needing to restart the
+    nix-shell.
+    In editablePackageSources you can pass a mapping from package name to source directory to have
+    those packages available in the resulting environment, whose source changes are immediately available.
+
+  */
+  mkPoetryEditablePackage =
+    { projectDir ? null
+    , pyproject ? projectDir + "/pyproject.toml"
+    , python ? pkgs.python3
+    , pyProject ? readTOML pyproject
+      # Example: { my-app = ./src; }
+    , editablePackageSources
+    }:
+      assert editablePackageSources != { };
+      import ./editable.nix {
+        inherit pyProject python pkgs lib poetryLib editablePackageSources;
+      };
+
+  /* Returns a package containing scripts defined in tool.poetry.scripts.
+  */
+  mkPoetryScriptsPackage =
+    { projectDir ? null
+    , pyproject ? projectDir + "/pyproject.toml"
+    , python ? pkgs.python3
+    , pyProject ? readTOML pyproject
+    , scripts ? pyProject.tool.poetry.scripts
+    }:
+      assert scripts != { };
+      import ./shell-scripts.nix {
+        inherit lib python scripts;
+      };
+
+  /*
+    Returns an attrset { python, poetryPackages, pyProject, poetryLock } for the given pyproject/lockfile.
+  */
+  mkPoetryPackages =
+    { projectDir ? null
+    , pyproject ? projectDir + "/pyproject.toml"
+    , poetrylock ? projectDir + "/poetry.lock"
+    , overrides ? self.defaultPoetryOverrides
+    , python ? pkgs.python3
+    , pwd ? projectDir
+    , preferWheels ? false
+      # Example: { my-app = ./src; }
+    , editablePackageSources ? { }
+    , __isBootstrap ? false  # Hack: Always add Poetry as a build input unless bootstrapping
+    , pyProject ? readTOML pyproject
+    }@attrs:
+    let
+      poetryPkg = poetry.override { inherit python; };
+
+      scripts = pyProject.tool.poetry.scripts or { };
+      hasScripts = scripts != { };
+      scriptsPackage = self.mkPoetryScriptsPackage {
+        inherit python scripts;
+      };
+
+      editablePackageSources' = lib.filterAttrs (name: path: path != null) editablePackageSources;
+      hasEditable = editablePackageSources' != { };
+      editablePackage = self.mkPoetryEditablePackage {
+        inherit pyProject python;
+        editablePackageSources = editablePackageSources';
+      };
+
+      poetryLock = readTOML poetrylock;
+      lockFiles =
+        let
+          lockfiles = lib.getAttrFromPath [ "metadata" "files" ] poetryLock;
+        in
+        lib.listToAttrs (lib.mapAttrsToList (n: v: { name = moduleName n; value = v; }) lockfiles);
+      specialAttrs = [
+        "overrides"
+        "poetrylock"
+        "projectDir"
+        "pwd"
+        "preferWheels"
+      ];
+      passedAttrs = builtins.removeAttrs attrs specialAttrs;
+      evalPep508 = mkEvalPep508 python;
+
+      # Filter packages by their PEP508 markers & pyproject interpreter version
+      partitions =
+        let
+          supportsPythonVersion = pkgMeta: if pkgMeta ? marker then (evalPep508 pkgMeta.marker) else true && isCompatible (poetryLib.getPythonVersion python) pkgMeta.python-versions;
+        in
+        lib.partition supportsPythonVersion poetryLock.package;
+      compatible = partitions.right;
+      incompatible = partitions.wrong;
+
+      # Create an overridden version of pythonPackages
+      #
+      # We need to avoid mixing multiple versions of pythonPackages in the same
+      # closure as python can only ever have one version of a dependency
+      baseOverlay = self: super:
+        let
+          getDep = depName: self.${depName};
+          lockPkgs = builtins.listToAttrs (
+            builtins.map
+              (
+                pkgMeta: rec {
+                  name = moduleName pkgMeta.name;
+                  value = self.mkPoetryDep (
+                    pkgMeta // {
+                      inherit pwd preferWheels;
+                      inherit __isBootstrap;
+                      source = pkgMeta.source or null;
+                      files = lockFiles.${name};
+                      pythonPackages = self;
+                      sourceSpec = pyProject.tool.poetry.dependencies.${name} or pyProject.tool.poetry.dev-dependencies.${name} or { };
+                    }
+                  );
+                }
+              )
+              (lib.reverseList compatible)
+          );
+        in
+        lockPkgs // {
+          # Create a dummy null package for the current project in case any dependencies depend on the root project (issue #307)
+          ${pyProject.tool.poetry.name} = null;
+        };
+      overlays = builtins.map
+        getFunctorFn
+        (
+          [
+            (
+              self: super:
+                let
+                  hooks = self.callPackage ./hooks { };
+                in
+                {
+                  mkPoetryDep = self.callPackage ./mk-poetry-dep.nix {
+                    inherit pkgs lib python poetryLib evalPep508;
+                  };
+
+                  # Use poetry-core from the poetry build (pep517/518 build-system)
+                  poetry-core = if __isBootstrap then null else poetryPkg.passthru.python.pkgs.poetry-core;
+                  poetry = if __isBootstrap then null else poetryPkg;
+
+                  __toPluginAble = toPluginAble self;
+
+                  inherit (hooks) pipBuildHook removePathDependenciesHook removeGitDependenciesHook poetry2nixFixupHook wheelUnpackHook;
+                } // lib.optionalAttrs (! super ? setuptools-scm) {
+                  # The canonical name is setuptools-scm
+                  setuptools-scm = super.setuptools_scm;
+                }
+            )
+            # Null out any filtered packages, we don't want python.pkgs from nixpkgs
+            (self: super: builtins.listToAttrs (builtins.map (x: { name = moduleName x.name; value = null; }) incompatible))
+            # Create poetry2nix layer
+            baseOverlay
+          ] ++ # User provided overrides
+          (if builtins.typeOf overrides == "list" then overrides else [ overrides ])
+        );
+      packageOverrides = lib.foldr lib.composeExtensions (self: super: { }) overlays;
+      py = python.override { inherit packageOverrides; self = py; };
+
+      inputAttrs = mkInputAttrs { inherit py pyProject; attrs = { }; includeBuildSystem = false; };
+
+      requiredPythonModules = python.pkgs.requiredPythonModules;
+      /* Include all the nested dependencies which are required for each package.
+        This guarantees that using the "poetryPackages" attribute will return
+        complete list of dependencies for the poetry project to be portable.
+      */
+      storePackages = requiredPythonModules (builtins.foldl' (acc: v: acc ++ v) [ ] (lib.attrValues inputAttrs));
+    in
+    {
+      python = py;
+      poetryPackages = storePackages
+        ++ lib.optional hasScripts scriptsPackage
+        ++ lib.optional hasEditable editablePackage;
+      poetryLock = poetryLock;
+      inherit pyProject;
+    };
+
+  /* Returns a package with a python interpreter and all packages specified in the poetry.lock lock file.
+    In editablePackageSources you can pass a mapping from package name to source directory to have
+    those packages available in the resulting environment, whose source changes are immediately available.
+
+    Example:
+    poetry2nix.mkPoetryEnv { poetrylock = ./poetry.lock; python = python3; }
+  */
+  mkPoetryEnv =
+    { projectDir ? null
+    , pyproject ? projectDir + "/pyproject.toml"
+    , poetrylock ? projectDir + "/poetry.lock"
+    , overrides ? self.defaultPoetryOverrides
+    , pwd ? projectDir
+    , python ? pkgs.python3
+    , preferWheels ? false
+    , editablePackageSources ? { }
+    , extraPackages ? ps: [ ]
+    }:
+    let
+      inherit (lib) elem hasAttr;
+
+      pyProject = readTOML pyproject;
+
+      # Automatically add dependencies with develop = true as editable packages, but only if path dependencies
+      getEditableDeps = set: lib.mapAttrs
+        (name: value: projectDir + "/${value.path}")
+        (lib.filterAttrs (name: dep: dep.develop or false && hasAttr "path" dep) set);
+
+      editablePackageSources' = (
+        (getEditableDeps (pyProject.tool.poetry."dependencies" or { }))
+        // (getEditableDeps (pyProject.tool.poetry."dev-dependencies" or { }))
+        // editablePackageSources
+      );
+
+      poetryPython = self.mkPoetryPackages {
+        inherit pyproject poetrylock overrides python pwd preferWheels pyProject;
+        editablePackageSources = editablePackageSources';
+      };
+
+      inherit (poetryPython) poetryPackages;
+
+      # Don't add editable sources to the environment since they will sometimes fail to build and are not useful in the development env
+      editableAttrs = lib.attrNames editablePackageSources';
+      envPkgs = builtins.filter (drv: ! lib.elem (drv.pname or drv.name or "") editableAttrs) poetryPackages;
+
+    in
+    poetryPython.python.withPackages (ps: envPkgs ++ (extraPackages ps));
+
+  /* Creates a Python application from pyproject.toml and poetry.lock
+
+    The result also contains a .dependencyEnv attribute which is a python
+    environment of all dependencies and this apps modules. This is useful if
+    you rely on dependencies to invoke your modules for deployment: e.g. this
+    allows `gunicorn my-module:app`.
+  */
+  mkPoetryApplication =
+    { projectDir ? null
+    , src ? (
+        # Assume that a project which is the result of a derivation is already adequately filtered
+        if lib.isDerivation projectDir then projectDir else self.cleanPythonSources { src = projectDir; }
+      )
+    , pyproject ? projectDir + "/pyproject.toml"
+    , poetrylock ? projectDir + "/poetry.lock"
+    , overrides ? self.defaultPoetryOverrides
+    , meta ? { }
+    , python ? pkgs.python3
+    , pwd ? projectDir
+    , preferWheels ? false
+    , __isBootstrap ? false  # Hack: Always add Poetry as a build input unless bootstrapping
+    , ...
+    }@attrs:
+    let
+      poetryPython = self.mkPoetryPackages {
+        inherit pyproject poetrylock overrides python pwd preferWheels __isBootstrap;
+      };
+      py = poetryPython.python;
+
+      inherit (poetryPython) pyProject;
+      specialAttrs = [
+        "overrides"
+        "poetrylock"
+        "projectDir"
+        "pwd"
+        "pyproject"
+        "preferWheels"
+      ];
+      passedAttrs = builtins.removeAttrs attrs specialAttrs;
+
+      inputAttrs = mkInputAttrs { inherit py pyProject attrs; };
+
+      app = py.pkgs.buildPythonPackage (
+        passedAttrs // inputAttrs // {
+          nativeBuildInputs = inputAttrs.nativeBuildInputs ++ [
+            py.pkgs.removePathDependenciesHook
+            py.pkgs.removeGitDependenciesHook
+          ];
+        } // {
+          pname = moduleName pyProject.tool.poetry.name;
+          version = pyProject.tool.poetry.version;
+
+          inherit src;
+
+          format = "pyproject";
+          # Like buildPythonApplication, but without the toPythonModule part
+          # Meaning this ends up looking like an application but it also
+          # provides python modules
+          namePrefix = "";
+
+          passthru = {
+            python = py;
+            dependencyEnv = (
+              lib.makeOverridable ({ app, ... }@attrs:
+                let
+                  args = builtins.removeAttrs attrs [ "app" ] // {
+                    extraLibs = [ app ];
+                  };
+                in
+                py.buildEnv.override args)
+            ) { inherit app; };
+          };
+
+          # Extract position from explicitly passed attrs so meta.position won't point to poetry2nix internals
+          pos = builtins.unsafeGetAttrPos (lib.elemAt (lib.attrNames attrs) 0) attrs;
+
+          meta = lib.optionalAttrs (lib.hasAttr "description" pyProject.tool.poetry)
+            {
+              inherit (pyProject.tool.poetry) description;
+            } // lib.optionalAttrs (lib.hasAttr "homepage" pyProject.tool.poetry) {
+            inherit (pyProject.tool.poetry) homepage;
+          } // {
+            inherit (py.meta) platforms;
+            license = getLicenseBySpdxId (pyProject.tool.poetry.license or "unknown");
+          } // meta;
+
+        }
+      );
+    in
+    app;
+
+  /* Poetry2nix CLI used to supplement SHA-256 hashes for git dependencies  */
+  cli = import ./cli.nix {
+    inherit pkgs lib;
+    inherit (self) version;
+  };
+
+  # inherit mkPoetryEnv mkPoetryApplication mkPoetryPackages;
+
+  inherit (poetryLib) cleanPythonSources;
+
+
+  /*
+    Create a new default set of overrides with the same structure as the built-in ones
+  */
+  mkDefaultPoetryOverrides = defaults: {
+    __functor = defaults;
+
+    extend = overlay:
+      let
+        composed = lib.foldr lib.composeExtensions overlay [ defaults ];
+      in
+      self.mkDefaultPoetryOverrides composed;
+
+    overrideOverlay = fn:
+      let
+        overlay = self: super:
+          let
+            defaultSet = defaults self super;
+            customSet = fn self super;
+          in
+          defaultSet // customSet;
+      in
+      self.mkDefaultPoetryOverrides overlay;
+  };
+
+  /*
+    The default list of poetry2nix override overlays
+
+    Can be overriden by calling defaultPoetryOverrides.overrideOverlay which takes an overlay function
+  */
+  defaultPoetryOverrides = self.mkDefaultPoetryOverrides (import ./overrides.nix { inherit pkgs lib; });
+
+  /*
+    Convenience functions for specifying overlays with or without the poerty2nix default overrides
+  */
+  overrides = {
+    /*
+      Returns the specified overlay in a list
+    */
+    withoutDefaults = overlay: [
+      overlay
+    ];
+
+    /*
+      Returns the specified overlay and returns a list
+      combining it with poetry2nix default overrides
+    */
+    withDefaults = overlay: [
+      self.defaultPoetryOverrides
+      overlay
+    ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/editable.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/editable.nix
new file mode 100644
index 000000000000..1365d19032b4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/editable.nix
@@ -0,0 +1,55 @@
+{ pkgs
+, lib
+, poetryLib
+, pyProject
+, python
+, editablePackageSources
+}:
+let
+  name = poetryLib.moduleName pyProject.tool.poetry.name;
+
+  # Just enough standard PKG-INFO fields for an editable installation
+  pkgInfoFields = {
+    Metadata-Version = "2.1";
+    Name = name;
+    # While the pyproject.toml could contain arbitrary version strings, for
+    # simplicity we just use the same one for PKG-INFO, even though that
+    # should follow follow PEP 440: https://www.python.org/dev/peps/pep-0345/#version
+    # This is how poetry transforms it: https://github.com/python-poetry/poetry/blob/6cd3645d889f47c10425961661b8193b23f0ed79/poetry/version/version.py
+    Version = pyProject.tool.poetry.version;
+    Summary = pyProject.tool.poetry.description;
+  };
+
+  pkgInfoFile = builtins.toFile "${name}-PKG-INFO"
+    (lib.concatStringsSep "\n" (lib.mapAttrsToList (key: value: "${key}: ${value}") pkgInfoFields));
+
+  entryPointsFile = builtins.toFile "${name}-entry_points.txt"
+    (lib.generators.toINI { } pyProject.tool.poetry.plugins);
+
+  # A python package that contains simple .egg-info and .pth files for an editable installation
+  editablePackage = python.pkgs.toPythonModule (pkgs.runCommand "${name}-editable"
+    { } ''
+        mkdir -p "$out/${python.sitePackages}"
+        cd "$out/${python.sitePackages}"
+
+        # See https://docs.python.org/3.8/library/site.html for info on such .pth files
+        # These add another site package path for each line
+        touch poetry2nix-editable.pth
+        ${lib.concatMapStringsSep "\n"
+    (src: ''
+          echo "${toString src}" >> poetry2nix-editable.pth
+        '')
+          (lib.attrValues editablePackageSources)}
+
+        # Create a very simple egg so pkg_resources can find this package
+        # See https://setuptools.readthedocs.io/en/latest/formats.html for more info on the egg format
+        mkdir "${name}.egg-info"
+        cd "${name}.egg-info"
+        ln -s ${pkgInfoFile} PKG-INFO
+        ${lib.optionalString (pyProject.tool.poetry ? plugins) ''
+          ln -s ${entryPointsFile} entry_points.txt
+        ''}
+  ''
+  );
+in
+editablePackage
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/extensions.json b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/extensions.json
new file mode 100644
index 000000000000..33052efe2968
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/extensions.json
@@ -0,0 +1,15 @@
+[
+  "egg",
+  "tar",
+  "tar.bz2",
+  "tar.gz",
+  "tar.lz",
+  "tar.lzma",
+  "tar.xz",
+  "tbz",
+  "tgz",
+  "tlz",
+  "txz",
+  "whl",
+  "zip"
+]
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/fetch-from-pypi.sh b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/fetch-from-pypi.sh
new file mode 100644
index 000000000000..e56dee6849b2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/fetch-from-pypi.sh
@@ -0,0 +1,24 @@
+source $stdenv/setup
+set -euo pipefail
+
+curl="curl            \
+ --location           \
+ --max-redirs 20      \
+ --retry 2            \
+ --disable-epsv       \
+ --cookie-jar cookies \
+ --insecure           \
+ --speed-time 5       \
+ --progress-bar       \
+ --fail               \
+ $curlOpts            \
+ $NIX_CURL_FLAGS"
+
+echo "Trying to fetch with predicted URL: $predictedURL"
+
+$curl $predictedURL --output $out && exit 0
+
+echo "Predicted URL '$predictedURL' failed, querying pypi.org"
+$curl "https://pypi.org/pypi/$pname/json" | jq -r ".releases.\"$version\"[] | select(.filename == \"$file\") | .url" > url
+url=$(cat url)
+$curl -k $url --output $out
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/fetch_from_legacy.py b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/fetch_from_legacy.py
new file mode 100644
index 000000000000..8858b64ec3ee
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/fetch_from_legacy.py
@@ -0,0 +1,119 @@
+# Some repositories (such as Devpi) expose the Pypi legacy API
+# (https://warehouse.pypa.io/api-reference/legacy.html).
+#
+# Note it is not possible to use pip
+# https://discuss.python.org/t/pip-download-just-the-source-packages-no-building-no-metadata-etc/4651/12
+
+import os
+import sys
+import netrc
+from urllib.parse import urlparse, urlunparse
+from html.parser import HTMLParser
+import urllib.request
+import shutil
+import ssl
+from os.path import normpath
+
+
+# Parse the legacy index page to extract the href and package names
+class Pep503(HTMLParser):
+    def __init__(self):
+        super().__init__()
+        self.sources = {}
+        self.url = None
+        self.name = None
+
+    def handle_data(self, data):
+        if self.url is not None:
+            self.name = data
+
+    def handle_starttag(self, tag, attrs):
+        if tag == "a":
+            for name, value in attrs:
+                if name == "href":
+                    self.url = value
+
+    def handle_endtag(self, tag):
+        if self.url is not None:
+            self.sources[self.name] = self.url
+        self.url = None
+
+
+url = sys.argv[1]
+package_name = sys.argv[2]
+index_url = url + "/" + package_name + "/"
+package_filename = sys.argv[3]
+
+# Parse username and password for this host from the netrc file if given.
+username, password = None, None
+if os.environ["NETRC"]:
+    netrc_obj = netrc.netrc(os.environ["NETRC"])
+    host = urlparse(index_url).netloc
+    # Strip port number if present
+    if ":" in host:
+        host = host.split(":")[0]
+    username, _, password = netrc_obj.authenticators(host)
+
+print("Reading index %s" % index_url)
+
+context = ssl.create_default_context()
+context.check_hostname = False
+context.verify_mode = ssl.CERT_NONE
+
+req = urllib.request.Request(index_url)
+if username and password:
+    import base64
+
+    password_b64 = base64.b64encode(":".join((username, password)).encode()).decode(
+        "utf-8"
+    )
+    req.add_header("Authorization", "Basic {}".format(password_b64))
+response = urllib.request.urlopen(req, context=context)
+index = response.read()
+
+parser = Pep503()
+parser.feed(str(index))
+if package_filename not in parser.sources:
+    print(
+        "The file %s has not be found in the index %s" % (package_filename, index_url)
+    )
+    exit(1)
+
+package_file = open(package_filename, "wb")
+# Sometimes the href is a relative path
+if urlparse(parser.sources[package_filename]).netloc == "":
+    parsed_url = urlparse(index_url)
+    package_url = urlunparse(
+        (
+            parsed_url.scheme,
+            parsed_url.netloc,
+            parsed_url.path + "/" + parser.sources[package_filename],
+            None,
+            None,
+            None,
+        )
+    )
+else:
+    package_url = parser.sources[package_filename]
+
+# Handle urls containing "../"
+parsed_url = urlparse(package_url)
+real_package_url = urlunparse(
+    (
+        parsed_url.scheme,
+        parsed_url.netloc,
+        normpath(parsed_url.path),
+        parsed_url.params,
+        parsed_url.query,
+        parsed_url.fragment,
+    )
+)
+print("Downloading %s" % real_package_url)
+
+req = urllib.request.Request(real_package_url)
+if username and password:
+    req.add_unredirected_header("Authorization", "Basic {}".format(password_b64))
+response = urllib.request.urlopen(req, context=context)
+
+with response as r:
+    shutil.copyfileobj(r, package_file)
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/default.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/default.nix
new file mode 100644
index 000000000000..0abbe2459927
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/default.nix
@@ -0,0 +1,87 @@
+{ python
+, buildPackages
+, makeSetupHook
+, wheel
+, pip
+}:
+let
+  callPackage = python.pythonForBuild.pkgs.callPackage;
+  pythonInterpreter = python.pythonForBuild.interpreter;
+  pythonSitePackages = python.sitePackages;
+in
+{
+
+  removePathDependenciesHook = callPackage
+    (
+      {}:
+      makeSetupHook
+        {
+          name = "remove-path-dependencies.sh";
+          deps = [ ];
+          substitutions = {
+            inherit pythonInterpreter;
+            yj = "${buildPackages.yj}/bin/yj";
+            pyprojectPatchScript = "${./pyproject-without-special-deps.py}";
+            fields = [ "path" ];
+            kind = "path";
+          };
+        } ./remove-special-dependencies.sh
+    )
+    { };
+
+  removeGitDependenciesHook = callPackage
+    ({}:
+      makeSetupHook
+        {
+          name = "remove-git-dependencies.sh";
+          deps = [ ];
+          substitutions = {
+            inherit pythonInterpreter;
+            yj = "${buildPackages.yj}/bin/yj";
+            pyprojectPatchScript = "${./pyproject-without-special-deps.py}";
+            fields = [ "git" "branch" "rev" "tag" ];
+            kind = "git";
+          };
+        } ./remove-special-dependencies.sh
+    )
+    { };
+
+  pipBuildHook = callPackage
+    (
+      { pip, wheel }:
+      makeSetupHook
+        {
+          name = "pip-build-hook.sh";
+          deps = [ pip wheel ];
+          substitutions = {
+            inherit pythonInterpreter pythonSitePackages;
+          };
+        } ./pip-build-hook.sh
+    )
+    { };
+
+  poetry2nixFixupHook = callPackage
+    (
+      {}:
+      makeSetupHook
+        {
+          name = "fixup-hook.sh";
+          deps = [ ];
+        } ./fixup-hook.sh
+    )
+    { };
+
+  # When the "wheel" package itself is a wheel the nixpkgs hook (which pulls in "wheel") leads to infinite recursion
+  # It doesn't _really_ depend on wheel though, it just copies the wheel.
+  wheelUnpackHook = callPackage
+    ({}:
+      makeSetupHook
+        {
+          name = "wheel-unpack-hook.sh";
+          deps = [ ];
+        } ./wheel-unpack-hook.sh
+    )
+    { };
+
+
+}
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/fixup-hook.sh b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/fixup-hook.sh
new file mode 100644
index 000000000000..fc539e4298c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/fixup-hook.sh
@@ -0,0 +1,8 @@
+poetry2nix-fixup-hook() {
+    # Including tests in the output is a common mistake
+    if [ -z "${dontFixupTests-}" ]; then
+        rm -rf $out/lib/python3.7/site-packages/tests
+    fi
+}
+
+postFixupHooks+=(poetry2nix-fixup-hook)
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/pip-build-hook.sh b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/pip-build-hook.sh
new file mode 100644
index 000000000000..a3ebe311d591
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/pip-build-hook.sh
@@ -0,0 +1,50 @@
+# Setup hook to use for pip projects
+echo "Sourcing pip-build-hook"
+
+pipBuildPhase() {
+    echo "Executing pipBuildPhase"
+    runHook preBuild
+
+    # Prefer using setup.py to avoid build-system dependencies if we have a setup.py
+    if [ -z "${dontPreferSetupPy-}" ]; then
+      if test -e setup.py && test -e pyproject.toml; then
+        echo "Removing pyproject.toml..."
+        rm -f pyproject.toml
+      fi
+    fi
+
+    mkdir -p dist
+    echo "Creating a wheel..."
+    @pythonInterpreter@ -m pip wheel --verbose --no-index --no-deps --no-clean --no-build-isolation --wheel-dir dist .
+    echo "Finished creating a wheel..."
+
+    runHook postBuild
+    echo "Finished executing pipBuildPhase"
+}
+
+pipShellHook() {
+    echo "Executing pipShellHook"
+    runHook preShellHook
+
+    # Long-term setup.py should be dropped.
+    if [ -e pyproject.toml ]; then
+      tmp_path=$(mktemp -d)
+      export PATH="$tmp_path/bin:$PATH"
+      export PYTHONPATH="$tmp_path/@pythonSitePackages@:$PYTHONPATH"
+      mkdir -p "$tmp_path/@pythonSitePackages@"
+      @pythonInterpreter@ -m pip install -e . --prefix "$tmp_path" >&2
+    fi
+
+    runHook postShellHook
+    echo "Finished executing pipShellHook"
+}
+
+if [ -z "${dontUsePipBuild-}" ] && [ -z "${buildPhase-}" ]; then
+    echo "Using pipBuildPhase"
+    buildPhase=pipBuildPhase
+fi
+
+if [ -z "${shellHook-}" ]; then
+    echo "Using pipShellHook"
+    shellHook=pipShellHook
+fi
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/pyproject-without-special-deps.py b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/pyproject-without-special-deps.py
new file mode 100644
index 000000000000..9f79f9afab56
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/pyproject-without-special-deps.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python
+# Patch out special dependencies (git and path) from a pyproject.json file
+
+import argparse
+import json
+import sys
+
+
+def main(input, output, fields_to_remove):
+    data = json.load(input)
+
+    try:
+        deps = data["tool"]["poetry"]["dependencies"]
+    except KeyError:
+        pass
+    else:
+        for dep in deps.values():
+            if isinstance(dep, dict):
+                any_removed = False
+                for field in fields_to_remove:
+                    any_removed |= dep.pop(field, None) is not None
+                if any_removed:
+                    dep["version"] = "*"
+
+    # Set ensure_ascii to False because TOML is valid UTF-8 so text that can't
+    # be represented in ASCII is perfectly legitimate
+    # HACK: Setting ensure_asscii to False breaks Python2 for some dependencies (like cachy==0.3.0)
+    json.dump(
+        data, output, separators=(",", ":"), ensure_ascii=sys.version_info.major < 3
+    )
+
+
+if __name__ == "__main__":
+    p = argparse.ArgumentParser()
+    p.add_argument(
+        "-i",
+        "--input",
+        type=argparse.FileType("r"),
+        default=sys.stdin,
+        help="Location from which to read input JSON",
+    )
+    p.add_argument(
+        "-o",
+        "--output",
+        type=argparse.FileType("w"),
+        default=sys.stdout,
+        help="Location to write output JSON",
+    )
+    p.add_argument(
+        "-f",
+        "--fields-to-remove",
+        nargs="+",
+        help="The fields to remove from the dependency's JSON",
+    )
+
+    args = p.parse_args()
+    main(args.input, args.output, args.fields_to_remove)
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/remove-special-dependencies.sh b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/remove-special-dependencies.sh
new file mode 100644
index 000000000000..2d37667d6fdf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/remove-special-dependencies.sh
@@ -0,0 +1,20 @@
+remove-@kind@-dependencies-hook() {
+    if ! test -f pyproject.toml; then
+        return
+    fi
+
+    echo "Removing @kind@ dependencies"
+
+    # Tell poetry not to resolve special dependencies. Any version is fine!
+    @yj@ -tj < pyproject.toml | \
+        @pythonInterpreter@ \
+        @pyprojectPatchScript@ \
+        --fields-to-remove @fields@ > pyproject.json
+    @yj@ -jt < pyproject.json > pyproject.toml
+
+    rm pyproject.json
+
+    echo "Finished removing @kind@ dependencies"
+}
+
+postPatchHooks+=(remove-@kind@-dependencies-hook)
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/wheel-unpack-hook.sh b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/wheel-unpack-hook.sh
new file mode 100644
index 000000000000..fca808a933ba
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/hooks/wheel-unpack-hook.sh
@@ -0,0 +1,18 @@
+# Setup hook to use in case a wheel is fetched
+echo "Sourcing wheel setup hook"
+
+wheelUnpackPhase(){
+    echo "Executing wheelUnpackPhase"
+    runHook preUnpack
+
+    mkdir -p dist
+    cp "$src" "dist/$(stripHash "$src")"
+
+#     runHook postUnpack # Calls find...?
+    echo "Finished executing wheelUnpackPhase"
+}
+
+if [ -z "${dontUseWheelUnpack-}" ] && [ -z "${unpackPhase-}" ]; then
+    echo "Using wheelUnpackPhase"
+    unpackPhase=wheelUnpackPhase
+fi
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/lib.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/lib.nix
new file mode 100644
index 000000000000..8e9dee865a54
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/lib.nix
@@ -0,0 +1,238 @@
+{ lib, pkgs, stdenv }:
+let
+  inherit (import ./semver.nix { inherit lib ireplace; }) satisfiesSemver;
+  inherit (builtins) genList length;
+
+  # Replace a list entry at defined index with set value
+  ireplace = idx: value: list: (
+    genList (i: if i == idx then value else (builtins.elemAt list i)) (length list)
+  );
+
+  # Do some canonicalisation of module names
+  moduleName = name: lib.toLower (lib.replaceStrings [ "_" "." ] [ "-" "-" ] name);
+
+  # Get a full semver pythonVersion from a python derivation
+  getPythonVersion = python:
+    let
+      pyVer = lib.splitVersion python.pythonVersion ++ [ "0" ];
+      ver = lib.splitVersion python.version;
+      major = l: lib.elemAt l 0;
+      minor = l: lib.elemAt l 1;
+      joinVersion = v: lib.concatStringsSep "." v;
+    in
+    joinVersion (if major pyVer == major ver && minor pyVer == minor ver then ver else pyVer);
+
+  # Compare a semver expression with a version
+  isCompatible = version:
+    let
+      operators = {
+        "||" = cond1: cond2: cond1 || cond2;
+        "," = cond1: cond2: cond1 && cond2; # , means &&
+        "&&" = cond1: cond2: cond1 && cond2;
+      };
+      splitRe = "(" + (builtins.concatStringsSep "|" (builtins.map (x: lib.replaceStrings [ "|" ] [ "\\|" ] x) (lib.attrNames operators))) + ")";
+    in
+    expr:
+    let
+      tokens = builtins.filter (x: x != "") (builtins.split splitRe expr);
+      combine = acc: v:
+        let
+          isOperator = builtins.typeOf v == "list";
+          operator = if isOperator then (builtins.elemAt v 0) else acc.operator;
+        in
+        if isOperator then (acc // { inherit operator; }) else {
+          inherit operator;
+          state = operators."${operator}" acc.state (satisfiesSemver version v);
+        };
+      initial = { operator = "&&"; state = true; };
+    in
+    if expr == "" then true else (builtins.foldl' combine initial tokens).state;
+  fromTOML = builtins.fromTOML or
+    (
+      toml: builtins.fromJSON (
+        builtins.readFile (
+          pkgs.runCommand "from-toml"
+            {
+              inherit toml;
+              allowSubstitutes = false;
+              preferLocalBuild = true;
+            }
+            ''
+              ${pkgs.remarshal}/bin/remarshal \
+                -if toml \
+                -i <(echo "$toml") \
+                -of json \
+                -o $out
+            ''
+        )
+      )
+    );
+  readTOML = path: fromTOML (builtins.readFile path);
+
+  #
+  # Returns the appropriate manylinux dependencies and string representation for the file specified
+  #
+  getManyLinuxDeps = f:
+    let
+      ml = pkgs.pythonManylinuxPackages;
+    in
+    if lib.strings.hasInfix "manylinux1" f then { pkg = [ ml.manylinux1 ]; str = "1"; }
+    else if lib.strings.hasInfix "manylinux2010" f then { pkg = [ ml.manylinux2010 ]; str = "2010"; }
+    else if lib.strings.hasInfix "manylinux2014" f then { pkg = [ ml.manylinux2014 ]; str = "2014"; }
+    else { pkg = [ ]; str = null; };
+
+  # Predict URL from the PyPI index.
+  # Args:
+  #   pname: package name
+  #   file: filename including extension
+  #   hash: SRI hash
+  #   kind: Language implementation and version tag
+  predictURLFromPypi = lib.makeOverridable (
+    { pname, file, hash, kind }:
+    "https://files.pythonhosted.org/packages/${kind}/${lib.toLower (builtins.substring 0 1 file)}/${pname}/${file}"
+  );
+
+
+  # Fetch from the PyPI index.
+  # At first we try to fetch the predicated URL but if that fails we
+  # will use the Pypi API to determine the correct URL.
+  # Args:
+  #   pname: package name
+  #   file: filename including extension
+  #   version: the version string of the dependency
+  #   hash: SRI hash
+  #   kind: Language implementation and version tag
+  fetchFromPypi = lib.makeOverridable (
+    { pname, file, version, hash, kind, curlOpts ? "" }:
+    let
+      predictedURL = predictURLFromPypi { inherit pname file hash kind; };
+    in
+    (pkgs.stdenvNoCC.mkDerivation {
+      name = file;
+      nativeBuildInputs = [
+        pkgs.curl
+        pkgs.jq
+      ];
+      isWheel = lib.strings.hasSuffix "whl" file;
+      system = "builtin";
+
+      preferLocalBuild = true;
+      impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ [
+        "NIX_CURL_FLAGS"
+      ];
+
+      inherit pname file version curlOpts predictedURL;
+
+      builder = ./fetch-from-pypi.sh;
+
+      outputHashMode = "flat";
+      outputHashAlgo = "sha256";
+      outputHash = hash;
+
+      passthru = {
+        urls = [ predictedURL ]; # retain compatibility with nixpkgs' fetchurl
+      };
+    })
+  );
+
+  fetchFromLegacy = lib.makeOverridable (
+    { python, pname, url, file, hash }:
+    let
+      pathParts =
+        (builtins.filter
+          ({ prefix, path }: "NETRC" == prefix)
+          builtins.nixPath);
+      netrc_file = if (pathParts != [ ]) then (builtins.head pathParts).path else "";
+    in
+    pkgs.runCommand file
+      {
+        nativeBuildInputs = [ python ];
+        impureEnvVars = lib.fetchers.proxyImpureEnvVars;
+        outputHashMode = "flat";
+        outputHashAlgo = "sha256";
+        outputHash = hash;
+        NETRC = netrc_file;
+      } ''
+      python ${./fetch_from_legacy.py} ${url} ${pname} ${file}
+      mv ${file} $out
+    ''
+  );
+
+  getBuildSystemPkgs =
+    { pythonPackages
+    , pyProject
+    }:
+    let
+      missingBuildBackendError = "No build-system.build-backend section in pyproject.toml. "
+        + "Add such a section as described in https://python-poetry.org/docs/pyproject/#poetry-and-pep-517";
+      requires = lib.attrByPath [ "build-system" "requires" ] (throw missingBuildBackendError) pyProject;
+      requiredPkgs = builtins.map (n: lib.elemAt (builtins.match "([^!=<>~[]+).*" n) 0) requires;
+    in
+    builtins.map (drvAttr: pythonPackages.${drvAttr} or (throw "unsupported build system requirement ${drvAttr}")) requiredPkgs;
+
+  # Find gitignore files recursively in parent directory stopping with .git
+  findGitIgnores = path:
+    let
+      parent = path + "/..";
+      gitIgnore = path + "/.gitignore";
+      isGitRoot = builtins.pathExists (path + "/.git");
+      hasGitIgnore = builtins.pathExists gitIgnore;
+      gitIgnores = if hasGitIgnore then [ gitIgnore ] else [ ];
+    in
+    lib.optionals (builtins.toString path != "/" && ! isGitRoot) (findGitIgnores parent) ++ gitIgnores;
+
+  /*
+    Provides a source filtering mechanism that:
+
+    - Filters gitignore's
+    - Filters pycache/pyc files
+    - Uses cleanSourceFilter to filter out .git/.hg, .o/.so, editor backup files & nix result symlinks
+  */
+  cleanPythonSources = { src }:
+    let
+      gitIgnores = findGitIgnores src;
+      pycacheFilter = name: type:
+        (type == "directory" && ! lib.strings.hasInfix "__pycache__" name)
+        || (type == "regular" && ! lib.strings.hasSuffix ".pyc" name)
+      ;
+    in
+    lib.cleanSourceWith {
+      filter = lib.cleanSourceFilter;
+      src = lib.cleanSourceWith {
+        filter = pkgs.nix-gitignore.gitignoreFilterPure pycacheFilter gitIgnores src;
+        inherit src;
+      };
+    };
+
+  # Maps Nixpkgs CPU values to target machines known to be supported for manylinux* wheels.
+  # (a.k.a. `uname -m` output from CentOS 7)
+  #
+  # This is current as of manylinux2014 (PEP-0599), and is a superset of manylinux2010 / manylinux1.
+  # s390x is not supported in Nixpkgs, so we don't map it.
+  manyLinuxTargetMachines = {
+    x86_64 = "x86_64";
+    i686 = "i686";
+    aarch64 = "aarch64";
+    armv7l = "armv7l";
+    powerpc64 = "ppc64";
+    powerpc64le = "ppc64le";
+  };
+
+  # Machine tag for our target platform (if available)
+  targetMachine = manyLinuxTargetMachines.${stdenv.targetPlatform.parsed.cpu.name} or null;
+in
+{
+  inherit
+    fetchFromPypi
+    fetchFromLegacy
+    getManyLinuxDeps
+    isCompatible
+    readTOML
+    getBuildSystemPkgs
+    satisfiesSemver
+    cleanPythonSources
+    moduleName
+    getPythonVersion
+    targetMachine
+    ;
+}
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/mk-poetry-dep.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/mk-poetry-dep.nix
new file mode 100644
index 000000000000..5735e320c03f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/mk-poetry-dep.nix
@@ -0,0 +1,203 @@
+{ autoPatchelfHook
+, pkgs
+, lib
+, python
+, buildPythonPackage
+, poetryLib
+, evalPep508
+}:
+{ name
+, version
+, files
+, source
+, dependencies ? { }
+, pythonPackages
+, python-versions
+, pwd
+, sourceSpec
+, supportedExtensions ? lib.importJSON ./extensions.json
+, preferWheels ? false
+, __isBootstrap ? false  # Hack: Always add Poetry as a build input unless bootstrapping
+, ...
+}:
+
+pythonPackages.callPackage
+  (
+    { preferWheel ? preferWheels
+    , ...
+    }@args:
+    let
+      inherit (pkgs) stdenv;
+      inherit (poetryLib) isCompatible getManyLinuxDeps fetchFromLegacy fetchFromPypi moduleName;
+
+      inherit (import ./pep425.nix {
+        inherit lib poetryLib python;
+        inherit (pkgs) stdenv;
+      }) selectWheel
+        ;
+      fileCandidates =
+        let
+          supportedRegex = ("^.*(" + builtins.concatStringsSep "|" supportedExtensions + ")");
+          matchesVersion = fname: builtins.match ("^.*" + builtins.replaceStrings [ "." "+" ] [ "\\." "\\+" ] version + ".*$") fname != null;
+          hasSupportedExtension = fname: builtins.match supportedRegex fname != null;
+          isCompatibleEgg = fname: ! lib.strings.hasSuffix ".egg" fname || lib.strings.hasSuffix "py${python.pythonVersion}.egg" fname;
+        in
+        builtins.filter (f: matchesVersion f.file && hasSupportedExtension f.file && isCompatibleEgg f.file) files;
+      toPath = s: pwd + "/${s}";
+      isSource = source != null;
+      isGit = isSource && source.type == "git";
+      isUrl = isSource && source.type == "url";
+      isDirectory = isSource && source.type == "directory";
+      isFile = isSource && source.type == "file";
+      isLegacy = isSource && source.type == "legacy";
+      localDepPath = toPath source.url;
+
+      buildSystemPkgs =
+        let
+          pyProjectPath = localDepPath + "/pyproject.toml";
+          pyProject = poetryLib.readTOML pyProjectPath;
+        in
+        if builtins.pathExists pyProjectPath then
+          poetryLib.getBuildSystemPkgs
+            {
+              inherit pythonPackages pyProject;
+            } else [ ];
+
+      fileInfo =
+        let
+          isBdist = f: lib.strings.hasSuffix "whl" f.file;
+          isSdist = f: ! isBdist f && ! isEgg f;
+          isEgg = f: lib.strings.hasSuffix ".egg" f.file;
+          binaryDist = selectWheel fileCandidates;
+          sourceDist = builtins.filter isSdist fileCandidates;
+          eggs = builtins.filter isEgg fileCandidates;
+          entries = (if preferWheel then binaryDist ++ sourceDist else sourceDist ++ binaryDist) ++ eggs;
+          lockFileEntry = (
+            if lib.length entries > 0 then builtins.head entries
+            else throw "Missing suitable source/wheel file entry for ${name}"
+          );
+          _isEgg = isEgg lockFileEntry;
+        in
+        rec {
+          inherit (lockFileEntry) file hash;
+          name = file;
+          format =
+            if _isEgg then "egg"
+            else if lib.strings.hasSuffix ".whl" name then "wheel"
+            else "pyproject";
+          kind =
+            if _isEgg then python.pythonVersion
+            else if format == "pyproject" then "source"
+            else (builtins.elemAt (lib.strings.splitString "-" name) 2);
+        };
+
+      # Prevent infinite recursion
+      skipSetupToolsSCM = [
+        "setuptools_scm"
+        "setuptools-scm"
+        "toml" # Toml is an extra for setuptools-scm
+        "tomli" # tomli is an extra for later versions of setuptools-scm
+        "packaging"
+        "six"
+        "pyparsing"
+      ];
+      baseBuildInputs = lib.optional (! lib.elem name skipSetupToolsSCM) pythonPackages.setuptools-scm;
+      format = if isDirectory || isGit || isUrl then "pyproject" else fileInfo.format;
+    in
+    buildPythonPackage {
+      pname = moduleName name;
+      version = version;
+
+      inherit format;
+
+      doCheck = false; # We never get development deps
+
+      # Stripping pre-built wheels lead to `ELF load command address/offset not properly aligned`
+      dontStrip = format == "wheel";
+
+      nativeBuildInputs = [
+        pythonPackages.poetry2nixFixupHook
+      ]
+      ++ lib.optional (!isSource && (getManyLinuxDeps fileInfo.name).str != null) autoPatchelfHook
+      ++ lib.optionals (format == "pyproject") [
+        pythonPackages.removePathDependenciesHook
+        pythonPackages.removeGitDependenciesHook
+      ];
+
+      buildInputs = (
+        baseBuildInputs
+        ++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) pythonPackages.setuptools
+        ++ lib.optional (!isSource) (getManyLinuxDeps fileInfo.name).pkg
+        ++ lib.optional isDirectory buildSystemPkgs
+        ++ lib.optional (!__isBootstrap) pythonPackages.poetry
+      );
+
+      propagatedBuildInputs =
+        let
+          compat = isCompatible (poetryLib.getPythonVersion python);
+          deps = lib.filterAttrs
+            (n: v: v)
+            (
+              lib.mapAttrs
+                (
+                  n: v:
+                    let
+                      constraints = v.python or "";
+                      pep508Markers = v.markers or "";
+                    in
+                    compat constraints && evalPep508 pep508Markers
+                )
+                dependencies
+            );
+          depAttrs = lib.attrNames deps;
+        in
+        builtins.map (n: pythonPackages.${moduleName n}) depAttrs;
+
+      meta = {
+        broken = ! isCompatible (poetryLib.getPythonVersion python) python-versions;
+        license = [ ];
+        inherit (python.meta) platforms;
+      };
+
+      passthru = {
+        inherit args;
+      };
+
+      # We need to retrieve kind from the interpreter and the filename of the package
+      # Interpreters should declare what wheel types they're compatible with (python type + ABI)
+      # Here we can then choose a file based on that info.
+      src =
+        if isGit then
+          (
+            builtins.fetchGit {
+              inherit (source) url;
+              rev = source.resolved_reference or source.reference;
+              ref = sourceSpec.branch or sourceSpec.rev or (if sourceSpec?tag then "refs/tags/${sourceSpec.tag}" else "HEAD");
+            }
+          )
+        else if isUrl then
+          builtins.fetchTarball
+            {
+              inherit (source) url;
+            }
+        else if isDirectory then
+          (poetryLib.cleanPythonSources { src = localDepPath; })
+        else if isFile then
+          localDepPath
+        else if isLegacy then
+          fetchFromLegacy
+            {
+              pname = name;
+              inherit python;
+              inherit (fileInfo) file hash;
+              inherit (source) url;
+            }
+        else
+          fetchFromPypi {
+            pname = name;
+            inherit (fileInfo) file hash kind;
+            inherit version;
+          };
+    }
+  )
+{ }
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix
new file mode 100644
index 000000000000..6e35069a817c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix
@@ -0,0 +1,2271 @@
+{ pkgs ? import <nixpkgs> { }
+, lib ? pkgs.lib
+, stdenv ? pkgs.stdenv
+}:
+
+self: super:
+
+{
+  automat = super.automat.overridePythonAttrs (
+    old: rec {
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.m2r ];
+    }
+  );
+
+  aiohttp-swagger3 = super.aiohttp-swagger3.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  ansible = super.ansible.overridePythonAttrs (
+    old: {
+      # Inputs copied from nixpkgs as ansible doesn't specify it's dependencies
+      # in a correct manner.
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [
+        self.pycrypto
+        self.paramiko
+        self.jinja2
+        self.pyyaml
+        self.httplib2
+        self.six
+        self.netaddr
+        self.dnspython
+        self.jmespath
+        self.dopy
+        self.ncclient
+      ];
+    } // lib.optionalAttrs (lib.versionOlder old.version "5.0") {
+      prePatch = pkgs.python.pkgs.ansible.prePatch or "";
+      postInstall = pkgs.python.pkgs.ansible.postInstall or "";
+    }
+  );
+
+  ansible-lint = super.ansible-lint.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.setuptools-scm-git-archive ];
+      preBuild = ''
+        export HOME=$(mktemp -d)
+      '';
+    }
+  );
+
+  anyio = super.anyio.overridePythonAttrs (old: {
+    postPatch = ''
+      substituteInPlace setup.py --replace 'setup()' 'setup(version="${old.version}")'
+    '';
+  });
+
+  argcomplete = super.argcomplete.overridePythonAttrs (
+    old: rec {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.importlib-metadata ];
+    }
+  );
+
+  arpeggio = super.arpeggio.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  astroid = super.astroid.overridePythonAttrs (
+    old: rec {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  av = super.av.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
+        pkgs.pkg-config
+      ];
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.ffmpeg_4 ];
+    }
+  );
+
+  argon2-cffi = super.argon2-cffi.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++
+        lib.optional (lib.versionAtLeast old.version "21.2.0") [ self.flit-core ];
+    }
+  );
+
+  backports-entry-points-selectable = super.backports-entry-points-selectable.overridePythonAttrs (old: {
+    postPatch = ''
+      substituteInPlace setup.py --replace \
+        'setuptools.setup()' \
+        'setuptools.setup(version="${old.version}")'
+    '';
+  });
+
+  backports-functools-lru-cache = super.backports-functools-lru-cache.overridePythonAttrs (old: {
+    postPatch = ''
+      substituteInPlace setup.py --replace \
+        'setuptools.setup()' \
+        'setuptools.setup(version="${old.version}")'
+    '';
+  });
+
+  bcrypt = super.bcrypt.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.libffi ];
+    }
+  );
+
+  bjoern = super.bjoern.overridePythonAttrs (
+    old: {
+      buildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.libev ];
+    }
+  );
+
+  black = super.black.overridePythonAttrs (
+    old: {
+      dontPreferSetupPy = true;
+    }
+  );
+
+  borgbackup = super.borgbackup.overridePythonAttrs (
+    old: {
+      BORG_OPENSSL_PREFIX = pkgs.openssl.dev;
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkg-config ];
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.openssl pkgs.acl ];
+    }
+  );
+
+  cairocffi = super.cairocffi.overridePythonAttrs (
+    old: {
+      inherit (pkgs.python3.pkgs.cairocffi) patches;
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  cairosvg = super.cairosvg.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  celery = super.celery.overridePythonAttrs (old: {
+    propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.setuptools ];
+  });
+
+  cssselect2 = super.cssselect2.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  cffi =
+    # cffi is bundled with pypy
+    if self.python.implementation == "pypy" then null else
+    (
+      super.cffi.overridePythonAttrs (
+        old: {
+          buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.libffi ];
+        }
+      )
+    );
+
+  cftime = super.cftime.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        self.cython
+      ];
+    }
+  );
+
+  cheroot = super.cheroot.overridePythonAttrs (
+    old: {
+      dontPreferSetupPy = true;
+    }
+  );
+
+  cloudflare = super.cloudflare.overridePythonAttrs (
+    old: {
+      postPatch = ''
+        rm -rf examples/*
+      '';
+    }
+  );
+
+  colour = super.colour.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.d2to1 ];
+    }
+  );
+
+  configparser = super.configparser.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        self.toml
+      ];
+
+      postPatch = ''
+        substituteInPlace setup.py --replace 'setuptools.setup()' 'setuptools.setup(version="${old.version}")'
+      '';
+    }
+  );
+
+  cryptography = super.cryptography.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ])
+        ++ lib.optional (lib.versionAtLeast old.version "3.4") [ self.setuptools-rust ]
+        ++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) self.python.pythonForBuild.pkgs.cffi
+        ++ lib.optional (lib.versionAtLeast old.version "3.5")
+        (with pkgs.rustPlatform; [ cargoSetupHook rust.cargo rust.rustc ]);
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.openssl ];
+    } // lib.optionalAttrs (lib.versionAtLeast old.version "3.4" && lib.versionOlder old.version "3.5") {
+      CRYPTOGRAPHY_DONT_BUILD_RUST = "1";
+    } // lib.optionalAttrs (lib.versionAtLeast old.version "35") rec {
+      cargoDeps =
+        let
+          getCargoHash = version:
+            if lib.versionOlder version "36.0.0" then "sha256-tQoQfo+TAoqAea86YFxyj/LNQCiViu5ij/3wj7ZnYLI="
+            else if lib.versionOlder version "36.0.1" then "sha256-Y6TuW7AryVgSvZ6G8WNoDIvi+0tvx8ZlEYF5qB0jfNk="
+            # This hash could no longer be valid for cryptography versions
+            # different from 36.0.1
+            else "sha256-kozYXkqt1Wpqyo9GYCwN08J+zV92ZWFJY/f+rulxmeQ=";
+        in
+        pkgs.rustPlatform.fetchCargoTarball {
+          src = old.src;
+          sourceRoot = "${old.pname}-${old.version}/${cargoRoot}";
+          name = "${old.pname}-${old.version}";
+          sha256 = getCargoHash old.version;
+        };
+      cargoRoot = "src/rust";
+    }
+  );
+
+  cwcwidth = super.cwcwidth.overridePythonAttrs (old: {
+    nativeBuildInputs = (old.nativeBuildInputs or [ ])
+      ++ [ self.cython ];
+  });
+
+  cyclonedx-python-lib = super.cyclonedx-python-lib.overridePythonAttrs (old: {
+    propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.setuptools ];
+    postPatch = ''
+      substituteInPlace setup.py --replace 'setuptools>=50.3.2,<51.0.0' 'setuptools'
+    '';
+  });
+
+  daphne = super.daphne.overridePythonAttrs (old: {
+    postPatch = ''
+      substituteInPlace setup.py --replace 'setup_requires=["pytest-runner"],' ""
+    '';
+  });
+
+  datadog-lambda = super.datadog-lambda.overridePythonAttrs (old: {
+    postPatch = ''
+      substituteInPlace setup.py --replace "setuptools==" "setuptools>="
+    '';
+    buildInputs = (old.buildInputs or [ ]) ++ [ self.setuptools ];
+  });
+
+  dbus-python = super.dbus-python.overridePythonAttrs (old: {
+    outputs = [ "out" "dev" ];
+
+    postPatch = old.postPatch or "" + ''
+      substituteInPlace ./configure --replace /usr/bin/file ${pkgs.file}/bin/file
+      substituteInPlace ./dbus-python.pc.in --replace 'Cflags: -I''${includedir}' 'Cflags: -I''${includedir}/dbus-1.0'
+    '';
+
+    configureFlags = (old.configureFlags or [ ]) ++ [
+      "PYTHON_VERSION=${lib.versions.major self.python.version}"
+    ];
+
+    preConfigure = lib.concatStringsSep "\n" [
+      (old.preConfigure or "")
+      (if (lib.versionAtLeast stdenv.hostPlatform.darwinMinVersion "11" && stdenv.isDarwin) then ''
+        MACOSX_DEPLOYMENT_TARGET=10.16
+      '' else "")
+    ];
+
+    preBuild = old.preBuild or "" + ''
+      make distclean
+    '';
+
+    nativeBuildInputs = old.nativeBuildInputs or [ ] ++ [ pkgs.pkg-config ];
+    buildInputs = old.buildInputs or [ ] ++ [ pkgs.dbus pkgs.dbus-glib ]
+      # My guess why it's sometimes trying to -lncurses.
+      # It seems not to retain the dependency anyway.
+      ++ lib.optional (! self.python ? modules) pkgs.ncurses;
+  });
+
+  dcli = super.dcli.overridePythonAttrs (old: {
+    propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.setuptools ];
+  });
+
+  ddtrace = super.ddtrace.overridePythonAttrs (old: {
+    buildInputs = (old.buildInputs or [ ]) ++
+      (pkgs.lib.optionals pkgs.stdenv.isDarwin [ pkgs.darwin.IOKit ]) ++ [ self.cython ];
+  });
+
+  dictdiffer = super.dictdiffer.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.setuptools ];
+    }
+  );
+
+  django = (
+    super.django.overridePythonAttrs (
+      old: {
+        propagatedNativeBuildInputs = (old.propagatedNativeBuildInputs or [ ])
+          ++ [ pkgs.gettext self.pytest-runner ];
+      }
+    )
+  );
+
+  django-bakery = super.django-bakery.overridePythonAttrs (
+    old: {
+      configurePhase = ''
+        if ! test -e LICENSE; then
+          touch LICENSE
+        fi
+      '' + (old.configurePhase or "");
+    }
+  );
+
+  django-cors-headers = super.django-cors-headers.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  django-hijack = super.django-hijack.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  django-prometheus = super.django-prometheus.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  django-rosetta = super.django-rosetta.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  django-stubs-ext = super.django-stubs-ext.overridePythonAttrs (
+    old: {
+      prePatch = (old.prePatch or "") + "touch ../LICENSE.txt";
+    }
+  );
+
+  dlib = super.dlib.overridePythonAttrs (
+    old: {
+      # Parallel building enabled
+      inherit (pkgs.python.pkgs.dlib) patches;
+
+      enableParallelBuilding = true;
+      dontUseCmakeConfigure = true;
+
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ pkgs.dlib.nativeBuildInputs;
+      buildInputs = (old.buildInputs or [ ]) ++ pkgs.dlib.buildInputs;
+    }
+  );
+
+  # Environment markers are not always included (depending on how a dep was defined)
+  enum34 = if self.pythonAtLeast "3.4" then null else super.enum34;
+
+  eth-hash = super.eth-hash.overridePythonAttrs {
+    preConfigure = ''
+      substituteInPlace setup.py --replace \'setuptools-markdown\' ""
+    '';
+  };
+
+  eth-keyfile = super.eth-keyfile.overridePythonAttrs {
+    preConfigure = ''
+      substituteInPlace setup.py --replace \'setuptools-markdown\' ""
+    '';
+  };
+
+  eth-keys = super.eth-keys.overridePythonAttrs {
+    preConfigure = ''
+      substituteInPlace setup.py --replace \'setuptools-markdown\' ""
+    '';
+  };
+
+  # remove eth-hash dependency because eth-hash also depends on eth-utils causing a cycle.
+  eth-utils = super.eth-utils.overridePythonAttrs (old: {
+    propagatedBuildInputs =
+      builtins.filter (i: i.pname != "eth-hash") old.propagatedBuildInputs;
+    preConfigure = ''
+      ${old.preConfigure or ""}
+      sed -i '/eth-hash/d' setup.py
+    '';
+  });
+
+  faker = super.faker.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+      doCheck = false;
+    }
+  );
+
+  fancycompleter = super.fancycompleter.overridePythonAttrs (
+    old: {
+      postPatch = ''
+        substituteInPlace setup.py \
+          --replace 'setup_requires="setupmeta"' 'setup_requires=[]' \
+          --replace 'versioning="devcommit"' 'version="${old.version}"'
+      '';
+    }
+  );
+
+  fastapi = super.fastapi.overridePythonAttrs (
+    old: {
+      # Note: requires full flit, not just flit-core
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.flit ];
+    }
+  );
+
+  fastecdsa = super.fastecdsa.overridePythonAttrs (old: {
+    buildInputs = old.buildInputs ++ [ pkgs.gmp.dev ];
+  });
+
+  fastparquet = super.fastparquet.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  filelock = super.filelock.overridePythonAttrs (old: {
+    postPatch = ''
+      substituteInPlace setup.py --replace 'setup()' 'setup(version="${old.version}")'
+    '';
+  });
+
+  fiona = super.fiona.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.gdal_2 ];
+      nativeBuildInputs = [
+        pkgs.gdal_2 # for gdal-config
+      ];
+    }
+  );
+
+  gdal = super.gdal.overridePythonAttrs (
+    old: {
+      preBuild = (old.preBuild or "") + ''
+        substituteInPlace setup.cfg \
+          --replace "../../apps/gdal-config" '${pkgs.gdal}/bin/gdal-config'
+      '';
+    }
+  );
+
+  grandalf = super.grandalf.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+      doCheck = false;
+    }
+  );
+
+  gitpython = super.gitpython.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.typing-extensions ];
+    }
+  );
+
+  grpcio = super.grpcio.overridePythonAttrs (old: {
+    nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.cython pkgs.pkg-config ];
+    buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.c-ares pkgs.openssl pkgs.zlib ];
+
+    outputs = [ "out" "dev" ];
+
+    GRPC_BUILD_WITH_BORING_SSL_ASM = "";
+    GRPC_PYTHON_BUILD_SYSTEM_OPENSSL = 1;
+    GRPC_PYTHON_BUILD_SYSTEM_ZLIB = 1;
+    GRPC_PYTHON_BUILD_SYSTEM_CARES = 1;
+    DISABLE_LIBC_COMPATIBILITY = 1;
+  });
+
+  grpcio-tools = super.grpcio-tools.overridePythonAttrs (old: {
+    outputs = [ "out" "dev" ];
+  });
+
+  h3 = super.h3.overridePythonAttrs (
+    old: {
+      preBuild = (old.preBuild or "") + ''
+        substituteInPlace h3/h3.py \
+          --replace "'{}/{}'.format(_dirname, libh3_path)" '"${pkgs.h3}/lib/libh3${pkgs.stdenv.hostPlatform.extensions.sharedLibrary}"'
+      '';
+    }
+  );
+
+  h5py = super.h5py.overridePythonAttrs (
+    old:
+    if old.format != "wheel" then
+      (
+        let
+          mpi = pkgs.hdf5.mpi;
+          mpiSupport = pkgs.hdf5.mpiSupport;
+        in
+        {
+          nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkg-config ];
+          buildInputs =
+            (old.buildInputs or [ ])
+            ++ [ pkgs.hdf5 self.pkgconfig self.cython ]
+            ++ lib.optional mpiSupport mpi
+          ;
+          propagatedBuildInputs =
+            (old.propagatedBuildInputs or [ ])
+            ++ lib.optionals mpiSupport [ self.mpi4py self.openssh ]
+          ;
+          preBuild = if mpiSupport then "export CC=${mpi}/bin/mpicc" else "";
+          HDF5_DIR = "${pkgs.hdf5}";
+          HDF5_MPI = if mpiSupport then "ON" else "OFF";
+          # avoid strict pinning of numpy
+          postPatch = ''
+            substituteInPlace setup.py \
+              --replace "numpy ==" "numpy >="
+          '';
+          pythonImportsCheck = [ "h5py" ];
+        }
+      ) else old
+  );
+
+  hid = super.hid.overridePythonAttrs (
+    old: {
+      postPatch = ''
+        found=
+        for name in libhidapi-hidraw libhidapi-libusb libhidapi-iohidmanager libhidapi; do
+          full_path=${pkgs.hidapi.out}/lib/$name${pkgs.stdenv.hostPlatform.extensions.sharedLibrary}
+          if test -f $full_path; then
+            found=t
+            sed -i -e "s|'$name\..*'|'$full_path'|" hid/__init__.py
+          fi
+        done
+        test -n "$found" || { echo "ERROR: No known libraries found in ${pkgs.hidapi.out}/lib, please update/fix this build expression."; exit 1; }
+      '';
+    }
+  );
+
+  horovod = super.horovod.overridePythonAttrs (
+    old: {
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ pkgs.mpi ];
+    }
+  );
+
+  httplib2 = super.httplib2.overridePythonAttrs (old: {
+    propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.pyparsing ];
+  });
+
+  icecream = super.icecream.overridePythonAttrs (old: {
+    #  # ERROR: Could not find a version that satisfies the requirement executing>=0.3.1 (from icecream) (from versions: none)
+    postPatch = ''
+      substituteInPlace setup.py --replace 'executing>=0.3.1' 'executing'
+    '';
+  });
+
+  imagecodecs = super.imagecodecs.overridePythonAttrs (
+    old: {
+      patchPhase = ''
+        substituteInPlace setup.py \
+          --replace "/usr/include/openjpeg-2.3" \
+                    "${pkgs.openjpeg.dev}/include/${pkgs.openjpeg.dev.incDir}
+        substituteInPlace setup.py \
+          --replace "/usr/include/jxrlib" \
+                    "$out/include/libjxr"
+        substituteInPlace imagecodecs/_zopfli.c \
+          --replace '"zopfli/zopfli.h"' \
+                    '<zopfli.h>'
+        substituteInPlace imagecodecs/_zopfli.c \
+          --replace '"zopfli/zlib_container.h"' \
+                    '<zlib_container.h>'
+        substituteInPlace imagecodecs/_zopfli.c \
+          --replace '"zopfli/gzip_container.h"' \
+                    '<gzip_container.h>'
+      '';
+
+      preBuild = ''
+        mkdir -p $out/include/libjxr
+        ln -s ${pkgs.jxrlib}/include/libjxr/**/* $out/include/libjxr
+
+      '';
+
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        # Commented out packages are declared required, but not actually
+        # needed to build. They are not yet packaged for nixpkgs.
+        # bitshuffle
+        pkgs.brotli
+        # brunsli
+        pkgs.bzip2
+        pkgs.c-blosc
+        # charls
+        pkgs.giflib
+        pkgs.jxrlib
+        pkgs.lcms
+        pkgs.libaec
+        pkgs.libaec
+        pkgs.libjpeg_turbo
+        # liblzf
+        # liblzma
+        pkgs.libpng
+        pkgs.libtiff
+        pkgs.libwebp
+        pkgs.lz4
+        pkgs.openjpeg
+        pkgs.snappy
+        # zfp
+        pkgs.zopfli
+        pkgs.zstd
+        pkgs.zlib
+      ];
+    }
+  );
+
+  # importlib-metadata has an incomplete dependency specification
+  importlib-metadata = super.importlib-metadata.overridePythonAttrs (
+    old: {
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ lib.optional self.python.isPy2 self.pathlib2;
+
+      # disable the removal of pyproject.toml, required because of setuptools_scm
+      dontPreferSetupPy = true;
+
+      postPatch = old.postPatch or "" + (lib.optionalString ((old.format or "") != "wheel") ''
+        substituteInPlace setup.py --replace 'setuptools.setup()' 'setuptools.setup(version="${old.version}")'
+      '');
+    }
+  );
+
+  importlib-resources = super.importlib-resources.overridePythonAttrs (
+    old: {
+      # disable the removal of pyproject.toml, required because of setuptools_scm
+      dontPreferSetupPy = true;
+    }
+  );
+
+  intreehooks = super.intreehooks.overridePythonAttrs (
+    old: {
+      doCheck = false;
+    }
+  );
+
+  isort = super.isort.overridePythonAttrs (
+    old: {
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.setuptools ];
+    }
+  );
+
+  jaraco-functools = super.jaraco-functools.overridePythonAttrs (
+    old: {
+      # required for the extra "toml" dependency in setuptools_scm[toml]
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        self.toml
+      ];
+      # disable the removal of pyproject.toml, required because of setuptools_scm
+      dontPreferSetupPy = true;
+    }
+  );
+
+  jira = super.jira.overridePythonAttrs (
+    old: {
+      inherit (pkgs.python3Packages.jira) patches;
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        self.pytestrunner
+        self.cryptography
+        self.pyjwt
+        self.setuptools-scm-git-archive
+      ];
+    }
+  );
+
+  jq = super.jq.overridePythonAttrs (attrs: {
+    buildInputs = [ pkgs.jq ];
+    patches = [
+      (pkgs.fetchpatch {
+        url = "https://raw.githubusercontent.com/NixOS/nixpkgs/088da8735f6620b60d724aa7db742607ea216087/pkgs/development/python-modules/jq/jq-py-setup.patch";
+        sha256 = "sha256-MYvX3S1YGe0QsUtExtOtULvp++AdVrv+Fid4Jh1xewQ=";
+      })
+    ];
+  });
+
+  jsondiff = super.jsondiff.overridePythonAttrs (
+    old: {
+      preBuild = (old.preBuild or "") + ''
+        substituteInPlace setup.py \
+          --replace "'jsondiff=jsondiff.cli:main_deprecated'," ""
+      '';
+    }
+  );
+
+  jsonpickle = super.jsonpickle.overridePythonAttrs (
+    old: {
+      dontPreferSetupPy = true;
+    }
+  );
+
+  jsonslicer = super.jsonslicer.overridePythonAttrs (old: {
+    nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkgconfig ];
+    buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.yajl ];
+  });
+
+  jupyter = super.jupyter.overridePythonAttrs (
+    old: rec {
+      # jupyter is a meta-package. Everything relevant comes from the
+      # dependencies. It does however have a jupyter.py file that conflicts
+      # with jupyter-core so this meta solves this conflict.
+      meta.priority = 100;
+    }
+  );
+
+  jupyterlab-widgets = super.jupyterlab-widgets.overridePythonAttrs (
+    old: rec {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.jupyter-packaging ];
+    }
+  );
+
+  kerberos = super.kerberos.overrideAttrs (old: {
+    nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.libkrb5 ];
+  });
+
+  keyring = super.keyring.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        self.toml
+      ];
+      postPatch = ''
+        substituteInPlace setup.py --replace 'setuptools.setup()' 'setuptools.setup(version="${old.version}")'
+      '';
+    }
+  );
+
+  kiwisolver = super.kiwisolver.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        self.cppy
+      ];
+    }
+  );
+
+  lap = super.lap.overridePythonAttrs (
+    old: {
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [
+        self.numpy
+      ];
+    }
+  );
+
+  libvirt-python = super.libvirt-python.overridePythonAttrs ({ nativeBuildInputs ? [ ], ... }: {
+    nativeBuildInputs = nativeBuildInputs ++ [ pkgs.pkg-config ];
+    propagatedBuildInputs = [ pkgs.libvirt ];
+  });
+
+  licensecheck = super.licensecheck.overridePythonAttrs (old: {
+    dontPreferSetupPy = true;
+  });
+
+  llvmlite = super.llvmlite.overridePythonAttrs (
+    old:
+    let
+      llvm =
+        if lib.versionAtLeast old.version "0.37.0" then
+          pkgs.llvmPackages_11.llvm
+        else if (lib.versionOlder old.version "0.37.0" && lib.versionAtLeast old.version "0.34.0") then
+          pkgs.llvmPackages_10.llvm
+        else if (lib.versionOlder old.version "0.34.0" && lib.versionAtLeast old.version "0.33.0") then
+          pkgs.llvmPackages_9.llvm
+        else if (lib.versionOlder old.version "0.33.0" && lib.versionAtLeast old.version "0.29.0") then
+          pkgs.llvmPackages_8.llvm
+        else if (lib.versionOlder old.version "0.28.0" && lib.versionAtLeast old.version "0.27.0") then
+          pkgs.llvmPackages_7.llvm
+        else if (lib.versionOlder old.version "0.27.0" && lib.versionAtLeast old.version "0.23.0") then
+          pkgs.llvmPackages_6.llvm
+        else if (lib.versionOlder old.version "0.23.0" && lib.versionAtLeast old.version "0.21.0") then
+          pkgs.llvmPackages_5.llvm
+        else
+          pkgs.llvm; # Likely to fail.
+    in
+    {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.llvm ];
+
+      # Disable static linking
+      # https://github.com/numba/llvmlite/issues/93
+      postPatch = ''
+        substituteInPlace ffi/Makefile.linux --replace "-static-libstdc++" ""
+
+        substituteInPlace llvmlite/tests/test_binding.py --replace "test_linux" "nope"
+      '';
+
+      # Set directory containing llvm-config binary
+      preConfigure = ''
+        export LLVM_CONFIG=${llvm.dev}/bin/llvm-config
+      '';
+
+      __impureHostDeps = lib.optionals pkgs.stdenv.isDarwin [ "/usr/lib/libm.dylib" ];
+
+      passthru = old.passthru // { llvm = llvm; };
+    }
+  );
+
+  lockfile = super.lockfile.overridePythonAttrs (
+    old: {
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.pbr ];
+    }
+  );
+
+  lxml = super.lxml.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = with pkgs; (old.nativeBuildInputs or [ ]) ++ [ pkg-config libxml2.dev libxslt.dev ] ++ lib.optionals stdenv.isDarwin [ xcodebuild ];
+      buildInputs = with pkgs; (old.buildInputs or [ ]) ++ [ libxml2 libxslt ];
+    }
+  );
+
+  markupsafe = super.markupsafe.overridePythonAttrs (
+    old: {
+      src = old.src.override { pname = builtins.replaceStrings [ "markupsafe" ] [ "MarkupSafe" ] old.pname; };
+    }
+  );
+
+  matplotlib = super.matplotlib.overridePythonAttrs (
+    old:
+    let
+      enableGhostscript = old.passthru.enableGhostscript or false;
+      enableGtk3 = old.passthru.enableTk or false;
+      enableQt = old.passthru.enableQt or false;
+      enableTk = old.passthru.enableTk or false;
+
+      inherit (pkgs.darwin.apple_sdk.frameworks) Cocoa;
+    in
+    {
+      NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-I${pkgs.libcxx}/include/c++/v1";
+
+      XDG_RUNTIME_DIR = "/tmp";
+
+      buildInputs = (old.buildInputs or [ ])
+        ++ lib.optional enableGhostscript pkgs.ghostscript
+        ++ lib.optional stdenv.isDarwin [ Cocoa ]
+        ++ [ self.certifi ];
+
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
+        pkgs.pkg-config
+      ] ++ lib.optional (lib.versionAtLeast super.matplotlib.version "3.5.0") [
+        self.setuptools-scm
+        self.setuptools-scm-git-archive
+      ];
+
+      MPLSETUPCFG = pkgs.writeText "mplsetup.cfg" ''
+        [libs]
+        system_freetype = True
+        system_qhull = True
+      '' + lib.optionalString stdenv.isDarwin ''
+        # LTO not working in darwin stdenv, see NixOS/nixpkgs/pull/19312
+        enable_lto = false
+      '';
+
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [
+        pkgs.libpng
+        pkgs.freetype
+        pkgs.qhull
+      ]
+        ++ lib.optionals enableGtk3 [ pkgs.cairo self.pycairo pkgs.gtk3 pkgs.gobject-introspection self.pygobject3 ]
+        ++ lib.optionals enableTk [ pkgs.tcl pkgs.tk self.tkinter pkgs.libX11 ]
+        ++ lib.optionals enableQt [ self.pyqt5 ]
+      ;
+
+      preBuild = ''
+        cp -r ${pkgs.qhull} .
+      '';
+
+      inherit (super.matplotlib) patches;
+    }
+  );
+
+  # Calls Cargo at build time for source builds and is really tricky to package
+  maturin = super.maturin.override {
+    preferWheel = true;
+  };
+
+  mccabe = super.mccabe.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+      doCheck = false;
+    }
+  );
+
+  mip = super.mip.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.autoPatchelfHook ];
+
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.zlib self.cppy ];
+    }
+  );
+
+  mmdet = super.mmdet.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytorch ];
+    }
+  );
+
+  molecule =
+    if lib.versionOlder super.molecule.version "3.0.0" then
+      (super.molecule.overridePythonAttrs (
+        old: {
+          patches = (old.patches or [ ]) ++ [
+            # Fix build with more recent setuptools versions
+            (pkgs.fetchpatch {
+              url = "https://github.com/ansible-community/molecule/commit/c9fee498646a702c77b5aecf6497cff324acd056.patch";
+              sha256 = "1g1n45izdz0a3c9akgxx14zhdw6c3dkb48j8pq64n82fa6ndl1b7";
+              excludes = [ "pyproject.toml" ];
+            })
+          ];
+          buildInputs = (old.buildInputs or [ ]) ++ [ self.setuptools-scm-git-archive ];
+        }
+      )) else
+      super.molecule.overridePythonAttrs (old: {
+        buildInputs = (old.buildInputs or [ ]) ++ [ self.setuptools-scm-git-archive ];
+      });
+
+  mongomock = super.mongomock.overridePythonAttrs (oa: {
+    buildInputs = oa.buildInputs ++ [ self.pbr ];
+  });
+
+  mpi4py = super.mpi4py.overridePythonAttrs (
+    old:
+    let
+      cfg = pkgs.writeTextFile {
+        name = "mpi.cfg";
+        text = (
+          lib.generators.toINI
+            { }
+            {
+              mpi = {
+                mpicc = "${pkgs.mpi.outPath}/bin/mpicc";
+              };
+            }
+        );
+      };
+    in
+    {
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ pkgs.mpi ];
+      enableParallelBuilding = true;
+      preBuild = ''
+        ln -sf ${cfg} mpi.cfg
+      '';
+    }
+  );
+
+  multiaddr = super.multiaddr.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  munch = super.munch.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pbr ];
+    }
+  );
+
+  mypy = super.mypy.overridePythonAttrs (
+    old: {
+      MYPY_USE_MYPYC =
+        # is64bit: unfortunately the build would exhaust all possible memory on i686-linux.
+        stdenv.buildPlatform.is64bit
+        # Derivation fails to build since v0.900 if mypyc is enabled.
+        && lib.strings.versionOlder old.version "0.900";
+    }
+  );
+
+  mysqlclient = super.mysqlclient.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.libmysqlclient ];
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.libmysqlclient ];
+    }
+  );
+
+  netcdf4 = super.netcdf4.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        self.cython
+      ];
+
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [
+        pkgs.zlib
+        pkgs.netcdf
+        pkgs.hdf5
+        pkgs.curl
+        pkgs.libjpeg
+      ];
+
+      # Variables used to configure the build process
+      USE_NCCONFIG = "0";
+      HDF5_DIR = lib.getDev pkgs.hdf5;
+      NETCDF4_DIR = pkgs.netcdf;
+      CURL_DIR = pkgs.curl.dev;
+      JPEG_DIR = pkgs.libjpeg.dev;
+    }
+  );
+
+  numpy = super.numpy.overridePythonAttrs (
+    old:
+    let
+      blas = old.passthru.args.blas or pkgs.openblasCompat;
+      blasImplementation = lib.nameFromURL blas.name "-";
+      cfg = pkgs.writeTextFile {
+        name = "site.cfg";
+        text = (
+          lib.generators.toINI
+            { }
+            {
+              ${blasImplementation} = {
+                include_dirs = "${blas}/include";
+                library_dirs = "${blas}/lib";
+              } // lib.optionalAttrs (blasImplementation == "mkl") {
+                mkl_libs = "mkl_rt";
+                lapack_libs = "";
+              };
+            }
+        );
+      };
+    in
+    {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.gfortran ];
+      buildInputs = (old.buildInputs or [ ]) ++ [ blas self.cython ];
+      enableParallelBuilding = true;
+      preBuild = ''
+        ln -s ${cfg} site.cfg
+      '';
+      passthru = old.passthru // {
+        blas = blas;
+        inherit blasImplementation cfg;
+      };
+    }
+  );
+
+  opencv-python = super.opencv-python.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = [ pkgs.cmake ] ++ old.nativeBuildInputs;
+      buildInputs = [ self.scikit-build ] ++ (old.buildInputs or [ ]);
+      dontUseCmakeConfigure = true;
+    }
+  );
+
+  opencv-contrib-python = super.opencv-contrib-python.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = [ pkgs.cmake ] ++ old.nativeBuildInputs;
+      buildInputs = [ self.scikit-build ] ++ (old.buildInputs or [ ]);
+      dontUseCmakeConfigure = true;
+    }
+  );
+
+  openexr = super.openexr.overridePythonAttrs (
+    old: rec {
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.openexr pkgs.ilmbase ];
+      NIX_CFLAGS_COMPILE = [ "-I${pkgs.openexr.dev}/include/OpenEXR" "-I${pkgs.ilmbase.dev}/include/OpenEXR" ];
+    }
+  );
+
+  osqp = super.osqp.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.cmake ];
+      dontUseCmakeConfigure = true;
+    }
+  );
+
+  pantalaimon = super.pantalaimon.overridePythonAttrs (old: {
+    nativeBuildInputs = old.nativeBuildInputs or [ ] ++ [ pkgs.installShellFiles ];
+    postInstall = old.postInstall or "" + ''
+      installManPage docs/man/*.[1-9]
+    '';
+  });
+
+  paramiko = super.paramiko.overridePythonAttrs (old: {
+    doCheck = false; # requires networking
+  });
+
+  parsel = super.parsel.overridePythonAttrs (
+    old: rec {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  pdal = super.pdal.overridePythonAttrs (
+    old: {
+      PDAL_CONFIG = "${pkgs.pdal}/bin/pdal-config";
+    }
+  );
+
+  peewee = super.peewee.overridePythonAttrs (
+    old:
+    let
+      withPostgres = old.passthru.withPostgres or false;
+      withMysql = old.passthru.withMysql or false;
+    in
+    {
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.sqlite ];
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ])
+        ++ lib.optional withPostgres self.psycopg2
+        ++ lib.optional withMysql self.mysql-connector;
+    }
+  );
+
+  pillow = super.pillow.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = [ pkgs.pkg-config self.pytest-runner ] ++ (old.nativeBuildInputs or [ ]);
+      buildInputs = with pkgs; [ freetype libjpeg zlib libtiff libwebp tcl lcms2 ] ++ (old.buildInputs or [ ]);
+    }
+  );
+
+  platformdirs = super.platformdirs.overridePythonAttrs (old: {
+    postPatch = ''
+      substituteInPlace setup.py --replace 'setup()' 'setup(version="${old.version}")'
+    '';
+  });
+
+  poetry-core = super.poetry-core.overridePythonAttrs (old: {
+    # "Vendor" dependencies (for build-system support)
+    postPatch = ''
+      echo "import sys" >> poetry/__init__.py
+      for path in $propagatedBuildInputs; do
+          echo "sys.path.insert(0, \"$path\")" >> poetry/__init__.py
+      done
+    '';
+
+    # Propagating dependencies leads to issues downstream
+    # We've already patched poetry to prefer "vendored" dependencies
+    postFixup = ''
+      rm $out/nix-support/propagated-build-inputs
+    '';
+  });
+
+  portend = super.portend.overridePythonAttrs (
+    old: {
+      # required for the extra "toml" dependency in setuptools_scm[toml]
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        self.toml
+      ];
+      # disable the removal of pyproject.toml, required because of setuptools_scm
+      dontPreferSetupPy = true;
+    }
+  );
+
+  prettytable = super.prettytable.overridePythonAttrs (old: {
+    propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.setuptools ];
+  });
+
+  psycopg2 = super.psycopg2.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ])
+        ++ lib.optional stdenv.isDarwin pkgs.openssl;
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.postgresql ];
+    }
+  );
+
+  psycopg2-binary = super.psycopg2-binary.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ])
+        ++ lib.optional stdenv.isDarwin pkgs.openssl;
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.postgresql ];
+    }
+  );
+
+  pyarrow =
+    if lib.versionAtLeast super.pyarrow.version "0.16.0" then
+      super.pyarrow.overridePythonAttrs
+        (
+          old:
+          let
+            parseMinor = drv: lib.concatStringsSep "." (lib.take 2 (lib.splitVersion drv.version));
+
+            # Starting with nixpkgs revision f149c7030a7, pyarrow takes "python3" as an argument
+            # instead of "python". Below we inspect function arguments to maintain compatibilitiy.
+            _arrow-cpp = pkgs.arrow-cpp.override (
+              builtins.intersectAttrs
+                (lib.functionArgs pkgs.arrow-cpp.override)
+                { python = self.python; python3 = self.python; }
+            );
+
+            ARROW_HOME = _arrow-cpp;
+            arrowCppVersion = parseMinor _arrow-cpp;
+            pyArrowVersion = parseMinor super.pyarrow;
+            errorMessage = "arrow-cpp version (${arrowCppVersion}) mismatches pyarrow version (${pyArrowVersion})";
+          in
+          if arrowCppVersion != pyArrowVersion then throw errorMessage else {
+
+            nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
+              self.cython
+              pkgs.pkg-config
+              pkgs.cmake
+            ];
+
+            preBuild = ''
+              export PYARROW_PARALLEL=$NIX_BUILD_CORES
+            '';
+
+            PARQUET_HOME = _arrow-cpp;
+            inherit ARROW_HOME;
+
+            PYARROW_BUILD_TYPE = "release";
+            PYARROW_WITH_FLIGHT = if _arrow-cpp.enableFlight then 1 else 0;
+            PYARROW_WITH_DATASET = 1;
+            PYARROW_WITH_PARQUET = 1;
+            PYARROW_CMAKE_OPTIONS = [
+              "-DCMAKE_INSTALL_RPATH=${ARROW_HOME}/lib"
+
+              # This doesn't use setup hook to call cmake so we need to workaround #54606
+              # ourselves
+              "-DCMAKE_POLICY_DEFAULT_CMP0025=NEW"
+            ];
+
+            dontUseCmakeConfigure = true;
+          }
+        ) else
+      super.pyarrow.overridePythonAttrs (
+        old: {
+          nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
+            self.cython
+          ];
+        }
+      );
+
+  pycairo = (
+    drv: (
+      drv.overridePythonAttrs (
+        _: {
+          format = "other";
+        }
+      )
+    ).overridePythonAttrs (
+      old: {
+
+        nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
+          pkgs.meson
+          pkgs.ninja
+          pkgs.pkg-config
+        ];
+
+        propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [
+          pkgs.cairo
+          pkgs.xlibsWrapper
+        ];
+
+        mesonFlags = [ "-Dpython=${if self.isPy3k then "python3" else "python"}" ];
+      }
+    )
+  )
+    super.pycairo;
+
+  pycocotools = super.pycocotools.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        self.cython
+        self.numpy
+      ];
+    }
+  );
+
+  pyfuse3 = super.pyfuse3.overridePythonAttrs (old: {
+    nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkg-config ];
+    buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.fuse3 ];
+  });
+
+  pygame = super.pygame.overridePythonAttrs (
+    old: rec {
+      nativeBuildInputs = [
+        pkgs.pkg-config
+        pkgs.SDL
+      ];
+
+      buildInputs = [
+        pkgs.SDL
+        pkgs.SDL_image
+        pkgs.SDL_mixer
+        pkgs.SDL_ttf
+        pkgs.libpng
+        pkgs.libjpeg
+        pkgs.portmidi
+        pkgs.xorg.libX11
+        pkgs.freetype
+      ];
+
+      # Tests fail because of no audio device and display.
+      doCheck = false;
+      preConfigure = ''
+                sed \
+                  -e "s/origincdirs = .*/origincdirs = []/" \
+                  -e "s/origlibdirs = .*/origlibdirs = []/" \
+                  -e "/'\/lib\/i386-linux-gnu', '\/lib\/x86_64-linux-gnu']/d" \
+                  -e "/\/include\/smpeg/d" \
+                  -i buildconfig/config_unix.py
+                ${lib.concatMapStrings
+        (dep: ''
+                  sed \
+                    -e "/origincdirs =/a\        origincdirs += ['${lib.getDev dep}/include']" \
+                    -e "/origlibdirs =/a\        origlibdirs += ['${lib.getLib dep}/lib']" \
+                    -i buildconfig/config_unix.py
+                '')
+        buildInputs
+                }
+                LOCALBASE=/ ${self.python.interpreter} buildconfig/config.py
+      '';
+    }
+  );
+
+  pygeos = super.pygeos.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.geos ];
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.geos ];
+    }
+  );
+
+  pygobject = super.pygobject.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkg-config ];
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.glib pkgs.gobject-introspection ];
+    }
+  );
+
+  pylint = super.pylint.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  pyopenssl = super.pyopenssl.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.openssl ];
+    }
+  );
+
+  pyproj = super.pyproj.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++
+        [ self.cython ];
+      PROJ_DIR = "${pkgs.proj}";
+      PROJ_LIBDIR = "${pkgs.proj}/lib";
+      PROJ_INCDIR = "${pkgs.proj.dev}/include";
+    }
+  );
+
+  pyproject-flake8 = super.pyproject-flake8.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.flit-core ];
+    }
+  );
+
+  pytaglib = super.pytaglib.overridePythonAttrs (old: {
+    buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.taglib ];
+  });
+
+  pytezos = super.pytezos.overridePythonAttrs (old: {
+    buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.libsodium ];
+  });
+
+  python-bugzilla = super.python-bugzilla.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
+        self.docutils
+      ];
+    }
+  );
+
+  python-ldap = super.python-ldap.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.openldap pkgs.cyrus_sasl ];
+    }
+  );
+
+  pytoml = super.pytoml.overridePythonAttrs (
+    old: {
+      doCheck = false;
+    }
+  );
+
+  pyqt5 =
+    let
+      drv = super.pyqt5;
+      withConnectivity = drv.passthru.args.withConnectivity or false;
+      withMultimedia = drv.passthru.args.withMultimedia or false;
+      withWebKit = drv.passthru.args.withWebKit or false;
+      withWebSockets = drv.passthru.args.withWebSockets or false;
+    in
+    super.pyqt5.overridePythonAttrs (
+      old: {
+        format = "other";
+
+        dontWrapQtApps = true;
+
+        nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
+          pkgs.pkg-config
+          pkgs.qt5.qmake
+          pkgs.xorg.lndir
+          pkgs.qt5.qtbase
+          pkgs.qt5.qtsvg
+          pkgs.qt5.qtdeclarative
+          pkgs.qt5.qtwebchannel
+          pkgs.qt5.qt3d
+          # self.pyqt5-sip
+          self.sip
+        ]
+          ++ lib.optional withConnectivity pkgs.qt5.qtconnectivity
+          ++ lib.optional withMultimedia pkgs.qt5.qtmultimedia
+          ++ lib.optional withWebKit pkgs.qt5.qtwebkit
+          ++ lib.optional withWebSockets pkgs.qt5.qtwebsockets
+        ;
+
+        buildInputs = (old.buildInputs or [ ]) ++ [
+          pkgs.dbus
+          pkgs.qt5.qtbase
+          pkgs.qt5.qtsvg
+          pkgs.qt5.qtdeclarative
+          self.sip
+        ]
+          ++ lib.optional withConnectivity pkgs.qt5.qtconnectivity
+          ++ lib.optional withWebKit pkgs.qt5.qtwebkit
+          ++ lib.optional withWebSockets pkgs.qt5.qtwebsockets
+        ;
+
+        # Fix dbus mainloop
+        patches = pkgs.python3.pkgs.pyqt5.patches or [ ];
+
+        configurePhase = ''
+          runHook preConfigure
+
+          export PYTHONPATH=$PYTHONPATH:$out/${self.python.sitePackages}
+
+          mkdir -p $out/${self.python.sitePackages}/dbus/mainloop
+          ${self.python.executable} configure.py  -w \
+            --confirm-license \
+            --no-qml-plugin \
+            --bindir=$out/bin \
+            --destdir=$out/${self.python.sitePackages} \
+            --stubsdir=$out/${self.python.sitePackages}/PyQt5 \
+            --sipdir=$out/share/sip/PyQt5 \
+            --designer-plugindir=$out/plugins/designer
+
+          runHook postConfigure
+        '';
+
+        postInstall = ''
+          ln -s ${self.pyqt5-sip}/${self.python.sitePackages}/PyQt5/sip.* $out/${self.python.sitePackages}/PyQt5/
+          for i in $out/bin/*; do
+            wrapProgram $i --prefix PYTHONPATH : "$PYTHONPATH"
+          done
+
+          # Let's make it a namespace package
+          cat << EOF > $out/${self.python.sitePackages}/PyQt5/__init__.py
+          from pkgutil import extend_path
+          __path__ = extend_path(__path__, __name__)
+          EOF
+        '';
+
+        installCheckPhase =
+          let
+            modules = [
+              "PyQt5"
+              "PyQt5.QtCore"
+              "PyQt5.QtQml"
+              "PyQt5.QtWidgets"
+              "PyQt5.QtGui"
+            ]
+            ++ lib.optional withWebSockets "PyQt5.QtWebSockets"
+            ++ lib.optional withWebKit "PyQt5.QtWebKit"
+            ++ lib.optional withMultimedia "PyQt5.QtMultimedia"
+            ++ lib.optional withConnectivity "PyQt5.QtConnectivity"
+            ;
+            imports = lib.concatMapStrings (module: "import ${module};") modules;
+          in
+          ''
+            echo "Checking whether modules can be imported..."
+            ${self.python.interpreter} -c "${imports}"
+          '';
+
+        doCheck = true;
+
+        enableParallelBuilding = true;
+      }
+    );
+
+  pytest-datadir = super.pytest-datadir.overridePythonAttrs (
+    old: {
+      postInstall = ''
+        rm -f $out/LICENSE
+      '';
+    }
+  );
+
+  pytest = super.pytest.overridePythonAttrs (
+    old: {
+      # Fixes https://github.com/pytest-dev/pytest/issues/7891
+      postPatch = old.postPatch or "" + ''
+        sed -i '/\[metadata\]/aversion = ${old.version}' setup.cfg
+      '';
+    }
+  );
+
+  pytest-django = super.pytest-django.overridePythonAttrs (
+    old: {
+      postPatch = ''
+        substituteInPlace setup.py --replace "'pytest>=3.6'," ""
+        substituteInPlace setup.py --replace "'pytest>=3.6'" ""
+      '';
+    }
+  );
+
+  pytest-randomly = super.pytest-randomly.overrideAttrs (old: {
+    propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [
+      self.importlib-metadata
+    ];
+  });
+
+  pytest-runner = super.pytest-runner or super.pytestrunner;
+
+  pytest-pylint = super.pytest-pylint.overridePythonAttrs (
+    old: {
+      buildInputs = [ self.pytest-runner ];
+    }
+  );
+
+  # pytest-splinter seems to put a .marker file in an empty directory
+  # presumably so it's tracked by and can be installed with MANIFEST.in, see
+  # https://github.com/pytest-dev/pytest-splinter/commit/a48eeef662f66ff9d3772af618748e73211a186b
+  #
+  # This directory then gets used as an empty initial profile directory and is
+  # zipped up. But if the .marker file is in the Nix store, it has the
+  # creation date of 1970, and Zip doesn't work with such old files, so it
+  # fails at runtime!
+  #
+  # We fix this here by just removing the file after the installation
+  #
+  # The error you get without this is:
+  #
+  # E           ValueError: ZIP does not support timestamps before 1980
+  # /nix/store/55b9ip7xkpimaccw9pa0vacy5q94f5xa-python3-3.7.6/lib/python3.7/zipfile.py:357: ValueError
+  pytest-splinter = super.pytest-splinter.overrideAttrs (old: {
+    postInstall = old.postInstall or "" + ''
+      rm $out/${super.python.sitePackages}/pytest_splinter/profiles/firefox/.marker
+    '';
+  });
+
+  python-jose = super.python-jose.overridePythonAttrs (
+    old: {
+      buildInputs = [ self.pytest-runner ];
+    }
+  );
+
+  python-olm = super.python-olm.overridePythonAttrs (
+    old: {
+      buildInputs = old.buildInputs or [ ] ++ [ pkgs.olm ];
+    }
+  );
+
+  python-snappy = super.python-snappy.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.snappy ];
+    }
+  );
+
+  pythran = super.pythran.overridePythonAttrs (old: {
+    buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+  });
+
+  ffmpeg-python = super.ffmpeg-python.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  python-prctl = super.python-prctl.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        pkgs.libcap
+      ];
+    }
+  );
+
+  pyudev = super.pyudev.overridePythonAttrs (old: {
+    postPatch = ''
+      substituteInPlace src/pyudev/_ctypeslib/utils.py \
+        --replace "find_library(name)" "'${pkgs.lib.getLib pkgs.systemd}/lib/libudev.so'"
+    '';
+  });
+
+  pyusb = super.pyusb.overridePythonAttrs (
+    old: {
+      postPatch = ''
+        libusb=${pkgs.libusb1.out}/lib/libusb-1.0${pkgs.stdenv.hostPlatform.extensions.sharedLibrary}
+        test -f $libusb || { echo "ERROR: $libusb doesn't exist, please update/fix this build expression."; exit 1; }
+        sed -i -e "s|find_library=None|find_library=lambda _:\"$libusb\"|" usb/backend/libusb1.py
+      '';
+    }
+  );
+
+  pywavelets = super.pywavelets.overridePythonAttrs (
+    old: {
+      HDF5_DIR = "${pkgs.hdf5}";
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ pkgs.hdf5 ];
+    }
+  );
+
+  pyzmq = super.pyzmq.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkg-config ];
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ pkgs.zeromq ];
+    }
+  );
+
+  rockset = super.rockset.overridePythonAttrs (
+    old: rec {
+      postPatch = ''
+        cp ./setup_rockset.py ./setup.py
+      '';
+    }
+  );
+
+  scaleapi = super.scaleapi.overridePythonAttrs (
+    old: {
+      postPatch = ''
+        substituteInPlace setup.py --replace "install_requires = ['requests>=2.4.2', 'enum34']" "install_requires = ['requests>=2.4.2']" || true
+      '';
+    }
+  );
+
+  pandas = super.pandas.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.cython ];
+    }
+  );
+
+  panel = super.panel.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.nodejs ];
+    }
+  );
+
+  # Pybind11 is an undeclared dependency of scipy that we need to pick from nixpkgs
+  # Make it not fail with infinite recursion
+  pybind11 = super.pybind11.overridePythonAttrs (
+    old: {
+      cmakeFlags = (old.cmakeFlags or [ ]) ++ [
+        "-DPYBIND11_TEST=off"
+      ];
+      doCheck = false; # Circular test dependency
+    }
+  );
+
+  requests-mock = super.requests-mock.overridePythonAttrs (
+    old: {
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ super.pbr ];
+    }
+  );
+
+  requests-unixsocket = super.requests-unixsocket.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pbr ];
+    }
+  );
+
+  requestsexceptions = super.requestsexceptions.overridePythonAttrs (old: {
+    nativeBuildInputs = old.nativeBuildInputs ++ [ self.pbr ];
+  });
+
+  rlp = super.rlp.overridePythonAttrs {
+    preConfigure = ''
+      substituteInPlace setup.py --replace \'setuptools-markdown\' ""
+    '';
+  };
+
+
+  rmfuse = super.rmfuse.overridePythonAttrs (old: {
+    propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.setuptools ];
+  });
+
+  rtree = super.rtree.overridePythonAttrs (old: {
+    propagatedNativeBuildInputs = (old.propagatedNativeBuildInputs or [ ]) ++ [ pkgs.libspatialindex ];
+    postPatch = ''
+      substituteInPlace rtree/finder.py --replace \
+        "find_library('spatialindex_c')" \
+        "'${pkgs.libspatialindex}/lib/libspatialindex_c${pkgs.stdenv.hostPlatform.extensions.sharedLibrary}'"
+    '';
+  });
+
+  ruamel-yaml = super.ruamel-yaml.overridePythonAttrs (
+    old: {
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ])
+        ++ [ self.ruamel-yaml-clib ];
+    }
+  );
+
+  scipy = super.scipy.overridePythonAttrs (
+    old:
+    if old.format != "wheel" then {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++
+        [ pkgs.gfortran ] ++
+        lib.optional (lib.versionAtLeast super.scipy.version "1.7.0") [ self.cython self.pythran ];
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.pybind11 ];
+      setupPyBuildFlags = [ "--fcompiler='gnu95'" ];
+      enableParallelBuilding = true;
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.numpy.blas ];
+      preConfigure = ''
+        sed -i '0,/from numpy.distutils.core/s//import setuptools;from numpy.distutils.core/' setup.py
+        export NPY_NUM_BUILD_JOBS=$NIX_BUILD_CORES
+      '';
+      preBuild = ''
+        ln -s ${self.numpy.cfg} site.cfg
+      '';
+    } else old
+  );
+
+  scikit-image = super.scikit-image.overridePythonAttrs (
+    old: {
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
+        self.cython
+        self.pythran
+        self.packaging
+        self.wheel
+        self.numpy
+      ];
+    }
+  );
+
+  scikit-learn = super.scikit-learn.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        pkgs.gfortran
+        pkgs.glibcLocales
+      ] ++ lib.optionals stdenv.cc.isClang [
+        pkgs.llvmPackages.openmp
+      ];
+
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
+        self.cython
+      ];
+
+      enableParallelBuilding = true;
+    }
+  );
+
+  secp256k1 = super.secp256k1.overridePythonAttrs (old: {
+    nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkgconfig pkgs.autoconf pkgs.automake pkgs.libtool ];
+    buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+    doCheck = false;
+    # Local setuptools versions like "x.y.post0" confuse an internal check
+    postPatch = ''
+      substituteInPlace setup.py \
+        --replace 'setuptools_version.' '"${self.setuptools.version}".'
+    '';
+  });
+
+  shapely = super.shapely.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.geos self.cython ];
+      inherit (pkgs.python3.pkgs.shapely) patches GEOS_LIBRARY_PATH;
+    }
+  );
+
+  shellcheck-py = super.shellcheck-py.overridePythonAttrs (old: {
+
+    # Make fetching/installing external binaries no-ops
+    preConfigure =
+      let
+        fakeCommand = "type('FakeCommand', (Command,), {'initialize_options': lambda self: None, 'finalize_options': lambda self: None, 'run': lambda self: None})";
+      in
+      ''
+        substituteInPlace setup.py \
+          --replace "'fetch_binaries': fetch_binaries," "'fetch_binaries': ${fakeCommand}," \
+          --replace "'install_shellcheck': install_shellcheck," "'install_shellcheck': ${fakeCommand},"
+      '';
+
+    propagatedUserEnvPkgs = (old.propagatedUserEnvPkgs or [ ]) ++ [
+      pkgs.shellcheck
+    ];
+
+  });
+
+  tables = super.tables.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pywavelets ];
+      HDF5_DIR = lib.getDev pkgs.hdf5;
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkg-config ];
+      propagatedBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.hdf5 self.numpy self.numexpr ];
+    }
+  );
+
+  tempora = super.tempora.overridePythonAttrs (
+    old: {
+      # required for the extra "toml" dependency in setuptools_scm[toml]
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        self.toml
+      ];
+      # disable the removal of pyproject.toml, required because of setuptools_scm
+      dontPreferSetupPy = true;
+    }
+  );
+
+  tensorboard = super.tensorboard.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        self.wheel
+        self.absl-py
+      ];
+      HDF5_DIR = "${pkgs.hdf5}";
+      propagatedBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
+        pkgs.hdf5
+        self.google-auth-oauthlib
+        self.tensorboard-plugin-wit
+        self.numpy
+        self.markdown
+        self.tensorboard-data-server
+        self.grpcio
+        self.protobuf
+        self.werkzeug
+        self.absl-py
+      ];
+    }
+  );
+
+  tensorflow = super.tensorflow.overridePythonAttrs (
+    old: {
+      postInstall = ''
+        rm $out/bin/tensorboard
+      '';
+    }
+  );
+
+  tensorpack = super.tensorpack.overridePythonAttrs (
+    old: {
+      postPatch = ''
+        substituteInPlace setup.cfg --replace "# will call find_packages()" ""
+      '';
+    }
+  );
+
+  tinycss2 = super.tinycss2.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  # The tokenizers build requires a complex rust setup (cf. nixpkgs override)
+  #
+  # Instead of providing a full source build, we use a wheel to keep
+  # the complexity manageable for now.
+  tokenizers = super.tokenizers.override {
+    preferWheel = true;
+  };
+
+  torch = lib.makeOverridable
+    ({ enableCuda ? false
+     , cudatoolkit ? pkgs.cudatoolkit_10_1
+     , pkg ? super.torch
+     }: pkg.overrideAttrs (old:
+      {
+        preConfigure =
+          if (!enableCuda) then ''
+            export USE_CUDA=0
+          '' else ''
+            export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${cudatoolkit}/targets/x86_64-linux/lib"
+          '';
+        preFixup = lib.optionalString (!enableCuda) ''
+          # For some reason pytorch retains a reference to libcuda even if it
+          # is explicitly disabled with USE_CUDA=0.
+          find $out -name "*.so" -exec ${pkgs.patchelf}/bin/patchelf --remove-needed libcuda.so.1 {} \;
+        '';
+        buildInputs =
+          (old.buildInputs or [ ])
+          ++ [ self.typing-extensions ]
+          ++ lib.optionals enableCuda [
+            pkgs.linuxPackages.nvidia_x11
+            pkgs.nccl.dev
+            pkgs.nccl.out
+          ];
+        propagatedBuildInputs = [
+          self.numpy
+          self.future
+          self.typing-extensions
+        ];
+      })
+    )
+    { };
+
+  torchvision = lib.makeOverridable
+    ({ enableCuda ? false
+     , cudatoolkit ? pkgs.cudatoolkit_10_1
+     , pkg ? super.torchvision
+     }: pkg.overrideAttrs (old: {
+
+      # without that autoPatchelfHook will fail because cudatoolkit is not in LD_LIBRARY_PATH
+      autoPatchelfIgnoreMissingDeps = true;
+      buildInputs = (old.buildInputs or [ ])
+        ++ [ self.torch ]
+        ++ lib.optionals enableCuda [
+        cudatoolkit
+      ];
+      preConfigure =
+        if (enableCuda) then ''
+          export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${self.torch}/${self.python.sitePackages}/torch/lib:${lib.makeLibraryPath [ cudatoolkit "${cudatoolkit}" ]}"
+        '' else ''
+          export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${self.torch}/${self.python.sitePackages}/torch/lib"
+        '';
+    }))
+    { };
+
+  typeguard = super.typeguard.overridePythonAttrs (old: {
+    postPatch = ''
+      substituteInPlace setup.py \
+        --replace 'setup()' 'setup(version="${old.version}")'
+    '';
+  });
+
+  typed_ast = super.typed-ast.overridePythonAttrs (old: {
+    nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
+      self.pytest-runner
+    ];
+  });
+
+  # nix uses a dash, poetry uses an underscore
+  typing-extensions = (super.typing_extensions or super.typing-extensions).overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++
+        lib.optional (lib.versionAtLeast old.version "4.0.0") [ self.flit-core ];
+    }
+  );
+
+  urwidtrees = super.urwidtrees.overridePythonAttrs (
+    old: {
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [
+        self.urwid
+      ];
+    }
+  );
+
+  vose-alias-method = super.vose-alias-method.overridePythonAttrs (
+    old: {
+      postInstall = ''
+        rm -f $out/LICENSE
+      '';
+    }
+  );
+
+  vispy = super.vispy.overrideAttrs (
+    old: {
+      inherit (pkgs.python3.pkgs.vispy) patches;
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
+        self.cython
+        self.setuptools-scm-git-archive
+      ];
+    }
+  );
+
+  uvloop = super.uvloop.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ lib.optionals stdenv.isDarwin [
+        pkgs.darwin.apple_sdk.frameworks.ApplicationServices
+        pkgs.darwin.apple_sdk.frameworks.CoreServices
+      ];
+    }
+  );
+
+
+  # Stop infinite recursion by using bootstrapped pkg from nixpkgs
+  bootstrapped-pip = super.bootstrapped-pip.override {
+    wheel = (pkgs.python3.pkgs.override {
+      python = self.python;
+    }).wheel;
+  };
+
+  weasyprint = super.weasyprint.overridePythonAttrs (
+    old: {
+      inherit (pkgs.python3.pkgs.weasyprint) patches;
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ];
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  web3 = super.web3.overridePythonAttrs {
+    preConfigure = ''
+      substituteInPlace setup.py --replace \'setuptools-markdown\' ""
+    '';
+  };
+
+  weblate-language-data = super.weblate-language-data.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        self.translate-toolkit
+      ];
+    }
+  );
+
+  wheel =
+    let
+      isWheel = super.wheel.src.isWheel or false;
+      # If "wheel" is a pre-built binary wheel
+      wheelPackage = super.buildPythonPackage {
+        inherit (super.wheel) pname name version src;
+        inherit (pkgs.python3.pkgs.wheel) meta;
+        format = "wheel";
+      };
+      # If "wheel" is built from source
+      sourcePackage = ((
+        pkgs.python3.pkgs.override {
+          python = self.python;
+        }
+      ).wheel.override {
+        inherit (self) buildPythonPackage bootstrapped-pip setuptools;
+      }).overrideAttrs (old: {
+        inherit (super.wheel) pname name version src;
+      });
+    in
+    if isWheel then wheelPackage else sourcePackage;
+
+  zipp = if super.zipp == null then null else
+  (
+    if lib.versionAtLeast super.zipp.version "2.0.0" then
+      (
+        super.zipp.overridePythonAttrs (
+          old:
+          if (old.format or "pyproject") != "wheel" then {
+            prePatch = ''
+              substituteInPlace setup.py --replace \
+              'setuptools.setup()' \
+              'setuptools.setup(version="${super.zipp.version}")'
+            '';
+          } else old
+        )
+      ) else super.zipp
+  ).overridePythonAttrs (
+    old: {
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [
+        self.toml
+      ];
+    }
+  );
+
+  credis = super.credis.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.cython ];
+    }
+  );
+
+  hashids = super.hashids.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.flit-core ];
+    }
+  );
+
+  packaging = super.packaging.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++
+        # From 20.5 until 20.7, packaging used flit for packaging (heh)
+        # See https://github.com/pypa/packaging/pull/352 and https://github.com/pypa/packaging/pull/367
+        lib.optional (lib.versionAtLeast old.version "20.5" && lib.versionOlder old.version "20.8") [ self.flit-core ];
+    }
+  );
+
+  psutil = super.psutil.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++
+        lib.optional stdenv.isDarwin pkgs.darwin.apple_sdk.frameworks.IOKit;
+    }
+  );
+
+  sentencepiece = super.sentencepiece.overridePythonAttrs (
+    old: {
+      dontUseCmakeConfigure = true;
+      nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
+        pkgs.pkg-config
+        pkgs.cmake
+        pkgs.gperftools
+      ];
+      buildInputs = (old.buildInputs or [ ]) ++ [
+        pkgs.sentencepiece
+      ];
+    }
+  );
+
+  sentence-transformers = super.sentence-transformers.overridePythonAttrs (
+    old: {
+      buildInputs =
+        (old.buildInputs or [ ])
+        ++ [ self.typing-extensions ];
+    }
+  );
+
+  supervisor = super.supervisor.overridePythonAttrs (
+    old: {
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [
+        self.meld3
+        self.setuptools
+      ];
+    }
+  );
+
+  cytoolz = super.cytoolz.overridePythonAttrs (
+    old: {
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.toolz ];
+    }
+  );
+
+  # For some reason the toml dependency of tqdm declared here:
+  # https://github.com/tqdm/tqdm/blob/67130a23646ae672836b971e1086b6ae4c77d930/pyproject.toml#L2
+  # is not translated correctly to a nix dependency.
+  tqdm = super.tqdm.overrideAttrs (
+    old: {
+      buildInputs = [ super.toml ] ++ (old.buildInputs or [ ]);
+    }
+  );
+
+  watchdog = super.watchdog.overrideAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ])
+        ++ pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.darwin.apple_sdk.frameworks.CoreServices;
+    }
+  );
+
+  # pyee cannot find `vcversioner` and other "setup requirements", so it tries to
+  # download them from the internet, which only works when nix sandboxing is disabled.
+  # Additionally, since pyee uses vcversioner to specify its version, we need to do this
+  # manually specify its version.
+  pyee = super.pyee.overrideAttrs (
+    old: {
+      postPatch = old.postPatch or "" + ''
+        sed -i setup.py \
+          -e '/setup_requires/,/],/d' \
+          -e 's/vcversioner={},/version="${old.version}",/'
+      '';
+    }
+  );
+
+  # nixpkgs has setuptools_scm 4.1.2
+  # but newrelic has a seemingly unnecessary version constraint for <4
+  # So we patch that out
+  newrelic = super.newrelic.overridePythonAttrs (
+    old: {
+      postPatch = old.postPatch or "" + ''
+        substituteInPlace setup.py --replace '"setuptools_scm>=3.2,<4"' '"setuptools_scm"'
+      '';
+    }
+  );
+
+  wxpython = super.wxpython.overridePythonAttrs (old:
+    let
+      localPython = self.python.withPackages (ps: with ps; [
+        setuptools
+        numpy
+        six
+      ]);
+    in
+    {
+      DOXYGEN = "${pkgs.doxygen}/bin/doxygen";
+
+      nativeBuildInputs = with pkgs; [
+        which
+        doxygen
+        gtk3
+        pkg-config
+        autoPatchelfHook
+      ] ++ (old.nativeBuildInputs or [ ]);
+
+      buildInputs = with pkgs; [
+        gtk3
+        webkitgtk
+        ncurses
+        SDL2
+        xorg.libXinerama
+        xorg.libSM
+        xorg.libXxf86vm
+        xorg.libXtst
+        xorg.xorgproto
+        gst_all_1.gstreamer
+        gst_all_1.gst-plugins-base
+        libGLU
+        libGL
+        libglvnd
+        mesa
+      ] ++ old.buildInputs;
+
+      buildPhase = ''
+        ${localPython.interpreter} build.py -v build_wx
+        ${localPython.interpreter} build.py -v dox etg --nodoc sip
+        ${localPython.interpreter} build.py -v build_py
+      '';
+
+      installPhase = ''
+        ${localPython.interpreter} setup.py install --skip-build --prefix=$out
+      '';
+    });
+
+  marisa-trie = super.marisa-trie.overridePythonAttrs (
+    old: {
+      buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ];
+    }
+  );
+
+  ua-parser = super.ua-parser.overridePythonAttrs (
+    old: {
+      propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.pyyaml ];
+    }
+  );
+
+  lazy-object-proxy = super.lazy-object-proxy.overridePythonAttrs (
+    old: {
+      # disable the removal of pyproject.toml, required because of setuptools_scm
+      dontPreferSetupPy = true;
+    }
+  );
+
+  pendulum = super.pendulum.overridePythonAttrs (old: {
+    # Technically incorrect, but fixes the build error..
+    preInstall = lib.optionalString stdenv.isLinux ''
+      mv --no-clobber ./dist/*.whl $(echo ./dist/*.whl | sed s/'manylinux_[0-9]*_[0-9]*'/'manylinux1'/)
+    '';
+  });
+
+  pygraphviz = super.pygraphviz.overridePythonAttrs (old: {
+    nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkg-config ];
+    buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.graphviz ];
+  });
+
+  pyjsg = super.pyjsg.overridePythonAttrs (old: {
+    buildInputs = (old.buildInputs or [ ]) ++ [ self.pbr ];
+  });
+
+  pyshex = super.pyshex.overridePythonAttrs (old: {
+    buildInputs = (old.buildInputs or [ ]) ++ [ self.pbr ];
+  });
+
+  pyshexc = super.pyshexc.overridePythonAttrs (old: {
+    buildInputs = (old.buildInputs or [ ]) ++ [ self.pbr ];
+  });
+
+  pysqlite = super.pysqlite.overridePythonAttrs (old: {
+    buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.sqlite ];
+  });
+
+  selinux = super.selinux.overridePythonAttrs (old: {
+    buildInputs = (old.buildInputs or [ ]) ++ [ self.setuptools-scm-git-archive ];
+  });
+
+  shexjsg = super.shexjsg.overridePythonAttrs (old: {
+    buildInputs = (old.buildInputs or [ ]) ++ [ self.pbr ];
+  });
+
+  sparqlslurper = super.sparqlslurper.overridePythonAttrs (old: {
+    buildInputs = (old.buildInputs or [ ]) ++ [ self.pbr ];
+  });
+
+  tomli = super.tomli.overridePythonAttrs (old: {
+    nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.flit-core ];
+  });
+
+  uwsgi = super.uwsgi.overridePythonAttrs (old: {
+    buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.ncurses ];
+    sourceRoot = ".";
+  });
+
+  wcwidth = super.wcwidth.overridePythonAttrs (old: {
+    propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++
+      lib.optional self.isPy27 (self.backports-functools-lru-cache or self.backports_functools_lru_cache)
+    ;
+  });
+
+  wtforms = super.wtforms.overridePythonAttrs (old: {
+    buildInputs = (old.buildInputs or [ ]) ++ [ self.Babel ];
+  });
+}
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pep425.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pep425.nix
new file mode 100644
index 000000000000..56f894c2e752
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pep425.nix
@@ -0,0 +1,117 @@
+{ lib, stdenv, poetryLib, python, isLinux ? stdenv.isLinux }:
+let
+  inherit (lib.strings) hasSuffix hasInfix splitString removeSuffix;
+  inherit (poetryLib) targetMachine;
+
+  # The 'cpxy" as determined by `python.version`
+  #
+  # e.g "2.7.17" -> "cp27"
+  #     "3.5.9"  -> "cp35"
+  pythonTag =
+    let
+      ver = builtins.splitVersion python.version;
+      major = builtins.elemAt ver 0;
+      minor = builtins.elemAt ver 1;
+    in
+    "cp${major}${minor}";
+  abiTag = "${pythonTag}m";
+
+  #
+  # Parses wheel file returning an attribute set
+  #
+  toWheelAttrs = str:
+    let
+      entries' = splitString "-" str;
+      # Hack: Remove version "suffixes" like 2.11.4-1
+      entries = builtins.filter (x: builtins.match "[0-9]" x == null) entries';
+      p = removeSuffix ".whl" (builtins.elemAt entries 4);
+    in
+    {
+      pkgName = builtins.elemAt entries 0;
+      pkgVer = builtins.elemAt entries 1;
+      pyVer = builtins.elemAt entries 2;
+      abi = builtins.elemAt entries 3;
+      platform = p;
+    };
+
+  #
+  # Builds list of acceptable osx wheel files
+  #
+  # <versions>   accepted versions in descending order of preference
+  # <candidates> list of wheel files to select from
+  findBestMatches = versions: candidates:
+    let
+      v = lib.lists.head versions;
+      vs = lib.lists.tail versions;
+    in
+    if (builtins.length versions == 0)
+    then [ ]
+    else (builtins.filter (x: hasInfix v x.file) candidates) ++ (findBestMatches vs candidates);
+
+  # pyver = "cpXX"
+  # x     = "cpXX" | "py2" | "py3" | "py2.py3"
+  isPyVersionCompatible = pyver: x:
+    let
+      normalize = y: ''cp${lib.strings.removePrefix "cp" (lib.strings.removePrefix "py" y)}'';
+      isCompat = p: x: lib.strings.hasPrefix (normalize x) p;
+    in
+    lib.lists.any (isCompat pyver) (lib.strings.splitString "." x);
+
+  #
+  # Selects the best matching wheel file from a list of files
+  #
+  selectWheel = files:
+    let
+      filesWithoutSources = (builtins.filter (x: hasSuffix ".whl" x.file) files);
+      isPyAbiCompatible = pyabi: x: x == "none" || lib.hasPrefix pyabi x || lib.hasPrefix x pyabi || (
+        # The CPython stable ABI is abi3 as in the shared library suffix.
+        python.passthru.implementation == "cpython" &&
+          builtins.elemAt (lib.splitString "." python.version) 0 == "3" &&
+          x == "abi3"
+      );
+      withPython = ver: abi: x: (isPyVersionCompatible ver x.pyVer) && (isPyAbiCompatible abi x.abi);
+      withPlatform =
+        if isLinux
+        then
+          if targetMachine != null
+          then
+            (
+              x: x.platform == "any" || lib.lists.any (e: hasInfix e x.platform) [
+                "manylinux1_${targetMachine}"
+                "manylinux2010_${targetMachine}"
+                "manylinux2014_${targetMachine}"
+              ]
+            )
+          else
+            (x: x.platform == "any")
+        else
+          if stdenv.isDarwin
+          then
+            if stdenv.targetPlatform.isAarch64
+            then (x: x.platform == "any" || (hasInfix "macosx" x.platform && lib.lists.any (e: hasSuffix e x.platform) [ "arm64" "aarch64" ]))
+            else (x: x.platform == "any" || (hasInfix "macosx" x.platform && hasSuffix "x86_64" x.platform))
+          else (x: x.platform == "any");
+      filterWheel = x:
+        let
+          f = toWheelAttrs x.file;
+        in
+        (withPython pythonTag abiTag f) && (withPlatform f);
+      filtered = builtins.filter filterWheel filesWithoutSources;
+      choose = files:
+        let
+          osxMatches = [ "12_0" "11_0" "10_12" "10_11" "10_10" "10_9" "10_8" "10_7" "any" ];
+          linuxMatches = [ "manylinux1_" "manylinux2010_" "manylinux2014_" "any" ];
+          chooseLinux = x: lib.take 1 (findBestMatches linuxMatches x);
+          chooseOSX = x: lib.take 1 (findBestMatches osxMatches x);
+        in
+        if isLinux
+        then chooseLinux files
+        else chooseOSX files;
+    in
+    if (builtins.length filtered == 0)
+    then [ ]
+    else choose (filtered);
+in
+{
+  inherit selectWheel toWheelAttrs isPyVersionCompatible;
+}
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pep508.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pep508.nix
new file mode 100644
index 000000000000..5098c5c3a90c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pep508.nix
@@ -0,0 +1,256 @@
+{ lib, stdenv, poetryLib }: python:
+let
+  inherit (poetryLib) ireplace targetMachine;
+
+  # Like builtins.substring but with stop being offset instead of length
+  substr = start: stop: s: builtins.substring start (stop - start) s;
+
+  # Strip leading/trailing whitespace from string
+  stripStr = s: lib.elemAt (builtins.split "^ *" (lib.elemAt (builtins.split " *$" s) 0)) 2;
+  findSubExpressionsFun = acc: c: (
+    if c == "(" then
+      (
+        let
+          posNew = acc.pos + 1;
+          isOpen = acc.openP == 0;
+          startPos = if isOpen then posNew else acc.startPos;
+        in
+        acc // {
+          inherit startPos;
+          exprs = acc.exprs ++ [ (substr acc.exprPos (acc.pos - 1) acc.expr) ];
+          pos = posNew;
+          openP = acc.openP + 1;
+        }
+      ) else if c == ")" then
+      (
+        let
+          openP = acc.openP - 1;
+          exprs = findSubExpressions (substr acc.startPos acc.pos acc.expr);
+        in
+        acc // {
+          inherit openP;
+          pos = acc.pos + 1;
+          exprs = if openP == 0 then acc.exprs ++ [ exprs ] else acc.exprs;
+          exprPos = if openP == 0 then acc.pos + 1 else acc.exprPos;
+        }
+      ) else acc // { pos = acc.pos + 1; }
+  );
+
+  # Make a tree out of expression groups (parens)
+  findSubExpressions = expr':
+    let
+      expr = " " + expr';
+      acc = builtins.foldl'
+        findSubExpressionsFun
+        {
+          exprs = [ ];
+          expr = expr;
+          pos = 0;
+          openP = 0;
+          exprPos = 0;
+          startPos = 0;
+        }
+        (lib.stringToCharacters expr);
+      tailExpr = (substr acc.exprPos acc.pos expr);
+      tailExprs = if tailExpr != "" then [ tailExpr ] else [ ];
+    in
+    acc.exprs ++ tailExprs;
+  parseExpressions = exprs:
+    let
+      splitCond = (
+        s: builtins.map
+          (x: stripStr (if builtins.typeOf x == "list" then (builtins.elemAt x 0) else x))
+          (builtins.split " (and|or) " (s + " "))
+      );
+      mapfn = expr: (
+        if (builtins.match "^ ?$" expr != null) then null  # Filter empty
+        else if (builtins.elem expr [ "and" "or" ]) then {
+          type = "bool";
+          value = expr;
+        }
+        else {
+          type = "expr";
+          value = expr;
+        }
+      );
+      parse = expr: builtins.filter (x: x != null) (builtins.map mapfn (splitCond expr));
+    in
+    builtins.foldl'
+      (
+        acc: v: acc ++ (if builtins.typeOf v == "string" then parse v else [ (parseExpressions v) ])
+      ) [ ]
+      exprs;
+
+  # Transform individual expressions to structured expressions
+  # This function also performs variable substitution, replacing environment markers with their explicit values
+  transformExpressions = exprs:
+    let
+      variables = {
+        os_name = (
+          if python.pname == "jython" then "java"
+          else "posix"
+        );
+        sys_platform = (
+          if stdenv.isLinux then "linux"
+          else if stdenv.isDarwin then "darwin"
+          else throw "Unsupported platform"
+        );
+        platform_machine = targetMachine;
+        platform_python_implementation =
+          let
+            impl = python.passthru.implementation;
+          in
+          (
+            if impl == "cpython" then "CPython"
+            else if impl == "pypy" then "PyPy"
+            else throw "Unsupported implementation ${impl}"
+          );
+        platform_release = ""; # Field not reproducible
+        platform_system = (
+          if stdenv.isLinux then "Linux"
+          else if stdenv.isDarwin then "Darwin"
+          else throw "Unsupported platform"
+        );
+        platform_version = ""; # Field not reproducible
+        python_version = python.passthru.pythonVersion;
+        python_full_version = python.version;
+        implementation_name = python.implementation;
+        implementation_version = python.version;
+        # extra = "";
+      };
+      substituteVar = value: if builtins.hasAttr value variables then (builtins.toJSON variables."${value}") else value;
+      processVar = value: builtins.foldl' (acc: v: v acc) value [
+        stripStr
+        substituteVar
+      ];
+    in
+    if builtins.typeOf exprs == "set" then
+      (
+        if exprs.type == "expr" then
+          (
+            let
+              mVal = ''[a-zA-Z0-9\'"_\. \-]+'';
+              mOp = "in|[!=<>]+";
+              e = stripStr exprs.value;
+              m' = builtins.match ''^(${mVal}) +(${mOp}) *(${mVal})$'' e;
+              m = builtins.map stripStr (if m' != null then m' else builtins.match ''^(${mVal}) +(${mOp}) *(${mVal})$'' e);
+              m0 = processVar (builtins.elemAt m 0);
+              m2 = processVar (builtins.elemAt m 2);
+            in
+            {
+              type = "expr";
+              value = {
+                # HACK: We don't know extra at eval time, so we assume the expression is always true
+                op = if m0 == "extra" then "true" else builtins.elemAt m 1;
+                values = [ m0 m2 ];
+              };
+            }
+          ) else exprs
+      ) else builtins.map transformExpressions exprs;
+
+  # Recursively eval all expressions
+  evalExpressions = exprs:
+    let
+      unmarshal = v: (
+        # TODO: Handle single quoted values
+        if v == "True" then true
+        else if v == "False" then false
+        else builtins.fromJSON v
+      );
+      hasElem = needle: haystack: builtins.elem needle (builtins.filter (x: builtins.typeOf x == "string") (builtins.split " " haystack));
+      op = {
+        "true" = x: y: true;
+        "<=" = x: y: op.">=" y x;
+        "<" = x: y: lib.versionOlder (unmarshal x) (unmarshal y);
+        "!=" = x: y: x != y;
+        "==" = x: y: x == y;
+        ">=" = x: y: lib.versionAtLeast (unmarshal x) (unmarshal y);
+        ">" = x: y: op."<" y x;
+        "~=" = v: c:
+          let
+            parts = builtins.splitVersion c;
+            pruned = lib.take ((builtins.length parts) - 1) parts;
+            upper = builtins.toString (
+              (lib.toInt (builtins.elemAt pruned (builtins.length pruned - 1))) + 1
+            );
+            upperConstraint = builtins.concatStringsSep "." (ireplace (builtins.length pruned - 1) upper pruned);
+          in
+          op.">=" v c && op."<" v upperConstraint;
+        "===" = x: y: x == y;
+        "in" = x: y:
+          let
+            values = builtins.filter (x: builtins.typeOf x == "string") (builtins.split " " (unmarshal y));
+          in
+          builtins.elem (unmarshal x) values;
+      };
+    in
+    if builtins.typeOf exprs == "set" then
+      (
+        if exprs.type == "expr" then
+          (
+            let
+              expr = exprs;
+              result = (op."${expr.value.op}") (builtins.elemAt expr.value.values 0) (builtins.elemAt expr.value.values 1);
+            in
+            {
+              type = "value";
+              value = result;
+            }
+          ) else exprs
+      ) else builtins.map evalExpressions exprs;
+
+  # Now that we have performed an eval all that's left to do is to concat the graph into a single bool
+  reduceExpressions = exprs:
+    let
+      cond = {
+        "and" = x: y: x && y;
+        "or" = x: y: x || y;
+      };
+      reduceExpressionsFun = acc: v: (
+        if builtins.typeOf v == "set" then
+          (
+            if v.type == "value" then
+              (
+                acc // {
+                  value = cond."${acc.cond}" acc.value v.value;
+                }
+              ) else if v.type == "bool" then
+              (
+                acc // {
+                  cond = v.value;
+                }
+              ) else throw "Unsupported type"
+          ) else if builtins.typeOf v == "list" then
+          (
+            let
+              ret = builtins.foldl'
+                reduceExpressionsFun
+                {
+                  value = true;
+                  cond = "and";
+                }
+                v;
+            in
+            acc // {
+              value = cond."${acc.cond}" acc.value ret.value;
+            }
+          ) else throw "Unsupported type"
+      );
+    in
+    (
+      builtins.foldl'
+        reduceExpressionsFun
+        {
+          value = true;
+          cond = "and";
+        }
+        exprs
+    ).value;
+in
+e: builtins.foldl' (acc: v: v acc) e [
+  findSubExpressions
+  parseExpressions
+  transformExpressions
+  evalExpressions
+  reduceExpressions
+]
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/default.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/default.nix
new file mode 100644
index 000000000000..8e52d7387c40
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, poetry2nix
+, python
+, fetchFromGitHub
+, projectDir ? ./.
+, pyproject ? projectDir + "/pyproject.toml"
+, poetrylock ? projectDir + "/poetry.lock"
+}:
+
+
+poetry2nix.mkPoetryApplication {
+
+  inherit python;
+
+  inherit projectDir pyproject poetrylock;
+
+  # Don't include poetry in inputs
+  __isBootstrap = true;
+
+  src = fetchFromGitHub (lib.importJSON ./src.json);
+
+  # "Vendor" dependencies (for build-system support)
+  postPatch = ''
+    echo "import sys" >> poetry/__init__.py
+    for path in $propagatedBuildInputs; do
+        echo "sys.path.insert(0, \"$path\")" >> poetry/__init__.py
+    done
+  '';
+
+  postInstall = ''
+    # Figure out the location of poetry.core
+    # As poetry.core is using the same root import name as the poetry package and the python module system wont look for the root
+    # in the separate second location we need to link poetry.core to poetry
+    ln -s $(python -c 'import poetry.core; import os.path; print(os.path.dirname(poetry.core.__file__))') $out/${python.sitePackages}/poetry/core
+
+    mkdir -p "$out/share/bash-completion/completions"
+    "$out/bin/poetry" completions bash > "$out/share/bash-completion/completions/poetry"
+    mkdir -p "$out/share/zsh/vendor-completions"
+    "$out/bin/poetry" completions zsh > "$out/share/zsh/vendor-completions/_poetry"
+    mkdir -p "$out/share/fish/vendor_completions.d"
+    "$out/bin/poetry" completions fish > "$out/share/fish/vendor_completions.d/poetry.fish"
+  '';
+
+  # Propagating dependencies leads to issues downstream
+  # We've already patched poetry to prefer "vendored" dependencies
+  postFixup = ''
+    rm $out/nix-support/propagated-build-inputs
+  '';
+
+  # Fails because of impurities (network, git etc etc)
+  doCheck = false;
+
+  meta = with lib; {
+    inherit (python.meta) platforms;
+    maintainers = with maintainers; [ adisbladis jakewaksbaum ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/poetry.lock b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/poetry.lock
new file mode 100644
index 000000000000..2da1370add73
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/poetry.lock
@@ -0,0 +1,1645 @@
+[[package]]
+name = "atomicwrites"
+version = "1.4.0"
+description = "Atomic file writes."
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "attrs"
+version = "21.2.0"
+description = "Classes Without Boilerplate"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.extras]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+
+[[package]]
+name = "backports.entry-points-selectable"
+version = "1.1.1"
+description = "Compatibility shim providing selectable entry points for older implementations"
+category = "main"
+optional = false
+python-versions = ">=2.7"
+
+[package.dependencies]
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest", "pytest-flake8", "pytest-cov", "pytest-black (>=0.3.7)", "pytest-mypy", "pytest-checkdocs (>=2.4)", "pytest-enabler (>=1.0.1)"]
+
+[[package]]
+name = "backports.functools-lru-cache"
+version = "1.6.4"
+description = "Backport of functools.lru_cache"
+category = "dev"
+optional = false
+python-versions = ">=2.6"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=4.6)", "pytest-black (>=0.3.7)", "pytest-mypy", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-checkdocs (>=2.4)"]
+
+[[package]]
+name = "cachecontrol"
+version = "0.12.6"
+description = "httplib2 caching for requests"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[package.dependencies]
+lockfile = {version = ">=0.9", optional = true, markers = "extra == \"filecache\""}
+msgpack = ">=0.5.2"
+requests = "*"
+
+[package.extras]
+filecache = ["lockfile (>=0.9)"]
+redis = ["redis (>=2.10.5)"]
+
+[[package]]
+name = "cachecontrol"
+version = "0.12.10"
+description = "httplib2 caching for requests"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+lockfile = {version = ">=0.9", optional = true, markers = "extra == \"filecache\""}
+msgpack = ">=0.5.2"
+requests = "*"
+
+[package.extras]
+filecache = ["lockfile (>=0.9)"]
+redis = ["redis (>=2.10.5)"]
+
+[[package]]
+name = "cachy"
+version = "0.3.0"
+description = "Cachy provides a simple yet effective caching library."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[package.extras]
+redis = ["redis (>=3.3.6,<4.0.0)"]
+memcached = ["python-memcached (>=1.59,<2.0)"]
+msgpack = ["msgpack-python (>=0.5,<0.6)"]
+
+[[package]]
+name = "certifi"
+version = "2021.10.8"
+description = "Python package for providing Mozilla's CA Bundle."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "cffi"
+version = "1.15.0"
+description = "Foreign Function Interface for Python calling C code."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+pycparser = "*"
+
+[[package]]
+name = "cfgv"
+version = "3.3.1"
+description = "Validate configuration and produce human readable error messages."
+category = "dev"
+optional = false
+python-versions = ">=3.6.1"
+
+[[package]]
+name = "chardet"
+version = "4.0.0"
+description = "Universal encoding detector for Python 2 and 3"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "cleo"
+version = "0.8.1"
+description = "Cleo allows you to create beautiful and testable command-line interfaces."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[package.dependencies]
+clikit = ">=0.6.0,<0.7.0"
+
+[[package]]
+name = "clikit"
+version = "0.6.2"
+description = "CliKit is a group of utilities to build beautiful and testable command line interfaces."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[package.dependencies]
+crashtest = {version = ">=0.3.0,<0.4.0", markers = "python_version >= \"3.6\" and python_version < \"4.0\""}
+enum34 = {version = ">=1.1,<2.0", markers = "python_version >= \"2.7\" and python_version < \"2.8\""}
+pastel = ">=0.2.0,<0.3.0"
+pylev = ">=1.3,<2.0"
+typing = {version = ">=3.6,<4.0", markers = "python_version >= \"2.7\" and python_version < \"2.8\" or python_version >= \"3.4\" and python_version < \"3.5\""}
+typing-extensions = {version = ">=3.6,<4.0", markers = "python_version >= \"3.5\" and python_full_version < \"3.5.4\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "configparser"
+version = "4.0.2"
+description = "Updated configparser from Python 3.7 for Python 2.6+."
+category = "main"
+optional = false
+python-versions = ">=2.6"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2)", "pytest-flake8", "pytest-black-multipy"]
+
+[[package]]
+name = "contextlib2"
+version = "0.6.0.post1"
+description = "Backports and enhancements for the contextlib module"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "coverage"
+version = "5.5"
+description = "Code coverage measurement for Python"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
+
+[package.extras]
+toml = ["toml"]
+
+[[package]]
+name = "crashtest"
+version = "0.3.1"
+description = "Manage Python errors with ease"
+category = "main"
+optional = false
+python-versions = ">=3.6,<4.0"
+
+[[package]]
+name = "cryptography"
+version = "3.2.1"
+description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
+category = "main"
+optional = false
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*"
+
+[package.dependencies]
+cffi = ">=1.8,<1.11.3 || >1.11.3"
+six = ">=1.4.1"
+
+[package.extras]
+docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
+docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
+pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
+ssh = ["bcrypt (>=3.1.5)"]
+test = ["pytest (>=3.6.0,!=3.9.0,!=3.9.1,!=3.9.2)", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
+
+[[package]]
+name = "cryptography"
+version = "3.3.2"
+description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
+category = "main"
+optional = false
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
+
+[package.dependencies]
+cffi = ">=1.12"
+enum34 = {version = "*", markers = "python_version < \"3\""}
+ipaddress = {version = "*", markers = "python_version < \"3\""}
+six = ">=1.4.1"
+
+[package.extras]
+docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
+docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
+pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
+ssh = ["bcrypt (>=3.1.5)"]
+test = ["pytest (>=3.6.0,!=3.9.0,!=3.9.1,!=3.9.2)", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
+
+[[package]]
+name = "cryptography"
+version = "36.0.1"
+description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+cffi = ">=1.12"
+
+[package.extras]
+docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
+docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
+pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
+sdist = ["setuptools_rust (>=0.11.4)"]
+ssh = ["bcrypt (>=3.1.5)"]
+test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
+
+[[package]]
+name = "distlib"
+version = "0.3.4"
+description = "Distribution utilities"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "entrypoints"
+version = "0.3"
+description = "Discover and load entry points from installed packages."
+category = "main"
+optional = false
+python-versions = ">=2.7"
+
+[package.dependencies]
+configparser = {version = ">=3.5", markers = "python_version == \"2.7\""}
+
+[[package]]
+name = "enum34"
+version = "1.1.10"
+description = "Python 3.4 Enum backported to 3.3, 3.2, 3.1, 2.7, 2.6, 2.5, and 2.4"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "filelock"
+version = "3.2.1"
+description = "A platform independent file lock."
+category = "main"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+
+[package.extras]
+docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"]
+testing = ["coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"]
+
+[[package]]
+name = "funcsigs"
+version = "1.0.2"
+description = "Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2+"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "functools32"
+version = "3.2.3-2"
+description = "Backport of the functools module from Python 3.2.3 for use on 2.7 and PyPy."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "futures"
+version = "3.3.0"
+description = "Backport of the concurrent.futures package from Python 3"
+category = "main"
+optional = false
+python-versions = ">=2.6, <3"
+
+[[package]]
+name = "glob2"
+version = "0.6"
+description = "Version of the glob module that can capture patterns and supports recursive wildcards"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "html5lib"
+version = "1.1"
+description = "HTML parser based on the WHATWG HTML specification"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+six = ">=1.9"
+webencodings = "*"
+
+[package.extras]
+all = ["genshi", "chardet (>=2.2)", "lxml"]
+chardet = ["chardet (>=2.2)"]
+genshi = ["genshi"]
+lxml = ["lxml"]
+
+[[package]]
+name = "httpretty"
+version = "0.9.7"
+description = "HTTP client mock for Python"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+six = "*"
+
+[[package]]
+name = "identify"
+version = "2.4.0"
+description = "File identification library for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.6.1"
+
+[package.extras]
+license = ["ukkonen"]
+
+[[package]]
+name = "idna"
+version = "2.10"
+description = "Internationalized Domain Names in Applications (IDNA)"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "importlib-metadata"
+version = "1.7.0"
+description = "Read metadata from Python packages"
+category = "main"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+
+[package.dependencies]
+configparser = {version = ">=3.5", markers = "python_version < \"3\""}
+contextlib2 = {version = "*", markers = "python_version < \"3\""}
+pathlib2 = {version = "*", markers = "python_version < \"3\""}
+zipp = ">=0.5"
+
+[package.extras]
+docs = ["sphinx", "rst.linker"]
+testing = ["packaging", "pep517", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "3.2.1"
+description = "Read resources from Python packages"
+category = "main"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+
+[package.dependencies]
+contextlib2 = {version = "*", markers = "python_version < \"3\""}
+pathlib2 = {version = "*", markers = "python_version < \"3\""}
+singledispatch = {version = "*", markers = "python_version < \"3.4\""}
+typing = {version = "*", markers = "python_version < \"3.5\""}
+zipp = {version = ">=0.4", markers = "python_version < \"3.8\""}
+
+[package.extras]
+docs = ["sphinx", "rst.linker", "jaraco.packaging"]
+
+[[package]]
+name = "ipaddress"
+version = "1.0.23"
+description = "IPv4/IPv6 manipulation library"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "jeepney"
+version = "0.4.3"
+description = "Low-level, pure Python DBus protocol wrapper."
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.extras]
+dev = ["testpath"]
+
+[[package]]
+name = "jeepney"
+version = "0.7.1"
+description = "Low-level, pure Python DBus protocol wrapper."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+test = ["pytest", "pytest-trio", "pytest-asyncio", "testpath", "trio", "async-timeout"]
+trio = ["trio", "async-generator"]
+
+[[package]]
+name = "keyring"
+version = "18.0.1"
+description = "Store and access your passwords safely."
+category = "main"
+optional = false
+python-versions = ">=2.7"
+
+[package.dependencies]
+entrypoints = "*"
+pywin32-ctypes = {version = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1", markers = "sys_platform == \"win32\""}
+secretstorage = {version = "<3", markers = "(sys_platform == \"linux2\" or sys_platform == \"linux\") and python_version < \"3.5\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs", "pytest-flake8"]
+
+[[package]]
+name = "keyring"
+version = "20.0.1"
+description = "Store and access your passwords safely."
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+pywin32-ctypes = {version = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1", markers = "sys_platform == \"win32\""}
+secretstorage = {version = "*", markers = "sys_platform == \"linux\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-black-multipy", "pytest-cov"]
+
+[[package]]
+name = "keyring"
+version = "21.8.0"
+description = "Store and access your passwords safely."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+importlib-metadata = {version = ">=1", markers = "python_version < \"3.8\""}
+jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""}
+pywin32-ctypes = {version = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1", markers = "sys_platform == \"win32\""}
+SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+
+[[package]]
+name = "lockfile"
+version = "0.12.2"
+description = "Platform-independent file locking module"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "mock"
+version = "3.0.5"
+description = "Rolling backport of unittest.mock for all Pythons"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[package.dependencies]
+funcsigs = {version = ">=1", markers = "python_version < \"3.3\""}
+six = "*"
+
+[package.extras]
+build = ["twine", "wheel", "blurb"]
+docs = ["sphinx"]
+test = ["pytest", "pytest-cov"]
+
+[[package]]
+name = "more-itertools"
+version = "5.0.0"
+description = "More routines for operating on iterables, beyond itertools"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+six = ">=1.0.0,<2.0.0"
+
+[[package]]
+name = "more-itertools"
+version = "7.2.0"
+description = "More routines for operating on iterables, beyond itertools"
+category = "dev"
+optional = false
+python-versions = ">=3.4"
+
+[[package]]
+name = "more-itertools"
+version = "8.12.0"
+description = "More routines for operating on iterables, beyond itertools"
+category = "dev"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "msgpack"
+version = "1.0.3"
+description = "MessagePack (de)serializer."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "nodeenv"
+version = "1.6.0"
+description = "Node.js virtual environment builder"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "packaging"
+version = "20.9"
+description = "Core utilities for Python packages"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[package.dependencies]
+pyparsing = ">=2.0.2"
+
+[[package]]
+name = "pastel"
+version = "0.2.1"
+description = "Bring colors to your terminal."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "pathlib2"
+version = "2.3.6"
+description = "Object-oriented filesystem paths"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+scandir = {version = "*", markers = "python_version < \"3.5\""}
+six = "*"
+
+[[package]]
+name = "pexpect"
+version = "4.8.0"
+description = "Pexpect allows easy control of interactive console applications."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+ptyprocess = ">=0.5"
+
+[[package]]
+name = "pkginfo"
+version = "1.8.2"
+description = "Query metadatdata from sdists / bdists / installed packages."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.extras]
+testing = ["coverage", "nose"]
+
+[[package]]
+name = "platformdirs"
+version = "2.0.2"
+description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "pluggy"
+version = "0.13.1"
+description = "plugin and hook calling mechanisms for python"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[package.dependencies]
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
+
+[package.extras]
+dev = ["pre-commit", "tox"]
+
+[[package]]
+name = "poetry-core"
+version = "1.0.7"
+description = "Poetry PEP 517 Build Backend"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+enum34 = {version = ">=1.1.10,<2.0.0", markers = "python_version >= \"2.7\" and python_version < \"2.8\""}
+functools32 = {version = ">=3.2.3-2,<4.0.0", markers = "python_version >= \"2.7\" and python_version < \"2.8\""}
+importlib-metadata = {version = ">=1.7.0,<2.0.0", markers = "python_version >= \"2.7\" and python_version < \"2.8\" or python_version >= \"3.5\" and python_version < \"3.8\""}
+pathlib2 = {version = ">=2.3.5,<3.0.0", markers = "python_version >= \"2.7\" and python_version < \"2.8\""}
+typing = {version = ">=3.7.4.1,<4.0.0.0", markers = "python_version >= \"2.7\" and python_version < \"2.8\""}
+
+[[package]]
+name = "pre-commit"
+version = "2.16.0"
+description = "A framework for managing and maintaining multi-language pre-commit hooks."
+category = "dev"
+optional = false
+python-versions = ">=3.6.1"
+
+[package.dependencies]
+cfgv = ">=2.0.0"
+identify = ">=1.0.0"
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+importlib-resources = {version = "<5.3", markers = "python_version < \"3.7\""}
+nodeenv = ">=0.11.1"
+pyyaml = ">=5.1"
+toml = "*"
+virtualenv = ">=20.0.8"
+
+[[package]]
+name = "ptyprocess"
+version = "0.7.0"
+description = "Run a subprocess in a pseudo terminal"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "py"
+version = "1.11.0"
+description = "library with cross-python path, ini-parsing, io, code, log facilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "pycparser"
+version = "2.21"
+description = "C parser in Python"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "pylev"
+version = "1.4.0"
+description = "A pure Python Levenshtein implementation that's not freaking GPL'd."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pyparsing"
+version = "2.4.7"
+description = "Python parsing module"
+category = "main"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "pytest"
+version = "4.6.11"
+description = "pytest: simple powerful testing with Python"
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
+
+[package.dependencies]
+atomicwrites = ">=1.0"
+attrs = ">=17.4.0"
+colorama = {version = "*", markers = "sys_platform == \"win32\" and python_version != \"3.4\""}
+funcsigs = {version = ">=1.0", markers = "python_version < \"3.0\""}
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
+more-itertools = [
+    {version = ">=4.0.0,<6.0.0", markers = "python_version <= \"2.7\""},
+    {version = ">=4.0.0", markers = "python_version > \"2.7\""},
+]
+packaging = "*"
+pathlib2 = {version = ">=2.2.0", markers = "python_version < \"3.6\""}
+pluggy = ">=0.12,<1.0"
+py = ">=1.5.0"
+six = ">=1.10.0"
+wcwidth = "*"
+
+[package.extras]
+testing = ["argcomplete", "hypothesis (>=3.56)", "nose", "requests", "mock"]
+
+[[package]]
+name = "pytest"
+version = "5.4.3"
+description = "pytest: simple powerful testing with Python"
+category = "dev"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
+attrs = ">=17.4.0"
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
+more-itertools = ">=4.0.0"
+packaging = "*"
+pathlib2 = {version = ">=2.2.0", markers = "python_version < \"3.6\""}
+pluggy = ">=0.12,<1.0"
+py = ">=1.5.0"
+wcwidth = "*"
+
+[package.extras]
+checkqa-mypy = ["mypy (==v0.761)"]
+testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
+
+[[package]]
+name = "pytest-cov"
+version = "2.12.1"
+description = "Pytest plugin for measuring coverage."
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+coverage = ">=5.2.1"
+pytest = ">=4.6"
+toml = "*"
+
+[package.extras]
+testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"]
+
+[[package]]
+name = "pytest-mock"
+version = "1.13.0"
+description = "Thin-wrapper around the mock package for easier use with py.test"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[package.dependencies]
+mock = {version = "*", markers = "python_version < \"3.0\""}
+pytest = ">=2.7"
+
+[package.extras]
+dev = ["pre-commit", "tox"]
+
+[[package]]
+name = "pytest-sugar"
+version = "0.9.4"
+description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+packaging = ">=14.1"
+pytest = ">=2.9"
+termcolor = ">=1.1.0"
+
+[[package]]
+name = "pywin32-ctypes"
+version = "0.2.0"
+description = ""
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pyyaml"
+version = "6.0"
+description = "YAML parser and emitter for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "requests"
+version = "2.25.1"
+description = "Python HTTP for Humans."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+chardet = ">=3.0.2,<5"
+idna = ">=2.5,<3"
+urllib3 = ">=1.21.1,<1.27"
+
+[package.extras]
+security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"]
+socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
+
+[[package]]
+name = "requests-toolbelt"
+version = "0.9.1"
+description = "A utility belt for advanced users of python-requests"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+requests = ">=2.0.1,<3.0.0"
+
+[[package]]
+name = "scandir"
+version = "1.10.0"
+description = "scandir, a better directory iterator and faster os.walk()"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "secretstorage"
+version = "2.3.1"
+description = "Python bindings to FreeDesktop.org Secret Service API"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+cryptography = "*"
+
+[package.extras]
+dbus-python = ["dbus-python"]
+
+[[package]]
+name = "secretstorage"
+version = "3.2.0"
+description = "Python bindings to FreeDesktop.org Secret Service API"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+cryptography = ">=2.0"
+jeepney = ">=0.4.2"
+
+[[package]]
+name = "secretstorage"
+version = "3.3.1"
+description = "Python bindings to FreeDesktop.org Secret Service API"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+cryptography = ">=2.0"
+jeepney = ">=0.6"
+
+[[package]]
+name = "shellingham"
+version = "1.4.0"
+description = "Tool to Detect Surrounding Shell"
+category = "main"
+optional = false
+python-versions = "!=3.0,!=3.1,!=3.2,!=3.3,>=2.6"
+
+[[package]]
+name = "singledispatch"
+version = "3.7.0"
+description = "Backport functools.singledispatch from Python 3.4 to Python 2.6-3.3."
+category = "main"
+optional = false
+python-versions = ">=2.6"
+
+[package.dependencies]
+six = "*"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=4.6)", "pytest-flake8", "pytest-cov", "pytest-black (>=0.3.7)", "unittest2", "pytest-checkdocs (>=2.4)"]
+
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "subprocess32"
+version = "3.5.4"
+description = "A backport of the subprocess module from Python 3 for use on 2.x."
+category = "main"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, <4"
+
+[[package]]
+name = "termcolor"
+version = "1.1.0"
+description = "ANSII Color formatting for output in terminal."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "toml"
+version = "0.10.2"
+description = "Python Library for Tom's Obvious, Minimal Language"
+category = "dev"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "tomlkit"
+version = "0.7.2"
+description = "Style preserving TOML library"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+enum34 = {version = ">=1.1,<2.0", markers = "python_version >= \"2.7\" and python_version < \"2.8\""}
+functools32 = {version = ">=3.2.3,<4.0.0", markers = "python_version >= \"2.7\" and python_version < \"2.8\""}
+typing = {version = ">=3.6,<4.0", markers = "python_version >= \"2.7\" and python_version < \"2.8\" or python_version >= \"3.4\" and python_version < \"3.5\""}
+
+[[package]]
+name = "tox"
+version = "3.24.4"
+description = "tox is a generic virtualenv management and test command line tool"
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+
+[package.dependencies]
+colorama = {version = ">=0.4.1", markers = "platform_system == \"Windows\""}
+filelock = ">=3.0.0"
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
+packaging = ">=14"
+pluggy = ">=0.12.0"
+py = ">=1.4.17"
+six = ">=1.14.0"
+toml = ">=0.9.4"
+virtualenv = ">=16.0.0,<20.0.0 || >20.0.0,<20.0.1 || >20.0.1,<20.0.2 || >20.0.2,<20.0.3 || >20.0.3,<20.0.4 || >20.0.4,<20.0.5 || >20.0.5,<20.0.6 || >20.0.6,<20.0.7 || >20.0.7"
+
+[package.extras]
+docs = ["pygments-github-lexers (>=0.0.5)", "sphinx (>=2.0.0)", "sphinxcontrib-autoprogram (>=0.1.5)", "towncrier (>=18.5.0)"]
+testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "psutil (>=5.6.1)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)", "pytest-xdist (>=1.22.2)", "pathlib2 (>=2.3.3)"]
+
+[[package]]
+name = "typing"
+version = "3.10.0.0"
+description = "Type Hints for Python"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <3.5"
+
+[[package]]
+name = "typing-extensions"
+version = "3.10.0.2"
+description = "Backported and Experimental Type Hints for Python 3.5+"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "urllib3"
+version = "1.25.11"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
+
+[package.extras]
+brotli = ["brotlipy (>=0.6.0)"]
+secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+
+[[package]]
+name = "virtualenv"
+version = "20.10.0"
+description = "Virtual Python Environment builder"
+category = "main"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+
+[package.dependencies]
+"backports.entry-points-selectable" = ">=1.0.4"
+distlib = ">=0.3.1,<1"
+filelock = ">=3.2,<4"
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
+importlib-resources = {version = ">=1.0", markers = "python_version < \"3.7\""}
+pathlib2 = {version = ">=2.3.3,<3", markers = "python_version < \"3.4\" and sys_platform != \"win32\""}
+platformdirs = ">=2,<3"
+six = ">=1.9.0,<2"
+
+[package.extras]
+docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"]
+testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"]
+
+[[package]]
+name = "wcwidth"
+version = "0.2.5"
+description = "Measures the displayed width of unicode strings in a terminal"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+"backports.functools-lru-cache" = {version = ">=1.2.1", markers = "python_version < \"3.2\""}
+
+[[package]]
+name = "webencodings"
+version = "0.5.1"
+description = "Character encoding aliases for legacy web content"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "zipp"
+version = "1.2.0"
+description = "Backport of pathlib-compatible object wrapper for zip files"
+category = "main"
+optional = false
+python-versions = ">=2.7"
+
+[package.dependencies]
+contextlib2 = {version = "*", markers = "python_version < \"3.4\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"]
+testing = ["pathlib2", "unittest2", "jaraco.itertools", "func-timeout"]
+
+[metadata]
+lock-version = "1.1"
+python-versions = "~2.7 || ^3.5"
+content-hash = "290e530f0cdd81360dd6cb93f3182ac8e8b18a46238198d25de11c26f6b0c356"
+
+[metadata.files]
+atomicwrites = [
+    {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
+    {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
+]
+attrs = [
+    {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
+    {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+]
+"backports.entry-points-selectable" = [
+    {file = "backports.entry_points_selectable-1.1.1-py2.py3-none-any.whl", hash = "sha256:7fceed9532a7aa2bd888654a7314f864a3c16a4e710b34a58cfc0f08114c663b"},
+    {file = "backports.entry_points_selectable-1.1.1.tar.gz", hash = "sha256:914b21a479fde881635f7af5adc7f6e38d6b274be32269070c53b698c60d5386"},
+]
+"backports.functools-lru-cache" = [
+    {file = "backports.functools_lru_cache-1.6.4-py2.py3-none-any.whl", hash = "sha256:dbead04b9daa817909ec64e8d2855fb78feafe0b901d4568758e3a60559d8978"},
+    {file = "backports.functools_lru_cache-1.6.4.tar.gz", hash = "sha256:d5ed2169378b67d3c545e5600d363a923b09c456dab1593914935a68ad478271"},
+]
+cachecontrol = [
+    {file = "CacheControl-0.12.6-py2.py3-none-any.whl", hash = "sha256:10d056fa27f8563a271b345207402a6dcce8efab7e5b377e270329c62471b10d"},
+    {file = "CacheControl-0.12.6.tar.gz", hash = "sha256:be9aa45477a134aee56c8fac518627e1154df063e85f67d4f83ce0ccc23688e8"},
+    {file = "CacheControl-0.12.10-py2.py3-none-any.whl", hash = "sha256:b0d43d8f71948ef5ebdee5fe236b86c6ffc7799370453dccb0e894c20dfa487c"},
+    {file = "CacheControl-0.12.10.tar.gz", hash = "sha256:d8aca75b82eec92d84b5d6eb8c8f66ea16f09d2adb09dbca27fe2d5fc8d3732d"},
+]
+cachy = [
+    {file = "cachy-0.3.0-py2.py3-none-any.whl", hash = "sha256:338ca09c8860e76b275aff52374330efedc4d5a5e45dc1c5b539c1ead0786fe7"},
+    {file = "cachy-0.3.0.tar.gz", hash = "sha256:186581f4ceb42a0bbe040c407da73c14092379b1e4c0e327fdb72ae4a9b269b1"},
+]
+certifi = [
+    {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+    {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
+]
+cffi = [
+    {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
+    {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
+    {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
+    {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
+    {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
+    {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
+    {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
+    {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
+    {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
+    {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
+    {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
+    {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
+    {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
+    {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
+    {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
+    {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
+    {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
+    {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
+    {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
+    {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
+    {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
+    {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
+    {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
+    {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
+    {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
+    {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
+    {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
+    {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
+    {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
+    {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
+    {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
+    {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
+    {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
+    {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
+    {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
+    {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
+    {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
+    {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
+    {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
+    {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
+    {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
+    {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
+    {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
+    {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
+    {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
+    {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
+    {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
+    {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
+    {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
+    {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
+]
+cfgv = [
+    {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"},
+    {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"},
+]
+chardet = [
+    {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"},
+    {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"},
+]
+cleo = [
+    {file = "cleo-0.8.1-py2.py3-none-any.whl", hash = "sha256:141cda6dc94a92343be626bb87a0b6c86ae291dfc732a57bf04310d4b4201753"},
+    {file = "cleo-0.8.1.tar.gz", hash = "sha256:3d0e22d30117851b45970b6c14aca4ab0b18b1b53c8af57bed13208147e4069f"},
+]
+clikit = [
+    {file = "clikit-0.6.2-py2.py3-none-any.whl", hash = "sha256:71268e074e68082306e23d7369a7b99f824a0ef926e55ba2665e911f7208489e"},
+    {file = "clikit-0.6.2.tar.gz", hash = "sha256:442ee5db9a14120635c5990bcdbfe7c03ada5898291f0c802f77be71569ded59"},
+]
+colorama = [
+    {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
+    {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
+]
+configparser = [
+    {file = "configparser-4.0.2-py2.py3-none-any.whl", hash = "sha256:254c1d9c79f60c45dfde850850883d5aaa7f19a23f13561243a050d5a7c3fe4c"},
+    {file = "configparser-4.0.2.tar.gz", hash = "sha256:c7d282687a5308319bf3d2e7706e575c635b0a470342641c93bea0ea3b5331df"},
+]
+contextlib2 = [
+    {file = "contextlib2-0.6.0.post1-py2.py3-none-any.whl", hash = "sha256:3355078a159fbb44ee60ea80abd0d87b80b78c248643b49aa6d94673b413609b"},
+    {file = "contextlib2-0.6.0.post1.tar.gz", hash = "sha256:01f490098c18b19d2bd5bb5dc445b2054d2fa97f09a4280ba2c5f3c394c8162e"},
+]
+coverage = [
+    {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"},
+    {file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"},
+    {file = "coverage-5.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669"},
+    {file = "coverage-5.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90"},
+    {file = "coverage-5.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c"},
+    {file = "coverage-5.5-cp27-cp27m-win32.whl", hash = "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a"},
+    {file = "coverage-5.5-cp27-cp27m-win_amd64.whl", hash = "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82"},
+    {file = "coverage-5.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905"},
+    {file = "coverage-5.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083"},
+    {file = "coverage-5.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5"},
+    {file = "coverage-5.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81"},
+    {file = "coverage-5.5-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6"},
+    {file = "coverage-5.5-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0"},
+    {file = "coverage-5.5-cp310-cp310-win_amd64.whl", hash = "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae"},
+    {file = "coverage-5.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb"},
+    {file = "coverage-5.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160"},
+    {file = "coverage-5.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"},
+    {file = "coverage-5.5-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701"},
+    {file = "coverage-5.5-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793"},
+    {file = "coverage-5.5-cp35-cp35m-win32.whl", hash = "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e"},
+    {file = "coverage-5.5-cp35-cp35m-win_amd64.whl", hash = "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3"},
+    {file = "coverage-5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066"},
+    {file = "coverage-5.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a"},
+    {file = "coverage-5.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465"},
+    {file = "coverage-5.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb"},
+    {file = "coverage-5.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821"},
+    {file = "coverage-5.5-cp36-cp36m-win32.whl", hash = "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45"},
+    {file = "coverage-5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184"},
+    {file = "coverage-5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a"},
+    {file = "coverage-5.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53"},
+    {file = "coverage-5.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d"},
+    {file = "coverage-5.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638"},
+    {file = "coverage-5.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3"},
+    {file = "coverage-5.5-cp37-cp37m-win32.whl", hash = "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a"},
+    {file = "coverage-5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a"},
+    {file = "coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6"},
+    {file = "coverage-5.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2"},
+    {file = "coverage-5.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759"},
+    {file = "coverage-5.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873"},
+    {file = "coverage-5.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a"},
+    {file = "coverage-5.5-cp38-cp38-win32.whl", hash = "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6"},
+    {file = "coverage-5.5-cp38-cp38-win_amd64.whl", hash = "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502"},
+    {file = "coverage-5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b"},
+    {file = "coverage-5.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529"},
+    {file = "coverage-5.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b"},
+    {file = "coverage-5.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff"},
+    {file = "coverage-5.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b"},
+    {file = "coverage-5.5-cp39-cp39-win32.whl", hash = "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6"},
+    {file = "coverage-5.5-cp39-cp39-win_amd64.whl", hash = "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03"},
+    {file = "coverage-5.5-pp36-none-any.whl", hash = "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079"},
+    {file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"},
+    {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"},
+]
+crashtest = [
+    {file = "crashtest-0.3.1-py3-none-any.whl", hash = "sha256:300f4b0825f57688b47b6d70c6a31de33512eb2fa1ac614f780939aa0cf91680"},
+    {file = "crashtest-0.3.1.tar.gz", hash = "sha256:42ca7b6ce88b6c7433e2ce47ea884e91ec93104a4b754998be498a8e6c3d37dd"},
+]
+cryptography = [
+    {file = "cryptography-3.2.1-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:6dc59630ecce8c1f558277ceb212c751d6730bd12c80ea96b4ac65637c4f55e7"},
+    {file = "cryptography-3.2.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:75e8e6684cf0034f6bf2a97095cb95f81537b12b36a8fedf06e73050bb171c2d"},
+    {file = "cryptography-3.2.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4e7268a0ca14536fecfdf2b00297d4e407da904718658c1ff1961c713f90fd33"},
+    {file = "cryptography-3.2.1-cp27-cp27m-win32.whl", hash = "sha256:7117319b44ed1842c617d0a452383a5a052ec6aa726dfbaffa8b94c910444297"},
+    {file = "cryptography-3.2.1-cp27-cp27m-win_amd64.whl", hash = "sha256:a733671100cd26d816eed39507e585c156e4498293a907029969234e5e634bc4"},
+    {file = "cryptography-3.2.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:a75f306a16d9f9afebfbedc41c8c2351d8e61e818ba6b4c40815e2b5740bb6b8"},
+    {file = "cryptography-3.2.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:5849d59358547bf789ee7e0d7a9036b2d29e9a4ddf1ce5e06bb45634f995c53e"},
+    {file = "cryptography-3.2.1-cp35-abi3-macosx_10_10_x86_64.whl", hash = "sha256:bd717aa029217b8ef94a7d21632a3bb5a4e7218a4513d2521c2a2fd63011e98b"},
+    {file = "cryptography-3.2.1-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:efe15aca4f64f3a7ea0c09c87826490e50ed166ce67368a68f315ea0807a20df"},
+    {file = "cryptography-3.2.1-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:32434673d8505b42c0de4de86da8c1620651abd24afe91ae0335597683ed1b77"},
+    {file = "cryptography-3.2.1-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:7b8d9d8d3a9bd240f453342981f765346c87ade811519f98664519696f8e6ab7"},
+    {file = "cryptography-3.2.1-cp35-cp35m-win32.whl", hash = "sha256:d3545829ab42a66b84a9aaabf216a4dce7f16dbc76eb69be5c302ed6b8f4a29b"},
+    {file = "cryptography-3.2.1-cp35-cp35m-win_amd64.whl", hash = "sha256:a4e27ed0b2504195f855b52052eadcc9795c59909c9d84314c5408687f933fc7"},
+    {file = "cryptography-3.2.1-cp36-abi3-win32.whl", hash = "sha256:13b88a0bd044b4eae1ef40e265d006e34dbcde0c2f1e15eb9896501b2d8f6c6f"},
+    {file = "cryptography-3.2.1-cp36-abi3-win_amd64.whl", hash = "sha256:07ca431b788249af92764e3be9a488aa1d39a0bc3be313d826bbec690417e538"},
+    {file = "cryptography-3.2.1-cp36-cp36m-win32.whl", hash = "sha256:a035a10686532b0587d58a606004aa20ad895c60c4d029afa245802347fab57b"},
+    {file = "cryptography-3.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:d26a2557d8f9122f9bf445fc7034242f4375bd4e95ecda007667540270965b13"},
+    {file = "cryptography-3.2.1-cp37-cp37m-win32.whl", hash = "sha256:545a8550782dda68f8cdc75a6e3bf252017aa8f75f19f5a9ca940772fc0cb56e"},
+    {file = "cryptography-3.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:55d0b896631412b6f0c7de56e12eb3e261ac347fbaa5d5e705291a9016e5f8cb"},
+    {file = "cryptography-3.2.1-cp38-cp38-win32.whl", hash = "sha256:3cd75a683b15576cfc822c7c5742b3276e50b21a06672dc3a800a2d5da4ecd1b"},
+    {file = "cryptography-3.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:d25cecbac20713a7c3bc544372d42d8eafa89799f492a43b79e1dfd650484851"},
+    {file = "cryptography-3.2.1.tar.gz", hash = "sha256:d3d5e10be0cf2a12214ddee45c6bd203dab435e3d83b4560c03066eda600bfe3"},
+    {file = "cryptography-3.3.2-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:541dd758ad49b45920dda3b5b48c968f8b2533d8981bcdb43002798d8f7a89ed"},
+    {file = "cryptography-3.3.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:49570438e60f19243e7e0d504527dd5fe9b4b967b5a1ff21cc12b57602dd85d3"},
+    {file = "cryptography-3.3.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a9a4ac9648d39ce71c2f63fe7dc6db144b9fa567ddfc48b9fde1b54483d26042"},
+    {file = "cryptography-3.3.2-cp27-cp27m-win32.whl", hash = "sha256:aa4969f24d536ae2268c902b2c3d62ab464b5a66bcb247630d208a79a8098e9b"},
+    {file = "cryptography-3.3.2-cp27-cp27m-win_amd64.whl", hash = "sha256:1bd0ccb0a1ed775cd7e2144fe46df9dc03eefd722bbcf587b3e0616ea4a81eff"},
+    {file = "cryptography-3.3.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e18e6ab84dfb0ab997faf8cca25a86ff15dfea4027b986322026cc99e0a892da"},
+    {file = "cryptography-3.3.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:c7390f9b2119b2b43160abb34f63277a638504ef8df99f11cb52c1fda66a2e6f"},
+    {file = "cryptography-3.3.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:0d7b69674b738068fa6ffade5c962ecd14969690585aaca0a1b1fc9058938a72"},
+    {file = "cryptography-3.3.2-cp36-abi3-manylinux1_x86_64.whl", hash = "sha256:922f9602d67c15ade470c11d616f2b2364950602e370c76f0c94c94ae672742e"},
+    {file = "cryptography-3.3.2-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:a0f0b96c572fc9f25c3f4ddbf4688b9b38c69836713fb255f4a2715d93cbaf44"},
+    {file = "cryptography-3.3.2-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:a777c096a49d80f9d2979695b835b0f9c9edab73b59e4ceb51f19724dda887ed"},
+    {file = "cryptography-3.3.2-cp36-abi3-win32.whl", hash = "sha256:3c284fc1e504e88e51c428db9c9274f2da9f73fdf5d7e13a36b8ecb039af6e6c"},
+    {file = "cryptography-3.3.2-cp36-abi3-win_amd64.whl", hash = "sha256:7951a966613c4211b6612b0352f5bf29989955ee592c4a885d8c7d0f830d0433"},
+    {file = "cryptography-3.3.2.tar.gz", hash = "sha256:5a60d3780149e13b7a6ff7ad6526b38846354d11a15e21068e57073e29e19bed"},
+    {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"},
+    {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31"},
+    {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74d6c7e80609c0f4c2434b97b80c7f8fdfaa072ca4baab7e239a15d6d70ed73a"},
+    {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:6c0c021f35b421ebf5976abf2daacc47e235f8b6082d3396a2fe3ccd537ab173"},
+    {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59a9d55027a8b88fd9fd2826c4392bd487d74bf628bb9d39beecc62a644c12"},
+    {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a817b961b46894c5ca8a66b599c745b9a3d9f822725221f0e0fe49dc043a3a3"},
+    {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:94ae132f0e40fe48f310bba63f477f14a43116f05ddb69d6fa31e93f05848ae2"},
+    {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7be0eec337359c155df191d6ae00a5e8bbb63933883f4f5dffc439dac5348c3f"},
+    {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e0344c14c9cb89e76eb6a060e67980c9e35b3f36691e15e1b7a9e58a0a6c6dc3"},
+    {file = "cryptography-36.0.1-cp36-abi3-win32.whl", hash = "sha256:4caa4b893d8fad33cf1964d3e51842cd78ba87401ab1d2e44556826df849a8ca"},
+    {file = "cryptography-36.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:391432971a66cfaf94b21c24ab465a4cc3e8bf4a939c1ca5c3e3a6e0abebdbcf"},
+    {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb5829d027ff82aa872d76158919045a7c1e91fbf241aec32cb07956e9ebd3c9"},
+    {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc15b1c22e55c4d5566e3ca4db8689470a0ca2babef8e3a9ee057a8b82ce4b1"},
+    {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:596f3cd67e1b950bc372c33f1a28a0692080625592ea6392987dba7f09f17a94"},
+    {file = "cryptography-36.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:30ee1eb3ebe1644d1c3f183d115a8c04e4e603ed6ce8e394ed39eea4a98469ac"},
+    {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec63da4e7e4a5f924b90af42eddf20b698a70e58d86a72d943857c4c6045b3ee"},
+    {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca238ceb7ba0bdf6ce88c1b74a87bffcee5afbfa1e41e173b1ceb095b39add46"},
+    {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:ca28641954f767f9822c24e927ad894d45d5a1e501767599647259cbf030b903"},
+    {file = "cryptography-36.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:39bdf8e70eee6b1c7b289ec6e5d84d49a6bfa11f8b8646b5b3dfe41219153316"},
+    {file = "cryptography-36.0.1.tar.gz", hash = "sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638"},
+]
+distlib = [
+    {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"},
+    {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"},
+]
+entrypoints = [
+    {file = "entrypoints-0.3-py2.py3-none-any.whl", hash = "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19"},
+    {file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"},
+]
+enum34 = [
+    {file = "enum34-1.1.10-py2-none-any.whl", hash = "sha256:a98a201d6de3f2ab3db284e70a33b0f896fbf35f8086594e8c9e74b909058d53"},
+    {file = "enum34-1.1.10-py3-none-any.whl", hash = "sha256:c3858660960c984d6ab0ebad691265180da2b43f07e061c0f8dca9ef3cffd328"},
+    {file = "enum34-1.1.10.tar.gz", hash = "sha256:cce6a7477ed816bd2542d03d53db9f0db935dd013b70f336a95c73979289f248"},
+]
+filelock = [
+    {file = "filelock-3.2.1-py2.py3-none-any.whl", hash = "sha256:7f07b08d731907441ff40d0c5b81f9512cd968842e0b6264c8bd18a8ce877760"},
+    {file = "filelock-3.2.1.tar.gz", hash = "sha256:9cdd29c411ab196cf4c35a1da684f7b9da723696cb356efa45bf5eb1ff313ee3"},
+]
+funcsigs = [
+    {file = "funcsigs-1.0.2-py2.py3-none-any.whl", hash = "sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca"},
+    {file = "funcsigs-1.0.2.tar.gz", hash = "sha256:a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50"},
+]
+functools32 = [
+    {file = "functools32-3.2.3-2.tar.gz", hash = "sha256:f6253dfbe0538ad2e387bd8fdfd9293c925d63553f5813c4e587745416501e6d"},
+    {file = "functools32-3.2.3-2.zip", hash = "sha256:89d824aa6c358c421a234d7f9ee0bd75933a67c29588ce50aaa3acdf4d403fa0"},
+]
+futures = [
+    {file = "futures-3.3.0-py2-none-any.whl", hash = "sha256:49b3f5b064b6e3afc3316421a3f25f66c137ae88f068abbf72830170033c5e16"},
+    {file = "futures-3.3.0.tar.gz", hash = "sha256:7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794"},
+]
+glob2 = [
+    {file = "glob2-0.6.tar.gz", hash = "sha256:f5b0a686ff21f820c4d3f0c4edd216704cea59d79d00fa337e244a2f2ff83ed6"},
+]
+html5lib = [
+    {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"},
+    {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"},
+]
+httpretty = [
+    {file = "httpretty-0.9.7.tar.gz", hash = "sha256:66216f26b9d2c52e81808f3e674a6fb65d4bf719721394a1a9be926177e55fbe"},
+]
+identify = [
+    {file = "identify-2.4.0-py2.py3-none-any.whl", hash = "sha256:eba31ca80258de6bb51453084bff4a923187cd2193b9c13710f2516ab30732cc"},
+    {file = "identify-2.4.0.tar.gz", hash = "sha256:a33ae873287e81651c7800ca309dc1f84679b763c9c8b30680e16fbfa82f0107"},
+]
+idna = [
+    {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"},
+    {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"},
+]
+importlib-metadata = [
+    {file = "importlib_metadata-1.7.0-py2.py3-none-any.whl", hash = "sha256:dc15b2969b4ce36305c51eebe62d418ac7791e9a157911d58bfb1f9ccd8e2070"},
+    {file = "importlib_metadata-1.7.0.tar.gz", hash = "sha256:90bb658cdbbf6d1735b6341ce708fc7024a3e14e99ffdc5783edea9f9b077f83"},
+]
+importlib-resources = [
+    {file = "importlib_resources-3.2.1-py2.py3-none-any.whl", hash = "sha256:e2860cf0c4bc999947228d18be154fa3779c5dde0b882bd2d7b3f4d25e698bd6"},
+    {file = "importlib_resources-3.2.1.tar.gz", hash = "sha256:a9fe213ab6452708ec1b3f4ec6f2881b8ab3645cb4e5efb7fea2bbf05a91db3b"},
+]
+ipaddress = [
+    {file = "ipaddress-1.0.23-py2.py3-none-any.whl", hash = "sha256:6e0f4a39e66cb5bb9a137b00276a2eff74f93b71dcbdad6f10ff7df9d3557fcc"},
+    {file = "ipaddress-1.0.23.tar.gz", hash = "sha256:b7f8e0369580bb4a24d5ba1d7cc29660a4a6987763faf1d8a8046830e020e7e2"},
+]
+jeepney = [
+    {file = "jeepney-0.4.3-py3-none-any.whl", hash = "sha256:d6c6b49683446d2407d2fe3acb7a368a77ff063f9182fe427da15d622adc24cf"},
+    {file = "jeepney-0.4.3.tar.gz", hash = "sha256:3479b861cc2b6407de5188695fa1a8d57e5072d7059322469b62628869b8e36e"},
+    {file = "jeepney-0.7.1-py3-none-any.whl", hash = "sha256:1b5a0ea5c0e7b166b2f5895b91a08c14de8915afda4407fb5022a195224958ac"},
+    {file = "jeepney-0.7.1.tar.gz", hash = "sha256:fa9e232dfa0c498bd0b8a3a73b8d8a31978304dcef0515adc859d4e096f96f4f"},
+]
+keyring = [
+    {file = "keyring-18.0.1-py2.py3-none-any.whl", hash = "sha256:7b29ebfcf8678c4da531b2478a912eea01e80007e5ddca9ee0c7038cb3489ec6"},
+    {file = "keyring-18.0.1.tar.gz", hash = "sha256:67d6cc0132bd77922725fae9f18366bb314fd8f95ff4d323a4df41890a96a838"},
+    {file = "keyring-20.0.1-py2.py3-none-any.whl", hash = "sha256:c674f032424b4bffc62abeac5523ec49cc84aed07a480c3233e0baf618efc15c"},
+    {file = "keyring-20.0.1.tar.gz", hash = "sha256:963bfa7f090269d30bdc5e25589e5fd9dad2cf2a7c6f176a7f2386910e5d0d8d"},
+    {file = "keyring-21.8.0-py3-none-any.whl", hash = "sha256:4be9cbaaaf83e61d6399f733d113ede7d1c73bc75cb6aeb64eee0f6ac39b30ea"},
+    {file = "keyring-21.8.0.tar.gz", hash = "sha256:1746d3ac913d449a090caf11e9e4af00e26c3f7f7e81027872192b2398b98675"},
+]
+lockfile = [
+    {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"},
+    {file = "lockfile-0.12.2.tar.gz", hash = "sha256:6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"},
+]
+mock = [
+    {file = "mock-3.0.5-py2.py3-none-any.whl", hash = "sha256:d157e52d4e5b938c550f39eb2fd15610db062441a9c2747d3dbfa9298211d0f8"},
+    {file = "mock-3.0.5.tar.gz", hash = "sha256:83657d894c90d5681d62155c82bda9c1187827525880eda8ff5df4ec813437c3"},
+]
+more-itertools = [
+    {file = "more-itertools-5.0.0.tar.gz", hash = "sha256:38a936c0a6d98a38bcc2d03fdaaedaba9f412879461dd2ceff8d37564d6522e4"},
+    {file = "more_itertools-5.0.0-py2-none-any.whl", hash = "sha256:c0a5785b1109a6bd7fac76d6837fd1feca158e54e521ccd2ae8bfe393cc9d4fc"},
+    {file = "more_itertools-5.0.0-py3-none-any.whl", hash = "sha256:fe7a7cae1ccb57d33952113ff4fa1bc5f879963600ed74918f1236e212ee50b9"},
+    {file = "more-itertools-7.2.0.tar.gz", hash = "sha256:409cd48d4db7052af495b09dec721011634af3753ae1ef92d2b32f73a745f832"},
+    {file = "more_itertools-7.2.0-py3-none-any.whl", hash = "sha256:92b8c4b06dac4f0611c0729b2f2ede52b2e1bac1ab48f089c7ddc12e26bb60c4"},
+    {file = "more-itertools-8.12.0.tar.gz", hash = "sha256:7dc6ad46f05f545f900dd59e8dfb4e84a4827b97b3cfecb175ea0c7d247f6064"},
+    {file = "more_itertools-8.12.0-py3-none-any.whl", hash = "sha256:43e6dd9942dffd72661a2c4ef383ad7da1e6a3e968a927ad7a6083ab410a688b"},
+]
+msgpack = [
+    {file = "msgpack-1.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:96acc674bb9c9be63fa8b6dabc3248fdc575c4adc005c440ad02f87ca7edd079"},
+    {file = "msgpack-1.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2c3ca57c96c8e69c1a0d2926a6acf2d9a522b41dc4253a8945c4c6cd4981a4e3"},
+    {file = "msgpack-1.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0a792c091bac433dfe0a70ac17fc2087d4595ab835b47b89defc8bbabcf5c73"},
+    {file = "msgpack-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c58cdec1cb5fcea8c2f1771d7b5fec79307d056874f746690bd2bdd609ab147"},
+    {file = "msgpack-1.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f97c0f35b3b096a330bb4a1a9247d0bd7e1f3a2eba7ab69795501504b1c2c39"},
+    {file = "msgpack-1.0.3-cp310-cp310-win32.whl", hash = "sha256:36a64a10b16c2ab31dcd5f32d9787ed41fe68ab23dd66957ca2826c7f10d0b85"},
+    {file = "msgpack-1.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c1ba333b4024c17c7591f0f372e2daa3c31db495a9b2af3cf664aef3c14354f7"},
+    {file = "msgpack-1.0.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c2140cf7a3ec475ef0938edb6eb363fa704159e0bf71dde15d953bacc1cf9d7d"},
+    {file = "msgpack-1.0.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f4c22717c74d44bcd7af353024ce71c6b55346dad5e2cc1ddc17ce8c4507c6b"},
+    {file = "msgpack-1.0.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d733a15ade190540c703de209ffbc42a3367600421b62ac0c09fde594da6ec"},
+    {file = "msgpack-1.0.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7e03b06f2982aa98d4ddd082a210c3db200471da523f9ac197f2828e80e7770"},
+    {file = "msgpack-1.0.3-cp36-cp36m-win32.whl", hash = "sha256:3d875631ecab42f65f9dce6f55ce6d736696ced240f2634633188de2f5f21af9"},
+    {file = "msgpack-1.0.3-cp36-cp36m-win_amd64.whl", hash = "sha256:40fb89b4625d12d6027a19f4df18a4de5c64f6f3314325049f219683e07e678a"},
+    {file = "msgpack-1.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6eef0cf8db3857b2b556213d97dd82de76e28a6524853a9beb3264983391dc1a"},
+    {file = "msgpack-1.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d8c332f53ffff01953ad25131272506500b14750c1d0ce8614b17d098252fbc"},
+    {file = "msgpack-1.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c0903bd93cbd34653dd63bbfcb99d7539c372795201f39d16fdfde4418de43a"},
+    {file = "msgpack-1.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bf1e6bfed4860d72106f4e0a1ab519546982b45689937b40257cfd820650b920"},
+    {file = "msgpack-1.0.3-cp37-cp37m-win32.whl", hash = "sha256:d02cea2252abc3756b2ac31f781f7a98e89ff9759b2e7450a1c7a0d13302ff50"},
+    {file = "msgpack-1.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2f30dd0dc4dfe6231ad253b6f9f7128ac3202ae49edd3f10d311adc358772dba"},
+    {file = "msgpack-1.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f201d34dc89342fabb2a10ed7c9a9aaaed9b7af0f16a5923f1ae562b31258dea"},
+    {file = "msgpack-1.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bb87f23ae7d14b7b3c21009c4b1705ec107cb21ee71975992f6aca571fb4a42a"},
+    {file = "msgpack-1.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a3a5c4b16e9d0edb823fe54b59b5660cc8d4782d7bf2c214cb4b91a1940a8ef"},
+    {file = "msgpack-1.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74da1e5fcf20ade12c6bf1baa17a2dc3604958922de8dc83cbe3eff22e8b611"},
+    {file = "msgpack-1.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:73a80bd6eb6bcb338c1ec0da273f87420829c266379c8c82fa14c23fb586cfa1"},
+    {file = "msgpack-1.0.3-cp38-cp38-win32.whl", hash = "sha256:9fce00156e79af37bb6db4e7587b30d11e7ac6a02cb5bac387f023808cd7d7f4"},
+    {file = "msgpack-1.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:9b6f2d714c506e79cbead331de9aae6837c8dd36190d02da74cb409b36162e8a"},
+    {file = "msgpack-1.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:89908aea5f46ee1474cc37fbc146677f8529ac99201bc2faf4ef8edc023c2bf3"},
+    {file = "msgpack-1.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:973ad69fd7e31159eae8f580f3f707b718b61141838321c6fa4d891c4a2cca52"},
+    {file = "msgpack-1.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da24375ab4c50e5b7486c115a3198d207954fe10aaa5708f7b65105df09109b2"},
+    {file = "msgpack-1.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a598d0685e4ae07a0672b59792d2cc767d09d7a7f39fd9bd37ff84e060b1a996"},
+    {file = "msgpack-1.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4c309a68cb5d6bbd0c50d5c71a25ae81f268c2dc675c6f4ea8ab2feec2ac4e2"},
+    {file = "msgpack-1.0.3-cp39-cp39-win32.whl", hash = "sha256:494471d65b25a8751d19c83f1a482fd411d7ca7a3b9e17d25980a74075ba0e88"},
+    {file = "msgpack-1.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:f01b26c2290cbd74316990ba84a14ac3d599af9cebefc543d241a66e785cf17d"},
+    {file = "msgpack-1.0.3.tar.gz", hash = "sha256:51fdc7fb93615286428ee7758cecc2f374d5ff363bdd884c7ea622a7a327a81e"},
+]
+nodeenv = [
+    {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"},
+    {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"},
+]
+packaging = [
+    {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"},
+    {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"},
+]
+pastel = [
+    {file = "pastel-0.2.1-py2.py3-none-any.whl", hash = "sha256:4349225fcdf6c2bb34d483e523475de5bb04a5c10ef711263452cb37d7dd4364"},
+    {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"},
+]
+pathlib2 = [
+    {file = "pathlib2-2.3.6-py2.py3-none-any.whl", hash = "sha256:3a130b266b3a36134dcc79c17b3c7ac9634f083825ca6ea9d8f557ee6195c9c8"},
+    {file = "pathlib2-2.3.6.tar.gz", hash = "sha256:7d8bcb5555003cdf4a8d2872c538faa3a0f5d20630cb360e518ca3b981795e5f"},
+]
+pexpect = [
+    {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"},
+    {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"},
+]
+pkginfo = [
+    {file = "pkginfo-1.8.2-py2.py3-none-any.whl", hash = "sha256:c24c487c6a7f72c66e816ab1796b96ac6c3d14d49338293d2141664330b55ffc"},
+    {file = "pkginfo-1.8.2.tar.gz", hash = "sha256:542e0d0b6750e2e21c20179803e40ab50598d8066d51097a0e382cba9eb02bff"},
+]
+platformdirs = [
+    {file = "platformdirs-2.0.2-py2.py3-none-any.whl", hash = "sha256:0b9547541f599d3d242078ae60b927b3e453f0ad52f58b4d4bc3be86aed3ec41"},
+    {file = "platformdirs-2.0.2.tar.gz", hash = "sha256:3b00d081227d9037bbbca521a5787796b5ef5000faea1e43fd76f1d44b06fcfa"},
+]
+pluggy = [
+    {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
+    {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+]
+poetry-core = [
+    {file = "poetry-core-1.0.7.tar.gz", hash = "sha256:98c11c755a16ef6c5673c22ca94a3802a7df4746a0853a70b6fae8b9f5cac206"},
+    {file = "poetry_core-1.0.7-py2.py3-none-any.whl", hash = "sha256:4f8a7f5390d772f42c4c4c3f188e6424b802cb4b57466c6633a1b9ac36f18a43"},
+]
+pre-commit = [
+    {file = "pre_commit-2.16.0-py2.py3-none-any.whl", hash = "sha256:758d1dc9b62c2ed8881585c254976d66eae0889919ab9b859064fc2fe3c7743e"},
+    {file = "pre_commit-2.16.0.tar.gz", hash = "sha256:fe9897cac830aa7164dbd02a4e7b90cae49630451ce88464bca73db486ba9f65"},
+]
+ptyprocess = [
+    {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"},
+    {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"},
+]
+py = [
+    {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+    {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
+]
+pycparser = [
+    {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+    {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
+]
+pylev = [
+    {file = "pylev-1.4.0-py2.py3-none-any.whl", hash = "sha256:7b2e2aa7b00e05bb3f7650eb506fc89f474f70493271a35c242d9a92188ad3dd"},
+    {file = "pylev-1.4.0.tar.gz", hash = "sha256:9e77e941042ad3a4cc305dcdf2b2dec1aec2fbe3dd9015d2698ad02b173006d1"},
+]
+pyparsing = [
+    {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
+    {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+]
+pytest = [
+    {file = "pytest-4.6.11-py2.py3-none-any.whl", hash = "sha256:a00a7d79cbbdfa9d21e7d0298392a8dd4123316bfac545075e6f8f24c94d8c97"},
+    {file = "pytest-4.6.11.tar.gz", hash = "sha256:50fa82392f2120cc3ec2ca0a75ee615be4c479e66669789771f1758332be4353"},
+    {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"},
+    {file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"},
+]
+pytest-cov = [
+    {file = "pytest-cov-2.12.1.tar.gz", hash = "sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7"},
+    {file = "pytest_cov-2.12.1-py2.py3-none-any.whl", hash = "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a"},
+]
+pytest-mock = [
+    {file = "pytest-mock-1.13.0.tar.gz", hash = "sha256:e24a911ec96773022ebcc7030059b57cd3480b56d4f5d19b7c370ec635e6aed5"},
+    {file = "pytest_mock-1.13.0-py2.py3-none-any.whl", hash = "sha256:67e414b3caef7bff6fc6bd83b22b5bc39147e4493f483c2679bc9d4dc485a94d"},
+]
+pytest-sugar = [
+    {file = "pytest-sugar-0.9.4.tar.gz", hash = "sha256:b1b2186b0a72aada6859bea2a5764145e3aaa2c1cfbb23c3a19b5f7b697563d3"},
+]
+pywin32-ctypes = [
+    {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
+    {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"},
+]
+pyyaml = [
+    {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+    {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+    {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+    {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+    {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+    {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+    {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+    {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+    {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+    {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+    {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+    {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+    {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+    {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+    {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+    {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+    {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+    {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
+]
+requests = [
+    {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"},
+    {file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"},
+]
+requests-toolbelt = [
+    {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"},
+    {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"},
+]
+scandir = [
+    {file = "scandir-1.10.0-cp27-cp27m-win32.whl", hash = "sha256:92c85ac42f41ffdc35b6da57ed991575bdbe69db895507af88b9f499b701c188"},
+    {file = "scandir-1.10.0-cp27-cp27m-win_amd64.whl", hash = "sha256:cb925555f43060a1745d0a321cca94bcea927c50114b623d73179189a4e100ac"},
+    {file = "scandir-1.10.0-cp34-cp34m-win32.whl", hash = "sha256:2c712840c2e2ee8dfaf36034080108d30060d759c7b73a01a52251cc8989f11f"},
+    {file = "scandir-1.10.0-cp34-cp34m-win_amd64.whl", hash = "sha256:2586c94e907d99617887daed6c1d102b5ca28f1085f90446554abf1faf73123e"},
+    {file = "scandir-1.10.0-cp35-cp35m-win32.whl", hash = "sha256:2b8e3888b11abb2217a32af0766bc06b65cc4a928d8727828ee68af5a967fa6f"},
+    {file = "scandir-1.10.0-cp35-cp35m-win_amd64.whl", hash = "sha256:8c5922863e44ffc00c5c693190648daa6d15e7c1207ed02d6f46a8dcc2869d32"},
+    {file = "scandir-1.10.0-cp36-cp36m-win32.whl", hash = "sha256:2ae41f43797ca0c11591c0c35f2f5875fa99f8797cb1a1fd440497ec0ae4b022"},
+    {file = "scandir-1.10.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7d2d7a06a252764061a020407b997dd036f7bd6a175a5ba2b345f0a357f0b3f4"},
+    {file = "scandir-1.10.0-cp37-cp37m-win32.whl", hash = "sha256:67f15b6f83e6507fdc6fca22fedf6ef8b334b399ca27c6b568cbfaa82a364173"},
+    {file = "scandir-1.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b24086f2375c4a094a6b51e78b4cf7ca16c721dcee2eddd7aa6494b42d6d519d"},
+    {file = "scandir-1.10.0.tar.gz", hash = "sha256:4d4631f6062e658e9007ab3149a9b914f3548cb38bfb021c64f39a025ce578ae"},
+]
+secretstorage = [
+    {file = "SecretStorage-2.3.1.tar.gz", hash = "sha256:3af65c87765323e6f64c83575b05393f9e003431959c9395d1791d51497f29b6"},
+    {file = "SecretStorage-3.2.0-py3-none-any.whl", hash = "sha256:ed5279d788af258e4676fa26b6efb6d335a31f1f9f529b6f1e200f388fac33e1"},
+    {file = "SecretStorage-3.2.0.tar.gz", hash = "sha256:46305c3847ee3f7252b284e0eee5590fa6341c891104a2fd2313f8798c615a82"},
+    {file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"},
+    {file = "SecretStorage-3.3.1.tar.gz", hash = "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195"},
+]
+shellingham = [
+    {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"},
+    {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"},
+]
+singledispatch = [
+    {file = "singledispatch-3.7.0-py2.py3-none-any.whl", hash = "sha256:bc77afa97c8a22596d6d4fc20f1b7bdd2b86edc2a65a4262bdd7cc3cc19aa989"},
+    {file = "singledispatch-3.7.0.tar.gz", hash = "sha256:c1a4d5c1da310c3fd8fccfb8d4e1cb7df076148fd5d858a819e37fffe44f3092"},
+]
+six = [
+    {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+    {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+]
+subprocess32 = [
+    {file = "subprocess32-3.5.4-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:88e37c1aac5388df41cc8a8456bb49ebffd321a3ad4d70358e3518176de3a56b"},
+    {file = "subprocess32-3.5.4-cp27-cp27mu-manylinux2014_x86_64.whl", hash = "sha256:e45d985aef903c5b7444d34350b05da91a9e0ea015415ab45a21212786c649d0"},
+    {file = "subprocess32-3.5.4.tar.gz", hash = "sha256:eb2937c80497978d181efa1b839ec2d9622cf9600a039a79d0e108d1f9aec79d"},
+]
+termcolor = [
+    {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"},
+]
+toml = [
+    {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
+    {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
+]
+tomlkit = [
+    {file = "tomlkit-0.7.2-py2.py3-none-any.whl", hash = "sha256:173ad840fa5d2aac140528ca1933c29791b79a374a0861a80347f42ec9328117"},
+    {file = "tomlkit-0.7.2.tar.gz", hash = "sha256:d7a454f319a7e9bd2e249f239168729327e4dd2d27b17dc68be264ad1ce36754"},
+]
+tox = [
+    {file = "tox-3.24.4-py2.py3-none-any.whl", hash = "sha256:5e274227a53dc9ef856767c21867377ba395992549f02ce55eb549f9fb9a8d10"},
+    {file = "tox-3.24.4.tar.gz", hash = "sha256:c30b57fa2477f1fb7c36aa1d83292d5c2336cd0018119e1b1c17340e2c2708ca"},
+]
+typing = [
+    {file = "typing-3.10.0.0-py2-none-any.whl", hash = "sha256:c7219ef20c5fbf413b4567092adfc46fa6203cb8454eda33c3fc1afe1398a308"},
+    {file = "typing-3.10.0.0-py3-none-any.whl", hash = "sha256:12fbdfbe7d6cca1a42e485229afcb0b0c8259258cfb919b8a5e2a5c953742f89"},
+    {file = "typing-3.10.0.0.tar.gz", hash = "sha256:13b4ad211f54ddbf93e5901a9967b1e07720c1d1b78d596ac6a439641aa1b130"},
+]
+typing-extensions = [
+    {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+    {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+    {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+]
+urllib3 = [
+    {file = "urllib3-1.25.11-py2.py3-none-any.whl", hash = "sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e"},
+    {file = "urllib3-1.25.11.tar.gz", hash = "sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2"},
+]
+virtualenv = [
+    {file = "virtualenv-20.10.0-py2.py3-none-any.whl", hash = "sha256:4b02e52a624336eece99c96e3ab7111f469c24ba226a53ec474e8e787b365814"},
+    {file = "virtualenv-20.10.0.tar.gz", hash = "sha256:576d05b46eace16a9c348085f7d0dc8ef28713a2cabaa1cf0aea41e8f12c9218"},
+]
+wcwidth = [
+    {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
+    {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"},
+]
+webencodings = [
+    {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
+    {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
+]
+zipp = [
+    {file = "zipp-1.2.0-py2.py3-none-any.whl", hash = "sha256:e0d9e63797e483a30d27e09fffd308c59a700d365ec34e93cc100844168bf921"},
+    {file = "zipp-1.2.0.tar.gz", hash = "sha256:c70410551488251b0fee67b460fb9a536af8d6f9f008ad10ac51f615b6a521b1"},
+]
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/pyproject.toml b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/pyproject.toml
new file mode 100644
index 000000000000..5cf34372b050
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/pyproject.toml
@@ -0,0 +1,122 @@
+[tool.poetry]
+name = "poetry"
+version = "1.1.12"
+description = "Python dependency management and packaging made easy."
+authors = [
+    "Sébastien Eustace <sebastien@eustace.io>"
+]
+license = "MIT"
+
+readme = "README.md"
+
+homepage = "https://python-poetry.org/"
+repository = "https://github.com/python-poetry/poetry"
+documentation = "https://python-poetry.org/docs"
+
+keywords = ["packaging", "dependency", "poetry"]
+
+classifiers = [
+    "Topic :: Software Development :: Build Tools",
+    "Topic :: Software Development :: Libraries :: Python Modules"
+]
+
+# Requirements
+[tool.poetry.dependencies]
+python = "~2.7 || ^3.5"
+
+poetry-core = "~1.0.7"
+cleo = "^0.8.1"
+clikit = "^0.6.2"
+crashtest = { version = "^0.3.0", python = "^3.6" }
+requests = "^2.18"
+cachy = "^0.3.0"
+requests-toolbelt = "^0.9.1"
+cachecontrol = [
+    { version = "^0.12.4", extras = ["filecache"], python = "<3.6" },
+    { version = "^0.12.9", extras = ["filecache"], python = "^3.6" }
+]
+pkginfo = "^1.4"
+html5lib = "^1.0"
+shellingham = "^1.1"
+tomlkit = ">=0.7.0,<1.0.0"
+pexpect = "^4.7.0"
+packaging = "^20.4"
+virtualenv = { version = "^20.0.26" }
+
+# The typing module is not in the stdlib in Python 2.7
+typing = { version = "^3.6", python = "~2.7" }
+
+# Use pathlib2 for Python 2.7
+pathlib2 = { version = "^2.3", python = "~2.7" }
+# Use futures on Python 2.7
+futures = { version = "^3.3.0", python = "~2.7" }
+# Use glob2 for Python 2.7 and 3.4
+glob2 = { version = "^0.6", python = "~2.7" }
+# functools32 is needed for Python 2.7
+functools32 = { version = "^3.2.3", python = "~2.7" }
+keyring = [
+    { version = "^18.0.1", python = "~2.7" },
+    { version = "^20.0.1", python = "~3.5" },
+    { version = "^21.2.0", python = "^3.6" }
+]
+# Use subprocess32 for Python 2.7
+subprocess32 = { version = "^3.5", python = "~2.7" }
+importlib-metadata = {version = "^1.6.0", python = "<3.8"}
+
+[tool.poetry.dev-dependencies]
+pytest = [
+    {version = "^4.1", python = "<3.5"},
+    {version = "^5.4.3", python = ">=3.5"}
+]
+pytest-cov = "^2.5"
+pytest-mock = "^1.9"
+pre-commit = { version = "^2.6", python = "^3.6.1" }
+tox = "^3.0"
+pytest-sugar = "^0.9.2"
+httpretty = "^0.9.6"
+# We need to restrict the version of urllib3 to avoid
+# httpretty breaking. This is fixed in httpretty >= 1.0.3
+# but it's not compatible with Python 2.7 and 3.5.
+urllib3 = "~1.25.10"
+
+[tool.poetry.scripts]
+poetry = "poetry.console:main"
+
+
+[build-system]
+requires = ["poetry-core>=1.0.0"]
+build-backend = "poetry.core.masonry.api"
+
+
+[tool.isort]
+profile = "black"
+force_single_line = true
+atomic = true
+include_trailing_comma = true
+lines_after_imports = 2
+lines_between_types = 1
+use_parentheses = true
+src_paths = ["poetry", "tests"]
+skip_glob = ["*/setup.py"]
+filter_files = true
+known_first_party = "poetry"
+
+
+[tool.black]
+line-length = 88
+include = '\.pyi?$'
+exclude = '''
+/(
+    \.eggs
+  | \.git
+  | \.hg
+  | \.mypy_cache
+  | \.tox
+  | \.venv
+  | _build
+  | buck-out
+  | build
+  | dist
+  | tests/.*/setup.py
+)/
+'''
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/src.json b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/src.json
new file mode 100644
index 000000000000..aeee3abb7d42
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/src.json
@@ -0,0 +1,7 @@
+{
+    "owner": "python-poetry",
+    "repo": "poetry",
+    "rev": "020fb336e6da11d3a9909f30bd908437a69f13b3",
+    "sha256": "1fm4yj6wxr24v7b77gmf63j7xsgszhbhzw2i9fvlfi0p9l0q34pm",
+    "fetchSubmodules": true
+}
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/update b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/update
new file mode 100755
index 000000000000..95b7f5bb3318
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/pkgs/poetry/update
@@ -0,0 +1,11 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p curl nix-prefetch-github jq
+
+rev=$(curl -s https://api.github.com/repos/python-poetry/poetry/releases/latest | jq -r '.name')
+nix-prefetch-github --rev "$rev" python-poetry poetry > src.json
+echo >> src.json
+
+src=$(nix-build --no-out-link --expr 'with import <nixpkgs> {}; fetchFromGitHub (lib.importJSON ./src.json)')
+cp $src/pyproject.toml $src/poetry.lock .
+nix-shell -p poetry --run 'poetry lock'
+nix-build --expr '(import <nixpkgs> { overlays = [ (import ../../overlay.nix) ]; }).poetry'
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/plugins.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/plugins.nix
new file mode 100644
index 000000000000..b5e807c6e2d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/plugins.nix
@@ -0,0 +1,70 @@
+{ pkgs, lib }:
+let
+  inherit (pkgs) stdenv;
+
+  mkPluginDrv =
+    { self
+    , plugins
+    , drv
+    , postInstall ? ""
+    , nativeBuildInputs ? [ ]
+    , buildInputs ? [ ]
+    }:
+    let
+      env = self.python.withPackages (ps: plugins);
+    in
+    stdenv.mkDerivation {
+      pname = drv.pname + "-with-plugins";
+
+      inherit (drv) src version meta;
+
+      buildInputs = drv.buildInputs ++ drv.propagatedBuildInputs ++ buildInputs;
+      nativeBuildInputs = drv.nativeBuildInputs ++ nativeBuildInputs;
+
+      dontConfigure = true;
+      dontBuild = true;
+      dontUsePythonRecompileBytecode = true;
+
+      passthru = {
+        inherit (drv.passthru) withPlugins;
+        inherit plugins;
+      };
+
+      # Link bin/ from environment, but only if it's in a plugin
+      installPhase = ''
+        runHook preInstall
+
+        mkdir -p $out/bin
+
+        for bindir in ${lib.concatStringsSep " " (map (d: "${lib.getBin d}/bin") plugins)}; do
+          for bin in $bindir/*; do
+            ln -s ${env}/bin/$(basename $bin) $out/bin/
+          done
+        done
+
+        runHook postInstall
+      '';
+
+      inherit postInstall;
+    };
+
+in
+{
+
+  # Provide the `withPlugins` function
+  toPluginAble = self: { drv
+                       , finalDrv
+                       , postInstall ? ""
+                       , nativeBuildInputs ? [ ]
+                       , buildInputs ? [ ]
+                       }: drv.overridePythonAttrs (old: {
+    passthru = old.passthru // {
+      withPlugins = pluginFn: mkPluginDrv {
+        plugins = [ finalDrv ] ++ pluginFn self;
+        inherit self postInstall nativeBuildInputs buildInputs;
+        drv = finalDrv;
+      };
+    };
+  });
+
+}
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/semver.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/semver.nix
new file mode 100644
index 000000000000..0ef1d4c316ac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/semver.nix
@@ -0,0 +1,87 @@
+{ lib, ireplace }:
+let
+  inherit (builtins) elemAt match;
+  operators =
+    let
+      matchWildCard = s: match "([^*])(\\.[*])" s;
+      mkComparison = ret: version: v: builtins.compareVersions version v == ret;
+      mkIdxComparison = idx: version: v:
+        let
+          ver = builtins.splitVersion v;
+          minor = builtins.toString (lib.toInt (elemAt ver idx) + 1);
+          upper = builtins.concatStringsSep "." (ireplace idx minor ver);
+        in
+        operators.">=" version v && operators."<" version upper;
+      dropWildcardPrecision = f: version: constraint:
+        let
+          m = matchWildCard constraint;
+          hasWildcard = m != null;
+          c = if hasWildcard then (elemAt m 0) else constraint;
+          v =
+            if hasWildcard then (builtins.substring 0 (builtins.stringLength c) version)
+            else version;
+        in
+        f v c;
+    in
+    {
+      # Prefix operators
+      "==" = dropWildcardPrecision (mkComparison 0);
+      ">" = dropWildcardPrecision (mkComparison 1);
+      "<" = dropWildcardPrecision (mkComparison (-1));
+      "!=" = v: c: ! operators."==" v c;
+      ">=" = v: c: operators."==" v c || operators.">" v c;
+      "<=" = v: c: operators."==" v c || operators."<" v c;
+      # Semver specific operators
+      "~" = mkIdxComparison 1;
+      "^" = mkIdxComparison 0;
+      "~=" = v: c:
+        let
+          # Prune constraint
+          parts = builtins.splitVersion c;
+          pruned = lib.take ((builtins.length parts) - 1) parts;
+          upper = builtins.toString (
+            (lib.toInt (builtins.elemAt pruned (builtins.length pruned - 1))) + 1
+          );
+          upperConstraint = builtins.concatStringsSep "." (ireplace (builtins.length pruned - 1) upper pruned);
+        in
+        operators.">=" v c && operators."<" v upperConstraint;
+      # Infix operators
+      "-" = version: v: operators.">=" version v.vl && operators."<=" version v.vu;
+      # Arbitrary equality clause, just run simple comparison
+      "===" = v: c: v == c;
+      #
+    };
+  re = {
+    operators = "([=><!~^]+)";
+    version = "([0-9.*x]+)";
+  };
+  parseConstraint = constraint:
+    let
+      constraintStr = builtins.replaceStrings [ " " ] [ "" ] constraint;
+      # The common prefix operators
+      mPre = match "${re.operators} *${re.version}" constraintStr;
+      # There is also an infix operator to match ranges
+      mIn = match "${re.version} *(-) *${re.version}" constraintStr;
+    in
+    (
+      if mPre != null then {
+        op = elemAt mPre 0;
+        v = elemAt mPre 1;
+      }
+      # Infix operators are range matches
+      else if mIn != null then {
+        op = elemAt mIn 1;
+        v = {
+          vl = (elemAt mIn 0);
+          vu = (elemAt mIn 2);
+        };
+      }
+      else throw "Constraint \"${constraintStr}\" could not be parsed"
+    );
+  satisfiesSemver = version: constraint:
+    let
+      inherit (parseConstraint constraint) op v;
+    in
+    if constraint == "*" then true else operators."${op}" version v;
+in
+{ inherit satisfiesSemver; }
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/shell-scripts.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/shell-scripts.nix
new file mode 100644
index 000000000000..cbaa4439afe1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/shell-scripts.nix
@@ -0,0 +1,41 @@
+{ lib
+, scripts
+, python
+}:
+let
+  mkScript = bin: entrypoint:
+    let
+      elem = builtins.elemAt (builtins.split ":" entrypoint);
+      module = elem 0;
+      fn = elem 2;
+    in
+    ''
+      cat << EOF >> $out/bin/${bin}
+      #!${python.interpreter}
+      import sys
+      import re
+
+      # Insert "" to add CWD to import path
+      sys.path.insert(0, "")
+
+      from ${module} import ${fn}
+
+      if __name__ == '__main__':
+          sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', "", sys.argv[0])
+          sys.exit(${fn}())
+      EOF
+      chmod +x $out/bin/${bin}
+    '';
+in
+python.pkgs.buildPythonPackage {
+  name = "poetry2nix-env-scripts";
+  dontUnpack = true;
+  dontUseSetuptoolsBuild = true;
+  dontConfigure = true;
+  dontUseSetuptoolsCheck = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    ${lib.concatStringsSep "\n" (lib.mapAttrsToList mkScript scripts)}
+  '';
+}
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/update b/nixpkgs/pkgs/development/tools/poetry2nix/update
new file mode 100755
index 000000000000..ac8c98a33d9c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/update
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+pwd=$(pwd)
+workdir=$(mktemp -d)
+
+function cleanup {
+    cd "$pwd"
+    rm -rf $workdir
+}
+trap cleanup EXIT
+
+cd "$workdir"
+
+curl -L -s https://github.com/nix-community/poetry2nix/archive/master.tar.gz | tar -xz
+mv poetry2nix-master/* .
+
+mkdir build
+cp *.* build/
+cp -r pkgs hooks bin build/
+rm build/shell.nix build/generate.py build/overlay.nix build/flake.* build/check-fmt.nix
+
+cat > build/README.md << EOF
+Dont change these files here, they are maintained at https://github.com/nix-community/poetry2nix
+
+The update procedure is as-follows:
+1. Send your change to the upstream poetry2nix repository
+2. Get it approved with tests passing
+3. Run the update script in pkgs/development/tools/poetry2nix
+EOF
+
+rm -rf "$pwd/poetry2nix"
+mv build "$pwd/poetry2nix"
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..51d9d14efa17
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/postiats-utilities/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, python3, python3Packages }:
+
+stdenv.mkDerivation rec {
+  pname = "postiats-utilities";
+  version = "2.1.1";
+  src = fetchFromGitHub {
+    owner = "Hibou57";
+    repo = "PostiATS-Utilities";
+    rev = "v${version}";
+    sha256 = "sha256-QeBbv5lwqL2ARjB+RGyBHeuibaxugffBLhC9lYs+5tE=";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/Hibou57/PostiATS-Utilities";
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.ttuegel ];
+  };
+
+  buildInputs = [ python3 python3Packages.wrapPython ];
+
+  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/pqrs/default.nix b/nixpkgs/pkgs/development/tools/pqrs/default.nix
new file mode 100644
index 000000000000..24efea2036a6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pqrs/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pqrs";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "manojkarthick";
+    repo = "pqrs";
+    rev = "v${version}";
+    sha256 = "1vx952ki1rhwfmr3faxs363m9fh61b37b0bkbs57ggn9r44sk1z2";
+  };
+
+  cargoSha256 = "0mjwazsnryhlfyzcik8052q0imz5f104x86k6b5rncbbbjaj17q1";
+
+  meta = with lib; {
+    description = "CLI tool to inspect Parquet files";
+    homepage = "https://github.com/manojkarthick/pqrs";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = [ maintainers.manojkarthick ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pretty-simple/default.nix b/nixpkgs/pkgs/development/tools/pretty-simple/default.nix
new file mode 100644
index 000000000000..0a33b6e6b2ea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pretty-simple/default.nix
@@ -0,0 +1,12 @@
+{ haskell, haskellPackages, lib }:
+
+haskell.lib.compose.justStaticExecutables (haskell.lib.compose.overrideCabal (oldAttrs: {
+  maintainers = (oldAttrs.maintainers or []) ++ [
+    lib.maintainers.cdepillabout
+  ];
+
+  configureFlags = (oldAttrs.configureFlags or []) ++ ["-fbuildexe"];
+
+  buildDepends = (oldAttrs.buildDepends or []) ++ [haskellPackages.optparse-applicative];
+}) haskellPackages.pretty-simple)
+
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..41b343cdf1c5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/EZTrace/default.nix
@@ -0,0 +1,33 @@
+{ lib,
+  stdenv,
+  fetchFromGitLab,
+  gfortran,
+  libelf,
+  libiberty,
+  zlib,
+  libbfd,
+  libopcodes,
+  buildPackages,
+  autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "EZTrace";
+  version = "1.1-11";
+
+  src = fetchFromGitLab {
+    owner = "eztrace";
+    repo = "eztrace";
+    rev = "eztrace-${version}";
+    sha256 = "sha256-A6HMr4ib5Ka1lTbbTQOdq3kIdCoN/CwAKRdXdv9wpfU=";
+  };
+
+  nativeBuildInputs = [ gfortran autoreconfHook ];
+  buildInputs = [ libelf libiberty zlib libbfd libopcodes ];
+
+  meta = with lib; {
+    description = "Tool that aims at generating automatically execution trace from HPC programs";
+    license = licenses.cecill-b;
+    maintainers = with maintainers; [ ];
+  };
+}
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..7f42c39cb218
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/heaptrack/default.nix
@@ -0,0 +1,31 @@
+{
+  lib, mkDerivation, fetchFromGitHub, cmake, extra-cmake-modules,
+  zlib, boost, libunwind, elfutils, sparsehash, zstd,
+  qtbase, kio, kitemmodels, threadweaver, kconfigwidgets, kcoreaddons, kdiagram
+}:
+
+mkDerivation rec {
+  pname = "heaptrack";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "KDE";
+    repo = "heaptrack";
+    rev = "v${version}";
+    sha256 = "sha256-GXwlauLspbY+h/Y75zlHPoP27pr3xVl05LuDW+WVYxU=";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+  buildInputs = [
+    zlib boost libunwind elfutils sparsehash zstd
+    qtbase kio kitemmodels threadweaver kconfigwidgets kcoreaddons kdiagram
+  ];
+
+  meta = with 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/malt/default.nix b/nixpkgs/pkgs/development/tools/profiling/malt/default.nix
new file mode 100644
index 000000000000..fa3810cab672
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/malt/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, lib
+, fetchFromGitHub
+, cmake, nodejs, libelf, libunwind
+}:
+
+stdenv.mkDerivation rec {
+  pname = "malt";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "memtt";
+    repo = "malt";
+    rev = "v${version}";
+    sha256 = "1yh9gmf7cggf3mx15cwmm99dha34aibkzhnpd0ckl0fkc6w17xqg";
+  };
+
+  postPatch = ''
+    sed -i s,@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@,@CMAKE_INSTALL_LIBDIR@, \
+      src/integration/malt.sh.in
+    sed -i -e 's,^NODE=""$,NODE=${nodejs}/bin/node,' -e s,^detectNodeJS$,, \
+      src/integration/malt-{webview,passwd}.sh.in
+  '';
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libelf libunwind ];
+
+  meta = with lib; {
+    description = "Memory tool to find where you allocate your memory";
+    homepage = "https://github.com/memtt/malt";
+    license = licenses.cecill-c;
+    maintainers = with maintainers; [ viric ];
+    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..08f89d482ddd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/oprofile/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, buildPackages
+, fetchurl, pkg-config
+, 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 {
+  pname = "oprofile";
+  version = "1.4.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/oprofile/${pname}-${version}.tar.gz";
+    sha256 = "04m46ni0ryk4sqmzd6mahwzp7iwhwqzfbmfi42fki261sycnz83v";
+  };
+
+  postPatch = ''
+    substituteInPlace opjitconv/opjitconv.c \
+      --replace "/bin/rm" "${buildPackages.coreutils}/bin/rm" \
+      --replace "/bin/cp" "${buildPackages.coreutils}/bin/cp"
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libbfd zlib popt linuxHeaders libiberty_static ]
+    ++ lib.optionals withGUI [ qt4 ];
+
+  configureFlags = [
+      "--with-kernel=${linuxHeaders}"
+      "--disable-shared"   # needed because only the static libbfd is available
+    ]
+    ++ 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 = lib.licenses.gpl2;
+    homepage = "http://oprofile.sourceforge.net/";
+
+    platforms = 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..03460f7f04c0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/pprof/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "pprof";
+  version = "unstable-2021-09-30";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "pprof";
+    rev = "7fe48b4c820be13151ae35ce5a5e3f54f1b53eef";
+    sha256 = "05nr3igdigs1586qplwfm17hfw0v81jy745g6vayq7cbplljfjb1";
+  };
+
+  vendorSha256 = "0yl8y3m2ia3cwxhmg1km8358a0225khimv6hcvras8r2glm69h3f";
+
+  meta = with 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/sysprof/capture.nix b/nixpkgs/pkgs/development/tools/profiling/sysprof/capture.nix
new file mode 100644
index 000000000000..2d33dedbdd25
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/sysprof/capture.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv
+, meson
+, ninja
+, sysprof
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libsysprof-capture";
+
+  inherit (sysprof) src version;
+
+  nativeBuildInputs = [
+    meson
+    ninja
+  ];
+
+  mesonFlags = [
+    "-Dwith_sysprofd=none"
+    "-Dlibsysprof=false"
+    "-Dhelp=false"
+    "-Denable_tools=false"
+    "-Denable_tests=false"
+    "-Denable_examples=false"
+  ];
+
+  meta = sysprof.meta // {
+    description = "Static library for Sysprof capture data generation";
+    license = lib.licenses.bsd2Patent;
+    platforms = lib.platforms.all;
+  };
+}
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..319212da7705
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/sysprof/default.nix
@@ -0,0 +1,81 @@
+{ stdenv
+, lib
+, desktop-file-utils
+, fetchurl
+, gettext
+, glib
+, gtk3
+, json-glib
+, itstool
+, libdazzle
+, libxml2
+, meson, ninja
+, pango
+, pkg-config
+, polkit
+, shared-mime-info
+, systemd
+, wrapGAppsHook
+, gnome
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sysprof";
+  version = "3.42.1";
+
+  outputs = [ "out" "lib" "dev" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "F5a4FATudf0eus9URkrXr/6/YvKFHu9STZ+OrAxKIAE=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gettext
+    itstool
+    libxml2
+    meson
+    ninja
+    pkg-config
+    shared-mime-info
+    wrapGAppsHook
+    gnome.adwaita-icon-theme
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    json-glib
+    pango
+    polkit
+    systemd
+    libdazzle
+  ];
+
+  mesonFlags = [
+    "-Dsystemdunitdir=lib/systemd/system"
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      versionPolicy = "odd-unstable";
+    };
+  };
+
+  meta = with 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 = teams.gnome.members;
+    platforms = platforms.unix;
+  };
+}
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..ac00e3418782
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/profiling/systemtap/default.nix
@@ -0,0 +1,59 @@
+{ lib, fetchgit, pkg-config, gettext, runCommand, makeWrapper
+, cpio, elfutils, kernel, gnumake, python3
+}:
+
+let
+  ## fetchgit info
+  url = "git://sourceware.org/git/systemtap.git";
+  rev = "release-${version}";
+  sha256 = "sha256-3LgqMBCnUG2UmsekaIvV43lBpSPEocEXmFV9WpE7wE0=";
+  version = "4.5";
+
+  inherit (kernel) stdenv;
+
+  ## stap binaries
+  stapBuild = stdenv.mkDerivation {
+    pname = "systemtap";
+    inherit version;
+    src = fetchgit { inherit url rev sha256; };
+    nativeBuildInputs = [ pkg-config cpio python3 python3.pkgs.setuptools ];
+    buildInputs = [ elfutils gettext ];
+    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 python3.pkgs; makePythonPath [ pyparsing ];
+
+in runCommand "systemtap-${kernel.version}-${version}" {
+  inherit stapBuild kernelBuildDir;
+  nativeBuildInputs = [ 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/prospector/default.nix b/nixpkgs/pkgs/development/tools/prospector/default.nix
new file mode 100644
index 000000000000..2f58737637f6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/prospector/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, pkgs
+, python3
+}:
+
+let
+  setoptconf-tmp = python3.pkgs.callPackage ./setoptconf.nix { };
+in
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "prospector";
+  version = "1.5.1";
+  format = "pyproject";
+  disabled = pythonOlder "3.6.1";
+
+  src = pkgs.fetchFromGitHub {
+    owner = "PyCQA";
+    repo = pname;
+    rev = version;
+    sha256 = "17f822cxrvcvnrzdx1a9fyi9afljq80b6g6z1k2bqa1vs21gwv7l";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace 'pep8-naming = ">=0.3.3,<=0.10.0"' 'pep8-naming = "*"'
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = [
+    bandit
+    dodgy
+    mccabe
+    mypy
+    pep8-naming
+    pycodestyle
+    pydocstyle
+    pyflakes
+    pylint
+    pylint-celery
+    pylint-django
+    pylint-flask
+    pylint-plugin-utils
+    pyroma
+    pyyaml
+    requirements-detector
+    setoptconf-tmp
+    setuptools
+    toml
+    vulture
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    description = "Tool to analyse Python code and output information about errors, potential problems, convention violations and complexity";
+    homepage = "https://github.com/PyCQA/prospector";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [
+      kamadorueda
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/prospector/setoptconf.nix b/nixpkgs/pkgs/development/tools/prospector/setoptconf.nix
new file mode 100644
index 000000000000..1d0f06a57e77
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/prospector/setoptconf.nix
@@ -0,0 +1,26 @@
+{ buildPythonPackage
+, fetchPypi
+, lib
+}:
+
+buildPythonPackage rec {
+  pname = "setoptconf-tmp";
+  version = "0.3.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0y2pgpraa36wzlzkxigvmz80mqd3mzcc9wv2yx9bliqks7fhlj70";
+  };
+
+  # Base tests provided via PyPi are broken
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://pypi.org/project/setoptconf-tmp";
+    description = "A module for retrieving program settings from various sources in a consistant method";
+    license = licenses.mit;
+    maintainers = with maintainers; [
+      kamadorueda
+    ];
+  };
+}
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..f60bfb4b724d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/proto-contrib/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "proto-contrib";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "emicklei";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0ksxic7cypv9gg8q5lkl5bla1n9i65z7b03cx9lwq6252glmf2jk";
+  };
+
+  vendorSha256 = "093blawprs2yf478zp9p1zc7mmimgpiwrw6nh8nqml89y5b5zldc";
+
+  doCheck = false;
+
+  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/protoc-gen-doc/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-doc/default.nix
new file mode 100644
index 000000000000..4774d1a11d5c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-doc/default.nix
@@ -0,0 +1,32 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "protoc-gen-doc-unstable";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "pseudomuto";
+    repo = "protoc-gen-doc";
+    rev = "v${version}";
+    sha256 = "1bpb5wv76p0sjffh5d1frbygp3q1p07sdh5c8pznl5bdh5pd7zxq";
+  };
+
+  vendorSha256 = "08pk9nxsl28dw3qmrlb7vsm8xbdzmx98qwkxgg93ykrhzx235k1b";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Documentation generator plugin for Google Protocol Buffers";
+    longDescription = ''
+      This is a documentation generator plugin for the Google Protocol Buffers
+      compiler (protoc). The plugin can generate HTML, JSON, DocBook and
+      Markdown documentation from comments in your .proto files.
+
+      It supports proto2 and proto3, and can handle having both in the same
+      context.
+    '';
+    homepage = "https://github.com/pseudomuto/protoc-gen-doc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-go-grpc/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-go-grpc/default.nix
new file mode 100644
index 000000000000..6fd939d00237
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-go-grpc/default.nix
@@ -0,0 +1,28 @@
+{ buildGoPackage
+, fetchFromGitHub
+, lib
+}:
+
+buildGoPackage rec {
+  pname = "protoc-gen-go-grpc";
+  version = "1.1.0";
+
+  goPackagePath = "google.golang.org/grpc";
+
+  src = fetchFromGitHub {
+    owner = "grpc";
+    repo = "grpc-go";
+    rev = "cmd/protoc-gen-go-grpc/v${version}";
+    sha256 = "14rjb8j6fm07rnns3dpwgkzf3y6rmia6i9n7ns6cldc5mbf7nwi3";
+  };
+
+  subPackages = [ "cmd/protoc-gen-go-grpc" ];
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "The Go language implementation of gRPC. HTTP/2 based RPC";
+    license = licenses.asl20;
+    maintainers = [ maintainers.raboof ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-go-grpc/deps.nix b/nixpkgs/pkgs/development/tools/protoc-gen-go-grpc/deps.nix
new file mode 100644
index 000000000000..d559989244d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-go-grpc/deps.nix
@@ -0,0 +1,333 @@
+# file generated from go.mod using vgo2nix (https://github.com/nix-community/vgo2nix)
+[
+  {
+    goPackagePath = "cloud.google.com/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/google-cloud-go";
+      rev = "v0.26.0";
+      sha256 = "149v3ci17g6wd2pm18mzcncq5qpl9hwdjnz3rlbn5rfidyn46la1";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "v0.3.1";
+      sha256 = "1fjdwwfzyzllgiwydknf1pwjvy49qxfsczqx5gz3y0izs7as99j6";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/census-instrumentation/opencensus-proto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/census-instrumentation/opencensus-proto";
+      rev = "v0.2.1";
+      sha256 = "19fcx3sc99i5dsklny6r073z5j20vlwn2xqm6di1q3b1xwchzqfj";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/client9/misspell";
+    fetch = {
+      type = "git";
+      url = "https://github.com/client9/misspell";
+      rev = "v0.3.4";
+      sha256 = "1vwf33wsc4la25zk9nylpbp9px3svlmldkm0bha4hp56jws4q9cs";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/cncf/udpa/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cncf/udpa";
+      rev = "5459f2c99403";
+      sha256 = "0i3al193dsp91j7iywqrm6fr56y2sz51ci4vf19mb3j4n2x44gsi";
+      moduleDir = "go";
+    };
+  }
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "v1.1.0";
+      sha256 = "0d4jfmak5p6lb7n2r6yvf5p1zcw0l8j74kn55ghvr7zr7b7axm6c";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/envoyproxy/go-control-plane";
+    fetch = {
+      type = "git";
+      url = "https://github.com/envoyproxy/go-control-plane";
+      rev = "668b12f5399d";
+      sha256 = "0vmhc8ii081x1k2qw4kji7wjyg6l25zp1y6qxi27wq8m341i4rzb";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/envoyproxy/protoc-gen-validate";
+    fetch = {
+      type = "git";
+      url = "https://github.com/envoyproxy/protoc-gen-validate";
+      rev = "v0.1.0";
+      sha256 = "0kxd3wwh3xwqk0r684hsy281xq4y71cd11d4q2hspcjbnlbwh7cy";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/glog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/glog";
+      rev = "23def4e6c14b";
+      sha256 = "0jb2834rw5sykfr937fxi8hxi2zy80sj2bdn9b3jb4b26ksqng30";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/mock";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/mock";
+      rev = "v1.1.1";
+      sha256 = "0ap8wb6pdl6ccmdb43advjll2ly4sz26wsc3axw0hbrjrybybzgy";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "v1.4.2";
+      sha256 = "0m5z81im4nsyfgarjhppayk4hqnrwswr3nix9mj8pff8x9jvcjqw";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/go-cmp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-cmp";
+      rev = "v0.5.0";
+      sha256 = "04pzp583p6b32y34c6jygfxarff9qjs39rarvfh6467z24sdd9k4";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/uuid";
+      rev = "v1.1.2";
+      sha256 = "1rbpfa0v0ly9sdnixcxhf79swki54ikgm1zkwwkj64p1ws66syqd";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev = "v1.0.0";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "14fe0d1b01d4";
+      sha256 = "0zdmk6rbbx39cvfz0r59v2jg5sg9yd02b4pds5n5llgvivi99550";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/objx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/objx";
+      rev = "v0.1.0";
+      sha256 = "19ynspzjdynbi85xw06mh8ad5j0qa1vryvxjgvbnyrr8rbm4vd8w";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "v1.5.1";
+      sha256 = "09r89m1wy4cjv2nps1ykp00qjpi0531r07q3s34hr7m6njk4srkl";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "c2843e01d9a2";
+      sha256 = "01xgxbj5r79nmisdvpq48zfy8pzaaj90bn6ngd4nf33j9ar1dp8r";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/exp";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/exp";
+      rev = "509febef88a4";
+      sha256 = "02isrh39z8znrp5znplzy0dip2gnrl3jm1355raliyvhnhg04j6q";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/lint";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/lint";
+      rev = "d0100b6bd8b3";
+      sha256 = "0b0amr9x4ji66iv9ayfx7zrfx52k1m5g66qfcxkgj80qrb1y2yn7";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "d8887717615a";
+      sha256 = "1wfm6ngxjyj7v5a2dqib6lw8bb2rdnf1kl48diykxjrsddn0s163";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/oauth2";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/oauth2";
+      rev = "d2e6202438be";
+      sha256 = "0wbn75fd10485nb93bm4kqldqifdim5xqy4v7r5sdvimvf3fyhn7";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev = "112230192c58";
+      sha256 = "05i2k43j2d0llq768hg5pf3hb2yhfzp9la1w5wp0rsnnzblr0lfn";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "d0b11bdaac8a";
+      sha256 = "18yfsmw622l7gc5sqriv5qmck6903vvhivpzp8i3xfy3z33dybdl";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "v0.3.0";
+      sha256 = "0r6x6zjzhr8ksqlpiwm5gdd7s209kwk5p4lw54xjvz10cs3qlq19";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "2c0ae7006135";
+      sha256 = "1lsi2ssxajclj3bciz2a41v1vjv768ja3v6wnbyhxy8xphwkp4fk";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/xerrors";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/xerrors";
+      rev = "9bdfabe68543";
+      sha256 = "1yjfi1bk9xb81lqn85nnm13zz725wazvrx3b50hx19qmwg7a4b0c";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/appengine";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/appengine";
+      rev = "v1.4.0";
+      sha256 = "06zl7w4sxgdq2pl94wy9ncii6h0z3szl4xpqds0sv3b3wbdlhbnn";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/genproto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/go-genproto";
+      rev = "cb27e3aa2013";
+      sha256 = "0ml73ghqcwbz7ipfk8fnxb5indcml49b5p7vp1fsyny0abyyrmxf";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/protobuf";
+      rev = "v1.25.0";
+      sha256 = "0apfl42x166dh96zfq5kvv4b4ax9xljik6bq1mnvn2240ir3mc23";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/check.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/check.v1";
+      rev = "20d25e280405";
+      sha256 = "0k1m83ji9l1a7ng8a7v40psbymxasmssbrrhpdv2wl4rhs0nc3np";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "v2.2.2";
+      sha256 = "01wj12jzsdqlnidpyjssmj0r4yavlqy7dwrg7adqd8dicjc4ncsa";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "honnef.co/go/tools";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dominikh/go-tools";
+      rev = "ea95bdfd59fc";
+      sha256 = "1763nw7pwpzkvzfnm63dgzcgbq9hwmq5l1nffchnhh77vgkaq4ic";
+      moduleDir = "";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-go-vtproto/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-go-vtproto/default.nix
new file mode 100644
index 000000000000..4ffc0a24264e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-go-vtproto/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+buildGoModule rec {
+  pname = "protoc-gen-go-vtproto";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "planetscale";
+    repo = "vtprotobuf";
+    rev = "v${version}";
+    sha256 = "0kjjpfsiws4vi36ha1gajb97rwcggqw753mv2jqf09kdfszz9p63";
+  };
+
+  vendorSha256 = "01lxwlgh3y3gp22gk5qx7r60c1j63pnpi6jnri8gf2lmiiib8fdc";
+
+  excludedPackages = [ "conformance" ];
+
+  meta = with lib; {
+    description = "A Protocol Buffers compiler that generates optimized marshaling & unmarshaling Go code for ProtoBuf APIv2";
+    homepage = "https://github.com/planetscale/vtprotobuf";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.zane ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-go/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-go/default.nix
new file mode 100644
index 000000000000..79f97ddd745c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-go/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "protoc-gen-go";
+  version = "1.27.1";
+
+  src = fetchFromGitHub {
+    owner = "protocolbuffers";
+    repo = "protobuf-go";
+    rev = "v${version}";
+    sha256 = "sha256-wkUvMsoJP38KMD5b3Fz65R1cnpeTtDcVqgE7tNlZXys=";
+  };
+
+  vendorSha256 = "sha256-yb8l4ooZwqfvenlxDRg95rqiL+hmsn0weS/dPv/oD2Y=";
+
+  subPackages = [ "cmd/protoc-gen-go" ];
+
+  meta = with lib; {
+    description = "Go support for Google's protocol buffers";
+    homepage = "https://google.golang.org/protobuf";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jojosch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-grpc-web/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-grpc-web/default.nix
new file mode 100644
index 000000000000..279f8101f78f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-grpc-web/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchFromGitHub, protobuf }:
+
+stdenv.mkDerivation rec {
+  pname = "protoc-gen-grpc-web";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "grpc";
+    repo = "grpc-web";
+    rev = version;
+    sha256 = "sha256-NRShN4X9JmCjqPVY/q9oSxSOvv1bP//vM9iOZ6ap5vc=";
+  };
+
+  sourceRoot = "source/javascript/net/grpc/web/generator";
+
+  strictDeps = true;
+  nativeBuildInputs = [ protobuf ];
+  buildInputs = [ protobuf ];
+
+  makeFlags = [ "PREFIX=$(out)" "STATIC=no" ];
+
+  patches = [
+    # https://github.com/grpc/grpc-web/pull/1210
+    ./optional-static.patch
+  ];
+
+  doCheck = true;
+  checkInputs = [ protobuf ];
+  checkPhase = ''
+    runHook preCheck
+
+    CHECK_TMPDIR="$TMPDIR/proto"
+    mkdir -p "$CHECK_TMPDIR"
+
+    protoc \
+      --proto_path="${src}/packages/grpc-web/test/protos" \
+      --plugin="./protoc-gen-grpc-web" \
+      --grpc-web_out="import_style=commonjs,mode=grpcwebtext:$CHECK_TMPDIR" \
+      echo.proto
+
+    # check for grpc-web generated file
+    [ -f "$CHECK_TMPDIR/echo_grpc_web_pb.js" ]
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/grpc/grpc-web";
+    changelog = "https://github.com/grpc/grpc-web/blob/${version}/CHANGELOG.md";
+    description = "gRPC web support for Google's protocol buffers";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-grpc-web/optional-static.patch b/nixpkgs/pkgs/development/tools/protoc-gen-grpc-web/optional-static.patch
new file mode 100644
index 000000000000..a7ca112749c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-grpc-web/optional-static.patch
@@ -0,0 +1,19 @@
+--- a/Makefile
++++ b/Makefile
+@@ -18,12 +18,15 @@ CXXFLAGS += -std=c++11
+ LDFLAGS += -L/usr/local/lib -lprotoc -lprotobuf -lpthread -ldl
+ PREFIX ?= /usr/local
+ MIN_MACOS_VERSION := 10.7 # Supports OS X Lion
++STATIC ?= yes
+
+ UNAME_S := $(shell uname -s)
+ ifeq ($(UNAME_S),Darwin)
+   CXXFLAGS += -stdlib=libc++ -mmacosx-version-min=$(MIN_MACOS_VERSION)
+ else ifeq ($(UNAME_S),Linux)
+-  LDFLAGS += -static
++  ifeq ($(STATIC),yes)
++    LDFLAGS += -static
++  endif
+ endif
+
+ all: protoc-gen-grpc-web
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-twirp/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-twirp/default.nix
new file mode 100644
index 000000000000..663fa37b62c9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-twirp/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "protoc-gen-twirp";
+  version = "8.1.1";
+
+  src = fetchFromGitHub {
+    owner = "twitchtv";
+    repo = "twirp";
+    rev = "v${version}";
+    sha256 = "sha256-PnL7jgxAx/Xk/wajtQ+Q1G9KLes2NVANF2YmBcGFqe0=";
+  };
+
+  goPackagePath = "github.com/twitchtv/twirp";
+
+  subPackages = [
+    "protoc-gen-twirp"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A simple RPC framework with protobuf service definitions";
+    homepage = "https://github.com/twitchtv/twirp";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jojosch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-twirp_php/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-twirp_php/default.nix
new file mode 100644
index 000000000000..df5afac2dbb2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-twirp_php/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchgit }:
+
+buildGoModule rec {
+  pname = "protoc-gen-twirp_php";
+  version = "0.8.0";
+
+  # fetchFromGitHub currently not possible, because go.mod and go.sum are export-ignored
+  src = fetchgit {
+    url = "https://github.com/twirphp/twirp.git";
+    rev = "v${version}";
+    sha256 = "sha256-TaHfyYoWsA/g5xZFxIMNwE1w6Dd9Cq5bp1gpQudYLs0=";
+  };
+
+  vendorSha256 = "sha256-qQFlBviRISEnPBt0q5391RqUrPTI/QDxg3MNfwWE8MI=";
+
+  subPackages = [ "protoc-gen-twirp_php" ];
+
+  meta = with lib; {
+    description = "PHP port of Twitch's Twirp RPC framework";
+    homepage = "https://github.com/twirphp/twirp";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jojosch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-twirp_swagger/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-twirp_swagger/default.nix
new file mode 100644
index 000000000000..3348759c0113
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-twirp_swagger/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule {
+  pname = "protoc-gen-twirp_swagger";
+  version = "unstable-2021-03-29";
+
+  src = fetchFromGitHub {
+    owner = "elliots";
+    repo = "protoc-gen-twirp_swagger";
+    rev = "f21ef47d69e37c1602a7fb26146de05c092d30b6";
+    sha256 = "sha256-uHU15NbHK7SYgNS3VK21H/OqDo/JyyTZdXw3i9lsgLY=";
+  };
+
+  vendorSha256 = "sha256-g0+9l83Fc0XPzsZAKjLBrjD+tv2+Fot57hcilqAhOZk=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Swagger generator for twirp";
+    homepage = "https://github.com/elliots/protoc-gen-twirp_swagger";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jojosch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-twirp_typescript/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-twirp_typescript/default.nix
new file mode 100644
index 000000000000..ead72184b7cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-twirp_typescript/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule {
+  pname = "protoc-gen-twirp_typescript";
+  version = "unstable-2021-03-29";
+
+  src = fetchFromGitHub {
+    owner = "larrymyers";
+    repo = "protoc-gen-twirp_typescript";
+    rev = "97fd63e543beb2d9f6a90ff894981affe0f2faf1";
+    sha256 = "sha256-LfF/n96LwRX8aoPHzCRI/QbDmZR9yMhE5yGhFAqa8nA=";
+  };
+
+  vendorSha256 = "sha256-xZlP4rg1FMx6ddkKYlSdF6NrtY8xBZ3aEZSATgSf13M=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Protobuf Plugin for Generating a Twirp Typescript Client";
+    homepage = "https://github.com/larrymyers/protoc-gen-twirp_typescript";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jojosch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/protoc-gen-validate/default.nix b/nixpkgs/pkgs/development/tools/protoc-gen-validate/default.nix
new file mode 100644
index 000000000000..9a77437a3723
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/protoc-gen-validate/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "protoc-gen-validate";
+  version = "0.6.7";
+
+  src = fetchFromGitHub {
+    owner = "envoyproxy";
+    repo = "protoc-gen-validate";
+    rev = "v${version}";
+    sha256 = "sha256-ouo6raNbvQyuY4IY1JEN45Ss7zb3EoR/WIRzL7hXLNI=";
+  };
+
+  vendorSha256 = "sha256-HbUEhoB6PPHwN/xym6dTkS54+EqVU1n8EIym8W2wt3I=";
+
+  excludedPackages = [ "tests" ];
+
+  meta = with lib; {
+    description = "Protobuf plugin for generating polyglot message validators";
+    homepage = "https://github.com/envoyproxy/protoc-gen-validate";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ matthewpi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/prototool/default.nix b/nixpkgs/pkgs/development/tools/prototool/default.nix
new file mode 100644
index 000000000000..e58b89a27363
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/prototool/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub, makeWrapper, protobuf }:
+
+buildGoModule rec {
+  pname = "prototool";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "uber";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "02ih9pqnziwl2k4z6c59w1p4bxmb3xki5y33pdfkxqn2467s792g";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  vendorSha256 = "0gyj0yrri2j4yxmyn4d4vdhaxf2p08srpjcxg9zpaxwv5rrvipav";
+
+  doCheck = false;
+
+  postInstall = ''
+    wrapProgram "$out/bin/prototool" \
+      --prefix PROTOTOOL_PROTOC_BIN_PATH : "${protobuf}/bin/protoc" \
+      --prefix PROTOTOOL_PROTOC_WKT_PATH : "${protobuf}/include"
+  '';
+
+  subPackages = [ "cmd/prototool" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/uber/prototool";
+    description = "Your Swiss Army Knife for Protocol Buffers";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pry/Gemfile b/nixpkgs/pkgs/development/tools/pry/Gemfile
new file mode 100644
index 000000000000..ec63e2251d5c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pry/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'pry'
diff --git a/nixpkgs/pkgs/development/tools/pry/Gemfile.lock b/nixpkgs/pkgs/development/tools/pry/Gemfile.lock
new file mode 100644
index 000000000000..87f7e81fbe3a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pry/Gemfile.lock
@@ -0,0 +1,17 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    coderay (1.1.3)
+    method_source (1.0.0)
+    pry (0.13.1)
+      coderay (~> 1.1)
+      method_source (~> 1.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  pry
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/pry/default.nix b/nixpkgs/pkgs/development/tools/pry/default.nix
new file mode 100644
index 000000000000..c39af508591f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pry/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "pry";
+  gemdir = ./.;
+  exes = [ "pry" ];
+
+  passthru.updateScript = bundlerUpdateScript "pry";
+
+  meta = with lib; {
+    description = "A Ruby runtime developer console and IRB alternative";
+    homepage    = "https://pryrepl.org";
+    license     = licenses.mit;
+    maintainers = [ maintainers.tckmn ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pry/gemset.nix b/nixpkgs/pkgs/development/tools/pry/gemset.nix
new file mode 100644
index 000000000000..c3f42889e1ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pry/gemset.nix
@@ -0,0 +1,33 @@
+{
+  coderay = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  method_source = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  pry = {
+    dependencies = ["coderay" "method_source"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0iyw4q4an2wmk8v5rn2ghfy2jaz9vmw2nk8415nnpx2s866934qk";
+      type = "gem";
+    };
+    version = "0.13.1";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pscale/default.nix b/nixpkgs/pkgs/development/tools/pscale/default.nix
new file mode 100644
index 000000000000..50517db6ee9b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pscale/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pscale";
+  version = "0.89.0";
+
+  src = fetchFromGitHub {
+    owner = "planetscale";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-6iExcck9s5Z6c8QA+F+Fnk5g0WNmifaSQa2KaIS9m8M=";
+  };
+
+  vendorSha256 = "sha256-kNt7tMHubpcrfzAjf++GxV3kEj2g6fHFrP9cY8UPqB8=";
+
+  meta = with lib; {
+    homepage = "https://www.planetscale.com/";
+    changelog = "https://github.com/planetscale/cli/releases/tag/v${version}";
+    description = "The CLI for PlanetScale Database";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ pimeys ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pulumictl/default.nix b/nixpkgs/pkgs/development/tools/pulumictl/default.nix
new file mode 100644
index 000000000000..b9538235c466
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pulumictl/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pulumictl";
+  version = "0.0.29";
+
+  src = fetchFromGitHub {
+    owner = "pulumi";
+    repo = "pulumictl";
+    rev = "v${version}";
+    sha256 = "sha256-2jTxtgEg+x/NY/LTWT5+9K9bilOw2bLTUIctjd+qwLE=";
+  };
+
+  vendorSha256 = "sha256-xalfnLc6bPBvm2B42+FzpgrOH541HMWmNHChveI792s=";
+
+  ldflags = [
+    "-s" "-w" "-X=github.com/pulumi/pulumictl/pkg/version.Version=${src.rev}"
+  ];
+
+  subPackages = [ "cmd/pulumictl" ];
+
+  meta = with lib; {
+    description = "Swiss Army Knife for Pulumi Development";
+    homepage = "https://github.com/pulumi/pulumictl";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ vincentbernat ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pup/default.nix b/nixpkgs/pkgs/development/tools/pup/default.nix
new file mode 100644
index 000000000000..8cdfddb7f016
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pup/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pup";
+  version = "unstable-2019-09-19";
+
+  src = fetchFromGitHub {
+    owner = "ericchiang";
+    repo = "pup";
+    rev = "681d7bb639334bf485476f5872c5bdab10931f9a";
+    sha256 = "1hx1k0qlc1bq6gg5d4yprn4d7kvqzagg6mi5mvb39zdq6c4y17vr";
+  };
+
+  vendorSha256 = null;
+
+  meta = with lib; {
+    description = "Parsing HTML at the command line";
+    homepage = "https://github.com/ericchiang/pup";
+    license = licenses.mit;
+    maintainers = with maintainers; [ SuperSandro2000 yana ];
+  };
+}
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..7569b5e2d13c
--- /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.5.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  puppet-lint
+
+BUNDLED WITH
+   2.2.24
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..e3911e63536a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/puppet/puppet-lint/gemset.nix
@@ -0,0 +1,12 @@
+{
+  puppet-lint = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rcj3cb6lf90g6vvhh3c9p8yn7pgibglf9k5878bzd6pn5ag0h9v";
+      type = "gem";
+    };
+    version = "2.5.2";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pur/default.nix b/nixpkgs/pkgs/development/tools/pur/default.nix
new file mode 100644
index 000000000000..359f3519acd6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pur/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+      # newest version doesn't support click >8.0 https://github.com/alanhamlett/pip-update-requirements/issues/38
+      # Use click 7
+      click = self.callPackage ../../../development/python2-modules/click/default.nix { };
+    };
+  };
+  inherit (py.pkgs) buildPythonApplication click pytestCheckHook;
+in
+
+buildPythonApplication rec {
+  pname = "pur";
+  version = "5.4.2";
+
+  src = fetchFromGitHub {
+    owner = "alanhamlett";
+    repo = "pip-update-requirements";
+    rev = version;
+    sha256 = "sha256-coJO9AYm0Qx0arMf/e+pZFG/VxK6bnxxXRgw7x7V2hY=";
+  };
+
+  propagatedBuildInputs = [
+    click
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "pur" ];
+
+  meta = with lib; {
+    description = "Python library for update and track the requirements";
+    homepage = "https://github.com/alanhamlett/pip-update-requirements";
+    license = with licenses; [ bsd2 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/purescript/spago/default.nix b/nixpkgs/pkgs/development/tools/purescript/spago/default.nix
new file mode 100644
index 000000000000..51516ed5b256
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/purescript/spago/default.nix
@@ -0,0 +1,61 @@
+{ haskell
+, haskellPackages
+, lib
+
+# The following are only needed for the passthru.tests:
+, cacert
+, git
+, nodejs
+, purescript
+, runCommand
+}:
+
+let
+  spago =
+    haskell.lib.compose.justStaticExecutables
+      (haskell.lib.compose.overrideCabal (oldAttrs: {
+        maintainers = (oldAttrs.maintainers or []) ++ [
+          lib.maintainers.cdepillabout
+        ];
+        changelog =
+          "https://github.com/purescript/spago/releases/tag/${oldAttrs.version}";
+      }) haskellPackages.spago);
+in
+
+spago.overrideAttrs (oldAttrs: {
+  passthru = (oldAttrs.passthru or {}) // {
+    updateScript = ./update.sh;
+
+    # These tests can be run with the following command.  The tests access the
+    # network, so they cannot be run in the nix sandbox.  sudo is needed in
+    # order to change the sandbox option.
+    #
+    # $ sudo nix-build -A spago.passthru.tests --option sandbox relaxed
+    #
+    tests =
+      runCommand
+        "spago-tests"
+        {
+          __noChroot = true;
+          nativeBuildInputs = [
+            cacert
+            git
+            nodejs
+            purescript
+            spago
+          ];
+        }
+        ''
+          # spago expects HOME to be set because it creates a cache file under
+          # home.
+          HOME=$(pwd)
+
+          spago --verbose init
+          spago --verbose build
+          spago --verbose test
+
+          touch $out
+        '';
+  };
+})
+
diff --git a/nixpkgs/pkgs/development/tools/purescript/spago/spago.nix b/nixpkgs/pkgs/development/tools/purescript/spago/spago.nix
new file mode 100644
index 000000000000..1747aaa55fda
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/purescript/spago/spago.nix
@@ -0,0 +1,46 @@
+# This has been automatically generated by the script
+# ./update.sh.  This should not be changed by hand.
+{ mkDerivation, aeson, aeson-pretty, ansi-terminal, async-pool
+, base, bower-json, bytestring, containers, cryptonite, dhall
+, directory, either, extra, fetchgit, file-embed, filepath, foldl
+, fsnotify, generic-lens, Glob, hspec, hspec-discover
+, hspec-megaparsec, http-client, http-conduit, http-types
+, lens-family-core, lib, megaparsec, mtl, network-uri, open-browser
+, optparse-applicative, prettyprinter, process, QuickCheck, retry
+, rio, rio-orphans, safe, semver-range, stm, stringsearch, tar
+, template-haskell, temporary, text, time, transformers, turtle
+, unliftio, unordered-containers, utf8-string, versions, with-utf8
+, zlib
+}:
+mkDerivation {
+  pname = "spago";
+  version = "0.20.7";
+  src = fetchgit {
+    url = "https://github.com/purescript/spago.git";
+    sha256 = "0k9ablqhx4m1hk0sc0rx824qq5gr7fp7dpg9rj5v793v6hd3q4jv";
+    rev = "41d9c967dc1db0de03985e31083eb76b3e2fcce4";
+    fetchSubmodules = true;
+  };
+  isLibrary = true;
+  isExecutable = true;
+  libraryHaskellDepends = [
+    aeson aeson-pretty ansi-terminal async-pool base bower-json
+    bytestring containers cryptonite dhall directory either file-embed
+    filepath foldl fsnotify generic-lens Glob http-client http-conduit
+    http-types lens-family-core megaparsec mtl network-uri open-browser
+    optparse-applicative prettyprinter process retry rio rio-orphans
+    safe semver-range stm stringsearch tar template-haskell temporary
+    text time transformers turtle unliftio unordered-containers
+    utf8-string versions with-utf8 zlib
+  ];
+  executableHaskellDepends = [
+    ansi-terminal base text turtle with-utf8
+  ];
+  testHaskellDepends = [
+    base containers directory extra hspec hspec-megaparsec megaparsec
+    process QuickCheck temporary text turtle versions
+  ];
+  testToolDepends = [ hspec-discover ];
+  homepage = "https://github.com/purescript/spago#readme";
+  license = lib.licenses.bsd3;
+}
diff --git a/nixpkgs/pkgs/development/tools/purescript/spago/update.sh b/nixpkgs/pkgs/development/tools/purescript/spago/update.sh
new file mode 100755
index 000000000000..12595885df3c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/purescript/spago/update.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p cabal2nix curl jq haskellPackages.cabal2nix-unstable -I nixpkgs=.
+#
+# This script will update the spago derivation to the latest version using
+# cabal2nix.
+#
+# Note that you should always try building spago after updating it here, since
+# some of the overrides in pkgs/development/haskell/configuration-nix.nix may
+# need to be updated/changed.
+
+set -eo pipefail
+
+# This is the directory of this update.sh script.
+script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+
+# Spago derivation created with cabal2nix.
+spago_derivation_file="${script_dir}/spago.nix"
+
+# This is the current revision of spago in Nixpkgs.
+old_version="$(sed -En 's/.*\bversion = "(.*?)".*/\1/p' "$spago_derivation_file")"
+
+# This is the latest release version of spago on GitHub.
+new_version=$(curl --silent "https://api.github.com/repos/purescript/spago/releases" | jq '.[0].tag_name' --raw-output)
+
+echo "Updating spago from old version $old_version to new version $new_version."
+echo "Running cabal2nix and outputting to ${spago_derivation_file}..."
+
+echo "# This has been automatically generated by the script" > "$spago_derivation_file"
+echo "# ./update.sh.  This should not be changed by hand." >> "$spago_derivation_file"
+
+cabal2nix --revision "$new_version" "https://github.com/purescript/spago.git" >> "$spago_derivation_file"
+
+# TODO: This should ideally also automatically update the docsSearchVersion
+# from pkgs/development/haskell/configuration-nix.nix.
+
+echo "Finished."
diff --git a/nixpkgs/pkgs/development/tools/pxview/default.nix b/nixpkgs/pkgs/development/tools/pxview/default.nix
new file mode 100644
index 000000000000..20049215a70d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pxview/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, pkg-config, perl, perlPackages, pxlib }:
+
+stdenv.mkDerivation rec {
+  pname = "pxview";
+  version = "0.2.5";
+  src = fetchurl {
+    url = "mirror://sourceforge/pxlib/${pname}_${version}.orig.tar.gz";
+    sha256 = "1kpdqs6lvnyj02v9fbz1s427yqhgrxp7zw63rzfgiwd4iqp75139";
+  };
+
+  buildInputs = [ pxlib perl ] ++ (with perlPackages; [ libxml_perl ]);
+  nativeBuildInputs = [ pkg-config ];
+
+  configureFlags = [ "--with-pxlib=${pxlib.out}" ];
+
+  # https://sourceforge.net/p/pxlib/bugs/12/
+  LDFLAGS = "-lm";
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "Program to convert Paradox databases";
+    homepage = "http://pxlib.sourceforge.net/pxview/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.winpat ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/py-spy/default.nix b/nixpkgs/pkgs/development/tools/py-spy/default.nix
new file mode 100644
index 000000000000..c6bc51b4f844
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/py-spy/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, pkgsBuildBuild, rustPlatform, fetchFromGitHub, pkg-config, libunwind, python3 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "py-spy";
+  version = "0.3.11";
+
+  src = fetchFromGitHub {
+    owner = "benfred";
+    repo = "py-spy";
+    rev = "v${version}";
+    sha256 = "sha256-4Zp4IGd4lKBC0ye2/7Tfpz8vJzm0VnkKqx/2k3mCj3A=";
+  };
+
+  NIX_CFLAGS_COMPILE = "-L${libunwind}/lib";
+
+  # error: linker `arm-linux-gnueabihf-gcc` not found
+  preConfigure = lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+    export RUSTFLAGS="-Clinker=$CC"
+  '';
+
+  checkInputs = [ python3 ];
+
+  cargoSha256 = "sha256-LEtmzCoT8esBYh9PkCGpzUU7miaWd3Ao0z/LzxhP39A=";
+
+  meta = with lib; {
+    description = "Sampling profiler for Python programs";
+    license = licenses.mit;
+    maintainers = [ maintainers.lnl7 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pydb/default.nix b/nixpkgs/pkgs/development/tools/pydb/default.nix
new file mode 100644
index 000000000000..5380bb686085
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pydb/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, python2, emacs }:
+
+stdenv.mkDerivation rec {
+  pname = "pydb";
+  version = "1.26";
+
+  src = fetchurl {
+    url =  "mirror://sourceforge/sourceforge/bashdb/${pname}-${version}.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 = lib.licenses.gpl3;
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pylint-exit/default.nix b/nixpkgs/pkgs/development/tools/pylint-exit/default.nix
new file mode 100644
index 000000000000..6bd5591b57e9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pylint-exit/default.nix
@@ -0,0 +1,36 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+with python3Packages; buildPythonApplication rec {
+  pname = "pylint-exit";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "jongracecox";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0hwfny48g394visa3xd15425fsw596r3lhkfhswpjrdk2mnk3cny";
+  };
+
+  # Converting the shebang manually as it is not picked up by patchShebangs
+  postPatch = ''
+    substituteInPlace pylint_exit.py \
+      --replace "#!/usr/local/bin/python" "#!${python.interpreter}"
+  '';
+
+  # See https://github.com/jongracecox/pylint-exit/pull/7
+  buildInputs = [ m2r ];
+
+  # setup.py reads its version from the TRAVIS_TAG environment variable
+  TRAVIS_TAG = version;
+
+  checkPhase = ''
+    ${python.interpreter} -m doctest pylint_exit.py
+  '';
+
+  meta = with lib; {
+    description = "Utility to handle pylint exit codes in an OS-friendly way";
+    license = licenses.mit;
+    homepage = "https://github.com/jongracecox/pylint-exit";
+    maintainers = [ maintainers.fabiangd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pypi-mirror/default.nix b/nixpkgs/pkgs/development/tools/pypi-mirror/default.nix
new file mode 100644
index 000000000000..e6f9afd5dd94
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pypi-mirror/default.nix
@@ -0,0 +1,24 @@
+{ fetchFromGitHub
+, lib
+, python3
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "pypi-mirror";
+  version = "4.2.0";
+
+  src = fetchFromGitHub {
+    owner = "montag451";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1ci19bqyhig1s5myzw6klkiycd8k0lzhk3yqfx5fjirc2f0xpz5j";
+  };
+
+  pythonImportsCheck = [ "pypi_mirror" ];
+
+  meta = with lib; {
+    description = "A script to create a partial PyPI mirror";
+    homepage = "https://github.com/montag451/pypi-mirror";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kamadorueda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/pypi2nix/default.nix b/nixpkgs/pkgs/development/tools/pypi2nix/default.nix
new file mode 100644
index 000000000000..04d61995d3f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/pypi2nix/default.nix
@@ -0,0 +1,25 @@
+{ python3
+}:
+with python3;
+
+pkgs.buildPythonApplication rec {
+  pname = "pypi2nix";
+  version = "2.0.4";
+  src = pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "0y4zkkcijz5hchd8j6a106ysrg1dnad7dzdgnmz38rgm6zbrky0d";
+  };
+  propagatedBuildInputs = with pkgs; [
+    attrs
+    click
+    jinja2
+    nix-prefetch-github
+    packaging
+    parsley
+    setuptools
+    toml
+    jsonschema
+  ];
+  # https://github.com/nix-community/pypi2nix/issues/460
+  meta.broken = true;
+}
diff --git a/nixpkgs/pkgs/development/tools/qtcreator/0001-Fix-clang-libcpp-regexp.patch b/nixpkgs/pkgs/development/tools/qtcreator/0001-Fix-clang-libcpp-regexp.patch
new file mode 100644
index 000000000000..f0e8c3d2c5e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/qtcreator/0001-Fix-clang-libcpp-regexp.patch
@@ -0,0 +1,15 @@
+diff --git a/src/plugins/cpptools/headerpathfilter.cpp b/src/plugins/cpptools/headerpathfilter.cpp
+index b656f8e1..a830d3c3 100644
+--- a/src/plugins/cpptools/headerpathfilter.cpp
++++ b/src/plugins/cpptools/headerpathfilter.cpp
+@@ -124,8 +124,8 @@ HeaderPaths::iterator resourceIterator(HeaderPaths &headerPaths)
+ {
+     // include/c++, include/g++, libc++\include and libc++abi\include
+     static const QString cppIncludes = R"((.*/include/.*(g\+\+|c\+\+).*))"
+-                                       R"(|(.*libc\+\+/include))"
+-                                       R"(|(.*libc\+\+abi/include))"
++                                       R"(|(.*libc\+\+.*\/include))"
++                                       R"(|(.*libc\+\+abi.*\/include))";
+                                        R"(|(/usr/local/include))";
+     static const QRegularExpression includeRegExp("\\A(" + cppIncludes + ")\\z");
+ 
diff --git a/nixpkgs/pkgs/development/tools/qtcreator/0002-Dont-remove-clang-header-paths.patch b/nixpkgs/pkgs/development/tools/qtcreator/0002-Dont-remove-clang-header-paths.patch
new file mode 100644
index 000000000000..b0427e94c7c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/qtcreator/0002-Dont-remove-clang-header-paths.patch
@@ -0,0 +1,12 @@
+diff --git a/src/plugins/cpptools/headerpathfilter.cpp b/src/plugins/cpptools/headerpathfilter.cpp
+index a830d3c3..80e2f933 100644
+--- a/src/plugins/cpptools/headerpathfilter.cpp
++++ b/src/plugins/cpptools/headerpathfilter.cpp
+@@ -157,7 +157,6 @@ void removeClangSystemHeaderPaths(HeaderPaths &headerPaths)
+ 
+ void HeaderPathFilter::tweakHeaderPaths()
+ {
+-    removeClangSystemHeaderPaths(builtInHeaderPaths);
+     removeGccInternalIncludePaths();
+ 
+     auto split = resourceIterator(builtInHeaderPaths);
diff --git a/nixpkgs/pkgs/development/tools/qtcreator/default.nix b/nixpkgs/pkgs/development/tools/qtcreator/default.nix
new file mode 100644
index 000000000000..57a0f188dc8f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/qtcreator/default.nix
@@ -0,0 +1,96 @@
+{ mkDerivation, lib, fetchurl, fetchgit, fetchpatch
+, qtbase, qtquickcontrols, qtscript, qtdeclarative, qmake, llvmPackages_8, elfutils, perf
+, withDocumentation ? false, withClangPlugins ? true
+}:
+
+with lib;
+
+let
+  # Fetch clang from qt vendor, this contains submodules like this:
+  # clang<-clang-tools-extra<-clazy.
+  clang_qt_vendor = llvmPackages_8.clang-unwrapped.overrideAttrs (oldAttrs: {
+    src = fetchgit {
+      url = "https://code.qt.io/clang/clang.git";
+      rev = "c12b012bb7465299490cf93c2ae90499a5c417d5";
+      sha256 = "0mgmnazgr19hnd03xcrv7d932j6dpz88nhhx008b0lv4bah9mqm0";
+    };
+    unpackPhase = "";
+  });
+in
+
+mkDerivation rec {
+  pname = "qtcreator";
+  version = "5.0.2";
+  baseVersion = builtins.concatStringsSep "." (lib.take 2 (builtins.splitVersion version));
+
+  src = fetchurl {
+    url = "http://download.qt-project.org/official_releases/${pname}/${baseVersion}/${version}/qt-creator-opensource-src-${version}.tar.xz";
+    sha256 = "1bf07150226da46237f26f5eaa9f090ce81ed79b9bc75e0dfa6328043e360103";
+  };
+
+  buildInputs = [ qtbase qtscript qtquickcontrols qtdeclarative elfutils.dev ] ++
+    optionals withClangPlugins [ llvmPackages_8.libclang
+                                 clang_qt_vendor
+                                 llvmPackages_8.llvm ];
+
+  nativeBuildInputs = [ qmake ];
+
+  # 0001-Fix-clang-libcpp-regexp.patch is for fixing regexp that is used to
+  # find clang libc++ library include paths. By default it's not covering paths
+  # like libc++-version, which is default name for libc++ folder in nixos.
+  # ./0002-Dont-remove-clang-header-paths.patch is for forcing qtcreator to not
+  # remove system clang include paths.
+  patches = [ ./0001-Fix-clang-libcpp-regexp.patch
+              ./0002-Dont-remove-clang-header-paths.patch ];
+
+  doCheck = true;
+
+  buildFlags = optional withDocumentation "docs";
+
+  installFlags = [ "INSTALL_ROOT=$(out)" ] ++ optional withDocumentation "install_docs";
+
+  qtWrapperArgs = [ "--set-default PERFPROFILER_PARSER_FILEPATH ${lib.getBin perf}/bin" ];
+
+  preConfigure = ''
+    substituteInPlace src/plugins/plugins.pro \
+      --replace '$$[QT_INSTALL_QML]/QtQuick/Controls' '${qtquickcontrols}/${qtbase.qtQmlPrefix}/QtQuick/Controls'
+    substituteInPlace src/libs/libs.pro \
+      --replace '$$[QT_INSTALL_QML]/QtQuick/Controls' '${qtquickcontrols}/${qtbase.qtQmlPrefix}/QtQuick/Controls'
+    '' + optionalString withClangPlugins ''
+    # Fix paths for llvm/clang includes directories.
+    substituteInPlace src/shared/clang/clang_defines.pri \
+      --replace '$$clean_path($${LLVM_LIBDIR}/clang/$${LLVM_VERSION}/include)' '${clang_qt_vendor}/lib/clang/8.0.0/include' \
+      --replace '$$clean_path($${LLVM_BINDIR})' '${clang_qt_vendor}/bin'
+
+    # Fix paths to libclang library.
+    substituteInPlace src/shared/clang/clang_installation.pri \
+      --replace 'LIBCLANG_LIBS = -L$${LLVM_LIBDIR}' 'LIBCLANG_LIBS = -L${llvmPackages_8.libclang.lib}/lib' \
+      --replace 'LIBCLANG_LIBS += $${CLANG_LIB}' 'LIBCLANG_LIBS += -lclang' \
+      --replace 'LIBTOOLING_LIBS = -L$${LLVM_LIBDIR}' 'LIBTOOLING_LIBS = -L${clang_qt_vendor}/lib' \
+      --replace 'LLVM_CXXFLAGS ~= s,-gsplit-dwarf,' '${lib.concatStringsSep "\n" ["LLVM_CXXFLAGS ~= s,-gsplit-dwarf," "    LLVM_CXXFLAGS += -fno-rtti"]}'
+  '';
+
+  preBuild = optionalString withDocumentation ''
+    ln -s ${getLib qtbase}/$qtDocPrefix $NIX_QT5_TMP/share
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/applications
+    cp share/applications/org.qt-project.qtcreator.desktop $out/share/applications
+    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/quick-lint-js/default.nix b/nixpkgs/pkgs/development/tools/quick-lint-js/default.nix
new file mode 100644
index 000000000000..82a31ea52b10
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/quick-lint-js/default.nix
@@ -0,0 +1,24 @@
+{ cmake, fetchFromGitHub, lib, ninja, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "quick-lint-js";
+  version = "2.3.0";
+
+  src = fetchFromGitHub {
+    owner = "quick-lint";
+    repo = "quick-lint-js";
+    rev = version;
+    sha256 = "1ay59pmprcswip6zzbqfy5g2rdv4lgmps8vrxay4l9w6xn9lg03v";
+  };
+
+  nativeBuildInputs = [ cmake ninja ];
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Find bugs in Javascript programs";
+    homepage = "https://quick-lint-js.com";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ratsclub ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/quicktemplate/default.nix b/nixpkgs/pkgs/development/tools/quicktemplate/default.nix
new file mode 100644
index 000000000000..4fe51d3e0463
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/quicktemplate/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "quicktemplate";
+  version = "1.6.3";
+
+  src = fetchFromGitHub {
+    owner = "valyala";
+    repo = "quicktemplate";
+    rev = "v${version}";
+    sha256 = "mQhrQcKRDtcXha7FIwCIUwWfoPGIJ5YLbA4HdatIdn8=";
+  };
+
+  vendorSha256 = null;
+
+  meta = with 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 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/quilt/default.nix b/nixpkgs/pkgs/development/tools/quilt/default.nix
new file mode 100644
index 000000000000..fec73b264819
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/quilt/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, bash
+, coreutils
+, diffstat
+, diffutils
+, findutils
+, gawk
+, gnugrep
+, gnused
+, patch
+, perl
+, unixtools
+}:
+
+stdenv.mkDerivation rec {
+
+  pname = "quilt";
+  version = "0.67";
+
+  src = fetchurl {
+    url = "mirror://savannah/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-O+O+CYfnKmw2Rni7gn4+H8wQMitWvF8CtXZpj1UBPMI=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [
+    bash
+    coreutils
+    diffstat
+    diffutils
+    findutils
+    gawk
+    gnugrep
+    gnused
+    patch
+    perl
+    unixtools.column
+    unixtools.getopt
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/quilt --prefix PATH : ${lib.makeBinPath buildInputs}
+  '';
+
+  meta = with lib; {
+    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 = licenses.gpl2Plus;
+    maintainers = with maintainers; [ smancill ];
+    platforms = platforms.all;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/rakkess/default.nix b/nixpkgs/pkgs/development/tools/rakkess/default.nix
new file mode 100644
index 000000000000..1f85917bff5b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rakkess/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "rakkess";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "corneliusweig";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-qDcSIpIS09OU2tYoBGq7BCXFkf9QWj07RvNKMjghrFU=";
+  };
+  vendorSha256 = "sha256-1/8it/djhDjbWqe36VefnRu9XuwAa/qKpZT6d2LGpJ0=";
+
+  ldflags = [ "-s" "-w" "-X github.com/corneliusweig/rakkess/internal/version.version=v${version}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/corneliusweig/rakkess";
+    changelog = "https://github.com/corneliusweig/rakkess/releases/tag/v${version}";
+    description = "Review Access - kubectl plugin to show an access matrix for k8s server resources";
+    longDescription = ''
+      Have you ever wondered what access rights you have on a provided
+      kubernetes cluster? For single resources you can use
+      `kubectl auth can-i list deployments`, but maybe you are looking for a
+      complete overview? This is what rakkess is for. It lists access rights for
+      the current user and all server resources, similar to
+      `kubectl auth can-i --list`.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rdbtools/default.nix b/nixpkgs/pkgs/development/tools/rdbtools/default.nix
new file mode 100644
index 000000000000..e2f053c1e816
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rdbtools/default.nix
@@ -0,0 +1,25 @@
+{ lib, python }:
+
+with python.pkgs;
+
+buildPythonApplication rec {
+  pname = "rdbtools";
+  version = "0.1.15";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "689e57e42f43bdc73ea4e893d9676819980d17968696826b69fbd951f59772de";
+  };
+
+  propagatedBuildInputs = [ redis python-lzf ];
+
+  # No tests in published package
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Parse Redis dump.rdb files, Analyze Memory, and Export Data to JSON";
+    homepage = "https://github.com/sripathikrishnan/redis-rdb-tools";
+    license = licenses.mit;
+    maintainers = with maintainers; [ offline ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rdocker/default.nix b/nixpkgs/pkgs/development/tools/rdocker/default.nix
new file mode 100644
index 000000000000..098d7a593148
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rdocker/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, openssh }:
+
+stdenv.mkDerivation {
+  pname = "rdocker";
+  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 : ${lib.makeBinPath [ openssh ]}
+  '';
+
+  meta = with lib; {
+    description = "Securely control a remote docker daemon CLI using ssh forwarding, no SSL setup needed";
+    homepage = "https://github.com/dvddarias/rdocker";
+    maintainers = [ 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..ee03e043dd86
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/react-native-debugger/default.nix
@@ -0,0 +1,82 @@
+{ lib, stdenv, fetchurl, unzip, cairo, xorg, gdk-pixbuf, fontconfig, pango, gnome, atk, at-spi2-atk, at-spi2-core
+, gtk3, glib, freetype, dbus, nss, nspr, alsa-lib, cups, expat, udev, makeDesktopItem
+}:
+
+let
+  rpath = lib.makeLibraryPath [
+    cairo
+    stdenv.cc.cc
+    gdk-pixbuf
+    fontconfig
+    pango
+    atk
+    gtk3
+    glib
+    freetype
+    dbus
+    nss
+    nspr
+    alsa-lib
+    cups
+    expat
+    udev
+    at-spi2-atk
+    at-spi2-core
+
+    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 {
+  pname = "react-native-debugger";
+  version = "0.12.1";
+  src = fetchurl {
+    url = "https://github.com/jhen0409/react-native-debugger/releases/download/v${version}/rn-debugger-linux-x64.zip";
+    sha256 = "sha256-DzDZmZn45gpZb/fkSssb0PtR7EVyBk44IjC57beg0RM=";
+  };
+
+  nativeBuildInputs = [ unzip ];
+  buildCommand = ''
+    shopt -s extglob
+    mkdir -p $out
+    unzip $src -d $out
+
+    mkdir $out/{lib,bin,share}
+    mv $out/{libEGL,libGLESv2,libvk_swiftshader,libffmpeg}.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" "Debugger" ];
+  };
+
+  meta = with 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; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rebazel/default.nix b/nixpkgs/pkgs/development/tools/rebazel/default.nix
new file mode 100644
index 000000000000..c28701f96a21
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rebazel/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rebazel";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "meetup";
+    repo = "rebazel";
+    rev = "v${version}";
+    hash = "sha256-v84ZXhtJpejQmP61NmP06+qrtMu/0yb7UyD7U12xlME=";
+  };
+
+  cargoSha256 = "sha256-cBAm8LyNKEVJkhZJ+QZU5XtQutb1oNvad8xH70Bi2LM=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  meta = with lib; {
+    description = "tool for expediting bazel build workflows";
+    homepage = "https://github.com/meetup/rebazel";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
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..f789ae87d8d2
--- /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
+   2.1.4
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..2d4acd724d39
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/redis-dump/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "redis-dump";
+  gemdir = ./.;
+  exes = [ "redis-dump" "redis-load" ];
+
+  passthru.updateScript = bundlerUpdateScript "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 nicknovitski ];
+    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..74e6d4e1b324
--- /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";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/reflex/default.nix b/nixpkgs/pkgs/development/tools/reflex/default.nix
new file mode 100644
index 000000000000..86576869a975
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/reflex/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+
+
+buildGoPackage rec {
+  pname = "reflex";
+  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..a31108f33812
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/reftools/default.nix
@@ -0,0 +1,32 @@
+{ buildGoModule
+, lib
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "reftools-unstable";
+  version = "2019-12-21";
+  rev = "65925cf013156409e591f7a1be4df96f640d02f4";
+
+  vendorSha256 = null;
+
+  doCheck = false;
+
+  excludedPackages = "\\(cmd/fillswitch/test-fixtures\\)";
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "davidrjenni";
+    repo = "reftools";
+    sha256 = "18jg13skqi2v2vh2k6jvazv6ymhhybangjd23xn2asfk9g6cvnjs";
+  };
+
+  meta = with lib; {
+    description = "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/regclient/default.nix b/nixpkgs/pkgs/development/tools/regclient/default.nix
new file mode 100644
index 000000000000..f54e6ca26a87
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/regclient/default.nix
@@ -0,0 +1,41 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+let bins = [ "regbot" "regctl" "regsync" ]; in
+
+buildGoModule rec {
+  pname = "regclient";
+  version = "0.3.10";
+  tag = "v${version}";
+
+  src = fetchFromGitHub {
+    owner = "regclient";
+    repo = "regclient";
+    rev = tag;
+    sha256 = "sha256-3nYVhKHNz0V0j6JlZ5Dm5TFWA2kmUhshNVUym/QWSyM=";
+  };
+  vendorSha256 = "sha256-rj4sQ8Ci2KMayJNXn+KVihOiZehk233l48Ps0yjOOE4=";
+
+  outputs = [ "out" ] ++ bins;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.VCSTag=${tag}"
+  ];
+
+  postInstall =
+    lib.concatStringsSep "\n" (
+      map (bin: ''
+        mkdir -p ''$${bin}/bin &&
+        mv $out/bin/${bin} ''$${bin}/bin/ &&
+        ln -s ''$${bin}/bin/${bin} $out/bin/
+      '') bins
+    );
+
+  meta = with lib; {
+    description = "Docker and OCI Registry Client in Go and tooling using those libraries";
+    homepage = "https://github.com/regclient/regclient";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/renderizer/default.nix b/nixpkgs/pkgs/development/tools/renderizer/default.nix
new file mode 100644
index 000000000000..d9987137ce65
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/renderizer/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "renderizer";
+  version = "2.0.13";
+
+  src = fetchFromGitHub {
+    owner = "gomatic";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-jl98LuEsGN40L9IfybJhLnbzoYP/XpwFVQnjrlmDL9A=";
+  };
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}" "-X main.commitHash=${src.rev}" "-X main.date=19700101T000000"
+  ];
+
+  vendorSha256 = null;
+
+  meta = with lib; {
+    description = "CLI to render Go template text files";
+    inherit (src.meta) homepage;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/reno/default.nix b/nixpkgs/pkgs/development/tools/reno/default.nix
new file mode 100644
index 000000000000..ca01f6ebfa27
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/reno/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, git
+, gnupg1
+, python3Packages
+}:
+
+with python3Packages; buildPythonApplication rec {
+  pname = "reno";
+  version = "3.1.0";
+
+  # Must be built from python sdist because of versioning quirks
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "2510e3aae4874674187f88f22f854e6b0ea1881b77039808a68ac1a5e8ee69b6";
+  };
+
+  propagatedBuildInputs = [
+    dulwich
+    pbr
+    pyyaml
+    setuptools  # required for finding pkg_resources at runtime
+  ];
+
+  checkInputs = [
+    # Python packages
+    pytestCheckHook
+    docutils
+    fixtures
+    sphinx
+    testtools
+    testscenarios
+
+    # Required programs to run all tests
+    git
+    gnupg1
+  ];
+
+  # remove b/c doesn't list all dependencies, and requires a few packages not in nixpkgs
+  postPatch = ''
+    rm test-requirements.txt
+  '';
+
+  disabledTests = [
+    "test_build_cache_db" # expects to be run from a git repository
+  ];
+
+  # verify executable
+  postCheck = ''
+    $out/bin/reno -h
+  '';
+
+  meta = with lib; {
+    description = "Release Notes Manager";
+    homepage = "https://docs.openstack.org/reno/latest";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ drewrisinger guillaumekoenig ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rep/default.nix b/nixpkgs/pkgs/development/tools/rep/default.nix
new file mode 100644
index 000000000000..0b1294abd1ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rep/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, asciidoc-full }:
+
+stdenv.mkDerivation rec {
+  pname = "rep";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "eraserhd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "pqmISVm3rYGxRuwKieVpRwXE8ufWnBHEA6h2hrob51s=";
+  };
+
+  nativeBuildInputs = [
+    asciidoc-full
+  ];
+
+  postPatch = ''
+    substituteInPlace rc/rep.kak --replace '$(rep' '$('"$out/bin/rep"
+  '';
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    description = "Single-shot nREPL client";
+    homepage = "https://github.com/eraserhd/rep";
+    license = licenses.epl10;
+    platforms = platforms.all;
+    maintainers = [ maintainers.eraserhd ];
+  };
+}
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..4e95b0b4bc1c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/repository-managers/nexus/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre_headless, gawk }:
+
+stdenv.mkDerivation rec {
+  pname = "nexus";
+  version = "3.37.3-02";
+
+  src = fetchurl {
+    url = "https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-${version}-unix.tar.gz";
+    sha256 = "sha256-wdtDGQjFp2tEAVxVXW70UXq/CoaET6/+4PXWxiNZMS0=";
+  };
+
+  preferLocalBuild = true;
+
+  sourceRoot = "${pname}-${version}";
+
+  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 "${lib.makeBinPath [ gawk ]}"
+
+    runHook postInstall
+  '';
+
+  meta = with 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 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/rgp/default.nix b/nixpkgs/pkgs/development/tools/rgp/default.nix
new file mode 100644
index 000000000000..2ac48148c788
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rgp/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, stdenv
+, makeWrapper
+, fetchurl
+, autoPatchelfHook
+, dbus
+, fontconfig
+, freetype
+, glib
+, libGLU
+, libglvnd
+, libX11
+, libxcb
+, libXi
+, ncurses
+, qtbase
+, qtdeclarative
+, zlib
+}:
+
+let
+  buildNum = "2022-01-18-884";
+in
+stdenv.mkDerivation rec {
+  pname = "rgp";
+  version = "1.12";
+
+  src = fetchurl {
+    url = "https://gpuopen.com/download/radeon-developer-tool-suite/RadeonDeveloperToolSuite-${buildNum}.tgz";
+    sha256 = "88ot16N8XtRlDCP+zIaOqG5BuR0OyG/0u1NEXsun/nY=";
+  };
+
+  nativeBuildInputs = [ makeWrapper autoPatchelfHook ];
+
+  buildInputs = [
+    dbus
+    fontconfig
+    freetype
+    glib
+    libGLU
+    libglvnd
+    libX11
+    libxcb
+    libXi
+    ncurses
+    qtbase
+    qtdeclarative
+    zlib
+  ];
+
+  dontWrapQtApps = true;
+
+  installPhase = ''
+    mkdir -p $out/opt/rgp $out/bin
+    cp -r . $out/opt/rgp/
+
+    chmod +x $out/opt/rgp/scripts/*
+    patchShebangs $out/opt/rgp/scripts
+
+    for prog in RadeonDeveloperPanel RadeonDeveloperService RadeonDeveloperServiceCLI RadeonGPUAnalyzer RadeonGPUProfiler rga rtda; do
+      # makeWrapper is needed so that executables are started from the opt
+      # directory, where qt.conf and other tools are
+      makeWrapper \
+        $out/opt/rgp/$prog \
+        $out/bin/$prog
+    done
+  '';
+
+  meta = with lib; {
+    description = "A tool from AMD that allows for deep inspection of GPU workloads";
+    homepage = "https://gpuopen.com/rgp/";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ Flakebi ];
+  };
+}
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..6cc063386ac7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/richgo/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "richgo";
+  version = "0.3.10";
+
+  src = fetchFromGitHub {
+    owner = "kyoh86";
+    repo = "richgo";
+    rev = "v${version}";
+    sha256 = "sha256-USHg1KXl0MOWifiVu+KdjvrbDlAh6T/ReKFKeIpVK0A=";
+  };
+
+  vendorSha256 = "sha256-O63QEo0/+m9cYktMg4+RloLuUfAlCG0eGkxpHPFg/Cw=";
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Enrich `go test` outputs with text decorations";
+    homepage = "https://github.com/kyoh86/richgo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rvolosatovs ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rnix-lsp/default.nix b/nixpkgs/pkgs/development/tools/rnix-lsp/default.nix
new file mode 100644
index 000000000000..ccc8e88dec8b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rnix-lsp/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, lib, fetchFromGitHub, rustPlatform, nix }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rnix-lsp";
+  version = "0.2.4";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "rnix-lsp";
+    rev = "v${version}";
+    sha256 = "sha256-MfD07ugYYbcRaNoLxOcH9+SPbRewNxbHJA5blCSb4EM=";
+  };
+
+  cargoSha256 = "sha256-23TJrJyfCuoOOOjZeWQnF/Ac0Xv2k6tZduuzapKvsgg=";
+
+  checkInputs = lib.optional (!stdenv.isDarwin) nix;
+
+  meta = with lib; {
+    description = "A work-in-progress language server for Nix, with syntax checking and basic completion";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rocminfo/default.nix b/nixpkgs/pkgs/development/tools/rocminfo/default.nix
new file mode 100644
index 000000000000..60ca0a51d265
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rocminfo/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, lib, fetchFromGitHub, writeScript, fetchpatch, cmake, rocm-runtime, python3, rocm-cmake, busybox, gnugrep
+  # rocminfo requires that the calling user have a password and be in
+  # the video group. If we let rocm_agent_enumerator rely upon
+  # rocminfo's output, then it, too, has those requirements. Instead,
+  # we can specify the GPU targets for this system (e.g. "gfx803" for
+  # Polaris) such that no system call is needed for downstream
+  # compilers to determine the desired target.
+, defaultTargets ? []}:
+stdenv.mkDerivation rec {
+  version = "5.0.1";
+  pname = "rocminfo";
+  src = fetchFromGitHub {
+    owner = "RadeonOpenCompute";
+    repo = "rocminfo";
+    rev = "rocm-${version}";
+    sha256 = "sha256-H9JdrDS/pbvYMKkayu/1rrXusHeXBH1CO9jYArsbCNI=";
+  };
+
+  enableParallelBuilding = true;
+  buildInputs = [ cmake rocm-cmake rocm-runtime ];
+  cmakeFlags = [
+    "-DROCM_DIR=${rocm-runtime}"
+    "-DROCRTST_BLD_TYPE=Release"
+  ];
+
+  prePatch = ''
+    sed 's,#!/usr/bin/env python3,#!${python3}/bin/python,' -i rocm_agent_enumerator
+    sed 's,lsmod | grep ,${busybox}/bin/lsmod | ${gnugrep}/bin/grep ,' -i rocminfo.cc
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp rocminfo $out/bin
+    cp rocm_agent_enumerator $out/bin
+  '' + lib.optionalString (defaultTargets != []) ''
+    echo '${lib.concatStringsSep "\n" defaultTargets}' > $out/bin/target.lst
+  '';
+
+  passthru.updateScript = writeScript "update.sh" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p curl jq common-updater-scripts
+    version="$(curl -sL "https://api.github.com/repos/RadeonOpenCompute/rocminfo/tags" | jq '.[].name | split("-") | .[1] | select( . != null )' --raw-output | sort -n | tail -1)"
+    update-source-version rocminfo "$version"
+  '';
+
+  meta = with lib; {
+    description = "ROCm Application for Reporting System Info";
+    homepage = "https://github.com/RadeonOpenCompute/rocminfo";
+    license = licenses.ncsa;
+    maintainers = with maintainers; [ lovesegfault ];
+    platforms = platforms.linux;
+  };
+}
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..ff71ebd7a01c
--- /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
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/ronn/default.nix b/nixpkgs/pkgs/development/tools/ronn/default.nix
new file mode 100644
index 000000000000..4d06db77a692
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ronn/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, bundlerEnv, bundlerUpdateScript, makeWrapper, groff, callPackage }:
+
+stdenv.mkDerivation rec {
+  pname = "ronn";
+  version = env.gems.ronn.version;
+
+  env = bundlerEnv {
+    name = "ronn-gems";
+    gemdir = ./.;
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/ronn $out/bin/ronn \
+      --set PATH ${groff}/bin
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "ronn";
+
+  passthru.tests.reproducible-html-manpage = callPackage ./test-reproducible-html.nix { };
+
+  meta = with lib; {
+    description = "markdown-based tool for building manpages";
+    homepage = "https://rtomayko.github.io/ronn/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm nicknovitski ];
+    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..534741a69938
--- /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";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ronn/test-reproducible-html.nix b/nixpkgs/pkgs/development/tools/ronn/test-reproducible-html.nix
new file mode 100644
index 000000000000..6bc9d6cdbf9f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ronn/test-reproducible-html.nix
@@ -0,0 +1,30 @@
+{ runCommand
+, diffutils
+, ronn
+}:
+runCommand "ronn-test-reproducible-html" { } ''
+  set -euo pipefail
+
+  cat > aprog.1.ronn << EOF
+  aprog
+  =====
+
+  ## AUTHORS
+
+  Vincent Haupert <veehaitch@users.noreply.github.com>
+  EOF
+
+  # We have to repeat the manpage generation a few times to be confident
+  # it is in fact reproducible.
+  for i in {1..20}; do
+    ${ronn}/bin/ronn --html --pipe aprog.1.ronn > aprog.1.html-1
+    ${ronn}/bin/ronn --html --pipe aprog.1.ronn > aprog.1.html-2
+
+    ${diffutils}/bin/diff -q aprog.1.html-1 aprog.1.html-2 \
+      || (printf 'The HTML manpage is not reproducible (round %d)' "$i" && exit 1)
+  done
+
+  echo 'The HTML manpage appears reproducible'
+
+  mkdir $out
+''
diff --git a/nixpkgs/pkgs/development/tools/roswell/0001-get-image-from-environment.patch b/nixpkgs/pkgs/development/tools/roswell/0001-get-image-from-environment.patch
new file mode 100644
index 000000000000..5eeaf514db95
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/roswell/0001-get-image-from-environment.patch
@@ -0,0 +1,25 @@
+From 40c81f684ec2014ea63a712329f61c52aebe4dba Mon Sep 17 00:00:00 2001
+From: Valentin Boettcher <hiro@protagon.space>
+Date: Wed, 4 Aug 2021 17:25:12 +0200
+Subject: [PATCH] get image from environment
+
+---
+ src/cmd-run-sbcl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/cmd-run-sbcl.c b/src/cmd-run-sbcl.c
+index a83b56c..dc472bb 100644
+--- a/src/cmd-run-sbcl.c
++++ b/src/cmd-run-sbcl.c
+@@ -12,7 +12,7 @@ char** cmd_run_sbcl(int argc,char** argv,struct sub_command* cmd) {
+   char* impl_path=impldir(arch,os,impl,version);
+   char* help=get_opt("help",0);
+   char* script=get_opt("script",0);
+-  char* image=get_opt("image",0);
++  char* image=get_opt("image",1);
+   char* program=get_opt("program",0);
+   char* dynamic_space_size=get_opt("dynamic-space-size",1);
+   char* control_stack_size=get_opt("control-stack-size",1);
+-- 
+2.32.0
+
diff --git a/nixpkgs/pkgs/development/tools/roswell/default.nix b/nixpkgs/pkgs/development/tools/roswell/default.nix
new file mode 100644
index 000000000000..89c2745e33e6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/roswell/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, curl, autoconf, automake, makeWrapper, sbcl }:
+
+stdenv.mkDerivation rec {
+  pname = "roswell";
+  version = "21.10.14.111";
+
+  src = fetchFromGitHub {
+    owner = "roswell";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-K4RDNTY8g6MNjjiwXMmYaZm0fChJ1C1eTpc0h7ja1ds=";
+  };
+
+  patches = [
+    # Load the name of the image from the environment variable so that
+    # it can be consistently overwritten. Using the command line
+    # argument in the wrapper did not work.
+    ./0001-get-image-from-environment.patch
+  ];
+
+  preConfigure = ''
+    sh bootstrap
+  '';
+
+  configureFlags = [ "--prefix=${placeholder "out"}" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/ros \
+      --set image `basename $out` \
+      --add-flags 'lisp=sbcl-bin/system sbcl-bin.version=system -L sbcl-bin' \
+      --prefix PATH : ${lib.makeBinPath [ sbcl ]} --argv0 ros
+  '';
+
+  nativeBuildInputs = [ autoconf automake makeWrapper ];
+
+  buildInputs = [ sbcl curl ];
+
+  meta = with lib; {
+    description = "Roswell is a Lisp implementation installer/manager, launcher, and much more";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hiro98 ];
+    platforms = platforms.linux;
+    homepage = "https://github.com/roswell/roswell";
+    mainProgram = "ros";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rq/default.nix b/nixpkgs/pkgs/development/tools/rq/default.nix
new file mode 100644
index 000000000000..68669e88516b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rq/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rq";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "dflemstr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0km9d751jr6c5qy4af6ks7nv3xfn13iqi03wq59a1c73rnf0zinp";
+  };
+
+  cargoSha256 = "0071q08f75qrxdkbx1b9phqpbj15r79jbh391y32acifi7hr35hj";
+
+  postPatch = ''
+    # Remove #[deny(warnings)] which is equivalent to -Werror in C.
+    # Prevents build failures when upgrading rustc, which may give more warnings.
+    substituteInPlace src/lib.rs \
+      --replace "#![deny(warnings)]" ""
+  '';
+
+  meta = with lib; {
+    description = "A tool for doing record analysis and transformation";
+    homepage = "https://github.com/dflemstr/rq";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ aristid Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rslint/default.nix b/nixpkgs/pkgs/development/tools/rslint/default.nix
new file mode 100644
index 000000000000..cff68cc07c4e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rslint/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rslint";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "rslint";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-AkSQpGbhRVmDuDAbMzx00BELpI2szJ+rjKo8Qjcug1E=";
+  };
+
+  cargoSha256 = "sha256-U8Uf7LG6+dOi+XxRpJrpy0kAqyr8fAlVchE9ZJ+ex/s=";
+
+  cargoBuildFlags = [
+    "-p" "rslint_cli"
+    "-p" "rslint_lsp"
+  ];
+
+  meta = with lib; {
+    description = "A fast, customizable, and easy to use JavaScript and TypeScript linter";
+    homepage = "https://rslint.org";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rtags/default.nix b/nixpkgs/pkgs/development/tools/rtags/default.nix
new file mode 100644
index 000000000000..6ecbe058328f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rtags/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, lib, fetchgit, cmake, llvmPackages, openssl, apple_sdk, emacs, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "rtags";
+  version = "2.38";
+  nativeBuildInputs = [ cmake pkg-config llvmPackages.llvm.dev ];
+  buildInputs = [ llvmPackages.llvm llvmPackages.libclang 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 = "1iwvp7a69sj3wqjgcnyh581qrpicxzi2lfjkxqpabpyjkl5nk7hh";
+    # 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"
+  '';
+
+  meta = {
+    description = "C/C++ client-server indexer based on clang";
+    homepage = "https://github.com/andersbakken/rtags";
+    license = lib.licenses.gpl3;
+    platforms = with lib.platforms; x86_64 ++ aarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rucksack/default.nix b/nixpkgs/pkgs/development/tools/rucksack/default.nix
new file mode 100644
index 000000000000..1aad7a5c8da1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rucksack/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, liblaxjson, cmake, freeimage }:
+
+stdenv.mkDerivation rec {
+  version = "3.1.0";
+  pname = "rucksack";
+
+  src = fetchFromGitHub {
+    owner = "andrewrk";
+    repo = "rucksack";
+    rev = version;
+    sha256 = "0bcm20hqxqnq1j0zghb9i7z9frri6bbf7rmrv5g8dd626sq07vyv";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ liblaxjson freeimage ];
+
+  meta = with lib; {
+    description = "Texture packer and resource bundler";
+    platforms = [ "i686-linux" "x86_64-linux" ]; # fails on Darwin and AArch64
+    homepage = "https://github.com/andrewrk/rucksack";
+    license = licenses.mit;
+    maintainers = [ maintainers.andrewrk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rufo/Gemfile b/nixpkgs/pkgs/development/tools/rufo/Gemfile
new file mode 100644
index 000000000000..5db4a68b13ca
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rufo/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'rufo'
diff --git a/nixpkgs/pkgs/development/tools/rufo/Gemfile.lock b/nixpkgs/pkgs/development/tools/rufo/Gemfile.lock
new file mode 100644
index 000000000000..f63ff520e687
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rufo/Gemfile.lock
@@ -0,0 +1,13 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    rufo (0.12.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  rufo
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/rufo/default.nix b/nixpkgs/pkgs/development/tools/rufo/default.nix
new file mode 100644
index 000000000000..d64173700e77
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rufo/default.nix
@@ -0,0 +1,16 @@
+{ bundlerApp, bundlerUpdateScript, lib }:
+
+bundlerApp {
+  pname = "rufo";
+  gemdir = ./.;
+  exes = [ "rufo" ];
+
+  passthru.updateScript = bundlerUpdateScript "rufo";
+
+  meta = with lib; {
+    description = "Ruby formatter";
+    homepage = "https://github.com/ruby-formatter/rufo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ andersk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rufo/gemset.nix b/nixpkgs/pkgs/development/tools/rufo/gemset.nix
new file mode 100644
index 000000000000..1c63c3f3b796
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rufo/gemset.nix
@@ -0,0 +1,12 @@
+{
+  rufo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nwasskcm0nrf7f52019x4fvxa5zckj4fcvf4cdl0qflrcwb1l9f";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/run/default.nix b/nixpkgs/pkgs/development/tools/run/default.nix
new file mode 100644
index 000000000000..45fb2b8f9578
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/run/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+buildGoModule rec {
+  pname = "run";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "TekWizely";
+    repo = "run";
+    rev = "v${version}";
+    sha256 = "17n11lqhywq4z62w2rakdq80v7mxf83rgln19vj4v4nxpwd2hjjw";
+  };
+
+  vendorSha256 = "1g5rmiiwqpm8gky9yr5f2a7zsjjmm9i12r7yxj9cz7y3rmw9sw8c";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Easily manage and invoke small scripts and wrappers";
+    homepage    = "https://github.com/TekWizely/run";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ rawkode Br1ght0ne ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rund/default.nix b/nixpkgs/pkgs/development/tools/rund/default.nix
new file mode 100644
index 000000000000..186e044318e0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rund/default.nix
@@ -0,0 +1,49 @@
+{stdenv, lib, fetchFromGitHub, ldc ? null, dcompiler ? ldc }:
+
+assert dcompiler != null;
+
+stdenv.mkDerivation rec {
+  pname = "rund";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "dragon-lang";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "10x6f1nn294r5qnpacrpcbp348dndz5fv4nz6ih55c61ckpkvgcf";
+  };
+
+  buildInputs = [ dcompiler ];
+  buildPhase = ''
+    for candidate in dmd ldmd2 gdmd; do
+      echo Checking for DCompiler $candidate ...
+      dc=$(type -P $candidate || echo "")
+      if [ ! "$dc" == "" ]; then
+        break
+      fi
+    done
+    if [ "$dc" == "" ]; then
+      exit "Error: could not find a D compiler"
+    fi
+    echo Using DCompiler $candidate
+    $dc -I=$src/src -i -run $src/make.d build --out $NIX_BUILD_TOP
+  '';
+
+  doCheck = true;
+  checkPhase = ''
+    $NIX_BUILD_TOP/rund make.d test
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv $NIX_BUILD_TOP/rund $out/bin
+  '';
+
+  meta = with lib; {
+    description = "A compiler-wrapper that runs and caches D programs";
+    homepage = "https://github.com/dragon-lang/rund";
+    license = lib.licenses.boost;
+    maintainers = with maintainers; [ jonathanmarler ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust-code-analysis/default.nix b/nixpkgs/pkgs/development/tools/rust-code-analysis/default.nix
new file mode 100644
index 000000000000..d0c9d56a25e6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust-code-analysis/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-code-analysis";
+  version = "0.0.23";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1l9qr5rvbj542fx6g6h9p38z31kvwli39vipbmd3pvic2mpi6mzx";
+  };
+
+  cargoSha256 = "sha256-++d/czDJVGzY8GvBpBKpP0Rum4J4RpT95S81IRUWY2M=";
+
+  cargoBuildFlags = [ "--workspace" ];
+
+  meta = with lib; {
+    description = "Analyze and collect metrics on source code";
+    homepage = "https://github.com/mozilla/rust-code-analysis";
+    license = with licenses; [
+      mit # grammars
+      mpl20 # code
+    ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rust-code-analysis-cli";
+  };
+}
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..444db1173225
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/bindgen/default.nix
@@ -0,0 +1,47 @@
+{ rust-bindgen-unwrapped, zlib, bash, runCommand, runCommandCC }:
+let
+  clang = rust-bindgen-unwrapped.clang;
+  self = runCommand "rust-bindgen-${rust-bindgen-unwrapped.version}"
+    {
+      #for substituteAll
+      inherit bash;
+      unwrapped = rust-bindgen-unwrapped;
+      libclang = clang.cc.lib;
+      meta = rust-bindgen-unwrapped.meta // {
+        longDescription = rust-bindgen-unwrapped.meta.longDescription + ''
+          This version of bindgen is wrapped with the required compiler flags
+          required to find the c and c++ standard libary, as well as the libraries
+          specified in the buildInputs of your derivation.
+        '';
+      };
+      passthru.tests = {
+        simple-c = runCommandCC "simple-c-bindgen-tests" { } ''
+          echo '#include <stdlib.h>' > a.c
+          ${self}/bin/bindgen a.c --whitelist-function atoi | tee output
+          grep atoi output
+          touch $out
+        '';
+        simple-cpp = runCommandCC "simple-cpp-bindgen-tests" { } ''
+          echo '#include <cmath>' > a.cpp
+          ${self}/bin/bindgen a.cpp --whitelist-function erf -- -xc++ | tee output
+          grep erf output
+          touch $out
+        '';
+        with-lib = runCommandCC "zlib-bindgen-tests" { buildInputs = [ zlib ]; } ''
+          echo '#include <zlib.h>' > a.c
+          ${self}/bin/bindgen a.c --whitelist-function compress | tee output
+          grep compress output
+          touch $out
+        '';
+      };
+    }
+    # if you modify the logic to find the right clang flags, also modify rustPlatform.bindgenHook
+    ''
+    mkdir -p $out/bin
+    export cincludes="$(< ${clang}/nix-support/cc-cflags) $(< ${clang}/nix-support/libc-cflags)"
+    export cxxincludes="$(< ${clang}/nix-support/libcxx-cxxflags)"
+    substituteAll ${./wrapper.sh} $out/bin/bindgen
+    chmod +x $out/bin/bindgen
+  '';
+in
+self
diff --git a/nixpkgs/pkgs/development/tools/rust/bindgen/unwrapped.nix b/nixpkgs/pkgs/development/tools/rust/bindgen/unwrapped.nix
new file mode 100644
index 000000000000..65ce8e20bc0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/bindgen/unwrapped.nix
@@ -0,0 +1,63 @@
+{ lib, fetchFromGitHub, rustPlatform, clang, rustfmt, writeTextFile
+, runtimeShell
+, bash
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-bindgen-unwrapped";
+  version = "0.59.2";
+
+  RUSTFLAGS = "--cap-lints warn"; # probably OK to remove after update
+
+  src = fetchFromGitHub {
+    owner = "rust-lang";
+    repo = "rust-bindgen";
+    rev = "v${version}";
+    sha256 = "sha256-bJYdyf5uZgWe7fQ80/3QsRV0qyExYn6P9UET3tzwPFs=";
+  };
+
+  cargoSha256 = "sha256-RKZY5vf6CSFaKweuuNkeFF0ZXlSUibAkcL/YhkE0MoQ=";
+
+  buildInputs = [ clang.cc.lib ];
+
+  preConfigure = ''
+    export LIBCLANG_PATH="${clang.cc.lib}/lib"
+  '';
+
+  doCheck = true;
+  checkInputs =
+    let fakeRustup = writeTextFile {
+      name = "fake-rustup";
+      executable = true;
+      destination = "/bin/rustup";
+      text = ''
+        #!${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 .
+  '';
+
+  passthru = { inherit clang; };
+
+  meta = with lib; {
+    description = "Automatically generates Rust FFI bindings to C (and some C++) libraries";
+    longDescription = ''
+      Bindgen takes a c or c++ header file and turns them into
+      rust ffi declarations.
+    '';
+    homepage = "https://github.com/rust-lang/rust-bindgen";
+    license = with licenses; [ bsd3 ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ johntitor 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..b7110385c26d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/bindgen/wrapper.sh
@@ -0,0 +1,36 @@
+#!@bash@/bin/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="@cxxincludes@"
+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" @unwrapped@/bin/bindgen "$@" $sep $cxxflags @cincludes@ $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-all-features/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-all-features/default.nix
new file mode 100644
index 000000000000..3d36b42ebe7c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-all-features/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-all-features";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "frewsxcv";
+    repo = pname;
+    rev = version;
+    sha256 = "1pdr34ygc0qmh0dyrw1qcrh1vgg9jv9lm6ypl3fgjzz7npdj1dw4";
+  };
+
+  cargoSha256 = "sha256-BsRJo55gYT8OkDUBepWq48sW7QPt5OZkm8RR9f7HqZY=";
+
+  meta = with lib; {
+    description = "A Cargo subcommand to build and test all feature flag combinations";
+    homepage = "https://github.com/frewsxcv/cargo-all-features";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
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..68d5a256bbf4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-asm/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-asm";
+  version = "2019-12-24";
+
+  src = fetchFromGitHub {
+    owner = "gnzlbg";
+    repo = "cargo-asm";
+    rev = "577f890ebd4a09c8265710261e976fe7bfce8668";
+    sha256 = "1f6kzsmxgdms9lq5z9ynnmxymk9k2lzlp3caa52wqjvdw1grw0rb";
+  };
+
+  cargoSha256 = "1c22aal3i7zbyxr2c41fimfx13fwp9anmhh641951yd7cqb8xij2";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  # Test checks against machine code output, which fails with some
+  # LLVM/compiler versions.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Display the assembly or LLVM-IR generated for Rust source code";
+    homepage = "https://github.com/gnzlbg/cargo-asm";
+    license = licenses.mit;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-binutils/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-binutils/default.nix
new file mode 100644
index 000000000000..d2f5471f3672
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-binutils/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-binutils";
+  version = "0.3.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-1sJ+vi78lZsYEQBDyUzifdiU47R1Z6Y8ejNI9h5U+Ao=";
+  };
+
+  cargoSha256 = "sha256-kZhxKwSEI24LNJ9lPPjtX5etE0XeqaVN7h3HTzpoAY0=";
+
+  meta = with lib; {
+    description = "Cargo subcommands to invoke the LLVM tools shipped with the Rust toolchain";
+    longDescription = ''
+      In order for this to work, you either need to run `rustup component add llvm-tools-preview` or install the `llvm-tools-preview` component using your Nix library (e.g. nixpkgs-mozilla, or rust-overlay)
+    '';
+    homepage = "https://github.com/rust-embedded/cargo-binutils";
+    changelog = "https://github.com/rust-embedded/cargo-binutils/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ stupremee ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/0001-dynamically-patchelf-binaries.patch b/nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/0001-dynamically-patchelf-binaries.patch
new file mode 100644
index 000000000000..6a4967e96054
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/0001-dynamically-patchelf-binaries.patch
@@ -0,0 +1,56 @@
+diff --git a/src/toolchains.rs b/src/toolchains.rs
+index 4d85e7c..b1353c6 100644
+--- a/src/toolchains.rs
++++ b/src/toolchains.rs
+@@ -259,6 +259,8 @@ impl Toolchain {
+             .map_err(InstallError::Download)?;
+         }
+
++        nix_patchelf(tmpdir.path().to_path_buf())
++            .expect("failed to patch toolchain for NixOS");
+         fs::rename(tmpdir.into_path(), dest).map_err(InstallError::Move)?;
+
+         Ok(())
+@@ -557,3 +559,42 @@ pub(crate) fn download_tarball(
+     }
+     download_tar_gz(client, name, &format!("{}.gz", url,), strip_prefix, dest)
+ }
++
++fn nix_patchelf(mut toolchain_path: PathBuf) -> Result<(), Error> {
++    toolchain_path.push("bin");
++
++    for entry in toolchain_path.read_dir()? {
++        let entry = entry?;
++        if !entry.file_type()?.is_file() {
++            continue;
++        }
++
++        eprintln!("info: you seem to be running NixOS. Attempting to patch {}",
++                  entry.path().to_str().unwrap());
++        let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++            .arg("--set-interpreter")
++            .arg("@dynamicLinker@")
++            .arg(entry.path())
++            .output();
++    }
++
++    toolchain_path.pop();
++    toolchain_path.push("lib");
++
++    for entry in toolchain_path.read_dir()? {
++        let entry = entry?;
++        if !entry.file_type()?.is_file() {
++            continue;
++        }
++
++        eprintln!("info: you seem to be running NixOS. Attempting to patch {}",
++                  entry.path().to_str().unwrap());
++        let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++            .arg("--set-rpath")
++            .arg("@libPath@")
++            .arg(entry.path())
++            .output();
++    }
++
++    Ok(())
++}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/default.nix
new file mode 100644
index 000000000000..7eef0ce66299
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-bisect-rustc/default.nix
@@ -0,0 +1,56 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, runCommand
+, patchelf
+, zlib
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-bisect-rustc";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "rust-lang";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-LEmILWVU6hbh2FmdnQVV1Ob2MQvj+/lCr1hdRoTIOkI=";
+  };
+
+  patches =
+    let
+      patchelfPatch = runCommand "0001-dynamically-patchelf-binaries.patch" {
+        CC = stdenv.cc;
+        patchelf = patchelf;
+        libPath = "$ORIGIN/../lib:${lib.makeLibraryPath [ zlib ]}";
+      }
+      ''
+        export dynamicLinker=$(cat $CC/nix-support/dynamic-linker)
+        substitute ${./0001-dynamically-patchelf-binaries.patch} $out \
+          --subst-var patchelf \
+          --subst-var dynamicLinker \
+          --subst-var libPath
+      '';
+    in
+    lib.optionals stdenv.isLinux [ patchelfPatch ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  cargoSha256 = "Ls51DQ0yScRhpkuEInCfR45+/WeaUoG935w4BJvwSRk=";
+
+  meta = with lib; {
+    description = "Bisects rustc, either nightlies or CI artifacts";
+    homepage = "https://github.com/rust-lang/${pname}";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ davidtwco ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-bitbake/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-bitbake/default.nix
new file mode 100644
index 000000000000..ee29976eb985
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-bitbake/default.nix
@@ -0,0 +1,26 @@
+{ lib, pkg-config, rustPlatform, fetchFromGitHub, openssl }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-bitbake";
+  version = "0.3.15";
+
+  src = fetchFromGitHub {
+    owner = "meta-rust";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1ffjkwaqvmyz374azrv6gna19z2fcg82is2k2n2gm50isbxw2aa5";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ];
+
+  cargoSha256 = "0mm6059wjh5p8923dwz55dpwi55gq2bcmpx7kn40pq5ppkiqjiw9";
+
+  meta = with lib; {
+    description = "Cargo extension that can generate BitBake recipes utilizing the classes from meta-rust";
+    homepage = "https://github.com/meta-rust/cargo-bitbake";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ rvarago ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
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..44e06696ae84
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-bloat/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-bloat";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "RazrFalcon";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-UzMo+IqoP3GpGu7tWlrkEU1YpVLgEL7UwIU1hPmoJNg=";
+  };
+
+  cargoSha256 = "sha256-w3+ypGuVRGwC94zj/OaDUUoUbBnepGHvqulY4IVIsfo=";
+
+  meta = with 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-c/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-c/default.nix
new file mode 100644
index 000000000000..0b82c1b5a366
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-c/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, curl
+, openssl
+, stdenv
+, CoreFoundation
+, libiconv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-c";
+  version = "0.9.2";
+
+  src = fetchCrate {
+    inherit pname;
+    # this version may need to be updated along with package version
+    version = "${version}+cargo-0.55";
+    sha256 = "sha256-yh5vAtKlBvoSlJBsW2RSduSK6T8aOssM84WQMNjLZqA=";
+  };
+
+  cargoSha256 = "sha256-YikTjAeroaHyNe3ygUWRHSXJwdm2BSBV7RgIDN4suZ4=";
+
+  nativeBuildInputs = [ pkg-config (lib.getDev curl) ];
+  buildInputs = [ openssl curl ] ++ lib.optionals stdenv.isDarwin [
+    CoreFoundation
+    libiconv
+    Security
+  ];
+
+  # Ensure that we are avoiding build of the curl vendored in curl-sys
+  doInstallCheck = stdenv.hostPlatform.libc == "glibc";
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    ldd "$out/bin/cargo-cbuild" | grep libcurl.so
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "A cargo subcommand to build and install C-ABI compatibile dynamic and static libraries";
+    longDescription = ''
+      Cargo C-ABI helpers. A cargo applet that produces and installs a correct
+      pkg-config file, a static library and a dynamic library, and a C header
+      to be used by any C (and C-compatible) software.
+    '';
+    homepage = "https://github.com/lu-zero/cargo-c";
+    changelog = "https://github.com/lu-zero/cargo-c/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-cache/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-cache/default.nix
new file mode 100644
index 000000000000..b6d710bab645
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-cache/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, libiconv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-cache";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "matthiaskrgr";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-1/h9o8ldxI/Q1E6AurGfZ1xruf12g1OO5QlzMJLcEGo=";
+  };
+
+  cargoSha256 = "sha256-yUa40j1yOrczCbp9IsL1e5FlHcSEeHPAmbrA8zpuTpI=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  checkFlagsArray = [ "offline_tests" ];
+
+  meta = with lib; {
+    description = "Manage cargo cache (\${CARGO_HOME}, ~/.cargo/), print sizes of dirs and remove dirs selectively";
+    homepage = "https://github.com/matthiaskrgr/cargo-cache";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-crev/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-crev/default.nix
new file mode 100644
index 000000000000..9fc89ece06d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-crev/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv
+, fetchFromGitHub
+, rustPlatform
+, perl
+, pkg-config
+, SystemConfiguration
+, Security
+, curl
+, libiconv
+, openssl
+, git
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-crev";
+  version = "0.23.0";
+
+  src = fetchFromGitHub {
+    owner = "crev-dev";
+    repo = "cargo-crev";
+    rev = "v${version}";
+    sha256 = "sha256-iqFE3sz7cIFcd9zCFjU1PjMWVmxCRcdiiGAbirWUWMA=";
+  };
+
+  cargoSha256 = "sha256-qlqW5phw7QI5KT2uUamQFEYHZd4uzYaUuvZTG3KhrOU=";
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+    git config --global user.name "Nixpkgs Test"
+    git config --global user.email "nobody@example.com"
+  '';
+
+  nativeBuildInputs = [ perl pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ SystemConfiguration Security libiconv curl ];
+
+  checkInputs = [ git ];
+
+  meta = with lib; {
+    description = "A cryptographically verifiable code review system for the cargo (Rust) package manager";
+    homepage = "https://github.com/crev-dev/cargo-crev";
+    license = with licenses; [ asl20 mit mpl20 ];
+    maintainers = with maintainers; [ b4dm4n ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-criterion/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-criterion/default.nix
new file mode 100644
index 000000000000..d33f455c9b93
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-criterion/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-criterion";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "bheisler";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-RPix9DM6E32PhObvV3xPGrnXrrVHn3auxLUhysP8GM0=";
+  };
+
+  cargoSha256 = "sha256-L/ILHKWlcYTkbEi2qDu7tf/3NHfTl6GhW0s+fUlsW08=";
+
+  meta = with lib; {
+    description = "Cargo extension for running Criterion.rs benchmarks";
+    homepage = "https://github.com/bheisler/cargo-criterion";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ humancalico ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-cross/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-cross/default.nix
new file mode 100644
index 000000000000..ff76a755cddc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-cross/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, fetchpatch
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-cross";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "rust-embedded";
+    repo = "cross";
+    rev = "v${version}";
+    sha256 = "1py5w4kf612x4qxi190ilsrx0zzwdzk9i47ppvqblska1s47qa2w";
+  };
+
+  cargoSha256 = "sha256-zk6cbN4iSHnyoeWupufVf2yQK6aq3S99uk9lqpjCw4c=";
+
+  cargoPatches = [
+    (fetchpatch {
+      url = "https://github.com/rust-embedded/cross/commit/e86ad2e5a55218395df7eaaf91900e22b809083c.patch";
+      sha256 = "1zrcj5fm3irmlrfkgb65kp2pjkry0rg5nn9pwsk9p0i6dpapjc7k";
+    })
+  ];
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "Zero setup cross compilation and cross testing";
+    homepage = "https://github.com/rust-embedded/cross";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ otavio ];
+    mainProgram = "cross";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-deadlinks/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-deadlinks/default.nix
new file mode 100644
index 000000000000..446f3cec37d9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-deadlinks/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-deadlinks";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "deadlinks";
+    repo = pname;
+    rev = "${version}";
+    sha256 = "0s5q9aghncsk9834azn5cgnn5ms3zzyjan2rq06kaqcgzhld4cjh";
+  };
+
+  cargoSha256 = "00g06zf0m1wry0mhf098pw99kbb99d8a17985pb90yf1w74rdkh6";
+
+  checkFlags = [
+    # uses internet
+    "--skip non_existent_http_link --skip working_http_check"
+  ] ++ lib.optional (stdenv.hostPlatform.system != "x86_64-linux")
+    # assumes the target is x86_64-unknown-linux-gnu
+    "--skip simple_project::it_checks_okay_project_correctly";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Cargo subcommand to check rust documentation for broken links";
+    homepage = "https://github.com/deadlinks/cargo-deadlinks";
+    changelog = "https://github.com/deadlinks/cargo-deadlinks/blob/${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ newam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-deny/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-deny/default.nix
new file mode 100644
index 000000000000..78e7fa7b4c8d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-deny/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, zstd
+, stdenv
+, curl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-deny";
+  version = "0.11.3";
+
+  src = fetchFromGitHub {
+    owner = "EmbarkStudios";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-QpYwH9ZmD/muCGtL+9wzz4UKRyHWaga7vrjNjKz4uVQ=";
+  };
+
+  # enable pkg-config feature of zstd
+  cargoPatches = [ ./zstd-pkg-config.patch ];
+
+  cargoSha256 = "sha256-DFGCjA0AENYDs5EnQ3WDkbCEw14ndjOh7qx2ZFgNGH0=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl zstd ]
+    ++ lib.optionals stdenv.isDarwin [ curl Security ];
+
+  buildNoDefaultFeatures = true;
+
+  # tests require internet access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Cargo plugin to generate list of all licenses for a crate";
+    homepage = "https://github.com/EmbarkStudios/cargo-deny";
+    changelog = "https://github.com/EmbarkStudios/cargo-deny/blob/${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda matthiasbeyer jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-deny/zstd-pkg-config.patch b/nixpkgs/pkgs/development/tools/rust/cargo-deny/zstd-pkg-config.patch
new file mode 100644
index 000000000000..346d49e26d04
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-deny/zstd-pkg-config.patch
@@ -0,0 +1,29 @@
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -242,6 +242,7 @@ dependencies = [
+  "toml_edit",
+  "twox-hash",
+  "url",
++ "zstd",
+ ]
+ 
+ [[package]]
+@@ -1904,4 +1905,5 @@ checksum = "2141bed8922b427761470e6bbfeff255da94fa20b0bbeab0d9297fcaf71e3aa7"
+ dependencies = [
+  "cc",
+  "libc",
++ "pkg-config",
+ ]
+diff --git a/Cargo.toml b/Cargo.toml
+index 8f24673..b59c350 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -92,6 +92,8 @@ twox-hash = { version = "1.5", default-features = false }
+ # Url parsing/manipulation
+ url = "2.1"
+ 
++zstd = { version = "*", features = ["pkg-config"] }
++
+ [dev-dependencies]
+ # Avoid loading license check many times
+ lazy_static = "1.4.0"
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-depgraph/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-depgraph/default.nix
new file mode 100644
index 000000000000..ab45d053477c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-depgraph/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromSourcehut }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-depgraph";
+  version = "1.2.2";
+
+  src = fetchFromSourcehut {
+    owner = "~jplatte";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Zt60F43hhFSj9zfAkEbgRqODvBRmzn04dHMijbz+uX0=";
+  };
+
+  cargoSha256 = "sha256-mMXIiAfYBqOS3z4735T9dB9TEo7Ph2JCNq0QfyetxJg=";
+
+  meta = with lib; {
+    description = "Create dependency graphs for cargo projects using `cargo metadata` and graphviz";
+    homepage = "https://sr.ht/~jplatte/cargo-depgraph";
+    changelog = "https://git.sr.ht/~jplatte/cargo-depgraph/tree/v${version}/item/CHANGELOG.md";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-dephell/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-dephell/default.nix
new file mode 100644
index 000000000000..0fe9a0605401
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-dephell/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchFromGitHub, pkg-config, openssl, stdenv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-dephell";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "mimoo";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1v3psrkjhgbkq9lm3698ac77qgk090jbly4r187nryj0vcmf9s1l";
+  };
+
+  cargoSha256 = "0fwj782dbyj3ps16hxmq61drf8714863jb0d3mhivn3zlqawyyil";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "A tool to analyze the third-party dependencies imported by a rust crate or rust workspace";
+    homepage = "https://github.com/mimoo/cargo-dephell";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-diet/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-diet/default.nix
new file mode 100644
index 000000000000..471b7454684a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-diet/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-diet";
+  version = "1.2.3";
+
+  src = fetchFromGitHub {
+    owner = "the-lean-crate";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-R40cggAdNbd8/+fG87PYHIbmgIsrhEwQ9ocB4p22bL4=";
+  };
+
+  cargoSha256 = "sha256-lgCP5P7X9B4sTND+p8repZB63c64o1QuozJoz6KQXiE=";
+
+  meta = with lib; {
+    description = "Help computing optimal include directives for your Cargo.toml manifest";
+    homepage = "https://github.com/the-lean-crate/cargo-diet";
+    changelog = "https://github.com/the-lean-crate/cargo-diet/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-embed/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-embed/default.nix
new file mode 100644
index 000000000000..70b34dc35062
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-embed/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, libusb1
+, libftdi1
+, pkg-config
+, rustfmt
+, AppKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-embed";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "probe-rs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1is58n8y5lvnvzkbnh3gfk3r3f2r1w4l2qjdp2k8373apxzjxdvr";
+  };
+
+  cargoSha256 = "0kalwigck9lf734zdpzg01sf2zzyrgdgq2rg3qj7hy94gfxlsk63";
+
+  nativeBuildInputs = [ pkg-config rustfmt ];
+  buildInputs = [ libusb1 libftdi1 ] ++ lib.optionals stdenv.isDarwin [ AppKit ];
+
+  buildFeatures = [ "ftdi" ];
+
+  meta = with lib; {
+    description = "A cargo extension for working with microcontrollers";
+    homepage = "https://probe.rs/";
+    changelog = "https://github.com/probe-rs/cargo-embed/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ fooker ];
+  };
+}
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..860d53717098
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-expand/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-expand";
+  version = "1.0.16";
+
+  src = fetchFromGitHub {
+    owner = "dtolnay";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-NhBUN+pf+j/4IozFDEb+XZ1ijSk6dNvCANyez823a0c=";
+  };
+
+  cargoSha256 = "sha256-7rqtxyoo1SQ7Rae04+b+B0JgCKeW0p1j7bZzPpJ8+ks=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  meta = with 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 ];
+    maintainers = with maintainers; [ xrelkd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-feature/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-feature/default.nix
new file mode 100644
index 000000000000..938dfab2982e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-feature/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-feature";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "Riey";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-9TP67YtvRtgLtsKACL5xjXq5kZtYpTWsTqQsbOKPwtY=";
+  };
+
+  cargoSha256 = "sha256-MkLsQebQdqfUuARIdQZg47kMPudstJUgRQgUuovoLes=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  meta = with lib; {
+    description = "Allows conveniently modify features of crate";
+    homepage = "https://github.com/Riey/cargo-feature";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ riey ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-flash/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-flash/default.nix
new file mode 100644
index 000000000000..0f90f4800439
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-flash/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, libusb1
+, pkg-config
+, rustfmt
+, AppKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-flash";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "probe-rs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0s49q8x0iscy9rgn9zgymyg39cqm251a99m341znjn55lap3pdl8";
+  };
+
+  cargoSha256 = "0rb4s5bwjs7hri636r2viva96a6z9qjv9if6i220j9yglrvi7c8i";
+
+  nativeBuildInputs = [ pkg-config rustfmt ];
+  buildInputs = [ libusb1 ] ++ lib.optionals stdenv.isDarwin [ AppKit ];
+
+  meta = with lib; {
+    description = "A cargo extension for working with microcontrollers";
+    homepage = "https://probe.rs/";
+    changelog = "https://github.com/probe-rs/cargo-flash/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ fooker ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-fund/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-fund/default.nix
new file mode 100644
index 000000000000..43655fd6a89e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-fund/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, rustPlatform, Security, curl, openssl, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-fund";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "acfoltzer";
+    repo = pname;
+    rev = version;
+    sha256 = "1jim5bgq3fc33391qpa1q1csbzqf4hk1qyfzwxpcs5pb4ixb6vgk";
+  };
+
+  cargoSha256 = "1c2zryxn1bbg3ksp8azk9xmwfgwr6663hlmdv9c358hzqdfp9hli";
+
+  # The tests need a GitHub API token.
+  doCheck = false;
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security libiconv curl ];
+
+  meta = with lib; {
+    description = "Discover funding links for your project's dependencies";
+    homepage = "https://github.com/acfoltzer/cargo-fund";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ johntitor ];
+  };
+}
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..5893fd2c828c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-fuzz/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, rustPlatform, stdenv, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-fuzz";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "rust-fuzz";
+    repo = "cargo-fuzz";
+    rev = "v${version}";
+    sha256 = "sha256-vjKo0L7sYrC7qWdOGSJDWpL04tmNjO3QRwAIRHN/DiI=";
+  };
+
+  cargoSha256 = "sha256-8XVRMwrBEJ1duQtXzNpuN5wJPUgziJlka4n/nAIqeEc=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command line helpers for fuzzing";
+    homepage = "https://github.com/rust-fuzz/cargo-fuzz";
+    license = with licenses; [ mit asl20 ];
+    maintainers = [ maintainers.ekleog ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-geiger/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-geiger/default.nix
new file mode 100644
index 000000000000..28511223be04
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-geiger/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, lib, fetchFromGitHub
+, rustPlatform, pkg-config, openssl
+# darwin dependencies
+, Security, CoreFoundation, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-geiger";
+  version = "0.11.2";
+
+  src = fetchFromGitHub {
+    owner = "rust-secure-code";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "sha256-KkOLDSnLneal3m+CrYKKIoeO61rjXEDq4GK3kPwQxj4=";
+  };
+  cargoSha256 = "sha256-i7xDEzZAN2ubW1Q6MhY+xsb9XiUajNDHLdtDuO5r6jA=";
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security libiconv ];
+  nativeBuildInputs = [ pkg-config ];
+
+  # FIXME: Use impure version of CoreFoundation because of missing symbols.
+  # CFURLSetResourcePropertyForKey is defined in the headers but there's no
+  # corresponding implementation in the sources from opensource.apple.com.
+  preConfigure = lib.optionalString stdenv.isDarwin ''
+    export NIX_CFLAGS_COMPILE="-F${CoreFoundation}/Library/Frameworks $NIX_CFLAGS_COMPILE"
+  '';
+
+  # skip tests with networking or other failures
+  checkFlags = [
+    "--skip serialize_test2_quick_report"
+    "--skip serialize_test3_quick_report"
+    "--skip serialize_test6_quick_report"
+    "--skip serialize_test2_report"
+    "--skip serialize_test3_report"
+    "--skip serialize_test6_report"
+    "--skip test_package::case_2"
+    "--skip test_package::case_3"
+    "--skip test_package::case_6"
+    "--skip test_package_update_readme::case_2"
+    "--skip test_package_update_readme::case_3"
+    "--skip test_package_update_readme::case_5"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/rust-secure-code/cargo-geiger";
+    changelog = "https://github.com/rust-secure-code/cargo-geiger/blob/${pname}-${version}/CHANGELOG.md";
+    description = "Detects usage of unsafe Rust in a Rust crate and its dependencies";
+    longDescription = ''
+      A cargo plugin that detects the usage of unsafe Rust in a Rust crate and
+      its dependencies. It provides information to aid auditing and guide
+      dependency selection but it can not help you decide when and why unsafe
+      code is appropriate.
+    '';
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ evanjs jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-generate/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-generate/default.nix
new file mode 100644
index 000000000000..0597b7abbecc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-generate/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security, openssl, pkg-config, libiconv, curl }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-generate";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "ashleygwilliams";
+    repo = "cargo-generate";
+    rev = "v${version}";
+    sha256 = "sha256-VMcyBa8bjH4n8hKS+l5xcaQCBYkBVWjDV2uk4JmhxFs=";
+  };
+
+  cargoSha256 = "sha256-9RMzvZLGRFGJ0Bw2is2aeRCoLzHsZZ6LCfoCTrKjHbo=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl  ]
+    ++ lib.optionals stdenv.isDarwin [ Security libiconv curl ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d) USER=nixbld
+    git config --global user.name Nixbld
+    git config --global user.email nixbld@localhost.localnet
+  '';
+
+  # Exclude some tests that don't work in sandbox:
+  # - favorites_default_to_git_if_not_defined: requires network access to github.com
+  # - should_canonicalize: the test assumes that it will be called from the /Users/<project_dir>/ folder on darwin variant.
+  checkFlags = [ "--skip favorites::favorites_default_to_git_if_not_defined" ]
+      ++ lib.optionals stdenv.isDarwin [ "--skip git::should_canonicalize" ];
+
+  meta = with lib; {
+    description = "cargo, make me a project";
+    homepage = "https://github.com/ashleygwilliams/cargo-generate";
+    license = licenses.asl20;
+    maintainers = [ maintainers.turbomack ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-inspect/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-inspect/default.nix
new file mode 100644
index 000000000000..1644929074bb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-inspect/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, rustPlatform, fetchFromGitHub, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-inspect";
+  version = "0.10.3";
+
+  src = fetchFromGitHub {
+    owner = "mre";
+    repo = pname;
+    rev = version;
+    sha256 = "026vc8d0jkc1d7dlp3ldmwks7svpvqzl0k5niri8a12cl5w5b9hj";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  cargoSha256 = "069i8ydrp1pssnjq7d6mydwr7xh2cmcpzpf8bzd6nfjr6xx1pipr";
+
+  meta = with lib; {
+    description = "See what Rust is doing behind the curtains";
+    homepage = "https://github.com/mre/cargo-inspect";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ minijackson ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-insta/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-insta/default.nix
new file mode 100644
index 000000000000..93593a01f5ee
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-insta/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub, libiconv, stdenv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-insta";
+  version = "1.11.0";
+
+  src = fetchFromGitHub {
+    owner = "mitsuhiko";
+    repo = "insta";
+    rev = version;
+    sha256 = "sha256-Vi3FwetCpL8qMniaXypw1EYVHh6lfZu6GjDXPDKda5c=";
+  };
+
+  sourceRoot = "source/cargo-insta";
+  cargoSha256 = "sha256-Bjh9we0OD8kqMJtovO1yw9Yta5u93dlYMRsxPdErkaY=";
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  meta = with lib; {
+    description = "A Cargo subcommand for snapshot testing";
+    homepage = "https://github.com/mitsuhiko/insta";
+    license = licenses.asl20;
+    maintainers = with lib.maintainers; [ oxalica ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-limit/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-limit/default.nix
new file mode 100644
index 000000000000..da5f019d660a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-limit/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, nix-update-script
+, stdenv
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-limit";
+  version = "0.0.9";
+
+  src = fetchFromGitHub {
+    owner = "alopatindev";
+    repo = "cargo-limit";
+    rev = version;
+    sha256 = "sha256-GRitz9LOdZhbakbLZI2BUfZjqXLrsMK2MQJgixiEHaA=";
+  };
+
+  cargoSha256 = "sha256-uiANH9HOvy41FiABTTx2D9Rz1z/F7eITc5aiofaMSfI=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "Cargo subcommand \"limit\": reduces the noise of compiler messages";
+    homepage = "https://github.com/alopatindev/cargo-limit";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ otavio ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-llvm-lines/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-llvm-lines/default.nix
new file mode 100644
index 000000000000..eede871e38c6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-llvm-lines/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-llvm-lines";
+  version = "0.4.14";
+
+  src = fetchFromGitHub {
+    owner = "dtolnay";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-ooFkw6QlMnlvyHPMkqAZUDaOHH8dktzbob5WevQsYXQ=";
+  };
+
+  cargoSha256 = "sha256-MgtFNrSjSvyjp1uD/OueSh+MCYSvZCyDabP20pI/8HI=";
+
+  meta = with lib; {
+    description = "Count the number of lines of LLVM IR across all instantiations of a generic function";
+    homepage = "https://github.com/dtolnay/cargo-llvm-lines";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
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..2e2ff56fd050
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-make/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchurl
+, runCommand
+, fetchCrate
+, rustPlatform
+, Security
+, openssl
+, pkg-config
+, SystemConfiguration
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-make";
+  version = "0.35.10";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-l34sThvzhAW8VfxVuv+UGVil7yOvsOiWSqr/N91V8C8=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security SystemConfiguration libiconv ];
+
+  cargoSha256 = "sha256-974Gqtv+g32iHrIqIzqwBsE8frzmjF0Ma/hSMGzMaGs=";
+
+  # 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 lib; {
+    description = "A Rust task runner and build tool";
+    homepage = "https://github.com/sagiegurari/cargo-make";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ xrelkd ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-modules/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-modules/default.nix
new file mode 100644
index 000000000000..5ef0168383c5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-modules/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, CoreFoundation, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-modules";
+  version = "0.5.6";
+
+  src = fetchFromGitHub {
+    owner = "regexident";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-bLljwxNrCmg1ZWfSninIxJIFIn2oHY8dmbHYPdwtD+M=";
+  };
+
+  cargoSha256 = "sha256-heyVeQwEIOA9qtyXnHY8lPo06YgIUJaWCtaht9dWLoo=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    CoreFoundation
+    CoreServices
+  ];
+
+  meta = with lib; {
+    description = "A cargo plugin for showing a tree-like overview of a crate's modules";
+    homepage = "https://github.com/regexident/cargo-modules";
+    license = with licenses; [ mpl20 ];
+    maintainers = with maintainers; [ figsoda rvarago ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-msrv/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-msrv/default.nix
new file mode 100644
index 000000000000..e3694b310837
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-msrv/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, nix-update-script
+, pkg-config
+, rustup
+, openssl
+, stdenv
+, libiconv
+, Security
+, makeWrapper
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-msrv";
+  version = "0.15.1";
+
+  src = fetchFromGitHub {
+    owner = "foresterre";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-rmWPkxxrpVamYHII0xkZq62ubL3/jrcqXUvFH9VuNtg=";
+  };
+
+  cargoSha256 = "sha256-/Bspy94uIP/e4uJY8qo+UPK1tnPjglxiMWeYWx2qoHk=";
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  # Integration tests fail
+  doCheck = false;
+
+  buildInputs = if stdenv.isDarwin
+    then [ libiconv Security ]
+    else [ openssl ];
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+
+  # Depends at run-time on having rustup in PATH
+  postInstall = ''
+    wrapProgram $out/bin/cargo-msrv --prefix PATH : ${lib.makeBinPath [ rustup ]};
+  '';
+
+  meta = with lib; {
+    description = "Cargo subcommand \"msrv\": assists with finding your minimum supported Rust version (MSRV)";
+    homepage = "https://github.com/foresterre/cargo-msrv";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ otavio ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-play/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-play/default.nix
new file mode 100644
index 000000000000..a4937ee412b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-play/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-play";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "fanzeyi";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "01r00akfmvpzp924yqqybd9s0pwiwxy8vklsg4m9ypzljc3nlv02";
+  };
+
+  cargoSha256 = "1xkscd9ci9vlkmbsaxvavrna1xpi16xcf9ri879lw8bdh7sa3nx8";
+
+  # these tests require internet access
+  checkFlags = [
+    "--skip=dtoa_test"
+    "--skip=infer_override"
+  ];
+
+  meta = with lib; {
+    description = "Run your rust code without setting up cargo";
+    homepage = "https://github.com/fanzeyi/cargo-play";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-raze/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-raze/default.nix
new file mode 100644
index 000000000000..0299fe516d94
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-raze/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform
+, pkg-config, curl, libgit2, openssl, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-raze";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "161m4y6i4sgqi9mg3f3348f5cr0m45vhix4a4bcw54wnmhiklnnl";
+  };
+  sourceRoot = "source/impl";
+
+  cargoSha256 = "1vlywdq0bx6b1k3w1grisca0hvv2s4s88yxq7bil8nhm5ghjgxdr";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ curl libgit2 openssl ]
+    ++ lib.optional stdenv.isDarwin Security;
+
+  # thread 'main' panicked at 'Cannot ping mock server.: "cannot send request to mock server: cannot send request to mock server: failed to resolve host name"'
+  # __darwinAllowLocalNetworking does not fix the panic
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "Generate Bazel BUILD files from Cargo dependencies";
+    homepage = "https://github.com/google/cargo-raze";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ elasticdog ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-readme/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-readme/default.nix
new file mode 100644
index 000000000000..fb45763b50be
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-readme/default.nix
@@ -0,0 +1,34 @@
+{ lib, rustPlatform, fetchFromGitHub, fetchpatch }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-readme";
+  version = "3.2.0";
+
+  src = fetchFromGitHub {
+    owner = "livioribeiro";
+    repo = pname;
+    # Git tag is missing, see upstream issue:
+    # https://github.com/livioribeiro/cargo-readme/issues/61
+    rev = "cf66017c0120ae198210ebaf58a0be6a78372974";
+    sha256 = "sha256-/ufHHM13L83M3UYi6mjdhIjgXx7bZgzvR/X02Zsx7Fw=";
+  };
+
+  cargoSha256 = "sha256-Isd05qOuVBNfXOI5qsaDOhjF7QIKAG5xrZsBFK2PpQQ=";
+
+  patches = [
+    (fetchpatch {
+      # Fixup warning thrown at build when running test-suite
+      # unused return, see upstream PR:
+      # https://github.com/livioribeiro/cargo-readme/pull/62
+      url = "https://github.com/livioribeiro/cargo-readme/commit/060f2daaa2b2cf981bf490dc36bcc6527545ea03.patch";
+      sha256 = "sha256-wlAIgTI9OqtA/Jnswoqp7iOj+1zjrUZA7JpHUiF/n+s=";
+    })
+  ];
+
+  meta = with lib; {
+    description = "Generate README.md from docstrings";
+    homepage = "https://github.com/livioribeiro/cargo-readme";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ baloo ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-rr/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-rr/default.nix
new file mode 100644
index 000000000000..f2099a855ccb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-rr/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, genericUpdater
+, common-updater-scripts
+, makeWrapper
+, rr
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-rr";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "danielzfranklin";
+    repo = pname;
+    rev = version;
+    sha256 = "01m8fdz9as2fxnzs9csvbc76qxzbb98a66dh7w4a5q855v38g0zy";
+  };
+
+  cargoSha256 = "0fjs76n6bbbv83s213h2dgsszgxy4hbjsclyk9m81b3bfbmmb9sa";
+
+  passthru = {
+    updateScript = genericUpdater {
+      inherit pname version;
+      versionLister = "${common-updater-scripts}/bin/list-git-tags ${src.meta.homepage}";
+    };
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/cargo-rr --prefix PATH : ${lib.makeBinPath [ rr ]}
+  '';
+
+  meta = with lib; {
+    description = "Cargo subcommand \"rr\": a light wrapper around rr, the time-travelling debugger";
+    homepage = "https://github.com/danielzfranklin/cargo-rr";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ otavio ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-sort/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-sort/default.nix
new file mode 100644
index 000000000000..428616e3e995
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-sort/default.nix
@@ -0,0 +1,23 @@
+{ fetchFromGitHub, lib, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-sort";
+  version = "1.0.7";
+
+  src = fetchFromGitHub {
+    owner = "devinr528";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-jESz3SujznGLJeR23LvxORNC0Tj4VcEzdzhIRwyvjd0=";
+  };
+
+  cargoSha256 = "sha256-1iOZ1EEP4bObTweTN4Wjtb9Y9ysJQ/9xnNpprxKIaho=";
+
+  meta = with lib; {
+    description = "A tool to check that your Cargo.toml dependencies are sorted alphabetically";
+    homepage = "https://github.com/devinr528/cargo-sort";
+    changelog = "https://github.com/devinr528/cargo-sort/blob/v${version}/changelog.md";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-spellcheck/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-spellcheck/default.nix
new file mode 100644
index 000000000000..3b579d3ef9f0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-spellcheck/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, libclang
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-spellcheck";
+  version = "0.10.1";
+
+  src = fetchFromGitHub {
+    owner = "drahnr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-AKk25/j9Ao7ss8+2x+A5ohZ4P1wQ8uW5DVIBCHqFSPU=";
+  };
+
+  cargoSha256 = "sha256-6zTZXSW8poePNZy48F6u5tF1LEDQt4f9qv7W/pdIBbI=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  LIBCLANG_PATH = "${libclang.lib}/lib";
+
+  preCheck = "HOME=$(mktemp -d)";
+
+  checkFlags = [
+    "--skip checker::hunspell::tests::hunspell_binding_is_sane"
+  ];
+
+  meta = with lib; {
+    description = "Checks rust documentation for spelling and grammar mistakes";
+    homepage = "https://github.com/drahnr/cargo-spellcheck";
+    changelog = "https://github.com/drahnr/cargo-spellcheck/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ newam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-supply-chain/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-supply-chain/default.nix
new file mode 100644
index 000000000000..d5876f240a93
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-supply-chain/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchCrate, stdenv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-supply-chain";
+  version = "0.2.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-zjDZJOUjnEQ03rmo5CdSY1emE6YohOPlf7SKuvNLuV0=";
+  };
+
+  cargoSha256 = "sha256-xSJ5rx8k+my0NeGYHZyvDzbM7uMdbViT7Ou9a9JACfs=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Gather author, contributor and publisher data on crates in your dependency graph";
+    homepage = "https://github.com/rust-secure-code/cargo-supply-chain";
+    changelog = "https://github.com/rust-secure-code/cargo-supply-chain/blob/master/CHANGELOG.md";
+    license = with licenses; [ asl20 mit zlib ]; # any of three
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
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..9efa337f1b19
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-sweep/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-sweep";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "holmgr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-tumcGnYqY/FGP8UWA0ccfdAK49LBcT8qH6SshrDXNAI=";
+  };
+
+  cargoSha256 = "sha256-fcosKyGOy0SKrHbsKdxQJimelt1ByAM4YKo7WpHV8CA=";
+
+  meta = with lib; {
+    description = "A Cargo subcommand for cleaning up unused build files generated by Cargo";
+    homepage = "https://github.com/holmgr/cargo-sweep";
+    license = licenses.mit;
+    maintainers = with maintainers; [ xrelkd ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-sync-readme/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-sync-readme/default.nix
new file mode 100644
index 000000000000..07c51c3163cb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-sync-readme/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-sync-readme";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "phaazon";
+    repo = pname;
+    rev = version;
+    sha256 = "1c38q87fyfmj6nlwdpavb1xxpi26ncywkgqcwbvblad15c6ydcyc";
+  };
+
+  cargoSha256 = "0vrbgs49ghhl4z4ljhghcs9fnbf7qx1an9kwbrgv9wng8m1dccah";
+
+  meta = with lib; {
+    description = "A cargo plugin that generates a Markdown section in your README based on your Rust documentation";
+    homepage = "https://github.com/phaazon/cargo-sync-readme";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ b4dm4n ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-tally/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-tally/default.nix
new file mode 100644
index 000000000000..808cda01fe54
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-tally/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchCrate, stdenv, DiskArbitration, Foundation, IOKit }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-tally";
+  version = "1.0.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-m5NLI0C7ett5Fmvs9t1vl2W6h7mjCtEFBc1AzYg9JfY=";
+  };
+
+  cargoSha256 = "sha256-AxjQUyxX5lLFPdEdETvZLHbgMYg/xOo7bcqn1TiDKsE=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    DiskArbitration
+    Foundation
+    IOKit
+  ];
+
+  meta = with lib; {
+    description = "Graph the number of crates that depend on your crate over time";
+    homepage = "https://github.com/dtolnay/cargo-tally";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-udeps/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-udeps/default.nix
new file mode 100644
index 000000000000..c8021a74441c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-udeps/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, pkg-config, openssl, CoreServices, Security, libiconv, SystemConfiguration }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-udeps";
+  version = "0.1.27";
+
+  src = fetchFromGitHub {
+    owner = "est31";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-nxcrllAoS/1e5hFURtrB9e6zyHnot90PFAuyVCsO4lY=";
+  };
+
+  cargoSha256 = "sha256-AV3fgKloQ/9UEWjYRI4gENSqilhFlpbUrXhXREytcWc=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  # TODO figure out how to use provided curl instead of compiling curl from curl-sys
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ CoreServices Security libiconv SystemConfiguration ];
+
+  # Requires network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Find unused dependencies in Cargo.toml";
+    homepage = "https://github.com/est31/cargo-udeps";
+    license = licenses.mit;
+    maintainers = with maintainers; [ b4dm4n ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-valgrind/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-valgrind/default.nix
new file mode 100644
index 000000000000..ac54657c8af0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-valgrind/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, nix-update-script
+, makeWrapper
+, valgrind
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-valgrind";
+  version = "2.0.3";
+
+  src = fetchFromGitHub {
+    owner = "jfrimmel";
+    repo = "cargo-valgrind";
+    rev = version;
+    sha256 = "sha256-PEGDao010COqSJGha7GQvR7vNOV+C7faduijVNjB5DE=";
+  };
+
+  cargoSha256 = "sha256-00WUYrkKKJOEN9jXKQ3YraTq89U+3djdvLRuZSbeNHk=";
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/cargo-valgrind --prefix PATH : ${lib.makeBinPath [ valgrind ]}
+  '';
+
+  # Disable check phase as there are failures (2 tests fail)
+  doCheck = false;
+
+  meta = with lib; {
+    description = ''Cargo subcommand "valgrind": runs valgrind and collects its output in a helpful manner'';
+    homepage = "https://github.com/jfrimmel/cargo-valgrind";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ otavio ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-watch/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-watch/default.nix
new file mode 100644
index 000000000000..5cc3fa39eade
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-watch/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, rustPlatform, fetchFromGitHub, CoreServices, Foundation, rust, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-watch";
+  version = "8.1.2";
+
+  src = fetchFromGitHub {
+    owner = "passcod";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-zhOYKvsCK5am4Ystt3+cPAQM77IlIBJysAEix5cXKbI=";
+  };
+
+  cargoSha256 = "sha256-OAOzrGS8n0jfUiQyIAHWLJMEkRINyasgkIjiLw977LE=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices Foundation libiconv ];
+
+  # `test with_cargo` tries to call cargo-watch as a cargo subcommand
+  # (calling cargo-watch with command `cargo watch`)
+  preCheck = ''
+    export PATH="$(pwd)/target/${rust.toRustTarget stdenv.hostPlatform}/release:$PATH"
+  '';
+
+  meta = with lib; {
+    description = "A Cargo subcommand for watching over Cargo project's source";
+    homepage = "https://github.com/passcod/cargo-watch";
+    license = licenses.cc0;
+    maintainers = with maintainers; [ xrelkd ivan ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-whatfeatures/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-whatfeatures/default.nix
new file mode 100644
index 000000000000..7041f0ebd6cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-whatfeatures/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, openssl, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-whatfeatures";
+  version = "0.9.6";
+
+  src = fetchFromGitHub {
+    owner = "museun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0vki37pxngg15za9c1z61dc6sqk0j59s0qhcf9hplnym4ib5kqx1";
+  };
+
+  cargoSha256 = "sha256-ZEkSj/JzXXTHjaxBVS5RDk/ECvOPPjzH4eS3CmlQA9I=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "A simple cargo plugin to get a list of features for a specific crate";
+    homepage = "https://github.com/museun/cargo-whatfeatures";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ ivan-babrou ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/cargo-wipe/default.nix b/nixpkgs/pkgs/development/tools/rust/cargo-wipe/default.nix
new file mode 100644
index 000000000000..d5652c82ec7f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-wipe/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-wipe";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "mihai-dinculescu";
+    repo = "cargo-wipe";
+    rev = "v${version}";
+    sha256 = "sha256-AlmXq2jbU8mQ23Q64a8QiKXwiWkIfr98vAoq7FLImhA=";
+  };
+
+  cargoSha256 = "sha256-vsN4cM4Q9LX1ZgAA5x7PupOTh0IcjI65xzuCPjy8YOs=";
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = ''Cargo subcommand "wipe": recursively finds and optionally wipes all "target" or "node_modules" folders'';
+    homepage = "https://github.com/mihai-dinculescu/cargo-wipe";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ otavio ];
+  };
+}
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..506c71808a05
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cargo-xbuild/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-xbuild";
+  version = "0.6.5";
+
+  src = fetchFromGitHub {
+    owner = "rust-osdev";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-bnceN47OFGlxs3ibcKoZFjoTgXRQxA2ZqxnthJ/fsqE=";
+  };
+
+  cargoSha256 = "sha256-qMPJC61ZVW9olMgNnGrvcQ/je4se4J5gOVoaOpNMUo8=";
+
+  meta = with 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; [ johntitor xrelkd ];
+  };
+}
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..69963ea7d1fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/cbindgen/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, python3Packages, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-cbindgen";
+  version = "0.20.0";
+
+  src = fetchFromGitHub {
+    owner = "eqrion";
+    repo = "cbindgen";
+    rev = "v${version}";
+    sha256 = "sha256-BLiAFYkqVJSpeNPW7UF2PpAttd6ADGeQ9yneiVfNi4g=";
+  };
+
+  cargoSha256 = "sha256-P58qANcl0mYqJDP1QnSx560y8BLH+ePTZ+uHuix89R4=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  checkInputs = [
+    python3Packages.cython
+  ];
+
+  checkFlags = [
+    # Disable tests that require rust unstable features
+    # https://github.com/eqrion/cbindgen/issues/338
+    "--skip test_expand"
+    "--skip test_bitfield"
+    "--skip lib_default_uses_debug_build"
+    "--skip lib_explicit_debug_build"
+    "--skip lib_explicit_release_build"
+  ];
+
+  meta = with lib; {
+    description = "A project for generating C bindings from Rust code";
+    homepage = "https://github.com/eqrion/cbindgen";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ jtojnar ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/crate2nix/default.nix b/nixpkgs/pkgs/development/tools/rust/crate2nix/default.nix
new file mode 100644
index 000000000000..b3a12c5e10aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/crate2nix/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, makeWrapper
+
+, cargo
+, nix
+, nix-prefetch-git
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "crate2nix";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "kolloch";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-JaF9/H3m4Wrc5MtXcONkOAgKVkswLVw0yZe0dBr2e4Y=";
+  };
+
+  sourceRoot = "source/crate2nix";
+
+  cargoSha256 = "sha256-PD7R1vcb3FKd4hfpViKyvfCExJ5H1Xo2HPYden5zpxQ=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  # Tests use nix(1), which tries (and fails) to set up /nix/var inside the
+  # sandbox
+  doCheck = false;
+
+  postFixup = ''
+    wrapProgram $out/bin/crate2nix \
+        --suffix PATH ":" ${lib.makeBinPath [ cargo nix nix-prefetch-git ]}
+  '';
+
+  meta = with lib; {
+    description = "A Nix build file generator for Rust crates.";
+    longDescription = ''
+      Crate2nix generates Nix files from Cargo.toml/lock files
+      so that you can build every crate individually in a Nix sandbox.
+    '';
+    homepage = "https://github.com/kolloch/crate2nix";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kolloch cole-h ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/devserver/default.nix b/nixpkgs/pkgs/development/tools/rust/devserver/default.nix
new file mode 100644
index 000000000000..305a01b69991
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/devserver/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, stdenv
+, fetchCrate
+, rustPlatform
+, openssl
+, pkg-config
+, CoreServices
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "devserver";
+  version = "0.4.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-UcrLzsALwl0zqNRMS1kTTXsR6wN8XDd5Iq+yrudh6M4=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optional stdenv.isDarwin CoreServices;
+
+  cargoSha256 = "sha256-XlrQ6CvjeWnzvfaeNbe8FtMXMVSQNLxDVIEjyHm57Js=";
+
+  meta = with lib; {
+    description = "An extremely tiny tool to serve a static folder locally";
+    homepage = "https://github.com/kettle11/devserver";
+    license = licenses.zlib;
+    maintainers = with maintainers; [ nickhu ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/duckscript/default.nix b/nixpkgs/pkgs/development/tools/rust/duckscript/default.nix
new file mode 100644
index 000000000000..aabb8b94c810
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/duckscript/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchurl
+, runCommand
+, fetchCrate
+, rustPlatform
+, Security
+, openssl
+, pkg-config
+, SystemConfiguration
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "duckscript_cli";
+  version = "0.8.10";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-cMvcCX8ViCcUFMuxAPo3/wxXvg5swAcBrLx1x7lSwvM=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security SystemConfiguration libiconv ];
+
+  cargoSha256 = "sha256-8ywMLXFmdq119K/hl1hpsVhzG+nrdO4eux3lAqUjB+A=";
+
+  meta = with lib; {
+    description = "Simple, extendable and embeddable scripting language.";
+    homepage = "https://github.com/sagiegurari/duckscript";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mkg20001 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/maturin/default.nix b/nixpkgs/pkgs/development/tools/rust/maturin/default.nix
new file mode 100644
index 000000000000..204654eb0e78
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/maturin/default.nix
@@ -0,0 +1,49 @@
+{ callPackage
+, lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, dbus
+, libiconv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "maturin";
+  version = "0.12.9";
+
+  src = fetchFromGitHub {
+    owner = "PyO3";
+    repo = "maturin";
+    rev = "v${version}";
+    hash = "sha256-FskCBviLl1yafPOlsp/IjaEOlGUuWLcGlxDrNA/qf8k=";
+  };
+
+  cargoHash = "sha256-zakSQptKK/X/8MDJxRUHTDIGPh77cq5PrOmPEneD0YM=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = lib.optionals stdenv.isLinux [ dbus ]
+    ++ lib.optionals stdenv.isDarwin [ Security libiconv ];
+
+  # Requires network access, fails in sandbox.
+  doCheck = false;
+
+  passthru.tests.pyo3 = callPackage ./pyo3-test {};
+
+  meta = with lib; {
+    description = "Build and publish Rust crates Python packages";
+    longDescription = ''
+      Build and publish Rust crates with PyO3, rust-cpython, and
+      cffi bindings as well as Rust binaries as Python packages.
+
+      This project is meant as a zero-configuration replacement for
+      setuptools-rust and Milksnake. It supports building wheels for
+      Python and can upload them to PyPI.
+    '';
+    homepage = "https://github.com/PyO3/maturin";
+    license = licenses.asl20;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/Cargo.lock.patch b/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/Cargo.lock.patch
new file mode 100644
index 000000000000..3aca2e4803a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/Cargo.lock.patch
@@ -0,0 +1,688 @@
+diff --git a/Cargo.lock b/Cargo.lock
+new file mode 100644
+index 000000000..5e698d4ff
+--- /dev/null
++++ b/Cargo.lock
+@@ -0,0 +1,682 @@
++# This file is automatically @generated by Cargo.
++# It is not intended for manual editing.
++[[package]]
++name = "ahash"
++version = "0.4.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e"
++
++[[package]]
++name = "assert_approx_eq"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3c07dab4369547dbe5114677b33fbbf724971019f3818172d59a97a61c774ffd"
++
++[[package]]
++name = "autocfg"
++version = "1.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
++
++[[package]]
++name = "bitflags"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
++
++[[package]]
++name = "byteorder"
++version = "1.4.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b"
++
++[[package]]
++name = "cfg-if"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
++
++[[package]]
++name = "const_fn"
++version = "0.4.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6"
++
++[[package]]
++name = "crossbeam-channel"
++version = "0.5.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775"
++dependencies = [
++ "cfg-if",
++ "crossbeam-utils",
++]
++
++[[package]]
++name = "crossbeam-deque"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9"
++dependencies = [
++ "cfg-if",
++ "crossbeam-epoch",
++ "crossbeam-utils",
++]
++
++[[package]]
++name = "crossbeam-epoch"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d"
++dependencies = [
++ "cfg-if",
++ "const_fn",
++ "crossbeam-utils",
++ "lazy_static",
++ "memoffset",
++ "scopeguard",
++]
++
++[[package]]
++name = "crossbeam-utils"
++version = "0.8.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d"
++dependencies = [
++ "autocfg",
++ "cfg-if",
++ "lazy_static",
++]
++
++[[package]]
++name = "ctor"
++version = "0.1.19"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e8f45d9ad417bcef4817d614a501ab55cdd96a6fdb24f49aab89a54acfd66b19"
++dependencies = [
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "either"
++version = "1.6.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
++
++[[package]]
++name = "getrandom"
++version = "0.1.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
++dependencies = [
++ "cfg-if",
++ "libc",
++ "wasi",
++]
++
++[[package]]
++name = "ghost"
++version = "0.1.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1a5bcf1bbeab73aa4cf2fde60a846858dc036163c7c33bec309f8d17de785479"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "glob"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
++
++[[package]]
++name = "hashbrown"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
++dependencies = [
++ "ahash",
++]
++
++[[package]]
++name = "hermit-abi"
++version = "0.1.18"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
++dependencies = [
++ "libc",
++]
++
++[[package]]
++name = "indoc"
++version = "0.3.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "47741a8bc60fb26eb8d6e0238bbb26d8575ff623fdc97b1a2c00c050b9684ed8"
++dependencies = [
++ "indoc-impl",
++ "proc-macro-hack",
++]
++
++[[package]]
++name = "indoc-impl"
++version = "0.3.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ce046d161f000fffde5f432a0d034d0341dc152643b2598ed5bfce44c4f3a8f0"
++dependencies = [
++ "proc-macro-hack",
++ "proc-macro2",
++ "quote",
++ "syn",
++ "unindent",
++]
++
++[[package]]
++name = "instant"
++version = "0.1.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec"
++dependencies = [
++ "cfg-if",
++]
++
++[[package]]
++name = "inventory"
++version = "0.1.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0f0f7efb804ec95e33db9ad49e4252f049e37e8b0a4652e3cd61f7999f2eff7f"
++dependencies = [
++ "ctor",
++ "ghost",
++ "inventory-impl",
++]
++
++[[package]]
++name = "inventory-impl"
++version = "0.1.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "75c094e94816723ab936484666968f5b58060492e880f3c8d00489a1e244fa51"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "itoa"
++version = "0.4.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
++
++[[package]]
++name = "lazy_static"
++version = "1.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
++
++[[package]]
++name = "libc"
++version = "0.2.86"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
++
++[[package]]
++name = "lock_api"
++version = "0.4.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312"
++dependencies = [
++ "scopeguard",
++]
++
++[[package]]
++name = "memoffset"
++version = "0.6.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87"
++dependencies = [
++ "autocfg",
++]
++
++[[package]]
++name = "num-bigint"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5e9a41747ae4633fce5adffb4d2e81ffc5e89593cb19917f8fb2cc5ff76507bf"
++dependencies = [
++ "autocfg",
++ "num-integer",
++ "num-traits",
++]
++
++[[package]]
++name = "num-complex"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5"
++dependencies = [
++ "num-traits",
++]
++
++[[package]]
++name = "num-integer"
++version = "0.1.44"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
++dependencies = [
++ "autocfg",
++ "num-traits",
++]
++
++[[package]]
++name = "num-traits"
++version = "0.2.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
++dependencies = [
++ "autocfg",
++]
++
++[[package]]
++name = "num_cpus"
++version = "1.13.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
++dependencies = [
++ "hermit-abi",
++ "libc",
++]
++
++[[package]]
++name = "parking_lot"
++version = "0.11.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
++dependencies = [
++ "instant",
++ "lock_api",
++ "parking_lot_core",
++]
++
++[[package]]
++name = "parking_lot_core"
++version = "0.8.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018"
++dependencies = [
++ "cfg-if",
++ "instant",
++ "libc",
++ "redox_syscall",
++ "smallvec",
++ "winapi",
++]
++
++[[package]]
++name = "paste"
++version = "0.1.18"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880"
++dependencies = [
++ "paste-impl",
++ "proc-macro-hack",
++]
++
++[[package]]
++name = "paste-impl"
++version = "0.1.18"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6"
++dependencies = [
++ "proc-macro-hack",
++]
++
++[[package]]
++name = "ppv-lite86"
++version = "0.2.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
++
++[[package]]
++name = "proc-macro-hack"
++version = "0.5.19"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
++
++[[package]]
++name = "proc-macro2"
++version = "1.0.24"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
++dependencies = [
++ "unicode-xid",
++]
++
++[[package]]
++name = "proptest"
++version = "0.10.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "12e6c80c1139113c28ee4670dc50cc42915228b51f56a9e407f0ec60f966646f"
++dependencies = [
++ "bitflags",
++ "byteorder",
++ "lazy_static",
++ "num-traits",
++ "quick-error",
++ "rand",
++ "rand_chacha",
++ "rand_xorshift",
++ "regex-syntax",
++]
++
++[[package]]
++name = "pyo3"
++version = "0.13.2"
++dependencies = [
++ "assert_approx_eq",
++ "cfg-if",
++ "ctor",
++ "hashbrown",
++ "indoc",
++ "inventory",
++ "libc",
++ "num-bigint",
++ "num-complex",
++ "parking_lot",
++ "paste",
++ "proptest",
++ "pyo3",
++ "pyo3-macros",
++ "rustversion",
++ "serde",
++ "serde_json",
++ "trybuild",
++ "unindent",
++]
++
++[[package]]
++name = "pyo3-macros"
++version = "0.13.2"
++dependencies = [
++ "pyo3-macros-backend",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "pyo3-macros-backend"
++version = "0.13.2"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "quick-error"
++version = "1.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
++
++[[package]]
++name = "quote"
++version = "1.0.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
++dependencies = [
++ "proc-macro2",
++]
++
++[[package]]
++name = "rand"
++version = "0.7.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
++dependencies = [
++ "getrandom",
++ "libc",
++ "rand_chacha",
++ "rand_core",
++ "rand_hc",
++]
++
++[[package]]
++name = "rand_chacha"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
++dependencies = [
++ "ppv-lite86",
++ "rand_core",
++]
++
++[[package]]
++name = "rand_core"
++version = "0.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
++dependencies = [
++ "getrandom",
++]
++
++[[package]]
++name = "rand_hc"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
++dependencies = [
++ "rand_core",
++]
++
++[[package]]
++name = "rand_xorshift"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "77d416b86801d23dde1aa643023b775c3a462efc0ed96443add11546cdf1dca8"
++dependencies = [
++ "rand_core",
++]
++
++[[package]]
++name = "rayon"
++version = "1.5.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"
++dependencies = [
++ "autocfg",
++ "crossbeam-deque",
++ "either",
++ "rayon-core",
++]
++
++[[package]]
++name = "rayon-core"
++version = "1.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
++dependencies = [
++ "crossbeam-channel",
++ "crossbeam-deque",
++ "crossbeam-utils",
++ "lazy_static",
++ "num_cpus",
++]
++
++[[package]]
++name = "redox_syscall"
++version = "0.2.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9"
++dependencies = [
++ "bitflags",
++]
++
++[[package]]
++name = "regex-syntax"
++version = "0.6.22"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581"
++
++[[package]]
++name = "rustapi-module"
++version = "0.1.0"
++dependencies = [
++ "pyo3",
++]
++
++[[package]]
++name = "rustversion"
++version = "1.0.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cb5d2a036dc6d2d8fd16fde3498b04306e29bd193bf306a57427019b823d5acd"
++
++[[package]]
++name = "ryu"
++version = "1.0.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
++
++[[package]]
++name = "scopeguard"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
++
++[[package]]
++name = "serde"
++version = "1.0.123"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae"
++dependencies = [
++ "serde_derive",
++]
++
++[[package]]
++name = "serde_derive"
++version = "1.0.123"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "serde_json"
++version = "1.0.62"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ea1c6153794552ea7cf7cf63b1231a25de00ec90db326ba6264440fa08e31486"
++dependencies = [
++ "itoa",
++ "ryu",
++ "serde",
++]
++
++[[package]]
++name = "smallvec"
++version = "1.6.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
++
++[[package]]
++name = "syn"
++version = "1.0.60"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "unicode-xid",
++]
++
++[[package]]
++name = "termcolor"
++version = "1.1.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
++dependencies = [
++ "winapi-util",
++]
++
++[[package]]
++name = "toml"
++version = "0.5.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
++dependencies = [
++ "serde",
++]
++
++[[package]]
++name = "trybuild"
++version = "1.0.41"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "99471a206425fba51842a9186315f32d91c56eadc21ea4c21f847b59cf778f8b"
++dependencies = [
++ "glob",
++ "lazy_static",
++ "serde",
++ "serde_json",
++ "termcolor",
++ "toml",
++]
++
++[[package]]
++name = "unicode-xid"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
++
++[[package]]
++name = "unindent"
++version = "0.1.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f14ee04d9415b52b3aeab06258a3f07093182b88ba0f9b8d203f211a7a7d41c7"
++
++[[package]]
++name = "wasi"
++version = "0.9.0+wasi-snapshot-preview1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
++
++[[package]]
++name = "winapi"
++version = "0.3.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
++dependencies = [
++ "winapi-i686-pc-windows-gnu",
++ "winapi-x86_64-pc-windows-gnu",
++]
++
++[[package]]
++name = "winapi-i686-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
++
++[[package]]
++name = "winapi-util"
++version = "0.1.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
++dependencies = [
++ "winapi",
++]
++
++[[package]]
++name = "winapi-x86_64-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
++
++[[package]]
++name = "word-count"
++version = "0.1.0"
++dependencies = [
++ "pyo3",
++ "rayon",
++]
diff --git a/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/default.nix b/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/default.nix
new file mode 100644
index 000000000000..7f79c8565d23
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/default.nix
@@ -0,0 +1,12 @@
+{ python3
+, rustPlatform
+}:
+
+python3.pkgs.callPackage ./generic.nix {
+  buildAndTestSubdir = "examples/word-count";
+
+  nativeBuildInputs = with rustPlatform; [
+    cargoSetupHook
+    maturinBuildHook
+  ];
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/generic.nix b/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/generic.nix
new file mode 100644
index 000000000000..547f11125b70
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/maturin/pyo3-test/generic.nix
@@ -0,0 +1,45 @@
+# Derivation prototype, used by maturin and setuptools-rust
+# passthrough tests.
+
+{ lib
+, fetchFromGitHub
+, python
+, rustPlatform
+
+, nativeBuildInputs
+
+, buildAndTestSubdir ? null
+, format ? "pyproject"
+, preConfigure ? ""
+}:
+
+python.pkgs.buildPythonPackage rec {
+  pname = "word-count";
+  version = "0.13.2";
+
+  src = fetchFromGitHub {
+    owner = "PyO3";
+    repo = "pyo3";
+    rev = "v${version}";
+    hash = "sha256-NOMrrfo8WjlPhtGxWUOPJS/UDDdbLQRCXR++Zd6JmIA=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src patches;
+    name = "${pname}-${version}";
+    hash = "sha256-u3L9nXHKILznyZTgxdvZyOCQZFZhuADrtI7zXYQzrbE=";
+  };
+
+  patches = [ ./Cargo.lock.patch ];
+
+  inherit buildAndTestSubdir format nativeBuildInputs preConfigure;
+
+  pythonImportsCheck = [ "word_count" ];
+
+  meta = with lib; {
+    description = "PyO3 word count example";
+    homepage = "https://github.com/PyO3/pyo3";
+    license = licenses.asl20;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/panamax/default.nix b/nixpkgs/pkgs/development/tools/rust/panamax/default.nix
new file mode 100644
index 000000000000..0d040afd421d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/panamax/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchCrate, pkg-config, openssl, stdenv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "panamax";
+  version = "1.0.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-w4waFdzd/Ps0whOp39QLBE/YF2eyc4t2Ili7FskUt1M=";
+  };
+
+  cargoSha256 = "sha256-52snmkTFHI26xJo9qJkmqh1M5lLzhDxw8WT6uFd57aw=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Mirror rustup and crates.io repositories for offline Rust and cargo usage";
+    homepage = "https://github.com/panamax-rs/panamax";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/probe-rs-cli/default.nix b/nixpkgs/pkgs/development/tools/rust/probe-rs-cli/default.nix
new file mode 100644
index 000000000000..4978c4a3c3e6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/probe-rs-cli/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, rustPlatform, fetchCrate, pkg-config, libusb1, AppKit }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "probe-rs-cli";
+  version = "0.12.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-XYrB/aKuFCe0FNe6N9vqDdr408tAiN6YvT5BL6lCxmU=";
+  };
+
+  cargoSha256 = "sha256-aXSJMSGNl2fzob1j/qiPHHZLisYQeU1gUO5cYbzSHYA=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libusb1 ] ++ lib.optionals stdenv.isDarwin [ AppKit ];
+
+  meta = with lib; {
+    description = "CLI tool for on-chip debugging and flashing of ARM chips";
+    homepage = "https://probe.rs/";
+    changelog = "https://github.com/probe-rs/probe-rs/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ xgroleau ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/probe-run/default.nix b/nixpkgs/pkgs/development/tools/rust/probe-run/default.nix
new file mode 100644
index 000000000000..a668fdd11725
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/probe-run/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, rustPlatform, fetchCrate, pkg-config, libusb1
+, libiconv, AppKit, IOKit }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "probe-run";
+  version = "0.3.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-SXA77LXM1SuBJ8BH+ahwJl/3gWsCbdLXBiHZdJySWq0=";
+  };
+
+  cargoSha256 = "sha256-e9POSuA/I7IUKUOxMTfCWxNn0AicojpGQpxamzmHa7g=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libusb1 ]
+    ++ lib.optionals stdenv.isDarwin [ libiconv AppKit IOKit ];
+
+  meta = with lib; {
+    description = "Run embedded programs just like native ones.";
+    homepage = "https://github.com/knurling-rs/probe-run";
+    changelog = "https://github.com/knurling-rs/probe-run/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ hoverbear newam ];
+  };
+}
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..f6717b36b203
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/racer/default.nix
@@ -0,0 +1,48 @@
+{ lib, rustPlatform, fetchCrate, makeWrapper, stdenv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "racer";
+  version = "2.1.48";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-lat5s9+AMFI3VXiWqjLESZrtq3IwOZhlt+5BhYoonfA=";
+  };
+
+  cargoSha256 = "sha256-jGsvCmrPGVzWdx7V3J4bBK+SF2o+icORmVKuwqYxdh4=";
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  # a nightly compiler is required unless we use this cheat code.
+  RUSTC_BOOTSTRAP = 1;
+
+  RUST_SRC_PATH = rustPlatform.rustLibSrc;
+  postInstall = ''
+    wrapProgram $out/bin/racer --set-default RUST_SRC_PATH ${rustPlatform.rustLibSrc}
+  '';
+
+  checkFlags = [
+    "--skip nameres::test_do_file_search_std"
+    "--skip util::test_get_rust_src_path_rustup_ok"
+    "--skip util::test_get_rust_src_path_not_rust_source_tree"
+    "--skip extern --skip completes_pub_fn --skip find_crate_doc"
+    "--skip follows_use_local_package --skip follows_use_for_reexport"
+    "--skip follows_rand_crate --skip get_completion_in_example_dir"
+    "--skip test_resolve_global_path_in_modules"
+  ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/racer --version
+  '';
+
+  meta = with 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 ];
+    # error[E0199]: implementing the trait `Step` is not unsafe
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rhack/default.nix b/nixpkgs/pkgs/development/tools/rust/rhack/default.nix
new file mode 100644
index 000000000000..d141c43dd914
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rhack/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rhack";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "nakabonne";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "088ynf65szaa86pxwwasn3wwi00z5pn7i8w9gh5dyn983z4d8237";
+  };
+
+  cargoSha256 = "sha256-HmBh2qbO/HuNPfHKifq41IB5ResnGka2iaAsnwppm9s=";
+
+  meta = with lib; {
+    description = "Temporary edit external crates that your project depends on";
+    homepage = "https://github.com/nakabonne/rhack";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/roogle/default.nix b/nixpkgs/pkgs/development/tools/rust/roogle/default.nix
new file mode 100644
index 000000000000..7def38d19913
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/roogle/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "roogle";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "hkmatsumoto";
+    repo = pname;
+    rev = version;
+    sha256 = "1h0agialbvhhiijkdnr47y7babq432limdl6ag2rmjfs7yishn4r";
+  };
+
+  cargoSha256 = "sha256-CzFfFKTmBUAafk8PkkWmUkRIyO+yEhmCfN1zsLRq4Iw=";
+
+  postInstall = ''
+    mkdir -p $out/share/roogle
+    cp -r assets $out/share/roogle
+  '';
+
+  meta = with lib; {
+    description = "A Rust API search engine which allows you to search functions by names and type signatures";
+    homepage = "https://github.com/hkmatsumoto/roogle";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rust-analyzer/default.nix b/nixpkgs/pkgs/development/tools/rust/rust-analyzer/default.nix
new file mode 100644
index 000000000000..2221ae0a14b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rust-analyzer/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, CoreServices
+, cmake
+, libiconv
+, useMimalloc ? false
+, doCheck ? true
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-analyzer-unwrapped";
+  version = "2022-02-28";
+  cargoSha256 = "sha256-dTw6xp99uGtGp6YuqAX3r3GDD6Wto3KHTaO2DUUE2FA=";
+
+  src = fetchFromGitHub {
+    owner = "rust-analyzer";
+    repo = "rust-analyzer";
+    rev = version;
+    sha256 = "sha256-GQ1cPO4povnozLl0MTFs0ZXpmBn+AZeFWQVnxHHWf9g=";
+  };
+
+  patches = [
+    # Code format and git history check require more dependencies but don't really matter for packaging.
+    # So just ignore them.
+    ./ignore-git-and-rustfmt-tests.patch
+  ];
+
+  buildAndTestSubdir = "crates/rust-analyzer";
+
+  nativeBuildInputs = lib.optional useMimalloc cmake;
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    CoreServices
+    libiconv
+  ];
+
+  buildFeatures = lib.optional useMimalloc "mimalloc";
+
+  RUST_ANALYZER_REV = version;
+
+  inherit doCheck;
+  preCheck = lib.optionalString doCheck ''
+    export RUST_SRC_PATH=${rustPlatform.rustLibSrc}
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    versionOutput="$($out/bin/rust-analyzer --version)"
+    echo "'rust-analyzer --version' returns: $versionOutput"
+    [[ "$versionOutput" == "rust-analyzer ${version}" ]]
+    runHook postInstallCheck
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "A modular compiler frontend for the Rust language";
+    homepage = "https://rust-analyzer.github.io";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ oxalica ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rust-analyzer/ignore-git-and-rustfmt-tests.patch b/nixpkgs/pkgs/development/tools/rust/rust-analyzer/ignore-git-and-rustfmt-tests.patch
new file mode 100644
index 000000000000..1247e4804684
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rust-analyzer/ignore-git-and-rustfmt-tests.patch
@@ -0,0 +1,18 @@
+--- a/crates/rust-analyzer/tests/slow-tests/tidy.rs
++++ b/crates/rust-analyzer/tests/slow-tests/tidy.rs
+@@ -6,6 +6,7 @@ use std::{
+ use xshell::{cmd, pushd, pushenv, read_file};
+ 
+ #[test]
++#[ignore]
+ fn check_code_formatting() {
+     let _dir = pushd(sourcegen::project_root()).unwrap();
+     let _e = pushenv("RUSTUP_TOOLCHAIN", "stable");
+@@ -138,6 +139,7 @@ fn check_cargo_toml(path: &Path, text: String) -> () {
+ }
+ 
+ #[test]
++#[ignore]
+ fn check_merge_commits() {
+     let stdout = cmd!("git rev-list --merges --invert-grep --author 'bors\\[bot\\]' HEAD~19..")
+         .read()
diff --git a/nixpkgs/pkgs/development/tools/rust/rust-analyzer/update.sh b/nixpkgs/pkgs/development/tools/rust/rust-analyzer/update.sh
new file mode 100755
index 000000000000..920b36a5131e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rust-analyzer/update.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq nix-prefetch libarchive
+set -euo pipefail
+cd "$(dirname "$0")"
+owner=rust-analyzer
+repo=rust-analyzer
+nixpkgs=../../../../..
+
+# Update lsp
+
+ver=$(
+    curl -s "https://api.github.com/repos/$owner/$repo/releases" |
+    jq 'map(select(.prerelease | not)) | .[0].tag_name' --raw-output
+)
+old_ver=$(sed -nE 's/.*\bversion = "(.*)".*/\1/p' ./default.nix)
+if grep -q 'cargoSha256 = ""' ./default.nix; then
+    old_ver='broken'
+fi
+if [[ "$ver" == "$old_ver" ]]; then
+    echo "Up to date: $ver"
+    exit
+fi
+echo "$old_ver -> $ver"
+
+sha256=$(nix-prefetch -f "$nixpkgs" rust-analyzer-unwrapped.src --rev "$ver")
+# Clear cargoSha256 to avoid inconsistency.
+sed -e "s#version = \".*\"#version = \"$ver\"#" \
+    -e "/fetchFromGitHub/,/}/ s#sha256 = \".*\"#sha256 = \"$sha256\"#" \
+    -e "s#cargoSha256 = \".*\"#cargoSha256 = \"sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"#" \
+    --in-place ./default.nix
+
+echo "Prebuilding for cargoSha256"
+cargo_sha256=$(nix-prefetch "{ sha256 }: (import $nixpkgs {}).rust-analyzer-unwrapped.cargoDeps.overrideAttrs (_: { outputHash = sha256; })")
+sed "s#cargoSha256 = \".*\"#cargoSha256 = \"$cargo_sha256\"#" \
+    --in-place ./default.nix
diff --git a/nixpkgs/pkgs/development/tools/rust/rust-analyzer/wrapper.nix b/nixpkgs/pkgs/development/tools/rust/rust-analyzer/wrapper.nix
new file mode 100644
index 000000000000..6fa5207de6eb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rust-analyzer/wrapper.nix
@@ -0,0 +1,15 @@
+{ lib, rustPlatform, runCommand, makeWrapper, rust-analyzer-unwrapped
+, pname ? "rust-analyzer"
+, version ? rust-analyzer-unwrapped.version
+  # Use name from `RUST_SRC_PATH`
+, rustSrc ? rustPlatform.rustLibSrc
+}:
+runCommand "${pname}-${version}" {
+  inherit pname version;
+  inherit (rust-analyzer-unwrapped) src meta;
+  nativeBuildInputs = [ makeWrapper ];
+} ''
+  mkdir -p $out/bin
+  makeWrapper ${rust-analyzer-unwrapped}/bin/rust-analyzer $out/bin/rust-analyzer \
+    --set-default RUST_SRC_PATH "${rustSrc}"
+''
diff --git a/nixpkgs/pkgs/development/tools/rust/rust-script/default.nix b/nixpkgs/pkgs/development/tools/rust/rust-script/default.nix
new file mode 100644
index 000000000000..416506367710
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rust-script/default.nix
@@ -0,0 +1,25 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-script";
+  version = "0.20.0";
+
+  src = fetchFromGitHub {
+    owner = "fornwall";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-WcvRkp57VyBB5gQgamFoR6wK1cRJ+3hQqixOBgeapJU=";
+  };
+
+  cargoSha256 = "sha256-qJIftByppOrT4g3sxmKRSLhxtpAW4eXWX0FhmMDJNu0=";
+
+  # tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Run Rust files and expressions as scripts without any setup or compilation step";
+    homepage = "https://rust-script.org";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/0001-dynamically-patchelf-binaries.patch b/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/0001-dynamically-patchelf-binaries.patch
new file mode 100644
index 000000000000..1754ce11c4d3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/0001-dynamically-patchelf-binaries.patch
@@ -0,0 +1,61 @@
+diff --git a/src/main.rs b/src/main.rs
+index 3cb6896..7f070e0 100644
+--- a/src/main.rs
++++ b/src/main.rs
+@@ -275,7 +275,9 @@ fn install_single_toolchain(
+
+     // install
+     if maybe_dry_client.is_some() {
+-        rename(&toolchain.dest, toolchain_path)?;
++        rename(&toolchain.dest, toolchain_path.clone())?;
++        nix_patchelf(toolchain_path)
++            .expect("failed to patch toolchain for NixOS");
+         eprintln!(
+             "toolchain `{}` is successfully installed!",
+             toolchain.dest.display()
+@@ -291,6 +293,45 @@ fn install_single_toolchain(
+     Ok(())
+ }
+
++fn nix_patchelf(mut toolchain_path: PathBuf) -> Result<(), Error> {
++    toolchain_path.push("bin");
++
++    for entry in toolchain_path.read_dir()? {
++        let entry = entry?;
++        if !entry.file_type()?.is_file() {
++            continue;
++        }
++
++        eprintln!("info: you seem to be running NixOS. Attempting to patch {}",
++                  entry.path().to_str().unwrap());
++        let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++            .arg("--set-interpreter")
++            .arg("@dynamicLinker@")
++            .arg(entry.path())
++            .output();
++    }
++
++    toolchain_path.pop();
++    toolchain_path.push("lib");
++
++    for entry in toolchain_path.read_dir()? {
++        let entry = entry?;
++        if !entry.file_type()?.is_file() {
++            continue;
++        }
++
++        eprintln!("info: you seem to be running NixOS. Attempting to patch {}",
++                  entry.path().to_str().unwrap());
++        let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++            .arg("--set-rpath")
++            .arg("@libPath@")
++            .arg(entry.path())
++            .output();
++    }
++
++    Ok(())
++}
++
+ fn fetch_master_commit(client: &Client, github_token: Option<&str>) -> Result<String, Error> {
+     eprintln!("fetching master commit hash... ");
+     fetch_master_commit_via_git()
diff --git a/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/default.nix b/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/default.nix
new file mode 100644
index 000000000000..cae5453fa661
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustup-toolchain-install-master/default.nix
@@ -0,0 +1,56 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, runCommand
+, patchelf
+, zlib
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustup-toolchain-install-master";
+  version = "1.7.3";
+
+  src = fetchFromGitHub {
+    owner = "kennytm";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-J25ER/g8Kylw/oTIEl4Gl8i1xmhR+4JM5M5EHpl1ras=";
+  };
+
+  patches =
+    let
+      patchelfPatch = runCommand "0001-dynamically-patchelf-binaries.patch" {
+        CC = stdenv.cc;
+        patchelf = patchelf;
+        libPath = "$ORIGIN/../lib:${lib.makeLibraryPath [ zlib ]}";
+      }
+      ''
+        export dynamicLinker=$(cat $CC/nix-support/dynamic-linker)
+        substitute ${./0001-dynamically-patchelf-binaries.patch} $out \
+          --subst-var patchelf \
+          --subst-var dynamicLinker \
+          --subst-var libPath
+      '';
+    in
+    lib.optionals stdenv.isLinux [ patchelfPatch ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  cargoSha256 = "n7t8Ap9hdhrjmtKjfdyozf26J7yhu57pedm19CunLF4=";
+
+  meta = with lib; {
+    description = "Install a rustc master toolchain usable from rustup";
+    homepage = "https://github.com/kennytm/rustup-toolchain-install-master";
+    license = licenses.mit;
+    maintainers = with maintainers; [ davidtwco ];
+  };
+}
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..13649b387a3e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustup/0001-dynamically-patchelf-binaries.patch
@@ -0,0 +1,42 @@
+diff --git a/src/dist/component/package.rs b/src/dist/component/package.rs
+index 3beddf54..0f859b8d 100644
+--- a/src/dist/component/package.rs
++++ b/src/dist/component/package.rs
+@@ -113,6 +113,7 @@ impl Package for DirectoryPackage {
+                     } else {
+                         builder.move_file(path.clone(), &src_path)?
+                     }
++                    nix_patchelf_if_needed(&target.prefix().path().join(path.clone()), &src_path)
+                 }
+                 "dir" => {
+                     if self.copy {
+@@ -135,6 +136,29 @@ impl Package for DirectoryPackage {
+     }
+ }
+ 
++fn nix_patchelf_if_needed(dest_path: &Path, src_path: &Path) {
++    let (is_bin, is_lib) = if let Some(p) = src_path.parent() {
++        (p.ends_with("bin"), p.ends_with("lib"))
++    } else {
++        (false, false)
++    };
++
++    if is_bin {
++        let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++            .arg("--set-interpreter")
++            .arg("@dynamicLinker@")
++            .arg(dest_path)
++            .output();
++    }
++    else if is_lib {
++        let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++            .arg("--set-rpath")
++            .arg("@libPath@")
++            .arg(dest_path)
++            .output();
++    }
++}
++
+ #[derive(Debug)]
+ pub struct TarPackage<'a>(DirectoryPackage, temp::Dir<'a>);
+ 
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..3d137f58414e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rustup/default.nix
@@ -0,0 +1,94 @@
+{ stdenv
+, lib
+, runCommand
+, patchelf
+, fetchFromGitHub
+, rustPlatform
+, makeWrapper
+, pkg-config
+, curl
+, zlib
+, Security
+, CoreServices
+, libiconv
+, xz
+}:
+
+let
+  libPath = lib.makeLibraryPath [
+    zlib # libz.so.1
+  ];
+in
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustup";
+  version = "1.24.3";
+
+  src = fetchFromGitHub {
+    owner = "rust-lang";
+    repo = "rustup";
+    rev = version;
+    sha256 = "sha256-JpOOFwlTgwwBCrXOGYskFTgS6RZ7mHQJGT0jnHavxvI=";
+  };
+
+  cargoSha256 = "sha256-hAfGpKaWD94IxFFpnW9XwQp4P9clUX6mmekwodCK0Ag=";
+
+  nativeBuildInputs = [ makeWrapper pkg-config ];
+
+  buildInputs = [
+    curl
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [ CoreServices Security libiconv xz ];
+
+  buildFeatures = [ "no-self-update" ];
+
+  checkFeatures = [ ];
+
+  patches = lib.optionals stdenv.isLinux [
+    (runCommand "0001-dynamically-patchelf-binaries.patch" { CC = stdenv.cc; patchelf = patchelf; libPath = "$ORIGIN/../lib:${libPath}"; } ''
+      export dynamicLinker=$(cat $CC/nix-support/dynamic-linker)
+      substitute ${./0001-dynamically-patchelf-binaries.patch} $out \
+        --subst-var patchelf \
+        --subst-var dynamicLinker \
+        --subst-var libPath
+    '')
+  ];
+
+  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
+
+    wrapProgram $out/bin/rustup --prefix "LD_LIBRARY_PATH" : "${libPath}"
+
+    # 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 lib; {
+    description = "The Rust toolchain installer";
+    homepage = "https://www.rustup.rs/";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/rusty-man/default.nix b/nixpkgs/pkgs/development/tools/rust/rusty-man/default.nix
new file mode 100644
index 000000000000..879cec5ebe6d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/rusty-man/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromSourcehut }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rusty-man";
+  version = "0.5.0";
+
+  src = fetchFromSourcehut {
+    owner = "~ireas";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-djprzmogT1OEf0/+twdxzx30YaMNzFjXkZd4IDsH8oo=";
+  };
+
+  cargoSha256 = "sha256-Wf8D6y3LRYJpQjFFt0w5X+BOllbR3mc4Gzcr1ad3zD0=";
+
+  meta = with lib; {
+    description = "A command-line viewer for documentation generated by rustdoc";
+    homepage = "https://git.sr.ht/~ireas/rusty-man";
+    changelog = "https://git.sr.ht/~ireas/rusty-man/tree/v${version}/item/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/rust/sqlx-cli/default.nix b/nixpkgs/pkgs/development/tools/rust/sqlx-cli/default.nix
new file mode 100644
index 000000000000..005c5cfc4749
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/sqlx-cli/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, rustPlatform, fetchFromGitHub, pkg-config, openssl, SystemConfiguration, CoreFoundation, Security, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sqlx-cli";
+  version = "0.5.11";
+
+  src = fetchFromGitHub {
+    owner = "launchbadge";
+    repo = "sqlx";
+    rev = "v${version}";
+    sha256 = "sha256-Tz7YzGkQUwH0U14dvsttP2GpnM9kign6L9PkAVs3dEc=";
+  };
+
+  cargoSha256 = "sha256-EKuRaVxwotgTPj95GJnrQGbulsFPClSettwS5f0TzoM=";
+
+  doCheck = false;
+  cargoBuildFlags = [ "-p sqlx-cli" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ SystemConfiguration CoreFoundation Security libiconv ];
+
+  meta = with lib; {
+    description =
+      "SQLx's associated command-line utility for managing databases, migrations, and enabling offline mode with sqlx::query!() and friends.";
+    homepage = "https://github.com/launchbadge/sqlx";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ greizgh ];
+  };
+}
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..20501594c439
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/rust/svd2rust/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchCrate, stdenv, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "svd2rust";
+  version = "0.21.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "0mxzbbxrg1jysxpjqcvgwwmh8qf0lyf64fl1gxxp0whph0x279qj";
+  };
+
+  cargoSha256 = "0kvya6swx1nsxxlhn2w8x4dhl4j3v56jxqr2h259cx6lzv3xjhin";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  meta = with lib; {
+    description = "Generate Rust register maps (`struct`s) from SVD files";
+    homepage = "https://github.com/rust-embedded/svd2rust";
+    changelog = "https://github.com/rust-embedded/svd2rust/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ ];
+  };
+}
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..9882e1efcc4f
--- /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
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/sass/default.nix b/nixpkgs/pkgs/development/tools/sass/default.nix
new file mode 100644
index 000000000000..8c76ac4e017b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sass/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "sass";
+  gemdir = ./.;
+  exes = [ "sass" "sass-convert" "scss" ];
+
+  passthru.updateScript = bundlerUpdateScript "sass";
+
+  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 nicknovitski ];
+    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..c0c5937b15a4
--- /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";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sassc/default.nix b/nixpkgs/pkgs/development/tools/sassc/default.nix
new file mode 100644
index 000000000000..54f744a1608e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sassc/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libsass }:
+
+stdenv.mkDerivation rec {
+  pname = "sassc";
+  version = "3.6.2"; # also check libsass for updates
+
+  src = fetchFromGitHub {
+    owner = "sass";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-jcs3+orRqKt9C3c2FTdeaj4H2rBP74lW3HF8CHSm7lQ=";
+  };
+
+  postPatch = ''
+    export SASSC_VERSION=${version}
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ libsass ];
+
+  meta = with 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..64517d865cdf
--- /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 {
+  pname = "sauce-connect";
+  version = "4.5.4";
+
+  src = fetchurl (
+    if stdenv.hostPlatform.system == "x86_64-linux" then {
+      url = "https://saucelabs.com/downloads/sc-${version}-linux.tar.gz";
+      sha256 = "1w8fw47q4bzpk5jfagmc0cbp69jdd6jcv2xl1gx91cbp7xd8mcbf";
+    } 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";
+    }
+  );
+
+  nativeBuildInputs = [ unzip ];
+
+  patchPhase = 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..a38b6cee8524
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scalafix/default.nix
@@ -0,0 +1,43 @@
+{ lib, 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/cs 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 {
+  pname = baseName;
+  inherit version;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jdk deps ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    makeWrapper ${jre}/bin/java $out/bin/${baseName} \
+      --add-flags "-cp $CLASSPATH scalafix.cli.Cli"
+  '';
+
+  installCheckPhase = ''
+    $out/bin/${baseName} --version | grep -q "${version}"
+  '';
+
+  meta = with 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..6a442424c4f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scalafmt/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, jdk, jre, coursier, makeWrapper }:
+
+let
+  baseName = "scalafmt";
+  version = "3.4.3";
+  deps = stdenv.mkDerivation {
+    name = "${baseName}-deps-${version}";
+    buildCommand = ''
+      export COURSIER_CACHE=$(pwd)
+      ${coursier}/bin/cs fetch org.scalameta:scalafmt-cli_2.13:${version} > deps
+      mkdir -p $out/share/java
+      cp $(< deps) $out/share/java/
+    '';
+    outputHashMode = "recursive";
+    outputHashAlgo = "sha256";
+    outputHash     = "FWGvhKK/VnvetnHS35/z1errYTRZCrcfWyEAHlhKApk=";
+  };
+in
+stdenv.mkDerivation {
+  pname = baseName;
+  inherit version;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jdk deps ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    makeWrapper ${jre}/bin/java $out/bin/${baseName} \
+      --add-flags "-cp $CLASSPATH org.scalafmt.cli.Cli"
+
+    runHook postInstall
+  '';
+
+  installCheckPhase = ''
+    $out/bin/${baseName} --version | grep -q "${version}"
+  '';
+
+  meta = with 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/scenebuilder/default.nix b/nixpkgs/pkgs/development/tools/scenebuilder/default.nix
new file mode 100644
index 000000000000..77928a1f22a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scenebuilder/default.nix
@@ -0,0 +1,115 @@
+{ lib, stdenv, fetchFromGitHub, jdk11, gradle_6, makeDesktopItem, copyDesktopItems, perl, writeText, runtimeShell, makeWrapper, glib, wrapGAppsHook }:
+let
+  gradle = gradle_6;
+
+  pname = "scenebuilder";
+  version = "15.0.1";
+
+  src = fetchFromGitHub {
+    owner = "gluonhq";
+    repo = pname;
+    rev = version;
+    sha256 = "0dqlpfgr9qpmk62zsnhzw4q6n0swjqy00294q0kb4djp3jn47iz4";
+  };
+
+  deps = stdenv.mkDerivation {
+    name = "${pname}-deps";
+    inherit src;
+
+    nativeBuildInputs = [ jdk11 perl gradle ];
+
+    buildPhase = ''
+      export GRADLE_USER_HOME=$(mktemp -d);
+      gradle --no-daemon build -x test
+    '';
+
+    # Mavenize dependency paths
+    # e.g. org.codehaus.groovy/groovy/2.4.0/{hash}/groovy-2.4.0.jar -> org/codehaus/groovy/groovy/2.4.0/groovy-2.4.0.jar
+    installPhase = ''
+      find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
+        | sh
+    '';
+
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "01dkayad68g3zpzdnjwrc0h6s7s6n619y5b576snc35l8g2r5sgd";
+  };
+
+  # Point to our local deps repo
+  gradleInit = writeText "init.gradle" ''
+    settingsEvaluated { settings ->
+      settings.pluginManagement {
+        repositories {
+          clear()
+          maven { url '${deps}' }
+        }
+      }
+    }
+    logger.lifecycle 'Replacing Maven repositories with ${deps}...'
+    gradle.projectsLoaded {
+      rootProject.allprojects {
+        buildscript {
+          repositories {
+            clear()
+            maven { url '${deps}' }
+          }
+        }
+        repositories {
+          clear()
+          maven { url '${deps}' }
+        }
+      }
+    }
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = "scenebuilder";
+    exec = "scenebuilder";
+    icon = "scenebuilder";
+    comment = "A visual, drag'n'drop, layout tool for designing JavaFX application user interfaces.";
+    desktopName = "Scene Builder";
+    mimeTypes = [ "application/java" "application/java-vm" "application/java-archive" ];
+    categories = [ "Development" ];
+  };
+
+in stdenv.mkDerivation rec {
+  inherit pname src version;
+
+  nativeBuildInputs = [ jdk11 gradle makeWrapper glib wrapGAppsHook ];
+
+  dontWrapGApps = true; # prevent double wrapping
+
+  buildPhase = ''
+    runHook preBuild
+
+    export GRADLE_USER_HOME=$(mktemp -d)
+    gradle -PVERSION=${version} --offline --no-daemon --info --init-script ${gradleInit} build -x test
+
+    runHook postBuild
+    '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/{${pname},icons/hicolor/128x128/apps}
+    cp app/build/libs/SceneBuilder-${version}-all.jar $out/share/${pname}/${pname}.jar
+    cp app/build/resources/main/com/oracle/javafx/scenebuilder/app/SB_Logo.png $out/share/icons/hicolor/128x128/apps/scenebuilder.png
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    makeWrapper ${jdk11}/bin/java $out/bin/${pname} --add-flags "-jar $out/share/${pname}/${pname}.jar" "''${gappsWrapperArgs[@]}"
+    '';
+
+  desktopItems = [ desktopItem ];
+
+  meta = with lib; {
+    description = "A visual, drag'n'drop, layout tool for designing JavaFX application user interfaces.";
+    homepage = "https://gluonhq.com/products/scene-builder/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ wirew0rm ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/scenic-view/default.nix b/nixpkgs/pkgs/development/tools/scenic-view/default.nix
new file mode 100644
index 000000000000..1322cfc751a8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scenic-view/default.nix
@@ -0,0 +1,110 @@
+{ lib, stdenv, fetchFromGitHub, jdk, gradle, makeDesktopItem, copyDesktopItems, perl, writeText, runtimeShell, makeWrapper }:
+let
+  pname = "scenic-view";
+  version = "11.0.2";
+
+  src = fetchFromGitHub {
+    owner = "JonathanGiles";
+    repo = pname;
+    rev = version;
+    sha256 = "1idfh9hxqs4fchr6gvhblhvjqk4mpl4rnpi84vn1l3yb700z7dwy";
+  };
+
+  deps = stdenv.mkDerivation {
+    name = "${pname}-deps";
+    inherit src;
+
+    nativeBuildInputs = [ jdk perl gradle ];
+
+    buildPhase = ''
+      export GRADLE_USER_HOME=$(mktemp -d);
+      gradle --no-daemon build
+    '';
+
+    # Mavenize dependency paths
+    # e.g. org.codehaus.groovy/groovy/2.4.0/{hash}/groovy-2.4.0.jar -> org/codehaus/groovy/groovy/2.4.0/groovy-2.4.0.jar
+    installPhase = ''
+      find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
+        | sh
+    '';
+
+    outputHashAlgo =  "sha256";
+    outputHashMode = "recursive";
+    outputHash = "0d6qs0wg2nfxyq85q46a8dcdqknz9pypb2qmvc8k2w8vcdac1y7n";
+  };
+
+  # Point to our local deps repo
+  gradleInit = writeText "init.gradle" ''
+    settingsEvaluated { settings ->
+      settings.pluginManagement {
+        repositories {
+          clear()
+          maven { url '${deps}' }
+        }
+      }
+    }
+    logger.lifecycle 'Replacing Maven repositories with ${deps}...'
+    gradle.projectsLoaded {
+      rootProject.allprojects {
+        buildscript {
+          repositories {
+            clear()
+            maven { url '${deps}' }
+          }
+        }
+        repositories {
+          clear()
+          maven { url '${deps}' }
+        }
+      }
+    }
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    desktopName = pname;
+    exec = pname;
+    comment = "JavaFx application to visualize and modify the scenegraph of running JavaFx applications.";
+    mimeTypes = [ "application/java" "application/java-vm" "application/java-archive" ];
+    categories = [ "Development" ];
+  };
+
+in stdenv.mkDerivation rec {
+  inherit pname version src;
+  nativeBuildInputs = [ jdk gradle makeWrapper ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    export GRADLE_USER_HOME=$(mktemp -d)
+    gradle --offline --no-daemon --info --init-script ${gradleInit} build
+
+    runHook postBuild
+    '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/${pname}
+    cp build/libs/scenicview.jar $out/share/${pname}/${pname}.jar
+    makeWrapper ${jdk}/bin/java $out/bin/${pname} --add-flags "-jar $out/share/${pname}/${pname}.jar"
+
+    runHook postInstall
+  '';
+
+  desktopItems = [ desktopItem ];
+
+  meta = with lib; {
+    description = "JavaFx application to visualize and modify the scenegraph of running JavaFx applications.";
+    longDescription = ''
+      A JavaFX application designed to make it simple to understand the current state of your application scenegraph
+      and to also easily manipulate properties of the scenegraph without having to keep editing your code.
+      This lets you find bugs and get things pixel perfect without having to do the compile-check-compile dance.
+    '';
+    homepage = "https://github.com/JonathanGiles/scenic-view/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ wirew0rm ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/scry/default.nix b/nixpkgs/pkgs/development/tools/scry/default.nix
new file mode 100644
index 000000000000..04307d02c4a1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scry/default.nix
@@ -0,0 +1,39 @@
+{ lib, fetchFromGitHub, crystal, coreutils, makeWrapper }:
+
+crystal.buildCrystalPackage rec {
+  pname = "scry";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "crystal-lang-tools";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hqyG1aKY3M8q8lZEKzpUUKl9jS7NF+VMsma6+C0sCbg=";
+  };
+
+  # a bunch of tests fail when built in the sandbox while perfectly fine outside
+  postPatch = ''
+    rm spec/scry/{client,completion_provider,context,executable}_spec.cr
+  '';
+
+  format = "shards";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  shardsFile = ./shards.nix;
+
+  postFixup = ''
+    wrapProgram $out/bin/scry \
+      --prefix PATH : ${lib.makeBinPath [ crystal coreutils ]}
+  '';
+
+  # the binary doesn't take any arguments, so this will hang
+  doInstallCheck = false;
+
+  meta = with 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 Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/scry/shards.nix b/nixpkgs/pkgs/development/tools/scry/shards.nix
new file mode 100644
index 000000000000..df3d0848471a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scry/shards.nix
@@ -0,0 +1,14 @@
+{
+  json_mapping = {
+    owner = "crystal-lang";
+    repo = "json_mapping.cr";
+    rev = "v0.1.0";
+    sha256 = "1qq5vs2085x7cwmp96rrjns0yz9kiz1lycxynfbz5psxll6b8p55";
+  };
+  lsp = {
+    owner = "crystal-lang-tools";
+    repo = "lsp";
+    rev = "v0.2.0";
+    sha256 = "1lnviqrywh0w05mx67mzw7d1qz328p52z4k69pcqw66gs44i7b5c";
+  };
+}
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..08e2fe4e64db
--- /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
+   2.1.4
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..866a860905c9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/scss-lint/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "scss_lint";
+  gemdir = ./.;
+  exes = [ "scss-lint" ];
+
+  passthru.updateScript = bundlerUpdateScript "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 = with maintainers; [ lovek323 nicknovitski ];
+    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..027522e58f8b
--- /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";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sd-local/default.nix b/nixpkgs/pkgs/development/tools/sd-local/default.nix
new file mode 100644
index 000000000000..c1c5bbee0ac3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sd-local/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "sd-local";
+  version = "1.0.40";
+
+  src = fetchFromGitHub {
+    owner = "screwdriver-cd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-/b9ZmwTw9DbdO0KI7rfT0YW0Xo2cxfwhk1TEfTe3ySU=";
+  };
+
+  vendorSha256 = "sha256-43hcIIGqBscMjQzaIGdMqV5lq3od4Ls4TJdTeFGtu5Y=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "screwdriver.cd local mode";
+    homepage = "https://github.com/screwdriver-cd/sd-local";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ midchildan ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/selene/default.nix b/nixpkgs/pkgs/development/tools/selene/default.nix
new file mode 100644
index 000000000000..37071321f510
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/selene/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, robloxSupport ? true
+, pkg-config
+, openssl
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "selene";
+  version = "0.16.0";
+
+  src = fetchFromGitHub {
+    owner = "kampfkarren";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-S0EeFJS90bzQ7C+hN4CyZ7l9wmizT2d3P6utshI5JWs=";
+  };
+
+  cargoSha256 = "sha256-3J1Q595LxAI0LBP4/cLHDrMbZBnoA2+OSr8/erQcN+0=";
+
+  nativeBuildInputs = lib.optional robloxSupport pkg-config;
+
+  buildInputs = lib.optional robloxSupport openssl
+    ++ lib.optional (robloxSupport && stdenv.isDarwin) Security;
+
+  buildNoDefaultFeatures = !robloxSupport;
+
+  meta = with lib; {
+    description = "A blazing-fast modern Lua linter written in Rust";
+    homepage = "https://github.com/kampfkarren/selene";
+    changelog = "https://github.com/kampfkarren/selene/blob/${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
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..a75488a229df
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/selenium/chromedriver/default.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv, fetchurl, unzip, makeWrapper
+, cairo, fontconfig, freetype, gdk-pixbuf, glib
+, glibc, gtk2, libX11, nspr, nss, pango
+, libxcb, libXi, libXrender, libXext, dbus
+, testVersion, chromedriver
+}:
+
+let
+  upstream-info = (lib.importJSON ../../../../applications/networking/browsers/chromium/upstream-info.json).stable.chromedriver;
+  allSpecs = {
+    x86_64-linux = {
+      system = "linux64";
+      sha256 = upstream-info.sha256_linux;
+    };
+
+    x86_64-darwin = {
+      system = "mac64";
+      sha256 = upstream-info.sha256_darwin;
+    };
+
+    aarch64-darwin = {
+      system = "mac64_m1";
+      sha256 = upstream-info.sha256_darwin_aarch64;
+    };
+  };
+
+  spec = allSpecs.${stdenv.hostPlatform.system}
+    or (throw "missing chromedriver binary for ${stdenv.hostPlatform.system}");
+
+  libs = lib.makeLibraryPath [
+    stdenv.cc.cc.lib
+    cairo fontconfig freetype
+    gdk-pixbuf glib gtk2
+    libX11 nspr nss pango libXrender
+    libxcb libXext libXi
+    dbus
+  ];
+
+in stdenv.mkDerivation rec {
+  pname = "chromedriver";
+  version = upstream-info.version;
+
+  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
+  '' + 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}"
+  '';
+
+  passthru.tests.version = testVersion { package = chromedriver; };
+
+  meta = with lib; {
+    homepage = "https://chromedriver.chromium.org/";
+    description = "A WebDriver server for running Selenium tests on Chrome";
+    longDescription = ''
+      WebDriver is an open source tool for automated testing of webapps across
+      many browsers. It provides capabilities for navigating to web pages, user
+      input, JavaScript execution, and more. ChromeDriver is a standalone
+      server that implements the W3C WebDriver standard.
+    '';
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ goibhniu marsam primeos ];
+    # Note from primeos: By updating Chromium I also update Google Chrome and
+    # ChromeDriver.
+    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..be3048cca25b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/selenium/htmlunit-driver/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "htmlunit-driver-standalone";
+  version = "2.27";
+
+  src = fetchurl {
+    url = "https://github.com/SeleniumHQ/htmlunit-driver/releases/download/${version}/htmlunit-driver-${version}-with-dependencies.jar";
+    sha256 = "1sd3cwpamcbq9pv0mvcm8x6minqrlb4i0r12q3jg91girqswm2dp";
+  };
+
+  dontUnpack = true;
+
+  installPhase = "install -D $src $out/share/lib/${pname}-${version}/${pname}-${version}.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..975a040b8bc3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/selenium/selendroid/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, makeWrapper, jdk, selenium-server-standalone }:
+
+with lib;
+let
+    pname = "selendroid-standalone";
+    pluginName = "selendroid-grid-plugin-${version}";
+    version = "0.17.0";
+    srcs = {
+      jar = fetchurl {
+        url = "https://github.com/selendroid/selendroid/releases/download/${version}/selendroid-standalone-${version}-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 {
+  inherit pname version;
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jdk ];
+
+  installPhase = ''
+    mkdir -p $out/share/lib/selendroid
+    cp ${srcs.jar} $out/share/lib/selendroid/selendroid-standalone-${version}.jar
+    cp ${srcs.gridPlugin} $out/share/lib/selendroid/${pluginName}.jar
+
+    makeWrapper ${jdk}/bin/java $out/bin/selendroid \
+      --add-flags "-jar $out/share/lib/selendroid/selendroid-standalone-${version}.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..61959b98b4cc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/selenium/server/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre
+, htmlunit-driver, chromedriver, chromeSupport ? true }:
+
+with lib;
+
+let
+  minorVersion = "3.141";
+  patchVersion = "59";
+
+in stdenv.mkDerivation rec {
+  pname = "selenium-server-standalone";
+  version = "${minorVersion}.${patchVersion}";
+
+  src = fetchurl {
+    url = "http://selenium-release.storage.googleapis.com/${minorVersion}/selenium-server-standalone-${version}.jar";
+    sha256 = "1jzkx0ahsb27zzzfvjqv660x9fz2pbcddgmhdzdmasxns5vipxxc";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  installPhase = ''
+    mkdir -p $out/share/lib/${pname}-${version}
+    cp $src $out/share/lib/${pname}-${version}/${pname}-${version}.jar
+    makeWrapper ${jre}/bin/java $out/bin/selenium-server \
+      --add-flags "-cp $out/share/lib/${pname}-${version}/${pname}-${version}.jar:${htmlunit-driver}/share/lib/${htmlunit-driver.name}/${htmlunit-driver.name}.jar" \
+      ${optionalString chromeSupport "--add-flags -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/sentry-cli/default.nix b/nixpkgs/pkgs/development/tools/sentry-cli/default.nix
new file mode 100644
index 000000000000..2d20beb2eb9a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sentry-cli/default.nix
@@ -0,0 +1,37 @@
+{ rustPlatform
+, fetchFromGitHub
+, lib
+, openssl
+, pkg-config
+, stdenv
+, Security
+, SystemConfiguration
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "sentry-cli";
+  version = "1.73.0";
+
+  src = fetchFromGitHub {
+    owner = "getsentry";
+    repo = "sentry-cli";
+    rev = version;
+    sha256 = "sha256-wnpC/LVhGOXWaa198bcahjdXRVuh1Xv0tFe2BCfOnNE=";
+  };
+  doCheck = false;
+
+  # Needed to get openssl-sys to use pkgconfig.
+  OPENSSL_NO_VENDOR = 1;
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
+  nativeBuildInputs = [ pkg-config ];
+
+  cargoSha256 = "sha256-7mjAKuiFcNzjt8Ti5/50TmPy3LY6dwXuQCHtbcoVZm8=";
+
+  meta = with lib; {
+    homepage = "https://docs.sentry.io/cli/";
+    license = licenses.bsd3;
+    description = "A command line utility to work with Sentry";
+    changelog = "https://github.com/getsentry/sentry-cli/raw/${version}/CHANGELOG.md";
+    maintainers = with maintainers; [ rizary ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/setupcfg2nix/default.nix b/nixpkgs/pkgs/development/tools/setupcfg2nix/default.nix
new file mode 100644
index 000000000000..4cc1ec320ccd
--- /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 = "1rj227vxybwp9acwnpwg9np964b1qcw2av3qmx00isnrw5vcps8m";
+  };
+  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..17e888fee416
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/setupcfg2nix/info.nix
@@ -0,0 +1,7 @@
+{
+  pname = "setupcfg2nix";
+  version = "2.0.1";
+  install_requires = [
+    "setuptools"
+  ];
+}
diff --git a/nixpkgs/pkgs/development/tools/shadered/default.nix b/nixpkgs/pkgs/development/tools/shadered/default.nix
new file mode 100644
index 000000000000..66a9512c18c4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/shadered/default.nix
@@ -0,0 +1,49 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, sfml
+, glm
+, python3
+, glew
+, pkg-config
+, SDL2 }:
+
+stdenv.mkDerivation rec {
+  pname = "SHADERed";
+  version = "1.5.6";
+
+  src = fetchFromGitHub {
+    owner = "dfranx";
+    repo = pname;
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "0drf8wwx0gcmi22jq2yyjy7ppxynfq172wqakchscm313j248fjr";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    SDL2
+    glew
+    glm
+    python3
+    sfml
+  ];
+
+  patches = [
+    ./install_path_fix.patch
+  ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=format-security";
+
+  meta = with lib; {
+    description = "Lightweight, cross-platform & full-featured shader IDE";
+    homepage = "https://github.com/dfranx/SHADERed";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ Scriptkiddi ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/shadered/install_path_fix.patch b/nixpkgs/pkgs/development/tools/shadered/install_path_fix.patch
new file mode 100644
index 000000000000..6b39ca696b90
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/shadered/install_path_fix.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 55eb05c..18f7fc3 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -234,7 +234,7 @@ endif()
+ 
+ set(BINARY_INST_DESTINATION "bin")
+ set(RESOURCE_INST_DESTINATION "share/shadered")
+-install(PROGRAMS bin/SHADERed DESTINATION "${BINARY_INST_DESTINATION}" RENAME shadered)
++install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/bin/SHADERed DESTINATION "${BINARY_INST_DESTINATION}" RENAME shadered)
+ install(DIRECTORY bin/data bin/templates bin/themes bin/plugins DESTINATION "${RESOURCE_INST_DESTINATION}")
+ 
+ if (UNIX AND NOT APPLE)
diff --git a/nixpkgs/pkgs/development/tools/shellcheck/default.nix b/nixpkgs/pkgs/development/tools/shellcheck/default.nix
new file mode 100644
index 000000000000..e85b596607b1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/shellcheck/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, lib, ShellCheck, haskell, pandoc }:
+
+# this wraps around the haskell package
+# and puts the documentation into place
+
+let
+  # TODO: move to lib/ in separate PR
+  overrideMeta = drv: overrideFn:
+    let
+      drv' = if drv ? meta then drv else drv // { meta = {}; };
+      pos = (builtins.unsafeGetAttrPos "pname" drv');
+      meta' = drv'.meta // {
+        # copied from the mkDerivation code
+        position = pos.file + ":" + toString pos.line;
+      };
+    in drv' // { meta = meta' // overrideFn meta'; };
+
+  bin = haskell.lib.compose.justStaticExecutables ShellCheck;
+
+  shellcheck = stdenv.mkDerivation {
+    pname = "shellcheck";
+    version = bin.version;
+
+    inherit (ShellCheck) meta src;
+
+    nativeBuildInputs = [ pandoc ];
+
+    outputs = [ "bin" "man" "doc" "out" ];
+
+    buildPhase = ''
+      pandoc -s -f markdown-smart -t man shellcheck.1.md -o shellcheck.1
+    '';
+
+    installPhase = ''
+      install -Dm755 ${bin}/bin/shellcheck $bin/bin/shellcheck
+      install -Dm644 README.md $doc/share/shellcheck/README.md
+      install -Dm644 shellcheck.1 $man/share/man/man1/shellcheck.1
+      mkdir $out
+    '';
+  };
+
+in
+  overrideMeta shellcheck (old: {
+    maintainers = with lib.maintainers; [ Profpatsch ];
+    outputsToInstall = [ "bin" "man" "doc" ];
+  })
diff --git a/nixpkgs/pkgs/development/tools/shellharden/default.nix b/nixpkgs/pkgs/development/tools/shellharden/default.nix
new file mode 100644
index 000000000000..d444a3685c5c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/shellharden/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shellharden";
+  version = "4.1.3";
+
+  src = fetchFromGitHub {
+    owner = "anordal";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "04pgmkaqjb1lmlwjjipcrqh9qcyjjkr39vi3h5fl9sr71c8g7dnd";
+  };
+
+  cargoSha256 = "0bjqgw49msl288yfa7bl31bfa9kdy4zh1q3j0lyw4vvkv2r14pf5";
+
+  postPatch = "patchShebangs moduletests/run";
+
+  meta = with lib; {
+    description = "The corrective bash syntax highlighter";
+    longDescription = ''
+      Shellharden is a syntax highlighter and a tool to semi-automate the
+      rewriting of scripts to ShellCheck conformance, mainly focused on quoting.
+    '';
+    homepage = "https://github.com/anordal/shellharden";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
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..b1ba0402a3e7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sigrok-cli/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, libsigrok, libsigrokdecode }:
+
+stdenv.mkDerivation rec {
+  pname = "sigrok-cli";
+  version = "0.7.2";
+
+  src = fetchurl {
+    url = "https://sigrok.org/download/source/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-cdBEPzaJe/Vlcy3sIGgw2+oPJ4m2YBzxBTayhtEUCrg=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib libsigrok libsigrokdecode ];
+
+  meta = with 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..b7490d4108d5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/simavr/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, libelf, which, pkg-config, freeglut
+, avrgcc, avrlibc
+, libGLU, libGL
+, GLUT }:
+
+stdenv.mkDerivation rec {
+  pname = "simavr";
+  version = "1.7";
+
+  src = fetchFromGitHub {
+    owner = "buserror";
+    repo = "simavr";
+    rev = "v${version}";
+    sha256 = "0njz03lkw5374x1lxrq08irz4b86lzj2hibx46ssp7zv712pq55q";
+  };
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+    "AVR_ROOT=${avrlibc}/avr"
+    "SIMAVR_VERSION=${version}"
+    "AVR=avr-"
+  ];
+
+  NIX_CFLAGS_COMPILE = [ "-Wno-error=stringop-truncation" ];
+
+  nativeBuildInputs = [ which pkg-config avrgcc ];
+  buildInputs = [ libelf freeglut libGLU libGL ]
+    ++ 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 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..2d2237e7b638
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/skaffold/default.nix
@@ -0,0 +1,51 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "skaffold";
+  version = "1.36.0";
+
+  src = fetchFromGitHub {
+    owner = "GoogleContainerTools";
+    repo = "skaffold";
+    rev = "v${version}";
+    sha256 = "sha256-N5m13wxCtdZ1UBBVmq77XvePJTphMhLoHl4VcTcl3dE=";
+  };
+
+  vendorSha256 = "sha256-49UuGVdOlIf50QZ+qlA4kxlrSKouN8zZlby4wMxabe0=";
+
+  subPackages = ["cmd/skaffold"];
+
+  ldflags = let t = "github.com/GoogleContainerTools/skaffold/pkg/skaffold"; in [
+    "-s" "-w"
+    "-X ${t}/version.version=v${version}"
+    "-X ${t}/version.gitCommit=${src.rev}"
+    "-X ${t}/version.buildDate=unknown"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/skaffold version | grep ${version} > /dev/null
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd skaffold \
+      --bash <($out/bin/skaffold completion bash) \
+      --zsh <($out/bin/skaffold completion zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://skaffold.dev/";
+    changelog = "https://github.com/GoogleContainerTools/skaffold/releases/tag/v${version}";
+    description = "Easy and Repeatable Kubernetes Development";
+    longDescription = ''
+      Skaffold is a command line tool that facilitates continuous development for Kubernetes applications.
+      You can iterate on your application source code locally then deploy to local or remote Kubernetes clusters.
+      Skaffold handles the workflow for building, pushing and deploying your application.
+      It also provides building blocks and describe customizations for a CI/CD pipeline.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ vdemeester bryanasdev000];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/skjold/default.nix b/nixpkgs/pkgs/development/tools/skjold/default.nix
new file mode 100644
index 000000000000..173de27d945e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/skjold/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "skjold";
+  version = "0.4.1";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "twu";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-xz6N7/LS3wOymh9tet8OLgsSaretzuMU4hQd+LeUPJ4=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    packaging
+    pyyaml
+    toml
+  ];
+
+  checkInputs = with python3.pkgs; [
+    pytest-mock
+    pytest-watch
+    pytestCheckHook
+  ];
+
+  patches = [
+    # Switch to poetry-core, https://github.com/twu/skjold/pull/91
+    (fetchpatch {
+      name = "switch-poetry-core.patch";
+      url = "https://github.com/twu/skjold/commit/b341748c9b11798b6a5182d659a651b0f200c6f5.patch";
+      sha256 = "sha256-FTZTbIudO6lYO9tLD4Lh1h5zsTeKYtflR2tbbHZ5auM=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace 'packaging = "^21.0"' 'packaging = "*"' \
+      --replace 'pyyaml = "^5.3"' 'pyyaml = "*"'
+  '';
+
+  disabledTestPaths = [
+    # Too sensitive to pass
+    "tests/test_cli.py"
+  ];
+
+  disabledTests = [
+    # Requires network access
+    "pyup-werkzeug"
+    "test_ensure_accessing_advisories_triggers_update"
+    "test_ensure_accessing_advisories_triggers_update"
+    "test_ensure_gemnasium_update"
+    "test_ensure_missing_github_token_raises_usage_error"
+    "test_ensure_pypi_advisory_db_update"
+    "test_ensure_source_is_affected_single"
+    "test_osv_advisory_with_vulnerable_package_via_osv_api"
+    "urllib3"
+  ];
+
+  pythonImportsCheck = [
+    "skjold"
+  ];
+
+  meta = with lib; {
+    description = "Tool to Python dependencies against security advisory databases";
+    homepage = "https://github.com/twu/skjold";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/skopeo/default.nix b/nixpkgs/pkgs/development/tools/skopeo/default.nix
new file mode 100644
index 000000000000..213a8da8ce02
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/skopeo/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, gpgme
+, lvm2
+, btrfs-progs
+, pkg-config
+, go-md2man
+, installShellFiles
+, makeWrapper
+, fuse-overlayfs
+}:
+
+buildGoModule rec {
+  pname = "skopeo";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "containers";
+    repo = "skopeo";
+    sha256 = "sha256-L3dHkF7yKnwXpXxCEswwA0TxVfjTzc89l0rpT7EYpIU=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  vendorSha256 = null;
+
+  doCheck = false;
+
+  nativeBuildInputs = [ pkg-config go-md2man installShellFiles makeWrapper ];
+
+  buildInputs = [ gpgme ]
+  ++ lib.optionals stdenv.isLinux [ lvm2 btrfs-progs ];
+
+  buildPhase = ''
+    runHook preBuild
+    patchShebangs .
+    make bin/skopeo docs
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 bin/skopeo -t $out/bin
+    installManPage docs/*.[1-9]
+    installShellCompletion --bash completions/bash/skopeo
+  '' + lib.optionalString stdenv.isLinux ''
+    wrapProgram $out/bin/skopeo \
+      --prefix PATH : ${lib.makeBinPath [ fuse-overlayfs ]}
+  '' + ''
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A command line utility for various operations on container images and image repositories";
+    homepage = "https://github.com/containers/skopeo";
+    maintainers = with maintainers; [ lewo ] ++ teams.podman.members;
+    license = 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..7ebe7dba8512
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/slimerjs/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, zip, unzip, firefox, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "slimerjs";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "laurentj";
+    repo = "slimerjs";
+    sha256 = "sha256-RHd9PqcSkO9FYi5x+09TN7c4fKGf5pCPXjoCUXZ2mvA=";
+    rev = version;
+  };
+
+  buildInputs = [ zip ];
+  nativeBuildInputs = [ unzip ];
+
+  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 = with lib; {
+    description = "Gecko-based programmatically-driven browser";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/so/default.nix b/nixpkgs/pkgs/development/tools/so/default.nix
new file mode 100644
index 000000000000..a23fa445c2fd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/so/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, openssl, pkg-config, libiconv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "so";
+  version = "0.4.5";
+
+  src = fetchFromGitHub {
+    owner = "samtay";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-KiIffq8olpNpynmV4lwdY0yu2ch4MAwp5VspfLZtkf4=";
+  };
+
+  cargoSha256 = "sha256-VBuWKit50cSHYg7WzUP5ein3MEoZN/KFfm+YEEu544Q=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [
+    libiconv Security
+  ];
+
+  meta = with lib; {
+    description = "A TUI interface to the StackExchange network";
+    homepage = "https://github.com/samtay/so";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mredaelli ];
+  };
+}
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..159fe3d99eb7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/solarus-quest-editor/default.nix
@@ -0,0 +1,42 @@
+{ lib, mkDerivation, fetchFromGitLab, cmake, luajit
+, SDL2, SDL2_image, SDL2_ttf, physfs, fetchpatch
+, openal, libmodplug, libvorbis, solarus
+, qtbase, qttools, glm }:
+
+mkDerivation rec {
+  pname = "solarus-quest-editor";
+  version = "1.6.4";
+
+  src = fetchFromGitLab {
+    owner = "solarus-games";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1qbc2j9kalk7xqk9j27s7wnm5zawiyjs47xqkqphw683idmzmjzn";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://gitlab.com/solarus-games/solarus-quest-editor/-/commit/81d5c7f1602cf355684d70a5e3449fefccfc44b8.patch";
+      sha256 = "tVUxkkDp2PcOHGy4dGvUcYj9gF7k4LN21VuxohCw9NE=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ luajit SDL2 SDL2_image SDL2_ttf physfs openal
+    libmodplug libvorbis solarus qtbase qttools glm ];
+
+  meta = with 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..6ba4eecac480
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sourcetrail/default.nix
@@ -0,0 +1,275 @@
+{ lib, stdenv, fetchFromGitHub, callPackage, writeScript, fetchpatch, cmake
+, wrapQtAppsHook, qt5, boost, llvmPackages, gcc, jdk, maven, pythonPackages
+, coreutils, which, desktop-file-utils, shared-mime-info, imagemagick, libicns
+}:
+
+let
+  # TODO: remove when version incompatibility issue with python3Packages.jedi is
+  # resolved
+  parso = pythonPackages.callPackage ./parso.nix { };
+  jedi = pythonPackages.callPackage ./jedi.nix { inherit parso; };
+
+  pythonIndexer =
+    pythonPackages.callPackage ./python.nix { inherit jedi parso; };
+  javaIndexer = callPackage ./java.nix { };
+
+  appPrefixDir = if stdenv.isDarwin then
+    "$out/Applications/Sourcetrail.app/Contents"
+  else
+    "$out/opt/sourcetrail";
+  appBinDir =
+    if stdenv.isDarwin then "${appPrefixDir}/MacOS" else "${appPrefixDir}/bin";
+  appResourceDir = if stdenv.isDarwin then
+    "${appPrefixDir}/Resources"
+  else
+    "${appPrefixDir}/share";
+
+  # Upstream script:
+  # https://github.com/CoatiSoftware/Sourcetrail/blob/master/script/update_java_indexer.sh
+  installJavaIndexer = writeScript "update_java_indexer.sh" ''
+    #!${stdenv.shell}
+
+    cd "$(dirname "$0")/.."
+    dst="${appResourceDir}/data/java/lib"
+
+    mkdir -p "$dst"
+    cp "${javaIndexer}/target/java-indexer-1.0.jar" "$dst/java-indexer.jar"
+    cp -r java_indexer/lib/*.jar "$dst"
+  '';
+
+  # Upstream script:
+  # https://github.com/CoatiSoftware/Sourcetrail/blob/master/script/download_python_indexer.sh
+  installPythonIndexer = writeScript "download_python_indexer.sh" ''
+    #!${stdenv.shell}
+
+    mkdir -p ${appResourceDir}/data
+    ln -s "${pythonIndexer}/bin" "${appResourceDir}/data/python"
+  '';
+in stdenv.mkDerivation rec {
+  pname = "sourcetrail";
+  # NOTE: skip 2020.4.35 https://github.com/CoatiSoftware/Sourcetrail/pull/1136
+  version = "2020.2.43";
+
+  src = fetchFromGitHub {
+    owner = "CoatiSoftware";
+    repo = "Sourcetrail";
+    rev = version;
+    sha256 = "0jp9y86xzkcxikc1cn4f6gqgg6zdssck08677ldagw25p1zadvzw";
+  };
+
+  patches = let
+    url = commit:
+      "https://github.com/CoatiSoftware/Sourcetrail/commit/${commit}.patch";
+  in [
+    ./disable-updates.patch
+    ./disable-failing-tests.patch # FIXME: 5 test cases failing due to sandbox
+    # TODO: remove on next release
+    (fetchpatch {
+      name = "fix-filecopy.patch";
+      url = url "d079d1787c9e5cadcf41a003666dc0746cc1cda0";
+      sha256 = "0mixy2a4s16kv2q89k7y4dv21wnv2zd86i4gdwn3xz977y8hf92b";
+    })
+    (fetchpatch {
+      name = "fix-broken-test.patch";
+      url = url "85329174bac8a301733100dc4540258f977e2c5a";
+      sha256 = "17l4417sbmkrgr6v3fbazlmkzl9774zrpjv2n9zwfrz52y30f7b9";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    jdk
+    wrapQtAppsHook
+    desktop-file-utils
+    imagemagick
+    javaIndexer # the resulting jar file is copied by our install script
+  ] ++ lib.optional (stdenv.isDarwin) libicns
+    ++ lib.optionals doCheck testBinPath;
+  buildInputs = [ boost pythonIndexer shared-mime-info ]
+    ++ (with qt5; [ qtbase qtsvg ]) ++ (with llvmPackages; [ libclang llvm ]);
+  binPath = [ gcc jdk.jre maven which ];
+  testBinPath = binPath ++ [ coreutils ];
+
+  cmakeFlags = [
+    "-DBoost_USE_STATIC_LIBS=OFF"
+    "-DBUILD_CXX_LANGUAGE_PACKAGE=ON"
+    "-DBUILD_JAVA_LANGUAGE_PACKAGE=ON"
+    "-DBUILD_PYTHON_LANGUAGE_PACKAGE=ON"
+  ] ++ lib.optional stdenv.isLinux
+    "-DCMAKE_PREFIX_PATH=${llvmPackages.clang-unwrapped}"
+    ++ lib.optional stdenv.isDarwin
+    "-DClang_DIR=${llvmPackages.clang-unwrapped}";
+
+  postPatch = let
+    major = lib.versions.major version;
+    minor = lib.versions.minor version;
+    patch = lib.versions.patch version;
+  in ''
+    # Upstream script obtains it's version from git:
+    # https://github.com/CoatiSoftware/Sourcetrail/blob/master/cmake/version.cmake
+    cat > cmake/version.cmake <<EOF
+    set(GIT_BRANCH "")
+    set(GIT_COMMIT_HASH "")
+    set(GIT_VERSION_NUMBER "")
+    set(VERSION_YEAR "${major}")
+    set(VERSION_MINOR "${minor}")
+    set(VERSION_COMMIT "${patch}")
+    set(BUILD_TYPE "Release")
+    set(VERSION_STRING "${major}.${minor}.${patch}")
+    EOF
+
+    # Sourcetrail attempts to copy clang headers from the LLVM store path
+    substituteInPlace CMakeLists.txt \
+      --replace "\''${LLVM_BINARY_DIR}" '${lib.getLib llvmPackages.clang-unwrapped}'
+
+    patchShebangs script
+    ln -sf ${installJavaIndexer} script/update_java_indexer.sh
+    ln -sf ${installPythonIndexer} script/download_python_indexer.sh
+  '';
+
+  # Directory layout for Linux:
+  #
+  # Sourcetrail doesn't use the usual cmake install() commands and instead uses
+  # its own bash script for packaging. Since we're not able to reuse the script,
+  # we'll have to roll our own in nixpkgs.
+  #
+  # Sourcetrail currently assumes one of the following two layouts for the
+  # placement of its files:
+  #
+  # AppImage Layout       Traditional Layout
+  # ├── bin/              ├── sourcetrail*
+  # │   └── sourcetrail*  └── data/
+  # └── share/
+  #     └── data/         sourcetrail: application executable
+  #                       data: contains assets exlusive to Sourcetrail
+  #
+  # The AppImage layout is the one currently used by the upstream project for
+  # packaging its Linux port. We can't use this layout as-is for nixpkgs,
+  # because Sourcetrail treating $out/share/data as its own might lead to
+  # conflicts with other packages when linked into a Nix profile.
+  #
+  # On the other hand, the traditional layout isn't used by the upstream project
+  # anymore so there's a risk that it might become unusable at any time in the
+  # future. Since it's hard to detect these problems at build time, it's not a
+  # good idea to use this layout for packaging in nixpkgs.
+  #
+  # Considering the problems with the above layouts, we go with the third
+  # option, a slight variation of the AppImage layout:
+  #
+  # nixpkgs
+  # ├── bin/
+  # │   └── sourcetrail@ (symlink to opt/sourcetrail/bin/sourcetrail)
+  # └── opt/sourcetrail/
+  #     ├── bin/
+  #     │   └── sourcetrail*
+  #     └── share/
+  #         └── data/
+  #
+  # Upstream install script:
+  # https://github.com/CoatiSoftware/Sourcetrail/blob/master/setup/Linux/createPackages.sh
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p ${appResourceDir}
+    cp -R ../bin/app/data ${appResourceDir}
+    cp -R ../bin/app/user/projects ${appResourceDir}/data/fallback
+    rm -r ${appResourceDir}/data/install ${appResourceDir}/data/*_template.xml
+
+    mkdir -p "${appBinDir}"
+    cp app/Sourcetrail ${appBinDir}/sourcetrail
+    cp app/sourcetrail_indexer ${appBinDir}/sourcetrail_indexer
+    wrapQtApp ${appBinDir}/sourcetrail \
+      --prefix PATH : ${lib.makeBinPath binPath}
+
+    mkdir -p $out/bin
+  '' + lib.optionalString (stdenv.isLinux) ''
+    ln -sf ${appBinDir}/sourcetrail $out/bin/sourcetrail
+
+    desktop-file-install --dir=$out/share/applications \
+      --set-key Exec --set-value ${appBinDir}/sourcetrail \
+      ../setup/Linux/data/sourcetrail.desktop
+
+    mkdir -p $out/share/mime/packages
+    cp ../setup/Linux/data/sourcetrail-mime.xml $out/share/mime/packages/
+
+    for size in 48 64 128 256 512; do
+      mkdir -p $out/share/icons/hicolor/''${size}x''${size}/apps/
+      convert ${appResourceDir}/data/gui/icon/logo_1024_1024.png \
+        -resize ''${size}x''${size} \
+        $out/share/icons/hicolor/''${size}x''${size}/apps/sourcetrail.png
+    done
+  '' + lib.optionalString (stdenv.isDarwin) ''
+    # change case (some people *might* choose a case sensitive Nix store)
+    mv ${appBinDir}/sourcetrail{,.tmp}
+    mv ${appBinDir}/{sourcetrail.tmp,Sourcetrail}
+    mv ${appBinDir}/sourcetrail_indexer ${appResourceDir}/Sourcetrail_indexer
+
+    ln -sf ${appBinDir}/Sourcetrail $out/bin/sourcetrail
+
+    cp app/bundle_info.plist ${appPrefixDir}/Info.plist
+
+    mkdir -p ${appResourceDir}/icon.iconset
+    for size in 16 32 128 256 512; do
+      convert ${appResourceDir}/data/gui/icon/logo_1024_1024.png \
+        -resize ''${size}x''${size} \
+        ${appResourceDir}/icon.iconset/icon_''${size}x''${size}.png
+      convert ${appResourceDir}/data/gui/icon/logo_1024_1024.png \
+        -resize $(( 2 * size ))x$(( 2 * size )) \
+        ${appResourceDir}/icon.iconset/icon_''${size}x''${size}@2x.png
+    done
+    png2icns ${appResourceDir}/icon.icns \
+      ${appResourceDir}/icon.iconset/icon_{16x16,32x32,128x128,256x256,512x512,512x512@2x}.png
+
+    mkdir -p ${appResourceDir}/project.iconset
+    for size in 16 32 64 128 256 512; do
+      convert ${appResourceDir}/data/gui/icon/project_256_256.png \
+        -resize ''${size}x''${size} \
+        ${appResourceDir}/project.iconset/icon_''${size}x''${size}.png
+      convert ${appResourceDir}/data/gui/icon/project_256_256.png \
+        -resize $(( 2 * size ))x$(( 2 * size )) \
+        ${appResourceDir}/project.iconset/icon_''${size}x''${size}@2x.png
+    done
+    png2icns ${appResourceDir}/project.icns \
+      ${appResourceDir}/project.iconset/icon_{16x16,32x32,128x128,256x256,512x512,512x512@2x}.png
+  '' + ''
+    runHook postInstall
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+
+    rm -rf ../bin/app/data/{python,java/lib}
+    ln -s $out/opt/sourcetrail/share/data/python ../bin/app/data/python
+    ln -s $out/opt/sourcetrail/share/data/java/lib ../bin/app/data/java/lib
+
+    pushd test
+    # shorten PATH to prevent build failures
+    wrapQtApp ./Sourcetrail_test \
+      --set PATH "" \
+      --prefix PATH : ${lib.makeBinPath testBinPath} \
+      --set MAVEN_OPTS "-Dmaven.repo.local=$TMPDIR/m2repo"
+    ./Sourcetrail_test
+    popd
+
+    rm ../bin/app/data/{python,java/lib}
+
+    runHook postCheck
+  '';
+
+  # This has to be done manually in the installPhase because the actual binary
+  # lives in $out/opt/sourcetrail/bin, which isn't covered by wrapQtAppsHook
+  dontWrapQtApps = true;
+
+  # FIXME: Some test cases are disabled in the patch phase.
+  # FIXME: Tests are disabled on some platforms because of faulty detection
+  # logic for libjvm.so. Should work with manual configuration.
+  doCheck = !stdenv.isDarwin && stdenv.isx86_64;
+
+  meta = with lib; {
+    homepage = "https://www.sourcetrail.com";
+    description = "A cross-platform source explorer for C/C++ and Java";
+    platforms = platforms.all;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ midchildan ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sourcetrail/disable-failing-tests.patch b/nixpkgs/pkgs/development/tools/sourcetrail/disable-failing-tests.patch
new file mode 100644
index 000000000000..7903642ef585
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sourcetrail/disable-failing-tests.patch
@@ -0,0 +1,48 @@
+diff --git a/src/test/SourceGroupTestSuite.cpp b/src/test/SourceGroupTestSuite.cpp
+index b5c5562a..d56b83bb 100644
+--- a/src/test/SourceGroupTestSuite.cpp
++++ b/src/test/SourceGroupTestSuite.cpp
+@@ -522,6 +522,7 @@ TEST_CASE("sourcegroup java gradle generates expected output")
+ 
+ TEST_CASE("sourcegroup java maven generates expected output")
+ {
++	return;
+ 	std::vector<FilePath> mavenPaths = utility::getMavenExecutablePathDetector()->getPaths();
+ 
+ 	REQUIRE(!mavenPaths.empty());
+diff --git a/src/test/UtilityMavenTestSuite.cpp b/src/test/UtilityMavenTestSuite.cpp
+index f48fe2b6..363ef64a 100644
+--- a/src/test/UtilityMavenTestSuite.cpp
++++ b/src/test/UtilityMavenTestSuite.cpp
+@@ -17,6 +17,7 @@ TEST_CASE("maven path detector is working")
+ 
+ TEST_CASE("maven wrapper detects source directories of simple projects")
+ {
++	return;
+ 	std::shared_ptr<PathDetector> mavenPathDetector = utility::getMavenExecutablePathDetector();
+ 	REQUIRE(!mavenPathDetector->getPaths().empty());
+ 
+@@ -41,6 +42,7 @@ TEST_CASE("maven wrapper detects source directories of simple projects")
+ 
+ TEST_CASE("maven wrapper detects source and test directories of simple projects")
+ {
++	return;
+ 	std::shared_ptr<PathDetector> mavenPathDetector = utility::getMavenExecutablePathDetector();
+ 	REQUIRE(!mavenPathDetector->getPaths().empty());
+ 
+@@ -65,6 +67,7 @@ TEST_CASE("maven wrapper detects source and test directories of simple projects"
+ 
+ TEST_CASE("maven wrapper detects source directories of nested modules")
+ {
++	return;
+ 	std::shared_ptr<PathDetector> mavenPathDetector = utility::getMavenExecutablePathDetector();
+ 	REQUIRE(!mavenPathDetector->getPaths().empty());
+ 
+@@ -101,6 +104,7 @@ TEST_CASE("maven wrapper detects source directories of nested modules")
+ 
+ TEST_CASE("maven wrapper detects source and test directories of nested modules")
+ {
++	return;
+ 	std::shared_ptr<PathDetector> mavenPathDetector = utility::getMavenExecutablePathDetector();
+ 	REQUIRE(!mavenPathDetector->getPaths().empty());
+ 
diff --git a/nixpkgs/pkgs/development/tools/sourcetrail/disable-updates.patch b/nixpkgs/pkgs/development/tools/sourcetrail/disable-updates.patch
new file mode 100644
index 000000000000..112af857c59e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sourcetrail/disable-updates.patch
@@ -0,0 +1,13 @@
+diff --git a/src/lib/settings/ApplicationSettings.cpp b/src/lib/settings/ApplicationSettings.cpp
+index 1be13ccd..db6098e1 100644
+--- a/src/lib/settings/ApplicationSettings.cpp
++++ b/src/lib/settings/ApplicationSettings.cpp
+@@ -593,7 +593,7 @@ void ApplicationSettings::setUserToken(std::string token)
+ 
+ bool ApplicationSettings::getAutomaticUpdateCheck() const
+ {
+-	return getValue<bool>("user/update_check/automatic", true);
++	return false;
+ }
+ 
+ void ApplicationSettings::setAutomaticUpdateCheck(bool automaticUpdates)
diff --git a/nixpkgs/pkgs/development/tools/sourcetrail/java.nix b/nixpkgs/pkgs/development/tools/sourcetrail/java.nix
new file mode 100644
index 000000000000..7056dca447f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sourcetrail/java.nix
@@ -0,0 +1,27 @@
+{ pkgs, javaPackages }:
+
+let
+  javaIndexer = javaPackages.mavenbuild {
+    name = "sourcetrail-java-indexer-${pkgs.sourcetrail.version}";
+    src = pkgs.sourcetrail.src;
+    m2Path = "com/sourcetrail/java-indexer";
+
+    # This doesn't include all required dependencies. We still rely on binary
+    # copies of maven packages included in the source repo for building.
+    mavenDeps = with javaPackages; [
+      mavenCompiler_3_2
+      plexusCompilerApi_2_4
+      plexusCompilerJavac_2_4
+      plexusCompilerManager_2_4
+    ];
+
+    meta = {
+      description = "Java indexer for Sourcetrail";
+    };
+  };
+in
+javaIndexer.overrideAttrs (drv: {
+  postUnpack = ''
+    export sourceRoot=''${sourceRoot}/java_indexer
+  '';
+})
diff --git a/nixpkgs/pkgs/development/tools/sourcetrail/jedi.nix b/nixpkgs/pkgs/development/tools/sourcetrail/jedi.nix
new file mode 100644
index 000000000000..93650c9027a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sourcetrail/jedi.nix
@@ -0,0 +1,36 @@
+# Taken from a past commit of nixpkgs
+
+{ lib, buildPythonPackage, fetchPypi, pytest, glibcLocales, tox, pytest-cov, parso }:
+
+buildPythonPackage rec {
+  pname = "jedi";
+
+  # TODO: Remove this package when version incompatibility issue with
+  # python3Packages.jedi is resolved.
+  #
+  # Upstream requirements:
+  # https://github.com/CoatiSoftware/SourcetrailPythonIndexer#requirements
+  version = "0.17.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "86ed7d9b750603e4ba582ea8edc678657fb4007894a12bcf6f4bb97892f31d20";
+  };
+
+  checkInputs = [ pytest glibcLocales tox pytest-cov ];
+
+  propagatedBuildInputs = [ parso ];
+
+  checkPhase = ''
+    LC_ALL="en_US.UTF-8" py.test test
+  '';
+
+  # tox required for tests: https://github.com/davidhalter/jedi/issues/808
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/davidhalter/jedi";
+    description = "An autocompletion tool for Python that can be used for text editors";
+    license = licenses.lgpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sourcetrail/parso.nix b/nixpkgs/pkgs/development/tools/sourcetrail/parso.nix
new file mode 100644
index 000000000000..bd5d5b86ac51
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sourcetrail/parso.nix
@@ -0,0 +1,29 @@
+# Taken from a past commit of nixpkgs
+
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pytest
+}:
+
+buildPythonPackage rec {
+  pname = "parso";
+
+  # TODO: Remove along with ./jedi.nix when version compatiblity issue is
+  # resolved.
+  version = "0.7.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "908e9fae2144a076d72ae4e25539143d40b8e3eafbaeae03c1bfe226f4cdf12c";
+  };
+
+  checkInputs = [ pytest ];
+
+  meta = {
+    description = "A Python Parser";
+    homepage = "https://github.com/davidhalter/parso";
+    license = lib.licenses.mit;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/sourcetrail/python.nix b/nixpkgs/pkgs/development/tools/sourcetrail/python.nix
new file mode 100644
index 000000000000..f9ea96463207
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sourcetrail/python.nix
@@ -0,0 +1,72 @@
+{ stdenv, lib, fetchFromGitHub, wrapPython, python, jedi, parso, cmake, swig }:
+
+stdenv.mkDerivation rec {
+  pname = "SourcetrailPythonIndexer";
+  version = "v1_db25_p5";
+
+  src = fetchFromGitHub {
+    owner = "CoatiSoftware";
+    repo = pname;
+    rev = version;
+    sha256 = "01jaigxigq6dvfwq018gn9qw7i6p4jm0y71lqzschfv9vwf6ga45";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ wrapPython cmake swig ];
+  buildInputs = [ python ];
+  pythonPath = [ jedi parso ];
+
+  dontUseCmakeConfigure = true;
+  cmakeFlags = [
+    "-DBUILD_BINDINGS_PYTHON=1"
+    "-DPYTHON_VERSION=${lib.versions.majorMinor python.version}"
+  ];
+
+  buildPhase = ''
+    pushd SourcetrailDB
+    cmake -Bbuild $cmakeFlags .
+    pushd build
+    make -j $NIX_BUILD_CORES
+    popd
+    popd
+  '' + lib.optionalString stdenv.isDarwin ''
+    pushd SourcetrailDB/build/bindings_python
+    cp _sourcetraildb.dylib _sourcetraildb.so
+    popd
+  '';
+
+  checkPhase = ''
+    buildPythonPath "$pythonPath"
+
+    # FIXME: some tests are failing
+    # PYTHONPATH="$program_PYTHONPATH:SourcetrailDB/build/bindings_python" \
+    #   ${python}/bin/python test.py
+    PYTHONPATH="$program_PYTHONPATH:SourcetrailDB/build/bindings_python" \
+      ${python}/bin/python test_shallow.py
+  '';
+
+  installPhase = ''
+    shopt -s extglob
+    mkdir -p $out/{bin,libexec}
+
+    cp !(run).py $out/libexec # copy *.py excluding run.py (needs extglob)
+    cat <(echo '#!/usr/bin/env python') run.py > $out/libexec/run.py
+    chmod +x $out/libexec/run.py
+    ln -s $out/libexec/run.py $out/bin/SourcetrailPythonIndexer
+
+    pushd SourcetrailDB/build/bindings_python
+    cp sourcetraildb.py $out/libexec
+    cp _sourcetraildb.so $out/libexec/_sourcetraildb.so
+    popd
+
+    wrapPythonProgramsIn "$out/libexec" "$pythonPath"
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Python indexer for Sourcetrail";
+    homepage = "https://github.com/CoatiSoftware/SourcetrailPythonIndexer";
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/spicy/default.nix b/nixpkgs/pkgs/development/tools/spicy/default.nix
new file mode 100644
index 000000000000..691a105941a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/spicy/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "spicy";
+  version = "unstable-2020-02-21";
+
+  goPackagePath = "github.com/trhodeos/spicy";
+
+  src = fetchFromGitHub {
+    owner = "trhodeos";
+    repo = "spicy";
+    rev = "47409fb73e0b20b323c46cc06a3858d0a252a817";
+    sha256 = "022r8klmr21vaz5qd72ndrzj7pyqpfxc3jljz7nzsa50fjf82c3a";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "A Nintendo 64 segment assembler";
+    longDescription = ''
+      An open-source version of the Nintendo64 sdk's mild.exe. Assembles
+      segments into an n64-compatible rom.
+    '';
+    homepage = "https://github.com/trhodeos/spicy";
+    license = licenses.mit;
+    maintainers = [ maintainers._414owen];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/spicy/deps.nix b/nixpkgs/pkgs/development/tools/spicy/deps.nix
new file mode 100644
index 000000000000..9532b01decb4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/spicy/deps.nix
@@ -0,0 +1,56 @@
+[
+  {
+    goPackagePath = "github.com/alecthomas/participle";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/participle.git";
+      rev = "fed0e8fbb638b11091014aa838748210dc9ff576";
+      sha256 = "0yhhm42lis8ak9m6x6aai280xq0652vcq5v17pibbf74dalxyims";
+    };
+  }
+  {
+    goPackagePath = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus.git";
+      rev = "f104497f2b2129ab888fd274891f3a278756bcde";
+      sha256 = "0gr2c7s3ffdaynzn1zplp79zz16qgqpnsq2z9zg79wxksq5mz5l1";
+    };
+  }
+  {
+    goPackagePath = "github.com/ogier/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ogier/pflag.git";
+      rev = "73e519546fc0bce0c395610afcf6aa4e5aec88eb";
+      sha256 = "114zpgl6l47gsz0sifpq62hi2i6k0ra9hi8wx7d39giablf9i4ii";
+    };
+  }
+  {
+    goPackagePath = "github.com/trhodeos/n64rom";
+    fetch = {
+      type = "git";
+      url = "https://github.com/trhodeos/n64rom.git";
+      rev = "504dba7b4d4675bd3396c052d64016c5725c2f5e";
+      sha256 = "01hybm8nxh1lym0wc9sxrms3wyqhhs0dm1a2nwz6xc60lkjcp8kb";
+    };
+  }
+  {
+    goPackagePath = "github.com/trhodeos/ecoff";
+    fetch = {
+      type = "git";
+      url = "https://github.com/trhodeos/ecoff.git";
+      rev = "e54570a0fac23c0fa7f605681345611f345ce0f6";
+      sha256 = "0pc0yj7hy43m00br0q0f1y5a3bc3a134imcyy2jvzim45g6g12kj";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/sys";
+      rev = "9a76102bfb4322425a1228caa377974426e82c84";
+      sha256 = "07qn19yla2w604p3dc8h1c75xj2pxc4fajvg0mf0d4c72d5qiss4";
+    };
+  }
+]
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..aa58b37773ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/spirv-tools/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, cmake, python3, spirv-headers }:
+
+stdenv.mkDerivation rec {
+  pname = "spirv-tools";
+  version = "1.2.198.0";
+
+  src = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "SPIRV-Tools";
+    rev = "sdk-${version}";
+    sha256 = "sha256-8EJbTPY5dvsqx32POf2HcCV3j2fA68GtGZA66l9V4TI=";
+  };
+
+  nativeBuildInputs = [ cmake python3 ];
+
+  cmakeFlags = [ "-DSPIRV-Headers_SOURCE_DIR=${spirv-headers.src}" ];
+
+  meta = with 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.unix;
+    maintainers = [ maintainers.ralith ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/spring-boot-cli/default.nix b/nixpkgs/pkgs/development/tools/spring-boot-cli/default.nix
new file mode 100644
index 000000000000..5bc89e839e92
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/spring-boot-cli/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchzip, jdk, makeWrapper, installShellFiles, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "spring-boot-cli";
+  version = "2.3.2";
+
+  src = fetchzip {
+    url = "https://repo.spring.io/release/org/springframework/boot/${pname}/${version}.RELEASE/${pname}-${version}.RELEASE-bin.zip";
+    sha256 = "1zqfnxz57234227rp303iwis0mjkkjkpcqnj9jgw78gykjnqdmmq";
+  };
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+    rm bin/spring.bat
+    installShellCompletion --bash shell-completion/bash/spring
+    installShellCompletion --zsh shell-completion/zsh/_spring
+    rm -r shell-completion
+    cp -r . $out
+    wrapProgram $out/bin/spring \
+      --set JAVA_HOME ${jdk} \
+      --set PATH /bin:${coreutils}/bin:${jdk}/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = ''
+      CLI which makes it easy to create spring-based applications
+    '';
+    longDescription = ''
+      Spring Boot makes it easy to create stand-alone, production-grade
+      Spring-based Applications that you can run. We take an opinionated view
+      of the Spring platform and third-party libraries, so that you can get
+      started with minimum fuss. Most Spring Boot applications need very
+      little Spring configuration.
+
+      You can use Spring Boot to create Java applications that can be started
+      by using java -jar or more traditional war deployments. We also provide
+      a command line tool that runs “spring scripts”.
+    '';
+    homepage = "https://spring.io/projects/spring-boot";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ moaxcp ];
+  };
+}
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..94587de9ac32
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqlint/Gemfile.lock
@@ -0,0 +1,17 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    google-protobuf (3.15.6)
+    pg_query (2.0.2)
+      google-protobuf (~> 3.15.5)
+    sqlint (0.2.0)
+      pg_query (~> 2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  sqlint
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/development/tools/sqlint/default.nix b/nixpkgs/pkgs/development/tools/sqlint/default.nix
new file mode 100644
index 000000000000..960792d648b3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqlint/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "sqlint";
+  gemdir = ./.;
+
+  exes = [ "sqlint" ];
+
+  passthru.updateScript = bundlerUpdateScript "sqlint";
+
+  meta = with lib; {
+    description = "Simple SQL linter";
+    homepage    = "https://github.com/purcell/sqlint";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ ariutta nicknovitski purcell ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sqlint/gemset.nix b/nixpkgs/pkgs/development/tools/sqlint/gemset.nix
new file mode 100644
index 000000000000..674fe75dc187
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqlint/gemset.nix
@@ -0,0 +1,34 @@
+{
+  google-protobuf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ak5yqqhr04b4x0axzvpw1xzwmxmfcw0gf4r1ijixv15kidhsj3z";
+      type = "gem";
+    };
+    version = "3.15.6";
+  };
+  pg_query = {
+    dependencies = ["google-protobuf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bvn0swyzzhl9x8hlgaz7m7s1jqmpdi2c4klarix0hiyapy2il9y";
+      type = "gem";
+    };
+    version = "2.0.2";
+  };
+  sqlint = {
+    dependencies = ["pg_query"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ylicsc9x4vpj6ff3hmrm6iz1xswrwwgn1m7ri8nx86ij30w9hkk";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/sqsh/default.nix b/nixpkgs/pkgs/development/tools/sqsh/default.nix
new file mode 100644
index 000000000000..ba4a681a594d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sqsh/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, autoreconfHook, freetds, readline, libiconv }:
+
+let
+  mainVersion = "2.5";
+
+in stdenv.mkDerivation rec {
+  pname = "sqsh";
+  version = "${mainVersion}.16.1";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/sqsh/sqsh/sqsh-${mainVersion}/${pname}-${version}.tgz";
+    sha256 = "1wi0hdmhk7l8nrz4j3kaa177mmxyklmzhj7sq1gj4q6fb8v1yr6n";
+  };
+
+  preConfigure = ''
+    export SYBASE=${freetds}
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace configure --replace "libct.so" "libct.dylib"
+  '';
+
+  enableParallelBuilding = true;
+
+  buildInputs = [ freetds readline libiconv ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  patches = [
+    (fetchurl {
+      # https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/databases/sqsh/patches/patch-src_cmd_connect_c
+      name = "patch-src_cmd_connect_c.patch";
+      url = "https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/ports/databases/sqsh/patches/patch-src_cmd_connect_c?rev=1.2&content-type=text/plain";
+      sha256 = "1dz97knr2h0a0ca1vq2mx6h8s3ns9jb1a0qraa4wkfmcdi3aqw0j";
+    })
+  ];
+
+  patchFlags = [ "-p0" ];
+
+  meta = with 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..146ff9df76c2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sslmate/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, perlPackages, makeWrapper, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "sslmate";
+  version = "1.9.0";
+
+  src = fetchurl {
+    url = "https://packages.sslmate.com/other/${pname}-${version}.tar.gz";
+    sha256 = "sha256-PkASJIRJH1kXjegOFMz36QzqT+qUBWslx/iavjFoW5g=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perlPackages.perl ];
+
+  postInstall = ''
+    wrapProgram $out/bin/sslmate --prefix PERL5LIB : \
+      "${with perlPackages; makePerlPath [
+        URI
+        JSONPP
+        TermReadKey
+      ]}" \
+      --prefix PATH : "${openssl.bin}/bin"
+  '';
+
+  meta = with 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..3b47823b9b43
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/stagit/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, libgit2, fetchgit }:
+
+stdenv.mkDerivation rec {
+  pname = "stagit";
+  version = "1.0";
+
+  src = fetchgit {
+    url = "git://git.codemadness.org/stagit";
+    rev = version;
+    sha256 = "sha256-4QSKW89RyK/PpGE+lOHFiMTI82pdspfObnzd0rcgQkg=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  buildInputs = [ libgit2 ];
+
+  meta = with lib; {
+    description = "git static site generator";
+    homepage = "https://git.codemadness.org/stagit/file/README.html";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ jb55 sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/statik/default.nix b/nixpkgs/pkgs/development/tools/statik/default.nix
new file mode 100644
index 000000000000..48ceea24b70c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/statik/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "statik";
+  version = "0.1.7";
+
+  src = fetchFromGitHub {
+    owner = "rakyll";
+    repo = "statik";
+    rev = "v${version}";
+    sha256 = "ahsNiac/3I2+PUqc90E73Brb99M68ewh9nWXoupfE3g=";
+  };
+
+  vendorSha256 = "pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo=";
+
+  # Avoid building example
+  subPackages = [ "." "fs" ];
+  # Tests are checking that the files embeded are preserving
+  # their meta data like dates etc, but it assumes to be in 2048
+  # which is not the case once entered the nix store
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/rakyll/statik";
+    description = "Embed files into a Go executable ";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ chiiruno ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/stylua/default.nix b/nixpkgs/pkgs/development/tools/stylua/default.nix
new file mode 100644
index 000000000000..1b25634502a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/stylua/default.nix
@@ -0,0 +1,31 @@
+{ fetchFromGitHub
+, lib
+, rustPlatform
+, lua52Support ? true
+, luauSupport ? false
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "stylua";
+  version = "0.12.4";
+
+  src = fetchFromGitHub {
+    owner = "johnnymorganz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-BPLN7/LaVDtCOJBgIJVbnENUyFtacRsK3JxDupytzOA=";
+  };
+
+  cargoSha256 = "sha256-MZsFbFQp5Rw20pXzvTFNhMiVx/TJZ63/2rU7vj7IcqQ=";
+
+  buildFeatures = lib.optional lua52Support "lua52"
+    ++ lib.optional luauSupport "luau";
+
+  meta = with lib; {
+    description = "An opinionated Lua code formatter";
+    homepage = "https://github.com/johnnymorganz/stylua";
+    changelog = "https://github.com/johnnymorganz/stylua/blob/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/summon/default.nix b/nixpkgs/pkgs/development/tools/summon/default.nix
new file mode 100644
index 000000000000..5c811aaf2391
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/summon/default.nix
@@ -0,0 +1,35 @@
+{ buildGoModule, fetchFromGitHub, lib, patchResolver ? true }:
+
+with lib;
+
+buildGoModule rec {
+  pname = "summon";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "cyberark";
+    repo = "summon";
+    rev = "v${version}";
+    sha256 = "1z4xnrncwvp3rfm97zvc0ivvw2fh1hrjhj3rplvidzxjfyasbvwv";
+  };
+
+  vendorSha256 = "1597vrs4b7k6gkmkvf7xnd38rvjixmlcz0j7npmik9nbkm57l74m";
+
+  subPackages = [ "cmd" ];
+
+  # Patches provider resolver to support resolving unqualified names
+  # from $PATH, e.g. `summon -p gopass` instead of `summon -p $(which gopass)`
+  patches = optional patchResolver [ ./resolve-paths.patch ];
+
+  postInstall = ''
+    mv $out/bin/cmd $out/bin/summon
+  '';
+
+  meta = with lib; {
+    description =
+      "CLI that provides on-demand secrets access for common DevOps tools";
+    homepage = "https://cyberark.github.io/summon";
+    license = lib.licenses.mit;
+    maintainers = with maintainers; [ quentini ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/summon/resolve-paths.patch b/nixpkgs/pkgs/development/tools/summon/resolve-paths.patch
new file mode 100644
index 000000000000..cd49c50e2bda
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/summon/resolve-paths.patch
@@ -0,0 +1,39 @@
+From dd34727ebfbd59738084eeb7c2a020e40a4d0abe Mon Sep 17 00:00:00 2001
+From: Quentin <Quentin Inkling>
+Date: Mon, 29 Jun 2020 17:35:04 +0300
+Subject: [PATCH] Patch for
+
+---
+ provider/provider.go | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/provider/provider.go b/provider/provider.go
+index c1e28d9..f20fdaa 100644
+--- a/provider/provider.go
++++ b/provider/provider.go
+@@ -78,7 +78,22 @@ func expandPath(provider string) string {
+ 	if path.Base(provider) != provider {
+ 		return provider
+ 	}
++
++	var (
++		stdOut bytes.Buffer
++		stdErr bytes.Buffer
++	)
++	cmd := exec.Command("which", provider)
++	cmd.Stdout = &stdOut
++	cmd.Stderr = &stdErr
++	err := cmd.Run()
++
++	if err == nil {
++		return strings.TrimSpace(stdOut.String())
++	}
++
+ 	return path.Join(DefaultPath, provider)
++
+ }
+ 
+ func getDefaultPath() string {
+-- 
+2.27.0
+
diff --git a/nixpkgs/pkgs/development/tools/sumneko-lua-language-server/default.nix b/nixpkgs/pkgs/development/tools/sumneko-lua-language-server/default.nix
new file mode 100644
index 000000000000..88fa62903dd8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sumneko-lua-language-server/default.nix
@@ -0,0 +1,83 @@
+{ lib, stdenv, fetchFromGitHub, ninja, makeWrapper, darwin }:
+let
+  target = if stdenv.isDarwin then "macOS" else "Linux";
+in
+stdenv.mkDerivation rec {
+  pname = "sumneko-lua-language-server";
+  version = "2.6.7";
+
+  src = fetchFromGitHub {
+    owner = "sumneko";
+    repo = "lua-language-server";
+    rev = version;
+    sha256 = "sha256-m9vtopRjxT9Re8pDdzfFUpg3zYAFE8zqFemgaNAbsvM=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    ninja
+    makeWrapper
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.Foundation
+  ];
+
+  preBuild = ''
+    cd 3rd/luamake
+  ''
+  + lib.optionalString stdenv.isDarwin ''
+    # Needed for the test
+    export HOME=/var/empty
+    # This package uses the program clang for C and C++ files. The language
+    # is selected via the command line argument -std, but this do not work
+    # in combination with the nixpkgs clang wrapper. Therefor we have to
+    # find all c++ compiler statements and replace $cc (which expands to
+    # clang) with clang++.
+    sed -i compile/ninja/macos.ninja \
+      -e '/c++/s,$cc,clang++,' \
+      -e '/test.lua/s,= .*,= true,' \
+      -e '/ldl/s,$cc,clang++,'
+    sed -i scripts/compiler/gcc.lua \
+      -e '/cxx_/s,$cc,clang++,'
+  '';
+
+  ninjaFlags = [
+    "-fcompile/ninja/${lib.toLower target}.ninja"
+  ];
+
+  postBuild = ''
+    cd ../..
+    ./3rd/luamake/luamake rebuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dt "$out"/share/lua-language-server/bin bin/lua-language-server
+    install -m644 -t "$out"/share/lua-language-server/bin bin/*.*
+    install -m644 -t "$out"/share/lua-language-server {debugger,main}.lua
+    cp -r locale meta script "$out"/share/lua-language-server
+
+    # necessary for --version to work:
+    install -m644 -t "$out"/share/lua-language-server changelog.md
+
+    makeWrapper "$out"/share/lua-language-server/bin/lua-language-server \
+      $out/bin/lua-language-server \
+      --add-flags "-E $out/share/lua-language-server/main.lua \
+      --logpath='~/.cache/sumneko_lua/log' \
+      --metapath='~/.cache/sumneko_lua/meta'"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Lua Language Server coded by Lua ";
+    homepage = "https://github.com/sumneko/lua-language-server";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "lua-language-server";
+  };
+}
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..320fcb1b04cd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/sunxi-tools/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, dtc, libusb1, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "sunxi-tools";
+  version = "unstable-2021-08-29";
+
+  src = fetchFromGitHub {
+    owner = "linux-sunxi";
+    repo = "sunxi-tools";
+    rev = "74273b671a3fc34048383c40c85c684423009fb9";
+    sha256 = "1gwamb64vr45iy2ry7jp1k3zc03q5sydmdflrbwr892f0ijh2wjl";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ dtc libusb1 zlib ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  buildFlags = [ "tools" "misc" ];
+
+  installTargets = [ "install-tools" "install-misc" ];
+
+  meta = with 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/swiftformat/default.nix b/nixpkgs/pkgs/development/tools/swiftformat/default.nix
new file mode 100644
index 000000000000..823496693f25
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/swiftformat/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, lib, fetchFromGitHub, runCommand }:
+
+# This derivation is impure: it relies on an Xcode toolchain being installed
+# and available in the expected place. The values of sandboxProfile and
+# hydraPlatforms are copied pretty directly from the MacVim derivation, which
+# is also impure.
+
+stdenv.mkDerivation rec {
+  pname = "swiftformat";
+  version = "0.47.10";
+
+  src = fetchFromGitHub {
+    owner = "nicklockwood";
+    repo = "SwiftFormat";
+    rev = version;
+    sha256 = "1gqxpymbhpmap0i2blg9akarlql4mkzv45l4i212gsxcs991b939";
+  };
+
+  preConfigure = "LD=$CC";
+
+  buildPhase = ''
+    /usr/bin/xcodebuild -project SwiftFormat.xcodeproj \
+      -scheme "SwiftFormat (Command Line Tool)" \
+      CODE_SIGN_IDENTITY= SYMROOT=build OBJROOT=build
+  '';
+
+  installPhase = ''
+    install -D -m 0555 build/Release/swiftformat $out/bin/swiftformat
+  '';
+
+  sandboxProfile = ''
+    (allow file-read* file-write* process-exec mach-lookup)
+    ; block homebrew dependencies
+    (deny file-read* file-write* process-exec mach-lookup (subpath "/usr/local") (with no-log))
+  '';
+
+  meta = with lib; {
+    description = "A code formatting and linting tool for Swift";
+    homepage = "https://github.com/nicklockwood/SwiftFormat";
+    license = licenses.mit;
+    maintainers = [ maintainers.bdesham ];
+    platforms = platforms.darwin;
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/symfony-cli/default.nix b/nixpkgs/pkgs/development/tools/symfony-cli/default.nix
new file mode 100644
index 000000000000..d87ecddbf894
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/symfony-cli/default.nix
@@ -0,0 +1,24 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "symfony-cli";
+  version = "5.4.1";
+  vendorSha256 = "sha256-MlsgII1QybyW+B7DGbSyn7VQ36n29yOC0pZnaemEHO8=";
+
+  src = fetchFromGitHub {
+    owner = "symfony-cli";
+    repo = "symfony-cli";
+    rev = "v${version}";
+    sha256 = "sha256-92Pth+IrILWkcP4mm3IcSN4+zs7TNg4CPGT2liop7/I=";
+  };
+
+  # Tests requires network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Symfony CLI";
+    homepage = "https://github.com/symfony-cli/symfony-cli";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ drupol ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/systemfd/Cargo.nix b/nixpkgs/pkgs/development/tools/systemfd/Cargo.nix
new file mode 100644
index 000000000000..b6687f1e929a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/systemfd/Cargo.nix
@@ -0,0 +1,215 @@
+# Generated by carnix 0.10.0: carnix generate-nix
+{ lib, buildPlatform, buildRustCrate, buildRustCrateHelpers, cratesIO, fetchgit }:
+with buildRustCrateHelpers;
+let inherit (lib.lists) fold;
+    inherit (lib.attrsets) recursiveUpdate;
+in
+rec {
+  crates = cratesIO;
+  systemfd = crates.crates.systemfd."0.3.0" deps;
+  __all = [ (systemfd {}) ];
+  deps.aho_corasick."0.6.4" = {
+    memchr = "2.0.1";
+  };
+  deps.ansi_term."0.11.0" = {
+    winapi = "0.3.4";
+  };
+  deps.atty."0.2.10" = {
+    termion = "1.5.1";
+    libc = "0.2.40";
+    winapi = "0.3.4";
+  };
+  deps.backtrace."0.3.7" = {
+    cfg_if = "0.1.3";
+    rustc_demangle = "0.1.8";
+    backtrace_sys = "0.1.16";
+    libc = "0.2.40";
+    winapi = "0.3.4";
+  };
+  deps.backtrace_sys."0.1.16" = {
+    libc = "0.2.40";
+    cc = "1.0.15";
+  };
+  deps.bitflags."1.0.3" = {};
+  deps.byteorder."1.2.3" = {};
+  deps.bytes."0.4.7" = {
+    byteorder = "1.2.3";
+    iovec = "0.1.2";
+  };
+  deps.cc."1.0.15" = {};
+  deps.cfg_if."0.1.3" = {};
+  deps.clap."2.31.2" = {
+    atty = "0.2.10";
+    bitflags = "1.0.3";
+    strsim = "0.7.0";
+    textwrap = "0.9.0";
+    unicode_width = "0.1.4";
+    vec_map = "0.8.1";
+    ansi_term = "0.11.0";
+  };
+  deps.clicolors_control."0.2.0" = {
+    lazy_static = "0.2.11";
+    libc = "0.2.40";
+    kernel32_sys = "0.2.2";
+    winapi = "0.3.4";
+  };
+  deps.console."0.6.1" = {
+    clicolors_control = "0.2.0";
+    lazy_static = "0.2.11";
+    libc = "0.2.40";
+    parking_lot = "0.5.5";
+    regex = "0.2.11";
+    unicode_width = "0.1.4";
+    termios = "0.2.2";
+    winapi = "0.3.4";
+  };
+  deps.failure."0.1.1" = {
+    backtrace = "0.3.7";
+    failure_derive = "0.1.1";
+  };
+  deps.failure_derive."0.1.1" = {
+    quote = "0.3.15";
+    syn = "0.11.11";
+    synstructure = "0.6.1";
+  };
+  deps.fuchsia_zircon."0.3.3" = {
+    bitflags = "1.0.3";
+    fuchsia_zircon_sys = "0.3.3";
+  };
+  deps.fuchsia_zircon_sys."0.3.3" = {};
+  deps.gcc."0.3.54" = {};
+  deps.iovec."0.1.2" = {
+    libc = "0.2.40";
+    winapi = "0.2.8";
+  };
+  deps.kernel32_sys."0.2.2" = {
+    winapi = "0.2.8";
+    winapi_build = "0.1.1";
+  };
+  deps.lazy_static."0.2.11" = {};
+  deps.lazy_static."1.0.0" = {};
+  deps.libc."0.2.40" = {};
+  deps.memchr."2.0.1" = {
+    libc = "0.2.40";
+  };
+  deps.nix."0.10.0" = {
+    bitflags = "1.0.3";
+    bytes = "0.4.7";
+    cfg_if = "0.1.3";
+    libc = "0.2.40";
+    void = "1.0.2";
+  };
+  deps.owning_ref."0.3.3" = {
+    stable_deref_trait = "1.0.0";
+  };
+  deps.parking_lot."0.5.5" = {
+    owning_ref = "0.3.3";
+    parking_lot_core = "0.2.14";
+  };
+  deps.parking_lot_core."0.2.14" = {
+    rand = "0.4.2";
+    smallvec = "0.6.1";
+    libc = "0.2.40";
+    winapi = "0.3.4";
+  };
+  deps.quote."0.3.15" = {};
+  deps.rand."0.4.2" = {
+    fuchsia_zircon = "0.3.3";
+    libc = "0.2.40";
+    winapi = "0.3.4";
+  };
+  deps.redox_syscall."0.1.37" = {};
+  deps.redox_termios."0.1.1" = {
+    redox_syscall = "0.1.37";
+  };
+  deps.regex."0.2.11" = {
+    aho_corasick = "0.6.4";
+    memchr = "2.0.1";
+    regex_syntax = "0.5.6";
+    thread_local = "0.3.5";
+    utf8_ranges = "1.0.0";
+  };
+  deps.regex."1.0.0" = {
+    aho_corasick = "0.6.4";
+    memchr = "2.0.1";
+    regex_syntax = "0.6.0";
+    thread_local = "0.3.5";
+    utf8_ranges = "1.0.0";
+  };
+  deps.regex_syntax."0.5.6" = {
+    ucd_util = "0.1.1";
+  };
+  deps.regex_syntax."0.6.0" = {
+    ucd_util = "0.1.1";
+  };
+  deps.rustc_demangle."0.1.8" = {};
+  deps.smallvec."0.6.1" = {};
+  deps.socket2."0.3.5" = {
+    cfg_if = "0.1.3";
+    libc = "0.2.40";
+    winapi = "0.3.4";
+  };
+  deps.stable_deref_trait."1.0.0" = {};
+  deps.strsim."0.7.0" = {};
+  deps.syn."0.11.11" = {
+    quote = "0.3.15";
+    synom = "0.11.3";
+    unicode_xid = "0.0.4";
+  };
+  deps.synom."0.11.3" = {
+    unicode_xid = "0.0.4";
+  };
+  deps.synstructure."0.6.1" = {
+    quote = "0.3.15";
+    syn = "0.11.11";
+  };
+  deps.systemfd."0.3.0" = {
+    clap = "2.31.2";
+    console = "0.6.1";
+    failure = "0.1.1";
+    failure_derive = "0.1.1";
+    lazy_static = "1.0.0";
+    libc = "0.2.40";
+    regex = "1.0.0";
+    nix = "0.10.0";
+    socket2 = "0.3.5";
+    uuid = "0.6.3";
+    winapi = "0.3.4";
+  };
+  deps.termion."1.5.1" = {
+    libc = "0.2.40";
+    redox_syscall = "0.1.37";
+    redox_termios = "0.1.1";
+  };
+  deps.termios."0.2.2" = {
+    libc = "0.2.40";
+  };
+  deps.textwrap."0.9.0" = {
+    unicode_width = "0.1.4";
+  };
+  deps.thread_local."0.3.5" = {
+    lazy_static = "1.0.0";
+    unreachable = "1.0.0";
+  };
+  deps.ucd_util."0.1.1" = {};
+  deps.unicode_width."0.1.4" = {};
+  deps.unicode_xid."0.0.4" = {};
+  deps.unreachable."1.0.0" = {
+    void = "1.0.2";
+  };
+  deps.utf8_ranges."1.0.0" = {};
+  deps.uuid."0.6.3" = {
+    cfg_if = "0.1.3";
+    rand = "0.4.2";
+  };
+  deps.vec_map."0.8.1" = {};
+  deps.void."1.0.2" = {};
+  deps.winapi."0.2.8" = {};
+  deps.winapi."0.3.4" = {
+    winapi_i686_pc_windows_gnu = "0.4.0";
+    winapi_x86_64_pc_windows_gnu = "0.4.0";
+  };
+  deps.winapi_build."0.1.1" = {};
+  deps.winapi_i686_pc_windows_gnu."0.4.0" = {};
+  deps.winapi_x86_64_pc_windows_gnu."0.4.0" = {};
+}
diff --git a/nixpkgs/pkgs/development/tools/systemfd/crates-io.list b/nixpkgs/pkgs/development/tools/systemfd/crates-io.list
new file mode 100644
index 000000000000..0b8371f68a1e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/systemfd/crates-io.list
@@ -0,0 +1,62 @@
+aho-corasick-0.6.4
+ansi_term-0.11.0
+atty-0.2.10
+backtrace-0.3.7
+backtrace-sys-0.1.16
+bitflags-1.0.3
+byteorder-1.2.3
+bytes-0.4.7
+cc-1.0.15
+cfg-if-0.1.3
+clap-2.31.2
+clicolors-control-0.2.0
+console-0.6.1
+failure-0.1.1
+failure_derive-0.1.1
+fuchsia-zircon-0.3.3
+fuchsia-zircon-sys-0.3.3
+gcc-0.3.54
+iovec-0.1.2
+kernel32-sys-0.2.2
+lazy_static-0.2.11
+lazy_static-1.0.0
+libc-0.2.40
+memchr-2.0.1
+nix-0.10.0
+owning_ref-0.3.3
+parking_lot-0.5.5
+parking_lot_core-0.2.14
+quote-0.3.15
+rand-0.4.2
+redox_syscall-0.1.37
+redox_termios-0.1.1
+regex-0.2.11
+regex-1.0.0
+regex-syntax-0.5.6
+regex-syntax-0.6.0
+rustc-demangle-0.1.8
+smallvec-0.6.1
+socket2-0.3.5
+stable_deref_trait-1.0.0
+strsim-0.7.0
+syn-0.11.11
+synom-0.11.3
+synstructure-0.6.1
+systemfd-0.3.0
+termion-1.5.1
+termios-0.2.2
+textwrap-0.9.0
+thread_local-0.3.5
+ucd-util-0.1.1
+unicode-width-0.1.4
+unicode-xid-0.0.4
+unreachable-1.0.0
+utf8-ranges-1.0.0
+uuid-0.6.3
+vec_map-0.8.1
+void-1.0.2
+winapi-0.2.8
+winapi-0.3.4
+winapi-build-0.1.1
+winapi-i686-pc-windows-gnu-0.4.0
+winapi-x86_64-pc-windows-gnu-0.4.0
diff --git a/nixpkgs/pkgs/development/tools/systemfd/crates-io.nix b/nixpkgs/pkgs/development/tools/systemfd/crates-io.nix
new file mode 100644
index 000000000000..7e7b737b8c87
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/systemfd/crates-io.nix
@@ -0,0 +1,1890 @@
+{ lib, buildRustCrate, buildRustCrateHelpers }:
+with buildRustCrateHelpers;
+let inherit (lib.lists) fold;
+    inherit (lib.attrsets) recursiveUpdate;
+in
+rec {
+
+# aho-corasick-0.6.4
+
+  crates.aho_corasick."0.6.4" = deps: { features?(features_.aho_corasick."0.6.4" deps {}) }: buildRustCrate {
+    crateName = "aho-corasick";
+    version = "0.6.4";
+    description = "Fast multiple substring searching with finite state machines.";
+    authors = [ "Andrew Gallant <jamslam@gmail.com>" ];
+    sha256 = "189v919mp6rzzgjp1khpn4zlq8ls81gh43x1lmc8kbkagdlpq888";
+    libName = "aho_corasick";
+    crateBin =
+      [{  name = "aho-corasick-dot"; }];
+    dependencies = mapFeatures features ([
+      (crates."memchr"."${deps."aho_corasick"."0.6.4"."memchr"}" deps)
+    ]);
+  };
+  features_.aho_corasick."0.6.4" = deps: f: updateFeatures f (rec {
+    aho_corasick."0.6.4".default = (f.aho_corasick."0.6.4".default or true);
+    memchr."${deps.aho_corasick."0.6.4".memchr}".default = true;
+  }) [
+    (features_.memchr."${deps."aho_corasick"."0.6.4"."memchr"}" deps)
+  ];
+
+
+# end
+# ansi_term-0.11.0
+
+  crates.ansi_term."0.11.0" = deps: { features?(features_.ansi_term."0.11.0" deps {}) }: buildRustCrate {
+    crateName = "ansi_term";
+    version = "0.11.0";
+    description = "Library for ANSI terminal colours and styles (bold, underline)";
+    authors = [ "ogham@bsago.me" "Ryan Scheel (Havvy) <ryan.havvy@gmail.com>" "Josh Triplett <josh@joshtriplett.org>" ];
+    sha256 = "08fk0p2xvkqpmz3zlrwnf6l8sj2vngw464rvzspzp31sbgxbwm4v";
+    dependencies = (if kernel == "windows" then mapFeatures features ([
+      (crates."winapi"."${deps."ansi_term"."0.11.0"."winapi"}" deps)
+    ]) else []);
+  };
+  features_.ansi_term."0.11.0" = deps: f: updateFeatures f (rec {
+    ansi_term."0.11.0".default = (f.ansi_term."0.11.0".default or true);
+    winapi = fold recursiveUpdate {} [
+      { "${deps.ansi_term."0.11.0".winapi}"."consoleapi" = true; }
+      { "${deps.ansi_term."0.11.0".winapi}"."errhandlingapi" = true; }
+      { "${deps.ansi_term."0.11.0".winapi}"."processenv" = true; }
+      { "${deps.ansi_term."0.11.0".winapi}".default = true; }
+    ];
+  }) [
+    (features_.winapi."${deps."ansi_term"."0.11.0"."winapi"}" deps)
+  ];
+
+
+# end
+# atty-0.2.10
+
+  crates.atty."0.2.10" = deps: { features?(features_.atty."0.2.10" deps {}) }: buildRustCrate {
+    crateName = "atty";
+    version = "0.2.10";
+    description = "A simple interface for querying atty";
+    authors = [ "softprops <d.tangren@gmail.com>" ];
+    sha256 = "1h26lssj8rwaz0xhwwm5a645r49yly211amfmd243m3m0jl49i2c";
+    dependencies = (if kernel == "redox" then mapFeatures features ([
+      (crates."termion"."${deps."atty"."0.2.10"."termion"}" deps)
+    ]) else [])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."libc"."${deps."atty"."0.2.10"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."winapi"."${deps."atty"."0.2.10"."winapi"}" deps)
+    ]) else []);
+  };
+  features_.atty."0.2.10" = deps: f: updateFeatures f (rec {
+    atty."0.2.10".default = (f.atty."0.2.10".default or true);
+    libc."${deps.atty."0.2.10".libc}".default = (f.libc."${deps.atty."0.2.10".libc}".default or false);
+    termion."${deps.atty."0.2.10".termion}".default = true;
+    winapi = fold recursiveUpdate {} [
+      { "${deps.atty."0.2.10".winapi}"."consoleapi" = true; }
+      { "${deps.atty."0.2.10".winapi}"."minwinbase" = true; }
+      { "${deps.atty."0.2.10".winapi}"."minwindef" = true; }
+      { "${deps.atty."0.2.10".winapi}"."processenv" = true; }
+      { "${deps.atty."0.2.10".winapi}"."winbase" = true; }
+      { "${deps.atty."0.2.10".winapi}".default = true; }
+    ];
+  }) [
+    (features_.termion."${deps."atty"."0.2.10"."termion"}" deps)
+    (features_.libc."${deps."atty"."0.2.10"."libc"}" deps)
+    (features_.winapi."${deps."atty"."0.2.10"."winapi"}" deps)
+  ];
+
+
+# end
+# backtrace-0.3.7
+
+  crates.backtrace."0.3.7" = deps: { features?(features_.backtrace."0.3.7" deps {}) }: buildRustCrate {
+    crateName = "backtrace";
+    version = "0.3.7";
+    description = "A library to acquire a stack trace (backtrace) at runtime in a Rust program.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" "The Rust Project Developers" ];
+    sha256 = "00zzcgacv516dlhxkrdw4c8vsx3bwkkdrrzi5pnxrhpd87ambjwn";
+    dependencies = mapFeatures features ([
+      (crates."cfg_if"."${deps."backtrace"."0.3.7"."cfg_if"}" deps)
+      (crates."rustc_demangle"."${deps."backtrace"."0.3.7"."rustc_demangle"}" deps)
+    ])
+      ++ (if (kernel == "linux" || kernel == "darwin") && !(kernel == "fuchsia") && !(kernel == "emscripten") && !(kernel == "darwin") && !(kernel == "ios") then mapFeatures features ([
+    ]
+      ++ (if features.backtrace."0.3.7".backtrace-sys or false then [ (crates.backtrace_sys."${deps."backtrace"."0.3.7".backtrace_sys}" deps) ] else [])) else [])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."libc"."${deps."backtrace"."0.3.7"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+    ]
+      ++ (if features.backtrace."0.3.7".winapi or false then [ (crates.winapi."${deps."backtrace"."0.3.7".winapi}" deps) ] else [])) else []);
+    features = mkFeatures (features."backtrace"."0.3.7" or {});
+  };
+  features_.backtrace."0.3.7" = deps: f: updateFeatures f (rec {
+    backtrace = fold recursiveUpdate {} [
+      { "0.3.7"."addr2line" =
+        (f.backtrace."0.3.7"."addr2line" or false) ||
+        (f.backtrace."0.3.7".gimli-symbolize or false) ||
+        (backtrace."0.3.7"."gimli-symbolize" or false); }
+      { "0.3.7"."backtrace-sys" =
+        (f.backtrace."0.3.7"."backtrace-sys" or false) ||
+        (f.backtrace."0.3.7".libbacktrace or false) ||
+        (backtrace."0.3.7"."libbacktrace" or false); }
+      { "0.3.7"."coresymbolication" =
+        (f.backtrace."0.3.7"."coresymbolication" or false) ||
+        (f.backtrace."0.3.7".default or false) ||
+        (backtrace."0.3.7"."default" or false); }
+      { "0.3.7"."dbghelp" =
+        (f.backtrace."0.3.7"."dbghelp" or false) ||
+        (f.backtrace."0.3.7".default or false) ||
+        (backtrace."0.3.7"."default" or false); }
+      { "0.3.7"."dladdr" =
+        (f.backtrace."0.3.7"."dladdr" or false) ||
+        (f.backtrace."0.3.7".default or false) ||
+        (backtrace."0.3.7"."default" or false); }
+      { "0.3.7"."findshlibs" =
+        (f.backtrace."0.3.7"."findshlibs" or false) ||
+        (f.backtrace."0.3.7".gimli-symbolize or false) ||
+        (backtrace."0.3.7"."gimli-symbolize" or false); }
+      { "0.3.7"."gimli" =
+        (f.backtrace."0.3.7"."gimli" or false) ||
+        (f.backtrace."0.3.7".gimli-symbolize or false) ||
+        (backtrace."0.3.7"."gimli-symbolize" or false); }
+      { "0.3.7"."libbacktrace" =
+        (f.backtrace."0.3.7"."libbacktrace" or false) ||
+        (f.backtrace."0.3.7".default or false) ||
+        (backtrace."0.3.7"."default" or false); }
+      { "0.3.7"."libunwind" =
+        (f.backtrace."0.3.7"."libunwind" or false) ||
+        (f.backtrace."0.3.7".default or false) ||
+        (backtrace."0.3.7"."default" or false); }
+      { "0.3.7"."memmap" =
+        (f.backtrace."0.3.7"."memmap" or false) ||
+        (f.backtrace."0.3.7".gimli-symbolize or false) ||
+        (backtrace."0.3.7"."gimli-symbolize" or false); }
+      { "0.3.7"."object" =
+        (f.backtrace."0.3.7"."object" or false) ||
+        (f.backtrace."0.3.7".gimli-symbolize or false) ||
+        (backtrace."0.3.7"."gimli-symbolize" or false); }
+      { "0.3.7"."rustc-serialize" =
+        (f.backtrace."0.3.7"."rustc-serialize" or false) ||
+        (f.backtrace."0.3.7".serialize-rustc or false) ||
+        (backtrace."0.3.7"."serialize-rustc" or false); }
+      { "0.3.7"."serde" =
+        (f.backtrace."0.3.7"."serde" or false) ||
+        (f.backtrace."0.3.7".serialize-serde or false) ||
+        (backtrace."0.3.7"."serialize-serde" or false); }
+      { "0.3.7"."serde_derive" =
+        (f.backtrace."0.3.7"."serde_derive" or false) ||
+        (f.backtrace."0.3.7".serialize-serde or false) ||
+        (backtrace."0.3.7"."serialize-serde" or false); }
+      { "0.3.7"."winapi" =
+        (f.backtrace."0.3.7"."winapi" or false) ||
+        (f.backtrace."0.3.7".dbghelp or false) ||
+        (backtrace."0.3.7"."dbghelp" or false); }
+      { "0.3.7".default = (f.backtrace."0.3.7".default or true); }
+    ];
+    backtrace_sys."${deps.backtrace."0.3.7".backtrace_sys}".default = true;
+    cfg_if."${deps.backtrace."0.3.7".cfg_if}".default = true;
+    libc."${deps.backtrace."0.3.7".libc}".default = true;
+    rustc_demangle."${deps.backtrace."0.3.7".rustc_demangle}".default = true;
+    winapi = fold recursiveUpdate {} [
+      { "${deps.backtrace."0.3.7".winapi}"."dbghelp" = true; }
+      { "${deps.backtrace."0.3.7".winapi}"."minwindef" = true; }
+      { "${deps.backtrace."0.3.7".winapi}"."processthreadsapi" = true; }
+      { "${deps.backtrace."0.3.7".winapi}"."std" = true; }
+      { "${deps.backtrace."0.3.7".winapi}"."winnt" = true; }
+      { "${deps.backtrace."0.3.7".winapi}".default = true; }
+    ];
+  }) [
+    (features_.cfg_if."${deps."backtrace"."0.3.7"."cfg_if"}" deps)
+    (features_.rustc_demangle."${deps."backtrace"."0.3.7"."rustc_demangle"}" deps)
+    (features_.backtrace_sys."${deps."backtrace"."0.3.7"."backtrace_sys"}" deps)
+    (features_.libc."${deps."backtrace"."0.3.7"."libc"}" deps)
+    (features_.winapi."${deps."backtrace"."0.3.7"."winapi"}" deps)
+  ];
+
+
+# end
+# backtrace-sys-0.1.16
+
+  crates.backtrace_sys."0.1.16" = deps: { features?(features_.backtrace_sys."0.1.16" deps {}) }: buildRustCrate {
+    crateName = "backtrace-sys";
+    version = "0.1.16";
+    description = "Bindings to the libbacktrace gcc library\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "1cn2c8q3dn06crmnk0p62czkngam4l8nf57wy33nz1y5g25pszwy";
+    build = "build.rs";
+    dependencies = mapFeatures features ([
+      (crates."libc"."${deps."backtrace_sys"."0.1.16"."libc"}" deps)
+    ]);
+
+    buildDependencies = mapFeatures features ([
+      (crates."cc"."${deps."backtrace_sys"."0.1.16"."cc"}" deps)
+    ]);
+  };
+  features_.backtrace_sys."0.1.16" = deps: f: updateFeatures f (rec {
+    backtrace_sys."0.1.16".default = (f.backtrace_sys."0.1.16".default or true);
+    cc."${deps.backtrace_sys."0.1.16".cc}".default = true;
+    libc."${deps.backtrace_sys."0.1.16".libc}".default = true;
+  }) [
+    (features_.libc."${deps."backtrace_sys"."0.1.16"."libc"}" deps)
+    (features_.cc."${deps."backtrace_sys"."0.1.16"."cc"}" deps)
+  ];
+
+
+# end
+# bitflags-1.0.3
+
+  crates.bitflags."1.0.3" = deps: { features?(features_.bitflags."1.0.3" deps {}) }: buildRustCrate {
+    crateName = "bitflags";
+    version = "1.0.3";
+    description = "A macro to generate structures which behave like bitflags.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "162p4w4h1ad76awq6b5yivmls3d50m9cl27d8g588lsps6g8s5rw";
+    features = mkFeatures (features."bitflags"."1.0.3" or {});
+  };
+  features_.bitflags."1.0.3" = deps: f: updateFeatures f (rec {
+    bitflags."1.0.3".default = (f.bitflags."1.0.3".default or true);
+  }) [];
+
+
+# end
+# byteorder-1.2.3
+
+  crates.byteorder."1.2.3" = deps: { features?(features_.byteorder."1.2.3" deps {}) }: buildRustCrate {
+    crateName = "byteorder";
+    version = "1.2.3";
+    description = "Library for reading/writing numbers in big-endian and little-endian.";
+    authors = [ "Andrew Gallant <jamslam@gmail.com>" ];
+    sha256 = "1xghv5f5rydzsam8lnfqhfk090i8a1knb77ikbs0ik44bvrw2ij3";
+    features = mkFeatures (features."byteorder"."1.2.3" or {});
+  };
+  features_.byteorder."1.2.3" = deps: f: updateFeatures f (rec {
+    byteorder = fold recursiveUpdate {} [
+      { "1.2.3"."std" =
+        (f.byteorder."1.2.3"."std" or false) ||
+        (f.byteorder."1.2.3".default or false) ||
+        (byteorder."1.2.3"."default" or false); }
+      { "1.2.3".default = (f.byteorder."1.2.3".default or true); }
+    ];
+  }) [];
+
+
+# end
+# bytes-0.4.7
+
+  crates.bytes."0.4.7" = deps: { features?(features_.bytes."0.4.7" deps {}) }: buildRustCrate {
+    crateName = "bytes";
+    version = "0.4.7";
+    description = "Types and traits for working with bytes";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "1icr74r099d0c0a2q1pz51182z7911g92h2j60al351kz78dzv3f";
+    dependencies = mapFeatures features ([
+      (crates."byteorder"."${deps."bytes"."0.4.7"."byteorder"}" deps)
+      (crates."iovec"."${deps."bytes"."0.4.7"."iovec"}" deps)
+    ]);
+  };
+  features_.bytes."0.4.7" = deps: f: updateFeatures f (rec {
+    byteorder."${deps.bytes."0.4.7".byteorder}".default = true;
+    bytes."0.4.7".default = (f.bytes."0.4.7".default or true);
+    iovec."${deps.bytes."0.4.7".iovec}".default = true;
+  }) [
+    (features_.byteorder."${deps."bytes"."0.4.7"."byteorder"}" deps)
+    (features_.iovec."${deps."bytes"."0.4.7"."iovec"}" deps)
+  ];
+
+
+# end
+# cc-1.0.15
+
+  crates.cc."1.0.15" = deps: { features?(features_.cc."1.0.15" deps {}) }: buildRustCrate {
+    crateName = "cc";
+    version = "1.0.15";
+    description = "A build-time dependency for Cargo build scripts to assist in invoking the native\nC compiler to compile native C code into a static archive to be linked into Rust\ncode.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "1zmcv4zf888byhay2qakqlc9b8snhy5ccfs35zb6flywmlj8f2c0";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."cc"."1.0.15" or {});
+  };
+  features_.cc."1.0.15" = deps: f: updateFeatures f (rec {
+    cc = fold recursiveUpdate {} [
+      { "1.0.15"."rayon" =
+        (f.cc."1.0.15"."rayon" or false) ||
+        (f.cc."1.0.15".parallel or false) ||
+        (cc."1.0.15"."parallel" or false); }
+      { "1.0.15".default = (f.cc."1.0.15".default or true); }
+    ];
+  }) [];
+
+
+# end
+# cfg-if-0.1.3
+
+  crates.cfg_if."0.1.3" = deps: { features?(features_.cfg_if."0.1.3" deps {}) }: buildRustCrate {
+    crateName = "cfg-if";
+    version = "0.1.3";
+    description = "A macro to ergonomically define an item depending on a large number of #[cfg]\nparameters. Structured like an if-else chain, the first matching branch is the\nitem that gets emitted.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "0hphfz5qg40gr5p18gmgy2rzkqj019lii3n0dy3s0a6lnl9106k6";
+  };
+  features_.cfg_if."0.1.3" = deps: f: updateFeatures f (rec {
+    cfg_if."0.1.3".default = (f.cfg_if."0.1.3".default or true);
+  }) [];
+
+
+# end
+# clap-2.31.2
+
+  crates.clap."2.31.2" = deps: { features?(features_.clap."2.31.2" deps {}) }: buildRustCrate {
+    crateName = "clap";
+    version = "2.31.2";
+    description = "A simple to use, efficient, and full featured  Command Line Argument Parser\n";
+    authors = [ "Kevin K. <kbknapp@gmail.com>" ];
+    sha256 = "0r24ziw85a8y1sf2l21y4mvv5qan3rjafcshpyfsjfadqfxsij72";
+    dependencies = mapFeatures features ([
+      (crates."bitflags"."${deps."clap"."2.31.2"."bitflags"}" deps)
+      (crates."textwrap"."${deps."clap"."2.31.2"."textwrap"}" deps)
+      (crates."unicode_width"."${deps."clap"."2.31.2"."unicode_width"}" deps)
+    ]
+      ++ (if features.clap."2.31.2".atty or false then [ (crates.atty."${deps."clap"."2.31.2".atty}" deps) ] else [])
+      ++ (if features.clap."2.31.2".strsim or false then [ (crates.strsim."${deps."clap"."2.31.2".strsim}" deps) ] else [])
+      ++ (if features.clap."2.31.2".vec_map or false then [ (crates.vec_map."${deps."clap"."2.31.2".vec_map}" deps) ] else []))
+      ++ (if !(kernel == "windows") then mapFeatures features ([
+    ]
+      ++ (if features.clap."2.31.2".ansi_term or false then [ (crates.ansi_term."${deps."clap"."2.31.2".ansi_term}" deps) ] else [])) else []);
+    features = mkFeatures (features."clap"."2.31.2" or {});
+  };
+  features_.clap."2.31.2" = deps: f: updateFeatures f (rec {
+    ansi_term."${deps.clap."2.31.2".ansi_term}".default = true;
+    atty."${deps.clap."2.31.2".atty}".default = true;
+    bitflags."${deps.clap."2.31.2".bitflags}".default = true;
+    clap = fold recursiveUpdate {} [
+      { "2.31.2"."ansi_term" =
+        (f.clap."2.31.2"."ansi_term" or false) ||
+        (f.clap."2.31.2".color or false) ||
+        (clap."2.31.2"."color" or false); }
+      { "2.31.2"."atty" =
+        (f.clap."2.31.2"."atty" or false) ||
+        (f.clap."2.31.2".color or false) ||
+        (clap."2.31.2"."color" or false); }
+      { "2.31.2"."clippy" =
+        (f.clap."2.31.2"."clippy" or false) ||
+        (f.clap."2.31.2".lints or false) ||
+        (clap."2.31.2"."lints" or false); }
+      { "2.31.2"."color" =
+        (f.clap."2.31.2"."color" or false) ||
+        (f.clap."2.31.2".default or false) ||
+        (clap."2.31.2"."default" or false); }
+      { "2.31.2"."strsim" =
+        (f.clap."2.31.2"."strsim" or false) ||
+        (f.clap."2.31.2".suggestions or false) ||
+        (clap."2.31.2"."suggestions" or false); }
+      { "2.31.2"."suggestions" =
+        (f.clap."2.31.2"."suggestions" or false) ||
+        (f.clap."2.31.2".default or false) ||
+        (clap."2.31.2"."default" or false); }
+      { "2.31.2"."term_size" =
+        (f.clap."2.31.2"."term_size" or false) ||
+        (f.clap."2.31.2".wrap_help or false) ||
+        (clap."2.31.2"."wrap_help" or false); }
+      { "2.31.2"."vec_map" =
+        (f.clap."2.31.2"."vec_map" or false) ||
+        (f.clap."2.31.2".default or false) ||
+        (clap."2.31.2"."default" or false); }
+      { "2.31.2"."yaml" =
+        (f.clap."2.31.2"."yaml" or false) ||
+        (f.clap."2.31.2".doc or false) ||
+        (clap."2.31.2"."doc" or false); }
+      { "2.31.2"."yaml-rust" =
+        (f.clap."2.31.2"."yaml-rust" or false) ||
+        (f.clap."2.31.2".yaml or false) ||
+        (clap."2.31.2"."yaml" or false); }
+      { "2.31.2".default = (f.clap."2.31.2".default or true); }
+    ];
+    strsim."${deps.clap."2.31.2".strsim}".default = true;
+    textwrap = fold recursiveUpdate {} [
+      { "${deps.clap."2.31.2".textwrap}"."term_size" =
+        (f.textwrap."${deps.clap."2.31.2".textwrap}"."term_size" or false) ||
+        (clap."2.31.2"."wrap_help" or false) ||
+        (f."clap"."2.31.2"."wrap_help" or false); }
+      { "${deps.clap."2.31.2".textwrap}".default = true; }
+    ];
+    unicode_width."${deps.clap."2.31.2".unicode_width}".default = true;
+    vec_map."${deps.clap."2.31.2".vec_map}".default = true;
+  }) [
+    (features_.atty."${deps."clap"."2.31.2"."atty"}" deps)
+    (features_.bitflags."${deps."clap"."2.31.2"."bitflags"}" deps)
+    (features_.strsim."${deps."clap"."2.31.2"."strsim"}" deps)
+    (features_.textwrap."${deps."clap"."2.31.2"."textwrap"}" deps)
+    (features_.unicode_width."${deps."clap"."2.31.2"."unicode_width"}" deps)
+    (features_.vec_map."${deps."clap"."2.31.2"."vec_map"}" deps)
+    (features_.ansi_term."${deps."clap"."2.31.2"."ansi_term"}" deps)
+  ];
+
+
+# end
+# clicolors-control-0.2.0
+
+  crates.clicolors_control."0.2.0" = deps: { features?(features_.clicolors_control."0.2.0" deps {}) }: buildRustCrate {
+    crateName = "clicolors-control";
+    version = "0.2.0";
+    description = "A common utility library to control CLI colorization";
+    authors = [ "Armin Ronacher <armin.ronacher@active-4.com>" ];
+    sha256 = "0p1fbs7k70h58ycahmin7b87c0xn6lc94xmh9jw4gxi40mnrvdkp";
+    dependencies = mapFeatures features ([
+      (crates."lazy_static"."${deps."clicolors_control"."0.2.0"."lazy_static"}" deps)
+    ])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."libc"."${deps."clicolors_control"."0.2.0"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."kernel32_sys"."${deps."clicolors_control"."0.2.0"."kernel32_sys"}" deps)
+      (crates."winapi"."${deps."clicolors_control"."0.2.0"."winapi"}" deps)
+    ]) else []);
+    features = mkFeatures (features."clicolors_control"."0.2.0" or {});
+  };
+  features_.clicolors_control."0.2.0" = deps: f: updateFeatures f (rec {
+    clicolors_control = fold recursiveUpdate {} [
+      { "0.2.0"."terminal_autoconfig" =
+        (f.clicolors_control."0.2.0"."terminal_autoconfig" or false) ||
+        (f.clicolors_control."0.2.0".default or false) ||
+        (clicolors_control."0.2.0"."default" or false); }
+      { "0.2.0".default = (f.clicolors_control."0.2.0".default or true); }
+    ];
+    kernel32_sys."${deps.clicolors_control."0.2.0".kernel32_sys}".default = true;
+    lazy_static."${deps.clicolors_control."0.2.0".lazy_static}".default = true;
+    libc."${deps.clicolors_control."0.2.0".libc}".default = true;
+    winapi = fold recursiveUpdate {} [
+      { "${deps.clicolors_control."0.2.0".winapi}"."consoleapi" = true; }
+      { "${deps.clicolors_control."0.2.0".winapi}"."handleapi" = true; }
+      { "${deps.clicolors_control."0.2.0".winapi}"."processenv" = true; }
+      { "${deps.clicolors_control."0.2.0".winapi}"."winbase" = true; }
+      { "${deps.clicolors_control."0.2.0".winapi}".default = true; }
+    ];
+  }) [
+    (features_.lazy_static."${deps."clicolors_control"."0.2.0"."lazy_static"}" deps)
+    (features_.libc."${deps."clicolors_control"."0.2.0"."libc"}" deps)
+    (features_.kernel32_sys."${deps."clicolors_control"."0.2.0"."kernel32_sys"}" deps)
+    (features_.winapi."${deps."clicolors_control"."0.2.0"."winapi"}" deps)
+  ];
+
+
+# end
+# console-0.6.1
+
+  crates.console."0.6.1" = deps: { features?(features_.console."0.6.1" deps {}) }: buildRustCrate {
+    crateName = "console";
+    version = "0.6.1";
+    description = "A terminal and console abstraction for Rust";
+    authors = [ "Armin Ronacher <armin.ronacher@active-4.com>" ];
+    sha256 = "0h46m3nlx7m2pmc1ia2nlbl8d1vp46kqh2c82hx9ckjag68g4zdl";
+    dependencies = mapFeatures features ([
+      (crates."clicolors_control"."${deps."console"."0.6.1"."clicolors_control"}" deps)
+      (crates."lazy_static"."${deps."console"."0.6.1"."lazy_static"}" deps)
+      (crates."libc"."${deps."console"."0.6.1"."libc"}" deps)
+      (crates."parking_lot"."${deps."console"."0.6.1"."parking_lot"}" deps)
+      (crates."regex"."${deps."console"."0.6.1"."regex"}" deps)
+      (crates."unicode_width"."${deps."console"."0.6.1"."unicode_width"}" deps)
+    ])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."termios"."${deps."console"."0.6.1"."termios"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."winapi"."${deps."console"."0.6.1"."winapi"}" deps)
+    ]) else []);
+  };
+  features_.console."0.6.1" = deps: f: updateFeatures f (rec {
+    clicolors_control."${deps.console."0.6.1".clicolors_control}".default = true;
+    console."0.6.1".default = (f.console."0.6.1".default or true);
+    lazy_static."${deps.console."0.6.1".lazy_static}".default = true;
+    libc."${deps.console."0.6.1".libc}".default = true;
+    parking_lot."${deps.console."0.6.1".parking_lot}".default = true;
+    regex."${deps.console."0.6.1".regex}".default = true;
+    termios."${deps.console."0.6.1".termios}".default = true;
+    unicode_width."${deps.console."0.6.1".unicode_width}".default = true;
+    winapi = fold recursiveUpdate {} [
+      { "${deps.console."0.6.1".winapi}"."consoleapi" = true; }
+      { "${deps.console."0.6.1".winapi}"."processenv" = true; }
+      { "${deps.console."0.6.1".winapi}"."winbase" = true; }
+      { "${deps.console."0.6.1".winapi}"."wincon" = true; }
+      { "${deps.console."0.6.1".winapi}"."winuser" = true; }
+      { "${deps.console."0.6.1".winapi}".default = true; }
+    ];
+  }) [
+    (features_.clicolors_control."${deps."console"."0.6.1"."clicolors_control"}" deps)
+    (features_.lazy_static."${deps."console"."0.6.1"."lazy_static"}" deps)
+    (features_.libc."${deps."console"."0.6.1"."libc"}" deps)
+    (features_.parking_lot."${deps."console"."0.6.1"."parking_lot"}" deps)
+    (features_.regex."${deps."console"."0.6.1"."regex"}" deps)
+    (features_.unicode_width."${deps."console"."0.6.1"."unicode_width"}" deps)
+    (features_.termios."${deps."console"."0.6.1"."termios"}" deps)
+    (features_.winapi."${deps."console"."0.6.1"."winapi"}" deps)
+  ];
+
+
+# end
+# failure-0.1.1
+
+  crates.failure."0.1.1" = deps: { features?(features_.failure."0.1.1" deps {}) }: buildRustCrate {
+    crateName = "failure";
+    version = "0.1.1";
+    description = "Experimental error handling abstraction.";
+    authors = [ "Without Boats <boats@mozilla.com>" ];
+    sha256 = "0gf9cmkm9kc163sszgjksqp5pcgj689lnf2104nn4h4is18nhigk";
+    dependencies = mapFeatures features ([
+    ]
+      ++ (if features.failure."0.1.1".backtrace or false then [ (crates.backtrace."${deps."failure"."0.1.1".backtrace}" deps) ] else [])
+      ++ (if features.failure."0.1.1".failure_derive or false then [ (crates.failure_derive."${deps."failure"."0.1.1".failure_derive}" deps) ] else []));
+    features = mkFeatures (features."failure"."0.1.1" or {});
+  };
+  features_.failure."0.1.1" = deps: f: updateFeatures f (rec {
+    backtrace."${deps.failure."0.1.1".backtrace}".default = true;
+    failure = fold recursiveUpdate {} [
+      { "0.1.1"."backtrace" =
+        (f.failure."0.1.1"."backtrace" or false) ||
+        (f.failure."0.1.1".std or false) ||
+        (failure."0.1.1"."std" or false); }
+      { "0.1.1"."derive" =
+        (f.failure."0.1.1"."derive" or false) ||
+        (f.failure."0.1.1".default or false) ||
+        (failure."0.1.1"."default" or false); }
+      { "0.1.1"."failure_derive" =
+        (f.failure."0.1.1"."failure_derive" or false) ||
+        (f.failure."0.1.1".derive or false) ||
+        (failure."0.1.1"."derive" or false); }
+      { "0.1.1"."std" =
+        (f.failure."0.1.1"."std" or false) ||
+        (f.failure."0.1.1".default or false) ||
+        (failure."0.1.1"."default" or false); }
+      { "0.1.1".default = (f.failure."0.1.1".default or true); }
+    ];
+    failure_derive."${deps.failure."0.1.1".failure_derive}".default = true;
+  }) [
+    (features_.backtrace."${deps."failure"."0.1.1"."backtrace"}" deps)
+    (features_.failure_derive."${deps."failure"."0.1.1"."failure_derive"}" deps)
+  ];
+
+
+# end
+# failure_derive-0.1.1
+
+  crates.failure_derive."0.1.1" = deps: { features?(features_.failure_derive."0.1.1" deps {}) }: buildRustCrate {
+    crateName = "failure_derive";
+    version = "0.1.1";
+    description = "derives for the failure crate";
+    authors = [ "Without Boats <woboats@gmail.com>" ];
+    sha256 = "1w895q4pbyx3rwnhgjwfcayk9ghbi166wc1c3553qh8zkbz52k8i";
+    procMacro = true;
+    dependencies = mapFeatures features ([
+      (crates."quote"."${deps."failure_derive"."0.1.1"."quote"}" deps)
+      (crates."syn"."${deps."failure_derive"."0.1.1"."syn"}" deps)
+      (crates."synstructure"."${deps."failure_derive"."0.1.1"."synstructure"}" deps)
+    ]);
+    features = mkFeatures (features."failure_derive"."0.1.1" or {});
+  };
+  features_.failure_derive."0.1.1" = deps: f: updateFeatures f (rec {
+    failure_derive = fold recursiveUpdate {} [
+      { "0.1.1"."std" =
+        (f.failure_derive."0.1.1"."std" or false) ||
+        (f.failure_derive."0.1.1".default or false) ||
+        (failure_derive."0.1.1"."default" or false); }
+      { "0.1.1".default = (f.failure_derive."0.1.1".default or true); }
+    ];
+    quote."${deps.failure_derive."0.1.1".quote}".default = true;
+    syn."${deps.failure_derive."0.1.1".syn}".default = true;
+    synstructure."${deps.failure_derive."0.1.1".synstructure}".default = true;
+  }) [
+    (features_.quote."${deps."failure_derive"."0.1.1"."quote"}" deps)
+    (features_.syn."${deps."failure_derive"."0.1.1"."syn"}" deps)
+    (features_.synstructure."${deps."failure_derive"."0.1.1"."synstructure"}" deps)
+  ];
+
+
+# end
+# fuchsia-zircon-0.3.3
+
+  crates.fuchsia_zircon."0.3.3" = deps: { features?(features_.fuchsia_zircon."0.3.3" deps {}) }: buildRustCrate {
+    crateName = "fuchsia-zircon";
+    version = "0.3.3";
+    description = "Rust bindings for the Zircon kernel";
+    authors = [ "Raph Levien <raph@google.com>" ];
+    sha256 = "0jrf4shb1699r4la8z358vri8318w4mdi6qzfqy30p2ymjlca4gk";
+    dependencies = mapFeatures features ([
+      (crates."bitflags"."${deps."fuchsia_zircon"."0.3.3"."bitflags"}" deps)
+      (crates."fuchsia_zircon_sys"."${deps."fuchsia_zircon"."0.3.3"."fuchsia_zircon_sys"}" deps)
+    ]);
+  };
+  features_.fuchsia_zircon."0.3.3" = deps: f: updateFeatures f (rec {
+    bitflags."${deps.fuchsia_zircon."0.3.3".bitflags}".default = true;
+    fuchsia_zircon."0.3.3".default = (f.fuchsia_zircon."0.3.3".default or true);
+    fuchsia_zircon_sys."${deps.fuchsia_zircon."0.3.3".fuchsia_zircon_sys}".default = true;
+  }) [
+    (features_.bitflags."${deps."fuchsia_zircon"."0.3.3"."bitflags"}" deps)
+    (features_.fuchsia_zircon_sys."${deps."fuchsia_zircon"."0.3.3"."fuchsia_zircon_sys"}" deps)
+  ];
+
+
+# end
+# fuchsia-zircon-sys-0.3.3
+
+  crates.fuchsia_zircon_sys."0.3.3" = deps: { features?(features_.fuchsia_zircon_sys."0.3.3" deps {}) }: buildRustCrate {
+    crateName = "fuchsia-zircon-sys";
+    version = "0.3.3";
+    description = "Low-level Rust bindings for the Zircon kernel";
+    authors = [ "Raph Levien <raph@google.com>" ];
+    sha256 = "08jp1zxrm9jbrr6l26bjal4dbm8bxfy57ickdgibsqxr1n9j3hf5";
+  };
+  features_.fuchsia_zircon_sys."0.3.3" = deps: f: updateFeatures f (rec {
+    fuchsia_zircon_sys."0.3.3".default = (f.fuchsia_zircon_sys."0.3.3".default or true);
+  }) [];
+
+
+# end
+# gcc-0.3.54
+
+  crates.gcc."0.3.54" = deps: { features?(features_.gcc."0.3.54" deps {}) }: buildRustCrate {
+    crateName = "gcc";
+    version = "0.3.54";
+    description = "A build-time dependency for Cargo build scripts to assist in invoking the native\nC compiler to compile native C code into a static archive to be linked into Rust\ncode.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "07a5i47r8achc6gxsba3ga17h9gnh4b9a2cak8vjg4hx62aajkr4";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."gcc"."0.3.54" or {});
+  };
+  features_.gcc."0.3.54" = deps: f: updateFeatures f (rec {
+    gcc = fold recursiveUpdate {} [
+      { "0.3.54"."rayon" =
+        (f.gcc."0.3.54"."rayon" or false) ||
+        (f.gcc."0.3.54".parallel or false) ||
+        (gcc."0.3.54"."parallel" or false); }
+      { "0.3.54".default = (f.gcc."0.3.54".default or true); }
+    ];
+  }) [];
+
+
+# end
+# iovec-0.1.2
+
+  crates.iovec."0.1.2" = deps: { features?(features_.iovec."0.1.2" deps {}) }: buildRustCrate {
+    crateName = "iovec";
+    version = "0.1.2";
+    description = "Portable buffer type for scatter/gather I/O operations\n";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "0vjymmb7wj4v4kza5jjn48fcdb85j3k37y7msjl3ifz0p9yiyp2r";
+    dependencies = (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."libc"."${deps."iovec"."0.1.2"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."winapi"."${deps."iovec"."0.1.2"."winapi"}" deps)
+    ]) else []);
+  };
+  features_.iovec."0.1.2" = deps: f: updateFeatures f (rec {
+    iovec."0.1.2".default = (f.iovec."0.1.2".default or true);
+    libc."${deps.iovec."0.1.2".libc}".default = true;
+    winapi."${deps.iovec."0.1.2".winapi}".default = true;
+  }) [
+    (features_.libc."${deps."iovec"."0.1.2"."libc"}" deps)
+    (features_.winapi."${deps."iovec"."0.1.2"."winapi"}" deps)
+  ];
+
+
+# end
+# kernel32-sys-0.2.2
+
+  crates.kernel32_sys."0.2.2" = deps: { features?(features_.kernel32_sys."0.2.2" deps {}) }: buildRustCrate {
+    crateName = "kernel32-sys";
+    version = "0.2.2";
+    description = "Contains function definitions for the Windows API library kernel32. See winapi for types and constants.";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "1lrw1hbinyvr6cp28g60z97w32w8vsk6pahk64pmrv2fmby8srfj";
+    libName = "kernel32";
+    build = "build.rs";
+    dependencies = mapFeatures features ([
+      (crates."winapi"."${deps."kernel32_sys"."0.2.2"."winapi"}" deps)
+    ]);
+
+    buildDependencies = mapFeatures features ([
+      (crates."winapi_build"."${deps."kernel32_sys"."0.2.2"."winapi_build"}" deps)
+    ]);
+  };
+  features_.kernel32_sys."0.2.2" = deps: f: updateFeatures f (rec {
+    kernel32_sys."0.2.2".default = (f.kernel32_sys."0.2.2".default or true);
+    winapi."${deps.kernel32_sys."0.2.2".winapi}".default = true;
+    winapi_build."${deps.kernel32_sys."0.2.2".winapi_build}".default = true;
+  }) [
+    (features_.winapi."${deps."kernel32_sys"."0.2.2"."winapi"}" deps)
+    (features_.winapi_build."${deps."kernel32_sys"."0.2.2"."winapi_build"}" deps)
+  ];
+
+
+# end
+# lazy_static-0.2.11
+
+  crates.lazy_static."0.2.11" = deps: { features?(features_.lazy_static."0.2.11" deps {}) }: buildRustCrate {
+    crateName = "lazy_static";
+    version = "0.2.11";
+    description = "A macro for declaring lazily evaluated statics in Rust.";
+    authors = [ "Marvin Löbel <loebel.marvin@gmail.com>" ];
+    sha256 = "1x6871cvpy5b96yv4c7jvpq316fp5d4609s9py7qk6cd6x9k34vm";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."lazy_static"."0.2.11" or {});
+  };
+  features_.lazy_static."0.2.11" = deps: f: updateFeatures f (rec {
+    lazy_static = fold recursiveUpdate {} [
+      { "0.2.11"."compiletest_rs" =
+        (f.lazy_static."0.2.11"."compiletest_rs" or false) ||
+        (f.lazy_static."0.2.11".compiletest or false) ||
+        (lazy_static."0.2.11"."compiletest" or false); }
+      { "0.2.11"."nightly" =
+        (f.lazy_static."0.2.11"."nightly" or false) ||
+        (f.lazy_static."0.2.11".spin_no_std or false) ||
+        (lazy_static."0.2.11"."spin_no_std" or false); }
+      { "0.2.11"."spin" =
+        (f.lazy_static."0.2.11"."spin" or false) ||
+        (f.lazy_static."0.2.11".spin_no_std or false) ||
+        (lazy_static."0.2.11"."spin_no_std" or false); }
+      { "0.2.11".default = (f.lazy_static."0.2.11".default or true); }
+    ];
+  }) [];
+
+
+# end
+# lazy_static-1.0.0
+
+  crates.lazy_static."1.0.0" = deps: { features?(features_.lazy_static."1.0.0" deps {}) }: buildRustCrate {
+    crateName = "lazy_static";
+    version = "1.0.0";
+    description = "A macro for declaring lazily evaluated statics in Rust.";
+    authors = [ "Marvin Löbel <loebel.marvin@gmail.com>" ];
+    sha256 = "0wfvqyr2nvx2mbsrscg5y7gfa9skhb8p72ayanl8vl49pw24v4fh";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."lazy_static"."1.0.0" or {});
+  };
+  features_.lazy_static."1.0.0" = deps: f: updateFeatures f (rec {
+    lazy_static = fold recursiveUpdate {} [
+      { "1.0.0"."compiletest_rs" =
+        (f.lazy_static."1.0.0"."compiletest_rs" or false) ||
+        (f.lazy_static."1.0.0".compiletest or false) ||
+        (lazy_static."1.0.0"."compiletest" or false); }
+      { "1.0.0"."nightly" =
+        (f.lazy_static."1.0.0"."nightly" or false) ||
+        (f.lazy_static."1.0.0".spin_no_std or false) ||
+        (lazy_static."1.0.0"."spin_no_std" or false); }
+      { "1.0.0"."spin" =
+        (f.lazy_static."1.0.0"."spin" or false) ||
+        (f.lazy_static."1.0.0".spin_no_std or false) ||
+        (lazy_static."1.0.0"."spin_no_std" or false); }
+      { "1.0.0".default = (f.lazy_static."1.0.0".default or true); }
+    ];
+  }) [];
+
+
+# end
+# libc-0.2.40
+
+  crates.libc."0.2.40" = deps: { features?(features_.libc."0.2.40" deps {}) }: buildRustCrate {
+    crateName = "libc";
+    version = "0.2.40";
+    description = "A library for types and bindings to native C functions often found in libc or\nother common platform libraries.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "1xfc39237ldzgr8x8wcflgdr8zssi3wif7g2zxc02d94gzkjsw83";
+    features = mkFeatures (features."libc"."0.2.40" or {});
+  };
+  features_.libc."0.2.40" = deps: f: updateFeatures f (rec {
+    libc = fold recursiveUpdate {} [
+      { "0.2.40"."use_std" =
+        (f.libc."0.2.40"."use_std" or false) ||
+        (f.libc."0.2.40".default or false) ||
+        (libc."0.2.40"."default" or false); }
+      { "0.2.40".default = (f.libc."0.2.40".default or true); }
+    ];
+  }) [];
+
+
+# end
+# memchr-2.0.1
+
+  crates.memchr."2.0.1" = deps: { features?(features_.memchr."2.0.1" deps {}) }: buildRustCrate {
+    crateName = "memchr";
+    version = "2.0.1";
+    description = "Safe interface to memchr.";
+    authors = [ "Andrew Gallant <jamslam@gmail.com>" "bluss" ];
+    sha256 = "0ls2y47rjwapjdax6bp974gdp06ggm1v8d1h69wyydmh1nhgm5gr";
+    dependencies = mapFeatures features ([
+    ]
+      ++ (if features.memchr."2.0.1".libc or false then [ (crates.libc."${deps."memchr"."2.0.1".libc}" deps) ] else []));
+    features = mkFeatures (features."memchr"."2.0.1" or {});
+  };
+  features_.memchr."2.0.1" = deps: f: updateFeatures f (rec {
+    libc = fold recursiveUpdate {} [
+      { "${deps.memchr."2.0.1".libc}"."use_std" =
+        (f.libc."${deps.memchr."2.0.1".libc}"."use_std" or false) ||
+        (memchr."2.0.1"."use_std" or false) ||
+        (f."memchr"."2.0.1"."use_std" or false); }
+      { "${deps.memchr."2.0.1".libc}".default = (f.libc."${deps.memchr."2.0.1".libc}".default or false); }
+    ];
+    memchr = fold recursiveUpdate {} [
+      { "2.0.1"."libc" =
+        (f.memchr."2.0.1"."libc" or false) ||
+        (f.memchr."2.0.1".default or false) ||
+        (memchr."2.0.1"."default" or false) ||
+        (f.memchr."2.0.1".use_std or false) ||
+        (memchr."2.0.1"."use_std" or false); }
+      { "2.0.1"."use_std" =
+        (f.memchr."2.0.1"."use_std" or false) ||
+        (f.memchr."2.0.1".default or false) ||
+        (memchr."2.0.1"."default" or false); }
+      { "2.0.1".default = (f.memchr."2.0.1".default or true); }
+    ];
+  }) [
+    (features_.libc."${deps."memchr"."2.0.1"."libc"}" deps)
+  ];
+
+
+# end
+# nix-0.10.0
+
+  crates.nix."0.10.0" = deps: { features?(features_.nix."0.10.0" deps {}) }: buildRustCrate {
+    crateName = "nix";
+    version = "0.10.0";
+    description = "Rust friendly bindings to *nix APIs";
+    authors = [ "The nix-rust Project Developers" ];
+    sha256 = "0ghrbjlc1l21pmldwaz5b5m72xs0m05y1zq5ljlnymn61vbzxsny";
+    dependencies = mapFeatures features ([
+      (crates."bitflags"."${deps."nix"."0.10.0"."bitflags"}" deps)
+      (crates."bytes"."${deps."nix"."0.10.0"."bytes"}" deps)
+      (crates."cfg_if"."${deps."nix"."0.10.0"."cfg_if"}" deps)
+      (crates."libc"."${deps."nix"."0.10.0"."libc"}" deps)
+      (crates."void"."${deps."nix"."0.10.0"."void"}" deps)
+    ])
+      ++ (if kernel == "dragonfly" then mapFeatures features ([
+]) else []);
+  };
+  features_.nix."0.10.0" = deps: f: updateFeatures f (rec {
+    bitflags."${deps.nix."0.10.0".bitflags}".default = true;
+    bytes."${deps.nix."0.10.0".bytes}".default = (f.bytes."${deps.nix."0.10.0".bytes}".default or false);
+    cfg_if."${deps.nix."0.10.0".cfg_if}".default = true;
+    libc."${deps.nix."0.10.0".libc}".default = true;
+    nix."0.10.0".default = (f.nix."0.10.0".default or true);
+    void."${deps.nix."0.10.0".void}".default = true;
+  }) [
+    (features_.bitflags."${deps."nix"."0.10.0"."bitflags"}" deps)
+    (features_.bytes."${deps."nix"."0.10.0"."bytes"}" deps)
+    (features_.cfg_if."${deps."nix"."0.10.0"."cfg_if"}" deps)
+    (features_.libc."${deps."nix"."0.10.0"."libc"}" deps)
+    (features_.void."${deps."nix"."0.10.0"."void"}" deps)
+  ];
+
+
+# end
+# owning_ref-0.3.3
+
+  crates.owning_ref."0.3.3" = deps: { features?(features_.owning_ref."0.3.3" deps {}) }: buildRustCrate {
+    crateName = "owning_ref";
+    version = "0.3.3";
+    description = "A library for creating references that carry their owner with them.";
+    authors = [ "Marvin Löbel <loebel.marvin@gmail.com>" ];
+    sha256 = "13ivn0ydc0hf957ix0f5si9nnplzzykbr70hni1qz9m19i9kvmrh";
+    dependencies = mapFeatures features ([
+      (crates."stable_deref_trait"."${deps."owning_ref"."0.3.3"."stable_deref_trait"}" deps)
+    ]);
+  };
+  features_.owning_ref."0.3.3" = deps: f: updateFeatures f (rec {
+    owning_ref."0.3.3".default = (f.owning_ref."0.3.3".default or true);
+    stable_deref_trait."${deps.owning_ref."0.3.3".stable_deref_trait}".default = true;
+  }) [
+    (features_.stable_deref_trait."${deps."owning_ref"."0.3.3"."stable_deref_trait"}" deps)
+  ];
+
+
+# end
+# parking_lot-0.5.5
+
+  crates.parking_lot."0.5.5" = deps: { features?(features_.parking_lot."0.5.5" deps {}) }: buildRustCrate {
+    crateName = "parking_lot";
+    version = "0.5.5";
+    description = "More compact and efficient implementations of the standard synchronization primitives.";
+    authors = [ "Amanieu d'Antras <amanieu@gmail.com>" ];
+    sha256 = "0balxl593apy0l70z6dzk6c0r9707hgw2c9yav5asjc87dj6fx7l";
+    dependencies = mapFeatures features ([
+      (crates."parking_lot_core"."${deps."parking_lot"."0.5.5"."parking_lot_core"}" deps)
+    ]
+      ++ (if features.parking_lot."0.5.5".owning_ref or false then [ (crates.owning_ref."${deps."parking_lot"."0.5.5".owning_ref}" deps) ] else []));
+    features = mkFeatures (features."parking_lot"."0.5.5" or {});
+  };
+  features_.parking_lot."0.5.5" = deps: f: updateFeatures f (rec {
+    owning_ref."${deps.parking_lot."0.5.5".owning_ref}".default = true;
+    parking_lot = fold recursiveUpdate {} [
+      { "0.5.5"."owning_ref" =
+        (f.parking_lot."0.5.5"."owning_ref" or false) ||
+        (f.parking_lot."0.5.5".default or false) ||
+        (parking_lot."0.5.5"."default" or false); }
+      { "0.5.5".default = (f.parking_lot."0.5.5".default or true); }
+    ];
+    parking_lot_core = fold recursiveUpdate {} [
+      { "${deps.parking_lot."0.5.5".parking_lot_core}"."deadlock_detection" =
+        (f.parking_lot_core."${deps.parking_lot."0.5.5".parking_lot_core}"."deadlock_detection" or false) ||
+        (parking_lot."0.5.5"."deadlock_detection" or false) ||
+        (f."parking_lot"."0.5.5"."deadlock_detection" or false); }
+      { "${deps.parking_lot."0.5.5".parking_lot_core}"."nightly" =
+        (f.parking_lot_core."${deps.parking_lot."0.5.5".parking_lot_core}"."nightly" or false) ||
+        (parking_lot."0.5.5"."nightly" or false) ||
+        (f."parking_lot"."0.5.5"."nightly" or false); }
+      { "${deps.parking_lot."0.5.5".parking_lot_core}".default = true; }
+    ];
+  }) [
+    (features_.owning_ref."${deps."parking_lot"."0.5.5"."owning_ref"}" deps)
+    (features_.parking_lot_core."${deps."parking_lot"."0.5.5"."parking_lot_core"}" deps)
+  ];
+
+
+# end
+# parking_lot_core-0.2.14
+
+  crates.parking_lot_core."0.2.14" = deps: { features?(features_.parking_lot_core."0.2.14" deps {}) }: buildRustCrate {
+    crateName = "parking_lot_core";
+    version = "0.2.14";
+    description = "An advanced API for creating custom synchronization primitives.";
+    authors = [ "Amanieu d'Antras <amanieu@gmail.com>" ];
+    sha256 = "0giypb8ckkpi34p14nfk4b19c7przj4jxs95gs7x2v5ncmi0y286";
+    dependencies = mapFeatures features ([
+      (crates."rand"."${deps."parking_lot_core"."0.2.14"."rand"}" deps)
+      (crates."smallvec"."${deps."parking_lot_core"."0.2.14"."smallvec"}" deps)
+    ])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."libc"."${deps."parking_lot_core"."0.2.14"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."winapi"."${deps."parking_lot_core"."0.2.14"."winapi"}" deps)
+    ]) else []);
+    features = mkFeatures (features."parking_lot_core"."0.2.14" or {});
+  };
+  features_.parking_lot_core."0.2.14" = deps: f: updateFeatures f (rec {
+    libc."${deps.parking_lot_core."0.2.14".libc}".default = true;
+    parking_lot_core = fold recursiveUpdate {} [
+      { "0.2.14"."backtrace" =
+        (f.parking_lot_core."0.2.14"."backtrace" or false) ||
+        (f.parking_lot_core."0.2.14".deadlock_detection or false) ||
+        (parking_lot_core."0.2.14"."deadlock_detection" or false); }
+      { "0.2.14"."petgraph" =
+        (f.parking_lot_core."0.2.14"."petgraph" or false) ||
+        (f.parking_lot_core."0.2.14".deadlock_detection or false) ||
+        (parking_lot_core."0.2.14"."deadlock_detection" or false); }
+      { "0.2.14"."thread-id" =
+        (f.parking_lot_core."0.2.14"."thread-id" or false) ||
+        (f.parking_lot_core."0.2.14".deadlock_detection or false) ||
+        (parking_lot_core."0.2.14"."deadlock_detection" or false); }
+      { "0.2.14".default = (f.parking_lot_core."0.2.14".default or true); }
+    ];
+    rand."${deps.parking_lot_core."0.2.14".rand}".default = true;
+    smallvec."${deps.parking_lot_core."0.2.14".smallvec}".default = true;
+    winapi = fold recursiveUpdate {} [
+      { "${deps.parking_lot_core."0.2.14".winapi}"."errhandlingapi" = true; }
+      { "${deps.parking_lot_core."0.2.14".winapi}"."handleapi" = true; }
+      { "${deps.parking_lot_core."0.2.14".winapi}"."minwindef" = true; }
+      { "${deps.parking_lot_core."0.2.14".winapi}"."ntstatus" = true; }
+      { "${deps.parking_lot_core."0.2.14".winapi}"."winbase" = true; }
+      { "${deps.parking_lot_core."0.2.14".winapi}"."winerror" = true; }
+      { "${deps.parking_lot_core."0.2.14".winapi}"."winnt" = true; }
+      { "${deps.parking_lot_core."0.2.14".winapi}".default = true; }
+    ];
+  }) [
+    (features_.rand."${deps."parking_lot_core"."0.2.14"."rand"}" deps)
+    (features_.smallvec."${deps."parking_lot_core"."0.2.14"."smallvec"}" deps)
+    (features_.libc."${deps."parking_lot_core"."0.2.14"."libc"}" deps)
+    (features_.winapi."${deps."parking_lot_core"."0.2.14"."winapi"}" deps)
+  ];
+
+
+# end
+# quote-0.3.15
+
+  crates.quote."0.3.15" = deps: { features?(features_.quote."0.3.15" deps {}) }: buildRustCrate {
+    crateName = "quote";
+    version = "0.3.15";
+    description = "Quasi-quoting macro quote!(...)";
+    authors = [ "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "09il61jv4kd1360spaj46qwyl21fv1qz18fsv2jra8wdnlgl5jsg";
+  };
+  features_.quote."0.3.15" = deps: f: updateFeatures f (rec {
+    quote."0.3.15".default = (f.quote."0.3.15".default or true);
+  }) [];
+
+
+# end
+# rand-0.4.2
+
+  crates.rand."0.4.2" = deps: { features?(features_.rand."0.4.2" deps {}) }: buildRustCrate {
+    crateName = "rand";
+    version = "0.4.2";
+    description = "Random number generators and other randomness functionality.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "0h8pkg23wb67i8904sm76iyr1jlmhklb85vbpz9c9191a24xzkfm";
+    dependencies = (if kernel == "fuchsia" then mapFeatures features ([
+      (crates."fuchsia_zircon"."${deps."rand"."0.4.2"."fuchsia_zircon"}" deps)
+    ]) else [])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+    ]
+      ++ (if features.rand."0.4.2".libc or false then [ (crates.libc."${deps."rand"."0.4.2".libc}" deps) ] else [])) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."winapi"."${deps."rand"."0.4.2"."winapi"}" deps)
+    ]) else []);
+    features = mkFeatures (features."rand"."0.4.2" or {});
+  };
+  features_.rand."0.4.2" = deps: f: updateFeatures f (rec {
+    fuchsia_zircon."${deps.rand."0.4.2".fuchsia_zircon}".default = true;
+    libc."${deps.rand."0.4.2".libc}".default = true;
+    rand = fold recursiveUpdate {} [
+      { "0.4.2"."i128_support" =
+        (f.rand."0.4.2"."i128_support" or false) ||
+        (f.rand."0.4.2".nightly or false) ||
+        (rand."0.4.2"."nightly" or false); }
+      { "0.4.2"."libc" =
+        (f.rand."0.4.2"."libc" or false) ||
+        (f.rand."0.4.2".std or false) ||
+        (rand."0.4.2"."std" or false); }
+      { "0.4.2"."std" =
+        (f.rand."0.4.2"."std" or false) ||
+        (f.rand."0.4.2".default or false) ||
+        (rand."0.4.2"."default" or false); }
+      { "0.4.2".default = (f.rand."0.4.2".default or true); }
+    ];
+    winapi = fold recursiveUpdate {} [
+      { "${deps.rand."0.4.2".winapi}"."minwindef" = true; }
+      { "${deps.rand."0.4.2".winapi}"."ntsecapi" = true; }
+      { "${deps.rand."0.4.2".winapi}"."profileapi" = true; }
+      { "${deps.rand."0.4.2".winapi}"."winnt" = true; }
+      { "${deps.rand."0.4.2".winapi}".default = true; }
+    ];
+  }) [
+    (features_.fuchsia_zircon."${deps."rand"."0.4.2"."fuchsia_zircon"}" deps)
+    (features_.libc."${deps."rand"."0.4.2"."libc"}" deps)
+    (features_.winapi."${deps."rand"."0.4.2"."winapi"}" deps)
+  ];
+
+
+# end
+# redox_syscall-0.1.37
+
+  crates.redox_syscall."0.1.37" = deps: { features?(features_.redox_syscall."0.1.37" deps {}) }: buildRustCrate {
+    crateName = "redox_syscall";
+    version = "0.1.37";
+    description = "A Rust library to access raw Redox system calls";
+    authors = [ "Jeremy Soller <jackpot51@gmail.com>" ];
+    sha256 = "0qa0jl9cr3qp80an8vshp2mcn8rzvwiavs1398hq1vsjw7pc3h2v";
+    libName = "syscall";
+  };
+  features_.redox_syscall."0.1.37" = deps: f: updateFeatures f (rec {
+    redox_syscall."0.1.37".default = (f.redox_syscall."0.1.37".default or true);
+  }) [];
+
+
+# end
+# redox_termios-0.1.1
+
+  crates.redox_termios."0.1.1" = deps: { features?(features_.redox_termios."0.1.1" deps {}) }: buildRustCrate {
+    crateName = "redox_termios";
+    version = "0.1.1";
+    description = "A Rust library to access Redox termios functions";
+    authors = [ "Jeremy Soller <jackpot51@gmail.com>" ];
+    sha256 = "04s6yyzjca552hdaqlvqhp3vw0zqbc304md5czyd3axh56iry8wh";
+    libPath = "src/lib.rs";
+    dependencies = mapFeatures features ([
+      (crates."redox_syscall"."${deps."redox_termios"."0.1.1"."redox_syscall"}" deps)
+    ]);
+  };
+  features_.redox_termios."0.1.1" = deps: f: updateFeatures f (rec {
+    redox_syscall."${deps.redox_termios."0.1.1".redox_syscall}".default = true;
+    redox_termios."0.1.1".default = (f.redox_termios."0.1.1".default or true);
+  }) [
+    (features_.redox_syscall."${deps."redox_termios"."0.1.1"."redox_syscall"}" deps)
+  ];
+
+
+# end
+# regex-0.2.11
+
+  crates.regex."0.2.11" = deps: { features?(features_.regex."0.2.11" deps {}) }: buildRustCrate {
+    crateName = "regex";
+    version = "0.2.11";
+    description = "An implementation of regular expressions for Rust. This implementation uses\nfinite automata and guarantees linear time matching on all inputs.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "0r50cymxdqp0fv1dxd22mjr6y32q450nwacd279p9s7lh0cafijj";
+    dependencies = mapFeatures features ([
+      (crates."aho_corasick"."${deps."regex"."0.2.11"."aho_corasick"}" deps)
+      (crates."memchr"."${deps."regex"."0.2.11"."memchr"}" deps)
+      (crates."regex_syntax"."${deps."regex"."0.2.11"."regex_syntax"}" deps)
+      (crates."thread_local"."${deps."regex"."0.2.11"."thread_local"}" deps)
+      (crates."utf8_ranges"."${deps."regex"."0.2.11"."utf8_ranges"}" deps)
+    ]);
+    features = mkFeatures (features."regex"."0.2.11" or {});
+  };
+  features_.regex."0.2.11" = deps: f: updateFeatures f (rec {
+    aho_corasick."${deps.regex."0.2.11".aho_corasick}".default = true;
+    memchr."${deps.regex."0.2.11".memchr}".default = true;
+    regex = fold recursiveUpdate {} [
+      { "0.2.11"."pattern" =
+        (f.regex."0.2.11"."pattern" or false) ||
+        (f.regex."0.2.11".unstable or false) ||
+        (regex."0.2.11"."unstable" or false); }
+      { "0.2.11".default = (f.regex."0.2.11".default or true); }
+    ];
+    regex_syntax."${deps.regex."0.2.11".regex_syntax}".default = true;
+    thread_local."${deps.regex."0.2.11".thread_local}".default = true;
+    utf8_ranges."${deps.regex."0.2.11".utf8_ranges}".default = true;
+  }) [
+    (features_.aho_corasick."${deps."regex"."0.2.11"."aho_corasick"}" deps)
+    (features_.memchr."${deps."regex"."0.2.11"."memchr"}" deps)
+    (features_.regex_syntax."${deps."regex"."0.2.11"."regex_syntax"}" deps)
+    (features_.thread_local."${deps."regex"."0.2.11"."thread_local"}" deps)
+    (features_.utf8_ranges."${deps."regex"."0.2.11"."utf8_ranges"}" deps)
+  ];
+
+
+# end
+# regex-1.0.0
+
+  crates.regex."1.0.0" = deps: { features?(features_.regex."1.0.0" deps {}) }: buildRustCrate {
+    crateName = "regex";
+    version = "1.0.0";
+    description = "An implementation of regular expressions for Rust. This implementation uses\nfinite automata and guarantees linear time matching on all inputs.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "1wynl7jmf6l2fnsayw1bzfh7km4wwqnqfpi8anj7wbhdk17i6j6b";
+    dependencies = mapFeatures features ([
+      (crates."aho_corasick"."${deps."regex"."1.0.0"."aho_corasick"}" deps)
+      (crates."memchr"."${deps."regex"."1.0.0"."memchr"}" deps)
+      (crates."regex_syntax"."${deps."regex"."1.0.0"."regex_syntax"}" deps)
+      (crates."thread_local"."${deps."regex"."1.0.0"."thread_local"}" deps)
+      (crates."utf8_ranges"."${deps."regex"."1.0.0"."utf8_ranges"}" deps)
+    ]);
+    features = mkFeatures (features."regex"."1.0.0" or {});
+  };
+  features_.regex."1.0.0" = deps: f: updateFeatures f (rec {
+    aho_corasick."${deps.regex."1.0.0".aho_corasick}".default = true;
+    memchr."${deps.regex."1.0.0".memchr}".default = true;
+    regex = fold recursiveUpdate {} [
+      { "1.0.0"."pattern" =
+        (f.regex."1.0.0"."pattern" or false) ||
+        (f.regex."1.0.0".unstable or false) ||
+        (regex."1.0.0"."unstable" or false); }
+      { "1.0.0"."use_std" =
+        (f.regex."1.0.0"."use_std" or false) ||
+        (f.regex."1.0.0".default or false) ||
+        (regex."1.0.0"."default" or false); }
+      { "1.0.0".default = (f.regex."1.0.0".default or true); }
+    ];
+    regex_syntax."${deps.regex."1.0.0".regex_syntax}".default = true;
+    thread_local."${deps.regex."1.0.0".thread_local}".default = true;
+    utf8_ranges."${deps.regex."1.0.0".utf8_ranges}".default = true;
+  }) [
+    (features_.aho_corasick."${deps."regex"."1.0.0"."aho_corasick"}" deps)
+    (features_.memchr."${deps."regex"."1.0.0"."memchr"}" deps)
+    (features_.regex_syntax."${deps."regex"."1.0.0"."regex_syntax"}" deps)
+    (features_.thread_local."${deps."regex"."1.0.0"."thread_local"}" deps)
+    (features_.utf8_ranges."${deps."regex"."1.0.0"."utf8_ranges"}" deps)
+  ];
+
+
+# end
+# regex-syntax-0.5.6
+
+  crates.regex_syntax."0.5.6" = deps: { features?(features_.regex_syntax."0.5.6" deps {}) }: buildRustCrate {
+    crateName = "regex-syntax";
+    version = "0.5.6";
+    description = "A regular expression parser.";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "10vf3r34bgjnbrnqd5aszn35bjvm8insw498l1vjy8zx5yms3427";
+    dependencies = mapFeatures features ([
+      (crates."ucd_util"."${deps."regex_syntax"."0.5.6"."ucd_util"}" deps)
+    ]);
+  };
+  features_.regex_syntax."0.5.6" = deps: f: updateFeatures f (rec {
+    regex_syntax."0.5.6".default = (f.regex_syntax."0.5.6".default or true);
+    ucd_util."${deps.regex_syntax."0.5.6".ucd_util}".default = true;
+  }) [
+    (features_.ucd_util."${deps."regex_syntax"."0.5.6"."ucd_util"}" deps)
+  ];
+
+
+# end
+# regex-syntax-0.6.0
+
+  crates.regex_syntax."0.6.0" = deps: { features?(features_.regex_syntax."0.6.0" deps {}) }: buildRustCrate {
+    crateName = "regex-syntax";
+    version = "0.6.0";
+    description = "A regular expression parser.";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "1zlaq3y1zbiqilxbh0471bizcs4p14b58nqr815w3ssyam169cy6";
+    dependencies = mapFeatures features ([
+      (crates."ucd_util"."${deps."regex_syntax"."0.6.0"."ucd_util"}" deps)
+    ]);
+  };
+  features_.regex_syntax."0.6.0" = deps: f: updateFeatures f (rec {
+    regex_syntax."0.6.0".default = (f.regex_syntax."0.6.0".default or true);
+    ucd_util."${deps.regex_syntax."0.6.0".ucd_util}".default = true;
+  }) [
+    (features_.ucd_util."${deps."regex_syntax"."0.6.0"."ucd_util"}" deps)
+  ];
+
+
+# end
+# rustc-demangle-0.1.8
+
+  crates.rustc_demangle."0.1.8" = deps: { features?(features_.rustc_demangle."0.1.8" deps {}) }: buildRustCrate {
+    crateName = "rustc-demangle";
+    version = "0.1.8";
+    description = "Rust compiler symbol demangling.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "0xn5l86qfwngmdsjbglj30wh37zplvch96jl9raysl3k06gkkv3c";
+  };
+  features_.rustc_demangle."0.1.8" = deps: f: updateFeatures f (rec {
+    rustc_demangle."0.1.8".default = (f.rustc_demangle."0.1.8".default or true);
+  }) [];
+
+
+# end
+# smallvec-0.6.1
+
+  crates.smallvec."0.6.1" = deps: { features?(features_.smallvec."0.6.1" deps {}) }: buildRustCrate {
+    crateName = "smallvec";
+    version = "0.6.1";
+    description = "'Small vector' optimization: store up to a small number of items on the stack";
+    authors = [ "Simon Sapin <simon.sapin@exyr.org>" ];
+    sha256 = "16m07xh67xcdpwjkbzbv9d7visxmz4fb4a8jfcrsrf333w7vkl1g";
+    libPath = "lib.rs";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."smallvec"."0.6.1" or {});
+  };
+  features_.smallvec."0.6.1" = deps: f: updateFeatures f (rec {
+    smallvec = fold recursiveUpdate {} [
+      { "0.6.1"."std" =
+        (f.smallvec."0.6.1"."std" or false) ||
+        (f.smallvec."0.6.1".default or false) ||
+        (smallvec."0.6.1"."default" or false); }
+      { "0.6.1".default = (f.smallvec."0.6.1".default or true); }
+    ];
+  }) [];
+
+
+# end
+# socket2-0.3.5
+
+  crates.socket2."0.3.5" = deps: { features?(features_.socket2."0.3.5" deps {}) }: buildRustCrate {
+    crateName = "socket2";
+    version = "0.3.5";
+    description = "Utilities for handling networking sockets with a maximal amount of configuration\npossible intended.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "0bi6z6qvra16rwm3lk7xz4aakvcmmak6fpdmra1v7ccp40bss0kf";
+    dependencies = (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."cfg_if"."${deps."socket2"."0.3.5"."cfg_if"}" deps)
+      (crates."libc"."${deps."socket2"."0.3.5"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."winapi"."${deps."socket2"."0.3.5"."winapi"}" deps)
+    ]) else []);
+    features = mkFeatures (features."socket2"."0.3.5" or {});
+  };
+  features_.socket2."0.3.5" = deps: f: updateFeatures f (rec {
+    cfg_if."${deps.socket2."0.3.5".cfg_if}".default = true;
+    libc."${deps.socket2."0.3.5".libc}".default = true;
+    socket2."0.3.5".default = (f.socket2."0.3.5".default or true);
+    winapi = fold recursiveUpdate {} [
+      { "${deps.socket2."0.3.5".winapi}"."handleapi" = true; }
+      { "${deps.socket2."0.3.5".winapi}"."minwindef" = true; }
+      { "${deps.socket2."0.3.5".winapi}"."ws2def" = true; }
+      { "${deps.socket2."0.3.5".winapi}"."ws2ipdef" = true; }
+      { "${deps.socket2."0.3.5".winapi}"."ws2tcpip" = true; }
+      { "${deps.socket2."0.3.5".winapi}".default = true; }
+    ];
+  }) [
+    (features_.cfg_if."${deps."socket2"."0.3.5"."cfg_if"}" deps)
+    (features_.libc."${deps."socket2"."0.3.5"."libc"}" deps)
+    (features_.winapi."${deps."socket2"."0.3.5"."winapi"}" deps)
+  ];
+
+
+# end
+# stable_deref_trait-1.0.0
+
+  crates.stable_deref_trait."1.0.0" = deps: { features?(features_.stable_deref_trait."1.0.0" deps {}) }: buildRustCrate {
+    crateName = "stable_deref_trait";
+    version = "1.0.0";
+    description = "An unsafe marker trait for types like Box and Rc that dereference to a stable address even when moved, and hence can be used with libraries such as owning_ref and rental.\n";
+    authors = [ "Robert Grosse <n210241048576@gmail.com>" ];
+    sha256 = "0ya5fms9qdwkd52d3a111w4vcz18j4rbfx4p88z44116cqd6cczr";
+    features = mkFeatures (features."stable_deref_trait"."1.0.0" or {});
+  };
+  features_.stable_deref_trait."1.0.0" = deps: f: updateFeatures f (rec {
+    stable_deref_trait = fold recursiveUpdate {} [
+      { "1.0.0"."std" =
+        (f.stable_deref_trait."1.0.0"."std" or false) ||
+        (f.stable_deref_trait."1.0.0".default or false) ||
+        (stable_deref_trait."1.0.0"."default" or false); }
+      { "1.0.0".default = (f.stable_deref_trait."1.0.0".default or true); }
+    ];
+  }) [];
+
+
+# end
+# strsim-0.7.0
+
+  crates.strsim."0.7.0" = deps: { features?(features_.strsim."0.7.0" deps {}) }: buildRustCrate {
+    crateName = "strsim";
+    version = "0.7.0";
+    description = "Implementations of string similarity metrics.\nIncludes Hamming, Levenshtein, OSA, Damerau-Levenshtein, Jaro, and Jaro-Winkler.\n";
+    authors = [ "Danny Guo <dannyguo91@gmail.com>" ];
+    sha256 = "0fy0k5f2705z73mb3x9459bpcvrx4ky8jpr4zikcbiwan4bnm0iv";
+  };
+  features_.strsim."0.7.0" = deps: f: updateFeatures f (rec {
+    strsim."0.7.0".default = (f.strsim."0.7.0".default or true);
+  }) [];
+
+
+# end
+# syn-0.11.11
+
+  crates.syn."0.11.11" = deps: { features?(features_.syn."0.11.11" deps {}) }: buildRustCrate {
+    crateName = "syn";
+    version = "0.11.11";
+    description = "Nom parser for Rust source code";
+    authors = [ "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "0yw8ng7x1dn5a6ykg0ib49y7r9nhzgpiq2989rqdp7rdz3n85502";
+    dependencies = mapFeatures features ([
+    ]
+      ++ (if features.syn."0.11.11".quote or false then [ (crates.quote."${deps."syn"."0.11.11".quote}" deps) ] else [])
+      ++ (if features.syn."0.11.11".synom or false then [ (crates.synom."${deps."syn"."0.11.11".synom}" deps) ] else [])
+      ++ (if features.syn."0.11.11".unicode-xid or false then [ (crates.unicode_xid."${deps."syn"."0.11.11".unicode_xid}" deps) ] else []));
+    features = mkFeatures (features."syn"."0.11.11" or {});
+  };
+  features_.syn."0.11.11" = deps: f: updateFeatures f (rec {
+    quote."${deps.syn."0.11.11".quote}".default = true;
+    syn = fold recursiveUpdate {} [
+      { "0.11.11"."parsing" =
+        (f.syn."0.11.11"."parsing" or false) ||
+        (f.syn."0.11.11".default or false) ||
+        (syn."0.11.11"."default" or false); }
+      { "0.11.11"."printing" =
+        (f.syn."0.11.11"."printing" or false) ||
+        (f.syn."0.11.11".default or false) ||
+        (syn."0.11.11"."default" or false); }
+      { "0.11.11"."quote" =
+        (f.syn."0.11.11"."quote" or false) ||
+        (f.syn."0.11.11".printing or false) ||
+        (syn."0.11.11"."printing" or false); }
+      { "0.11.11"."synom" =
+        (f.syn."0.11.11"."synom" or false) ||
+        (f.syn."0.11.11".parsing or false) ||
+        (syn."0.11.11"."parsing" or false); }
+      { "0.11.11"."unicode-xid" =
+        (f.syn."0.11.11"."unicode-xid" or false) ||
+        (f.syn."0.11.11".parsing or false) ||
+        (syn."0.11.11"."parsing" or false); }
+      { "0.11.11".default = (f.syn."0.11.11".default or true); }
+    ];
+    synom."${deps.syn."0.11.11".synom}".default = true;
+    unicode_xid."${deps.syn."0.11.11".unicode_xid}".default = true;
+  }) [
+    (features_.quote."${deps."syn"."0.11.11"."quote"}" deps)
+    (features_.synom."${deps."syn"."0.11.11"."synom"}" deps)
+    (features_.unicode_xid."${deps."syn"."0.11.11"."unicode_xid"}" deps)
+  ];
+
+
+# end
+# synom-0.11.3
+
+  crates.synom."0.11.3" = deps: { features?(features_.synom."0.11.3" deps {}) }: buildRustCrate {
+    crateName = "synom";
+    version = "0.11.3";
+    description = "Stripped-down Nom parser used by Syn";
+    authors = [ "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "1l6d1s9qjfp6ng2s2z8219igvlv7gyk8gby97sdykqc1r93d8rhc";
+    dependencies = mapFeatures features ([
+      (crates."unicode_xid"."${deps."synom"."0.11.3"."unicode_xid"}" deps)
+    ]);
+  };
+  features_.synom."0.11.3" = deps: f: updateFeatures f (rec {
+    synom."0.11.3".default = (f.synom."0.11.3".default or true);
+    unicode_xid."${deps.synom."0.11.3".unicode_xid}".default = true;
+  }) [
+    (features_.unicode_xid."${deps."synom"."0.11.3"."unicode_xid"}" deps)
+  ];
+
+
+# end
+# synstructure-0.6.1
+
+  crates.synstructure."0.6.1" = deps: { features?(features_.synstructure."0.6.1" deps {}) }: buildRustCrate {
+    crateName = "synstructure";
+    version = "0.6.1";
+    description = "expand_substructure-like helpers for syn macros 1.1 derive macros";
+    authors = [ "Michael Layzell <michael@thelayzells.com>" ];
+    sha256 = "1xnyw58va9zcqi4vvpnmpllacdj2a0mvy0cbd698izmr4qs92xlk";
+    dependencies = mapFeatures features ([
+      (crates."quote"."${deps."synstructure"."0.6.1"."quote"}" deps)
+      (crates."syn"."${deps."synstructure"."0.6.1"."syn"}" deps)
+    ]);
+    features = mkFeatures (features."synstructure"."0.6.1" or {});
+  };
+  features_.synstructure."0.6.1" = deps: f: updateFeatures f (rec {
+    quote."${deps.synstructure."0.6.1".quote}".default = true;
+    syn = fold recursiveUpdate {} [
+      { "${deps.synstructure."0.6.1".syn}"."visit" = true; }
+      { "${deps.synstructure."0.6.1".syn}".default = true; }
+    ];
+    synstructure."0.6.1".default = (f.synstructure."0.6.1".default or true);
+  }) [
+    (features_.quote."${deps."synstructure"."0.6.1"."quote"}" deps)
+    (features_.syn."${deps."synstructure"."0.6.1"."syn"}" deps)
+  ];
+
+
+# end
+# systemfd-0.3.0
+
+  crates.systemfd."0.3.0" = deps: { features?(features_.systemfd."0.3.0" deps {}) }: buildRustCrate {
+    crateName = "systemfd";
+    version = "0.3.0";
+    description = "A convenient helper for passing sockets into another process.  Best to be combined with listenfd and cargo-watch.";
+    authors = [ "Armin Ronacher <armin.ronacher@active-4.com>" ];
+    sha256 = "0dpckgb0afyzhbv8lccgzmw5yczpfcdsdlqsfncn1vcxvcf0yb5i";
+    dependencies = mapFeatures features ([
+      (crates."clap"."${deps."systemfd"."0.3.0"."clap"}" deps)
+      (crates."console"."${deps."systemfd"."0.3.0"."console"}" deps)
+      (crates."failure"."${deps."systemfd"."0.3.0"."failure"}" deps)
+      (crates."failure_derive"."${deps."systemfd"."0.3.0"."failure_derive"}" deps)
+      (crates."lazy_static"."${deps."systemfd"."0.3.0"."lazy_static"}" deps)
+      (crates."libc"."${deps."systemfd"."0.3.0"."libc"}" deps)
+      (crates."regex"."${deps."systemfd"."0.3.0"."regex"}" deps)
+    ])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."nix"."${deps."systemfd"."0.3.0"."nix"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."socket2"."${deps."systemfd"."0.3.0"."socket2"}" deps)
+      (crates."uuid"."${deps."systemfd"."0.3.0"."uuid"}" deps)
+      (crates."winapi"."${deps."systemfd"."0.3.0"."winapi"}" deps)
+    ]) else []);
+  };
+  features_.systemfd."0.3.0" = deps: f: updateFeatures f (rec {
+    clap."${deps.systemfd."0.3.0".clap}".default = true;
+    console."${deps.systemfd."0.3.0".console}".default = true;
+    failure."${deps.systemfd."0.3.0".failure}".default = true;
+    failure_derive."${deps.systemfd."0.3.0".failure_derive}".default = true;
+    lazy_static."${deps.systemfd."0.3.0".lazy_static}".default = true;
+    libc."${deps.systemfd."0.3.0".libc}".default = true;
+    nix."${deps.systemfd."0.3.0".nix}".default = true;
+    regex."${deps.systemfd."0.3.0".regex}".default = true;
+    socket2."${deps.systemfd."0.3.0".socket2}".default = true;
+    systemfd."0.3.0".default = (f.systemfd."0.3.0".default or true);
+    uuid = fold recursiveUpdate {} [
+      { "${deps.systemfd."0.3.0".uuid}"."v4" = true; }
+      { "${deps.systemfd."0.3.0".uuid}".default = true; }
+    ];
+    winapi = fold recursiveUpdate {} [
+      { "${deps.systemfd."0.3.0".winapi}"."winsock2" = true; }
+      { "${deps.systemfd."0.3.0".winapi}".default = true; }
+    ];
+  }) [
+    (features_.clap."${deps."systemfd"."0.3.0"."clap"}" deps)
+    (features_.console."${deps."systemfd"."0.3.0"."console"}" deps)
+    (features_.failure."${deps."systemfd"."0.3.0"."failure"}" deps)
+    (features_.failure_derive."${deps."systemfd"."0.3.0"."failure_derive"}" deps)
+    (features_.lazy_static."${deps."systemfd"."0.3.0"."lazy_static"}" deps)
+    (features_.libc."${deps."systemfd"."0.3.0"."libc"}" deps)
+    (features_.regex."${deps."systemfd"."0.3.0"."regex"}" deps)
+    (features_.nix."${deps."systemfd"."0.3.0"."nix"}" deps)
+    (features_.socket2."${deps."systemfd"."0.3.0"."socket2"}" deps)
+    (features_.uuid."${deps."systemfd"."0.3.0"."uuid"}" deps)
+    (features_.winapi."${deps."systemfd"."0.3.0"."winapi"}" deps)
+  ];
+
+
+# end
+# termion-1.5.1
+
+  crates.termion."1.5.1" = deps: { features?(features_.termion."1.5.1" deps {}) }: buildRustCrate {
+    crateName = "termion";
+    version = "1.5.1";
+    description = "A bindless library for manipulating terminals.";
+    authors = [ "ticki <Ticki@users.noreply.github.com>" "gycos <alexandre.bury@gmail.com>" "IGI-111 <igi-111@protonmail.com>" ];
+    sha256 = "02gq4vd8iws1f3gjrgrgpajsk2bk43nds5acbbb4s8dvrdvr8nf1";
+    dependencies = (if !(kernel == "redox") then mapFeatures features ([
+      (crates."libc"."${deps."termion"."1.5.1"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "redox" then mapFeatures features ([
+      (crates."redox_syscall"."${deps."termion"."1.5.1"."redox_syscall"}" deps)
+      (crates."redox_termios"."${deps."termion"."1.5.1"."redox_termios"}" deps)
+    ]) else []);
+  };
+  features_.termion."1.5.1" = deps: f: updateFeatures f (rec {
+    libc."${deps.termion."1.5.1".libc}".default = true;
+    redox_syscall."${deps.termion."1.5.1".redox_syscall}".default = true;
+    redox_termios."${deps.termion."1.5.1".redox_termios}".default = true;
+    termion."1.5.1".default = (f.termion."1.5.1".default or true);
+  }) [
+    (features_.libc."${deps."termion"."1.5.1"."libc"}" deps)
+    (features_.redox_syscall."${deps."termion"."1.5.1"."redox_syscall"}" deps)
+    (features_.redox_termios."${deps."termion"."1.5.1"."redox_termios"}" deps)
+  ];
+
+
+# end
+# termios-0.2.2
+
+  crates.termios."0.2.2" = deps: { features?(features_.termios."0.2.2" deps {}) }: buildRustCrate {
+    crateName = "termios";
+    version = "0.2.2";
+    description = "Safe bindings for the termios library.";
+    authors = [ "David Cuddeback <david.cuddeback@gmail.com>" ];
+    sha256 = "0hjy4idvcapx9i6qbhf5536aqnf6rqk2aaj424sfwy7qhv6xmcx3";
+    dependencies = mapFeatures features ([
+      (crates."libc"."${deps."termios"."0.2.2"."libc"}" deps)
+    ]);
+  };
+  features_.termios."0.2.2" = deps: f: updateFeatures f (rec {
+    libc."${deps.termios."0.2.2".libc}".default = true;
+    termios."0.2.2".default = (f.termios."0.2.2".default or true);
+  }) [
+    (features_.libc."${deps."termios"."0.2.2"."libc"}" deps)
+  ];
+
+
+# end
+# textwrap-0.9.0
+
+  crates.textwrap."0.9.0" = deps: { features?(features_.textwrap."0.9.0" deps {}) }: buildRustCrate {
+    crateName = "textwrap";
+    version = "0.9.0";
+    description = "Textwrap is a small library for word wrapping, indenting, and\ndedenting strings.\n\nYou can use it to format strings (such as help and error messages) for\ndisplay in commandline applications. It is designed to be efficient\nand handle Unicode characters correctly.\n";
+    authors = [ "Martin Geisler <martin@geisler.net>" ];
+    sha256 = "18jg79ndjlwndz01mlbh82kkr2arqm658yn5kwp65l5n1hz8w4yb";
+    dependencies = mapFeatures features ([
+      (crates."unicode_width"."${deps."textwrap"."0.9.0"."unicode_width"}" deps)
+    ]);
+  };
+  features_.textwrap."0.9.0" = deps: f: updateFeatures f (rec {
+    textwrap."0.9.0".default = (f.textwrap."0.9.0".default or true);
+    unicode_width."${deps.textwrap."0.9.0".unicode_width}".default = true;
+  }) [
+    (features_.unicode_width."${deps."textwrap"."0.9.0"."unicode_width"}" deps)
+  ];
+
+
+# end
+# thread_local-0.3.5
+
+  crates.thread_local."0.3.5" = deps: { features?(features_.thread_local."0.3.5" deps {}) }: buildRustCrate {
+    crateName = "thread_local";
+    version = "0.3.5";
+    description = "Per-object thread-local storage";
+    authors = [ "Amanieu d'Antras <amanieu@gmail.com>" ];
+    sha256 = "0mkp0sp91aqsk7brgygai4igv751r1754rsxn37mig3ag5rx8np6";
+    dependencies = mapFeatures features ([
+      (crates."lazy_static"."${deps."thread_local"."0.3.5"."lazy_static"}" deps)
+      (crates."unreachable"."${deps."thread_local"."0.3.5"."unreachable"}" deps)
+    ]);
+  };
+  features_.thread_local."0.3.5" = deps: f: updateFeatures f (rec {
+    lazy_static."${deps.thread_local."0.3.5".lazy_static}".default = true;
+    thread_local."0.3.5".default = (f.thread_local."0.3.5".default or true);
+    unreachable."${deps.thread_local."0.3.5".unreachable}".default = true;
+  }) [
+    (features_.lazy_static."${deps."thread_local"."0.3.5"."lazy_static"}" deps)
+    (features_.unreachable."${deps."thread_local"."0.3.5"."unreachable"}" deps)
+  ];
+
+
+# end
+# ucd-util-0.1.1
+
+  crates.ucd_util."0.1.1" = deps: { features?(features_.ucd_util."0.1.1" deps {}) }: buildRustCrate {
+    crateName = "ucd-util";
+    version = "0.1.1";
+    description = "A small utility library for working with the Unicode character database.\n";
+    authors = [ "Andrew Gallant <jamslam@gmail.com>" ];
+    sha256 = "02a8h3siipx52b832xc8m8rwasj6nx9jpiwfldw8hp6k205hgkn0";
+  };
+  features_.ucd_util."0.1.1" = deps: f: updateFeatures f (rec {
+    ucd_util."0.1.1".default = (f.ucd_util."0.1.1".default or true);
+  }) [];
+
+
+# end
+# unicode-width-0.1.4
+
+  crates.unicode_width."0.1.4" = deps: { features?(features_.unicode_width."0.1.4" deps {}) }: buildRustCrate {
+    crateName = "unicode-width";
+    version = "0.1.4";
+    description = "Determine displayed width of `char` and `str` types\naccording to Unicode Standard Annex #11 rules.\n";
+    authors = [ "kwantam <kwantam@gmail.com>" ];
+    sha256 = "1rp7a04icn9y5c0lm74nrd4py0rdl0af8bhdwq7g478n1xifpifl";
+    features = mkFeatures (features."unicode_width"."0.1.4" or {});
+  };
+  features_.unicode_width."0.1.4" = deps: f: updateFeatures f (rec {
+    unicode_width."0.1.4".default = (f.unicode_width."0.1.4".default or true);
+  }) [];
+
+
+# end
+# unicode-xid-0.0.4
+
+  crates.unicode_xid."0.0.4" = deps: { features?(features_.unicode_xid."0.0.4" deps {}) }: buildRustCrate {
+    crateName = "unicode-xid";
+    version = "0.0.4";
+    description = "Determine whether characters have the XID_Start\nor XID_Continue properties according to\nUnicode Standard Annex #31.\n";
+    authors = [ "erick.tryzelaar <erick.tryzelaar@gmail.com>" "kwantam <kwantam@gmail.com>" ];
+    sha256 = "1dc8wkkcd3s6534s5aw4lbjn8m67flkkbnajp5bl8408wdg8rh9v";
+    features = mkFeatures (features."unicode_xid"."0.0.4" or {});
+  };
+  features_.unicode_xid."0.0.4" = deps: f: updateFeatures f (rec {
+    unicode_xid."0.0.4".default = (f.unicode_xid."0.0.4".default or true);
+  }) [];
+
+
+# end
+# unreachable-1.0.0
+
+  crates.unreachable."1.0.0" = deps: { features?(features_.unreachable."1.0.0" deps {}) }: buildRustCrate {
+    crateName = "unreachable";
+    version = "1.0.0";
+    description = "An unreachable code optimization hint in stable rust.";
+    authors = [ "Jonathan Reem <jonathan.reem@gmail.com>" ];
+    sha256 = "1am8czbk5wwr25gbp2zr007744fxjshhdqjz9liz7wl4pnv3whcf";
+    dependencies = mapFeatures features ([
+      (crates."void"."${deps."unreachable"."1.0.0"."void"}" deps)
+    ]);
+  };
+  features_.unreachable."1.0.0" = deps: f: updateFeatures f (rec {
+    unreachable."1.0.0".default = (f.unreachable."1.0.0".default or true);
+    void."${deps.unreachable."1.0.0".void}".default = (f.void."${deps.unreachable."1.0.0".void}".default or false);
+  }) [
+    (features_.void."${deps."unreachable"."1.0.0"."void"}" deps)
+  ];
+
+
+# end
+# utf8-ranges-1.0.0
+
+  crates.utf8_ranges."1.0.0" = deps: { features?(features_.utf8_ranges."1.0.0" deps {}) }: buildRustCrate {
+    crateName = "utf8-ranges";
+    version = "1.0.0";
+    description = "Convert ranges of Unicode codepoints to UTF-8 byte ranges.";
+    authors = [ "Andrew Gallant <jamslam@gmail.com>" ];
+    sha256 = "0rzmqprwjv9yp1n0qqgahgm24872x6c0xddfym5pfndy7a36vkn0";
+  };
+  features_.utf8_ranges."1.0.0" = deps: f: updateFeatures f (rec {
+    utf8_ranges."1.0.0".default = (f.utf8_ranges."1.0.0".default or true);
+  }) [];
+
+
+# end
+# uuid-0.6.3
+
+  crates.uuid."0.6.3" = deps: { features?(features_.uuid."0.6.3" deps {}) }: buildRustCrate {
+    crateName = "uuid";
+    version = "0.6.3";
+    description = "A library to generate and parse UUIDs.\n";
+    authors = [ "Ashley Mannix<ashleymannix@live.com.au>" "Christopher Armstrong" "Dylan DPC<dylan.dpc@gmail.com>" "Hunar Roop Kahlon<hunar.roop@gmail.com>" ];
+    sha256 = "1kjp5xglhab4saaikn95zn3mr4zja7484pv307cb5bxm2sawb8p6";
+    dependencies = mapFeatures features ([
+      (crates."cfg_if"."${deps."uuid"."0.6.3"."cfg_if"}" deps)
+    ]
+      ++ (if features.uuid."0.6.3".rand or false then [ (crates.rand."${deps."uuid"."0.6.3".rand}" deps) ] else []));
+    features = mkFeatures (features."uuid"."0.6.3" or {});
+  };
+  features_.uuid."0.6.3" = deps: f: updateFeatures f (rec {
+    cfg_if."${deps.uuid."0.6.3".cfg_if}".default = true;
+    rand."${deps.uuid."0.6.3".rand}".default = true;
+    uuid = fold recursiveUpdate {} [
+      { "0.6.3"."md5" =
+        (f.uuid."0.6.3"."md5" or false) ||
+        (f.uuid."0.6.3".v3 or false) ||
+        (uuid."0.6.3"."v3" or false); }
+      { "0.6.3"."rand" =
+        (f.uuid."0.6.3"."rand" or false) ||
+        (f.uuid."0.6.3".v3 or false) ||
+        (uuid."0.6.3"."v3" or false) ||
+        (f.uuid."0.6.3".v4 or false) ||
+        (uuid."0.6.3"."v4" or false) ||
+        (f.uuid."0.6.3".v5 or false) ||
+        (uuid."0.6.3"."v5" or false); }
+      { "0.6.3"."serde" =
+        (f.uuid."0.6.3"."serde" or false) ||
+        (f.uuid."0.6.3".playground or false) ||
+        (uuid."0.6.3"."playground" or false); }
+      { "0.6.3"."sha1" =
+        (f.uuid."0.6.3"."sha1" or false) ||
+        (f.uuid."0.6.3".v5 or false) ||
+        (uuid."0.6.3"."v5" or false); }
+      { "0.6.3"."std" =
+        (f.uuid."0.6.3"."std" or false) ||
+        (f.uuid."0.6.3".default or false) ||
+        (uuid."0.6.3"."default" or false) ||
+        (f.uuid."0.6.3".use_std or false) ||
+        (uuid."0.6.3"."use_std" or false); }
+      { "0.6.3"."v1" =
+        (f.uuid."0.6.3"."v1" or false) ||
+        (f.uuid."0.6.3".playground or false) ||
+        (uuid."0.6.3"."playground" or false); }
+      { "0.6.3"."v3" =
+        (f.uuid."0.6.3"."v3" or false) ||
+        (f.uuid."0.6.3".playground or false) ||
+        (uuid."0.6.3"."playground" or false); }
+      { "0.6.3"."v4" =
+        (f.uuid."0.6.3"."v4" or false) ||
+        (f.uuid."0.6.3".playground or false) ||
+        (uuid."0.6.3"."playground" or false); }
+      { "0.6.3"."v5" =
+        (f.uuid."0.6.3"."v5" or false) ||
+        (f.uuid."0.6.3".playground or false) ||
+        (uuid."0.6.3"."playground" or false); }
+      { "0.6.3".default = (f.uuid."0.6.3".default or true); }
+    ];
+  }) [
+    (features_.cfg_if."${deps."uuid"."0.6.3"."cfg_if"}" deps)
+    (features_.rand."${deps."uuid"."0.6.3"."rand"}" deps)
+  ];
+
+
+# end
+# vec_map-0.8.1
+
+  crates.vec_map."0.8.1" = deps: { features?(features_.vec_map."0.8.1" deps {}) }: buildRustCrate {
+    crateName = "vec_map";
+    version = "0.8.1";
+    description = "A simple map based on a vector for small integer keys";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" "Jorge Aparicio <japaricious@gmail.com>" "Alexis Beingessner <a.beingessner@gmail.com>" "Brian Anderson <>" "tbu- <>" "Manish Goregaokar <>" "Aaron Turon <aturon@mozilla.com>" "Adolfo Ochagavía <>" "Niko Matsakis <>" "Steven Fackler <>" "Chase Southwood <csouth3@illinois.edu>" "Eduard Burtescu <>" "Florian Wilkens <>" "Félix Raimundo <>" "Tibor Benke <>" "Markus Siemens <markus@m-siemens.de>" "Josh Branchaud <jbranchaud@gmail.com>" "Huon Wilson <dbau.pp@gmail.com>" "Corey Farwell <coref@rwell.org>" "Aaron Liblong <>" "Nick Cameron <nrc@ncameron.org>" "Patrick Walton <pcwalton@mimiga.net>" "Felix S Klock II <>" "Andrew Paseltiner <apaseltiner@gmail.com>" "Sean McArthur <sean.monstar@gmail.com>" "Vadim Petrochenkov <>" ];
+    sha256 = "1jj2nrg8h3l53d43rwkpkikq5a5x15ms4rf1rw92hp5lrqhi8mpi";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."vec_map"."0.8.1" or {});
+  };
+  features_.vec_map."0.8.1" = deps: f: updateFeatures f (rec {
+    vec_map = fold recursiveUpdate {} [
+      { "0.8.1"."serde" =
+        (f.vec_map."0.8.1"."serde" or false) ||
+        (f.vec_map."0.8.1".eders or false) ||
+        (vec_map."0.8.1"."eders" or false); }
+      { "0.8.1".default = (f.vec_map."0.8.1".default or true); }
+    ];
+  }) [];
+
+
+# end
+# void-1.0.2
+
+  crates.void."1.0.2" = deps: { features?(features_.void."1.0.2" deps {}) }: buildRustCrate {
+    crateName = "void";
+    version = "1.0.2";
+    description = "The uninhabited void type for use in statically impossible cases.";
+    authors = [ "Jonathan Reem <jonathan.reem@gmail.com>" ];
+    sha256 = "0h1dm0dx8dhf56a83k68mijyxigqhizpskwxfdrs1drwv2cdclv3";
+    features = mkFeatures (features."void"."1.0.2" or {});
+  };
+  features_.void."1.0.2" = deps: f: updateFeatures f (rec {
+    void = fold recursiveUpdate {} [
+      { "1.0.2"."std" =
+        (f.void."1.0.2"."std" or false) ||
+        (f.void."1.0.2".default or false) ||
+        (void."1.0.2"."default" or false); }
+      { "1.0.2".default = (f.void."1.0.2".default or true); }
+    ];
+  }) [];
+
+
+# end
+# winapi-0.2.8
+
+  crates.winapi."0.2.8" = deps: { features?(features_.winapi."0.2.8" deps {}) }: buildRustCrate {
+    crateName = "winapi";
+    version = "0.2.8";
+    description = "Types and constants for WinAPI bindings. See README for list of crates providing function bindings.";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "0a45b58ywf12vb7gvj6h3j264nydynmzyqz8d8rqxsj6icqv82as";
+  };
+  features_.winapi."0.2.8" = deps: f: updateFeatures f (rec {
+    winapi."0.2.8".default = (f.winapi."0.2.8".default or true);
+  }) [];
+
+
+# end
+# winapi-0.3.4
+
+  crates.winapi."0.3.4" = deps: { features?(features_.winapi."0.3.4" deps {}) }: buildRustCrate {
+    crateName = "winapi";
+    version = "0.3.4";
+    description = "Raw FFI bindings for all of Windows API.";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "1qbrf5dcnd8j36cawby5d9r5vx07r0l4ryf672pfncnp8895k9lx";
+    build = "build.rs";
+    dependencies = (if kernel == "i686-pc-windows-gnu" then mapFeatures features ([
+      (crates."winapi_i686_pc_windows_gnu"."${deps."winapi"."0.3.4"."winapi_i686_pc_windows_gnu"}" deps)
+    ]) else [])
+      ++ (if kernel == "x86_64-pc-windows-gnu" then mapFeatures features ([
+      (crates."winapi_x86_64_pc_windows_gnu"."${deps."winapi"."0.3.4"."winapi_x86_64_pc_windows_gnu"}" deps)
+    ]) else []);
+    features = mkFeatures (features."winapi"."0.3.4" or {});
+  };
+  features_.winapi."0.3.4" = deps: f: updateFeatures f (rec {
+    winapi."0.3.4".default = (f.winapi."0.3.4".default or true);
+    winapi_i686_pc_windows_gnu."${deps.winapi."0.3.4".winapi_i686_pc_windows_gnu}".default = true;
+    winapi_x86_64_pc_windows_gnu."${deps.winapi."0.3.4".winapi_x86_64_pc_windows_gnu}".default = true;
+  }) [
+    (features_.winapi_i686_pc_windows_gnu."${deps."winapi"."0.3.4"."winapi_i686_pc_windows_gnu"}" deps)
+    (features_.winapi_x86_64_pc_windows_gnu."${deps."winapi"."0.3.4"."winapi_x86_64_pc_windows_gnu"}" deps)
+  ];
+
+
+# end
+# winapi-build-0.1.1
+
+  crates.winapi_build."0.1.1" = deps: { features?(features_.winapi_build."0.1.1" deps {}) }: buildRustCrate {
+    crateName = "winapi-build";
+    version = "0.1.1";
+    description = "Common code for build.rs in WinAPI -sys crates.";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "1lxlpi87rkhxcwp2ykf1ldw3p108hwm24nywf3jfrvmff4rjhqga";
+    libName = "build";
+  };
+  features_.winapi_build."0.1.1" = deps: f: updateFeatures f (rec {
+    winapi_build."0.1.1".default = (f.winapi_build."0.1.1".default or true);
+  }) [];
+
+
+# end
+# winapi-i686-pc-windows-gnu-0.4.0
+
+  crates.winapi_i686_pc_windows_gnu."0.4.0" = deps: { features?(features_.winapi_i686_pc_windows_gnu."0.4.0" deps {}) }: buildRustCrate {
+    crateName = "winapi-i686-pc-windows-gnu";
+    version = "0.4.0";
+    description = "Import libraries for the i686-pc-windows-gnu target. Please don't use this crate directly, depend on winapi instead.";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "05ihkij18r4gamjpxj4gra24514can762imjzlmak5wlzidplzrp";
+    build = "build.rs";
+  };
+  features_.winapi_i686_pc_windows_gnu."0.4.0" = deps: f: updateFeatures f (rec {
+    winapi_i686_pc_windows_gnu."0.4.0".default = (f.winapi_i686_pc_windows_gnu."0.4.0".default or true);
+  }) [];
+
+
+# end
+# winapi-x86_64-pc-windows-gnu-0.4.0
+
+  crates.winapi_x86_64_pc_windows_gnu."0.4.0" = deps: { features?(features_.winapi_x86_64_pc_windows_gnu."0.4.0" deps {}) }: buildRustCrate {
+    crateName = "winapi-x86_64-pc-windows-gnu";
+    version = "0.4.0";
+    description = "Import libraries for the x86_64-pc-windows-gnu target. Please don't use this crate directly, depend on winapi instead.";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "0n1ylmlsb8yg1v583i4xy0qmqg42275flvbc51hdqjjfjcl9vlbj";
+    build = "build.rs";
+  };
+  features_.winapi_x86_64_pc_windows_gnu."0.4.0" = deps: f: updateFeatures f (rec {
+    winapi_x86_64_pc_windows_gnu."0.4.0".default = (f.winapi_x86_64_pc_windows_gnu."0.4.0".default or true);
+  }) [];
+
+
+# end
+}
diff --git a/nixpkgs/pkgs/development/tools/systemfd/default.nix b/nixpkgs/pkgs/development/tools/systemfd/default.nix
new file mode 100644
index 000000000000..a1c93f46dcb7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/systemfd/default.nix
@@ -0,0 +1,18 @@
+{ lib, fetchgit, darwin, buildPlatform
+, buildRustCrate, buildRustCrateHelpers, defaultCrateOverrides }:
+
+((import ./Cargo.nix {
+  inherit lib buildPlatform buildRustCrate buildRustCrateHelpers fetchgit;
+  cratesIO = import ./crates-io.nix { inherit lib buildRustCrate buildRustCrateHelpers; };
+}).systemfd {}).override {
+  crateOverrides = defaultCrateOverrides // {
+    systemfd = attrs: {
+        meta = {
+          description = "A convenient helper for passing sockets into another process";
+          homepage = "https://github.com/mitsuhiko/systemfd";
+          license = lib.licenses.asl20;
+          maintainers = [ lib.maintainers.adisbladis ];
+        };
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tabnine/default.nix b/nixpkgs/pkgs/development/tools/tabnine/default.nix
new file mode 100644
index 000000000000..1209f371a42f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tabnine/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, lib, fetchurl, unzip }:
+let
+  # You can check the latest version with `curl -sS https://update.tabnine.com/bundles/version`
+  version = "4.0.60";
+  supportedPlatforms = {
+    "x86_64-linux" = {
+      name = "x86_64-unknown-linux-musl";
+      sha256 = "sha256-v5UxRMDDQxpqIKMe9mYMXcpWiacdXzFfaQ6bgab/WmQ=";
+    };
+    "x86_64-darwin" = {
+      name = "x86_64-apple-darwin";
+      sha256 = "sha256-vFMMzMatuu1TY6dnBXycv0HxvkOj4Axfx8p0VW0hOic=";
+    };
+    "aarch64-darwin" = {
+      name = "aarch64-apple-darwin";
+      sha256 = "sha256-DUeDQLtvSY7W2nG60UunluCSO0ijJP2CYxpRIZA4LTE=";
+    };
+  };
+  platform =
+    if (builtins.hasAttr stdenv.hostPlatform.system supportedPlatforms) then
+      builtins.getAttr (stdenv.hostPlatform.system) supportedPlatforms
+    else
+      throw "Not supported on ${stdenv.hostPlatform.system}";
+in
+stdenv.mkDerivation {
+  pname = "tabnine";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://update.tabnine.com/bundles/${version}/${platform.name}/TabNine.zip";
+    inherit (platform) sha256;
+  };
+
+  dontBuild = true;
+
+  # Work around the "unpacker appears to have produced no directories"
+  # case that happens when the archive doesn't have a subdirectory.
+  setSourceRoot = "sourceRoot=`pwd`";
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 TabNine $out/bin/TabNine
+    install -Dm755 TabNine-deep-cloud $out/bin/TabNine-deep-cloud
+    install -Dm755 TabNine-deep-local $out/bin/TabNine-deep-local
+    install -Dm755 WD-TabNine $out/bin/WD-TabNine
+    runHook postInstall
+  '';
+
+  passthru.platform = platform.name;
+
+  meta = with lib; {
+    homepage = "https://tabnine.com";
+    description = "Smart Compose for code that uses deep learning to help you write code faster";
+    license = licenses.unfree;
+    platforms = attrNames supportedPlatforms;
+    maintainers = with maintainers; [ lovesegfault ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/taplo-cli/default.nix b/nixpkgs/pkgs/development/tools/taplo-cli/default.nix
new file mode 100644
index 000000000000..e19de1c3cdf1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/taplo-cli/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchCrate, stdenv, pkg-config, openssl, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "taplo-cli";
+  version = "0.5.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-+0smR1FDeJMSa/LaRM2M53updt5p8717DEaFItNXCdM=";
+  };
+
+  cargoSha256 = "sha256-d7mysGYR72shXwvmDXr0oftSa+RtRoSbP++HBR40Mus=";
+
+  nativeBuildInputs = lib.optional stdenv.isLinux pkg-config;
+
+  buildInputs = lib.optional stdenv.isLinux openssl
+    ++ lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "A TOML toolkit written in Rust";
+    homepage = "https://taplo.tamasfe.dev";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "taplo";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/taplo-lsp/default.nix b/nixpkgs/pkgs/development/tools/taplo-lsp/default.nix
new file mode 100644
index 000000000000..07fcfaec9334
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/taplo-lsp/default.nix
@@ -0,0 +1,28 @@
+{ fetchCrate, lib, openssl, pkg-config, rustPlatform, stdenv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "taplo-lsp";
+  version = "0.2.6";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-jd4l9iTCeHnUa/GC13paD3zDiCZBk9VgEbCDsOs/Xq4=";
+  };
+
+  cargoSha256 = "sha256-zQ303JFqnbulkWL4t5+fRWijaY9zd9tLKvrvdUEvKpY=";
+
+  # excludes test_tcp since it fails
+  cargoTestFlags = [ "test_stdio" ];
+
+  nativeBuildInputs = lib.optional stdenv.isLinux pkg-config;
+
+  buildInputs = lib.optional stdenv.isLinux openssl
+    ++ lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "A TOML toolkit written in Rust";
+    homepage = "https://taplo.tamasfe.dev";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tapview/default.nix b/nixpkgs/pkgs/development/tools/tapview/default.nix
new file mode 100644
index 000000000000..966df4bed65e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tapview/default.nix
@@ -0,0 +1,32 @@
+{ asciidoctor
+, fetchFromGitLab
+, lib
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tapview";
+  version = "1.1";
+
+  nativeBuildInputs = [ asciidoctor ];
+
+  src = fetchFromGitLab {
+    owner = "esr";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-inrxICNglZU/tup+YnHaDiVss32K2OXht/7f8lOZI4g=";
+  };
+
+  # Remove unecessary `echo` checks: `/bin/echo` fails, and `echo -n` works as expected.
+  patches = [ ./dont_check_echo.patch ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    description = "A minimalist pure consumer for TAP (Test Anything Protocol)";
+    homepage = "https://gitlab.com/esr/tapview";
+    license = licenses.bsd2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pamplemousse ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tapview/dont_check_echo.patch b/nixpkgs/pkgs/development/tools/tapview/dont_check_echo.patch
new file mode 100644
index 000000000000..3b12adb84c57
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tapview/dont_check_echo.patch
@@ -0,0 +1,44 @@
+diff --git a/tapview b/tapview
+index ad6a33a66d1..4cf9545d42f 100644
+--- a/tapview
++++ b/tapview
+@@ -13,21 +13,6 @@
+ #
+ # This is version 1.1
+ # A newer version may be available at https://gitlab.com/esr/tapview
+-#
+-# POSIX allows but does not mandate that -n suppresses emission of a
+-# trailing newline in echo. Thus, some shell builtin echos don't do
+-# that.  Cope gracefully.
+-# shellcheck disable=SC2039
+-if [ "$(echo -n "a"; echo "b")" != "ab" ]
+-then
+-    ECHO="echo"
+-elif [ "$(/bin/echo -n "a"; /bin/echo "b")" = "ab" ]
+-then
+-    ECHO="/bin/echo"
+-else
+-    echo "tapview: bailing out, your echo lacks -n support."
+-    exit 3
+-fi
+ 
+ OK="."
+ FAIL="F"
+@@ -37,7 +22,7 @@ TODO_OK="u"
+ 
+ ship_char() {
+     # shellcheck disable=SC2039
+-    "${ECHO}" -n "$1"
++    echo -n "$1"
+ }
+ 
+ ship_line() {
+@@ -155,7 +140,7 @@ do
+     fi
+ done
+ 
+-/bin/echo ""
++echo ""
+ 
+ if [ -z "$expect" ]
+ then
diff --git a/nixpkgs/pkgs/development/tools/textql/default.nix b/nixpkgs/pkgs/development/tools/textql/default.nix
new file mode 100644
index 000000000000..7b80192a75e7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/textql/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoPackage, fetchFromGitHub, sqlite }:
+
+buildGoPackage rec {
+  pname = "textql";
+  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 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/tf2pulumi/default.nix b/nixpkgs/pkgs/development/tools/tf2pulumi/default.nix
new file mode 100644
index 000000000000..6f195d86849a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tf2pulumi/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tf2pulumi";
+  version = "0.11.1";
+
+  src = fetchFromGitHub {
+    owner = "pulumi";
+    repo = "tf2pulumi";
+    rev = "v${version}";
+    sha256 = "sha256-4sEsWMkGRpB3gMGUOPh7n/nNwEp+ErKQK0qcT5ImaZ4=";
+  };
+
+  vendorSha256 = "sha256-wsgNrDnFXbpanEULEjf6OxOeMYmWzjE7vpVUB/UFNp8=";
+
+  ldflags = [
+    "-s" "-w" "-X=github.com/pulumi/tf2pulumi/version.Version=${src.rev}"
+  ];
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Convert Terraform projects to Pulumi TypeScript programs";
+    homepage = "https://www.pulumi.com/tf2pulumi/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mausch ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/the-way/default.nix b/nixpkgs/pkgs/development/tools/the-way/default.nix
new file mode 100644
index 000000000000..65c889aee832
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/the-way/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, installShellFiles, AppKit, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "the-way";
+  version = "0.13.0";
+
+  src = fetchFromGitHub {
+    owner = "out-of-cheese-error";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-OqJceRO1RFOLgNi3SbTKLw62tSfJSO7T2/u0RTX89AM=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin  [ AppKit Security ];
+
+  cargoSha256 = "sha256-sULjd+weixTQYFIQlluPwY4MFlZ1+vMMoMn4GP79oQs=";
+  checkFlagsArray = lib.optionals stdenv.isDarwin [ "--skip=copy" ];
+  dontUseCargoParallelTests = true;
+
+  postInstall = ''
+    $out/bin/the-way config default tmp.toml
+    for shell in bash fish zsh; do
+      THE_WAY_CONFIG=tmp.toml $out/bin/the-way complete $shell > the-way.$shell
+      installShellCompletion the-way.$shell
+    done
+  '';
+
+  meta = with lib; {
+    description = "Terminal code snippets manager";
+    homepage = "https://github.com/out-of-cheese-error/the-way";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ numkem ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/thrust/default.nix b/nixpkgs/pkgs/development/tools/thrust/default.nix
new file mode 100644
index 000000000000..9770a384e183
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/thrust/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, buildEnv, makeWrapper, glib, alsa-lib , 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 alsa-lib 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 {
+  pname = "thrust";
+  version = "0.7.6";
+
+  src = fetchurl {
+    url = "https://github.com/breach/thrust/releases/download/v${version}/thrust-v${version}-linux-x64.zip";
+    sha256 = "07rrnlj0gk500pvar4b1wdqm05p4n9yjwn911x93bd2qwc8r5ymc";
+  };
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+  buildInputs = [ thrustEnv ];
+
+  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 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/time-ghc-modules/default.nix b/nixpkgs/pkgs/development/tools/time-ghc-modules/default.nix
new file mode 100644
index 000000000000..e57495b8fb1c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/time-ghc-modules/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, sqlite
+, python3
+, coreutils
+, findutils
+, gnused
+}:
+
+stdenv.mkDerivation rec {
+  pname = "time-ghc-modules";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "codedownio";
+    repo = "time-ghc-modules";
+    rev = version;
+    sha256 = "0s6540gllhjn7366inhwa70rdnngnhbi07jn1h6x8a0pi71wdfm9";
+  };
+
+  nativeBuildInputs = [makeWrapper];
+
+  buildPhase = ''
+    runHook preBuild
+
+    mkdir -p $out/bin
+    cp ./time-ghc-modules $out/bin/time-ghc-modules
+    wrapProgram $out/bin/time-ghc-modules --prefix PATH : ${lib.makeBinPath [ sqlite python3 coreutils findutils gnused ]} \
+                                          --set PROCESS_SCRIPT $out/lib/process \
+                                          --set HTML_FILE $out/lib/index.html
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/lib
+    install -m 444 ./dist/index.html $out/lib
+    install ./scripts/process $out/lib
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Analyze GHC .dump-timings files";
+    homepage = "https://github.com/codedownio/time-ghc-modules";
+    license = licenses.mit;
+    maintainers = [ maintainers.thomasjm ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tokio-console/default.nix b/nixpkgs/pkgs/development/tools/tokio-console/default.nix
new file mode 100644
index 000000000000..f04de27f1c24
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tokio-console/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, protobuf
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tokio-console";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "tokio-rs";
+    repo = "console";
+    rev = "tokio-console-v${version}";
+    sha256 = "sha256-1wxRTdDmgTlGJ3W1txDA/3Rnccs3KBw55vprrGaVnkg=";
+  };
+
+  cargoSha256 = "sha256-RScu5V55OowwWHi3MLjW8DPlTMA/IEBYFt4VUDUHPKo=";
+
+  nativeBuildInputs = [ protobuf ];
+
+  meta = with lib; {
+    description = "A debugger for asynchronous Rust code";
+    homepage = "https://github.com/tokio-rs/console";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ max-niederman ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/development/tools/toluapp/default.nix b/nixpkgs/pkgs/development/tools/toluapp/default.nix
new file mode 100644
index 000000000000..5f938547cdd8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/toluapp/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, sconsPackages, lua }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.93";
+  pname = "toluapp";
+
+  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 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..213c926521fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tora/default.nix
@@ -0,0 +1,57 @@
+{ mkDerivation, lib, fetchFromGitHub, cmake, extra-cmake-modules, makeWrapper
+, boost, doxygen, openssl, libmysqlclient, postgresql, graphviz, loki
+, qscintilla, qtbase, qttools }:
+
+mkDerivation {
+  pname = "tora";
+  version = "3.2.176";
+
+  src = fetchFromGitHub {
+    owner  = "tora-tool";
+    repo   = "tora";
+    rev    = "39bf2837779bf458fc72a9f0e49271152e57829f";
+    sha256 = "0fr9b542i8r6shgnz33lc3cz333fnxgmac033yxfrdjfglzk0j2k";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules makeWrapper qttools ];
+
+  buildInputs = [
+    boost doxygen graphviz loki libmysqlclient openssl postgresql qscintilla qtbase
+  ];
+
+  preConfigure = ''
+    substituteInPlace src/widgets/toglobalsetting.cpp \
+      --replace 'defaultGvHome = "/usr/bin"' 'defaultGvHome = "${lib.getBin graphviz}/bin"'
+    substituteInPlace extlibs/libermodel/dotgraph.cpp \
+      --replace /usr/bin/dot ${lib.getBin graphviz}/bin/dot
+  '';
+
+  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=${qscintilla}/include"
+    "-DQSCINTILLA_LIBRARY=${qscintilla}/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${libmysqlclient}/lib/mysql -I${libmysqlclient}/include/mysql";
+
+  qtWrapperArgs = [
+    ''--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..5ecd6ad2eb6f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/toxiproxy/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "toxiproxy";
+  version = "2.1.4";
+  src = fetchFromGitHub {
+    owner = "Shopify";
+    repo = "toxiproxy";
+    rev = "v${version}";
+    sha256 = "07yhsvscdv1qjfc2fyyh9qsrrdwrrw04wadk5gaq4qddcway7vig";
+  };
+
+  goPackagePath = "github.com/Shopify/toxiproxy";
+  subPackages = ["cmd" "cli"];
+  ldflags = [ "-X github.com/Shopify/toxiproxy.Version=v${version}" ];
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/toxiproxy-cli
+    mv $out/bin/cmd $out/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/tracy/default.nix b/nixpkgs/pkgs/development/tools/tracy/default.nix
new file mode 100644
index 000000000000..55114c518e57
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tracy/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, lib, darwin, fetchFromGitHub, tbb, gtk3, glfw, pkg-config, freetype, Carbon, AppKit, capstone }:
+
+let
+  disableLTO = stdenv.cc.isClang && stdenv.isDarwin;  # workaround issue #19098
+in stdenv.mkDerivation rec {
+  pname = "tracy";
+  version = "0.7.8";
+
+  src = fetchFromGitHub {
+    owner = "wolfpld";
+    repo = "tracy";
+    rev = "v${version}";
+    sha256 = "sha256-hOeanY170vvn5W68cCDRUFApia/PW3ymPIgdWx3gwVw=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ glfw capstone ]
+    ++ lib.optionals stdenv.isDarwin [ Carbon AppKit freetype ]
+    ++ lib.optionals stdenv.isLinux [ gtk3 tbb ];
+
+  NIX_CFLAGS_COMPILE = [ ]
+    # Apple's compiler finds a format string security error on
+    # ../../../server/TracyView.cpp:649:34, preventing building.
+    ++ lib.optional stdenv.isDarwin "-Wno-format-security"
+    ++ lib.optional stdenv.isLinux "-ltbb"
+    ++ lib.optional stdenv.cc.isClang "-faligned-allocation"
+    ++ lib.optional disableLTO "-fno-lto";
+
+  NIX_CFLAGS_LINK = lib.optional disableLTO "-fno-lto";
+
+  buildPhase = ''
+    make -j $NIX_BUILD_CORES -C profiler/build/unix release
+    make -j $NIX_BUILD_CORES -C import-chrome/build/unix/ release
+    make -j $NIX_BUILD_CORES -C capture/build/unix/ release
+    make -j $NIX_BUILD_CORES -C update/build/unix/ release
+  '';
+
+  installPhase = ''
+    install -D ./profiler/build/unix/Tracy-release $out/bin/Tracy
+    install -D ./import-chrome/build/unix/import-chrome-release $out/bin/import-chrome
+    install -D ./capture/build/unix/capture-release $out/bin/capture
+    install -D ./update/build/unix/update-release $out/bin/update
+  '';
+
+  postFixup = lib.optionalString stdenv.isDarwin ''
+    install_name_tool -change libcapstone.4.dylib ${capstone}/lib/libcapstone.4.dylib $out/bin/Tracy
+  '';
+
+  meta = with lib; {
+    description = "A real time, nanosecond resolution, remote telemetry frame profiler for games and other applications";
+    homepage = "https://github.com/wolfpld/tracy";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ mpickering nagisa ];
+  };
+}
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..c184cee91ca5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tradcpp/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, autoconf }:
+
+stdenv.mkDerivation rec {
+  pname = "tradcpp";
+  version = "0.5.2";
+
+  src = fetchurl {
+    url = "https://ftp.netbsd.org/pub/NetBSD/misc/dholland/${pname}-${version}.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 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/treefmt/default.nix b/nixpkgs/pkgs/development/tools/treefmt/default.nix
new file mode 100644
index 000000000000..bd297154cc36
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/treefmt/default.nix
@@ -0,0 +1,21 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+rustPlatform.buildRustPackage rec {
+  pname = "treefmt";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "numtide";
+    repo = "treefmt";
+    rev = "v${version}";
+    sha256 = "sha256-PTT87Na4KpyN6a7T49vHHhSqSOF6JSWr5/jiys1Uzko=";
+  };
+
+  cargoSha256 = "sha256-Gvr6Zjd9Gvn2CyjNHlJaKPFYUViPezRwoDBeVelRlkU=";
+
+  meta = {
+    description = "one CLI to format the code tree";
+    homepage = "https://github.com/numtide/treefmt";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/trunk/default.nix b/nixpkgs/pkgs/development/tools/trunk/default.nix
new file mode 100644
index 000000000000..00cdae21e1ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/trunk/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, pkg-config
+, openssl, libiconv, CoreServices, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "trunk";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "thedodd";
+    repo = "trunk";
+    rev = "v${version}";
+    sha256 = "sha256-69MQDIF79pSuaOgZEIqb/ESPQzL7MUiQaJaxPccGxo8=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = if stdenv.isDarwin
+    then [ libiconv CoreServices Security ]
+    else [ openssl ];
+
+  # requires network
+  checkFlags = [ "--skip=tools::tests::download_and_install_binaries" ];
+
+  cargoSha256 = "sha256-3WTxCMNpBmiNbZMHp5BrqTXa1vmE/ZZ/8XbdcfxBfYg=";
+
+  meta = with lib; {
+    homepage = "https://github.com/thedodd/trunk";
+    description = "Build, bundle & ship your Rust WASM application to the web";
+    maintainers = with maintainers; [ freezeboy ];
+    license = with licenses; [ asl20 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/turbogit/default.nix b/nixpkgs/pkgs/development/tools/turbogit/default.nix
new file mode 100644
index 000000000000..4499ec606e8f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/turbogit/default.nix
@@ -0,0 +1,44 @@
+{ fetchFromGitHub, buildGoModule, lib, installShellFiles, libgit2, pkg-config }:
+buildGoModule rec {
+  pname = "turbogit";
+  version = "3.1.1";
+
+  src = fetchFromGitHub {
+    owner = "b4nst";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-BHgVJlitRUX/9zYPoK5XfRpzzTZRbLhQVZJcx8KVshk=";
+  };
+
+  vendorSha256 = "sha256-280OcGXZQJD4G6z0b2WnWAS+v7XVptyf2WnlPjG99/0=";
+
+  subPackages = [ "." ];
+
+  buildInputs = [ libgit2 ];
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+  postInstall = ''
+    # Move turbogit binary to tug
+    ln -s $out/bin/turbogit $out/bin/tug
+
+    # Generate completion files
+    mkdir -p share/completions
+    $out/bin/tug completion bash > share/completions/tug.bash
+    $out/bin/tug completion fish > share/completions/tug.fish
+    $out/bin/tug completion zsh > share/completions/tug.zsh
+
+    installShellCompletion share/completions/tug.{bash,fish,zsh}
+  '';
+
+  meta = with lib; {
+    description = "Keep your git workflow clean without headache.";
+    longDescription = ''
+      turbogit (tug) is a cli tool built to help you deal with your day-to-day git work.
+      turbogit enforces convention (e.g. The Conventional Commits) but tries to keep things simple and invisible for you.
+      turbogit is your friend.
+    '';
+    homepage = "https://b4nst.github.io/turbogit";
+    license = licenses.mit;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = [ maintainers.yusdacra ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tychus/default.nix b/nixpkgs/pkgs/development/tools/tychus/default.nix
new file mode 100644
index 000000000000..3838dfdc4852
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/tychus/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, buildGoPackage, CoreFoundation }:
+
+buildGoPackage rec {
+  pname = "tychus";
+  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 = lib.optionals stdenv.hostPlatform.isDarwin [ CoreFoundation ];
+
+  tags = [ "release" ];
+
+  meta = {
+    description = "Command line utility to live-reload your application";
+    homepage = "https://github.com/devlocker/tychus";
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/tychus/deps.nix b/nixpkgs/pkgs/development/tools/tychus/deps.nix
new file mode 100644
index 000000000000..e8897efffc95
--- /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";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/development/tools/typos/default.nix b/nixpkgs/pkgs/development/tools/typos/default.nix
new file mode 100644
index 000000000000..9ce8a9494dd3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/typos/default.nix
@@ -0,0 +1,22 @@
+{ fetchFromGitHub, rustPlatform, lib }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "typos";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "crate-ci";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-dQ+FLKf+zNrUabrXWvdYqpNXzS+j92zQcaZXPTxxB/E=";
+  };
+
+  cargoSha256 = "sha256-ud2Hb8EoOiPyzp7qPUeQi8FZ49RXbrDsk8ZEBI6lPtk=";
+
+  meta = with lib; {
+    description = "Source code spell checker";
+    homepage = "https://github.com/crate-ci/typos/";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.mgttlinger ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/udis86/default.nix b/nixpkgs/pkgs/development/tools/udis86/default.nix
new file mode 100644
index 000000000000..dd4ad058c8da
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/udis86/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, python2 }:
+
+stdenv.mkDerivation rec {
+  pname = "udis86";
+  version = "1.7.2";
+
+  src = fetchFromGitHub {
+    owner = "vmt";
+    repo = "udis86";
+    rev = "v${version}";
+    sha256 = "0c60zwimim6jrm4saw36s38w5sg5v8n9mr58pkqmjrlf7q9g6am1";
+  };
+
+  nativeBuildInputs = [ autoreconfHook python2 ];
+
+  configureFlags = [
+    "--enable-shared"
+  ];
+
+  outputs = [ "bin" "out" "dev" "lib" ];
+
+  meta = with lib; {
+    homepage = "http://udis86.sourceforge.net";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ timor ];
+    description = ''
+      Easy-to-use, minimalistic x86 disassembler library (libudis86)
+    '';
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/uftrace/default.nix b/nixpkgs/pkgs/development/tools/uftrace/default.nix
new file mode 100644
index 000000000000..bfb30cb1e896
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/uftrace/default.nix
@@ -0,0 +1,25 @@
+{lib, stdenv, fetchFromGitHub}:
+
+stdenv.mkDerivation rec {
+  pname = "uftrace";
+  version = "0.11";
+
+  src = fetchFromGitHub {
+    owner = "namhyung";
+    repo = "uftrace";
+    rev = "v${version}";
+    sha256 = "sha256-uRtMJIZJKGQTGqs8QX60FCeXg3j5hv/V/qw4m8eGYD4=";
+  };
+
+  postUnpack = ''
+        patchShebangs .
+  '';
+
+  meta = {
+    description = "Function (graph) tracer for user-space";
+    homepage = "https://github.com/namhyung/uftrace";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    maintainers = [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..d3372ec1b6e3
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/unconvert/default.nix
@@ -0,0 +1,31 @@
+
+{ buildGoPackage
+, lib
+, fetchFromGitHub
+}:
+
+buildGoPackage rec {
+  pname = "unconvert-unstable";
+  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/uniffi-bindgen/Cargo.lock b/nixpkgs/pkgs/development/tools/uniffi-bindgen/Cargo.lock
new file mode 100644
index 000000000000..4de3b80928aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/uniffi-bindgen/Cargo.lock
@@ -0,0 +1,837 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "anyhow"
+version = "1.0.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "askama"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d298738b6e47e1034e560e5afe63aa488fea34e25ec11b855a76f0d7b8e73134"
+dependencies = [
+ "askama_derive",
+ "askama_escape",
+ "askama_shared",
+]
+
+[[package]]
+name = "askama_derive"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2925c4c290382f9d2fa3d1c1b6a63fa1427099721ecca4749b154cc9c25522"
+dependencies = [
+ "askama_shared",
+ "proc-macro2",
+ "syn",
+]
+
+[[package]]
+name = "askama_escape"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a1bb320f97e6edf9f756bf015900038e43c7700e059688e5724a928c8f3b8d5"
+
+[[package]]
+name = "askama_shared"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2582b77e0f3c506ec4838a25fa8a5f97b9bed72bb6d3d272ea1c031d8bd373bc"
+dependencies = [
+ "askama_escape",
+ "nom 6.2.1",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "syn",
+ "toml",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitvec"
+version = "0.19.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55f93d0ef3363c364d5976646a38f04cf67cfe1d4c8d160cdea02cab2c116b33"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "bytes"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
+
+[[package]]
+name = "callbacks"
+version = "0.17.0"
+dependencies = [
+ "lazy_static",
+ "thiserror",
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "camino"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f3132262930b0522068049f5870a856ab8affc80c70d08b6ecb785771a6fc23"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "081e3f0755c1f380c2d010481b6fa2e02973586d5f2b24eebb7a2a1d98b143d8"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "semver-parser",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "cdylib-dependency"
+version = "0.17.0"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "bitflags",
+ "textwrap",
+ "unicode-width",
+]
+
+[[package]]
+name = "coverall"
+version = "0.17.0"
+dependencies = [
+ "lazy_static",
+ "thiserror",
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "crate_one"
+version = "0.17.0"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "crate_two"
+version = "0.17.0"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "crate_one",
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "custom-types"
+version = "0.17.0"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "serde_json",
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+ "url",
+]
+
+[[package]]
+name = "ext-types-guid"
+version = "0.17.0"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "serde_json",
+ "thiserror",
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "ext-types-lib"
+version = "0.17.0"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "custom-types",
+ "ext-types-guid",
+ "uniffi",
+ "uniffi-one",
+ "uniffi_build",
+ "uniffi_macros",
+ "url",
+]
+
+[[package]]
+name = "external_types_lib"
+version = "0.17.0"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "crate_one",
+ "crate_two",
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "ffi-crate"
+version = "0.17.0"
+dependencies = [
+ "cdylib-dependency",
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "funty"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7"
+
+[[package]]
+name = "glob"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "i1015-fully-qualified-types"
+version = "0.17.0"
+dependencies = [
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "i356-enum-without-int-helpers"
+version = "0.17.0"
+dependencies = [
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
+
+[[package]]
+name = "kotlin-experimental-unsigned-types"
+version = "0.17.0"
+dependencies = [
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lexical-core"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe"
+dependencies = [
+ "arrayvec",
+ "bitflags",
+ "cfg-if",
+ "ryu",
+ "static_assertions",
+]
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "memchr"
+version = "2.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
+
+[[package]]
+name = "nom"
+version = "5.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"
+dependencies = [
+ "memchr",
+ "version_check",
+]
+
+[[package]]
+name = "nom"
+version = "6.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c5c51b9083a3c620fa67a2a635d1ce7d95b897e957d6b28ff9a5da960a103a6"
+dependencies = [
+ "bitvec",
+ "funty",
+ "lexical-core",
+ "memchr",
+ "version_check",
+]
+
+[[package]]
+name = "omit_argument_labels"
+version = "0.17.0"
+dependencies = [
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
+
+[[package]]
+name = "paste"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0744126afe1a6dd7f394cb50a716dbe086cb06e255e53d8d0185d82828358fb5"
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pest"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
+dependencies = [
+ "ucd-trie",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radium"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8"
+
+[[package]]
+name = "ryu"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
+
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser",
+ "serde",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.136"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.136"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d23c1ba4cf0efd44be32017709280b32d1cea5c3f1275c3b6d9e8bc54f758085"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "syn"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "termcolor"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "toml"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "trybuild"
+version = "1.0.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099a24e67e2b4083a6d0beb5a98e274c3160edfb879d71cd2cd14da93786a93b"
+dependencies = [
+ "glob",
+ "once_cell",
+ "serde",
+ "serde_json",
+ "termcolor",
+ "toml",
+]
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
+
+[[package]]
+name = "uniffi"
+version = "0.17.0"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "cargo_metadata",
+ "lazy_static",
+ "log",
+ "paste",
+ "static_assertions",
+ "trybuild",
+ "uniffi_bindgen",
+]
+
+[[package]]
+name = "uniffi-example-arithmetic"
+version = "0.17.0"
+dependencies = [
+ "thiserror",
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "uniffi-example-callbacks"
+version = "0.17.0"
+dependencies = [
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "uniffi-example-geometry"
+version = "0.17.0"
+dependencies = [
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "uniffi-example-rondpoint"
+version = "0.17.0"
+dependencies = [
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "uniffi-example-sprites"
+version = "0.17.0"
+dependencies = [
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "uniffi-example-todolist"
+version = "0.17.0"
+dependencies = [
+ "lazy_static",
+ "thiserror",
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "uniffi-fixture-time"
+version = "0.17.0"
+dependencies = [
+ "thiserror",
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "uniffi-one"
+version = "0.17.0"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "uniffi_bindgen"
+version = "0.17.0"
+dependencies = [
+ "anyhow",
+ "askama",
+ "cargo_metadata",
+ "clap",
+ "heck",
+ "paste",
+ "serde",
+ "toml",
+ "weedle",
+]
+
+[[package]]
+name = "uniffi_build"
+version = "0.17.0"
+dependencies = [
+ "anyhow",
+ "uniffi_bindgen",
+]
+
+[[package]]
+name = "uniffi_macros"
+version = "0.17.0"
+dependencies = [
+ "glob",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "uniffi_build",
+]
+
+[[package]]
+name = "uniffi_uitests"
+version = "0.17.0"
+dependencies = [
+ "trybuild",
+ "uniffi",
+ "uniffi_build",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "url"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "weedle"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "610950904727748ca09682e857f0d6d6437f0ca862f32f9229edba8cec8b2635"
+dependencies = [
+ "nom 5.1.2",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "wyz"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214"
diff --git a/nixpkgs/pkgs/development/tools/uniffi-bindgen/default.nix b/nixpkgs/pkgs/development/tools/uniffi-bindgen/default.nix
new file mode 100644
index 000000000000..59ecd71a4114
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/uniffi-bindgen/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, ktlint
+, yapf
+, rubocop
+, rustfmt
+, makeWrapper
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "uniffi-bindgen";
+  version = "0.17.0";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = "uniffi-rs";
+    rev = "v${version}";
+    hash = "sha256-EGyJrW0U/dnKT7OWgd8LehCyvj6mxud3QWbBVyhoK4Y=";
+  };
+
+  cargoLock.lockFileContents = builtins.readFile ./Cargo.lock;
+  cargoHash = "sha256-Fw+yCAI32NdFKJGPuNU6t0FiEfohoVD3VQfInNJuooI=";
+
+  cargoBuildFlags = [ "-p uniffi_bindgen" ];
+  cargoTestFlags = [ "-p uniffi_bindgen" ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  postPatch = ''
+    cp ${./Cargo.lock} Cargo.lock
+  '';
+
+  postFixup = ''
+    wrapProgram "$out/bin/uniffi-bindgen" \
+      --suffix PATH : ${lib.strings.makeBinPath [ rustfmt ktlint yapf rubocop ] }
+  '';
+
+  meta = with lib; {
+    description = "Toolkit for building cross-platform software components in Rust";
+    homepage = "https://mozilla.github.io/uniffi-rs/";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ vtuan10 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/unity3d/default.nix b/nixpkgs/pkgs/development/tools/unity3d/default.nix
new file mode 100644
index 000000000000..5470c45b138a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/unity3d/default.nix
@@ -0,0 +1,143 @@
+{ stdenv, lib, fetchurl, makeWrapper, file, getopt
+, gtk2, gtk3, gdk-pixbuf, glib, libGL, libGLU, nss, nspr, udev, tbb
+, alsa-lib, 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, libselinux, pciutils, libpulseaudio
+}:
+
+let
+  libPath64 = lib.makeLibraryPath [
+    gcc.cc gtk2 gdk-pixbuf glib libGL libGLU nss nspr
+    alsa-lib 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
+
+    libselinux pciutils libpulseaudio
+  ];
+  libPath32 = lib.makeLibraryPath [ gcc_32bit.cc ];
+  binPath = lib.makeBinPath [ nodejs gnutar ];
+
+  ver = "2018.3.0";
+  build = "f2";
+
+in stdenv.mkDerivation {
+  pname = "unity-editor";
+  version = "${ver}x${build}";
+
+  src = fetchurl {
+    url = "https://beta.unity3d.com/download/6e9a27477296/LinuxEditorInstaller/Unity.tar.xz";
+    sha256 = "10gppnqacs1qzahj077nkcgbfz2lryd0dxnfcmvyc64xpxnj9nlk";
+  };
+
+  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_LIBRARY_PATH : "${libPath64}" \
+      --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 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/unityhub/default.nix b/nixpkgs/pkgs/development/tools/unityhub/default.nix
new file mode 100644
index 000000000000..ad0e2c998e6b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/unityhub/default.nix
@@ -0,0 +1,50 @@
+{ lib, fetchurl, appimageTools, gsettings-desktop-schemas, gtk3 }:
+
+let
+  version = "2.3.2";
+  src = fetchurl {
+    # mirror of https://public-cdn.cloud.unity3d.com/hub/prod/UnityHub.AppImage
+    url = "https://archive.org/download/unity-hub-${version}/UnityHub.AppImage";
+    sha256 = "07nfyfp9apshqarc6pgshsczila6x4943hiyyizc55kp85aw0imn";
+  };
+  name = "unityhub";
+in appimageTools.wrapType2 rec {
+  inherit name src;
+
+  extraPkgs = (pkgs: with pkgs; with xorg; [ gtk2 gdk-pixbuf glib libGL libGLU nss nspr
+    alsa-lib cups libcap fontconfig freetype pango
+    cairo dbus dbus-glib libdbusmenu libdbusmenu-gtk2 expat zlib libpng12 udev tbb
+    libpqxx gtk3 libsecret lsb-release openssl nodejs ncurses5
+
+    libX11 libXcursor libXdamage libXfixes libXrender libXi
+    libXcomposite libXext libXrandr libXtst libSM libICE libxcb
+
+    libselinux pciutils libpulseaudio libxml2 icu clang cacert
+  ]);
+
+  extraInstallCommands =
+    let appimageContents = appimageTools.extractType2 { inherit name src; }; in
+    ''
+      install -Dm444 ${appimageContents}/unityhub.desktop -t $out/share/applications
+      substituteInPlace $out/share/applications/unityhub.desktop \
+        --replace 'Exec=AppRun' 'Exec=${name}'
+      install -m 444 -D ${appimageContents}/unityhub.png \
+        $out/share/icons/hicolor/64x64/apps/unityhub.png
+    '';
+
+  profile = ''
+    export XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_DATA_DIRS
+  '';
+
+  meta = with 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/vagrant/0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.patch b/nixpkgs/pkgs/development/tools/vagrant/0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.patch
new file mode 100644
index 000000000000..6109101b7ba9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.patch
@@ -0,0 +1,342 @@
+From dc7156d8951242231cfd9142b3d5628815dc6589 Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Wed, 31 Mar 2021 14:30:01 +0200
+Subject: [PATCH] Revert "Merge pull request #12225 from
+ chrisroberts/resolution-isolation"
+
+This reverts commit 8a69d0c4dae035a4b1aa789bc4ec3db69c210df2, reversing
+changes made to 5dd0a8c8acc36b654c13a5102e4327eedf1858f2.
+
+-----
+
+Rationale: NixOS-specific patch. The changes in here break our current
+implementation of declarative plugins (only `vagrant-libvirt` atm).
+---
+ bin/vagrant                       | 28 +--------------
+ lib/vagrant.rb                    |  2 +-
+ lib/vagrant/bundler.rb            | 17 +++------
+ lib/vagrant/errors.rb             | 12 -------
+ lib/vagrant/plugin/manager.rb     | 22 ++----------
+ templates/locales/en.yml          | 23 ++----------
+ test/unit/bin/vagrant_test.rb     |  1 -
+ test/unit/vagrant/bundler_test.rb | 58 ++++++++++++++-----------------
+ 8 files changed, 39 insertions(+), 124 deletions(-)
+
+diff --git a/bin/vagrant b/bin/vagrant
+index c019f30ff..ba7e40076 100755
+--- a/bin/vagrant
++++ b/bin/vagrant
+@@ -23,9 +23,9 @@ if idx = argv.index("--")
+   argv = argv.slice(0, idx)
+ end
+ 
+-require_relative "../lib/vagrant/version"
+ # Fast path the version of Vagrant
+ if argv.include?("-v") || argv.include?("--version")
++  require_relative "../lib/vagrant/version"
+   puts "Vagrant #{Vagrant::VERSION}"
+   exit 0
+ end
+@@ -82,29 +82,6 @@ end
+ $stdout.sync = true
+ $stderr.sync = true
+ 
+-# Before we start activate all our dependencies
+-# so we can provide correct resolutions later
+-builtin_specs = []
+-
+-vagrant_spec = Gem::Specification.find_all_by_name("vagrant").detect do |spec|
+-  spec.version == Gem::Version.new(Vagrant::VERSION)
+-end
+-
+-dep_activator = proc do |spec|
+-  spec.runtime_dependencies.each do |dep|
+-    gem(dep.name, *dep.requirement.as_list)
+-    dep_spec = Gem::Specification.find_all_by_name(dep.name).detect(&:activated?)
+-    if dep_spec
+-      builtin_specs << dep_spec
+-      dep_activator.call(dep_spec)
+-    end
+-  end
+-end
+-
+-if vagrant_spec
+-  dep_activator.call(vagrant_spec)
+-end
+-
+ env = nil
+ begin
+   require 'log4r'
+@@ -114,9 +91,6 @@ begin
+   require 'vagrant/util/platform'
+   require 'vagrant/util/experimental'
+ 
+-  # Set our list of builtin specs
+-  Vagrant::Bundler.instance.builtin_specs = builtin_specs
+-
+   # Schedule the cleanup of things
+   at_exit(&Vagrant::Bundler.instance.method(:deinit))
+ 
+diff --git a/lib/vagrant.rb b/lib/vagrant.rb
+index f3dcba0bc..d696bdff8 100644
+--- a/lib/vagrant.rb
++++ b/lib/vagrant.rb
+@@ -81,7 +81,7 @@ if ENV["VAGRANT_LOG"] && ENV["VAGRANT_LOG"] != ""
+     # See https://github.com/rest-client/rest-client/issues/34#issuecomment-290858
+     # for more information
+     class VagrantLogger < Log4r::Logger
+-      def << msg
++      def << (msg)
+         debug(msg.strip)
+       end
+     end
+diff --git a/lib/vagrant/bundler.rb b/lib/vagrant/bundler.rb
+index eb2caabb0..d75f54362 100644
+--- a/lib/vagrant/bundler.rb
++++ b/lib/vagrant/bundler.rb
+@@ -189,11 +189,8 @@ module Vagrant
+     attr_reader :env_plugin_gem_path
+     # @return [Pathname] Vagrant environment data path
+     attr_reader :environment_data_path
+-    # @return [Array<Gem::Specification>, nil] List of builtin specs
+-    attr_accessor :builtin_specs
+ 
+     def initialize
+-      @builtin_specs = []
+       @plugin_gem_path = Vagrant.user_data_path.join("gems", RUBY_VERSION).freeze
+       @logger = Log4r::Logger.new("vagrant::bundler")
+     end
+@@ -290,6 +287,7 @@ module Vagrant
+         # Never allow dependencies to be remotely satisfied during init
+         request_set.remote = false
+ 
++        repair_result = nil
+         begin
+           @logger.debug("resolving solution from available specification set")
+           # Resolve the request set to ensure proper activation order
+@@ -652,6 +650,7 @@ module Vagrant
+         self_spec.activate
+         @logger.info("Activated vagrant specification version - #{self_spec.version}")
+       end
++      self_spec.runtime_dependencies.each { |d| gem d.name, *d.requirement.as_list }
+       # discover all the gems we have available
+       list = {}
+       if Gem.respond_to?(:default_specifications_dir)
+@@ -660,16 +659,10 @@ module Vagrant
+         spec_dir = Gem::Specification.default_specifications_dir
+       end
+       directories = [spec_dir]
+-      if Vagrant.in_bundler?
+-        Gem::Specification.find_all{true}.each do |spec|
+-          list[spec.full_name] = spec
+-        end
+-      else
+-        builtin_specs.each do |spec|
+-          list[spec.full_name] = spec
+-        end
++      Gem::Specification.find_all{true}.each do |spec|
++        list[spec.full_name] = spec
+       end
+-      if Vagrant.in_installer?
++      if(!Object.const_defined?(:Bundler))
+         directories += Gem::Specification.dirs.find_all do |path|
+           !path.start_with?(Gem.user_dir)
+         end
+diff --git a/lib/vagrant/errors.rb b/lib/vagrant/errors.rb
+index 5cb861c06..782615bc4 100644
+--- a/lib/vagrant/errors.rb
++++ b/lib/vagrant/errors.rb
+@@ -636,18 +636,6 @@ module Vagrant
+       error_key(:provisioner_winrm_unsupported)
+     end
+ 
+-    class PluginNeedsDeveloperTools < VagrantError
+-      error_key(:plugin_needs_developer_tools)
+-    end
+-
+-    class PluginMissingLibrary < VagrantError
+-      error_key(:plugin_missing_library)
+-    end
+-
+-    class PluginMissingRubyDev < VagrantError
+-      error_key(:plugin_missing_ruby_dev)
+-    end
+-
+     class PluginGemNotFound < VagrantError
+       error_key(:plugin_gem_not_found)
+     end
+diff --git a/lib/vagrant/plugin/manager.rb b/lib/vagrant/plugin/manager.rb
+index b73f07f9c..9058e68b3 100644
+--- a/lib/vagrant/plugin/manager.rb
++++ b/lib/vagrant/plugin/manager.rb
+@@ -179,26 +179,8 @@ module Vagrant
+         result
+       rescue Gem::GemNotFoundException
+         raise Errors::PluginGemNotFound, name: name
+-      rescue Gem::Exception => err
+-        @logger.warn("Failed to install plugin: #{err}")
+-        @logger.debug("#{err.class}: #{err}\n#{err.backtrace.join("\n")}")
+-        # Try and determine a cause for the failure
+-        case err.message
+-        when /install development tools first/
+-          raise Errors::PluginNeedsDeveloperTools
+-        when /library not found in default locations/
+-          lib = err.message.match(/(\w+) library not found in default locations/)
+-          if lib.nil?
+-            raise Errors::BundlerError, message: err.message
+-          end
+-          raise Errors::PluginMissingLibrary,
+-            library: lib.captures.first,
+-            name: name
+-        when /find header files for ruby/
+-          raise Errors::PluginMissingRubyDev
+-        else
+-          raise Errors::BundlerError, message: err.message
+-        end
++      rescue Gem::Exception => e
++        raise Errors::BundlerError, message: e.to_s
+       end
+ 
+       # Uninstalls the plugin with the given name.
+diff --git a/templates/locales/en.yml b/templates/locales/en.yml
+index edae9b477..782904f49 100644
+--- a/templates/locales/en.yml
++++ b/templates/locales/en.yml
+@@ -794,9 +794,9 @@ en:
+         matching this provider. For example, if you're using VirtualBox,
+         the clone environment must also be using VirtualBox.
+       cloud_init_not_found: |-
+-        cloud-init is not found. Please ensure that cloud-init is installed and
++        cloud-init is not found. Please ensure that cloud-init is installed and 
+         available on path for guest '%{guest_name}'.
+-      cloud_init_command_failed: |-
++      cloud_init_command_failed: |- 
+         cloud init command '%{cmd}' failed on guest '%{guest_name}'.
+       command_deprecated: |-
+         The command 'vagrant %{name}' has been deprecated and is no longer functional
+@@ -1238,23 +1238,6 @@ en:
+         following command:
+ 
+           vagrant plugin install --local
+-      plugin_needs_developer_tools: |-
+-        Vagrant failed to install the requested plugin because development tools
+-        are required for installation but are not currently installed on this
+-        machine. Please install development tools and then try this command
+-        again.
+-      plugin_missing_library: |-
+-        Vagrant failed to install the requested plugin because it depends
+-        on a library which is not currently installed on this system. The
+-        following library is required by the '%{name}' plugin:
+-
+-          %{library}
+-
+-        Please install the library and then run the command again.
+-      plugin_missing_ruby_dev: |-
+-        Vagrant failed to install the requested plugin because the Ruby header
+-        files could not be found. Install the ruby development package for your
+-        system and then run this command again.
+       powershell_not_found: |-
+         Failed to locate the powershell executable on the available PATH. Please
+         ensure powershell is installed and available on the local PATH, then
+@@ -3015,7 +2998,7 @@ en:
+     pushes:
+       file:
+         no_destination: "File destination must be specified."
+-
++    
+     autocomplete:
+       installed: |-
+         Autocomplete installed at paths:
+diff --git a/test/unit/bin/vagrant_test.rb b/test/unit/bin/vagrant_test.rb
+index dbbd52112..bc11309aa 100644
+--- a/test/unit/bin/vagrant_test.rb
++++ b/test/unit/bin/vagrant_test.rb
+@@ -30,7 +30,6 @@ describe "vagrant bin" do
+     allow(Kernel).to receive(:exit)
+     allow(Vagrant::Environment).to receive(:new).and_return(env)
+     allow(Vagrant).to receive(:in_installer?).and_return(true)
+-    allow(self).to receive(:require_relative)
+   end
+ 
+   after { expect(run_vagrant).to eq(exit_code) }
+diff --git a/test/unit/vagrant/bundler_test.rb b/test/unit/vagrant/bundler_test.rb
+index 69f425c66..00cedc021 100644
+--- a/test/unit/vagrant/bundler_test.rb
++++ b/test/unit/vagrant/bundler_test.rb
+@@ -778,46 +778,42 @@ describe Vagrant::Bundler do
+       end
+     end
+ 
+-    context "when bundler is not defined" do
+-      before { expect(Vagrant).to receive(:in_bundler?).and_return(false) }
++    context "when run time dependencies are defined" do
++      let(:vagrant_dep_specs) { [double("spec", name: "vagrant-dep", requirement: double("spec-req", as_list: []))] }
+ 
+-      context "when running inside the installer" do
+-        before { expect(Vagrant).to receive(:in_installer?).and_return(true) }
++      it "should call #gem to activate the dependencies" do
++        expect(subject).to receive(:gem).with("vagrant-dep", any_args)
++        subject.send(:vagrant_internal_specs)
++      end
++    end
+ 
+-        it "should load gem specification directories" do
+-          expect(Gem::Specification).to receive(:dirs).and_return(spec_dirs)
+-          subject.send(:vagrant_internal_specs)
+-        end
++    context "when bundler is not defined" do
++      before { expect(Object).to receive(:const_defined?).with(:Bundler).and_return(false) }
+ 
+-        context "when checking paths" do
+-          let(:spec_dirs) { [double("spec-dir", start_with?: in_user_dir)] }
+-          let(:in_user_dir) { true }
+-          let(:user_dir) { double("user-dir") }
++      it "should load gem specification directories" do
++        expect(Gem::Specification).to receive(:dirs).and_return(spec_dirs)
++        subject.send(:vagrant_internal_specs)
++      end
+ 
+-          before { allow(Gem).to receive(:user_dir).and_return(user_dir) }
++      context "when checking paths" do
++        let(:spec_dirs) { [double("spec-dir", start_with?: in_user_dir)] }
++        let(:in_user_dir) { true }
++        let(:user_dir) { double("user-dir") }
+ 
+-          it "should check if path is within local user directory" do
+-            expect(spec_dirs.first).to receive(:start_with?).with(user_dir).and_return(false)
+-            subject.send(:vagrant_internal_specs)
+-          end
+-
+-          context "when path is not within user directory" do
+-            let(:in_user_dir) { false }
++        before { allow(Gem).to receive(:user_dir).and_return(user_dir) }
+ 
+-            it "should use path when loading specs" do
+-              expect(Gem::Specification).to receive(:each_spec) { |arg| expect(arg).to include(spec_dirs.first) }
+-              subject.send(:vagrant_internal_specs)
+-            end
+-          end
++        it "should check if path is within local user directory" do
++          expect(spec_dirs.first).to receive(:start_with?).with(user_dir).and_return(false)
++          subject.send(:vagrant_internal_specs)
+         end
+-      end
+ 
+-      context "when running outside the installer" do
+-        before { expect(Vagrant).to receive(:in_installer?).and_return(false) }
++        context "when path is not within user directory" do
++          let(:in_user_dir) { false }
+ 
+-        it "should not load gem specification directories" do
+-          expect(Gem::Specification).not_to receive(:dirs)
+-          subject.send(:vagrant_internal_specs)
++          it "should use path when loading specs" do
++            expect(Gem::Specification).to receive(:each_spec) { |arg| expect(arg).to include(spec_dirs.first) }
++            subject.send(:vagrant_internal_specs)
++          end
+         end
+       end
+     end
+-- 
+2.29.3
+
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..fa6555c594ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/0004-Support-system-installed-plugins.patch
@@ -0,0 +1,93 @@
+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/9d86f222/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 9058e68..2772131 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,10 @@ 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
+       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..3920e4fcac04
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/default.nix
@@ -0,0 +1,118 @@
+{ 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.19";
+  url = "https://github.com/hashicorp/vagrant/archive/v${version}.tar.gz";
+  sha256 = "sha256-Tw5rHUZuJt6taCxNSEPo9koBLrpL6RUGrmxtNNPZyPk=";
+
+  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));
+
+    # This replaces the gem symlinks with directories, resolving this
+    # error when running vagrant (I have no idea why):
+    # /nix/store/p4hrycs0zaa9x0gsqylbk577ppnryixr-vagrant-2.2.6/lib/ruby/gems/2.6.0/gems/i18n-1.1.1/lib/i18n/config.rb:6:in `<module:I18n>': uninitialized constant I18n::Config (NameError)
+    postBuild = ''
+      for gem in "$out"/lib/ruby/gems/*/gems/*; do
+        cp -a "$gem/" "$gem.new"
+        rm "$gem"
+        # needed on macOS, otherwise the mv yields permission denied
+        chmod +w "$gem.new"
+        mv "$gem.new" "$gem"
+      done
+    '';
+  };
+
+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
+    ./0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.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"
+
+    mkdir -p $out/share/bash-completion/completions/
+    cp -av contrib/bash/completion.sh $out/share/bash-completion/completions/vagrant
+  '' +
+  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 = ''
+    HOME="$(mktemp -d)" $out/bin/vagrant init --output - > /dev/null
+  '';
+
+  # `patchShebangsAuto` patches this one script which is intended to run
+  # on foreign systems.
+  postFixup = ''
+    sed -i -e '1c#!/bin/sh -' \
+      $out/lib/ruby/gems/*/gems/vagrant-*/plugins/provisioners/salt/bootstrap-salt.sh
+  '';
+
+  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; [ ma27 ];
+    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..dae14cb5e7a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/gemset.nix
@@ -0,0 +1,366 @@
+{
+  bcrypt_pbkdf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ndamfaivnkhc6hy0yqyk2gkwr6f3bz6216lh74hsiiyk3axz445";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  childprocess = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lvcp8bsd35g57f7wz4jigcw2sryzzwrpcgjwwf3chmjrjcww5in";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nwad3211p7yv9sda31jmbyw6sdafzmdi2i2niaz6f0wk5nq9h0f";
+      type = "gem";
+    };
+    version = "1.1.9";
+  };
+  ed25519 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f5kr8za7hvla38fc0n9jiv55iq62k5bzclsa5kdb14l3r4w6qnw";
+      type = "gem";
+    };
+    version = "1.2.4";
+  };
+  erubi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09l8lz3j00m898li0yfsnb6ihc63rdvhw3k5xczna5zrjk104f2l";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15yrwawhvkjvfg0dsf8z81876ddj6161q0wh5s7pw4sim8z8pspr";
+      type = "gem";
+    };
+    version = "0.88.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ssxcywmb3flxsjdg13is6k01807zgzasdhj4j48dm7ac59cmksn";
+      type = "gem";
+    };
+    version = "1.15.4";
+  };
+  gssapi = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qdfhj12aq8v0y961v4xv96a1y2z80h3xhvzrs9vsfgf884g6765";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  gyoku = {
+    dependencies = ["builder"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wn0sl14396g5lyvp8sjmcb1hw9rbyi89gxng91r7w4df4jwiidh";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  hashicorp-checkpoint = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z6mwzvd7p2wqhmk07dwrhvm0ncgqm7pxn0pr2k025rwsspp9bsd";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vdd1kii40qhbr9n8qx71k2gskq6rkl8ygy8hw5hfj8bb5a364xf";
+      type = "gem";
+    };
+    version = "1.8.11";
+  };
+  listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ncfhdkjiwq9l1pm87ax2pa20kz2j0dz56vi74cnr5a6cfk0qb5p";
+      type = "gem";
+    };
+    version = "3.7.0";
+  };
+  little-plugger = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  log4r = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ri90q0frfmigkirqv5ihyrj59xm8pq5zcmf156cbdv4r4l2jicv";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  logging = {
+    dependencies = ["little-plugger" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pkmhcxi8lp74bq5gz9lxrvaiv5w0745kk7s4bw2b1x07qqri0n9";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zj12l9qk62anvk9bjvandpa6vy4xslil15wl6wlivyf51z773vh";
+      type = "gem";
+    };
+    version = "3.3.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z5wvk6qi4ws1kjh7xn1rfirqw5m72bwvqacck1fjpbh33pcrwxv";
+      type = "gem";
+    };
+    version = "3.2021.0901";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  net-scp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b4h3ip8d1gkrc0znnw54hbxillk73mdnaf5pz330lmrcl1wiilg";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  net-sftp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "185vsybznqgqbb4i2qnxvf1gam8lb634nqcrq7r3i2zy1g6xd8mi";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jp3jgcn8cij407xx9ldb5h9c6jv13jc4cf6kk2idclz43ww21c9";
+      type = "gem";
+    };
+    version = "6.1.0";
+  };
+  nori = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qsx9c4jr11vr3a9s5j83avczx9qn9rjaf32gxpc2v451hvbc0is";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  rb-kqueue = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wpn2m28qs7s95nqg67dn5vpyh05q7d0w6sm4svhflm41cd0akr4";
+      type = "gem";
+    };
+    version = "0.2.7";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rubyntlm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b8hczk8hysv53ncsqzx4q6kma5gy5lqc7s5yx8h64x3vdb18cjv";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  vagrant_cloud = {
+    dependencies = ["excon" "log4r" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0np0d8rjca130si5iaxasbqmfbbx4l3kd9mxdsa3p5mqiia7za3b";
+      type = "gem";
+    };
+    version = "3.0.5";
+  };
+  wdm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0x5l2pn4x92734k6i2wcjbn2klmwgkiqaajvxadh35k74dgnyh18";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  winrm = {
+    dependencies = ["builder" "erubi" "gssapi" "gyoku" "httpclient" "logging" "nori" "rubyntlm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nxf6a47d1xf1nvi7rbfbzjyyjhz0iakrnrsr2hj6y24a381sd8i";
+      type = "gem";
+    };
+    version = "2.3.6";
+  };
+  winrm-elevated = {
+    dependencies = ["erubi" "winrm" "winrm-fs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lmlaii8qapn84wxdg5d82gbailracgk67d0qsnbdnffcg8kswzd";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  winrm-fs = {
+    dependencies = ["erubi" "logging" "rubyzip" "winrm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gb91k6s1yjqw387x4w1nkpnxblq3pjdqckayl0qvz5n3ygdsb0d";
+      type = "gem";
+    };
+    version = "1.3.5";
+  };
+}
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..2d59b4c2cf8c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/gemset_libvirt.nix
@@ -0,0 +1,169 @@
+{
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1759s0rz6qgsw86dds1z4jzb3fvizqsk11j5q6z7lc5n404w6i23";
+      type = "gem";
+    };
+    version = "0.79.0";
+  };
+  fog-core = {
+    dependencies = ["builder" "excon" "formatador" "mime-types"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bwqm9n69y5y0a5iickr358z7w4hml3flqwfz8b7cnj1ldabhnjn";
+      type = "gem";
+    };
+    version = "2.2.3";
+  };
+  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 = "1s62ihwxlwgp84xw32wg6hwcx4422v20c7g7azd0xslb91y1ln1r";
+      type = "gem";
+    };
+    version = "0.8.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 = "0lrirj0gw420kw71bjjlqkqhqbrplla61gbv1jzgsz6bv90qr3ci";
+      type = "gem";
+    };
+    version = "2.5.1";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zj12l9qk62anvk9bjvandpa6vy4xslil15wl6wlivyf51z773vh";
+      type = "gem";
+    };
+    version = "3.3.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1phcq7z0zpipwd7y4fbqmlaqghv07fjjgrx99mwq3z3n0yvy7fmi";
+      type = "gem";
+    };
+    version = "3.2021.0225";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hdbpmamx8js53yk3h8cqy12kgv6ca06k0c9n3pxh6b6cjfs19x7";
+      type = "gem";
+    };
+    version = "2.5.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b51df8fwadak075cvi17w0nch6qz1r66564qp29qwfj67j9qp0p";
+      type = "gem";
+    };
+    version = "1.11.2";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  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 = "07j30w23syvzrhznad9dkh1ks4lzxzi7ak2966b7i7wr4kz8x1hp";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+}
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..8262220140a6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vagrant/use-system-bundler-version.patch
@@ -0,0 +1,13 @@
+diff --git a/lib/vagrant/bundler.rb b/lib/vagrant/bundler.rb
+index 336ac1e05..1bfd84c0d 100644
+--- a/lib/vagrant/bundler.rb
++++ b/lib/vagrant/bundler.rb
+@@ -470,7 +470,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/vala-language-server/default.nix b/nixpkgs/pkgs/development/tools/vala-language-server/default.nix
new file mode 100644
index 000000000000..fc7af672664e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vala-language-server/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv
+, fetchFromGitHub
+, nix-update-script
+, meson
+, ninja
+, pkg-config
+, scdoc
+, gnome-builder
+, gnused
+, glib
+, libgee
+, json-glib
+, jsonrpc-glib
+, vala
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vala-language-server";
+  version = "0.48.4";
+
+  src = fetchFromGitHub {
+    owner = "Prince781";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-vCQ/j0DxG9sSEquPh9TtZ5hTADPh0d8sDIDSJdUDK4s=";
+  };
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    scdoc
+    # GNOME Builder Plugin
+    gnused
+    gnome-builder
+  ];
+
+  buildInputs = [
+    glib
+    libgee
+    json-glib
+    jsonrpc-glib
+    vala
+  ];
+
+  meta = with lib; {
+    description = "Code Intelligence for Vala & Genie";
+    homepage = "https://github.com/Prince781/vala-language-server";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ andreasfelix ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vala-lint/default.nix b/nixpkgs/pkgs/development/tools/vala-lint/default.nix
new file mode 100644
index 000000000000..d8f316863200
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vala-lint/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, glib
+, meson
+, ninja
+, pantheon
+, pkg-config
+, vala
+, gettext
+, wrapGAppsHook
+, unstableGitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vala-lint";
+  version = "unstable-2022-02-16";
+
+  src = fetchFromGitHub {
+    owner = "vala-lang";
+    repo = "vala-lint";
+    rev = "2f8a970cbf41ac54d2b4124c9d7db64543031901";
+    sha256 = "sha256-jIC9nUWxs4iDpqEQGxl8JrHbBEkz60/elWHqGKQqlX8=";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    meson
+    ninja
+    pkg-config
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+  ];
+
+  doCheck = true;
+
+  passthru = {
+    updateScript = unstableGitUpdater {
+      url = "https://github.com/vala-lang/vala-lint.git";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/vala-lang/vala-lint";
+    description = "Check Vala code files for code-style errors";
+    longDescription = ''
+      Small command line tool and library for checking Vala code files for code-style errors.
+      Based on the elementary Code-Style guidelines.
+    '';
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = teams.pantheon.members;
+    mainProgram = "io.elementary.vala-lint";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vcstool/default.nix b/nixpkgs/pkgs/development/tools/vcstool/default.nix
new file mode 100644
index 000000000000..9d6fb1588a11
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vcstool/default.nix
@@ -0,0 +1,27 @@
+{ lib, python3Packages
+, git, breezy, subversion }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "vcstool";
+  version = "0.3.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "04b3a963e15386660f139e5b95d293e43e3cb414e3b13e14ee36f5223032ee2c";
+  };
+
+  propagatedBuildInputs = [ pyyaml setuptools ];
+
+  makeWrapperArgs = ["--prefix" "PATH" ":" (lib.makeBinPath [ git breezy subversion ])];
+
+  doCheck = false; # requires network
+
+  meta = with 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/vend/default.nix b/nixpkgs/pkgs/development/tools/vend/default.nix
new file mode 100644
index 000000000000..0b037a9068c1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vend/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "vend";
+
+  /*
+  This package is used to generate vendor folders for
+  packages that use the `runVend` option with `buildGoModule`.
+
+  Do not update this package without checking that the vendorSha256
+  hashes of packages using the `runVend` option are unchanged
+  or updating their vendorSha256 hashes if necessary.
+  */
+  version = "1.0.2";
+  # Disable the bot
+  # nixpkgs-update: no auto update
+
+  # Disable `mod tidy`, patch was refused upstream
+  # https://github.com/nomad-software/vend/pull/9
+  patches = [ ./remove_tidy.patch ];
+
+  src = fetchFromGitHub {
+    owner = "nomad-software";
+    repo = "vend";
+    rev = "v${version}";
+    sha256 = "0h9rwwb56nzs46xsvl92af71i8b3wz3pf9ngi8v0i2bpk7p3p89d";
+  };
+
+  vendorSha256 = null;
+
+  meta = with lib; {
+    homepage = "https://github.com/nomad-software/vend";
+    description = "A utility which vendors go code including c dependencies";
+    maintainers = with maintainers; [ c00w mic92 zowoq ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vend/remove_tidy.patch b/nixpkgs/pkgs/development/tools/vend/remove_tidy.patch
new file mode 100644
index 000000000000..d5db74a1bd70
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vend/remove_tidy.patch
@@ -0,0 +1,13 @@
+diff --git a/cli/cmd.go b/cli/cmd.go
+index c766559..3a133fd 100644
+--- a/cli/cmd.go
++++ b/cli/cmd.go
+@@ -12,7 +12,7 @@ import (
+ // UpdateModule makes sure the module is updated ready to vendor the
+ // dependencies.
+ func UpdateModule() {
+-	var commands = []string{"tidy", "download", "vendor"}
++	var commands = []string{"download", "vendor"}
+ 
+ 	for _, command := range commands {
+ 		cmd := exec.Command("go", "mod", command)
diff --git a/nixpkgs/pkgs/development/tools/vendir/default.nix b/nixpkgs/pkgs/development/tools/vendir/default.nix
new file mode 100644
index 000000000000..e80bb0f14cdf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vendir/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "vendir";
+  version = "0.24.0";
+
+  src = fetchFromGitHub {
+    owner = "vmware-tanzu";
+    repo = "carvel-vendir";
+    rev = "v${version}";
+    sha256 = "sha256-3l0ezObZK/QEmpBlqSm3R3e4pFM7KUnsxDrzvEYExnk=";
+  };
+
+  vendorSha256 = null;
+
+  subPackages = [ "cmd/vendir" ];
+
+  meta = with lib; {
+    description = "CLI tool to vendor portions of git repos, github releases, helm charts, docker image contents, etc. declaratively";
+    homepage = "https://carvel.dev/vendir/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ russell ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vgo2nix/default.nix b/nixpkgs/pkgs/development/tools/vgo2nix/default.nix
new file mode 100644
index 000000000000..365bb920e4ac
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vgo2nix/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, makeWrapper
+, nix-prefetch-git
+, go
+}:
+
+buildGoModule {
+  pname = "vgo2nix";
+  version = "unstable-2020-11-07";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "vgo2nix";
+    rev = "4546d8056ab09ece3d2489594627c0541b15a397";
+    sha256 = "0n9pf0i5y59kiiv6dq8h8w1plaz9w6s67rqr2acqgxa45iq36mkh";
+  };
+
+  vendorSha256 = "1xgl4avq0rblzqqpaxl4dwg4ysrhacwhfd21vb0v9ffr3zcpdw9n";
+  proxyVendor = true;
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  allowGoReference = true;
+
+  postInstall = ''
+    wrapProgram $out/bin/vgo2nix --prefix PATH : ${lib.makeBinPath [ nix-prefetch-git go ]}
+  '';
+
+  meta = with lib; {
+    description = "Convert go.mod files to nixpkgs buildGoPackage compatible deps.nix files";
+    homepage = "https://github.com/nix-community/vgo2nix";
+    license = licenses.mit;
+    maintainers = with maintainers; [ adisbladis SuperSandro2000 ];
+    mainProgram = "vgo2nix";
+  };
+}
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..a6d28b36bffd
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vim-vint/default.nix
@@ -0,0 +1,33 @@
+{ lib, python3Packages }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "vim-vint";
+  version = "0.3.21";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "15qdh8fby9xgfjxidcfv1xmrqqrxxapky7zmyn46qx1abhp9piax";
+  };
+
+  # For python 3.5 > version > 2.7 , a nested dependency (pythonPackages.hypothesis) fails.
+  disabled = ! pythonAtLeast "3.5";
+
+  checkInputs = [ pytest pytest-cov ];
+  propagatedBuildInputs = [ ansicolor chardet pyyaml setuptools ];
+
+  # Unpin test dependency versions. This is fixed in master but not yet released.
+  preCheck = ''
+    sed -i 's/==.*//g' test-requirements.txt
+    sed -i 's/mock == 1.0.1/mock/g' setup.py
+  '';
+
+  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..d4e665adc414
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vndr/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "vndr-unstable";
+  version = "2020-07-28";
+  rev = "f12b881cb8f081a5058408a58f429b9014833fc6";
+
+  goPackagePath = "github.com/LK4D4/vndr";
+  excludedPackages = "test";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "LK4D4";
+    repo = "vndr";
+    sha256 = "04za4x8p8qzwjlp4i0j0gsb4xx0x9f4yp3ab0b97r50pah1ac2g3";
+  };
+
+  meta = {
+    description = "Stupid golang vendoring tool, inspired by docker vendor script";
+    homepage = "https://github.com/LK4D4/vndr";
+    maintainers = with lib.maintainers; [ vdemeester rvolosatovs ];
+    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..2e9e8936ddb1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vogl/default.nix
@@ -0,0 +1,57 @@
+{ mkDerivation, lib, fetchFromGitHub
+, cmake, git, pkg-config, wget, zip
+, qtbase, qtx11extras
+, libdwarf, libjpeg_turbo, libunwind, xz, tinyxml, libX11
+, SDL2, SDL2_gfx, SDL2_image, SDL2_ttf
+, freeglut, libGLU
+, fetchpatch
+}:
+
+mkDerivation {
+  pname = "vogl";
+  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 pkg-config ];
+
+  buildInputs = [
+    git wget zip
+    qtbase qtx11extras
+    libdwarf libjpeg_turbo libunwind xz 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" ];
+    broken = true;
+  };
+}
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..dfc5ea9de654
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vulkan-validation-layers/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, glslang
+, libX11
+, libxcb
+, libXrandr
+, spirv-headers
+, spirv-tools
+, vulkan-headers
+, wayland
+}:
+
+let
+  robin-hood-hashing = fetchFromGitHub {
+    owner = "martinus";
+    repo = "robin-hood-hashing";
+    rev = "3.11.3"; # pin
+    sha256 = "1gm3lwjkh6h8m7lfykzd0jzhfqjmjchindkmxc008rwvxafsd1pl";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "vulkan-validation-layers";
+  version = "1.2.198.0";
+
+  # If we were to use "dev" here instead of headers, the setupHook would be
+  # placed in that output instead of "out".
+  outputs = ["out" "headers"];
+  outputInclude = "headers";
+
+  src = (assert (lib.all (pkg: pkg.version == version) [vulkan-headers glslang spirv-tools spirv-headers]);
+    fetchFromGitHub {
+      owner = "KhronosGroup";
+      repo = "Vulkan-ValidationLayers";
+      rev = "sdk-${version}";
+      sha256 = "sha256-/pnXT55EQZcnjOzY2vBwp+gM6l2hktZHwB9yKP8vVTU=";
+    });
+
+  # Include absolute paths to layer libraries in their associated
+  # layer definition json files.
+  postPatch = ''
+    sed "s|\([[:space:]]*set(INSTALL_DEFINES \''${INSTALL_DEFINES} -DRELATIVE_LAYER_BINARY=\"\)\(\$<TARGET_FILE_NAME:\''${TARGET_NAME}>\")\)|\1$out/lib/\2|" -i layers/CMakeLists.txt
+  '';
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    libX11
+    libxcb
+    libXrandr
+    vulkan-headers
+    wayland
+  ];
+
+  cmakeFlags = [
+    "-DGLSLANG_INSTALL_DIR=${glslang}"
+    "-DSPIRV_HEADERS_INSTALL_DIR=${spirv-headers}"
+    "-DROBIN_HOOD_HASHING_INSTALL_DIR=${robin-hood-hashing}"
+    "-DBUILD_LAYER_SUPPORT_FILES=ON"
+    # Hide dev warnings that are useless for packaging
+    "-Wno-dev"
+  ];
+
+  # Tests require access to vulkan-compatible GPU, which isn't
+  # available in Nix sandbox. Fails with VK_ERROR_INCOMPATIBLE_DRIVER.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "The official Khronos Vulkan validation layers";
+    homepage    = "https://github.com/KhronosGroup/Vulkan-ValidationLayers";
+    platforms   = platforms.linux;
+    license     = licenses.asl20;
+    maintainers = [ maintainers.ralith ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vultr-cli/default.nix b/nixpkgs/pkgs/development/tools/vultr-cli/default.nix
new file mode 100644
index 000000000000..6e839617034d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vultr-cli/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "vultr-cli";
+  version = "2.12.1";
+
+  src = fetchFromGitHub {
+    owner = "vultr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-jcZiCZn6AbrjEhMkJQloLhZmfnxqlZxu5TXqH+dDN0s=";
+  };
+
+  vendorSha256 = null;
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Official command line tool for Vultr services";
+    homepage = "https://github.com/vultr/vultr-cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/vultr/default.nix b/nixpkgs/pkgs/development/tools/vultr/default.nix
new file mode 100644
index 000000000000..2f1d6618d3fe
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/vultr/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "vultr";
+  version = "2.0.3";
+  goPackagePath = "github.com/JamesClonk/vultr";
+
+  src = fetchFromGitHub {
+    owner = "JamesClonk";
+    repo = "vultr";
+    rev = "v${version}";
+    sha256 = "sha256-kyB6gUbc32NsSDqDy1zVT4HXn0pWxHdBOEBOSaI0Xro=";
+  };
+
+  meta = {
+    description = "A command line tool for Vultr services, a provider for cloud virtual private servers";
+    homepage = "https://github.com/JamesClonk/vultr";
+    license = lib.licenses.mit;
+    maintainers = [ 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..d049d9946363
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wabt/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "wabt";
+  version = "1.0.27";
+
+  src = fetchFromGitHub {
+    owner = "WebAssembly";
+    repo = "wabt";
+    rev = version;
+    sha256 = "sha256-13et9+yoxoITOO9EEyLMNhG4VCj0jd+JhOlw0DxvwOg=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake ];
+  cmakeFlags = [ "-DBUILD_TESTS=OFF" "-DCMAKE_PROJECT_VERSION=${version}" ];
+
+  meta = with 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/wails/default.nix b/nixpkgs/pkgs/development/tools/wails/default.nix
new file mode 100644
index 000000000000..2d0576592ec6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wails/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, pkg-config
+, makeWrapper
+, go
+, gcc
+, gtk3
+, webkitgtk
+, nodejs
+, upx
+, zlib
+}:
+
+buildGoModule rec {
+  pname = "wails";
+  version = "2.0.0-beta.33";
+
+  src = fetchFromGitHub {
+    owner = "wailsapp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-efxOL/FllToum0P4JyAJt0fbrznTFYh7czTWpZu3uk0=";
+  } + "/v2";
+
+  vendorSha256 = "sha256-qPMVsvud2L7hpXUOfYYMiO32JXff8ZZC34EsxFoSJ0g=";
+
+  proxyVendor = true;
+
+  subPackages = [ "cmd/wails" ];
+
+  # These packages are needed to build wails
+  # and will also need to be used when building a wails app.
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+  ];
+
+  # Wails apps are built with Go, so we need to be able to
+  # add it in propagatedBuildInputs.
+  allowGoReference = true;
+
+  # Following packages are required when wails used as a builder.
+  propagatedBuildInputs = [
+    pkg-config
+    go
+    gcc
+    gtk3
+    webkitgtk
+    nodejs
+    upx
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  # As Wails calls a compiler, certain apps and libraries need to be made available.
+  postFixup = ''
+    wrapProgram $out/bin/wails \
+      --prefix PATH : ${lib.makeBinPath [ pkg-config go gcc nodejs upx ]} \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ gtk3 webkitgtk ]} \
+      --set PKG_CONFIG_PATH "$PKG_CONFIG_PATH" \
+      --set CGO_LDFLAGS "-L${lib.makeLibraryPath [ zlib ]}"
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Build applications using Go + HTML + CSS + JS";
+    homepage = "https://wails.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ianmjones ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wally-cli/default.nix b/nixpkgs/pkgs/development/tools/wally-cli/default.nix
new file mode 100644
index 000000000000..c0ed34770604
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wally-cli/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub, pkg-config, libusb1 }:
+
+buildGoModule rec {
+  pname = "wally-cli";
+  version = "2.0.1";
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libusb1 ];
+
+  src = fetchFromGitHub {
+    owner = "zsa";
+    repo = "wally-cli";
+    rev = "${version}-linux";
+    sha256 = "NuyQHEygy4LNqLtrpdwfCR+fNy3ZUxOClVdRen6AXMc=";
+  };
+
+  vendorSha256 = "sha256-HffgkuKmaOjTYi+jQ6vBlC50JqqbYiikURT6TCqL7e0=";
+
+  meta = with lib; {
+    description = "A tool to flash firmware to mechanical keyboards";
+    homepage = "https://ergodox-ez.com/pages/wally-planck";
+    platforms = with platforms; linux ++ darwin;
+    license = licenses.mit;
+    maintainers = with maintainers; [ spacekookie r-burns ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wasm-bindgen-cli/default.nix b/nixpkgs/pkgs/development/tools/wasm-bindgen-cli/default.nix
new file mode 100644
index 000000000000..3a36a00c73ec
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wasm-bindgen-cli/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, nodejs
+, pkg-config
+, openssl
+, stdenv
+, curl
+, Security
+, runCommand
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wasm-bindgen-cli";
+  version = "0.2.79";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-3kWhhzYmIo/GFieI0i7XVJIZxIaaJHHuDp38k5xcFmI=";
+  };
+
+  cargoSha256 = "sha256-xKYdvcrx3a9AKiRU8yJ3JNQp1Q2pEufwo+in82yTV6c=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ curl Security ];
+
+  checkInputs = [ nodejs ];
+
+  # other tests require it to be ran in the wasm-bindgen monorepo
+  cargoTestFlags = [ "--test=interface-types" ];
+
+  meta = with lib; {
+    homepage = "https://rustwasm.github.io/docs/wasm-bindgen/";
+    license = with licenses; [ asl20 /* or */ mit ];
+    description = "Facilitating high-level interactions between wasm modules and JavaScript";
+    maintainers = with maintainers; [ ma27 nitsky rizary ];
+    mainProgram = "wasm-bindgen";
+  };
+}
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..575d18f9e7dc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wasm-pack/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, libressl
+, curl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wasm-pack";
+  version = "0.10.2";
+
+  src = fetchFromGitHub {
+    owner = "rustwasm";
+    repo = "wasm-pack";
+    rev = "v${version}";
+    sha256 = "sha256-nhO/SLeJTq2viDqsJCRNLbgjyDKRli3RWExUNzKT9ug=";
+  };
+
+  cargoSha256 = "sha256-6qrCHpg92IRPsf/dK6xcLGX8BLmqox3vgLRqsV4ubsY=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    # LibreSSL works around segfault issues caused by OpenSSL being unable to
+    # gracefully exit while doing work.
+    # See: https://github.com/rustwasm/wasm-pack/issues/650
+    libressl
+  ] ++ lib.optionals stdenv.isDarwin [ curl Security ];
+
+  # Needed to get openssl-sys to use pkg-config.
+  OPENSSL_NO_VENDOR = 1;
+
+  # Most tests rely on external resources and build artifacts.
+  # Disabling check here to work with build sandboxing.
+  doCheck = false;
+
+  meta = with 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 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/watchman/default.nix b/nixpkgs/pkgs/development/tools/watchman/default.nix
new file mode 100644
index 000000000000..2acbf13e2789
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/watchman/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, lib, config, fetchFromGitHub, autoconf, automake, pcre
+, libtool, pkg-config, openssl
+, confFile ? config.watchman.confFile or null
+, withApple ? stdenv.isDarwin, CoreServices
+}:
+
+stdenv.mkDerivation rec {
+  pname = "watchman";
+  version = "4.9.0";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = "watchman";
+    rev = "v${version}";
+    sha256 = "0fdaj5pmicm6j17d5q7px800m5rmam1a400x3hv1iiifnmhgnkal";
+  };
+
+  nativeBuildInputs = [ autoconf automake pkg-config libtool ];
+  buildInputs = [ pcre openssl ]
+    ++ lib.optionals withApple [ CoreServices ];
+
+  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..2da789fdc603
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wiggle/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, groff }:
+
+stdenv.mkDerivation rec {
+  pname = "wiggle";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "neilbrown";
+    repo = "wiggle";
+    rev = "v${version}";
+    sha256 = "18ilzr9sbal1j8p1d94ilm1j5blac5cngvcvjpdmgmpw6diy2ldf";
+  };
+
+  buildInputs = [ ncurses groff ];
+
+  configurePhase = ''
+    makeFlagsArray=( CFLAGS="-I. -O3"
+                     STRIP="-s"
+                     INSTALL="install"
+                     BINDIR="$out/bin"
+                     MANDIR="$out/share/man"
+                   )
+    patchShebangs .
+  '';
+
+  meta = with lib; {
+    homepage = "https://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 = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wiiload/default.nix b/nixpkgs/pkgs/development/tools/wiiload/default.nix
new file mode 100644
index 000000000000..2f2fe174d14e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wiiload/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, zlib }:
+stdenv.mkDerivation rec {
+  version = "0.5.1";
+  pname = "wiiload";
+
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ zlib ];
+
+  src = fetchFromGitHub {
+    owner = "devkitPro";
+    repo  = "wiiload";
+    rev = "v${version}";
+    sha256 = "0dffy603zggkqv7g1a2jninmi64vy519gpgkdfhjnijhdm9gs5m3";
+  };
+
+  preConfigure = "./autogen.sh";
+
+  meta = with 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..8f8d03db950b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/winpdb/default.nix
@@ -0,0 +1,55 @@
+{ lib, fetchurl, python2Packages, makeDesktopItem }:
+
+python2Packages.buildPythonApplication rec {
+  pname = "winpdb";
+  version = "1.4.8";
+  namePrefix = "";
+
+  src = fetchurl {
+    url = "https://winpdb.googlecode.com/files/${pname}-${version}.tar.gz";
+    sha256 = "0vkpd24r40j928vc04c721innv0168sbllg97v4zw10adm24d8fs";
+  };
+
+  propagatedBuildInputs = [ python2Packages.wxPython ];
+
+  desktopItem = makeDesktopItem {
+    name = "winpdb";
+    exec = "winpdb";
+    icon = "winpdb";
+    comment = "Platform independend Python debugger";
+    desktopName = "Winpdb";
+    genericName = "Python Debugger";
+    categories = [ "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
+  '';
+
+  # no tests
+  doCheck = false;
+
+  meta = with 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/wire/default.nix b/nixpkgs/pkgs/development/tools/wire/default.nix
new file mode 100644
index 000000000000..a51252f56696
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wire/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "wire";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "wire";
+    rev = "v${version}";
+    sha256 = "sha256-9xjymiyPFMKbysgZULmcBEMI26naUrLMgTA+d7Q+DA0=";
+  };
+
+  vendorSha256 = "sha256-ZFUX4LgPte6oAf94D82Man/P9VMpx+CDNCTMBwiy9Fc=";
+
+  subPackages = [ "cmd/wire" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/google/wire";
+    description = "A code generation tool that automates connecting components using dependency injection";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ svrana ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wllvm/default.nix b/nixpkgs/pkgs/development/tools/wllvm/default.nix
new file mode 100644
index 000000000000..0234c936dc15
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wllvm/default.nix
@@ -0,0 +1,19 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  version = "1.3.1";
+  pname = "wllvm";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-PgV6V18FyezIZpqMQEbyv98MaVM7h7T7/Kvg3yMMwzE=";
+  };
+
+  meta = with 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/worker-build/default.nix b/nixpkgs/pkgs/development/tools/worker-build/default.nix
new file mode 100644
index 000000000000..4f6c595ee9bc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/worker-build/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "worker-build";
+  version = "0.0.9";
+
+  src = fetchFromGitHub {
+    owner = "cloudflare";
+    repo = "workers-rs";
+    rev = "v${version}";
+    sha256 = "sha256-nrvnIuLBtdMMBcYm8McOxHc/HHYDrogEG9Ii2Bevl+w=";
+  };
+
+  cargoSha256 = "sha256-xLssAmyfHr4EBQ72XZFqybA6ZI1UM2Q2kS5UWmIkteM=";
+
+  buildAndTestSubdir = "worker-build";
+
+  # missing some module upstream to run the tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "This is a tool to be used as a custom build command for a Cloudflare Workers `workers-rs` project.";
+    homepage = "https://github.com/cloudflare/worker-rs";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ happysalada ];
+  };
+}
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..9ee452b26f9c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wp-cli/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, lib
+, fetchurl
+, formats
+, installShellFiles
+, makeWrapper
+, php
+}:
+
+let
+  version = "2.6.0";
+
+  completion = fetchurl {
+    url = "https://raw.githubusercontent.com/wp-cli/wp-cli/v${version}/utils/wp-completion.bash";
+    hash = "sha256-RDygYQzK6NLWrOug7EqnkpuH7Wz1T2Zq/tGNZjoYo5U=";
+  };
+
+  ini = (formats.ini { }).generate "php.ini" {
+    PHP.memory_limit = -1; # no limit as composer uses a lot of memory
+    Phar."phar.readonly" = "Off";
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "wp-cli";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://github.com/wp-cli/wp-cli/releases/download/v${version}/${pname}-${version}.phar";
+    hash = "sha256-0WZSjKtgvIIpwGcp5wc4OPu6aNaytXRQTLAniDXIeIg=";
+  };
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  buildCommand = ''
+    dir=$out/share/wp-cli
+    install -Dm444 ${src}        $dir/wp-cli
+    install -Dm444 ${ini}        $dir/php.ini
+    installShellCompletion --bash --name wp ${completion}
+
+    mkdir -p $out/bin
+    makeWrapper ${lib.getBin php}/bin/php $out/bin/wp \
+      --add-flags "-c $dir/php.ini" \
+      --add-flags "-f $dir/wp-cli"
+
+    # this is a very basic run test
+    $out/bin/wp --info >/dev/null
+  '';
+
+  meta = with 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/wrangler/default.nix b/nixpkgs/pkgs/development/tools/wrangler/default.nix
new file mode 100644
index 000000000000..fba7d96c1da2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wrangler/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, openssl, curl, Security, CoreServices, CoreFoundation, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wrangler";
+  version = "1.19.8";
+
+  src = fetchFromGitHub {
+    owner = "cloudflare";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vJjAN7RmB1J4k7p2emfbjJxkpfph6piinmqVTR67HW0=";
+  };
+
+  cargoSha256 = "sha256-dDQvcYnceBPDc+yeePjZ1k4a2ujCSh1hJMYFjPGw/bE=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ curl CoreFoundation CoreServices Security libiconv ];
+
+  OPENSSL_NO_VENDOR = 1;
+
+  # tries to use "/homeless-shelter" and fails
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A CLI tool designed for folks who are interested in using Cloudflare Workers";
+    homepage = "https://github.com/cloudflare/wrangler";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ws/default.nix b/nixpkgs/pkgs/development/tools/ws/default.nix
new file mode 100644
index 000000000000..bef8eb906cf1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ws/default.nix
@@ -0,0 +1,23 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+{ lib, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "ws";
+  version = "0.2.1";
+  rev = "e9404cb37e339333088b36f6a7909ff3be76931d";
+
+  goPackagePath = "github.com/hashrocket/ws";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/hashrocket/ws";
+    sha256 = "192slrz1cj1chzmfrl0d9ai8bq6s4w0iwpvxkhxb9krga7mkp9xb";
+  };
+
+  meta = with lib; {
+    description = "websocket command line tool";
+    homepage    = "https://github.com/hashrocket/ws";
+    license     = licenses.mit;
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/wxformbuilder/default.nix b/nixpkgs/pkgs/development/tools/wxformbuilder/default.nix
new file mode 100644
index 000000000000..5c78d730d203
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/wxformbuilder/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv
+, fetchFromGitHub
+, wxGTK31
+, meson
+, ninja
+}:
+
+stdenv.mkDerivation {
+  pname = "wxFormBuilder";
+  version = "unstable-2020-08-18";
+
+  src = fetchFromGitHub {
+    owner = "wxFormBuilder";
+    repo = "wxFormBuilder";
+    rev = "d053665cc33a79dd935b518b5e7aea6baf493c92";
+    sha256 = "sha256-hTO7Fyp5ZWpq2CfIYEXB85oOkNrqr6Njfh8h0t9B6wU=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    ninja
+    meson
+  ];
+
+  buildInputs = [
+    wxGTK31
+  ];
+
+  meta = with lib; {
+    description = "RAD tool for wxWidgets GUI design";
+    homepage = "https://github.com/wxFormBuilder/wxFormBuilder";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ matthuszagh ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/default.nix b/nixpkgs/pkgs/development/tools/xcbuild/default.nix
new file mode 100644
index 000000000000..3c90603477e4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/default.nix
@@ -0,0 +1,74 @@
+{ lib, 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 {
+  pname = "xcbuild";
+
+  # 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";
+  };
+
+  patches = [ ./includes.patch ];
+
+  prePatch = ''
+    rmdir ThirdParty/*
+    cp -r --no-preserve=all ${googletest} ThirdParty/googletest
+    cp -r --no-preserve=all ${linenoise} ThirdParty/linenoise
+  '';
+
+  postPatch = lib.optionalString (!stdenv.isDarwin) ''
+    # Avoid a glibc >= 2.25 deprecation warning that gets fatal via -Werror.
+    sed 1i'#include <sys/sysmacros.h>' \
+      -i Libraries/xcassets/Headers/xcassets/Slot/SystemVersion.h
+  '' + lib.optionalString stdenv.isDarwin ''
+    # Apple Open Sourced LZFSE, but not libcompression, and it isn't
+    # part of an impure framework we can add
+    substituteInPlace Libraries/libcar/Sources/Rendition.cpp \
+      --replace "#if HAVE_LIBCOMPRESSION" "#if 0"
+  '';
+
+  # TODO: instruct cmake not to put it in /usr, rather than cleaning up
+  postInstall = ''
+    mv $out/usr/* $out
+    rmdir $out/usr
+    cp liblinenoise.* $out/lib/
+  '';
+
+  NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  cmakeFlags = [ "-GNinja" ];
+
+  nativeBuildInputs = [ cmake ninja ];
+  buildInputs = [ zlib libxml2 libpng ]
+    ++ lib.optionals stdenv.isDarwin [ CoreServices CoreGraphics ImageIO ];
+
+  meta = with 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/includes.patch b/nixpkgs/pkgs/development/tools/xcbuild/includes.patch
new file mode 100644
index 000000000000..7a05a33eb678
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/includes.patch
@@ -0,0 +1,10 @@
+--- a/Libraries/plist/Sources/Format/Encoding.cpp
++++ b/Libraries/plist/Sources/Format/Encoding.cpp
+@@ -11,6 +11,7 @@
+ #include <plist/Format/unicode.h>
+ 
+ #include <cassert>
++#include <cstdlib> /* abort() */
+ 
+ #if defined(__linux__)
+ #include <endian.h>
diff --git a/nixpkgs/pkgs/development/tools/xcbuild/platforms.nix b/nixpkgs/pkgs/development/tools/xcbuild/platforms.nix
new file mode 100644
index 000000000000..0108ac8ef697
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/platforms.nix
@@ -0,0 +1,301 @@
+{ stdenv, 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/PrivatePlugIns/IDEOSXSupportCore.ideplugin/Contents/Resources.
+
+  # Based off of the "MacOSX Architectures.xcspec" file. All i386 stuff
+  # is removed because NixPkgs only supports darwin-x86_64 and darwin-arm64.
+  Architectures = [
+    {
+      Identifier = "Standard";
+      Type = "Architecture";
+      Name = "Standard Architectures (Apple Silicon, 64-bit Intel)";
+      RealArchitectures = [ "arm64" "x86_64" ];
+      ArchitectureSetting = "ARCHS_STANDARD";
+    }
+    {
+      Identifier = "Universal";
+      Type = "Architecture";
+      Name = "Universal (Apple Silicon, 64-bit Intel)";
+      RealArchitectures = [ "arm64" "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 = "Apple Silicon, 64-bit Intel";
+      RealArchitectures = [ "arm64" "x86_64" ];
+      ArchitectureSetting = "ARCHS_STANDARD_64_BIT";
+    }
+    {
+      Identifier = if stdenv.isAarch64 then "arm64" else "x86_64";
+      Type = "Architecture";
+      Name = "Apple Silicon or Intel 64-bit";
+    }
+    {
+      Identifier = "Standard_Including_64_bit";
+      Type = "Architecture";
+      Name = "Standard Architectures (including 64-bit)";
+      RealArchitectures = [ "arm64" "x86_64" ];
+      ArchitectureSetting = "ARCHS_STANDARD_INCLUDING_64_BIT";
+    }
+  ];
+
+  # Based off of the "MacOSX Package Types.xcspec" 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.xcspec" 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..5ff3ca6808dc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/sdks.nix
@@ -0,0 +1,29 @@
+{ runCommand, lib, toolchainName, sdkName
+, writeText, version, xcodePlatform }:
+
+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..f4b5abf2d8d3
--- /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..e0abf90847fc
--- /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.bison}/bin/yacc $toolchain/bin/yacc
+  ln -s ${buildPackages.bison}/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..ca69bbe907df
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcbuild/wrapper.nix
@@ -0,0 +1,142 @@
+{ stdenv, 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.darwinSdkVersion 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 stdenv;
+  };
+
+  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
+
+  # The native xcodebuild command supports an invocation like "xcodebuild -version -sdk" without specifying the specific SDK, so we simulate this by
+  # detecting this case and simulating the output; printing the header and appending the normal output via appending the sdk version to the positional
+  # arguments we pass through to the wrapped xcodebuild.
+  makeWrapper ${xcbuild}/bin/xcodebuild $out/bin/xcodebuild \
+    --add-flags "-xcconfig ${xcconfig}" \
+    --add-flags "DERIVED_DATA_DIR=." \
+    --set DEVELOPER_DIR "$out" \
+    --set SDKROOT ${sdkName} \
+    --run '[ "$#" -eq 2 ] && [ "$1" = "-version" ] && [ "$2" = "-sdk" ] && echo ${sdkName}.sdk - macOS ${sdkVer} \(macosx${sdkVer}\) && set -- "$@" "${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/xcode-install/Gemfile b/nixpkgs/pkgs/development/tools/xcode-install/Gemfile
new file mode 100644
index 000000000000..b9d313ce14fc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcode-install/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'xcode-install'
diff --git a/nixpkgs/pkgs/development/tools/xcode-install/Gemfile.lock b/nixpkgs/pkgs/development/tools/xcode-install/Gemfile.lock
new file mode 100644
index 000000000000..589543fe47d6
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcode-install/Gemfile.lock
@@ -0,0 +1,204 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    CFPropertyList (3.0.3)
+    addressable (2.7.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    artifactory (3.0.15)
+    atomos (0.1.3)
+    aws-eventstream (1.1.0)
+    aws-partitions (1.419.0)
+    aws-sdk-core (3.111.2)
+      aws-eventstream (~> 1, >= 1.0.2)
+      aws-partitions (~> 1, >= 1.239.0)
+      aws-sigv4 (~> 1.1)
+      jmespath (~> 1.0)
+    aws-sdk-kms (1.41.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.87.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.1)
+    aws-sigv4 (1.2.2)
+      aws-eventstream (~> 1, >= 1.0.2)
+    babosa (1.0.4)
+    claide (1.0.3)
+    colored (1.2)
+    colored2 (3.1.2)
+    commander-fastlane (4.4.6)
+      highline (~> 1.7.2)
+    declarative (0.0.20)
+    declarative-option (0.1.0)
+    digest-crc (0.6.3)
+      rake (>= 12.0.0, < 14.0.0)
+    domain_name (0.5.20190701)
+      unf (>= 0.0.5, < 1.0.0)
+    dotenv (2.7.6)
+    emoji_regex (3.2.1)
+    excon (0.78.1)
+    faraday (1.3.0)
+      faraday-net_http (~> 1.0)
+      multipart-post (>= 1.2, < 3)
+      ruby2_keywords
+    faraday-cookie_jar (0.0.7)
+      faraday (>= 0.8.0)
+      http-cookie (~> 1.0.0)
+    faraday-net_http (1.0.1)
+    faraday_middleware (1.0.0)
+      faraday (~> 1.0)
+    fastimage (2.2.1)
+    fastlane (2.172.0)
+      CFPropertyList (>= 2.3, < 4.0.0)
+      addressable (>= 2.3, < 3.0.0)
+      artifactory (~> 3.0)
+      aws-sdk-s3 (~> 1.0)
+      babosa (>= 1.0.3, < 2.0.0)
+      bundler (>= 1.12.0, < 3.0.0)
+      colored
+      commander-fastlane (>= 4.4.6, < 5.0.0)
+      dotenv (>= 2.1.1, < 3.0.0)
+      emoji_regex (>= 0.1, < 4.0)
+      excon (>= 0.71.0, < 1.0.0)
+      faraday (~> 1.0)
+      faraday-cookie_jar (~> 0.0.6)
+      faraday_middleware (~> 1.0)
+      fastimage (>= 2.1.0, < 3.0.0)
+      gh_inspector (>= 1.1.2, < 2.0.0)
+      google-api-client (>= 0.37.0, < 0.39.0)
+      google-cloud-storage (>= 1.15.0, < 2.0.0)
+      highline (>= 1.7.2, < 2.0.0)
+      json (< 3.0.0)
+      jwt (>= 2.1.0, < 3)
+      mini_magick (>= 4.9.4, < 5.0.0)
+      multipart-post (~> 2.0.0)
+      plist (>= 3.1.0, < 4.0.0)
+      rubyzip (>= 2.0.0, < 3.0.0)
+      security (= 0.1.3)
+      simctl (~> 1.6.3)
+      slack-notifier (>= 2.0.0, < 3.0.0)
+      terminal-notifier (>= 2.0.0, < 3.0.0)
+      terminal-table (>= 1.4.5, < 2.0.0)
+      tty-screen (>= 0.6.3, < 1.0.0)
+      tty-spinner (>= 0.8.0, < 1.0.0)
+      word_wrap (~> 1.0.0)
+      xcodeproj (>= 1.13.0, < 2.0.0)
+      xcpretty (~> 0.3.0)
+      xcpretty-travis-formatter (>= 0.0.3)
+    gh_inspector (1.1.3)
+    google-api-client (0.38.0)
+      addressable (~> 2.5, >= 2.5.1)
+      googleauth (~> 0.9)
+      httpclient (>= 2.8.1, < 3.0)
+      mini_mime (~> 1.0)
+      representable (~> 3.0)
+      retriable (>= 2.0, < 4.0)
+      signet (~> 0.12)
+    google-apis-core (0.2.1)
+      addressable (~> 2.5, >= 2.5.1)
+      googleauth (~> 0.14)
+      httpclient (>= 2.8.1, < 3.0)
+      mini_mime (~> 1.0)
+      representable (~> 3.0)
+      retriable (>= 2.0, < 4.0)
+      rexml
+      signet (~> 0.14)
+      webrick
+    google-apis-iamcredentials_v1 (0.1.0)
+      google-apis-core (~> 0.1)
+    google-apis-storage_v1 (0.1.0)
+      google-apis-core (~> 0.1)
+    google-cloud-core (1.5.0)
+      google-cloud-env (~> 1.0)
+      google-cloud-errors (~> 1.0)
+    google-cloud-env (1.4.0)
+      faraday (>= 0.17.3, < 2.0)
+    google-cloud-errors (1.0.1)
+    google-cloud-storage (1.30.0)
+      addressable (~> 2.5)
+      digest-crc (~> 0.4)
+      google-apis-iamcredentials_v1 (~> 0.1)
+      google-apis-storage_v1 (~> 0.1)
+      google-cloud-core (~> 1.2)
+      googleauth (~> 0.9)
+      mini_mime (~> 1.0)
+    googleauth (0.15.0)
+      faraday (>= 0.17.3, < 2.0)
+      jwt (>= 1.4, < 3.0)
+      memoist (~> 0.16)
+      multi_json (~> 1.11)
+      os (>= 0.9, < 2.0)
+      signet (~> 0.14)
+    highline (1.7.10)
+    http-cookie (1.0.3)
+      domain_name (~> 0.5)
+    httpclient (2.8.3)
+    jmespath (1.4.0)
+    json (2.5.1)
+    jwt (2.2.2)
+    memoist (0.16.2)
+    mini_magick (4.11.0)
+    mini_mime (1.0.2)
+    multi_json (1.15.0)
+    multipart-post (2.0.0)
+    nanaimo (0.3.0)
+    naturally (2.2.1)
+    os (1.1.1)
+    plist (3.6.0)
+    public_suffix (4.0.6)
+    rake (13.0.3)
+    representable (3.0.4)
+      declarative (< 0.1.0)
+      declarative-option (< 0.2.0)
+      uber (< 0.2.0)
+    retriable (3.1.2)
+    rexml (3.2.4)
+    rouge (2.0.7)
+    ruby2_keywords (0.0.4)
+    rubyzip (2.3.0)
+    security (0.1.3)
+    signet (0.14.0)
+      addressable (~> 2.3)
+      faraday (>= 0.17.3, < 2.0)
+      jwt (>= 1.5, < 3.0)
+      multi_json (~> 1.10)
+    simctl (1.6.8)
+      CFPropertyList
+      naturally
+    slack-notifier (2.3.2)
+    terminal-notifier (2.0.0)
+    terminal-table (1.8.0)
+      unicode-display_width (~> 1.1, >= 1.1.1)
+    tty-cursor (0.7.1)
+    tty-screen (0.8.1)
+    tty-spinner (0.9.3)
+      tty-cursor (~> 0.7)
+    uber (0.1.0)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.7.7)
+    unicode-display_width (1.7.0)
+    webrick (1.7.0)
+    word_wrap (1.0.0)
+    xcode-install (2.6.8)
+      claide (>= 0.9.1, < 1.1.0)
+      fastlane (>= 2.1.0, < 3.0.0)
+    xcodeproj (1.19.0)
+      CFPropertyList (>= 2.3.3, < 4.0)
+      atomos (~> 0.1.3)
+      claide (>= 1.0.2, < 2.0)
+      colored2 (~> 3.1)
+      nanaimo (~> 0.3.0)
+    xcpretty (0.3.0)
+      rouge (~> 2.0.7)
+    xcpretty-travis-formatter (1.0.1)
+      xcpretty (~> 0.2, >= 0.0.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  xcode-install
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/development/tools/xcode-install/default.nix b/nixpkgs/pkgs/development/tools/xcode-install/default.nix
new file mode 100644
index 000000000000..677217b5c810
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcode-install/default.nix
@@ -0,0 +1,17 @@
+{ lib
+, bundlerApp
+}:
+
+bundlerApp {
+  pname = "xcode-install";
+  gemdir = ./.;
+  exes = [ "xcversion" ];
+
+  meta = with lib; {
+    description = "Install and update your Xcodes automatically";
+    homepage = "https://github.com/xcpretty/xcode-install";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ q3k ];
+    license = with licenses; [ mit ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/xcode-install/gemset.nix b/nixpkgs/pkgs/development/tools/xcode-install/gemset.nix
new file mode 100644
index 000000000000..c6355de34a2f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcode-install/gemset.nix
@@ -0,0 +1,833 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  artifactory = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wify8rhjwr5bw5y6ary61vba290vk766cxw9a9mg05yswmaisls";
+      type = "gem";
+    };
+    version = "3.0.15";
+  };
+  atomos = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17vq6sjyswr5jfzwdccw748kgph6bdw30bakwnn6p8sl4hpv4hvx";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r0pn66yqrdkrfdin7qdim0yj2x75miyg4wp6mijckhzhrjb7cv5";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz0djj8w3ns0sz5gvkla5jml8xzx6skbcfj255m81fyww1x6ws8";
+      type = "gem";
+    };
+    version = "1.419.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bfj1cnpp0ljr9jc44kljdwl5399cbqlvlqkz6fxq5i4r6ckggi4";
+      type = "gem";
+    };
+    version = "3.111.2";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02f70a4rr5h2na7navjhaf3n15ifq95zdl1avsryyxdvqzm5gzwm";
+      type = "gem";
+    };
+    version = "1.41.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0capqhvm08ngq74n33ym0khixkdj342jpikssw57avdmd8g6kaq7";
+      type = "gem";
+    };
+    version = "1.87.0";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ll9382c1x2hp750cilh01h1cycgyhdr4cmmgx23k94hyyb8chv5";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  babosa = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16dwqn33kmxkqkv51cwiikdkbrdjfsymlnc0rgbjwilmym8a9phq";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  CFPropertyList = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ia09r8bj3bjhcfiyr3vlk9zx7vahfypbs2lyrxix9x1jx3lfzq4";
+      type = "gem";
+    };
+    version = "3.0.3";
+  };
+  claide = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kasxsms24fgcdsq680nz99d5lazl9rmz1qkil2y5gbbssx89g0z";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  colored = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b0x5jmsyi0z69bm6sij1k89z7h0laag3cb4mdn7zkl9qmxb90lx";
+      type = "gem";
+    };
+    version = "1.2";
+  };
+  colored2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jlbqa9q4mvrm73aw9mxh23ygzbjiqwisl32d8szfb5fxvbjng5i";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  commander-fastlane = {
+    dependencies = ["highline"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y8d3ac9qwm1cg6rnpf8rcdsy1yxacrd2g2kl809xsp2vi973g65";
+      type = "gem";
+    };
+    version = "4.4.6";
+  };
+  declarative = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yczgnqrbls7shrg63y88g7wand2yp9h6sf56c9bdcksn5nds8c0";
+      type = "gem";
+    };
+    version = "0.0.20";
+  };
+  declarative-option = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g4ibxq566f1frnhdymzi9hxxcm4g2gw4n21mpjk2mhwym4q6l0p";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  digest-crc = {
+    dependencies = ["rake"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "118d5p02kdw6a5pi8af12dxma7q3b77zz5q5xjjf5kgp8qh1930a";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
+      type = "gem";
+    };
+    version = "0.5.20190701";
+  };
+  dotenv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0iym172c5337sm1x2ykc2i3f961vj3wdclbyg1x6sxs3irgfsl94";
+      type = "gem";
+    };
+    version = "2.7.6";
+  };
+  emoji_regex = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qbzlracxw4xwyvrgr0qcl1alk4ijk6pv53ni6f43csi649y3n3s";
+      type = "gem";
+    };
+    version = "3.2.1";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16ij8617v3js03yj1zd32mmrf7kpi9l96bid5mpqk30c4mzai55r";
+      type = "gem";
+    };
+    version = "0.78.1";
+  };
+  faraday = {
+    dependencies = ["faraday-net_http" "multipart-post" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hmssd8pj4n7yq4kz834ylkla8ryyvhaap6q9nzymp93m1xq21kz";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  faraday-cookie_jar = {
+    dependencies = ["faraday" "http-cookie"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00hligx26w9wdnpgsrf0qdnqld4rdccy8ym6027h5m735mpvxjzk";
+      type = "gem";
+    };
+    version = "0.0.7";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jik2kgfinwnfi6fpp512vlvs0mlggign3gkbpkg5fw1jr9his0r";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  fastimage = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vqp53s9vgd28f4l17q0vs7xv32y64af0ny3wb1fgg4i534rzg6j";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  fastlane = {
+    dependencies = ["CFPropertyList" "addressable" "artifactory" "aws-sdk-s3" "babosa" "colored" "commander-fastlane" "dotenv" "emoji_regex" "excon" "faraday" "faraday-cookie_jar" "faraday_middleware" "fastimage" "gh_inspector" "google-api-client" "google-cloud-storage" "highline" "json" "jwt" "mini_magick" "multipart-post" "plist" "rubyzip" "security" "simctl" "slack-notifier" "terminal-notifier" "terminal-table" "tty-screen" "tty-spinner" "word_wrap" "xcodeproj" "xcpretty" "xcpretty-travis-formatter"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0crr42qdgy9l409pffpfs7nq8ha18lp1nxngny2dc9hiq1xx4r5d";
+      type = "gem";
+    };
+    version = "2.172.0";
+  };
+  gh_inspector = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f8r9byajj3bi2c7c5sqrc7m0zrv3nblfcd4782lw5l73cbsgk04";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  google-api-client = {
+    dependencies = ["addressable" "googleauth" "httpclient" "mini_mime" "representable" "retriable" "signet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jybks8i00rxrxx9mkx90dbdk6pczh2w757wchlavmrkrk0dp9s1";
+      type = "gem";
+    };
+    version = "0.38.0";
+  };
+  google-apis-core = {
+    dependencies = ["addressable" "googleauth" "httpclient" "mini_mime" "representable" "retriable" "rexml" "signet" "webrick"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "184pqw7z7s8mc1r5gj8f76xvp8z650xq50vdfj5gjwsbmzd99z2f";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  google-apis-iamcredentials_v1 = {
+    dependencies = ["google-apis-core"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xjlzq2fxpwvp9b6ajs8cpyjv8vs2d2npg9v23yj181hj2fnn82c";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  google-apis-storage_v1 = {
+    dependencies = ["google-apis-core"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0axycds5q20fqm6vqxa5r922021p0f8jhwvlgw8r1vq600ljribi";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  google-cloud-core = {
+    dependencies = ["google-cloud-env" "google-cloud-errors"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qjn7vs8f85vxi1nkikbjfja6bv9snrj26vzscjii0cm8n4dy0i1";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  google-cloud-env = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bjgxyvagy6hjj8yg7fqq24rwdjxb6hx7fdd1bmn4mwd846lci2i";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  google-cloud-errors = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hvs1x39g77hbdqjxmzcl6gq8160pv3kskvzbbch0ww1np6qwm67";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  google-cloud-storage = {
+    dependencies = ["addressable" "digest-crc" "google-apis-iamcredentials_v1" "google-apis-storage_v1" "google-cloud-core" "googleauth" "mini_mime"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17axi5gmy0g04801v11lww5mvqzffqdc3w6k1j7f95v90hy4yn6m";
+      type = "gem";
+    };
+    version = "1.30.0";
+  };
+  googleauth = {
+    dependencies = ["faraday" "jwt" "memoist" "multi_json" "os" "signet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pwm0mzb5zffhk6yw4v3n1yj8qr6jla6f78vsv4g0bxh9z0ikc2z";
+      type = "gem";
+    };
+    version = "0.15.0";
+  };
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01ib7jp85xjc4gh4jg0wyzllm46hwv8p0w1m4c75pbgi41fps50y";
+      type = "gem";
+    };
+    version = "1.7.10";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4wac0dcd1jf6kc57891glih9w57552zgqswgy74d1xhgnk0ngf";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lrirj0gw420kw71bjjlqkqhqbrplla61gbv1jzgsz6bv90qr3ci";
+      type = "gem";
+    };
+    version = "2.5.1";
+  };
+  jwt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14ynyq1q483spj20ffl4xayfqx1a8qr761mqjfxczf8lwlap392n";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  memoist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i9wpzix3sjhf6d9zw60dm4371iq8kyz7ckh2qapan2vyaim6b55";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  mini_magick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aj604x11d9pksbljh0l38f70b558rhdgji1s9i763hiagvvx2hs";
+      type = "gem";
+    };
+    version = "4.11.0";
+  };
+  mini_mime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1axm0rxyx3ss93wbmfkm78a6x03l8y4qy60rhkkiq0aza0vwq3ha";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  nanaimo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xi36h3f7nm8bc2k0b6svpda1lyank2gf872lxjbhw3h95hdrbma";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  naturally = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04x1nkx6gkqzlc4phdvq05v3vjds6mgqhjqzqpcs6vdh5xyqrf59";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  os = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12fli64wz5j9868gpzv5wqsingk1jk457qyqksv9ksmq9b0zpc9x";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  plist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1whhr897z6z6av85x2cipyjk46bwh6s4wx6nbrcd3iifnzvbqs7l";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
+      type = "gem";
+    };
+    version = "4.0.6";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iik52mf9ky4cgs38fp2m8r6skdkq1yz23vh18lk95fhbcxb6a67";
+      type = "gem";
+    };
+    version = "13.0.3";
+  };
+  representable = {
+    dependencies = ["declarative" "declarative-option" "uber"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qm9rgi1j5a6nv726ka4mmixivlxfsg91h8rpp72wwd4vqbkkm07";
+      type = "gem";
+    };
+    version = "3.0.4";
+  };
+  retriable = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q48hqws2dy1vws9schc0kmina40gy7sn5qsndpsfqdslh65snha";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mkvkcw9fhpaizrhca0pdgjcrbns48rlz4g6lavl5gjjq3rk2sq3";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sfikq1q8xyqqx690iiz7ybhzx87am4w50w8f2nq36l3asw4x89d";
+      type = "gem";
+    };
+    version = "2.0.7";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15wfcqxyfgka05v2a7kpg64x57gl1y4xzvnc9lh60bqx5sf1iqrs";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0590m2pr9i209pp5z4mx0nb1961ishdiqb28995hw1nln1d1b5ji";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  security = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ryjxs0j66wrbky2c08yf0mllwalvpg12rpxzbdx2rdhj3cbrlxa";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  signet = {
+    dependencies = ["addressable" "faraday" "jwt" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10g2667fvxnc50hcd1aywgsbf8j7nrckg3n7zjvywmyz82pwmpqp";
+      type = "gem";
+    };
+    version = "0.14.0";
+  };
+  simctl = {
+    dependencies = ["CFPropertyList" "naturally"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1v9rsdmg5c5kkf8ps47xnrfbvjnq11sbaifr186jwkh4npawz00x";
+      type = "gem";
+    };
+    version = "1.6.8";
+  };
+  slack-notifier = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pkfn99dhy5s526r6k8d87fwwb6j287ga9s7lxqmh60z28xqh3bv";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  terminal-notifier = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1slc0y8pjpw30hy21v8ypafi8r7z9jlj4bjbgz03b65b28i2n3bs";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  terminal-table = {
+    dependencies = ["unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1512cngw35hsmhvw4c05rscihc59mnj09m249sm9p3pik831ydqk";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  tty-cursor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j5zw041jgkmn605ya1zc151bxgxl6v192v2i26qhxx7ws2l2lvr";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  tty-screen = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18jr6s1cg8yb26wzkqa6874q0z93rq0y5aw092kdqazk71y6a235";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  tty-spinner = {
+    dependencies = ["tty-cursor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hh5awmijnzw9flmh5ak610x1d00xiqagxa5mbr63ysggc26y0qf";
+      type = "gem";
+    };
+    version = "0.9.3";
+  };
+  uber = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p1mm7mngg40x05z52md3mbamkng0zpajbzqjjwmsyw0zw3v9vjv";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wc47r23h063l8ysws8sy24gzh74mks81cak3lkzlrw4qkqb3sg4";
+      type = "gem";
+    };
+    version = "0.0.7.7";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06i3id27s60141x6fdnjn5rar1cywdwy64ilc59cz937303q3mna";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  word_wrap = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iyc5bc7dbgsd8j3yk1i99ral39f23l6wapi0083fbl19hid8mpm";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  xcode-install = {
+    dependencies = ["claide" "fastlane"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhslanqw8r0mhls2hira05c8xjzzr7mnz1ab9p5qwg4z45ddjj8";
+      type = "gem";
+    };
+    version = "2.6.8";
+  };
+  xcodeproj = {
+    dependencies = ["CFPropertyList" "atomos" "claide" "colored2" "nanaimo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1411j6sfnz0cx4fiw52f0yqx4bgcn8cmpgi3i5rwmmahayyjz2fn";
+      type = "gem";
+    };
+    version = "1.19.0";
+  };
+  xcpretty = {
+    dependencies = ["rouge"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xq47q2h5llj7b54rws4796904vnnjz7qqnacdv7wlp3gdbwrivm";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  xcpretty-travis-formatter = {
+    dependencies = ["xcpretty"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14rg4f70klrs910n7rsgfa4dn8s2qyny55194ax2qyyb2wpk7k5a";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+}
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..c0b9676d27bd
--- /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
+   2.1.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..9c24b9810050
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xcpretty/default.nix
@@ -0,0 +1,21 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "xcpretty";
+  gemdir = ./.;
+
+  exes = [ "xcpretty" ];
+
+  passthru = {
+    updateScript = bundlerUpdateScript "xcpretty";
+  };
+
+  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..ef5591c30cf3
--- /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";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/xib2nib/default.nix b/nixpkgs/pkgs/development/tools/xib2nib/default.nix
new file mode 100644
index 000000000000..b579e3674334
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xib2nib/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, pugixml, boost, PlistCpp }:
+
+stdenv.mkDerivation {
+  pname = "xib2nib";
+  version = "unstable-2017-04-12";
+
+  src = fetchFromGitHub {
+    owner = "matthewbauer";
+    repo = "xib2nib";
+    rev = "97c6a53aab83d919805efcae33cf80690e953d1e";
+    sha256 = "08442f4xg7racknj35nr56a4c62gvdgdw55pssbkn2qq0rfzziqq";
+  };
+
+  buildInputs = [ PlistCpp pugixml boost ];
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with 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..033d18608ac8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/xqilla/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl, xercesc }:
+
+stdenv.mkDerivation rec {
+  pname = "xqilla";
+  version = "2.3.4";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/xqilla/XQilla-${version}.tar.gz";
+    sha256 = "0m9z7diw7pdyb4qycbqyr2x55s13v8310xsi7yz0inpw27q4vzdd";
+  };
+
+  configureFlags = [ "--with-xerces=${xercesc}" ];
+
+  meta = with lib; {
+    description = "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..543ed7fc3eaf
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yaml2json/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+
+buildGoPackage rec {
+  pname = "yaml2json";
+  version = "1.3";
+  goPackagePath = "github.com/bronze1man/yaml2json";
+
+  src = fetchFromGitHub {
+    owner = "bronze1man";
+    repo = "yaml2json";
+    rev = "v${version}";
+    sha256 = "0bhjzl4qibiyvn56wcsm85f3vwnlzf4gywy2gq9mrnbrl629amq1";
+  };
+
+  meta = with 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/yarn/default.nix b/nixpkgs/pkgs/development/tools/yarn/default.nix
new file mode 100644
index 000000000000..50d29cb4a1d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, nodejs, fetchzip, testVersion, yarn }:
+
+stdenv.mkDerivation rec {
+  pname = "yarn";
+  version = "1.22.17";
+
+  src = fetchzip {
+    url = "https://github.com/yarnpkg/yarn/releases/download/v${version}/yarn-v${version}.tar.gz";
+    sha256 = "1skzlyv2976bl1063f94422jbjy4ns1nxl622biizq31z4821yvj";
+  };
+
+  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
+  '';
+
+  passthru.tests = testVersion { package = yarn; };
+
+  meta = with 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/yarn2nix-moretea/yarn2nix/LICENSE.txt b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/LICENSE.txt
new file mode 100644
index 000000000000..94a9ed024d38
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/LICENSE.txt
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/bin/yarn2nix.js b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/bin/yarn2nix.js
new file mode 100755
index 000000000000..d2152f9c5e49
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/bin/yarn2nix.js
@@ -0,0 +1,90 @@
+#!/usr/bin/env node
+
+const fs = require('fs')
+const lockfile = require('@yarnpkg/lockfile')
+const { docopt } = require('docopt')
+const deepEqual = require('deep-equal')
+const R = require('ramda')
+
+const fixPkgAddMissingSha1 = require('../lib/fixPkgAddMissingSha1')
+const mapObjIndexedReturnArray = require('../lib/mapObjIndexedReturnArray')
+const generateNix = require('../lib/generateNix')
+
+const USAGE = `
+Usage: yarn2nix [options]
+
+Options:
+  -h --help           Shows this help.
+  --no-nix            Hide the nix output
+  --no-patch          Don't patch the lockfile if hashes are missing
+  --lockfile=FILE     Specify path to the lockfile [default: ./yarn.lock].
+  --builtin-fetchgit  Use builtin fetchGit for git dependencies to support on-the-fly generation of yarn.nix without an internet connection
+`
+
+const options = docopt(USAGE)
+
+const data = fs.readFileSync(options['--lockfile'], 'utf8')
+
+// json example:
+
+// {
+//   type:'success',
+//   object:{
+//     'abbrev@1':{
+//       version:'1.0.9',
+//       resolved:'https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135'
+//     },
+//     'shell-quote@git+https://github.com/srghma/node-shell-quote.git#without_unlicenced_jsonify':{
+//       version:'1.6.0',
+//       resolved:'git+https://github.com/srghma/node-shell-quote.git#0aa381896e0cd7409ead15fd444f225807a61e0a'
+//     },
+//     '@graphile/plugin-supporter@git+https://1234user:1234pass@git.graphile.com/git/users/1234user/postgraphile-supporter.git':{
+//       version:'1.6.0',
+//       resolved:'git+https://1234user:1234pass@git.graphile.com/git/users/1234user/postgraphile-supporter.git#1234commit'
+//     },
+//   }
+// }
+
+const json = lockfile.parse(data)
+
+if (json.type !== 'success') {
+  throw new Error('yarn.lock parse error')
+}
+
+// Check for missing hashes in the yarn.lock and patch if necessary
+
+let pkgs = R.pipe(
+  mapObjIndexedReturnArray((value, key) => ({
+    ...value,
+    nameWithVersion: key,
+  })),
+  R.uniqBy(R.prop('resolved')),
+)(json.object)
+
+;(async () => {
+  if (!options['--no-patch']) {
+    pkgs = await Promise.all(R.map(fixPkgAddMissingSha1, pkgs))
+  }
+
+  const origJson = lockfile.parse(data)
+
+  if (!deepEqual(origJson, json)) {
+    console.error('found changes in the lockfile', options['--lockfile'])
+
+    if (options['--no-patch']) {
+      console.error('...aborting')
+      process.exit(1)
+    }
+
+    fs.writeFileSync(options['--lockfile'], lockfile.stringify(json.object))
+  }
+
+  if (!options['--no-nix']) {
+    // print to stdout
+    console.log(generateNix(pkgs, options['--builtin-fetchgit']))
+  }
+})().catch(error => {
+  console.error(error)
+
+  process.exit(1)
+})
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix
new file mode 100644
index 000000000000..81d4a36a869c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix
@@ -0,0 +1,449 @@
+{ pkgs ? import <nixpkgs> {}
+, nodejs ? pkgs.nodejs
+, yarn ? pkgs.yarn
+, allowAliases ? pkgs.config.allowAliases or true
+}:
+
+let
+  inherit (pkgs) stdenv lib fetchurl linkFarm callPackage git rsync makeWrapper runCommandLocal;
+
+  compose = f: g: x: f (g x);
+  id = x: x;
+  composeAll = builtins.foldl' compose id;
+
+  # https://docs.npmjs.com/files/package.json#license
+  # TODO: support expression syntax (OR, AND, etc)
+  getLicenseFromSpdxId = licstr:
+    if licstr == "UNLICENSED" then
+      lib.licenses.unfree
+    else
+      lib.getLicenseFromSpdxId licstr;
+in rec {
+  # Export yarn again to make it easier to find out which yarn was used.
+  inherit yarn;
+
+  # Re-export pkgs
+  inherit pkgs;
+
+  unlessNull = item: alt:
+    if item == null then alt else item;
+
+  reformatPackageName = pname:
+    let
+      # regex adapted from `validate-npm-package-name`
+      # will produce 3 parts e.g.
+      # "@someorg/somepackage" -> [ "@someorg/" "someorg" "somepackage" ]
+      # "somepackage" -> [ null null "somepackage" ]
+      parts = builtins.tail (builtins.match "^(@([^/]+)/)?([^/]+)$" pname);
+      # if there is no organisation we need to filter out null values.
+      non-null = builtins.filter (x: x != null) parts;
+    in builtins.concatStringsSep "-" non-null;
+
+  inherit getLicenseFromSpdxId;
+
+  # Generates the yarn.nix from the yarn.lock file
+  mkYarnNix = { yarnLock, flags ? [] }:
+    pkgs.runCommand "yarn.nix" {}
+    "${yarn2nix}/bin/yarn2nix --lockfile ${yarnLock} --no-patch --builtin-fetchgit ${lib.escapeShellArgs flags} > $out";
+
+  # Loads the generated offline cache. This will be used by yarn as
+  # the package source.
+  importOfflineCache = yarnNix:
+    let
+      pkg = callPackage yarnNix { };
+    in
+      pkg.offline_cache;
+
+  defaultYarnFlags = [
+    "--offline"
+    "--frozen-lockfile"
+    "--ignore-engines"
+    "--ignore-scripts"
+  ];
+
+  mkYarnModules = {
+    name ? "${pname}-${version}", # safe name and version, e.g. testcompany-one-modules-1.0.0
+    pname, # original name, e.g @testcompany/one
+    version,
+    packageJSON,
+    yarnLock,
+    yarnNix ? mkYarnNix { inherit yarnLock; },
+    offlineCache ? importOfflineCache yarnNix,
+    yarnFlags ? defaultYarnFlags,
+    pkgConfig ? {},
+    preBuild ? "",
+    postBuild ? "",
+    workspaceDependencies ? [], # List of yarn packages
+  }:
+    let
+      extraNativeBuildInputs =
+        lib.concatMap
+          (key: pkgConfig.${key}.nativeBuildInputs or [])
+          (builtins.attrNames pkgConfig);
+      extraBuildInputs =
+        lib.concatMap
+          (key: pkgConfig.${key}.buildInputs or [])
+          (builtins.attrNames pkgConfig);
+
+      postInstall = (builtins.map (key:
+        if (pkgConfig.${key} ? postInstall) then
+          ''
+            for f in $(find -L -path '*/node_modules/${key}' -type d); do
+              (cd "$f" && (${pkgConfig.${key}.postInstall}))
+            done
+          ''
+        else
+          ""
+      ) (builtins.attrNames pkgConfig));
+
+      workspaceJSON = pkgs.writeText
+        "${name}-workspace-package.json"
+        (builtins.toJSON { private = true; workspaces = ["deps/**"]; }); # scoped packages need second splat
+
+      workspaceDependencyLinks = lib.concatMapStringsSep "\n"
+        (dep: ''
+          mkdir -p "deps/${dep.pname}"
+          ln -sf ${dep.packageJSON} "deps/${dep.pname}/package.json"
+        '')
+        workspaceDependencies;
+
+    in stdenv.mkDerivation {
+      inherit preBuild postBuild name;
+      dontUnpack = true;
+      dontInstall = true;
+      nativeBuildInputs = [ yarn nodejs git ] ++ extraNativeBuildInputs;
+      buildInputs = extraBuildInputs;
+
+      configurePhase = lib.optionalString (offlineCache ? outputHash) ''
+        if ! cmp -s ${yarnLock} ${offlineCache}/yarn.lock; then
+          echo "yarn.lock changed, you need to update the fetchYarnDeps hash"
+          exit 1
+        fi
+      '' + ''
+        # Yarn writes cache directories etc to $HOME.
+        export HOME=$PWD/yarn_home
+      '';
+
+      buildPhase = ''
+        runHook preBuild
+
+        mkdir -p "deps/${pname}"
+        cp ${packageJSON} "deps/${pname}/package.json"
+        cp ${workspaceJSON} ./package.json
+        cp ${yarnLock} ./yarn.lock
+        chmod +w ./yarn.lock
+
+        yarn config --offline set yarn-offline-mirror ${offlineCache}
+
+        # Do not look up in the registry, but in the offline cache.
+        ${fixup_yarn_lock}/bin/fixup_yarn_lock yarn.lock
+
+        ${workspaceDependencyLinks}
+
+        yarn install ${lib.escapeShellArgs yarnFlags}
+
+        ${lib.concatStringsSep "\n" postInstall}
+
+        mkdir $out
+        mv node_modules $out/
+        mv deps $out/
+        patchShebangs $out
+
+        runHook postBuild
+      '';
+    };
+
+  # This can be used as a shellHook in mkYarnPackage. It brings the built node_modules into
+  # the shell-hook environment.
+  linkNodeModulesHook = ''
+    if [[ -d node_modules || -L node_modules ]]; then
+      echo "./node_modules is present. Replacing."
+      rm -rf node_modules
+    fi
+
+    ln -s "$node_modules" node_modules
+  '';
+
+  mkYarnWorkspace = {
+    src,
+    packageJSON ? src + "/package.json",
+    yarnLock ? src + "/yarn.lock",
+    packageOverrides ? {},
+    ...
+  }@attrs:
+  let
+    package = lib.importJSON packageJSON;
+
+    packageGlobs = if lib.isList package.workspaces then package.workspaces else package.workspaces.packages;
+
+    globElemToRegex = lib.replaceStrings ["*"] [".*"];
+
+    # PathGlob -> [PathGlobElem]
+    splitGlob = lib.splitString "/";
+
+    # Path -> [PathGlobElem] -> [Path]
+    # Note: Only directories are included, everything else is filtered out
+    expandGlobList = base: globElems:
+      let
+        elemRegex = globElemToRegex (lib.head globElems);
+        rest = lib.tail globElems;
+        children = lib.attrNames (lib.filterAttrs (name: type: type == "directory") (builtins.readDir base));
+        matchingChildren = lib.filter (child: builtins.match elemRegex child != null) children;
+      in if globElems == []
+        then [ base ]
+        else lib.concatMap (child: expandGlobList (base+("/"+child)) rest) matchingChildren;
+
+    # Path -> PathGlob -> [Path]
+    expandGlob = base: glob: expandGlobList base (splitGlob glob);
+
+    packagePaths = lib.concatMap (expandGlob src) packageGlobs;
+
+    packages = lib.listToAttrs (map (src:
+      let
+        packageJSON = src + "/package.json";
+
+        package = lib.importJSON packageJSON;
+
+        allDependencies = lib.foldl (a: b: a // b) {} (map (field: lib.attrByPath [field] {} package) ["dependencies" "devDependencies"]);
+
+        # { [name: String] : { pname : String, packageJSON : String, ... } } -> { [pname: String] : version } -> [{ pname : String, packageJSON : String, ... }]
+        getWorkspaceDependencies = packages: allDependencies:
+          let
+            packageList = lib.attrValues packages;
+          in
+            composeAll [
+              (lib.filter (x: x != null))
+              (lib.mapAttrsToList (pname: _version: lib.findFirst (package: package.pname == pname) null packageList))
+            ] allDependencies;
+
+        workspaceDependencies = getWorkspaceDependencies packages allDependencies;
+
+        name = reformatPackageName package.name;
+      in {
+        inherit name;
+        value = mkYarnPackage (
+          builtins.removeAttrs attrs ["packageOverrides"]
+          // { inherit src packageJSON yarnLock workspaceDependencies; }
+          // lib.attrByPath [name] {} packageOverrides
+        );
+      })
+      packagePaths
+    );
+  in packages;
+
+  mkYarnPackage = {
+    name ? null,
+    src,
+    packageJSON ? src + "/package.json",
+    yarnLock ? src + "/yarn.lock",
+    yarnNix ? mkYarnNix { inherit yarnLock; },
+    offlineCache ? importOfflineCache yarnNix,
+    yarnFlags ? defaultYarnFlags,
+    yarnPreBuild ? "",
+    yarnPostBuild ? "",
+    pkgConfig ? {},
+    extraBuildInputs ? [],
+    publishBinsFor ? null,
+    workspaceDependencies ? [], # List of yarnPackages
+    ...
+  }@attrs:
+    let
+      package = lib.importJSON packageJSON;
+      pname = package.name;
+      safeName = reformatPackageName pname;
+      version = attrs.version or package.version;
+      baseName = unlessNull name "${safeName}-${version}";
+
+      workspaceDependenciesTransitive = lib.unique (
+        (lib.flatten (builtins.map (dep: dep.workspaceDependencies) workspaceDependencies))
+        ++ workspaceDependencies
+      );
+
+      deps = mkYarnModules {
+        name = "${safeName}-modules-${version}";
+        preBuild = yarnPreBuild;
+        postBuild = yarnPostBuild;
+        workspaceDependencies = workspaceDependenciesTransitive;
+        inherit packageJSON pname version yarnLock offlineCache yarnFlags pkgConfig;
+      };
+
+      publishBinsFor_ = unlessNull publishBinsFor [pname];
+
+      linkDirFunction = ''
+        linkDirToDirLinks() {
+          target=$1
+          if [ ! -f "$target" ]; then
+            mkdir -p "$target"
+          elif [ -L "$target" ]; then
+            local new=$(mktemp -d)
+            trueSource=$(realpath "$target")
+            if [ "$(ls $trueSource | wc -l)" -gt 0 ]; then
+              ln -s $trueSource/* $new/
+            fi
+            rm -r "$target"
+            mv "$new" "$target"
+          fi
+        }
+      '';
+
+      workspaceDependencyCopy = lib.concatMapStringsSep "\n"
+        (dep: ''
+          # ensure any existing scope directory is not a symlink
+          linkDirToDirLinks "$(dirname node_modules/${dep.pname})"
+          mkdir -p "deps/${dep.pname}"
+          tar -xf "${dep}/tarballs/${dep.name}.tgz" --directory "deps/${dep.pname}" --strip-components=1
+          if [ ! -e "deps/${dep.pname}/node_modules" ]; then
+            ln -s "${deps}/deps/${dep.pname}/node_modules" "deps/${dep.pname}/node_modules"
+          fi
+        '')
+        workspaceDependenciesTransitive;
+
+    in stdenv.mkDerivation (builtins.removeAttrs attrs ["yarnNix" "pkgConfig" "workspaceDependencies"] // {
+      inherit src pname;
+
+      name = baseName;
+
+      buildInputs = [ yarn nodejs rsync ] ++ extraBuildInputs;
+
+      node_modules = deps + "/node_modules";
+
+      configurePhase = attrs.configurePhase or ''
+        runHook preConfigure
+
+        for localDir in npm-packages-offline-cache node_modules; do
+          if [[ -d $localDir || -L $localDir ]]; then
+            echo "$localDir dir present. Removing."
+            rm -rf $localDir
+          fi
+        done
+
+        # move convent of . to ./deps/${pname}
+        mv $PWD $NIX_BUILD_TOP/temp
+        mkdir -p "$PWD/deps/${pname}"
+        rm -fd "$PWD/deps/${pname}"
+        mv $NIX_BUILD_TOP/temp "$PWD/deps/${pname}"
+        cd $PWD
+
+        ln -s ${deps}/deps/${pname}/node_modules "deps/${pname}/node_modules"
+
+        cp -r $node_modules node_modules
+        chmod -R +w node_modules
+
+        ${linkDirFunction}
+
+        linkDirToDirLinks "$(dirname node_modules/${pname})"
+        ln -s "deps/${pname}" "node_modules/${pname}"
+
+        ${workspaceDependencyCopy}
+
+        # Help yarn commands run in other phases find the package
+        echo "--cwd deps/${pname}" > .yarnrc
+        runHook postConfigure
+      '';
+
+      # Replace this phase on frontend packages where only the generated
+      # files are an interesting output.
+      installPhase = attrs.installPhase or ''
+        runHook preInstall
+
+        mkdir -p $out/{bin,libexec/${pname}}
+        mv node_modules $out/libexec/${pname}/node_modules
+        mv deps $out/libexec/${pname}/deps
+
+        node ${./internal/fixup_bin.js} $out/bin $out/libexec/${pname}/node_modules ${lib.concatStringsSep " " publishBinsFor_}
+
+        runHook postInstall
+      '';
+
+      doDist = true;
+
+      distPhase = attrs.distPhase or ''
+        # pack command ignores cwd option
+        rm -f .yarnrc
+        cd $out/libexec/${pname}/deps/${pname}
+        mkdir -p $out/tarballs/
+        yarn pack --offline --ignore-scripts --filename $out/tarballs/${baseName}.tgz
+      '';
+
+      passthru = {
+        inherit pname package packageJSON deps;
+        workspaceDependencies = workspaceDependenciesTransitive;
+      } // (attrs.passthru or {});
+
+      meta = {
+        inherit (nodejs.meta) platforms;
+        description = packageJSON.description or "";
+        homepage = packageJSON.homepage or "";
+        version = packageJSON.version or "";
+        license = if packageJSON ? license then getLicenseFromSpdxId packageJSON.license else "";
+      } // (attrs.meta or {});
+    });
+
+  yarn2nix = mkYarnPackage {
+    src =
+      let
+        src = ./.;
+
+        mkFilter = { dirsToInclude, filesToInclude, root }: path: type:
+          let
+            inherit (pkgs.lib) any flip elem hasSuffix hasPrefix elemAt splitString;
+
+            subpath = elemAt (splitString "${toString root}/" path) 1;
+            spdir = elemAt (splitString "/" subpath) 0;
+          in elem spdir dirsToInclude ||
+            (type == "regular" && elem subpath filesToInclude);
+      in builtins.filterSource
+          (mkFilter {
+            dirsToInclude = ["bin" "lib"];
+            filesToInclude = ["package.json" "yarn.lock"];
+            root = src;
+          })
+          src;
+
+    # yarn2nix is the only package that requires the yarnNix option.
+    # All the other projects can auto-generate that file.
+    yarnNix = ./yarn.nix;
+
+    # Using the filter above and importing package.json from the filtered
+    # source results in an error in restricted mode. To circumvent this,
+    # we import package.json from the unfiltered source
+    packageJSON = ./package.json;
+
+    yarnFlags = defaultYarnFlags ++ ["--production=true"];
+
+    nativeBuildInputs = [ pkgs.makeWrapper ];
+
+    buildPhase = ''
+      source ${./nix/expectShFunctions.sh}
+
+      expectFilePresent ./node_modules/.yarn-integrity
+
+      # check dependencies are installed
+      expectFilePresent ./node_modules/@yarnpkg/lockfile/package.json
+
+      # check devDependencies are not installed
+      expectFileOrDirAbsent ./node_modules/.bin/eslint
+      expectFileOrDirAbsent ./node_modules/eslint/package.json
+    '';
+
+    postInstall = ''
+      wrapProgram $out/bin/yarn2nix --prefix PATH : "${pkgs.nix-prefetch-git}/bin"
+    '';
+  };
+
+  fixup_yarn_lock = runCommandLocal "fixup_yarn_lock"
+    {
+      buildInputs = [ nodejs ];
+    } ''
+    mkdir -p $out/lib
+    mkdir -p $out/bin
+
+    cp ${./lib/urlToName.js} $out/lib/urlToName.js
+    cp ${./internal/fixup_yarn_lock.js} $out/bin/fixup_yarn_lock
+
+    patchShebangs $out
+  '';
+} // lib.optionalAttrs allowAliases {
+  # Aliases
+  spdxLicense = getLicenseFromSpdxId; # added 2021-12-01
+}
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_bin.js b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_bin.js
new file mode 100755
index 000000000000..6f0b5c93fa0c
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_bin.js
@@ -0,0 +1,53 @@
+#!/usr/bin/env node
+
+/* Usage:
+ * node fixup_bin.js <bin_dir> <modules_dir> [<bin_pkg_1>, <bin_pkg_2> ... ]
+ */
+
+const fs = require('fs')
+const path = require('path')
+
+const derivationBinPath = process.argv[2]
+const nodeModules = process.argv[3]
+const packagesToPublishBin = process.argv.slice(4)
+
+function processPackage(name) {
+  console.log('fixup_bin: Processing ', name)
+
+  const packagePath = `${nodeModules}/${name}`
+  const packageJsonPath = `${packagePath}/package.json`
+  const packageJson = JSON.parse(fs.readFileSync(packageJsonPath))
+
+  if (!packageJson.bin) {
+    console.log('fixup_bin: No binaries provided')
+    return
+  }
+
+  // There are two alternative syntaxes for `bin`
+  // a) just a plain string, in which case the name of the package is the name of the binary.
+  // b) an object, where key is the name of the eventual binary, and the value the path to that binary.
+  if (typeof packageJson.bin === 'string') {
+    const binName = packageJson.bin
+    packageJson.bin = {}
+    packageJson.bin[packageJson.name] = binName
+  }
+
+  // eslint-disable-next-line no-restricted-syntax, guard-for-in
+  for (const binName in packageJson.bin) {
+    const binPath = packageJson.bin[binName]
+    const normalizedBinName = binName.replace('@', '').replace('/', '-')
+
+    const targetPath = path.normalize(`${packagePath}/${binPath}`)
+    const createdPath = `${derivationBinPath}/${normalizedBinName}`
+
+    console.log(
+      `fixup_bin: creating link ${createdPath} that points to ${targetPath}`,
+    )
+
+    fs.symlinkSync(targetPath, createdPath)
+  }
+}
+
+packagesToPublishBin.forEach(pkg => {
+  processPackage(pkg)
+})
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_yarn_lock.js b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_yarn_lock.js
new file mode 100755
index 000000000000..3c067fc99aaa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_yarn_lock.js
@@ -0,0 +1,49 @@
+#!/usr/bin/env node
+
+/* Usage:
+ * node fixup_yarn_lock.js yarn.lock
+ */
+
+const fs = require('fs')
+const readline = require('readline')
+
+const urlToName = require('../lib/urlToName')
+
+const yarnLockPath = process.argv[2]
+
+const readFile = readline.createInterface({
+  input: fs.createReadStream(yarnLockPath, { encoding: 'utf8' }),
+
+  // Note: we use the crlfDelay option to recognize all instances of CR LF
+  // ('\r\n') in input.txt as a single line break.
+  crlfDelay: Infinity,
+
+  terminal: false, // input and output should be treated like a TTY
+})
+
+const result = []
+
+readFile
+  .on('line', line => {
+    const arr = line.match(/^ {2}resolved "([^#]+)(#[^"]+)?"$/)
+
+    if (arr !== null) {
+      const [_, url, shaOrRev] = arr
+
+      const fileName = urlToName(url)
+
+      result.push(`  resolved "${fileName}${shaOrRev ?? ''}"`)
+    } else {
+      result.push(line)
+    }
+  })
+  .on('close', () => {
+    fs.writeFile(yarnLockPath, result.join('\n'), 'utf8', err => {
+      if (err) {
+        console.error(
+          'fixup_yarn_lock: fatal error when trying to write to yarn.lock',
+          err,
+        )
+      }
+    })
+  })
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/fixPkgAddMissingSha1.js b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/fixPkgAddMissingSha1.js
new file mode 100644
index 000000000000..40467a68992b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/fixPkgAddMissingSha1.js
@@ -0,0 +1,66 @@
+const https = require('https')
+const crypto = require('crypto')
+
+// TODO:
+// make test case where getSha1 function is used, i.e. the case when resolved is without sha1?
+// consider using https://github.com/request/request-promise-native
+
+function getSha1(url) {
+  return new Promise((resolve, reject) => {
+    https.get(url, res => {
+      const { statusCode } = res
+      const hash = crypto.createHash('sha1')
+
+      if (statusCode !== 200) {
+        const err = new Error(`Request Failed.\nStatus Code: ${statusCode}`)
+
+        // consume response data to free up memory
+        res.resume()
+
+        reject(err)
+      }
+
+      res.on('data', chunk => {
+        hash.update(chunk)
+      })
+
+      res.on('end', () => {
+        resolve(hash.digest('hex'))
+      })
+
+      res.on('error', reject)
+    })
+  })
+}
+
+// Object -> Object
+async function fixPkgAddMissingSha1(pkg) {
+  // local dependency
+
+  if (!pkg.resolved) {
+    console.error(
+      `yarn2nix: can't find "resolved" field for package ${
+        pkg.nameWithVersion
+      }, you probably required it using "file:...", this feature is not supported, ignoring`,
+    )
+    return pkg
+  }
+
+  const [url, sha1] = pkg.resolved.split('#', 2)
+
+  if (sha1 || url.startsWith('https://codeload.github.com')) {
+    return pkg
+  }
+
+  // if there is no sha1 in resolved url
+  // (this could happen if yarn.lock was generated by older version of yarn)
+  // - request it from registry by https and add it to pkg
+  const newSha1 = await getSha1(url)
+
+  return {
+    ...pkg,
+    resolved: `${url}#${newSha1}`,
+  }
+}
+
+module.exports = fixPkgAddMissingSha1
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/generateNix.js b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/generateNix.js
new file mode 100644
index 000000000000..5004e6f3903d
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/generateNix.js
@@ -0,0 +1,136 @@
+const R = require('ramda')
+
+const urlToName = require('./urlToName')
+const { execFileSync } = require('child_process')
+
+// fetchgit transforms
+//
+// "shell-quote@git+https://github.com/srghma/node-shell-quote.git#without_unlicenced_jsonify":
+//   version "1.6.0"
+//   resolved "git+https://github.com/srghma/node-shell-quote.git#1234commit"
+//
+// to
+//
+// builtins.fetchGit {
+//   url = "https://github.com/srghma/node-shell-quote.git";
+//   ref = "without_unlicenced_jsonify";
+//   rev = "1234commit";
+// }
+//
+// and transforms
+//
+// "@graphile/plugin-supporter@git+https://1234user:1234pass@git.graphile.com/git/users/1234user/postgraphile-supporter.git":
+//   version "0.6.0"
+//   resolved "git+https://1234user:1234pass@git.graphile.com/git/users/1234user/postgraphile-supporter.git#1234commit"
+//
+// to
+//
+// builtins.fetchGit {
+//   url = "https://1234user:1234pass@git.graphile.com/git/users/1234user/postgraphile-supporter.git";
+//   ref = "master";
+//   rev = "1234commit";
+// }
+
+function prefetchgit(url, rev) {
+  return JSON.parse(
+    execFileSync("nix-prefetch-git", ["--rev", rev, url, "--fetch-submodules"], {
+      stdio: [ "ignore", "pipe", "ignore" ],
+      timeout: 60000,
+    })
+  ).sha256
+}
+
+function fetchgit(fileName, url, rev, branch, builtinFetchGit) {
+  return `    {
+    name = "${fileName}";
+    path =
+      let${builtinFetchGit ? `
+        repo = builtins.fetchGit ({
+          url = "${url}";
+          ref = "${branch}";
+          rev = "${rev}";
+        } // (if builtins.substring 0 3 builtins.nixVersion == "2.4" then {
+          allRefs = true;
+        } else {}));
+      ` : `
+        repo = fetchgit {
+          url = "${url}";
+          rev = "${rev}";
+          sha256 = "${prefetchgit(url, rev)}";
+        };
+      `}in
+        runCommand "${fileName}" { buildInputs = [gnutar]; } ''
+          # Set u+w because tar-fs can't unpack archives with read-only dirs
+          # https://github.com/mafintosh/tar-fs/issues/79
+          tar cf $out --mode u+w -C \${repo} .
+        '';
+  }`
+}
+
+function fetchLockedDep(builtinFetchGit) {
+  return function (pkg) {
+    const { integrity, nameWithVersion, resolved } = pkg
+
+    if (!resolved) {
+      console.error(
+        `yarn2nix: can't find "resolved" field for package ${nameWithVersion}, you probably required it using "file:...", this feature is not supported, ignoring`,
+      )
+      return ''
+    }
+
+    const [url, sha1OrRev] = resolved.split('#')
+
+    const fileName = urlToName(url)
+
+    if (resolved.startsWith('https://codeload.github.com/')) {
+      const s = resolved.split('/')
+      const githubUrl = `https://github.com/${s[3]}/${s[4]}.git`
+      const githubRev = s[6]
+
+      const [_, branch] = nameWithVersion.split('#')
+
+      return fetchgit(fileName, githubUrl, githubRev, branch || 'master', builtinFetchGit)
+    }
+
+    if (url.startsWith('git+') || url.startsWith("git:")) {
+      const rev = sha1OrRev
+
+      const [_, branch] = nameWithVersion.split('#')
+
+      const urlForGit = url.replace(/^git\+/, '')
+
+      return fetchgit(fileName, urlForGit, rev, branch || 'master', builtinFetchGit)
+    }
+
+    const [algo, hash] = integrity ? integrity.split('-') : ['sha1', sha1OrRev]
+
+    return `    {
+      name = "${fileName}";
+      path = fetchurl {
+        name = "${fileName}";
+        url  = "${url}";
+        ${algo} = "${hash}";
+      };
+    }`
+  }
+}
+
+const HEAD = `
+{ fetchurl, fetchgit, linkFarm, runCommand, gnutar }: rec {
+  offline_cache = linkFarm "offline" packages;
+  packages = [
+`.trim()
+
+// Object -> String
+function generateNix(pkgs, builtinFetchGit) {
+  const nameWithVersionAndPackageNix = R.map(fetchLockedDep(builtinFetchGit), pkgs)
+
+  const packagesDefinition = R.join(
+    '\n',
+    R.values(nameWithVersionAndPackageNix),
+  )
+
+  return R.join('\n', [HEAD, packagesDefinition, '  ];', '}'])
+}
+
+module.exports = generateNix
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/mapObjIndexedReturnArray.js b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/mapObjIndexedReturnArray.js
new file mode 100644
index 000000000000..83c6634f7c84
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/mapObjIndexedReturnArray.js
@@ -0,0 +1,21 @@
+const _curry2 = require('ramda/src/internal/_curry2')
+const _map = require('ramda/src/internal/_map')
+const keys = require('ramda/src/keys')
+
+// mapObjIndexed: ((v, k, {k: v}) → v') → {k: v} → {k: v'}
+// mapObjIndexedReturnArray: ((v, k, {k: v}) → v') → {k: v} → [v']
+
+/*
+ * @example
+ *
+ *      const xyz = { x: 1, y: 2, z: 3 };
+ *      const prependKeyAndDouble = (num, key, obj) => key + (num * 2);
+ *
+ *      mapObjIndexedReturnArray(prependKeyAndDouble, xyz); //=> ['x2', 'y4', 'z6']
+ */
+
+const mapObjIndexedReturnArray = _curry2((fn, obj) =>
+  _map(key => fn(obj[key], key, obj), keys(obj)),
+)
+
+module.exports = mapObjIndexedReturnArray
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/urlToName.js b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/urlToName.js
new file mode 100644
index 000000000000..d3c7288a50a4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/urlToName.js
@@ -0,0 +1,29 @@
+const path = require('path')
+
+// String -> String
+
+// @url examples:
+// - https://registry.yarnpkg.com/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz
+// - https://registry.npmjs.org/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz
+// - git+https://github.com/srghma/node-shell-quote.git
+// - git+https://1234user:1234pass@git.graphile.com/git/users/1234user/postgraphile-supporter.git
+// - https://codeload.github.com/Gargron/emoji-mart/tar.gz/934f314fd8322276765066e8a2a6be5bac61b1cf
+
+function urlToName(url) {
+
+  // Yarn generates `codeload.github.com` tarball URLs, where the final
+  // path component (file name) is the git hash. See #111.
+  // See also https://github.com/yarnpkg/yarn/blob/989a7406/src/resolvers/exotics/github-resolver.js#L24-L26
+  let isCodeloadGitTarballUrl =
+    url.startsWith('https://codeload.github.com/') && url.includes('/tar.gz/')
+
+  if (url.startsWith('git+') || isCodeloadGitTarballUrl) {
+    return path.basename(url)
+  }
+
+  return url
+    .replace(/https:\/\/(.)*(.com)\//g, '') // prevents having long directory names
+    .replace(/[@/%:-]/g, '_') // replace @ and : and - and % characters with underscore
+}
+
+module.exports = urlToName
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/nix/expectShFunctions.sh b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/nix/expectShFunctions.sh
new file mode 100644
index 000000000000..fad230c69212
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/nix/expectShFunctions.sh
@@ -0,0 +1,30 @@
+expectFilePresent () {
+  if [ -f "$1" ]; then
+    echo "Test passed: file is present - $1"
+  else
+    echo "Test failed: file is absent - $1"
+    exit 1
+  fi
+}
+
+expectFileOrDirAbsent () {
+  if [ ! -e "$1" ];
+  then
+    echo "Test passed: file or dir is absent - $1"
+  else
+    echo "Test failed: file or dir is present - $1"
+    exit 1
+  fi
+}
+
+expectEqual () {
+  if [ "$1" == "$2" ];
+  then
+    echo "Test passed: output is equal to expected_output"
+  else
+    echo "Test failed: output is not equal to expected_output:"
+    echo "  output - $1"
+    echo "  expected_output - $2"
+    exit 1
+  fi
+}
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/package.json b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/package.json
new file mode 100644
index 000000000000..5b85a68ca5c7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/package.json
@@ -0,0 +1,47 @@
+{
+  "name": "yarn2nix",
+  "version": "1.0.0",
+  "description": "Convert packages.json and yarn.lock into a Nix expression that downloads all the dependencies",
+  "main": "index.js",
+  "repository": ".",
+  "author": "Maarten Hoogendoorn <maarten@moretea.nl>",
+  "license": "MIT",
+  "scripts": {
+    "yarn2nix": "bin/yarn2nix.js",
+    "format": "prettier-eslint --write './**/*.{js,jsx,json}'",
+    "lint": "eslint ."
+  },
+  "bin": {
+    "yarn2nix": "bin/yarn2nix.js"
+  },
+  "engines" : {
+    "node" : ">=8.0.0"
+  },
+  "dependencies": {
+    "@yarnpkg/lockfile": "^1.1.0",
+    "deep-equal": "^1.0.1",
+    "docopt": "^0.6.2",
+    "ramda": "^0.26.1"
+  },
+  "devDependencies": {
+    "babel-eslint": "^10.0.1",
+    "eslint": "^5.11.1",
+    "eslint-config-airbnb": "^17.1.0",
+    "eslint-config-prettier": "^3.3.0",
+    "eslint-config-standard": "^12.0.0",
+    "eslint-plugin-import": "^2.14.0",
+    "eslint-plugin-jsx-a11y": "^6.1.2",
+    "eslint-plugin-node": "^8.0.0",
+    "eslint-plugin-promise": "^4.0.1",
+    "eslint-plugin-react": "^7.12.2",
+    "eslint-plugin-standard": "^4.0.0",
+    "husky": "^1.3.1",
+    "lint-staged": "^8.1.0",
+    "prettier-eslint-cli": "^4.7.1"
+  },
+  "husky": {
+    "hooks": {
+      "pre-commit": "lint-staged"
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.lock b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.lock
new file mode 100644
index 000000000000..6e22aa4fe4f1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.lock
@@ -0,0 +1,3583 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
+  integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==
+  dependencies:
+    "@babel/highlight" "^7.8.3"
+
+"@babel/generator@^7.9.6":
+  version "7.9.6"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43"
+  integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==
+  dependencies:
+    "@babel/types" "^7.9.6"
+    jsesc "^2.5.1"
+    lodash "^4.17.13"
+    source-map "^0.5.0"
+
+"@babel/helper-function-name@^7.9.5":
+  version "7.9.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c"
+  integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==
+  dependencies:
+    "@babel/helper-get-function-arity" "^7.8.3"
+    "@babel/template" "^7.8.3"
+    "@babel/types" "^7.9.5"
+
+"@babel/helper-get-function-arity@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5"
+  integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==
+  dependencies:
+    "@babel/types" "^7.8.3"
+
+"@babel/helper-split-export-declaration@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9"
+  integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==
+  dependencies:
+    "@babel/types" "^7.8.3"
+
+"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5":
+  version "7.9.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80"
+  integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==
+
+"@babel/highlight@^7.8.3":
+  version "7.9.0"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079"
+  integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.9.0"
+    chalk "^2.0.0"
+    js-tokens "^4.0.0"
+
+"@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6":
+  version "7.9.6"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7"
+  integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==
+
+"@babel/runtime-corejs3@^7.8.3":
+  version "7.9.6"
+  resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.9.6.tgz#67aded13fffbbc2cb93247388cf84d77a4be9a71"
+  integrity sha512-6toWAfaALQjt3KMZQc6fABqZwUDDuWzz+cAfPhqyEnzxvdWOAkjwPNxgF8xlmo7OWLsSjaKjsskpKHRLaMArOA==
+  dependencies:
+    core-js-pure "^3.0.0"
+    regenerator-runtime "^0.13.4"
+
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.4.5":
+  version "7.9.6"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f"
+  integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==
+  dependencies:
+    regenerator-runtime "^0.13.4"
+
+"@babel/template@^7.8.3":
+  version "7.8.6"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b"
+  integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==
+  dependencies:
+    "@babel/code-frame" "^7.8.3"
+    "@babel/parser" "^7.8.6"
+    "@babel/types" "^7.8.6"
+
+"@babel/traverse@^7.7.0":
+  version "7.9.6"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442"
+  integrity sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==
+  dependencies:
+    "@babel/code-frame" "^7.8.3"
+    "@babel/generator" "^7.9.6"
+    "@babel/helper-function-name" "^7.9.5"
+    "@babel/helper-split-export-declaration" "^7.8.3"
+    "@babel/parser" "^7.9.6"
+    "@babel/types" "^7.9.6"
+    debug "^4.1.0"
+    globals "^11.1.0"
+    lodash "^4.17.13"
+
+"@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.5", "@babel/types@^7.9.6":
+  version "7.9.6"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7"
+  integrity sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.9.5"
+    lodash "^4.17.13"
+    to-fast-properties "^2.0.0"
+
+"@samverschueren/stream-to-observable@^0.3.0":
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f"
+  integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==
+  dependencies:
+    any-observable "^0.3.0"
+
+"@yarnpkg/lockfile@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31"
+  integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==
+
+abbrev@1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+acorn-jsx@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+  integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
+  dependencies:
+    acorn "^3.0.4"
+
+acorn-jsx@^5.0.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe"
+  integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
+
+acorn@^3.0.4:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+  integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
+
+acorn@^5.5.0:
+  version "5.7.4"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
+  integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
+
+acorn@^6.0.7:
+  version "6.4.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
+  integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
+
+ajv-keywords@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
+  integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=
+
+ajv@^5.2.3, ajv@^5.3.0:
+  version "5.5.2"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
+  integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=
+  dependencies:
+    co "^4.6.0"
+    fast-deep-equal "^1.0.0"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.3.0"
+
+ajv@^6.10.2, ajv@^6.9.1:
+  version "6.12.2"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
+  integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
+ansi-escapes@^3.0.0, ansi-escapes@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+  integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
+ansi-regex@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+  integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+  integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-styles@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+  integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.1.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+  dependencies:
+    color-convert "^1.9.0"
+
+any-observable@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
+  integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==
+
+argparse@^1.0.7:
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+  dependencies:
+    sprintf-js "~1.0.2"
+
+aria-query@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc"
+  integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=
+  dependencies:
+    ast-types-flow "0.0.7"
+    commander "^2.11.0"
+
+arr-diff@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+  integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+  integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-includes@^3.0.3, array-includes@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348"
+  integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.0"
+    is-string "^1.0.5"
+
+array-union@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+  integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+  dependencies:
+    array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+  integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+array-unique@^0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+  integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+array.prototype.flat@^1.2.1:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
+  integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.0-next.1"
+
+arrify@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+  integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+assign-symbols@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+  integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+ast-types-flow@0.0.7, ast-types-flow@^0.0.7:
+  version "0.0.7"
+  resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+  integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
+
+astral-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+  integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+atob@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+  integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+axobject-query@^2.0.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.2.tgz#2bdffc0371e643e5f03ba99065d5179b9ca79799"
+  integrity sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ==
+
+babel-code-frame@^6.22.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+  integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+  dependencies:
+    chalk "^1.1.3"
+    esutils "^2.0.2"
+    js-tokens "^3.0.2"
+
+babel-eslint@^10.0.1:
+  version "10.1.0"
+  resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
+  integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    "@babel/parser" "^7.7.0"
+    "@babel/traverse" "^7.7.0"
+    "@babel/types" "^7.7.0"
+    eslint-visitor-keys "^1.0.0"
+    resolve "^1.12.0"
+
+babel-runtime@^6.23.0, babel-runtime@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+  integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+  dependencies:
+    core-js "^2.4.0"
+    regenerator-runtime "^0.11.0"
+
+balanced-match@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+  integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base@^0.11.1:
+  version "0.11.2"
+  resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+  integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+  dependencies:
+    cache-base "^1.0.1"
+    class-utils "^0.3.5"
+    component-emitter "^1.2.1"
+    define-property "^1.0.0"
+    isobject "^3.0.1"
+    mixin-deep "^1.2.0"
+    pascalcase "^0.1.1"
+
+boolify@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/boolify/-/boolify-1.0.1.tgz#b5c09e17cacd113d11b7bb3ed384cc012994d86b"
+  integrity sha1-tcCeF8rNET0Rt7s+04TMASmU2Gs=
+
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+braces@^2.3.1:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+  integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+  dependencies:
+    arr-flatten "^1.1.0"
+    array-unique "^0.3.2"
+    extend-shallow "^2.0.1"
+    fill-range "^4.0.0"
+    isobject "^3.0.1"
+    repeat-element "^1.1.2"
+    snapdragon "^0.8.1"
+    snapdragon-node "^2.0.1"
+    split-string "^3.0.2"
+    to-regex "^3.0.1"
+
+buffer-from@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+  integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+cache-base@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+  integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+  dependencies:
+    collection-visit "^1.0.0"
+    component-emitter "^1.2.1"
+    get-value "^2.0.6"
+    has-value "^1.0.0"
+    isobject "^3.0.1"
+    set-value "^2.0.0"
+    to-object-path "^0.3.0"
+    union-value "^1.0.0"
+    unset-value "^1.0.0"
+
+caller-callsite@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+  integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+  dependencies:
+    callsites "^2.0.0"
+
+caller-path@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+  integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
+  dependencies:
+    callsites "^0.2.0"
+
+caller-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+  integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+  dependencies:
+    caller-callsite "^2.0.0"
+
+callsites@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+  integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
+
+callsites@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+  integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+callsites@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase-keys@^4.1.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77"
+  integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=
+  dependencies:
+    camelcase "^4.1.0"
+    map-obj "^2.0.0"
+    quick-lru "^1.0.0"
+
+camelcase@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+  integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+
+chalk@2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
+  integrity sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==
+  dependencies:
+    ansi-styles "^3.1.0"
+    escape-string-regexp "^1.0.5"
+    supports-color "^4.0.0"
+
+chalk@^1.0.0, chalk@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+  integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+  dependencies:
+    ansi-styles "^2.2.1"
+    escape-string-regexp "^1.0.2"
+    has-ansi "^2.0.0"
+    strip-ansi "^3.0.0"
+    supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+  dependencies:
+    ansi-styles "^3.2.1"
+    escape-string-regexp "^1.0.5"
+    supports-color "^5.3.0"
+
+chardet@^0.4.0:
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+  integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
+
+chardet@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+  integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
+ci-info@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+  integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+circular-json@^0.3.1:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
+  integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
+
+class-utils@^0.3.5:
+  version "0.3.6"
+  resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+  integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+  dependencies:
+    arr-union "^3.1.0"
+    define-property "^0.2.5"
+    isobject "^3.0.0"
+    static-extend "^0.1.1"
+
+cli-cursor@^2.0.0, cli-cursor@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+  integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+  dependencies:
+    restore-cursor "^2.0.0"
+
+cli-truncate@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
+  integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=
+  dependencies:
+    slice-ansi "0.0.4"
+    string-width "^1.0.1"
+
+cli-width@^2.0.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
+  integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
+
+cliui@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+  integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
+  dependencies:
+    string-width "^1.0.1"
+    strip-ansi "^3.0.1"
+    wrap-ansi "^2.0.0"
+
+co@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+  integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
+code-point-at@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+  integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collection-visit@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+  integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+  dependencies:
+    map-visit "^1.0.0"
+    object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+  version "1.9.3"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+  dependencies:
+    color-name "1.1.3"
+
+color-name@1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+  integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+commander@^2.11.0, commander@^2.14.1, commander@^2.9.0:
+  version "2.20.3"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+common-tags@^1.4.0:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937"
+  integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==
+
+component-emitter@^1.2.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+  integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.6.0:
+  version "1.6.2"
+  resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+  integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+  dependencies:
+    buffer-from "^1.0.0"
+    inherits "^2.0.3"
+    readable-stream "^2.2.2"
+    typedarray "^0.0.6"
+
+confusing-browser-globals@^1.0.5:
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd"
+  integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==
+
+contains-path@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+  integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+
+copy-descriptor@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+  integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-js-pure@^3.0.0:
+  version "3.6.5"
+  resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813"
+  integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==
+
+core-js@^2.4.0:
+  version "2.6.11"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
+  integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
+
+core-util-is@~1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cosmiconfig@^5.0.7, cosmiconfig@^5.2.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+  integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+  dependencies:
+    import-fresh "^2.0.0"
+    is-directory "^0.3.1"
+    js-yaml "^3.13.1"
+    parse-json "^4.0.0"
+
+cross-spawn@^5.0.1, cross-spawn@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+  integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+  dependencies:
+    lru-cache "^4.0.1"
+    shebang-command "^1.2.0"
+    which "^1.2.9"
+
+cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+  version "6.0.5"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+  integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+  dependencies:
+    nice-try "^1.0.4"
+    path-key "^2.0.1"
+    semver "^5.5.0"
+    shebang-command "^1.2.0"
+    which "^1.2.9"
+
+damerau-levenshtein@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791"
+  integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==
+
+date-fns@^1.27.2:
+  version "1.30.1"
+  resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
+  integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
+
+debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
+  version "2.6.9"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+  dependencies:
+    ms "2.0.0"
+
+debug@^3.1.0:
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+  integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+  dependencies:
+    ms "^2.1.1"
+
+debug@^4.0.1, debug@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+  integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+  dependencies:
+    ms "^2.1.1"
+
+decamelize@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+  integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+  integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+dedent@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+  integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+
+deep-equal@^1.0.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
+  integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
+  dependencies:
+    is-arguments "^1.0.4"
+    is-date-object "^1.0.1"
+    is-regex "^1.0.4"
+    object-is "^1.0.1"
+    object-keys "^1.1.1"
+    regexp.prototype.flags "^1.2.0"
+
+deep-is@~0.1.3:
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+  integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+define-properties@^1.1.2, define-properties@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+  integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+  dependencies:
+    object-keys "^1.0.12"
+
+define-property@^0.2.5:
+  version "0.2.5"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+  integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+  dependencies:
+    is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+  integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+  dependencies:
+    is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+  integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+  dependencies:
+    is-descriptor "^1.0.2"
+    isobject "^3.0.1"
+
+del@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+  integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=
+  dependencies:
+    globby "^6.1.0"
+    is-path-cwd "^1.0.0"
+    is-path-in-cwd "^1.0.0"
+    p-map "^1.1.1"
+    pify "^3.0.0"
+    rimraf "^2.2.8"
+
+dlv@^1.1.0:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
+  integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
+
+docopt@^0.6.2:
+  version "0.6.2"
+  resolved "https://registry.yarnpkg.com/docopt/-/docopt-0.6.2.tgz#b28e9e2220da5ec49f7ea5bb24a47787405eeb11"
+  integrity sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=
+
+doctrine@1.5.0:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+  integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+  dependencies:
+    esutils "^2.0.2"
+    isarray "^1.0.0"
+
+doctrine@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+  integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+  dependencies:
+    esutils "^2.0.2"
+
+doctrine@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+  dependencies:
+    esutils "^2.0.2"
+
+elegant-spinner@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
+  integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=
+
+emoji-regex@^7.0.1, emoji-regex@^7.0.2:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+  integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+end-of-stream@^1.1.0:
+  version "1.4.4"
+  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+  integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+  dependencies:
+    once "^1.4.0"
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+  dependencies:
+    is-arrayish "^0.2.1"
+
+es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5:
+  version "1.17.5"
+  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9"
+  integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==
+  dependencies:
+    es-to-primitive "^1.2.1"
+    function-bind "^1.1.1"
+    has "^1.0.3"
+    has-symbols "^1.0.1"
+    is-callable "^1.1.5"
+    is-regex "^1.0.5"
+    object-inspect "^1.7.0"
+    object-keys "^1.1.1"
+    object.assign "^4.1.0"
+    string.prototype.trimleft "^2.1.1"
+    string.prototype.trimright "^2.1.1"
+
+es-to-primitive@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+  integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+  dependencies:
+    is-callable "^1.1.4"
+    is-date-object "^1.0.1"
+    is-symbol "^1.0.2"
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+  integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+eslint-config-airbnb-base@^13.2.0:
+  version "13.2.0"
+  resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz#f6ea81459ff4dec2dda200c35f1d8f7419d57943"
+  integrity sha512-1mg/7eoB4AUeB0X1c/ho4vb2gYkNH8Trr/EgCT/aGmKhhG+F6vF5s8+iRBlWAzFIAphxIdp3YfEKgEl0f9Xg+w==
+  dependencies:
+    confusing-browser-globals "^1.0.5"
+    object.assign "^4.1.0"
+    object.entries "^1.1.0"
+
+eslint-config-airbnb@^17.1.0:
+  version "17.1.1"
+  resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.1.1.tgz#2272e0b86bb1e2b138cdf88d07a3b6f4cda3d626"
+  integrity sha512-xCu//8a/aWqagKljt+1/qAM62BYZeNq04HmdevG5yUGWpja0I/xhqd6GdLRch5oetEGFiJAnvtGuTEAese53Qg==
+  dependencies:
+    eslint-config-airbnb-base "^13.2.0"
+    object.assign "^4.1.0"
+    object.entries "^1.1.0"
+
+eslint-config-prettier@^3.3.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-3.6.0.tgz#8ca3ffac4bd6eeef623a0651f9d754900e3ec217"
+  integrity sha512-ixJ4U3uTLXwJts4rmSVW/lMXjlGwCijhBJHk8iVqKKSifeI0qgFEfWl8L63isfc8Od7EiBALF6BX3jKLluf/jQ==
+  dependencies:
+    get-stdin "^6.0.0"
+
+eslint-config-standard@^12.0.0:
+  version "12.0.0"
+  resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz#638b4c65db0bd5a41319f96bba1f15ddad2107d9"
+  integrity sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==
+
+eslint-import-resolver-node@^0.3.2:
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404"
+  integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==
+  dependencies:
+    debug "^2.6.9"
+    resolve "^1.13.1"
+
+eslint-module-utils@^2.4.1:
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
+  integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
+  dependencies:
+    debug "^2.6.9"
+    pkg-dir "^2.0.0"
+
+eslint-plugin-es@^1.3.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz#12acae0f4953e76ba444bfd1b2271081ac620998"
+  integrity sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==
+  dependencies:
+    eslint-utils "^1.4.2"
+    regexpp "^2.0.1"
+
+eslint-plugin-import@^2.14.0:
+  version "2.20.2"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d"
+  integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==
+  dependencies:
+    array-includes "^3.0.3"
+    array.prototype.flat "^1.2.1"
+    contains-path "^0.1.0"
+    debug "^2.6.9"
+    doctrine "1.5.0"
+    eslint-import-resolver-node "^0.3.2"
+    eslint-module-utils "^2.4.1"
+    has "^1.0.3"
+    minimatch "^3.0.4"
+    object.values "^1.1.0"
+    read-pkg-up "^2.0.0"
+    resolve "^1.12.0"
+
+eslint-plugin-jsx-a11y@^6.1.2:
+  version "6.2.3"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa"
+  integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==
+  dependencies:
+    "@babel/runtime" "^7.4.5"
+    aria-query "^3.0.0"
+    array-includes "^3.0.3"
+    ast-types-flow "^0.0.7"
+    axobject-query "^2.0.2"
+    damerau-levenshtein "^1.0.4"
+    emoji-regex "^7.0.2"
+    has "^1.0.3"
+    jsx-ast-utils "^2.2.1"
+
+eslint-plugin-node@^8.0.0:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz#55ae3560022863d141fa7a11799532340a685964"
+  integrity sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==
+  dependencies:
+    eslint-plugin-es "^1.3.1"
+    eslint-utils "^1.3.1"
+    ignore "^5.0.2"
+    minimatch "^3.0.4"
+    resolve "^1.8.1"
+    semver "^5.5.0"
+
+eslint-plugin-promise@^4.0.1:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a"
+  integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==
+
+eslint-plugin-react@^7.12.2:
+  version "7.20.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz#f98712f0a5e57dfd3e5542ef0604b8739cd47be3"
+  integrity sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA==
+  dependencies:
+    array-includes "^3.1.1"
+    doctrine "^2.1.0"
+    has "^1.0.3"
+    jsx-ast-utils "^2.2.3"
+    object.entries "^1.1.1"
+    object.fromentries "^2.0.2"
+    object.values "^1.1.1"
+    prop-types "^15.7.2"
+    resolve "^1.15.1"
+    string.prototype.matchall "^4.0.2"
+    xregexp "^4.3.0"
+
+eslint-plugin-standard@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz#ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4"
+  integrity sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==
+
+eslint-scope@^3.7.1:
+  version "3.7.3"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535"
+  integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==
+  dependencies:
+    esrecurse "^4.1.0"
+    estraverse "^4.1.1"
+
+eslint-scope@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+  integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+  dependencies:
+    esrecurse "^4.1.0"
+    estraverse "^4.1.1"
+
+eslint-utils@^1.3.1, eslint-utils@^1.4.2:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+  integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
+  dependencies:
+    eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
+  integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
+
+eslint@^4.0.0, eslint@^4.5.0:
+  version "4.19.1"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300"
+  integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==
+  dependencies:
+    ajv "^5.3.0"
+    babel-code-frame "^6.22.0"
+    chalk "^2.1.0"
+    concat-stream "^1.6.0"
+    cross-spawn "^5.1.0"
+    debug "^3.1.0"
+    doctrine "^2.1.0"
+    eslint-scope "^3.7.1"
+    eslint-visitor-keys "^1.0.0"
+    espree "^3.5.4"
+    esquery "^1.0.0"
+    esutils "^2.0.2"
+    file-entry-cache "^2.0.0"
+    functional-red-black-tree "^1.0.1"
+    glob "^7.1.2"
+    globals "^11.0.1"
+    ignore "^3.3.3"
+    imurmurhash "^0.1.4"
+    inquirer "^3.0.6"
+    is-resolvable "^1.0.0"
+    js-yaml "^3.9.1"
+    json-stable-stringify-without-jsonify "^1.0.1"
+    levn "^0.3.0"
+    lodash "^4.17.4"
+    minimatch "^3.0.2"
+    mkdirp "^0.5.1"
+    natural-compare "^1.4.0"
+    optionator "^0.8.2"
+    path-is-inside "^1.0.2"
+    pluralize "^7.0.0"
+    progress "^2.0.0"
+    regexpp "^1.0.1"
+    require-uncached "^1.0.3"
+    semver "^5.3.0"
+    strip-ansi "^4.0.0"
+    strip-json-comments "~2.0.1"
+    table "4.0.2"
+    text-table "~0.2.0"
+
+eslint@^5.11.1:
+  version "5.16.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea"
+  integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    ajv "^6.9.1"
+    chalk "^2.1.0"
+    cross-spawn "^6.0.5"
+    debug "^4.0.1"
+    doctrine "^3.0.0"
+    eslint-scope "^4.0.3"
+    eslint-utils "^1.3.1"
+    eslint-visitor-keys "^1.0.0"
+    espree "^5.0.1"
+    esquery "^1.0.1"
+    esutils "^2.0.2"
+    file-entry-cache "^5.0.1"
+    functional-red-black-tree "^1.0.1"
+    glob "^7.1.2"
+    globals "^11.7.0"
+    ignore "^4.0.6"
+    import-fresh "^3.0.0"
+    imurmurhash "^0.1.4"
+    inquirer "^6.2.2"
+    js-yaml "^3.13.0"
+    json-stable-stringify-without-jsonify "^1.0.1"
+    levn "^0.3.0"
+    lodash "^4.17.11"
+    minimatch "^3.0.4"
+    mkdirp "^0.5.1"
+    natural-compare "^1.4.0"
+    optionator "^0.8.2"
+    path-is-inside "^1.0.2"
+    progress "^2.0.0"
+    regexpp "^2.0.1"
+    semver "^5.5.1"
+    strip-ansi "^4.0.0"
+    strip-json-comments "^2.0.1"
+    table "^5.2.3"
+    text-table "^0.2.0"
+
+espree@^3.5.2, espree@^3.5.4:
+  version "3.5.4"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
+  integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
+  dependencies:
+    acorn "^5.5.0"
+    acorn-jsx "^3.0.0"
+
+espree@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
+  integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==
+  dependencies:
+    acorn "^6.0.7"
+    acorn-jsx "^5.0.0"
+    eslint-visitor-keys "^1.0.0"
+
+esprima@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.0.0, esquery@^1.0.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
+  integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
+  dependencies:
+    estraverse "^5.1.0"
+
+esrecurse@^4.1.0:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+  integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+  dependencies:
+    estraverse "^4.1.0"
+
+estraverse@^4.1.0, estraverse@^4.1.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
+  integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
+
+esutils@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+execa@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+  integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
+  dependencies:
+    cross-spawn "^5.0.1"
+    get-stream "^3.0.0"
+    is-stream "^1.1.0"
+    npm-run-path "^2.0.0"
+    p-finally "^1.0.0"
+    signal-exit "^3.0.0"
+    strip-eof "^1.0.0"
+
+execa@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+  integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+  dependencies:
+    cross-spawn "^6.0.0"
+    get-stream "^4.0.0"
+    is-stream "^1.1.0"
+    npm-run-path "^2.0.0"
+    p-finally "^1.0.0"
+    signal-exit "^3.0.0"
+    strip-eof "^1.0.0"
+
+expand-brackets@^2.1.4:
+  version "2.1.4"
+  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+  integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+  dependencies:
+    debug "^2.3.3"
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    posix-character-classes "^0.1.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+extend-shallow@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+  integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+  dependencies:
+    is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+  integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+  dependencies:
+    assign-symbols "^1.0.0"
+    is-extendable "^1.0.1"
+
+external-editor@^2.0.4:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
+  integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
+  dependencies:
+    chardet "^0.4.0"
+    iconv-lite "^0.4.17"
+    tmp "^0.0.33"
+
+external-editor@^3.0.3:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+  integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+  dependencies:
+    chardet "^0.7.0"
+    iconv-lite "^0.4.24"
+    tmp "^0.0.33"
+
+extglob@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+  integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+  dependencies:
+    array-unique "^0.3.2"
+    define-property "^1.0.0"
+    expand-brackets "^2.1.4"
+    extend-shallow "^2.0.1"
+    fragment-cache "^0.2.1"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+fast-deep-equal@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
+  integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=
+
+fast-deep-equal@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
+  integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
+
+fast-json-stable-stringify@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@~2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+  integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+figures@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+  integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
+  dependencies:
+    escape-string-regexp "^1.0.5"
+    object-assign "^4.1.0"
+
+figures@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+  integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+  dependencies:
+    escape-string-regexp "^1.0.5"
+
+file-entry-cache@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+  integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
+  dependencies:
+    flat-cache "^1.2.1"
+    object-assign "^4.0.1"
+
+file-entry-cache@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+  integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+  dependencies:
+    flat-cache "^2.0.1"
+
+fill-range@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+  integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-number "^3.0.0"
+    repeat-string "^1.6.1"
+    to-regex-range "^2.1.0"
+
+find-up@^2.0.0, find-up@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+  integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+  dependencies:
+    locate-path "^2.0.0"
+
+find-up@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+  integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+  dependencies:
+    locate-path "^3.0.0"
+
+flat-cache@^1.2.1:
+  version "1.3.4"
+  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
+  integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==
+  dependencies:
+    circular-json "^0.3.1"
+    graceful-fs "^4.1.2"
+    rimraf "~2.6.2"
+    write "^0.2.1"
+
+flat-cache@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+  integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+  dependencies:
+    flatted "^2.0.0"
+    rimraf "2.6.3"
+    write "1.0.3"
+
+flatted@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
+  integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
+
+fn-name@~2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7"
+  integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=
+
+for-in@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+  integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+fragment-cache@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+  integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+  dependencies:
+    map-cache "^0.2.2"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+function-bind@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+functional-red-black-tree@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+  integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+g-status@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97"
+  integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==
+  dependencies:
+    arrify "^1.0.1"
+    matcher "^1.0.0"
+    simple-git "^1.85.0"
+
+get-caller-file@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+  integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+
+get-own-enumerable-property-symbols@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
+  integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
+
+get-stdin@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+  integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=
+
+get-stdin@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
+  integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
+
+get-stream@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+  integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-stream@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+  integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+  dependencies:
+    pump "^3.0.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+  integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
+  version "7.1.6"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+  integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.4"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+glob@~7.0.6:
+  version "7.0.6"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a"
+  integrity sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.2"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+globals@^11.0.1, globals@^11.1.0, globals@^11.7.0:
+  version "11.12.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globby@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+  integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
+  dependencies:
+    array-union "^1.0.1"
+    glob "^7.0.3"
+    object-assign "^4.0.1"
+    pify "^2.0.0"
+    pinkie-promise "^2.0.0"
+
+graceful-fs@^4.1.2:
+  version "4.2.4"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
+  integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
+
+has-ansi@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+  integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+  dependencies:
+    ansi-regex "^2.0.0"
+
+has-flag@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+  integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=
+
+has-flag@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+  integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-symbols@^1.0.0, has-symbols@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+  integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
+
+has-value@^0.3.1:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+  integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+  dependencies:
+    get-value "^2.0.3"
+    has-values "^0.1.4"
+    isobject "^2.0.0"
+
+has-value@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+  integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+  dependencies:
+    get-value "^2.0.6"
+    has-values "^1.0.0"
+    isobject "^3.0.0"
+
+has-values@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+  integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+  integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+  dependencies:
+    is-number "^3.0.0"
+    kind-of "^4.0.0"
+
+has@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  dependencies:
+    function-bind "^1.1.1"
+
+hosted-git-info@^2.1.4:
+  version "2.8.8"
+  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
+  integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
+
+husky@^1.3.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0"
+  integrity sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==
+  dependencies:
+    cosmiconfig "^5.0.7"
+    execa "^1.0.0"
+    find-up "^3.0.0"
+    get-stdin "^6.0.0"
+    is-ci "^2.0.0"
+    pkg-dir "^3.0.0"
+    please-upgrade-node "^3.1.1"
+    read-pkg "^4.0.1"
+    run-node "^1.0.0"
+    slash "^2.0.0"
+
+iconv-lite@^0.4.17, iconv-lite@^0.4.24:
+  version "0.4.24"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3"
+
+ignore@^3.2.7, ignore@^3.3.3:
+  version "3.3.10"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+  integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+
+ignore@^4.0.6:
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+  integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.0.2:
+  version "5.1.4"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf"
+  integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==
+
+import-fresh@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+  integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+  dependencies:
+    caller-path "^2.0.0"
+    resolve-from "^3.0.0"
+
+import-fresh@^3.0.0:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
+  integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
+  dependencies:
+    parent-module "^1.0.0"
+    resolve-from "^4.0.0"
+
+imurmurhash@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+  integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^3.0.0, indent-string@^3.1.0, indent-string@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
+  integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+  dependencies:
+    once "^1.3.0"
+    wrappy "1"
+
+inherits@2, inherits@^2.0.3, inherits@~2.0.3:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inquirer@^3.0.6:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
+  integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==
+  dependencies:
+    ansi-escapes "^3.0.0"
+    chalk "^2.0.0"
+    cli-cursor "^2.1.0"
+    cli-width "^2.0.0"
+    external-editor "^2.0.4"
+    figures "^2.0.0"
+    lodash "^4.3.0"
+    mute-stream "0.0.7"
+    run-async "^2.2.0"
+    rx-lite "^4.0.8"
+    rx-lite-aggregates "^4.0.8"
+    string-width "^2.1.0"
+    strip-ansi "^4.0.0"
+    through "^2.3.6"
+
+inquirer@^6.2.2:
+  version "6.5.2"
+  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
+  integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
+  dependencies:
+    ansi-escapes "^3.2.0"
+    chalk "^2.4.2"
+    cli-cursor "^2.1.0"
+    cli-width "^2.0.0"
+    external-editor "^3.0.3"
+    figures "^2.0.0"
+    lodash "^4.17.12"
+    mute-stream "0.0.7"
+    run-async "^2.2.0"
+    rxjs "^6.4.0"
+    string-width "^2.1.0"
+    strip-ansi "^5.1.0"
+    through "^2.3.6"
+
+internal-slot@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3"
+  integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==
+  dependencies:
+    es-abstract "^1.17.0-next.1"
+    has "^1.0.3"
+    side-channel "^1.0.2"
+
+invert-kv@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+  integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
+
+is-accessor-descriptor@^0.1.6:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+  integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+  dependencies:
+    kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+  integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+  dependencies:
+    kind-of "^6.0.0"
+
+is-arguments@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
+  integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
+
+is-arrayish@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+  integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-buffer@^1.1.5:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-callable@^1.1.4, is-callable@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
+  integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
+
+is-ci@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+  integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+  dependencies:
+    ci-info "^2.0.0"
+
+is-data-descriptor@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+  integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+  dependencies:
+    kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+  integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+  dependencies:
+    kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
+  integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
+
+is-descriptor@^0.1.0:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+  integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+  dependencies:
+    is-accessor-descriptor "^0.1.6"
+    is-data-descriptor "^0.1.4"
+    kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+  integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+  dependencies:
+    is-accessor-descriptor "^1.0.0"
+    is-data-descriptor "^1.0.0"
+    kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+  integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+  integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+  integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+  dependencies:
+    is-plain-object "^2.0.4"
+
+is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-fullwidth-code-point@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+  integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+  dependencies:
+    number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+  integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-glob@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+  integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+is-number@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+  integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+  dependencies:
+    kind-of "^3.0.2"
+
+is-obj@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+  integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-observable@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e"
+  integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==
+  dependencies:
+    symbol-observable "^1.1.0"
+
+is-path-cwd@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+  integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
+
+is-path-in-cwd@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
+  integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==
+  dependencies:
+    is-path-inside "^1.0.0"
+
+is-path-inside@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+  integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
+  dependencies:
+    path-is-inside "^1.0.1"
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+  dependencies:
+    isobject "^3.0.1"
+
+is-promise@^2.1.0:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
+  integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
+
+is-regex@^1.0.4, is-regex@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
+  integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==
+  dependencies:
+    has "^1.0.3"
+
+is-regexp@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+  integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
+is-resolvable@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+  integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
+
+is-stream@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+  integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-string@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
+  integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
+
+is-symbol@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
+  integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
+  dependencies:
+    has-symbols "^1.0.1"
+
+is-windows@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+  integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+  integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+  dependencies:
+    isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+  integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-tokens@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+  integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.9.1:
+  version "3.13.1"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
+  integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
+  dependencies:
+    argparse "^1.0.7"
+    esprima "^4.0.0"
+
+jsesc@^2.5.1:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+  integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+json-parse-better-errors@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+  integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.3.0:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+  integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=
+
+json-schema-traverse@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+  integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f"
+  integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==
+  dependencies:
+    array-includes "^3.0.3"
+    object.assign "^4.1.0"
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+  integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+  dependencies:
+    is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+  integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+  dependencies:
+    is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+  integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+  integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+lcid@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+  integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
+  dependencies:
+    invert-kv "^1.0.0"
+
+levn@^0.3.0, levn@~0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+  integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+  dependencies:
+    prelude-ls "~1.1.2"
+    type-check "~0.3.2"
+
+lint-staged@^8.1.0:
+  version "8.2.1"
+  resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.2.1.tgz#752fcf222d9d28f323a3b80f1e668f3654ff221f"
+  integrity sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==
+  dependencies:
+    chalk "^2.3.1"
+    commander "^2.14.1"
+    cosmiconfig "^5.2.0"
+    debug "^3.1.0"
+    dedent "^0.7.0"
+    del "^3.0.0"
+    execa "^1.0.0"
+    g-status "^2.0.2"
+    is-glob "^4.0.0"
+    is-windows "^1.0.2"
+    listr "^0.14.2"
+    listr-update-renderer "^0.5.0"
+    lodash "^4.17.11"
+    log-symbols "^2.2.0"
+    micromatch "^3.1.8"
+    npm-which "^3.0.1"
+    p-map "^1.1.1"
+    path-is-inside "^1.0.2"
+    pify "^3.0.0"
+    please-upgrade-node "^3.0.2"
+    staged-git-files "1.1.2"
+    string-argv "^0.0.2"
+    stringify-object "^3.2.2"
+    yup "^0.27.0"
+
+listr-silent-renderer@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"
+  integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=
+
+listr-update-renderer@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2"
+  integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==
+  dependencies:
+    chalk "^1.1.3"
+    cli-truncate "^0.2.1"
+    elegant-spinner "^1.0.1"
+    figures "^1.7.0"
+    indent-string "^3.0.0"
+    log-symbols "^1.0.2"
+    log-update "^2.3.0"
+    strip-ansi "^3.0.1"
+
+listr-verbose-renderer@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db"
+  integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==
+  dependencies:
+    chalk "^2.4.1"
+    cli-cursor "^2.1.0"
+    date-fns "^1.27.2"
+    figures "^2.0.0"
+
+listr@^0.14.2:
+  version "0.14.3"
+  resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586"
+  integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==
+  dependencies:
+    "@samverschueren/stream-to-observable" "^0.3.0"
+    is-observable "^1.1.0"
+    is-promise "^2.1.0"
+    is-stream "^1.1.0"
+    listr-silent-renderer "^1.1.1"
+    listr-update-renderer "^0.5.0"
+    listr-verbose-renderer "^0.5.0"
+    p-map "^2.0.0"
+    rxjs "^6.3.3"
+
+load-json-file@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+  integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+  dependencies:
+    graceful-fs "^4.1.2"
+    parse-json "^2.2.0"
+    pify "^2.0.0"
+    strip-bom "^3.0.0"
+
+locate-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+  integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+  dependencies:
+    p-locate "^2.0.0"
+    path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+  integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+  dependencies:
+    p-locate "^3.0.0"
+    path-exists "^3.0.0"
+
+lodash.memoize@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+  integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+
+lodash.merge@^4.6.0:
+  version "4.6.2"
+  resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+  integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+lodash.unescape@4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
+  integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
+
+lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.3.0:
+  version "4.17.15"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+  integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
+log-symbols@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
+  integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=
+  dependencies:
+    chalk "^1.0.0"
+
+log-symbols@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
+  integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
+  dependencies:
+    chalk "^2.0.1"
+
+log-update@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708"
+  integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg=
+  dependencies:
+    ansi-escapes "^3.0.0"
+    cli-cursor "^2.0.0"
+    wrap-ansi "^3.0.1"
+
+loglevel-colored-level-prefix@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz#6a40218fdc7ae15fc76c3d0f3e676c465388603e"
+  integrity sha1-akAhj9x64V/HbD0PPmdsRlOIYD4=
+  dependencies:
+    chalk "^1.1.3"
+    loglevel "^1.4.1"
+
+loglevel@^1.4.1:
+  version "1.6.8"
+  resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171"
+  integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==
+
+loose-envify@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+  integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+  dependencies:
+    js-tokens "^3.0.0 || ^4.0.0"
+
+lru-cache@^4.0.1:
+  version "4.1.5"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+  dependencies:
+    pseudomap "^1.0.2"
+    yallist "^2.1.2"
+
+make-plural@^4.1.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-4.3.0.tgz#f23de08efdb0cac2e0c9ba9f315b0dff6b4c2735"
+  integrity sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA==
+  optionalDependencies:
+    minimist "^1.2.0"
+
+map-cache@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+  integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-obj@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9"
+  integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk=
+
+map-visit@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+  integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+  dependencies:
+    object-visit "^1.0.0"
+
+matcher@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2"
+  integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==
+  dependencies:
+    escape-string-regexp "^1.0.4"
+
+mem@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
+  integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=
+  dependencies:
+    mimic-fn "^1.0.0"
+
+messageformat-parser@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/messageformat-parser/-/messageformat-parser-1.1.0.tgz#13ba2250a76bbde8e0fca0dbb3475f95c594a90a"
+  integrity sha512-Hwem6G3MsKDLS1FtBRGIs8T50P1Q00r3srS6QJePCFbad9fq0nYxwf3rnU2BreApRGhmpKMV7oZI06Sy1c9TPA==
+
+messageformat@^1.0.2:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/messageformat/-/messageformat-1.1.1.tgz#ceaa2e6c86929d4807058275a7372b1bd963bdf6"
+  integrity sha512-Q0uXcDtF5pEZsVSyhzDOGgZZK6ykN79VY9CwU3Nv0gsqx62BjdJW0MT+63UkHQ4exe3HE33ZlxR2/YwoJarRTg==
+  dependencies:
+    glob "~7.0.6"
+    make-plural "^4.1.1"
+    messageformat-parser "^1.1.0"
+    nopt "~3.0.6"
+    reserved-words "^0.1.2"
+
+micromatch@^3.1.8:
+  version "3.1.10"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+  integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+  dependencies:
+    arr-diff "^4.0.0"
+    array-unique "^0.3.2"
+    braces "^2.3.1"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    extglob "^2.0.4"
+    fragment-cache "^0.2.1"
+    kind-of "^6.0.2"
+    nanomatch "^1.2.9"
+    object.pick "^1.3.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.2"
+
+mimic-fn@^1.0.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+  integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+minimatch@^3.0.2, minimatch@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimist@^1.2.0, minimist@^1.2.5:
+  version "1.2.5"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+  integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+mixin-deep@^1.2.0:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+  integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+  dependencies:
+    for-in "^1.0.2"
+    is-extendable "^1.0.1"
+
+mkdirp@^0.5.1:
+  version "0.5.5"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+  integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+  dependencies:
+    minimist "^1.2.5"
+
+ms@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+  integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+mute-stream@0.0.7:
+  version "0.0.7"
+  resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+  integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+
+nanomatch@^1.2.9:
+  version "1.2.13"
+  resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+  integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+  dependencies:
+    arr-diff "^4.0.0"
+    array-unique "^0.3.2"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    fragment-cache "^0.2.1"
+    is-windows "^1.0.2"
+    kind-of "^6.0.2"
+    object.pick "^1.3.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+natural-compare@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+  integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+nice-try@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+nopt@~3.0.6:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+  integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
+  dependencies:
+    abbrev "1"
+
+normalize-package-data@^2.3.2:
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+  integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+  dependencies:
+    hosted-git-info "^2.1.4"
+    resolve "^1.10.0"
+    semver "2 || 3 || 4 || 5"
+    validate-npm-package-license "^3.0.1"
+
+npm-path@^2.0.2:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64"
+  integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==
+  dependencies:
+    which "^1.2.10"
+
+npm-run-path@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+  integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+  dependencies:
+    path-key "^2.0.0"
+
+npm-which@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa"
+  integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=
+  dependencies:
+    commander "^2.9.0"
+    npm-path "^2.0.2"
+    which "^1.2.10"
+
+number-is-nan@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+  integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+  integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+  integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+  dependencies:
+    copy-descriptor "^0.1.0"
+    define-property "^0.2.5"
+    kind-of "^3.0.3"
+
+object-inspect@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
+  integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
+
+object-is@^1.0.1:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6"
+  integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.5"
+
+object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-visit@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+  integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+  dependencies:
+    isobject "^3.0.0"
+
+object.assign@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+  integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+  dependencies:
+    define-properties "^1.1.2"
+    function-bind "^1.1.1"
+    has-symbols "^1.0.0"
+    object-keys "^1.0.11"
+
+object.entries@^1.1.0, object.entries@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b"
+  integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.0-next.1"
+    function-bind "^1.1.1"
+    has "^1.0.3"
+
+object.fromentries@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9"
+  integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.0-next.1"
+    function-bind "^1.1.1"
+    has "^1.0.3"
+
+object.pick@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+  integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+  dependencies:
+    isobject "^3.0.1"
+
+object.values@^1.1.0, object.values@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
+  integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.0-next.1"
+    function-bind "^1.1.1"
+    has "^1.0.3"
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+  dependencies:
+    wrappy "1"
+
+onetime@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+  integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+  dependencies:
+    mimic-fn "^1.0.0"
+
+optionator@^0.8.2:
+  version "0.8.3"
+  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+  integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+  dependencies:
+    deep-is "~0.1.3"
+    fast-levenshtein "~2.0.6"
+    levn "~0.3.0"
+    prelude-ls "~1.1.2"
+    type-check "~0.3.2"
+    word-wrap "~1.2.3"
+
+os-locale@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
+  integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==
+  dependencies:
+    execa "^0.7.0"
+    lcid "^1.0.0"
+    mem "^1.1.0"
+
+os-tmpdir@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+  integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+p-finally@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+  integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-limit@^1.1.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+  integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+  dependencies:
+    p-try "^1.0.0"
+
+p-limit@^2.0.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+  dependencies:
+    p-try "^2.0.0"
+
+p-locate@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+  integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+  dependencies:
+    p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+  integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+  dependencies:
+    p-limit "^2.0.0"
+
+p-map@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+  integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
+
+p-map@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+  integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+
+p-try@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+  integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+parent-module@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+  integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+  dependencies:
+    callsites "^3.0.0"
+
+parse-json@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+  integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+  dependencies:
+    error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+  integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+  dependencies:
+    error-ex "^1.3.1"
+    json-parse-better-errors "^1.0.1"
+
+pascalcase@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+  integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-exists@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+  integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-is-absolute@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-is-inside@^1.0.1, path-is-inside@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+  integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+path-key@^2.0.0, path-key@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+  integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-parse@^1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+  integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-type@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+  integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+  dependencies:
+    pify "^2.0.0"
+
+pify@^2.0.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+  integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+  integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pinkie-promise@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+  integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+  dependencies:
+    pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+  integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pkg-dir@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+  integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+  dependencies:
+    find-up "^2.1.0"
+
+pkg-dir@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+  integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+  dependencies:
+    find-up "^3.0.0"
+
+please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
+  integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
+  dependencies:
+    semver-compare "^1.0.0"
+
+pluralize@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
+  integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
+
+posix-character-classes@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+  integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+prelude-ls@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+prettier-eslint-cli@^4.7.1:
+  version "4.7.1"
+  resolved "https://registry.yarnpkg.com/prettier-eslint-cli/-/prettier-eslint-cli-4.7.1.tgz#3d103c494baa4e80b99ad53e2b9db7620101859f"
+  integrity sha512-hQbsGaEVz97oBBcKdsJ46khv0kOGkMyWrXzcFOXW6X8UuetZ/j0yDJkNJgUTVc6PVFbbzBXk+qgd5vos9qzXPQ==
+  dependencies:
+    arrify "^1.0.1"
+    babel-runtime "^6.23.0"
+    boolify "^1.0.0"
+    camelcase-keys "^4.1.0"
+    chalk "2.3.0"
+    common-tags "^1.4.0"
+    eslint "^4.5.0"
+    find-up "^2.1.0"
+    get-stdin "^5.0.1"
+    glob "^7.1.1"
+    ignore "^3.2.7"
+    indent-string "^3.1.0"
+    lodash.memoize "^4.1.2"
+    loglevel-colored-level-prefix "^1.0.0"
+    messageformat "^1.0.2"
+    prettier-eslint "^8.5.0"
+    rxjs "^5.3.0"
+    yargs "10.0.3"
+
+prettier-eslint@^8.5.0:
+  version "8.8.2"
+  resolved "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-8.8.2.tgz#fcb29a48ab4524e234680797fe70e9d136ccaf0b"
+  integrity sha512-2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==
+  dependencies:
+    babel-runtime "^6.26.0"
+    common-tags "^1.4.0"
+    dlv "^1.1.0"
+    eslint "^4.0.0"
+    indent-string "^3.2.0"
+    lodash.merge "^4.6.0"
+    loglevel-colored-level-prefix "^1.0.0"
+    prettier "^1.7.0"
+    pretty-format "^23.0.1"
+    require-relative "^0.8.7"
+    typescript "^2.5.1"
+    typescript-eslint-parser "^16.0.0"
+    vue-eslint-parser "^2.0.2"
+
+prettier@^1.7.0:
+  version "1.19.1"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
+  integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
+
+pretty-format@^23.0.1:
+  version "23.6.0"
+  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760"
+  integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==
+  dependencies:
+    ansi-regex "^3.0.0"
+    ansi-styles "^3.2.0"
+
+process-nextick-args@~2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+progress@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+prop-types@^15.7.2:
+  version "15.7.2"
+  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+  integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+  dependencies:
+    loose-envify "^1.4.0"
+    object-assign "^4.1.1"
+    react-is "^16.8.1"
+
+property-expr@^1.5.0:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f"
+  integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==
+
+pseudomap@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+  integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+pump@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+  dependencies:
+    end-of-stream "^1.1.0"
+    once "^1.3.1"
+
+punycode@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+  integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+quick-lru@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
+  integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=
+
+ramda@^0.26.1:
+  version "0.26.1"
+  resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06"
+  integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==
+
+react-is@^16.8.1:
+  version "16.13.1"
+  resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+  integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+read-pkg-up@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+  integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+  dependencies:
+    find-up "^2.0.0"
+    read-pkg "^2.0.0"
+
+read-pkg@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+  integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+  dependencies:
+    load-json-file "^2.0.0"
+    normalize-package-data "^2.3.2"
+    path-type "^2.0.0"
+
+read-pkg@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237"
+  integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc=
+  dependencies:
+    normalize-package-data "^2.3.2"
+    parse-json "^4.0.0"
+    pify "^3.0.0"
+
+readable-stream@^2.2.2:
+  version "2.3.7"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+  integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.3"
+    isarray "~1.0.0"
+    process-nextick-args "~2.0.0"
+    safe-buffer "~5.1.1"
+    string_decoder "~1.1.1"
+    util-deprecate "~1.0.1"
+
+regenerator-runtime@^0.11.0:
+  version "0.11.1"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+  integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.13.4:
+  version "0.13.5"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697"
+  integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+  integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+  dependencies:
+    extend-shallow "^3.0.2"
+    safe-regex "^1.1.0"
+
+regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75"
+  integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.0-next.1"
+
+regexpp@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab"
+  integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==
+
+regexpp@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
+  integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+
+repeat-element@^1.1.2:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+  integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.6.1:
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+  integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+require-directory@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+  integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+  integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+
+require-relative@^0.8.7:
+  version "0.8.7"
+  resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de"
+  integrity sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=
+
+require-uncached@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+  integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
+  dependencies:
+    caller-path "^0.1.0"
+    resolve-from "^1.0.0"
+
+reserved-words@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1"
+  integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=
+
+resolve-from@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+  integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
+
+resolve-from@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+  integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-from@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-url@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+  integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.8.1:
+  version "1.17.0"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
+  integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
+  dependencies:
+    path-parse "^1.0.6"
+
+restore-cursor@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+  integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+  dependencies:
+    onetime "^2.0.0"
+    signal-exit "^3.0.2"
+
+ret@~0.1.10:
+  version "0.1.15"
+  resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+  integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+rimraf@2.6.3, rimraf@~2.6.2:
+  version "2.6.3"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+  integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+  dependencies:
+    glob "^7.1.3"
+
+rimraf@^2.2.8:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+  dependencies:
+    glob "^7.1.3"
+
+run-async@^2.2.0:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
+  integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+
+run-node@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e"
+  integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==
+
+rx-lite-aggregates@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
+  integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=
+  dependencies:
+    rx-lite "*"
+
+rx-lite@*, rx-lite@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
+  integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
+
+rxjs@^5.3.0:
+  version "5.5.12"
+  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc"
+  integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==
+  dependencies:
+    symbol-observable "1.0.1"
+
+rxjs@^6.3.3, rxjs@^6.4.0:
+  version "6.5.5"
+  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
+  integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==
+  dependencies:
+    tslib "^1.9.0"
+
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-regex@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+  integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+  dependencies:
+    ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3":
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+semver-compare@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+  integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
+
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.5.1:
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@5.5.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
+  integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
+
+set-blocking@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+  integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+  integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-extendable "^0.1.1"
+    is-plain-object "^2.0.3"
+    split-string "^3.0.1"
+
+shebang-command@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+  integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+  dependencies:
+    shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+  integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+side-channel@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947"
+  integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==
+  dependencies:
+    es-abstract "^1.17.0-next.1"
+    object-inspect "^1.7.0"
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
+  integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+
+simple-git@^1.85.0:
+  version "1.132.0"
+  resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.132.0.tgz#53ac4c5ec9e74e37c2fd461e23309f22fcdf09b1"
+  integrity sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==
+  dependencies:
+    debug "^4.0.1"
+
+slash@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+  integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
+slice-ansi@0.0.4:
+  version "0.0.4"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+  integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=
+
+slice-ansi@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
+  integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==
+  dependencies:
+    is-fullwidth-code-point "^2.0.0"
+
+slice-ansi@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+  integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+  dependencies:
+    ansi-styles "^3.2.0"
+    astral-regex "^1.0.0"
+    is-fullwidth-code-point "^2.0.0"
+
+snapdragon-node@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+  integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+  dependencies:
+    define-property "^1.0.0"
+    isobject "^3.0.0"
+    snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+  integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+  dependencies:
+    kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+  version "0.8.2"
+  resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+  integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+  dependencies:
+    base "^0.11.1"
+    debug "^2.2.0"
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    map-cache "^0.2.2"
+    source-map "^0.5.6"
+    source-map-resolve "^0.5.0"
+    use "^3.1.0"
+
+source-map-resolve@^0.5.0:
+  version "0.5.3"
+  resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+  integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+  dependencies:
+    atob "^2.1.2"
+    decode-uri-component "^0.2.0"
+    resolve-url "^0.2.1"
+    source-map-url "^0.4.0"
+    urix "^0.1.0"
+
+source-map-url@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+  integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.5.0, source-map@^0.5.6:
+  version "0.5.7"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+  integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+spdx-correct@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
+  integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
+  dependencies:
+    spdx-expression-parse "^3.0.0"
+    spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+  integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+
+spdx-expression-parse@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+  integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+  dependencies:
+    spdx-exceptions "^2.1.0"
+    spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+  version "3.0.5"
+  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
+  integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
+
+split-string@^3.0.1, split-string@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+  integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+  dependencies:
+    extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+staged-git-files@1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b"
+  integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==
+
+static-extend@^0.1.1:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+  integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+  dependencies:
+    define-property "^0.2.5"
+    object-copy "^0.1.0"
+
+string-argv@^0.0.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736"
+  integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY=
+
+string-width@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+  integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+  dependencies:
+    code-point-at "^1.0.0"
+    is-fullwidth-code-point "^1.0.0"
+    strip-ansi "^3.0.0"
+
+string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+  integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+  dependencies:
+    is-fullwidth-code-point "^2.0.0"
+    strip-ansi "^4.0.0"
+
+string-width@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+  integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+  dependencies:
+    emoji-regex "^7.0.1"
+    is-fullwidth-code-point "^2.0.0"
+    strip-ansi "^5.1.0"
+
+string.prototype.matchall@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e"
+  integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.0"
+    has-symbols "^1.0.1"
+    internal-slot "^1.0.2"
+    regexp.prototype.flags "^1.3.0"
+    side-channel "^1.0.2"
+
+string.prototype.trimend@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
+  integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.5"
+
+string.prototype.trimleft@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc"
+  integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.5"
+    string.prototype.trimstart "^1.0.0"
+
+string.prototype.trimright@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3"
+  integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.5"
+    string.prototype.trimend "^1.0.0"
+
+string.prototype.trimstart@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
+  integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.5"
+
+string_decoder@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+  dependencies:
+    safe-buffer "~5.1.0"
+
+stringify-object@^3.2.2:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+  integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+  dependencies:
+    get-own-enumerable-property-symbols "^3.0.0"
+    is-obj "^1.0.1"
+    is-regexp "^1.0.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+  integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+  dependencies:
+    ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+  integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+  dependencies:
+    ansi-regex "^3.0.0"
+
+strip-ansi@^5.1.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+  integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+  dependencies:
+    ansi-regex "^4.1.0"
+
+strip-bom@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+  integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-eof@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+  integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+  integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+supports-color@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+  integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^4.0.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
+  integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=
+  dependencies:
+    has-flag "^2.0.0"
+
+supports-color@^5.3.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+  dependencies:
+    has-flag "^3.0.0"
+
+symbol-observable@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
+  integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=
+
+symbol-observable@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+  integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+
+synchronous-promise@^2.0.6:
+  version "2.0.12"
+  resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.12.tgz#219934f23c19c9aa716276cf2e1f8d4e5b04d07f"
+  integrity sha512-rIDJiHmIK02tXU+eW1v6a7rNIIiMLm5JUF5Uj2fT6oLSulg7WNDVoqvkYqkFoJzf4v2gmTLppvzegdo9R+7h1Q==
+
+table@4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
+  integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==
+  dependencies:
+    ajv "^5.2.3"
+    ajv-keywords "^2.1.0"
+    chalk "^2.1.0"
+    lodash "^4.17.4"
+    slice-ansi "1.0.0"
+    string-width "^2.1.1"
+
+table@^5.2.3:
+  version "5.4.6"
+  resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
+  integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+  dependencies:
+    ajv "^6.10.2"
+    lodash "^4.17.14"
+    slice-ansi "^2.1.0"
+    string-width "^3.0.0"
+
+text-table@^0.2.0, text-table@~0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+  integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+through@^2.3.6:
+  version "2.3.8"
+  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+  integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+tmp@^0.0.33:
+  version "0.0.33"
+  resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+  integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+  dependencies:
+    os-tmpdir "~1.0.2"
+
+to-fast-properties@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+  integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+  integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+  dependencies:
+    kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+  integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+  dependencies:
+    is-number "^3.0.0"
+    repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+  integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+  dependencies:
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    regex-not "^1.0.2"
+    safe-regex "^1.1.0"
+
+toposort@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
+  integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=
+
+tslib@^1.9.0:
+  version "1.13.0"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
+  integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
+
+type-check@~0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+  integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+  dependencies:
+    prelude-ls "~1.1.2"
+
+typedarray@^0.0.6:
+  version "0.0.6"
+  resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+  integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+typescript-eslint-parser@^16.0.0:
+  version "16.0.1"
+  resolved "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-16.0.1.tgz#b40681c7043b222b9772748b700a000b241c031b"
+  integrity sha512-IKawLTu4A2xN3aN/cPLxvZ0bhxZHILGDKTZWvWNJ3sLNhJ3PjfMEDQmR2VMpdRPrmWOadgWXRwjLBzSA8AGsaQ==
+  dependencies:
+    lodash.unescape "4.0.1"
+    semver "5.5.0"
+
+typescript@^2.5.1:
+  version "2.9.2"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c"
+  integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==
+
+union-value@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+  integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+  dependencies:
+    arr-union "^3.1.0"
+    get-value "^2.0.6"
+    is-extendable "^0.1.1"
+    set-value "^2.0.1"
+
+unset-value@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+  integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+  dependencies:
+    has-value "^0.3.1"
+    isobject "^3.0.0"
+
+uri-js@^4.2.2:
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+  integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+  dependencies:
+    punycode "^2.1.0"
+
+urix@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+  integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+use@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+  integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+validate-npm-package-license@^3.0.1:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+  integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+  dependencies:
+    spdx-correct "^3.0.0"
+    spdx-expression-parse "^3.0.0"
+
+vue-eslint-parser@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1"
+  integrity sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==
+  dependencies:
+    debug "^3.1.0"
+    eslint-scope "^3.7.1"
+    eslint-visitor-keys "^1.0.0"
+    espree "^3.5.2"
+    esquery "^1.0.0"
+    lodash "^4.17.4"
+
+which-module@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+  integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@^1.2.10, which@^1.2.9:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+  dependencies:
+    isexe "^2.0.0"
+
+word-wrap@~1.2.3:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+wrap-ansi@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+  integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
+  dependencies:
+    string-width "^1.0.1"
+    strip-ansi "^3.0.1"
+
+wrap-ansi@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba"
+  integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=
+  dependencies:
+    string-width "^2.1.1"
+    strip-ansi "^4.0.0"
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write@1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+  integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+  dependencies:
+    mkdirp "^0.5.1"
+
+write@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+  integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
+  dependencies:
+    mkdirp "^0.5.1"
+
+xregexp@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50"
+  integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==
+  dependencies:
+    "@babel/runtime-corejs3" "^7.8.3"
+
+y18n@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+  integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
+
+yallist@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+  integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yargs-parser@^8.0.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
+  integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==
+  dependencies:
+    camelcase "^4.1.0"
+
+yargs@10.0.3:
+  version "10.0.3"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz#6542debd9080ad517ec5048fb454efe9e4d4aaae"
+  integrity sha512-DqBpQ8NAUX4GyPP/ijDGHsJya4tYqLQrjPr95HNsr1YwL3+daCfvBwg7+gIC6IdJhR2kATh3hb61vjzMWEtjdw==
+  dependencies:
+    cliui "^3.2.0"
+    decamelize "^1.1.1"
+    find-up "^2.1.0"
+    get-caller-file "^1.0.1"
+    os-locale "^2.0.0"
+    require-directory "^2.1.1"
+    require-main-filename "^1.0.1"
+    set-blocking "^2.0.0"
+    string-width "^2.0.0"
+    which-module "^2.0.0"
+    y18n "^3.2.1"
+    yargs-parser "^8.0.0"
+
+yup@^0.27.0:
+  version "0.27.0"
+  resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7"
+  integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==
+  dependencies:
+    "@babel/runtime" "^7.0.0"
+    fn-name "~2.0.1"
+    lodash "^4.17.11"
+    property-expr "^1.5.0"
+    synchronous-promise "^2.0.6"
+    toposort "^2.0.2"
diff --git a/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.nix b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.nix
new file mode 100644
index 000000000000..98c19af79fb5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.nix
@@ -0,0 +1,3973 @@
+{ fetchurl, fetchgit, linkFarm, runCommand, gnutar }: rec {
+  offline_cache = linkFarm "offline" packages;
+  packages = [
+    {
+      name = "_babel_code_frame___code_frame_7.8.3.tgz";
+      path = fetchurl {
+        name = "_babel_code_frame___code_frame_7.8.3.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz";
+        sha1 = "33e25903d7481181534e12ec0a25f16b6fcf419e";
+      };
+    }
+    {
+      name = "_babel_generator___generator_7.9.6.tgz";
+      path = fetchurl {
+        name = "_babel_generator___generator_7.9.6.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz";
+        sha1 = "5408c82ac5de98cda0d77d8124e99fa1f2170a43";
+      };
+    }
+    {
+      name = "_babel_helper_function_name___helper_function_name_7.9.5.tgz";
+      path = fetchurl {
+        name = "_babel_helper_function_name___helper_function_name_7.9.5.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz";
+        sha1 = "2b53820d35275120e1874a82e5aabe1376920a5c";
+      };
+    }
+    {
+      name = "_babel_helper_get_function_arity___helper_get_function_arity_7.8.3.tgz";
+      path = fetchurl {
+        name = "_babel_helper_get_function_arity___helper_get_function_arity_7.8.3.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz";
+        sha1 = "b894b947bd004381ce63ea1db9f08547e920abd5";
+      };
+    }
+    {
+      name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.8.3.tgz";
+      path = fetchurl {
+        name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.8.3.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz";
+        sha1 = "31a9f30070f91368a7182cf05f831781065fc7a9";
+      };
+    }
+    {
+      name = "_babel_helper_validator_identifier___helper_validator_identifier_7.9.5.tgz";
+      path = fetchurl {
+        name = "_babel_helper_validator_identifier___helper_validator_identifier_7.9.5.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz";
+        sha1 = "90977a8e6fbf6b431a7dc31752eee233bf052d80";
+      };
+    }
+    {
+      name = "_babel_highlight___highlight_7.9.0.tgz";
+      path = fetchurl {
+        name = "_babel_highlight___highlight_7.9.0.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz";
+        sha1 = "4e9b45ccb82b79607271b2979ad82c7b68163079";
+      };
+    }
+    {
+      name = "_babel_parser___parser_7.9.6.tgz";
+      path = fetchurl {
+        name = "_babel_parser___parser_7.9.6.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz";
+        sha1 = "3b1bbb30dabe600cd72db58720998376ff653bc7";
+      };
+    }
+    {
+      name = "_babel_runtime_corejs3___runtime_corejs3_7.9.6.tgz";
+      path = fetchurl {
+        name = "_babel_runtime_corejs3___runtime_corejs3_7.9.6.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.9.6.tgz";
+        sha1 = "67aded13fffbbc2cb93247388cf84d77a4be9a71";
+      };
+    }
+    {
+      name = "_babel_runtime___runtime_7.9.6.tgz";
+      path = fetchurl {
+        name = "_babel_runtime___runtime_7.9.6.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz";
+        sha1 = "a9102eb5cadedf3f31d08a9ecf294af7827ea29f";
+      };
+    }
+    {
+      name = "_babel_template___template_7.8.6.tgz";
+      path = fetchurl {
+        name = "_babel_template___template_7.8.6.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz";
+        sha1 = "86b22af15f828dfb086474f964dcc3e39c43ce2b";
+      };
+    }
+    {
+      name = "_babel_traverse___traverse_7.9.6.tgz";
+      path = fetchurl {
+        name = "_babel_traverse___traverse_7.9.6.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz";
+        sha1 = "5540d7577697bf619cc57b92aa0f1c231a94f442";
+      };
+    }
+    {
+      name = "_babel_types___types_7.9.6.tgz";
+      path = fetchurl {
+        name = "_babel_types___types_7.9.6.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz";
+        sha1 = "2c5502b427251e9de1bd2dff95add646d95cc9f7";
+      };
+    }
+    {
+      name = "_samverschueren_stream_to_observable___stream_to_observable_0.3.0.tgz";
+      path = fetchurl {
+        name = "_samverschueren_stream_to_observable___stream_to_observable_0.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz";
+        sha1 = "ecdf48d532c58ea477acfcab80348424f8d0662f";
+      };
+    }
+    {
+      name = "_yarnpkg_lockfile___lockfile_1.1.0.tgz";
+      path = fetchurl {
+        name = "_yarnpkg_lockfile___lockfile_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz";
+        sha1 = "e77a97fbd345b76d83245edcd17d393b1b41fb31";
+      };
+    }
+    {
+      name = "abbrev___abbrev_1.1.1.tgz";
+      path = fetchurl {
+        name = "abbrev___abbrev_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz";
+        sha1 = "f8f2c887ad10bf67f634f005b6987fed3179aac8";
+      };
+    }
+    {
+      name = "acorn_jsx___acorn_jsx_3.0.1.tgz";
+      path = fetchurl {
+        name = "acorn_jsx___acorn_jsx_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz";
+        sha1 = "afdf9488fb1ecefc8348f6fb22f464e32a58b36b";
+      };
+    }
+    {
+      name = "acorn_jsx___acorn_jsx_5.2.0.tgz";
+      path = fetchurl {
+        name = "acorn_jsx___acorn_jsx_5.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz";
+        sha1 = "4c66069173d6fdd68ed85239fc256226182b2ebe";
+      };
+    }
+    {
+      name = "acorn___acorn_3.3.0.tgz";
+      path = fetchurl {
+        name = "acorn___acorn_3.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz";
+        sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a";
+      };
+    }
+    {
+      name = "acorn___acorn_5.7.4.tgz";
+      path = fetchurl {
+        name = "acorn___acorn_5.7.4.tgz";
+        url  = "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz";
+        sha1 = "3e8d8a9947d0599a1796d10225d7432f4a4acf5e";
+      };
+    }
+    {
+      name = "acorn___acorn_6.4.1.tgz";
+      path = fetchurl {
+        name = "acorn___acorn_6.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz";
+        sha1 = "531e58ba3f51b9dacb9a6646ca4debf5b14ca474";
+      };
+    }
+    {
+      name = "ajv_keywords___ajv_keywords_2.1.1.tgz";
+      path = fetchurl {
+        name = "ajv_keywords___ajv_keywords_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz";
+        sha1 = "617997fc5f60576894c435f940d819e135b80762";
+      };
+    }
+    {
+      name = "ajv___ajv_5.5.2.tgz";
+      path = fetchurl {
+        name = "ajv___ajv_5.5.2.tgz";
+        url  = "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz";
+        sha1 = "73b5eeca3fab653e3d3f9422b341ad42205dc965";
+      };
+    }
+    {
+      name = "ajv___ajv_6.12.2.tgz";
+      path = fetchurl {
+        name = "ajv___ajv_6.12.2.tgz";
+        url  = "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz";
+        sha1 = "c629c5eced17baf314437918d2da88c99d5958cd";
+      };
+    }
+    {
+      name = "ansi_escapes___ansi_escapes_3.2.0.tgz";
+      path = fetchurl {
+        name = "ansi_escapes___ansi_escapes_3.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz";
+        sha1 = "8780b98ff9dbf5638152d1f1fe5c1d7b4442976b";
+      };
+    }
+    {
+      name = "ansi_regex___ansi_regex_2.1.1.tgz";
+      path = fetchurl {
+        name = "ansi_regex___ansi_regex_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz";
+        sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
+      };
+    }
+    {
+      name = "ansi_regex___ansi_regex_3.0.0.tgz";
+      path = fetchurl {
+        name = "ansi_regex___ansi_regex_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz";
+        sha1 = "ed0317c322064f79466c02966bddb605ab37d998";
+      };
+    }
+    {
+      name = "ansi_regex___ansi_regex_4.1.0.tgz";
+      path = fetchurl {
+        name = "ansi_regex___ansi_regex_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz";
+        sha1 = "8b9f8f08cf1acb843756a839ca8c7e3168c51997";
+      };
+    }
+    {
+      name = "ansi_styles___ansi_styles_2.2.1.tgz";
+      path = fetchurl {
+        name = "ansi_styles___ansi_styles_2.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz";
+        sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
+      };
+    }
+    {
+      name = "ansi_styles___ansi_styles_3.2.1.tgz";
+      path = fetchurl {
+        name = "ansi_styles___ansi_styles_3.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz";
+        sha1 = "41fbb20243e50b12be0f04b8dedbf07520ce841d";
+      };
+    }
+    {
+      name = "any_observable___any_observable_0.3.0.tgz";
+      path = fetchurl {
+        name = "any_observable___any_observable_0.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz";
+        sha1 = "af933475e5806a67d0d7df090dd5e8bef65d119b";
+      };
+    }
+    {
+      name = "argparse___argparse_1.0.10.tgz";
+      path = fetchurl {
+        name = "argparse___argparse_1.0.10.tgz";
+        url  = "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz";
+        sha1 = "bcd6791ea5ae09725e17e5ad988134cd40b3d911";
+      };
+    }
+    {
+      name = "aria_query___aria_query_3.0.0.tgz";
+      path = fetchurl {
+        name = "aria_query___aria_query_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz";
+        sha1 = "65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc";
+      };
+    }
+    {
+      name = "arr_diff___arr_diff_4.0.0.tgz";
+      path = fetchurl {
+        name = "arr_diff___arr_diff_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz";
+        sha1 = "d6461074febfec71e7e15235761a329a5dc7c520";
+      };
+    }
+    {
+      name = "arr_flatten___arr_flatten_1.1.0.tgz";
+      path = fetchurl {
+        name = "arr_flatten___arr_flatten_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz";
+        sha1 = "36048bbff4e7b47e136644316c99669ea5ae91f1";
+      };
+    }
+    {
+      name = "arr_union___arr_union_3.1.0.tgz";
+      path = fetchurl {
+        name = "arr_union___arr_union_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz";
+        sha1 = "e39b09aea9def866a8f206e288af63919bae39c4";
+      };
+    }
+    {
+      name = "array_includes___array_includes_3.1.1.tgz";
+      path = fetchurl {
+        name = "array_includes___array_includes_3.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz";
+        sha1 = "cdd67e6852bdf9c1215460786732255ed2459348";
+      };
+    }
+    {
+      name = "array_union___array_union_1.0.2.tgz";
+      path = fetchurl {
+        name = "array_union___array_union_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz";
+        sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39";
+      };
+    }
+    {
+      name = "array_uniq___array_uniq_1.0.3.tgz";
+      path = fetchurl {
+        name = "array_uniq___array_uniq_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz";
+        sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6";
+      };
+    }
+    {
+      name = "array_unique___array_unique_0.3.2.tgz";
+      path = fetchurl {
+        name = "array_unique___array_unique_0.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz";
+        sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428";
+      };
+    }
+    {
+      name = "array.prototype.flat___array.prototype.flat_1.2.3.tgz";
+      path = fetchurl {
+        name = "array.prototype.flat___array.prototype.flat_1.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz";
+        sha1 = "0de82b426b0318dbfdb940089e38b043d37f6c7b";
+      };
+    }
+    {
+      name = "arrify___arrify_1.0.1.tgz";
+      path = fetchurl {
+        name = "arrify___arrify_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz";
+        sha1 = "898508da2226f380df904728456849c1501a4b0d";
+      };
+    }
+    {
+      name = "assign_symbols___assign_symbols_1.0.0.tgz";
+      path = fetchurl {
+        name = "assign_symbols___assign_symbols_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz";
+        sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367";
+      };
+    }
+    {
+      name = "ast_types_flow___ast_types_flow_0.0.7.tgz";
+      path = fetchurl {
+        name = "ast_types_flow___ast_types_flow_0.0.7.tgz";
+        url  = "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz";
+        sha1 = "f70b735c6bca1a5c9c22d982c3e39e7feba3bdad";
+      };
+    }
+    {
+      name = "astral_regex___astral_regex_1.0.0.tgz";
+      path = fetchurl {
+        name = "astral_regex___astral_regex_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz";
+        sha1 = "6c8c3fb827dd43ee3918f27b82782ab7658a6fd9";
+      };
+    }
+    {
+      name = "atob___atob_2.1.2.tgz";
+      path = fetchurl {
+        name = "atob___atob_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz";
+        sha1 = "6d9517eb9e030d2436666651e86bd9f6f13533c9";
+      };
+    }
+    {
+      name = "axobject_query___axobject_query_2.1.2.tgz";
+      path = fetchurl {
+        name = "axobject_query___axobject_query_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.2.tgz";
+        sha1 = "2bdffc0371e643e5f03ba99065d5179b9ca79799";
+      };
+    }
+    {
+      name = "babel_code_frame___babel_code_frame_6.26.0.tgz";
+      path = fetchurl {
+        name = "babel_code_frame___babel_code_frame_6.26.0.tgz";
+        url  = "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz";
+        sha1 = "63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b";
+      };
+    }
+    {
+      name = "babel_eslint___babel_eslint_10.1.0.tgz";
+      path = fetchurl {
+        name = "babel_eslint___babel_eslint_10.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz";
+        sha1 = "6968e568a910b78fb3779cdd8b6ac2f479943232";
+      };
+    }
+    {
+      name = "babel_runtime___babel_runtime_6.26.0.tgz";
+      path = fetchurl {
+        name = "babel_runtime___babel_runtime_6.26.0.tgz";
+        url  = "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz";
+        sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe";
+      };
+    }
+    {
+      name = "balanced_match___balanced_match_1.0.0.tgz";
+      path = fetchurl {
+        name = "balanced_match___balanced_match_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz";
+        sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
+      };
+    }
+    {
+      name = "base___base_0.11.2.tgz";
+      path = fetchurl {
+        name = "base___base_0.11.2.tgz";
+        url  = "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz";
+        sha1 = "7bde5ced145b6d551a90db87f83c558b4eb48a8f";
+      };
+    }
+    {
+      name = "boolify___boolify_1.0.1.tgz";
+      path = fetchurl {
+        name = "boolify___boolify_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/boolify/-/boolify-1.0.1.tgz";
+        sha1 = "b5c09e17cacd113d11b7bb3ed384cc012994d86b";
+      };
+    }
+    {
+      name = "brace_expansion___brace_expansion_1.1.11.tgz";
+      path = fetchurl {
+        name = "brace_expansion___brace_expansion_1.1.11.tgz";
+        url  = "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz";
+        sha1 = "3c7fcbf529d87226f3d2f52b966ff5271eb441dd";
+      };
+    }
+    {
+      name = "braces___braces_2.3.2.tgz";
+      path = fetchurl {
+        name = "braces___braces_2.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz";
+        sha1 = "5979fd3f14cd531565e5fa2df1abfff1dfaee729";
+      };
+    }
+    {
+      name = "buffer_from___buffer_from_1.1.1.tgz";
+      path = fetchurl {
+        name = "buffer_from___buffer_from_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz";
+        sha1 = "32713bc028f75c02fdb710d7c7bcec1f2c6070ef";
+      };
+    }
+    {
+      name = "cache_base___cache_base_1.0.1.tgz";
+      path = fetchurl {
+        name = "cache_base___cache_base_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz";
+        sha1 = "0a7f46416831c8b662ee36fe4e7c59d76f666ab2";
+      };
+    }
+    {
+      name = "caller_callsite___caller_callsite_2.0.0.tgz";
+      path = fetchurl {
+        name = "caller_callsite___caller_callsite_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz";
+        sha1 = "847e0fce0a223750a9a027c54b33731ad3154134";
+      };
+    }
+    {
+      name = "caller_path___caller_path_0.1.0.tgz";
+      path = fetchurl {
+        name = "caller_path___caller_path_0.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz";
+        sha1 = "94085ef63581ecd3daa92444a8fe94e82577751f";
+      };
+    }
+    {
+      name = "caller_path___caller_path_2.0.0.tgz";
+      path = fetchurl {
+        name = "caller_path___caller_path_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz";
+        sha1 = "468f83044e369ab2010fac5f06ceee15bb2cb1f4";
+      };
+    }
+    {
+      name = "callsites___callsites_0.2.0.tgz";
+      path = fetchurl {
+        name = "callsites___callsites_0.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz";
+        sha1 = "afab96262910a7f33c19a5775825c69f34e350ca";
+      };
+    }
+    {
+      name = "callsites___callsites_2.0.0.tgz";
+      path = fetchurl {
+        name = "callsites___callsites_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz";
+        sha1 = "06eb84f00eea413da86affefacbffb36093b3c50";
+      };
+    }
+    {
+      name = "callsites___callsites_3.1.0.tgz";
+      path = fetchurl {
+        name = "callsites___callsites_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz";
+        sha1 = "b3630abd8943432f54b3f0519238e33cd7df2f73";
+      };
+    }
+    {
+      name = "camelcase_keys___camelcase_keys_4.2.0.tgz";
+      path = fetchurl {
+        name = "camelcase_keys___camelcase_keys_4.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz";
+        sha1 = "a2aa5fb1af688758259c32c141426d78923b9b77";
+      };
+    }
+    {
+      name = "camelcase___camelcase_4.1.0.tgz";
+      path = fetchurl {
+        name = "camelcase___camelcase_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz";
+        sha1 = "d545635be1e33c542649c69173e5de6acfae34dd";
+      };
+    }
+    {
+      name = "chalk___chalk_2.3.0.tgz";
+      path = fetchurl {
+        name = "chalk___chalk_2.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz";
+        sha1 = "b5ea48efc9c1793dccc9b4767c93914d3f2d52ba";
+      };
+    }
+    {
+      name = "chalk___chalk_1.1.3.tgz";
+      path = fetchurl {
+        name = "chalk___chalk_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz";
+        sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
+      };
+    }
+    {
+      name = "chalk___chalk_2.4.2.tgz";
+      path = fetchurl {
+        name = "chalk___chalk_2.4.2.tgz";
+        url  = "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz";
+        sha1 = "cd42541677a54333cf541a49108c1432b44c9424";
+      };
+    }
+    {
+      name = "chardet___chardet_0.4.2.tgz";
+      path = fetchurl {
+        name = "chardet___chardet_0.4.2.tgz";
+        url  = "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz";
+        sha1 = "b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2";
+      };
+    }
+    {
+      name = "chardet___chardet_0.7.0.tgz";
+      path = fetchurl {
+        name = "chardet___chardet_0.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz";
+        sha1 = "90094849f0937f2eedc2425d0d28a9e5f0cbad9e";
+      };
+    }
+    {
+      name = "ci_info___ci_info_2.0.0.tgz";
+      path = fetchurl {
+        name = "ci_info___ci_info_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz";
+        sha1 = "67a9e964be31a51e15e5010d58e6f12834002f46";
+      };
+    }
+    {
+      name = "circular_json___circular_json_0.3.3.tgz";
+      path = fetchurl {
+        name = "circular_json___circular_json_0.3.3.tgz";
+        url  = "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz";
+        sha1 = "815c99ea84f6809529d2f45791bdf82711352d66";
+      };
+    }
+    {
+      name = "class_utils___class_utils_0.3.6.tgz";
+      path = fetchurl {
+        name = "class_utils___class_utils_0.3.6.tgz";
+        url  = "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz";
+        sha1 = "f93369ae8b9a7ce02fd41faad0ca83033190c463";
+      };
+    }
+    {
+      name = "cli_cursor___cli_cursor_2.1.0.tgz";
+      path = fetchurl {
+        name = "cli_cursor___cli_cursor_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz";
+        sha1 = "b35dac376479facc3e94747d41d0d0f5238ffcb5";
+      };
+    }
+    {
+      name = "cli_truncate___cli_truncate_0.2.1.tgz";
+      path = fetchurl {
+        name = "cli_truncate___cli_truncate_0.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz";
+        sha1 = "9f15cfbb0705005369216c626ac7d05ab90dd574";
+      };
+    }
+    {
+      name = "cli_width___cli_width_2.2.1.tgz";
+      path = fetchurl {
+        name = "cli_width___cli_width_2.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz";
+        sha1 = "b0433d0b4e9c847ef18868a4ef16fd5fc8271c48";
+      };
+    }
+    {
+      name = "cliui___cliui_3.2.0.tgz";
+      path = fetchurl {
+        name = "cliui___cliui_3.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz";
+        sha1 = "120601537a916d29940f934da3b48d585a39213d";
+      };
+    }
+    {
+      name = "co___co_4.6.0.tgz";
+      path = fetchurl {
+        name = "co___co_4.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz";
+        sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184";
+      };
+    }
+    {
+      name = "code_point_at___code_point_at_1.1.0.tgz";
+      path = fetchurl {
+        name = "code_point_at___code_point_at_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz";
+        sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77";
+      };
+    }
+    {
+      name = "collection_visit___collection_visit_1.0.0.tgz";
+      path = fetchurl {
+        name = "collection_visit___collection_visit_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz";
+        sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0";
+      };
+    }
+    {
+      name = "color_convert___color_convert_1.9.3.tgz";
+      path = fetchurl {
+        name = "color_convert___color_convert_1.9.3.tgz";
+        url  = "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz";
+        sha1 = "bb71850690e1f136567de629d2d5471deda4c1e8";
+      };
+    }
+    {
+      name = "color_name___color_name_1.1.3.tgz";
+      path = fetchurl {
+        name = "color_name___color_name_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz";
+        sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25";
+      };
+    }
+    {
+      name = "commander___commander_2.20.3.tgz";
+      path = fetchurl {
+        name = "commander___commander_2.20.3.tgz";
+        url  = "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz";
+        sha1 = "fd485e84c03eb4881c20722ba48035e8531aeb33";
+      };
+    }
+    {
+      name = "common_tags___common_tags_1.8.0.tgz";
+      path = fetchurl {
+        name = "common_tags___common_tags_1.8.0.tgz";
+        url  = "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz";
+        sha1 = "8e3153e542d4a39e9b10554434afaaf98956a937";
+      };
+    }
+    {
+      name = "component_emitter___component_emitter_1.3.0.tgz";
+      path = fetchurl {
+        name = "component_emitter___component_emitter_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz";
+        sha1 = "16e4070fba8ae29b679f2215853ee181ab2eabc0";
+      };
+    }
+    {
+      name = "concat_map___concat_map_0.0.1.tgz";
+      path = fetchurl {
+        name = "concat_map___concat_map_0.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz";
+        sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
+      };
+    }
+    {
+      name = "concat_stream___concat_stream_1.6.2.tgz";
+      path = fetchurl {
+        name = "concat_stream___concat_stream_1.6.2.tgz";
+        url  = "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz";
+        sha1 = "904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34";
+      };
+    }
+    {
+      name = "confusing_browser_globals___confusing_browser_globals_1.0.9.tgz";
+      path = fetchurl {
+        name = "confusing_browser_globals___confusing_browser_globals_1.0.9.tgz";
+        url  = "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz";
+        sha1 = "72bc13b483c0276801681871d4898516f8f54fdd";
+      };
+    }
+    {
+      name = "contains_path___contains_path_0.1.0.tgz";
+      path = fetchurl {
+        name = "contains_path___contains_path_0.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz";
+        sha1 = "fe8cf184ff6670b6baef01a9d4861a5cbec4120a";
+      };
+    }
+    {
+      name = "copy_descriptor___copy_descriptor_0.1.1.tgz";
+      path = fetchurl {
+        name = "copy_descriptor___copy_descriptor_0.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz";
+        sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d";
+      };
+    }
+    {
+      name = "core_js_pure___core_js_pure_3.6.5.tgz";
+      path = fetchurl {
+        name = "core_js_pure___core_js_pure_3.6.5.tgz";
+        url  = "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz";
+        sha1 = "c79e75f5e38dbc85a662d91eea52b8256d53b813";
+      };
+    }
+    {
+      name = "core_js___core_js_2.6.11.tgz";
+      path = fetchurl {
+        name = "core_js___core_js_2.6.11.tgz";
+        url  = "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz";
+        sha1 = "38831469f9922bded8ee21c9dc46985e0399308c";
+      };
+    }
+    {
+      name = "core_util_is___core_util_is_1.0.2.tgz";
+      path = fetchurl {
+        name = "core_util_is___core_util_is_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz";
+        sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
+      };
+    }
+    {
+      name = "cosmiconfig___cosmiconfig_5.2.1.tgz";
+      path = fetchurl {
+        name = "cosmiconfig___cosmiconfig_5.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz";
+        sha1 = "040f726809c591e77a17c0a3626ca45b4f168b1a";
+      };
+    }
+    {
+      name = "cross_spawn___cross_spawn_5.1.0.tgz";
+      path = fetchurl {
+        name = "cross_spawn___cross_spawn_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz";
+        sha1 = "e8bd0efee58fcff6f8f94510a0a554bbfa235449";
+      };
+    }
+    {
+      name = "cross_spawn___cross_spawn_6.0.5.tgz";
+      path = fetchurl {
+        name = "cross_spawn___cross_spawn_6.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz";
+        sha1 = "4a5ec7c64dfae22c3a14124dbacdee846d80cbc4";
+      };
+    }
+    {
+      name = "damerau_levenshtein___damerau_levenshtein_1.0.6.tgz";
+      path = fetchurl {
+        name = "damerau_levenshtein___damerau_levenshtein_1.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz";
+        sha1 = "143c1641cb3d85c60c32329e26899adea8701791";
+      };
+    }
+    {
+      name = "date_fns___date_fns_1.30.1.tgz";
+      path = fetchurl {
+        name = "date_fns___date_fns_1.30.1.tgz";
+        url  = "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz";
+        sha1 = "2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c";
+      };
+    }
+    {
+      name = "debug___debug_2.6.9.tgz";
+      path = fetchurl {
+        name = "debug___debug_2.6.9.tgz";
+        url  = "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz";
+        sha1 = "5d128515df134ff327e90a4c93f4e077a536341f";
+      };
+    }
+    {
+      name = "debug___debug_3.2.6.tgz";
+      path = fetchurl {
+        name = "debug___debug_3.2.6.tgz";
+        url  = "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz";
+        sha1 = "e83d17de16d8a7efb7717edbe5fb10135eee629b";
+      };
+    }
+    {
+      name = "debug___debug_4.1.1.tgz";
+      path = fetchurl {
+        name = "debug___debug_4.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz";
+        sha1 = "3b72260255109c6b589cee050f1d516139664791";
+      };
+    }
+    {
+      name = "decamelize___decamelize_1.2.0.tgz";
+      path = fetchurl {
+        name = "decamelize___decamelize_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz";
+        sha1 = "f6534d15148269b20352e7bee26f501f9a191290";
+      };
+    }
+    {
+      name = "decode_uri_component___decode_uri_component_0.2.0.tgz";
+      path = fetchurl {
+        name = "decode_uri_component___decode_uri_component_0.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz";
+        sha1 = "eb3913333458775cb84cd1a1fae062106bb87545";
+      };
+    }
+    {
+      name = "dedent___dedent_0.7.0.tgz";
+      path = fetchurl {
+        name = "dedent___dedent_0.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz";
+        sha1 = "2495ddbaf6eb874abb0e1be9df22d2e5a544326c";
+      };
+    }
+    {
+      name = "deep_equal___deep_equal_1.1.1.tgz";
+      path = fetchurl {
+        name = "deep_equal___deep_equal_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz";
+        sha1 = "b5c98c942ceffaf7cb051e24e1434a25a2e6076a";
+      };
+    }
+    {
+      name = "deep_is___deep_is_0.1.3.tgz";
+      path = fetchurl {
+        name = "deep_is___deep_is_0.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz";
+        sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
+      };
+    }
+    {
+      name = "define_properties___define_properties_1.1.3.tgz";
+      path = fetchurl {
+        name = "define_properties___define_properties_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz";
+        sha1 = "cf88da6cbee26fe6db7094f61d870cbd84cee9f1";
+      };
+    }
+    {
+      name = "define_property___define_property_0.2.5.tgz";
+      path = fetchurl {
+        name = "define_property___define_property_0.2.5.tgz";
+        url  = "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz";
+        sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116";
+      };
+    }
+    {
+      name = "define_property___define_property_1.0.0.tgz";
+      path = fetchurl {
+        name = "define_property___define_property_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz";
+        sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6";
+      };
+    }
+    {
+      name = "define_property___define_property_2.0.2.tgz";
+      path = fetchurl {
+        name = "define_property___define_property_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz";
+        sha1 = "d459689e8d654ba77e02a817f8710d702cb16e9d";
+      };
+    }
+    {
+      name = "del___del_3.0.0.tgz";
+      path = fetchurl {
+        name = "del___del_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz";
+        sha1 = "53ecf699ffcbcb39637691ab13baf160819766e5";
+      };
+    }
+    {
+      name = "dlv___dlv_1.1.3.tgz";
+      path = fetchurl {
+        name = "dlv___dlv_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz";
+        sha1 = "5c198a8a11453596e751494d49874bc7732f2e79";
+      };
+    }
+    {
+      name = "docopt___docopt_0.6.2.tgz";
+      path = fetchurl {
+        name = "docopt___docopt_0.6.2.tgz";
+        url  = "https://registry.yarnpkg.com/docopt/-/docopt-0.6.2.tgz";
+        sha1 = "b28e9e2220da5ec49f7ea5bb24a47787405eeb11";
+      };
+    }
+    {
+      name = "doctrine___doctrine_1.5.0.tgz";
+      path = fetchurl {
+        name = "doctrine___doctrine_1.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz";
+        sha1 = "379dce730f6166f76cefa4e6707a159b02c5a6fa";
+      };
+    }
+    {
+      name = "doctrine___doctrine_2.1.0.tgz";
+      path = fetchurl {
+        name = "doctrine___doctrine_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz";
+        sha1 = "5cd01fc101621b42c4cd7f5d1a66243716d3f39d";
+      };
+    }
+    {
+      name = "doctrine___doctrine_3.0.0.tgz";
+      path = fetchurl {
+        name = "doctrine___doctrine_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz";
+        sha1 = "addebead72a6574db783639dc87a121773973961";
+      };
+    }
+    {
+      name = "elegant_spinner___elegant_spinner_1.0.1.tgz";
+      path = fetchurl {
+        name = "elegant_spinner___elegant_spinner_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz";
+        sha1 = "db043521c95d7e303fd8f345bedc3349cfb0729e";
+      };
+    }
+    {
+      name = "emoji_regex___emoji_regex_7.0.3.tgz";
+      path = fetchurl {
+        name = "emoji_regex___emoji_regex_7.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz";
+        sha1 = "933a04052860c85e83c122479c4748a8e4c72156";
+      };
+    }
+    {
+      name = "end_of_stream___end_of_stream_1.4.4.tgz";
+      path = fetchurl {
+        name = "end_of_stream___end_of_stream_1.4.4.tgz";
+        url  = "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz";
+        sha1 = "5ae64a5f45057baf3626ec14da0ca5e4b2431eb0";
+      };
+    }
+    {
+      name = "error_ex___error_ex_1.3.2.tgz";
+      path = fetchurl {
+        name = "error_ex___error_ex_1.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz";
+        sha1 = "b4ac40648107fdcdcfae242f428bea8a14d4f1bf";
+      };
+    }
+    {
+      name = "es_abstract___es_abstract_1.17.5.tgz";
+      path = fetchurl {
+        name = "es_abstract___es_abstract_1.17.5.tgz";
+        url  = "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz";
+        sha1 = "d8c9d1d66c8981fb9200e2251d799eee92774ae9";
+      };
+    }
+    {
+      name = "es_to_primitive___es_to_primitive_1.2.1.tgz";
+      path = fetchurl {
+        name = "es_to_primitive___es_to_primitive_1.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz";
+        sha1 = "e55cd4c9cdc188bcefb03b366c736323fc5c898a";
+      };
+    }
+    {
+      name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz";
+      path = fetchurl {
+        name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
+        sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
+      };
+    }
+    {
+      name = "eslint_config_airbnb_base___eslint_config_airbnb_base_13.2.0.tgz";
+      path = fetchurl {
+        name = "eslint_config_airbnb_base___eslint_config_airbnb_base_13.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz";
+        sha1 = "f6ea81459ff4dec2dda200c35f1d8f7419d57943";
+      };
+    }
+    {
+      name = "eslint_config_airbnb___eslint_config_airbnb_17.1.1.tgz";
+      path = fetchurl {
+        name = "eslint_config_airbnb___eslint_config_airbnb_17.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.1.1.tgz";
+        sha1 = "2272e0b86bb1e2b138cdf88d07a3b6f4cda3d626";
+      };
+    }
+    {
+      name = "eslint_config_prettier___eslint_config_prettier_3.6.0.tgz";
+      path = fetchurl {
+        name = "eslint_config_prettier___eslint_config_prettier_3.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-3.6.0.tgz";
+        sha1 = "8ca3ffac4bd6eeef623a0651f9d754900e3ec217";
+      };
+    }
+    {
+      name = "eslint_config_standard___eslint_config_standard_12.0.0.tgz";
+      path = fetchurl {
+        name = "eslint_config_standard___eslint_config_standard_12.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz";
+        sha1 = "638b4c65db0bd5a41319f96bba1f15ddad2107d9";
+      };
+    }
+    {
+      name = "eslint_import_resolver_node___eslint_import_resolver_node_0.3.3.tgz";
+      path = fetchurl {
+        name = "eslint_import_resolver_node___eslint_import_resolver_node_0.3.3.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz";
+        sha1 = "dbaa52b6b2816b50bc6711af75422de808e98404";
+      };
+    }
+    {
+      name = "eslint_module_utils___eslint_module_utils_2.6.0.tgz";
+      path = fetchurl {
+        name = "eslint_module_utils___eslint_module_utils_2.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz";
+        sha1 = "579ebd094f56af7797d19c9866c9c9486629bfa6";
+      };
+    }
+    {
+      name = "eslint_plugin_es___eslint_plugin_es_1.4.1.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_es___eslint_plugin_es_1.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz";
+        sha1 = "12acae0f4953e76ba444bfd1b2271081ac620998";
+      };
+    }
+    {
+      name = "eslint_plugin_import___eslint_plugin_import_2.20.2.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_import___eslint_plugin_import_2.20.2.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz";
+        sha1 = "91fc3807ce08be4837141272c8b99073906e588d";
+      };
+    }
+    {
+      name = "eslint_plugin_jsx_a11y___eslint_plugin_jsx_a11y_6.2.3.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_jsx_a11y___eslint_plugin_jsx_a11y_6.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz";
+        sha1 = "b872a09d5de51af70a97db1eea7dc933043708aa";
+      };
+    }
+    {
+      name = "eslint_plugin_node___eslint_plugin_node_8.0.1.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_node___eslint_plugin_node_8.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz";
+        sha1 = "55ae3560022863d141fa7a11799532340a685964";
+      };
+    }
+    {
+      name = "eslint_plugin_promise___eslint_plugin_promise_4.2.1.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_promise___eslint_plugin_promise_4.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz";
+        sha1 = "845fd8b2260ad8f82564c1222fce44ad71d9418a";
+      };
+    }
+    {
+      name = "eslint_plugin_react___eslint_plugin_react_7.20.0.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_react___eslint_plugin_react_7.20.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz";
+        sha1 = "f98712f0a5e57dfd3e5542ef0604b8739cd47be3";
+      };
+    }
+    {
+      name = "eslint_plugin_standard___eslint_plugin_standard_4.0.1.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_standard___eslint_plugin_standard_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz";
+        sha1 = "ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4";
+      };
+    }
+    {
+      name = "eslint_scope___eslint_scope_3.7.3.tgz";
+      path = fetchurl {
+        name = "eslint_scope___eslint_scope_3.7.3.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz";
+        sha1 = "bb507200d3d17f60247636160b4826284b108535";
+      };
+    }
+    {
+      name = "eslint_scope___eslint_scope_4.0.3.tgz";
+      path = fetchurl {
+        name = "eslint_scope___eslint_scope_4.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz";
+        sha1 = "ca03833310f6889a3264781aa82e63eb9cfe7848";
+      };
+    }
+    {
+      name = "eslint_utils___eslint_utils_1.4.3.tgz";
+      path = fetchurl {
+        name = "eslint_utils___eslint_utils_1.4.3.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz";
+        sha1 = "74fec7c54d0776b6f67e0251040b5806564e981f";
+      };
+    }
+    {
+      name = "eslint_visitor_keys___eslint_visitor_keys_1.1.0.tgz";
+      path = fetchurl {
+        name = "eslint_visitor_keys___eslint_visitor_keys_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz";
+        sha1 = "e2a82cea84ff246ad6fb57f9bde5b46621459ec2";
+      };
+    }
+    {
+      name = "eslint___eslint_4.19.1.tgz";
+      path = fetchurl {
+        name = "eslint___eslint_4.19.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz";
+        sha1 = "32d1d653e1d90408854bfb296f076ec7e186a300";
+      };
+    }
+    {
+      name = "eslint___eslint_5.16.0.tgz";
+      path = fetchurl {
+        name = "eslint___eslint_5.16.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz";
+        sha1 = "a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea";
+      };
+    }
+    {
+      name = "espree___espree_3.5.4.tgz";
+      path = fetchurl {
+        name = "espree___espree_3.5.4.tgz";
+        url  = "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz";
+        sha1 = "b0f447187c8a8bed944b815a660bddf5deb5d1a7";
+      };
+    }
+    {
+      name = "espree___espree_5.0.1.tgz";
+      path = fetchurl {
+        name = "espree___espree_5.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz";
+        sha1 = "5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a";
+      };
+    }
+    {
+      name = "esprima___esprima_4.0.1.tgz";
+      path = fetchurl {
+        name = "esprima___esprima_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz";
+        sha1 = "13b04cdb3e6c5d19df91ab6987a8695619b0aa71";
+      };
+    }
+    {
+      name = "esquery___esquery_1.3.1.tgz";
+      path = fetchurl {
+        name = "esquery___esquery_1.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz";
+        sha1 = "b78b5828aa8e214e29fb74c4d5b752e1c033da57";
+      };
+    }
+    {
+      name = "esrecurse___esrecurse_4.2.1.tgz";
+      path = fetchurl {
+        name = "esrecurse___esrecurse_4.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz";
+        sha1 = "007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf";
+      };
+    }
+    {
+      name = "estraverse___estraverse_4.3.0.tgz";
+      path = fetchurl {
+        name = "estraverse___estraverse_4.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz";
+        sha1 = "398ad3f3c5a24948be7725e83d11a7de28cdbd1d";
+      };
+    }
+    {
+      name = "estraverse___estraverse_5.1.0.tgz";
+      path = fetchurl {
+        name = "estraverse___estraverse_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz";
+        sha1 = "374309d39fd935ae500e7b92e8a6b4c720e59642";
+      };
+    }
+    {
+      name = "esutils___esutils_2.0.3.tgz";
+      path = fetchurl {
+        name = "esutils___esutils_2.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz";
+        sha1 = "74d2eb4de0b8da1293711910d50775b9b710ef64";
+      };
+    }
+    {
+      name = "execa___execa_0.7.0.tgz";
+      path = fetchurl {
+        name = "execa___execa_0.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz";
+        sha1 = "944becd34cc41ee32a63a9faf27ad5a65fc59777";
+      };
+    }
+    {
+      name = "execa___execa_1.0.0.tgz";
+      path = fetchurl {
+        name = "execa___execa_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz";
+        sha1 = "c6236a5bb4df6d6f15e88e7f017798216749ddd8";
+      };
+    }
+    {
+      name = "expand_brackets___expand_brackets_2.1.4.tgz";
+      path = fetchurl {
+        name = "expand_brackets___expand_brackets_2.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz";
+        sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622";
+      };
+    }
+    {
+      name = "extend_shallow___extend_shallow_2.0.1.tgz";
+      path = fetchurl {
+        name = "extend_shallow___extend_shallow_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz";
+        sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f";
+      };
+    }
+    {
+      name = "extend_shallow___extend_shallow_3.0.2.tgz";
+      path = fetchurl {
+        name = "extend_shallow___extend_shallow_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz";
+        sha1 = "26a71aaf073b39fb2127172746131c2704028db8";
+      };
+    }
+    {
+      name = "external_editor___external_editor_2.2.0.tgz";
+      path = fetchurl {
+        name = "external_editor___external_editor_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz";
+        sha1 = "045511cfd8d133f3846673d1047c154e214ad3d5";
+      };
+    }
+    {
+      name = "external_editor___external_editor_3.1.0.tgz";
+      path = fetchurl {
+        name = "external_editor___external_editor_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz";
+        sha1 = "cb03f740befae03ea4d283caed2741a83f335495";
+      };
+    }
+    {
+      name = "extglob___extglob_2.0.4.tgz";
+      path = fetchurl {
+        name = "extglob___extglob_2.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz";
+        sha1 = "ad00fe4dc612a9232e8718711dc5cb5ab0285543";
+      };
+    }
+    {
+      name = "fast_deep_equal___fast_deep_equal_1.1.0.tgz";
+      path = fetchurl {
+        name = "fast_deep_equal___fast_deep_equal_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz";
+        sha1 = "c053477817c86b51daa853c81e059b733d023614";
+      };
+    }
+    {
+      name = "fast_deep_equal___fast_deep_equal_3.1.1.tgz";
+      path = fetchurl {
+        name = "fast_deep_equal___fast_deep_equal_3.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz";
+        sha1 = "545145077c501491e33b15ec408c294376e94ae4";
+      };
+    }
+    {
+      name = "fast_json_stable_stringify___fast_json_stable_stringify_2.1.0.tgz";
+      path = fetchurl {
+        name = "fast_json_stable_stringify___fast_json_stable_stringify_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
+        sha1 = "874bf69c6f404c2b5d99c481341399fd55892633";
+      };
+    }
+    {
+      name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz";
+      path = fetchurl {
+        name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
+        sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
+      };
+    }
+    {
+      name = "figures___figures_1.7.0.tgz";
+      path = fetchurl {
+        name = "figures___figures_1.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz";
+        sha1 = "cbe1e3affcf1cd44b80cadfed28dc793a9701d2e";
+      };
+    }
+    {
+      name = "figures___figures_2.0.0.tgz";
+      path = fetchurl {
+        name = "figures___figures_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz";
+        sha1 = "3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962";
+      };
+    }
+    {
+      name = "file_entry_cache___file_entry_cache_2.0.0.tgz";
+      path = fetchurl {
+        name = "file_entry_cache___file_entry_cache_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz";
+        sha1 = "c392990c3e684783d838b8c84a45d8a048458361";
+      };
+    }
+    {
+      name = "file_entry_cache___file_entry_cache_5.0.1.tgz";
+      path = fetchurl {
+        name = "file_entry_cache___file_entry_cache_5.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz";
+        sha1 = "ca0f6efa6dd3d561333fb14515065c2fafdf439c";
+      };
+    }
+    {
+      name = "fill_range___fill_range_4.0.0.tgz";
+      path = fetchurl {
+        name = "fill_range___fill_range_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz";
+        sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7";
+      };
+    }
+    {
+      name = "find_up___find_up_2.1.0.tgz";
+      path = fetchurl {
+        name = "find_up___find_up_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz";
+        sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7";
+      };
+    }
+    {
+      name = "find_up___find_up_3.0.0.tgz";
+      path = fetchurl {
+        name = "find_up___find_up_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz";
+        sha1 = "49169f1d7993430646da61ecc5ae355c21c97b73";
+      };
+    }
+    {
+      name = "flat_cache___flat_cache_1.3.4.tgz";
+      path = fetchurl {
+        name = "flat_cache___flat_cache_1.3.4.tgz";
+        url  = "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz";
+        sha1 = "2c2ef77525cc2929007dfffa1dd314aa9c9dee6f";
+      };
+    }
+    {
+      name = "flat_cache___flat_cache_2.0.1.tgz";
+      path = fetchurl {
+        name = "flat_cache___flat_cache_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz";
+        sha1 = "5d296d6f04bda44a4630a301413bdbc2ec085ec0";
+      };
+    }
+    {
+      name = "flatted___flatted_2.0.2.tgz";
+      path = fetchurl {
+        name = "flatted___flatted_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz";
+        sha1 = "4575b21e2bcee7434aa9be662f4b7b5f9c2b5138";
+      };
+    }
+    {
+      name = "fn_name___fn_name_2.0.1.tgz";
+      path = fetchurl {
+        name = "fn_name___fn_name_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz";
+        sha1 = "5214d7537a4d06a4a301c0cc262feb84188002e7";
+      };
+    }
+    {
+      name = "for_in___for_in_1.0.2.tgz";
+      path = fetchurl {
+        name = "for_in___for_in_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz";
+        sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80";
+      };
+    }
+    {
+      name = "fragment_cache___fragment_cache_0.2.1.tgz";
+      path = fetchurl {
+        name = "fragment_cache___fragment_cache_0.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz";
+        sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19";
+      };
+    }
+    {
+      name = "fs.realpath___fs.realpath_1.0.0.tgz";
+      path = fetchurl {
+        name = "fs.realpath___fs.realpath_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz";
+        sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
+      };
+    }
+    {
+      name = "function_bind___function_bind_1.1.1.tgz";
+      path = fetchurl {
+        name = "function_bind___function_bind_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz";
+        sha1 = "a56899d3ea3c9bab874bb9773b7c5ede92f4895d";
+      };
+    }
+    {
+      name = "functional_red_black_tree___functional_red_black_tree_1.0.1.tgz";
+      path = fetchurl {
+        name = "functional_red_black_tree___functional_red_black_tree_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz";
+        sha1 = "1b0ab3bd553b2a0d6399d29c0e3ea0b252078327";
+      };
+    }
+    {
+      name = "g_status___g_status_2.0.2.tgz";
+      path = fetchurl {
+        name = "g_status___g_status_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz";
+        sha1 = "270fd32119e8fc9496f066fe5fe88e0a6bc78b97";
+      };
+    }
+    {
+      name = "get_caller_file___get_caller_file_1.0.3.tgz";
+      path = fetchurl {
+        name = "get_caller_file___get_caller_file_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz";
+        sha1 = "f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a";
+      };
+    }
+    {
+      name = "get_own_enumerable_property_symbols___get_own_enumerable_property_symbols_3.0.2.tgz";
+      path = fetchurl {
+        name = "get_own_enumerable_property_symbols___get_own_enumerable_property_symbols_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz";
+        sha1 = "b5fde77f22cbe35f390b4e089922c50bce6ef664";
+      };
+    }
+    {
+      name = "get_stdin___get_stdin_5.0.1.tgz";
+      path = fetchurl {
+        name = "get_stdin___get_stdin_5.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz";
+        sha1 = "122e161591e21ff4c52530305693f20e6393a398";
+      };
+    }
+    {
+      name = "get_stdin___get_stdin_6.0.0.tgz";
+      path = fetchurl {
+        name = "get_stdin___get_stdin_6.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz";
+        sha1 = "9e09bf712b360ab9225e812048f71fde9c89657b";
+      };
+    }
+    {
+      name = "get_stream___get_stream_3.0.0.tgz";
+      path = fetchurl {
+        name = "get_stream___get_stream_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz";
+        sha1 = "8e943d1358dc37555054ecbe2edb05aa174ede14";
+      };
+    }
+    {
+      name = "get_stream___get_stream_4.1.0.tgz";
+      path = fetchurl {
+        name = "get_stream___get_stream_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz";
+        sha1 = "c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5";
+      };
+    }
+    {
+      name = "get_value___get_value_2.0.6.tgz";
+      path = fetchurl {
+        name = "get_value___get_value_2.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz";
+        sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28";
+      };
+    }
+    {
+      name = "glob___glob_7.1.6.tgz";
+      path = fetchurl {
+        name = "glob___glob_7.1.6.tgz";
+        url  = "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz";
+        sha1 = "141f33b81a7c2492e125594307480c46679278a6";
+      };
+    }
+    {
+      name = "glob___glob_7.0.6.tgz";
+      path = fetchurl {
+        name = "glob___glob_7.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz";
+        sha1 = "211bafaf49e525b8cd93260d14ab136152b3f57a";
+      };
+    }
+    {
+      name = "globals___globals_11.12.0.tgz";
+      path = fetchurl {
+        name = "globals___globals_11.12.0.tgz";
+        url  = "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz";
+        sha1 = "ab8795338868a0babd8525758018c2a7eb95c42e";
+      };
+    }
+    {
+      name = "globby___globby_6.1.0.tgz";
+      path = fetchurl {
+        name = "globby___globby_6.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz";
+        sha1 = "f5a6d70e8395e21c858fb0489d64df02424d506c";
+      };
+    }
+    {
+      name = "graceful_fs___graceful_fs_4.2.4.tgz";
+      path = fetchurl {
+        name = "graceful_fs___graceful_fs_4.2.4.tgz";
+        url  = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz";
+        sha1 = "2256bde14d3632958c465ebc96dc467ca07a29fb";
+      };
+    }
+    {
+      name = "has_ansi___has_ansi_2.0.0.tgz";
+      path = fetchurl {
+        name = "has_ansi___has_ansi_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz";
+        sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
+      };
+    }
+    {
+      name = "has_flag___has_flag_2.0.0.tgz";
+      path = fetchurl {
+        name = "has_flag___has_flag_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz";
+        sha1 = "e8207af1cc7b30d446cc70b734b5e8be18f88d51";
+      };
+    }
+    {
+      name = "has_flag___has_flag_3.0.0.tgz";
+      path = fetchurl {
+        name = "has_flag___has_flag_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz";
+        sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd";
+      };
+    }
+    {
+      name = "has_symbols___has_symbols_1.0.1.tgz";
+      path = fetchurl {
+        name = "has_symbols___has_symbols_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz";
+        sha1 = "9f5214758a44196c406d9bd76cebf81ec2dd31e8";
+      };
+    }
+    {
+      name = "has_value___has_value_0.3.1.tgz";
+      path = fetchurl {
+        name = "has_value___has_value_0.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz";
+        sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f";
+      };
+    }
+    {
+      name = "has_value___has_value_1.0.0.tgz";
+      path = fetchurl {
+        name = "has_value___has_value_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz";
+        sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177";
+      };
+    }
+    {
+      name = "has_values___has_values_0.1.4.tgz";
+      path = fetchurl {
+        name = "has_values___has_values_0.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz";
+        sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771";
+      };
+    }
+    {
+      name = "has_values___has_values_1.0.0.tgz";
+      path = fetchurl {
+        name = "has_values___has_values_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz";
+        sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f";
+      };
+    }
+    {
+      name = "has___has_1.0.3.tgz";
+      path = fetchurl {
+        name = "has___has_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz";
+        sha1 = "722d7cbfc1f6aa8241f16dd814e011e1f41e8796";
+      };
+    }
+    {
+      name = "hosted_git_info___hosted_git_info_2.8.8.tgz";
+      path = fetchurl {
+        name = "hosted_git_info___hosted_git_info_2.8.8.tgz";
+        url  = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz";
+        sha1 = "7539bd4bc1e0e0a895815a2e0262420b12858488";
+      };
+    }
+    {
+      name = "husky___husky_1.3.1.tgz";
+      path = fetchurl {
+        name = "husky___husky_1.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz";
+        sha1 = "26823e399300388ca2afff11cfa8a86b0033fae0";
+      };
+    }
+    {
+      name = "iconv_lite___iconv_lite_0.4.24.tgz";
+      path = fetchurl {
+        name = "iconv_lite___iconv_lite_0.4.24.tgz";
+        url  = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz";
+        sha1 = "2022b4b25fbddc21d2f524974a474aafe733908b";
+      };
+    }
+    {
+      name = "ignore___ignore_3.3.10.tgz";
+      path = fetchurl {
+        name = "ignore___ignore_3.3.10.tgz";
+        url  = "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz";
+        sha1 = "0a97fb876986e8081c631160f8f9f389157f0043";
+      };
+    }
+    {
+      name = "ignore___ignore_4.0.6.tgz";
+      path = fetchurl {
+        name = "ignore___ignore_4.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz";
+        sha1 = "750e3db5862087b4737ebac8207ffd1ef27b25fc";
+      };
+    }
+    {
+      name = "ignore___ignore_5.1.4.tgz";
+      path = fetchurl {
+        name = "ignore___ignore_5.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz";
+        sha1 = "84b7b3dbe64552b6ef0eca99f6743dbec6d97adf";
+      };
+    }
+    {
+      name = "import_fresh___import_fresh_2.0.0.tgz";
+      path = fetchurl {
+        name = "import_fresh___import_fresh_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz";
+        sha1 = "d81355c15612d386c61f9ddd3922d4304822a546";
+      };
+    }
+    {
+      name = "import_fresh___import_fresh_3.2.1.tgz";
+      path = fetchurl {
+        name = "import_fresh___import_fresh_3.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz";
+        sha1 = "633ff618506e793af5ac91bf48b72677e15cbe66";
+      };
+    }
+    {
+      name = "imurmurhash___imurmurhash_0.1.4.tgz";
+      path = fetchurl {
+        name = "imurmurhash___imurmurhash_0.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz";
+        sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
+      };
+    }
+    {
+      name = "indent_string___indent_string_3.2.0.tgz";
+      path = fetchurl {
+        name = "indent_string___indent_string_3.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz";
+        sha1 = "4a5fd6d27cc332f37e5419a504dbb837105c9289";
+      };
+    }
+    {
+      name = "inflight___inflight_1.0.6.tgz";
+      path = fetchurl {
+        name = "inflight___inflight_1.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz";
+        sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
+      };
+    }
+    {
+      name = "inherits___inherits_2.0.4.tgz";
+      path = fetchurl {
+        name = "inherits___inherits_2.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz";
+        sha1 = "0fa2c64f932917c3433a0ded55363aae37416b7c";
+      };
+    }
+    {
+      name = "inquirer___inquirer_3.3.0.tgz";
+      path = fetchurl {
+        name = "inquirer___inquirer_3.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz";
+        sha1 = "9dd2f2ad765dcab1ff0443b491442a20ba227dc9";
+      };
+    }
+    {
+      name = "inquirer___inquirer_6.5.2.tgz";
+      path = fetchurl {
+        name = "inquirer___inquirer_6.5.2.tgz";
+        url  = "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz";
+        sha1 = "ad50942375d036d327ff528c08bd5fab089928ca";
+      };
+    }
+    {
+      name = "internal_slot___internal_slot_1.0.2.tgz";
+      path = fetchurl {
+        name = "internal_slot___internal_slot_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz";
+        sha1 = "9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3";
+      };
+    }
+    {
+      name = "invert_kv___invert_kv_1.0.0.tgz";
+      path = fetchurl {
+        name = "invert_kv___invert_kv_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz";
+        sha1 = "104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6";
+      };
+    }
+    {
+      name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz";
+      path = fetchurl {
+        name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz";
+        url  = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz";
+        sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6";
+      };
+    }
+    {
+      name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz";
+      path = fetchurl {
+        name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz";
+        sha1 = "169c2f6d3df1f992618072365c9b0ea1f6878656";
+      };
+    }
+    {
+      name = "is_arguments___is_arguments_1.0.4.tgz";
+      path = fetchurl {
+        name = "is_arguments___is_arguments_1.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz";
+        sha1 = "3faf966c7cba0ff437fb31f6250082fcf0448cf3";
+      };
+    }
+    {
+      name = "is_arrayish___is_arrayish_0.2.1.tgz";
+      path = fetchurl {
+        name = "is_arrayish___is_arrayish_0.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz";
+        sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d";
+      };
+    }
+    {
+      name = "is_buffer___is_buffer_1.1.6.tgz";
+      path = fetchurl {
+        name = "is_buffer___is_buffer_1.1.6.tgz";
+        url  = "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz";
+        sha1 = "efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be";
+      };
+    }
+    {
+      name = "is_callable___is_callable_1.1.5.tgz";
+      path = fetchurl {
+        name = "is_callable___is_callable_1.1.5.tgz";
+        url  = "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz";
+        sha1 = "f7e46b596890456db74e7f6e976cb3273d06faab";
+      };
+    }
+    {
+      name = "is_ci___is_ci_2.0.0.tgz";
+      path = fetchurl {
+        name = "is_ci___is_ci_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz";
+        sha1 = "6bc6334181810e04b5c22b3d589fdca55026404c";
+      };
+    }
+    {
+      name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz";
+      path = fetchurl {
+        name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz";
+        sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56";
+      };
+    }
+    {
+      name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz";
+      path = fetchurl {
+        name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz";
+        sha1 = "d84876321d0e7add03990406abbbbd36ba9268c7";
+      };
+    }
+    {
+      name = "is_date_object___is_date_object_1.0.2.tgz";
+      path = fetchurl {
+        name = "is_date_object___is_date_object_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz";
+        sha1 = "bda736f2cd8fd06d32844e7743bfa7494c3bfd7e";
+      };
+    }
+    {
+      name = "is_descriptor___is_descriptor_0.1.6.tgz";
+      path = fetchurl {
+        name = "is_descriptor___is_descriptor_0.1.6.tgz";
+        url  = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz";
+        sha1 = "366d8240dde487ca51823b1ab9f07a10a78251ca";
+      };
+    }
+    {
+      name = "is_descriptor___is_descriptor_1.0.2.tgz";
+      path = fetchurl {
+        name = "is_descriptor___is_descriptor_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz";
+        sha1 = "3b159746a66604b04f8c81524ba365c5f14d86ec";
+      };
+    }
+    {
+      name = "is_directory___is_directory_0.3.1.tgz";
+      path = fetchurl {
+        name = "is_directory___is_directory_0.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz";
+        sha1 = "61339b6f2475fc772fd9c9d83f5c8575dc154ae1";
+      };
+    }
+    {
+      name = "is_extendable___is_extendable_0.1.1.tgz";
+      path = fetchurl {
+        name = "is_extendable___is_extendable_0.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz";
+        sha1 = "62b110e289a471418e3ec36a617d472e301dfc89";
+      };
+    }
+    {
+      name = "is_extendable___is_extendable_1.0.1.tgz";
+      path = fetchurl {
+        name = "is_extendable___is_extendable_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz";
+        sha1 = "a7470f9e426733d81bd81e1155264e3a3507cab4";
+      };
+    }
+    {
+      name = "is_extglob___is_extglob_2.1.1.tgz";
+      path = fetchurl {
+        name = "is_extglob___is_extglob_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz";
+        sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2";
+      };
+    }
+    {
+      name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz";
+      path = fetchurl {
+        name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
+        sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
+      };
+    }
+    {
+      name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz";
+      path = fetchurl {
+        name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
+        sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
+      };
+    }
+    {
+      name = "is_glob___is_glob_4.0.1.tgz";
+      path = fetchurl {
+        name = "is_glob___is_glob_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz";
+        sha1 = "7567dbe9f2f5e2467bc77ab83c4a29482407a5dc";
+      };
+    }
+    {
+      name = "is_number___is_number_3.0.0.tgz";
+      path = fetchurl {
+        name = "is_number___is_number_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz";
+        sha1 = "24fd6201a4782cf50561c810276afc7d12d71195";
+      };
+    }
+    {
+      name = "is_obj___is_obj_1.0.1.tgz";
+      path = fetchurl {
+        name = "is_obj___is_obj_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz";
+        sha1 = "3e4729ac1f5fde025cd7d83a896dab9f4f67db0f";
+      };
+    }
+    {
+      name = "is_observable___is_observable_1.1.0.tgz";
+      path = fetchurl {
+        name = "is_observable___is_observable_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz";
+        sha1 = "b3e986c8f44de950867cab5403f5a3465005975e";
+      };
+    }
+    {
+      name = "is_path_cwd___is_path_cwd_1.0.0.tgz";
+      path = fetchurl {
+        name = "is_path_cwd___is_path_cwd_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz";
+        sha1 = "d225ec23132e89edd38fda767472e62e65f1106d";
+      };
+    }
+    {
+      name = "is_path_in_cwd___is_path_in_cwd_1.0.1.tgz";
+      path = fetchurl {
+        name = "is_path_in_cwd___is_path_in_cwd_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz";
+        sha1 = "5ac48b345ef675339bd6c7a48a912110b241cf52";
+      };
+    }
+    {
+      name = "is_path_inside___is_path_inside_1.0.1.tgz";
+      path = fetchurl {
+        name = "is_path_inside___is_path_inside_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz";
+        sha1 = "8ef5b7de50437a3fdca6b4e865ef7aa55cb48036";
+      };
+    }
+    {
+      name = "is_plain_object___is_plain_object_2.0.4.tgz";
+      path = fetchurl {
+        name = "is_plain_object___is_plain_object_2.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz";
+        sha1 = "2c163b3fafb1b606d9d17928f05c2a1c38e07677";
+      };
+    }
+    {
+      name = "is_promise___is_promise_2.2.2.tgz";
+      path = fetchurl {
+        name = "is_promise___is_promise_2.2.2.tgz";
+        url  = "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz";
+        sha1 = "39ab959ccbf9a774cf079f7b40c7a26f763135f1";
+      };
+    }
+    {
+      name = "is_regex___is_regex_1.0.5.tgz";
+      path = fetchurl {
+        name = "is_regex___is_regex_1.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz";
+        sha1 = "39d589a358bf18967f726967120b8fc1aed74eae";
+      };
+    }
+    {
+      name = "is_regexp___is_regexp_1.0.0.tgz";
+      path = fetchurl {
+        name = "is_regexp___is_regexp_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz";
+        sha1 = "fd2d883545c46bac5a633e7b9a09e87fa2cb5069";
+      };
+    }
+    {
+      name = "is_resolvable___is_resolvable_1.1.0.tgz";
+      path = fetchurl {
+        name = "is_resolvable___is_resolvable_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz";
+        sha1 = "fb18f87ce1feb925169c9a407c19318a3206ed88";
+      };
+    }
+    {
+      name = "is_stream___is_stream_1.1.0.tgz";
+      path = fetchurl {
+        name = "is_stream___is_stream_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz";
+        sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44";
+      };
+    }
+    {
+      name = "is_string___is_string_1.0.5.tgz";
+      path = fetchurl {
+        name = "is_string___is_string_1.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz";
+        sha1 = "40493ed198ef3ff477b8c7f92f644ec82a5cd3a6";
+      };
+    }
+    {
+      name = "is_symbol___is_symbol_1.0.3.tgz";
+      path = fetchurl {
+        name = "is_symbol___is_symbol_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz";
+        sha1 = "38e1014b9e6329be0de9d24a414fd7441ec61937";
+      };
+    }
+    {
+      name = "is_windows___is_windows_1.0.2.tgz";
+      path = fetchurl {
+        name = "is_windows___is_windows_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz";
+        sha1 = "d1850eb9791ecd18e6182ce12a30f396634bb19d";
+      };
+    }
+    {
+      name = "isarray___isarray_1.0.0.tgz";
+      path = fetchurl {
+        name = "isarray___isarray_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz";
+        sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
+      };
+    }
+    {
+      name = "isexe___isexe_2.0.0.tgz";
+      path = fetchurl {
+        name = "isexe___isexe_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz";
+        sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10";
+      };
+    }
+    {
+      name = "isobject___isobject_2.1.0.tgz";
+      path = fetchurl {
+        name = "isobject___isobject_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz";
+        sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89";
+      };
+    }
+    {
+      name = "isobject___isobject_3.0.1.tgz";
+      path = fetchurl {
+        name = "isobject___isobject_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz";
+        sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df";
+      };
+    }
+    {
+      name = "js_tokens___js_tokens_4.0.0.tgz";
+      path = fetchurl {
+        name = "js_tokens___js_tokens_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz";
+        sha1 = "19203fb59991df98e3a287050d4647cdeaf32499";
+      };
+    }
+    {
+      name = "js_tokens___js_tokens_3.0.2.tgz";
+      path = fetchurl {
+        name = "js_tokens___js_tokens_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz";
+        sha1 = "9866df395102130e38f7f996bceb65443209c25b";
+      };
+    }
+    {
+      name = "js_yaml___js_yaml_3.13.1.tgz";
+      path = fetchurl {
+        name = "js_yaml___js_yaml_3.13.1.tgz";
+        url  = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz";
+        sha1 = "aff151b30bfdfa8e49e05da22e7415e9dfa37847";
+      };
+    }
+    {
+      name = "jsesc___jsesc_2.5.2.tgz";
+      path = fetchurl {
+        name = "jsesc___jsesc_2.5.2.tgz";
+        url  = "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz";
+        sha1 = "80564d2e483dacf6e8ef209650a67df3f0c283a4";
+      };
+    }
+    {
+      name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz";
+      path = fetchurl {
+        name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz";
+        sha1 = "bb867cfb3450e69107c131d1c514bab3dc8bcaa9";
+      };
+    }
+    {
+      name = "json_schema_traverse___json_schema_traverse_0.3.1.tgz";
+      path = fetchurl {
+        name = "json_schema_traverse___json_schema_traverse_0.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz";
+        sha1 = "349a6d44c53a51de89b40805c5d5e59b417d3340";
+      };
+    }
+    {
+      name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz";
+      path = fetchurl {
+        name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+        sha1 = "69f6a87d9513ab8bb8fe63bdb0979c448e684660";
+      };
+    }
+    {
+      name = "json_stable_stringify_without_jsonify___json_stable_stringify_without_jsonify_1.0.1.tgz";
+      path = fetchurl {
+        name = "json_stable_stringify_without_jsonify___json_stable_stringify_without_jsonify_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz";
+        sha1 = "9db7b59496ad3f3cfef30a75142d2d930ad72651";
+      };
+    }
+    {
+      name = "jsx_ast_utils___jsx_ast_utils_2.2.3.tgz";
+      path = fetchurl {
+        name = "jsx_ast_utils___jsx_ast_utils_2.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz";
+        sha1 = "8a9364e402448a3ce7f14d357738310d9248054f";
+      };
+    }
+    {
+      name = "kind_of___kind_of_3.2.2.tgz";
+      path = fetchurl {
+        name = "kind_of___kind_of_3.2.2.tgz";
+        url  = "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz";
+        sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64";
+      };
+    }
+    {
+      name = "kind_of___kind_of_4.0.0.tgz";
+      path = fetchurl {
+        name = "kind_of___kind_of_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz";
+        sha1 = "20813df3d712928b207378691a45066fae72dd57";
+      };
+    }
+    {
+      name = "kind_of___kind_of_5.1.0.tgz";
+      path = fetchurl {
+        name = "kind_of___kind_of_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz";
+        sha1 = "729c91e2d857b7a419a1f9aa65685c4c33f5845d";
+      };
+    }
+    {
+      name = "kind_of___kind_of_6.0.3.tgz";
+      path = fetchurl {
+        name = "kind_of___kind_of_6.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz";
+        sha1 = "07c05034a6c349fa06e24fa35aa76db4580ce4dd";
+      };
+    }
+    {
+      name = "lcid___lcid_1.0.0.tgz";
+      path = fetchurl {
+        name = "lcid___lcid_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz";
+        sha1 = "308accafa0bc483a3867b4b6f2b9506251d1b835";
+      };
+    }
+    {
+      name = "levn___levn_0.3.0.tgz";
+      path = fetchurl {
+        name = "levn___levn_0.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz";
+        sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
+      };
+    }
+    {
+      name = "lint_staged___lint_staged_8.2.1.tgz";
+      path = fetchurl {
+        name = "lint_staged___lint_staged_8.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.2.1.tgz";
+        sha1 = "752fcf222d9d28f323a3b80f1e668f3654ff221f";
+      };
+    }
+    {
+      name = "listr_silent_renderer___listr_silent_renderer_1.1.1.tgz";
+      path = fetchurl {
+        name = "listr_silent_renderer___listr_silent_renderer_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz";
+        sha1 = "924b5a3757153770bf1a8e3fbf74b8bbf3f9242e";
+      };
+    }
+    {
+      name = "listr_update_renderer___listr_update_renderer_0.5.0.tgz";
+      path = fetchurl {
+        name = "listr_update_renderer___listr_update_renderer_0.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz";
+        sha1 = "4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2";
+      };
+    }
+    {
+      name = "listr_verbose_renderer___listr_verbose_renderer_0.5.0.tgz";
+      path = fetchurl {
+        name = "listr_verbose_renderer___listr_verbose_renderer_0.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz";
+        sha1 = "f1132167535ea4c1261102b9f28dac7cba1e03db";
+      };
+    }
+    {
+      name = "listr___listr_0.14.3.tgz";
+      path = fetchurl {
+        name = "listr___listr_0.14.3.tgz";
+        url  = "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz";
+        sha1 = "2fea909604e434be464c50bddba0d496928fa586";
+      };
+    }
+    {
+      name = "load_json_file___load_json_file_2.0.0.tgz";
+      path = fetchurl {
+        name = "load_json_file___load_json_file_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz";
+        sha1 = "7947e42149af80d696cbf797bcaabcfe1fe29ca8";
+      };
+    }
+    {
+      name = "locate_path___locate_path_2.0.0.tgz";
+      path = fetchurl {
+        name = "locate_path___locate_path_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz";
+        sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e";
+      };
+    }
+    {
+      name = "locate_path___locate_path_3.0.0.tgz";
+      path = fetchurl {
+        name = "locate_path___locate_path_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz";
+        sha1 = "dbec3b3ab759758071b58fe59fc41871af21400e";
+      };
+    }
+    {
+      name = "lodash.memoize___lodash.memoize_4.1.2.tgz";
+      path = fetchurl {
+        name = "lodash.memoize___lodash.memoize_4.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz";
+        sha1 = "bcc6c49a42a2840ed997f323eada5ecd182e0bfe";
+      };
+    }
+    {
+      name = "lodash.merge___lodash.merge_4.6.2.tgz";
+      path = fetchurl {
+        name = "lodash.merge___lodash.merge_4.6.2.tgz";
+        url  = "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz";
+        sha1 = "558aa53b43b661e1925a0afdfa36a9a1085fe57a";
+      };
+    }
+    {
+      name = "lodash.unescape___lodash.unescape_4.0.1.tgz";
+      path = fetchurl {
+        name = "lodash.unescape___lodash.unescape_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz";
+        sha1 = "bf2249886ce514cda112fae9218cdc065211fc9c";
+      };
+    }
+    {
+      name = "lodash___lodash_4.17.15.tgz";
+      path = fetchurl {
+        name = "lodash___lodash_4.17.15.tgz";
+        url  = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz";
+        sha1 = "b447f6670a0455bbfeedd11392eff330ea097548";
+      };
+    }
+    {
+      name = "log_symbols___log_symbols_1.0.2.tgz";
+      path = fetchurl {
+        name = "log_symbols___log_symbols_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz";
+        sha1 = "376ff7b58ea3086a0f09facc74617eca501e1a18";
+      };
+    }
+    {
+      name = "log_symbols___log_symbols_2.2.0.tgz";
+      path = fetchurl {
+        name = "log_symbols___log_symbols_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz";
+        sha1 = "5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a";
+      };
+    }
+    {
+      name = "log_update___log_update_2.3.0.tgz";
+      path = fetchurl {
+        name = "log_update___log_update_2.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz";
+        sha1 = "88328fd7d1ce7938b29283746f0b1bc126b24708";
+      };
+    }
+    {
+      name = "loglevel_colored_level_prefix___loglevel_colored_level_prefix_1.0.0.tgz";
+      path = fetchurl {
+        name = "loglevel_colored_level_prefix___loglevel_colored_level_prefix_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz";
+        sha1 = "6a40218fdc7ae15fc76c3d0f3e676c465388603e";
+      };
+    }
+    {
+      name = "loglevel___loglevel_1.6.8.tgz";
+      path = fetchurl {
+        name = "loglevel___loglevel_1.6.8.tgz";
+        url  = "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz";
+        sha1 = "8a25fb75d092230ecd4457270d80b54e28011171";
+      };
+    }
+    {
+      name = "loose_envify___loose_envify_1.4.0.tgz";
+      path = fetchurl {
+        name = "loose_envify___loose_envify_1.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz";
+        sha1 = "71ee51fa7be4caec1a63839f7e682d8132d30caf";
+      };
+    }
+    {
+      name = "lru_cache___lru_cache_4.1.5.tgz";
+      path = fetchurl {
+        name = "lru_cache___lru_cache_4.1.5.tgz";
+        url  = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz";
+        sha1 = "8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd";
+      };
+    }
+    {
+      name = "make_plural___make_plural_4.3.0.tgz";
+      path = fetchurl {
+        name = "make_plural___make_plural_4.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/make-plural/-/make-plural-4.3.0.tgz";
+        sha1 = "f23de08efdb0cac2e0c9ba9f315b0dff6b4c2735";
+      };
+    }
+    {
+      name = "map_cache___map_cache_0.2.2.tgz";
+      path = fetchurl {
+        name = "map_cache___map_cache_0.2.2.tgz";
+        url  = "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz";
+        sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf";
+      };
+    }
+    {
+      name = "map_obj___map_obj_2.0.0.tgz";
+      path = fetchurl {
+        name = "map_obj___map_obj_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz";
+        sha1 = "a65cd29087a92598b8791257a523e021222ac1f9";
+      };
+    }
+    {
+      name = "map_visit___map_visit_1.0.0.tgz";
+      path = fetchurl {
+        name = "map_visit___map_visit_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz";
+        sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f";
+      };
+    }
+    {
+      name = "matcher___matcher_1.1.1.tgz";
+      path = fetchurl {
+        name = "matcher___matcher_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz";
+        sha1 = "51d8301e138f840982b338b116bb0c09af62c1c2";
+      };
+    }
+    {
+      name = "mem___mem_1.1.0.tgz";
+      path = fetchurl {
+        name = "mem___mem_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz";
+        sha1 = "5edd52b485ca1d900fe64895505399a0dfa45f76";
+      };
+    }
+    {
+      name = "messageformat_parser___messageformat_parser_1.1.0.tgz";
+      path = fetchurl {
+        name = "messageformat_parser___messageformat_parser_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/messageformat-parser/-/messageformat-parser-1.1.0.tgz";
+        sha1 = "13ba2250a76bbde8e0fca0dbb3475f95c594a90a";
+      };
+    }
+    {
+      name = "messageformat___messageformat_1.1.1.tgz";
+      path = fetchurl {
+        name = "messageformat___messageformat_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/messageformat/-/messageformat-1.1.1.tgz";
+        sha1 = "ceaa2e6c86929d4807058275a7372b1bd963bdf6";
+      };
+    }
+    {
+      name = "micromatch___micromatch_3.1.10.tgz";
+      path = fetchurl {
+        name = "micromatch___micromatch_3.1.10.tgz";
+        url  = "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz";
+        sha1 = "70859bc95c9840952f359a068a3fc49f9ecfac23";
+      };
+    }
+    {
+      name = "mimic_fn___mimic_fn_1.2.0.tgz";
+      path = fetchurl {
+        name = "mimic_fn___mimic_fn_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz";
+        sha1 = "820c86a39334640e99516928bd03fca88057d022";
+      };
+    }
+    {
+      name = "minimatch___minimatch_3.0.4.tgz";
+      path = fetchurl {
+        name = "minimatch___minimatch_3.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz";
+        sha1 = "5166e286457f03306064be5497e8dbb0c3d32083";
+      };
+    }
+    {
+      name = "minimist___minimist_1.2.5.tgz";
+      path = fetchurl {
+        name = "minimist___minimist_1.2.5.tgz";
+        url  = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz";
+        sha1 = "67d66014b66a6a8aaa0c083c5fd58df4e4e97602";
+      };
+    }
+    {
+      name = "mixin_deep___mixin_deep_1.3.2.tgz";
+      path = fetchurl {
+        name = "mixin_deep___mixin_deep_1.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz";
+        sha1 = "1120b43dc359a785dce65b55b82e257ccf479566";
+      };
+    }
+    {
+      name = "mkdirp___mkdirp_0.5.5.tgz";
+      path = fetchurl {
+        name = "mkdirp___mkdirp_0.5.5.tgz";
+        url  = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz";
+        sha1 = "d91cefd62d1436ca0f41620e251288d420099def";
+      };
+    }
+    {
+      name = "ms___ms_2.0.0.tgz";
+      path = fetchurl {
+        name = "ms___ms_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz";
+        sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
+      };
+    }
+    {
+      name = "ms___ms_2.1.2.tgz";
+      path = fetchurl {
+        name = "ms___ms_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz";
+        sha1 = "d09d1f357b443f493382a8eb3ccd183872ae6009";
+      };
+    }
+    {
+      name = "mute_stream___mute_stream_0.0.7.tgz";
+      path = fetchurl {
+        name = "mute_stream___mute_stream_0.0.7.tgz";
+        url  = "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz";
+        sha1 = "3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab";
+      };
+    }
+    {
+      name = "nanomatch___nanomatch_1.2.13.tgz";
+      path = fetchurl {
+        name = "nanomatch___nanomatch_1.2.13.tgz";
+        url  = "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz";
+        sha1 = "b87a8aa4fc0de8fe6be88895b38983ff265bd119";
+      };
+    }
+    {
+      name = "natural_compare___natural_compare_1.4.0.tgz";
+      path = fetchurl {
+        name = "natural_compare___natural_compare_1.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz";
+        sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7";
+      };
+    }
+    {
+      name = "nice_try___nice_try_1.0.5.tgz";
+      path = fetchurl {
+        name = "nice_try___nice_try_1.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz";
+        sha1 = "a3378a7696ce7d223e88fc9b764bd7ef1089e366";
+      };
+    }
+    {
+      name = "nopt___nopt_3.0.6.tgz";
+      path = fetchurl {
+        name = "nopt___nopt_3.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz";
+        sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9";
+      };
+    }
+    {
+      name = "normalize_package_data___normalize_package_data_2.5.0.tgz";
+      path = fetchurl {
+        name = "normalize_package_data___normalize_package_data_2.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz";
+        sha1 = "e66db1838b200c1dfc233225d12cb36520e234a8";
+      };
+    }
+    {
+      name = "npm_path___npm_path_2.0.4.tgz";
+      path = fetchurl {
+        name = "npm_path___npm_path_2.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz";
+        sha1 = "c641347a5ff9d6a09e4d9bce5580c4f505278e64";
+      };
+    }
+    {
+      name = "npm_run_path___npm_run_path_2.0.2.tgz";
+      path = fetchurl {
+        name = "npm_run_path___npm_run_path_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz";
+        sha1 = "35a9232dfa35d7067b4cb2ddf2357b1871536c5f";
+      };
+    }
+    {
+      name = "npm_which___npm_which_3.0.1.tgz";
+      path = fetchurl {
+        name = "npm_which___npm_which_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz";
+        sha1 = "9225f26ec3a285c209cae67c3b11a6b4ab7140aa";
+      };
+    }
+    {
+      name = "number_is_nan___number_is_nan_1.0.1.tgz";
+      path = fetchurl {
+        name = "number_is_nan___number_is_nan_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz";
+        sha1 = "097b602b53422a522c1afb8790318336941a011d";
+      };
+    }
+    {
+      name = "object_assign___object_assign_4.1.1.tgz";
+      path = fetchurl {
+        name = "object_assign___object_assign_4.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz";
+        sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
+      };
+    }
+    {
+      name = "object_copy___object_copy_0.1.0.tgz";
+      path = fetchurl {
+        name = "object_copy___object_copy_0.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz";
+        sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c";
+      };
+    }
+    {
+      name = "object_inspect___object_inspect_1.7.0.tgz";
+      path = fetchurl {
+        name = "object_inspect___object_inspect_1.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz";
+        sha1 = "f4f6bd181ad77f006b5ece60bd0b6f398ff74a67";
+      };
+    }
+    {
+      name = "object_is___object_is_1.1.2.tgz";
+      path = fetchurl {
+        name = "object_is___object_is_1.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz";
+        sha1 = "c5d2e87ff9e119f78b7a088441519e2eec1573b6";
+      };
+    }
+    {
+      name = "object_keys___object_keys_1.1.1.tgz";
+      path = fetchurl {
+        name = "object_keys___object_keys_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz";
+        sha1 = "1c47f272df277f3b1daf061677d9c82e2322c60e";
+      };
+    }
+    {
+      name = "object_visit___object_visit_1.0.1.tgz";
+      path = fetchurl {
+        name = "object_visit___object_visit_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz";
+        sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb";
+      };
+    }
+    {
+      name = "object.assign___object.assign_4.1.0.tgz";
+      path = fetchurl {
+        name = "object.assign___object.assign_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz";
+        sha1 = "968bf1100d7956bb3ca086f006f846b3bc4008da";
+      };
+    }
+    {
+      name = "object.entries___object.entries_1.1.1.tgz";
+      path = fetchurl {
+        name = "object.entries___object.entries_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz";
+        sha1 = "ee1cf04153de02bb093fec33683900f57ce5399b";
+      };
+    }
+    {
+      name = "object.fromentries___object.fromentries_2.0.2.tgz";
+      path = fetchurl {
+        name = "object.fromentries___object.fromentries_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz";
+        sha1 = "4a09c9b9bb3843dd0f89acdb517a794d4f355ac9";
+      };
+    }
+    {
+      name = "object.pick___object.pick_1.3.0.tgz";
+      path = fetchurl {
+        name = "object.pick___object.pick_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz";
+        sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747";
+      };
+    }
+    {
+      name = "object.values___object.values_1.1.1.tgz";
+      path = fetchurl {
+        name = "object.values___object.values_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz";
+        sha1 = "68a99ecde356b7e9295a3c5e0ce31dc8c953de5e";
+      };
+    }
+    {
+      name = "once___once_1.4.0.tgz";
+      path = fetchurl {
+        name = "once___once_1.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz";
+        sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
+      };
+    }
+    {
+      name = "onetime___onetime_2.0.1.tgz";
+      path = fetchurl {
+        name = "onetime___onetime_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz";
+        sha1 = "067428230fd67443b2794b22bba528b6867962d4";
+      };
+    }
+    {
+      name = "optionator___optionator_0.8.3.tgz";
+      path = fetchurl {
+        name = "optionator___optionator_0.8.3.tgz";
+        url  = "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz";
+        sha1 = "84fa1d036fe9d3c7e21d99884b601167ec8fb495";
+      };
+    }
+    {
+      name = "os_locale___os_locale_2.1.0.tgz";
+      path = fetchurl {
+        name = "os_locale___os_locale_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz";
+        sha1 = "42bc2900a6b5b8bd17376c8e882b65afccf24bf2";
+      };
+    }
+    {
+      name = "os_tmpdir___os_tmpdir_1.0.2.tgz";
+      path = fetchurl {
+        name = "os_tmpdir___os_tmpdir_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
+        sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
+      };
+    }
+    {
+      name = "p_finally___p_finally_1.0.0.tgz";
+      path = fetchurl {
+        name = "p_finally___p_finally_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz";
+        sha1 = "3fbcfb15b899a44123b34b6dcc18b724336a2cae";
+      };
+    }
+    {
+      name = "p_limit___p_limit_1.3.0.tgz";
+      path = fetchurl {
+        name = "p_limit___p_limit_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz";
+        sha1 = "b86bd5f0c25690911c7590fcbfc2010d54b3ccb8";
+      };
+    }
+    {
+      name = "p_limit___p_limit_2.3.0.tgz";
+      path = fetchurl {
+        name = "p_limit___p_limit_2.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz";
+        sha1 = "3dd33c647a214fdfffd835933eb086da0dc21db1";
+      };
+    }
+    {
+      name = "p_locate___p_locate_2.0.0.tgz";
+      path = fetchurl {
+        name = "p_locate___p_locate_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz";
+        sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43";
+      };
+    }
+    {
+      name = "p_locate___p_locate_3.0.0.tgz";
+      path = fetchurl {
+        name = "p_locate___p_locate_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz";
+        sha1 = "322d69a05c0264b25997d9f40cd8a891ab0064a4";
+      };
+    }
+    {
+      name = "p_map___p_map_1.2.0.tgz";
+      path = fetchurl {
+        name = "p_map___p_map_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz";
+        sha1 = "e4e94f311eabbc8633a1e79908165fca26241b6b";
+      };
+    }
+    {
+      name = "p_map___p_map_2.1.0.tgz";
+      path = fetchurl {
+        name = "p_map___p_map_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz";
+        sha1 = "310928feef9c9ecc65b68b17693018a665cea175";
+      };
+    }
+    {
+      name = "p_try___p_try_1.0.0.tgz";
+      path = fetchurl {
+        name = "p_try___p_try_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz";
+        sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3";
+      };
+    }
+    {
+      name = "p_try___p_try_2.2.0.tgz";
+      path = fetchurl {
+        name = "p_try___p_try_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz";
+        sha1 = "cb2868540e313d61de58fafbe35ce9004d5540e6";
+      };
+    }
+    {
+      name = "parent_module___parent_module_1.0.1.tgz";
+      path = fetchurl {
+        name = "parent_module___parent_module_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz";
+        sha1 = "691d2709e78c79fae3a156622452d00762caaaa2";
+      };
+    }
+    {
+      name = "parse_json___parse_json_2.2.0.tgz";
+      path = fetchurl {
+        name = "parse_json___parse_json_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz";
+        sha1 = "f480f40434ef80741f8469099f8dea18f55a4dc9";
+      };
+    }
+    {
+      name = "parse_json___parse_json_4.0.0.tgz";
+      path = fetchurl {
+        name = "parse_json___parse_json_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz";
+        sha1 = "be35f5425be1f7f6c747184f98a788cb99477ee0";
+      };
+    }
+    {
+      name = "pascalcase___pascalcase_0.1.1.tgz";
+      path = fetchurl {
+        name = "pascalcase___pascalcase_0.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz";
+        sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14";
+      };
+    }
+    {
+      name = "path_exists___path_exists_3.0.0.tgz";
+      path = fetchurl {
+        name = "path_exists___path_exists_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz";
+        sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515";
+      };
+    }
+    {
+      name = "path_is_absolute___path_is_absolute_1.0.1.tgz";
+      path = fetchurl {
+        name = "path_is_absolute___path_is_absolute_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+        sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
+      };
+    }
+    {
+      name = "path_is_inside___path_is_inside_1.0.2.tgz";
+      path = fetchurl {
+        name = "path_is_inside___path_is_inside_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz";
+        sha1 = "365417dede44430d1c11af61027facf074bdfc53";
+      };
+    }
+    {
+      name = "path_key___path_key_2.0.1.tgz";
+      path = fetchurl {
+        name = "path_key___path_key_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz";
+        sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40";
+      };
+    }
+    {
+      name = "path_parse___path_parse_1.0.6.tgz";
+      path = fetchurl {
+        name = "path_parse___path_parse_1.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz";
+        sha1 = "d62dbb5679405d72c4737ec58600e9ddcf06d24c";
+      };
+    }
+    {
+      name = "path_type___path_type_2.0.0.tgz";
+      path = fetchurl {
+        name = "path_type___path_type_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz";
+        sha1 = "f012ccb8415b7096fc2daa1054c3d72389594c73";
+      };
+    }
+    {
+      name = "pify___pify_2.3.0.tgz";
+      path = fetchurl {
+        name = "pify___pify_2.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz";
+        sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c";
+      };
+    }
+    {
+      name = "pify___pify_3.0.0.tgz";
+      path = fetchurl {
+        name = "pify___pify_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz";
+        sha1 = "e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176";
+      };
+    }
+    {
+      name = "pinkie_promise___pinkie_promise_2.0.1.tgz";
+      path = fetchurl {
+        name = "pinkie_promise___pinkie_promise_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
+        sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa";
+      };
+    }
+    {
+      name = "pinkie___pinkie_2.0.4.tgz";
+      path = fetchurl {
+        name = "pinkie___pinkie_2.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz";
+        sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870";
+      };
+    }
+    {
+      name = "pkg_dir___pkg_dir_2.0.0.tgz";
+      path = fetchurl {
+        name = "pkg_dir___pkg_dir_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz";
+        sha1 = "f6d5d1109e19d63edf428e0bd57e12777615334b";
+      };
+    }
+    {
+      name = "pkg_dir___pkg_dir_3.0.0.tgz";
+      path = fetchurl {
+        name = "pkg_dir___pkg_dir_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz";
+        sha1 = "2749020f239ed990881b1f71210d51eb6523bea3";
+      };
+    }
+    {
+      name = "please_upgrade_node___please_upgrade_node_3.2.0.tgz";
+      path = fetchurl {
+        name = "please_upgrade_node___please_upgrade_node_3.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz";
+        sha1 = "aeddd3f994c933e4ad98b99d9a556efa0e2fe942";
+      };
+    }
+    {
+      name = "pluralize___pluralize_7.0.0.tgz";
+      path = fetchurl {
+        name = "pluralize___pluralize_7.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz";
+        sha1 = "298b89df8b93b0221dbf421ad2b1b1ea23fc6777";
+      };
+    }
+    {
+      name = "posix_character_classes___posix_character_classes_0.1.1.tgz";
+      path = fetchurl {
+        name = "posix_character_classes___posix_character_classes_0.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz";
+        sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab";
+      };
+    }
+    {
+      name = "prelude_ls___prelude_ls_1.1.2.tgz";
+      path = fetchurl {
+        name = "prelude_ls___prelude_ls_1.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz";
+        sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
+      };
+    }
+    {
+      name = "prettier_eslint_cli___prettier_eslint_cli_4.7.1.tgz";
+      path = fetchurl {
+        name = "prettier_eslint_cli___prettier_eslint_cli_4.7.1.tgz";
+        url  = "https://registry.yarnpkg.com/prettier-eslint-cli/-/prettier-eslint-cli-4.7.1.tgz";
+        sha1 = "3d103c494baa4e80b99ad53e2b9db7620101859f";
+      };
+    }
+    {
+      name = "prettier_eslint___prettier_eslint_8.8.2.tgz";
+      path = fetchurl {
+        name = "prettier_eslint___prettier_eslint_8.8.2.tgz";
+        url  = "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-8.8.2.tgz";
+        sha1 = "fcb29a48ab4524e234680797fe70e9d136ccaf0b";
+      };
+    }
+    {
+      name = "prettier___prettier_1.19.1.tgz";
+      path = fetchurl {
+        name = "prettier___prettier_1.19.1.tgz";
+        url  = "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz";
+        sha1 = "f7d7f5ff8a9cd872a7be4ca142095956a60797cb";
+      };
+    }
+    {
+      name = "pretty_format___pretty_format_23.6.0.tgz";
+      path = fetchurl {
+        name = "pretty_format___pretty_format_23.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz";
+        sha1 = "5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760";
+      };
+    }
+    {
+      name = "process_nextick_args___process_nextick_args_2.0.1.tgz";
+      path = fetchurl {
+        name = "process_nextick_args___process_nextick_args_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
+        sha1 = "7820d9b16120cc55ca9ae7792680ae7dba6d7fe2";
+      };
+    }
+    {
+      name = "progress___progress_2.0.3.tgz";
+      path = fetchurl {
+        name = "progress___progress_2.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz";
+        sha1 = "7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8";
+      };
+    }
+    {
+      name = "prop_types___prop_types_15.7.2.tgz";
+      path = fetchurl {
+        name = "prop_types___prop_types_15.7.2.tgz";
+        url  = "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz";
+        sha1 = "52c41e75b8c87e72b9d9360e0206b99dcbffa6c5";
+      };
+    }
+    {
+      name = "property_expr___property_expr_1.5.1.tgz";
+      path = fetchurl {
+        name = "property_expr___property_expr_1.5.1.tgz";
+        url  = "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz";
+        sha1 = "22e8706894a0c8e28d58735804f6ba3a3673314f";
+      };
+    }
+    {
+      name = "pseudomap___pseudomap_1.0.2.tgz";
+      path = fetchurl {
+        name = "pseudomap___pseudomap_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz";
+        sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3";
+      };
+    }
+    {
+      name = "pump___pump_3.0.0.tgz";
+      path = fetchurl {
+        name = "pump___pump_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz";
+        sha1 = "b4a2116815bde2f4e1ea602354e8c75565107a64";
+      };
+    }
+    {
+      name = "punycode___punycode_2.1.1.tgz";
+      path = fetchurl {
+        name = "punycode___punycode_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz";
+        sha1 = "b58b010ac40c22c5657616c8d2c2c02c7bf479ec";
+      };
+    }
+    {
+      name = "quick_lru___quick_lru_1.1.0.tgz";
+      path = fetchurl {
+        name = "quick_lru___quick_lru_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz";
+        sha1 = "4360b17c61136ad38078397ff11416e186dcfbb8";
+      };
+    }
+    {
+      name = "ramda___ramda_0.26.1.tgz";
+      path = fetchurl {
+        name = "ramda___ramda_0.26.1.tgz";
+        url  = "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz";
+        sha1 = "8d41351eb8111c55353617fc3bbffad8e4d35d06";
+      };
+    }
+    {
+      name = "react_is___react_is_16.13.1.tgz";
+      path = fetchurl {
+        name = "react_is___react_is_16.13.1.tgz";
+        url  = "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz";
+        sha1 = "789729a4dc36de2999dc156dd6c1d9c18cea56a4";
+      };
+    }
+    {
+      name = "read_pkg_up___read_pkg_up_2.0.0.tgz";
+      path = fetchurl {
+        name = "read_pkg_up___read_pkg_up_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz";
+        sha1 = "6b72a8048984e0c41e79510fd5e9fa99b3b549be";
+      };
+    }
+    {
+      name = "read_pkg___read_pkg_2.0.0.tgz";
+      path = fetchurl {
+        name = "read_pkg___read_pkg_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz";
+        sha1 = "8ef1c0623c6a6db0dc6713c4bfac46332b2368f8";
+      };
+    }
+    {
+      name = "read_pkg___read_pkg_4.0.1.tgz";
+      path = fetchurl {
+        name = "read_pkg___read_pkg_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz";
+        sha1 = "963625378f3e1c4d48c85872b5a6ec7d5d093237";
+      };
+    }
+    {
+      name = "readable_stream___readable_stream_2.3.7.tgz";
+      path = fetchurl {
+        name = "readable_stream___readable_stream_2.3.7.tgz";
+        url  = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz";
+        sha1 = "1eca1cf711aef814c04f62252a36a62f6cb23b57";
+      };
+    }
+    {
+      name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz";
+      path = fetchurl {
+        name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz";
+        url  = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz";
+        sha1 = "be05ad7f9bf7d22e056f9726cee5017fbf19e2e9";
+      };
+    }
+    {
+      name = "regenerator_runtime___regenerator_runtime_0.13.5.tgz";
+      path = fetchurl {
+        name = "regenerator_runtime___regenerator_runtime_0.13.5.tgz";
+        url  = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz";
+        sha1 = "d878a1d094b4306d10b9096484b33ebd55e26697";
+      };
+    }
+    {
+      name = "regex_not___regex_not_1.0.2.tgz";
+      path = fetchurl {
+        name = "regex_not___regex_not_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz";
+        sha1 = "1f4ece27e00b0b65e0247a6810e6a85d83a5752c";
+      };
+    }
+    {
+      name = "regexp.prototype.flags___regexp.prototype.flags_1.3.0.tgz";
+      path = fetchurl {
+        name = "regexp.prototype.flags___regexp.prototype.flags_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz";
+        sha1 = "7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75";
+      };
+    }
+    {
+      name = "regexpp___regexpp_1.1.0.tgz";
+      path = fetchurl {
+        name = "regexpp___regexpp_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz";
+        sha1 = "0e3516dd0b7904f413d2d4193dce4618c3a689ab";
+      };
+    }
+    {
+      name = "regexpp___regexpp_2.0.1.tgz";
+      path = fetchurl {
+        name = "regexpp___regexpp_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz";
+        sha1 = "8d19d31cf632482b589049f8281f93dbcba4d07f";
+      };
+    }
+    {
+      name = "repeat_element___repeat_element_1.1.3.tgz";
+      path = fetchurl {
+        name = "repeat_element___repeat_element_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz";
+        sha1 = "782e0d825c0c5a3bb39731f84efee6b742e6b1ce";
+      };
+    }
+    {
+      name = "repeat_string___repeat_string_1.6.1.tgz";
+      path = fetchurl {
+        name = "repeat_string___repeat_string_1.6.1.tgz";
+        url  = "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz";
+        sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637";
+      };
+    }
+    {
+      name = "require_directory___require_directory_2.1.1.tgz";
+      path = fetchurl {
+        name = "require_directory___require_directory_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz";
+        sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42";
+      };
+    }
+    {
+      name = "require_main_filename___require_main_filename_1.0.1.tgz";
+      path = fetchurl {
+        name = "require_main_filename___require_main_filename_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz";
+        sha1 = "97f717b69d48784f5f526a6c5aa8ffdda055a4d1";
+      };
+    }
+    {
+      name = "require_relative___require_relative_0.8.7.tgz";
+      path = fetchurl {
+        name = "require_relative___require_relative_0.8.7.tgz";
+        url  = "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz";
+        sha1 = "7999539fc9e047a37928fa196f8e1563dabd36de";
+      };
+    }
+    {
+      name = "require_uncached___require_uncached_1.0.3.tgz";
+      path = fetchurl {
+        name = "require_uncached___require_uncached_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz";
+        sha1 = "4e0d56d6c9662fd31e43011c4b95aa49955421d3";
+      };
+    }
+    {
+      name = "reserved_words___reserved_words_0.1.2.tgz";
+      path = fetchurl {
+        name = "reserved_words___reserved_words_0.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz";
+        sha1 = "00a0940f98cd501aeaaac316411d9adc52b31ab1";
+      };
+    }
+    {
+      name = "resolve_from___resolve_from_1.0.1.tgz";
+      path = fetchurl {
+        name = "resolve_from___resolve_from_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz";
+        sha1 = "26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226";
+      };
+    }
+    {
+      name = "resolve_from___resolve_from_3.0.0.tgz";
+      path = fetchurl {
+        name = "resolve_from___resolve_from_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz";
+        sha1 = "b22c7af7d9d6881bc8b6e653335eebcb0a188748";
+      };
+    }
+    {
+      name = "resolve_from___resolve_from_4.0.0.tgz";
+      path = fetchurl {
+        name = "resolve_from___resolve_from_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz";
+        sha1 = "4abcd852ad32dd7baabfe9b40e00a36db5f392e6";
+      };
+    }
+    {
+      name = "resolve_url___resolve_url_0.2.1.tgz";
+      path = fetchurl {
+        name = "resolve_url___resolve_url_0.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz";
+        sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a";
+      };
+    }
+    {
+      name = "resolve___resolve_1.17.0.tgz";
+      path = fetchurl {
+        name = "resolve___resolve_1.17.0.tgz";
+        url  = "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz";
+        sha1 = "b25941b54968231cc2d1bb76a79cb7f2c0bf8444";
+      };
+    }
+    {
+      name = "restore_cursor___restore_cursor_2.0.0.tgz";
+      path = fetchurl {
+        name = "restore_cursor___restore_cursor_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz";
+        sha1 = "9f7ee287f82fd326d4fd162923d62129eee0dfaf";
+      };
+    }
+    {
+      name = "ret___ret_0.1.15.tgz";
+      path = fetchurl {
+        name = "ret___ret_0.1.15.tgz";
+        url  = "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz";
+        sha1 = "b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc";
+      };
+    }
+    {
+      name = "rimraf___rimraf_2.6.3.tgz";
+      path = fetchurl {
+        name = "rimraf___rimraf_2.6.3.tgz";
+        url  = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz";
+        sha1 = "b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab";
+      };
+    }
+    {
+      name = "rimraf___rimraf_2.7.1.tgz";
+      path = fetchurl {
+        name = "rimraf___rimraf_2.7.1.tgz";
+        url  = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz";
+        sha1 = "35797f13a7fdadc566142c29d4f07ccad483e3ec";
+      };
+    }
+    {
+      name = "run_async___run_async_2.4.1.tgz";
+      path = fetchurl {
+        name = "run_async___run_async_2.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz";
+        sha1 = "8440eccf99ea3e70bd409d49aab88e10c189a455";
+      };
+    }
+    {
+      name = "run_node___run_node_1.0.0.tgz";
+      path = fetchurl {
+        name = "run_node___run_node_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz";
+        sha1 = "46b50b946a2aa2d4947ae1d886e9856fd9cabe5e";
+      };
+    }
+    {
+      name = "rx_lite_aggregates___rx_lite_aggregates_4.0.8.tgz";
+      path = fetchurl {
+        name = "rx_lite_aggregates___rx_lite_aggregates_4.0.8.tgz";
+        url  = "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz";
+        sha1 = "753b87a89a11c95467c4ac1626c4efc4e05c67be";
+      };
+    }
+    {
+      name = "rx_lite___rx_lite_4.0.8.tgz";
+      path = fetchurl {
+        name = "rx_lite___rx_lite_4.0.8.tgz";
+        url  = "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz";
+        sha1 = "0b1e11af8bc44836f04a6407e92da42467b79444";
+      };
+    }
+    {
+      name = "rxjs___rxjs_5.5.12.tgz";
+      path = fetchurl {
+        name = "rxjs___rxjs_5.5.12.tgz";
+        url  = "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz";
+        sha1 = "6fa61b8a77c3d793dbaf270bee2f43f652d741cc";
+      };
+    }
+    {
+      name = "rxjs___rxjs_6.5.5.tgz";
+      path = fetchurl {
+        name = "rxjs___rxjs_6.5.5.tgz";
+        url  = "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz";
+        sha1 = "c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec";
+      };
+    }
+    {
+      name = "safe_buffer___safe_buffer_5.1.2.tgz";
+      path = fetchurl {
+        name = "safe_buffer___safe_buffer_5.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz";
+        sha1 = "991ec69d296e0313747d59bdfd2b745c35f8828d";
+      };
+    }
+    {
+      name = "safe_regex___safe_regex_1.1.0.tgz";
+      path = fetchurl {
+        name = "safe_regex___safe_regex_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz";
+        sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e";
+      };
+    }
+    {
+      name = "safer_buffer___safer_buffer_2.1.2.tgz";
+      path = fetchurl {
+        name = "safer_buffer___safer_buffer_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz";
+        sha1 = "44fa161b0187b9549dd84bb91802f9bd8385cd6a";
+      };
+    }
+    {
+      name = "semver_compare___semver_compare_1.0.0.tgz";
+      path = fetchurl {
+        name = "semver_compare___semver_compare_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz";
+        sha1 = "0dee216a1c941ab37e9efb1788f6afc5ff5537fc";
+      };
+    }
+    {
+      name = "semver___semver_5.7.1.tgz";
+      path = fetchurl {
+        name = "semver___semver_5.7.1.tgz";
+        url  = "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz";
+        sha1 = "a954f931aeba508d307bbf069eff0c01c96116f7";
+      };
+    }
+    {
+      name = "semver___semver_5.5.0.tgz";
+      path = fetchurl {
+        name = "semver___semver_5.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz";
+        sha1 = "dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab";
+      };
+    }
+    {
+      name = "set_blocking___set_blocking_2.0.0.tgz";
+      path = fetchurl {
+        name = "set_blocking___set_blocking_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz";
+        sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
+      };
+    }
+    {
+      name = "set_value___set_value_2.0.1.tgz";
+      path = fetchurl {
+        name = "set_value___set_value_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz";
+        sha1 = "a18d40530e6f07de4228c7defe4227af8cad005b";
+      };
+    }
+    {
+      name = "shebang_command___shebang_command_1.2.0.tgz";
+      path = fetchurl {
+        name = "shebang_command___shebang_command_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz";
+        sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea";
+      };
+    }
+    {
+      name = "shebang_regex___shebang_regex_1.0.0.tgz";
+      path = fetchurl {
+        name = "shebang_regex___shebang_regex_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz";
+        sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3";
+      };
+    }
+    {
+      name = "side_channel___side_channel_1.0.2.tgz";
+      path = fetchurl {
+        name = "side_channel___side_channel_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz";
+        sha1 = "df5d1abadb4e4bf4af1cd8852bf132d2f7876947";
+      };
+    }
+    {
+      name = "signal_exit___signal_exit_3.0.3.tgz";
+      path = fetchurl {
+        name = "signal_exit___signal_exit_3.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz";
+        sha1 = "a1410c2edd8f077b08b4e253c8eacfcaf057461c";
+      };
+    }
+    {
+      name = "simple_git___simple_git_1.132.0.tgz";
+      path = fetchurl {
+        name = "simple_git___simple_git_1.132.0.tgz";
+        url  = "https://registry.yarnpkg.com/simple-git/-/simple-git-1.132.0.tgz";
+        sha1 = "53ac4c5ec9e74e37c2fd461e23309f22fcdf09b1";
+      };
+    }
+    {
+      name = "slash___slash_2.0.0.tgz";
+      path = fetchurl {
+        name = "slash___slash_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz";
+        sha1 = "de552851a1759df3a8f206535442f5ec4ddeab44";
+      };
+    }
+    {
+      name = "slice_ansi___slice_ansi_0.0.4.tgz";
+      path = fetchurl {
+        name = "slice_ansi___slice_ansi_0.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz";
+        sha1 = "edbf8903f66f7ce2f8eafd6ceed65e264c831b35";
+      };
+    }
+    {
+      name = "slice_ansi___slice_ansi_1.0.0.tgz";
+      path = fetchurl {
+        name = "slice_ansi___slice_ansi_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz";
+        sha1 = "044f1a49d8842ff307aad6b505ed178bd950134d";
+      };
+    }
+    {
+      name = "slice_ansi___slice_ansi_2.1.0.tgz";
+      path = fetchurl {
+        name = "slice_ansi___slice_ansi_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz";
+        sha1 = "cacd7693461a637a5788d92a7dd4fba068e81636";
+      };
+    }
+    {
+      name = "snapdragon_node___snapdragon_node_2.1.1.tgz";
+      path = fetchurl {
+        name = "snapdragon_node___snapdragon_node_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz";
+        sha1 = "6c175f86ff14bdb0724563e8f3c1b021a286853b";
+      };
+    }
+    {
+      name = "snapdragon_util___snapdragon_util_3.0.1.tgz";
+      path = fetchurl {
+        name = "snapdragon_util___snapdragon_util_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz";
+        sha1 = "f956479486f2acd79700693f6f7b805e45ab56e2";
+      };
+    }
+    {
+      name = "snapdragon___snapdragon_0.8.2.tgz";
+      path = fetchurl {
+        name = "snapdragon___snapdragon_0.8.2.tgz";
+        url  = "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz";
+        sha1 = "64922e7c565b0e14204ba1aa7d6964278d25182d";
+      };
+    }
+    {
+      name = "source_map_resolve___source_map_resolve_0.5.3.tgz";
+      path = fetchurl {
+        name = "source_map_resolve___source_map_resolve_0.5.3.tgz";
+        url  = "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz";
+        sha1 = "190866bece7553e1f8f267a2ee82c606b5509a1a";
+      };
+    }
+    {
+      name = "source_map_url___source_map_url_0.4.0.tgz";
+      path = fetchurl {
+        name = "source_map_url___source_map_url_0.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz";
+        sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3";
+      };
+    }
+    {
+      name = "source_map___source_map_0.5.7.tgz";
+      path = fetchurl {
+        name = "source_map___source_map_0.5.7.tgz";
+        url  = "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz";
+        sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc";
+      };
+    }
+    {
+      name = "spdx_correct___spdx_correct_3.1.0.tgz";
+      path = fetchurl {
+        name = "spdx_correct___spdx_correct_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz";
+        sha1 = "fb83e504445268f154b074e218c87c003cd31df4";
+      };
+    }
+    {
+      name = "spdx_exceptions___spdx_exceptions_2.3.0.tgz";
+      path = fetchurl {
+        name = "spdx_exceptions___spdx_exceptions_2.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz";
+        sha1 = "3f28ce1a77a00372683eade4a433183527a2163d";
+      };
+    }
+    {
+      name = "spdx_expression_parse___spdx_expression_parse_3.0.1.tgz";
+      path = fetchurl {
+        name = "spdx_expression_parse___spdx_expression_parse_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz";
+        sha1 = "cf70f50482eefdc98e3ce0a6833e4a53ceeba679";
+      };
+    }
+    {
+      name = "spdx_license_ids___spdx_license_ids_3.0.5.tgz";
+      path = fetchurl {
+        name = "spdx_license_ids___spdx_license_ids_3.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz";
+        sha1 = "3694b5804567a458d3c8045842a6358632f62654";
+      };
+    }
+    {
+      name = "split_string___split_string_3.1.0.tgz";
+      path = fetchurl {
+        name = "split_string___split_string_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz";
+        sha1 = "7cb09dda3a86585705c64b39a6466038682e8fe2";
+      };
+    }
+    {
+      name = "sprintf_js___sprintf_js_1.0.3.tgz";
+      path = fetchurl {
+        name = "sprintf_js___sprintf_js_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz";
+        sha1 = "04e6926f662895354f3dd015203633b857297e2c";
+      };
+    }
+    {
+      name = "staged_git_files___staged_git_files_1.1.2.tgz";
+      path = fetchurl {
+        name = "staged_git_files___staged_git_files_1.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz";
+        sha1 = "4326d33886dc9ecfa29a6193bf511ba90a46454b";
+      };
+    }
+    {
+      name = "static_extend___static_extend_0.1.2.tgz";
+      path = fetchurl {
+        name = "static_extend___static_extend_0.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz";
+        sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6";
+      };
+    }
+    {
+      name = "string_argv___string_argv_0.0.2.tgz";
+      path = fetchurl {
+        name = "string_argv___string_argv_0.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz";
+        sha1 = "dac30408690c21f3c3630a3ff3a05877bdcbd736";
+      };
+    }
+    {
+      name = "string_width___string_width_1.0.2.tgz";
+      path = fetchurl {
+        name = "string_width___string_width_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz";
+        sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
+      };
+    }
+    {
+      name = "string_width___string_width_2.1.1.tgz";
+      path = fetchurl {
+        name = "string_width___string_width_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz";
+        sha1 = "ab93f27a8dc13d28cac815c462143a6d9012ae9e";
+      };
+    }
+    {
+      name = "string_width___string_width_3.1.0.tgz";
+      path = fetchurl {
+        name = "string_width___string_width_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz";
+        sha1 = "22767be21b62af1081574306f69ac51b62203961";
+      };
+    }
+    {
+      name = "string.prototype.matchall___string.prototype.matchall_4.0.2.tgz";
+      path = fetchurl {
+        name = "string.prototype.matchall___string.prototype.matchall_4.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz";
+        sha1 = "48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e";
+      };
+    }
+    {
+      name = "string.prototype.trimend___string.prototype.trimend_1.0.1.tgz";
+      path = fetchurl {
+        name = "string.prototype.trimend___string.prototype.trimend_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz";
+        sha1 = "85812a6b847ac002270f5808146064c995fb6913";
+      };
+    }
+    {
+      name = "string.prototype.trimleft___string.prototype.trimleft_2.1.2.tgz";
+      path = fetchurl {
+        name = "string.prototype.trimleft___string.prototype.trimleft_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz";
+        sha1 = "4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc";
+      };
+    }
+    {
+      name = "string.prototype.trimright___string.prototype.trimright_2.1.2.tgz";
+      path = fetchurl {
+        name = "string.prototype.trimright___string.prototype.trimright_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz";
+        sha1 = "c76f1cef30f21bbad8afeb8db1511496cfb0f2a3";
+      };
+    }
+    {
+      name = "string.prototype.trimstart___string.prototype.trimstart_1.0.1.tgz";
+      path = fetchurl {
+        name = "string.prototype.trimstart___string.prototype.trimstart_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz";
+        sha1 = "14af6d9f34b053f7cfc89b72f8f2ee14b9039a54";
+      };
+    }
+    {
+      name = "string_decoder___string_decoder_1.1.1.tgz";
+      path = fetchurl {
+        name = "string_decoder___string_decoder_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz";
+        sha1 = "9cf1611ba62685d7030ae9e4ba34149c3af03fc8";
+      };
+    }
+    {
+      name = "stringify_object___stringify_object_3.3.0.tgz";
+      path = fetchurl {
+        name = "stringify_object___stringify_object_3.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz";
+        sha1 = "703065aefca19300d3ce88af4f5b3956d7556629";
+      };
+    }
+    {
+      name = "strip_ansi___strip_ansi_3.0.1.tgz";
+      path = fetchurl {
+        name = "strip_ansi___strip_ansi_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz";
+        sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
+      };
+    }
+    {
+      name = "strip_ansi___strip_ansi_4.0.0.tgz";
+      path = fetchurl {
+        name = "strip_ansi___strip_ansi_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz";
+        sha1 = "a8479022eb1ac368a871389b635262c505ee368f";
+      };
+    }
+    {
+      name = "strip_ansi___strip_ansi_5.2.0.tgz";
+      path = fetchurl {
+        name = "strip_ansi___strip_ansi_5.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz";
+        sha1 = "8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae";
+      };
+    }
+    {
+      name = "strip_bom___strip_bom_3.0.0.tgz";
+      path = fetchurl {
+        name = "strip_bom___strip_bom_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz";
+        sha1 = "2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3";
+      };
+    }
+    {
+      name = "strip_eof___strip_eof_1.0.0.tgz";
+      path = fetchurl {
+        name = "strip_eof___strip_eof_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz";
+        sha1 = "bb43ff5598a6eb05d89b59fcd129c983313606bf";
+      };
+    }
+    {
+      name = "strip_json_comments___strip_json_comments_2.0.1.tgz";
+      path = fetchurl {
+        name = "strip_json_comments___strip_json_comments_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz";
+        sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a";
+      };
+    }
+    {
+      name = "supports_color___supports_color_2.0.0.tgz";
+      path = fetchurl {
+        name = "supports_color___supports_color_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz";
+        sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
+      };
+    }
+    {
+      name = "supports_color___supports_color_4.5.0.tgz";
+      path = fetchurl {
+        name = "supports_color___supports_color_4.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz";
+        sha1 = "be7a0de484dec5c5cddf8b3d59125044912f635b";
+      };
+    }
+    {
+      name = "supports_color___supports_color_5.5.0.tgz";
+      path = fetchurl {
+        name = "supports_color___supports_color_5.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz";
+        sha1 = "e2e69a44ac8772f78a1ec0b35b689df6530efc8f";
+      };
+    }
+    {
+      name = "symbol_observable___symbol_observable_1.0.1.tgz";
+      path = fetchurl {
+        name = "symbol_observable___symbol_observable_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz";
+        sha1 = "8340fc4702c3122df5d22288f88283f513d3fdd4";
+      };
+    }
+    {
+      name = "symbol_observable___symbol_observable_1.2.0.tgz";
+      path = fetchurl {
+        name = "symbol_observable___symbol_observable_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz";
+        sha1 = "c22688aed4eab3cdc2dfeacbb561660560a00804";
+      };
+    }
+    {
+      name = "synchronous_promise___synchronous_promise_2.0.12.tgz";
+      path = fetchurl {
+        name = "synchronous_promise___synchronous_promise_2.0.12.tgz";
+        url  = "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.12.tgz";
+        sha1 = "219934f23c19c9aa716276cf2e1f8d4e5b04d07f";
+      };
+    }
+    {
+      name = "table___table_4.0.2.tgz";
+      path = fetchurl {
+        name = "table___table_4.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz";
+        sha1 = "a33447375391e766ad34d3486e6e2aedc84d2e36";
+      };
+    }
+    {
+      name = "table___table_5.4.6.tgz";
+      path = fetchurl {
+        name = "table___table_5.4.6.tgz";
+        url  = "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz";
+        sha1 = "1292d19500ce3f86053b05f0e8e7e4a3bb21079e";
+      };
+    }
+    {
+      name = "text_table___text_table_0.2.0.tgz";
+      path = fetchurl {
+        name = "text_table___text_table_0.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz";
+        sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4";
+      };
+    }
+    {
+      name = "through___through_2.3.8.tgz";
+      path = fetchurl {
+        name = "through___through_2.3.8.tgz";
+        url  = "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz";
+        sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5";
+      };
+    }
+    {
+      name = "tmp___tmp_0.0.33.tgz";
+      path = fetchurl {
+        name = "tmp___tmp_0.0.33.tgz";
+        url  = "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz";
+        sha1 = "6d34335889768d21b2bcda0aa277ced3b1bfadf9";
+      };
+    }
+    {
+      name = "to_fast_properties___to_fast_properties_2.0.0.tgz";
+      path = fetchurl {
+        name = "to_fast_properties___to_fast_properties_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz";
+        sha1 = "dc5e698cbd079265bc73e0377681a4e4e83f616e";
+      };
+    }
+    {
+      name = "to_object_path___to_object_path_0.3.0.tgz";
+      path = fetchurl {
+        name = "to_object_path___to_object_path_0.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz";
+        sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af";
+      };
+    }
+    {
+      name = "to_regex_range___to_regex_range_2.1.1.tgz";
+      path = fetchurl {
+        name = "to_regex_range___to_regex_range_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz";
+        sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38";
+      };
+    }
+    {
+      name = "to_regex___to_regex_3.0.2.tgz";
+      path = fetchurl {
+        name = "to_regex___to_regex_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz";
+        sha1 = "13cfdd9b336552f30b51f33a8ae1b42a7a7599ce";
+      };
+    }
+    {
+      name = "toposort___toposort_2.0.2.tgz";
+      path = fetchurl {
+        name = "toposort___toposort_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz";
+        sha1 = "ae21768175d1559d48bef35420b2f4962f09c330";
+      };
+    }
+    {
+      name = "tslib___tslib_1.13.0.tgz";
+      path = fetchurl {
+        name = "tslib___tslib_1.13.0.tgz";
+        url  = "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz";
+        sha1 = "c881e13cc7015894ed914862d276436fa9a47043";
+      };
+    }
+    {
+      name = "type_check___type_check_0.3.2.tgz";
+      path = fetchurl {
+        name = "type_check___type_check_0.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz";
+        sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
+      };
+    }
+    {
+      name = "typedarray___typedarray_0.0.6.tgz";
+      path = fetchurl {
+        name = "typedarray___typedarray_0.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz";
+        sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777";
+      };
+    }
+    {
+      name = "typescript_eslint_parser___typescript_eslint_parser_16.0.1.tgz";
+      path = fetchurl {
+        name = "typescript_eslint_parser___typescript_eslint_parser_16.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-16.0.1.tgz";
+        sha1 = "b40681c7043b222b9772748b700a000b241c031b";
+      };
+    }
+    {
+      name = "typescript___typescript_2.9.2.tgz";
+      path = fetchurl {
+        name = "typescript___typescript_2.9.2.tgz";
+        url  = "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz";
+        sha1 = "1cbf61d05d6b96269244eb6a3bce4bd914e0f00c";
+      };
+    }
+    {
+      name = "union_value___union_value_1.0.1.tgz";
+      path = fetchurl {
+        name = "union_value___union_value_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz";
+        sha1 = "0b6fe7b835aecda61c6ea4d4f02c14221e109847";
+      };
+    }
+    {
+      name = "unset_value___unset_value_1.0.0.tgz";
+      path = fetchurl {
+        name = "unset_value___unset_value_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz";
+        sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559";
+      };
+    }
+    {
+      name = "uri_js___uri_js_4.2.2.tgz";
+      path = fetchurl {
+        name = "uri_js___uri_js_4.2.2.tgz";
+        url  = "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz";
+        sha1 = "94c540e1ff772956e2299507c010aea6c8838eb0";
+      };
+    }
+    {
+      name = "urix___urix_0.1.0.tgz";
+      path = fetchurl {
+        name = "urix___urix_0.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz";
+        sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72";
+      };
+    }
+    {
+      name = "use___use_3.1.1.tgz";
+      path = fetchurl {
+        name = "use___use_3.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz";
+        sha1 = "d50c8cac79a19fbc20f2911f56eb973f4e10070f";
+      };
+    }
+    {
+      name = "util_deprecate___util_deprecate_1.0.2.tgz";
+      path = fetchurl {
+        name = "util_deprecate___util_deprecate_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz";
+        sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
+      };
+    }
+    {
+      name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz";
+      path = fetchurl {
+        name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz";
+        sha1 = "fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a";
+      };
+    }
+    {
+      name = "vue_eslint_parser___vue_eslint_parser_2.0.3.tgz";
+      path = fetchurl {
+        name = "vue_eslint_parser___vue_eslint_parser_2.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz";
+        sha1 = "c268c96c6d94cfe3d938a5f7593959b0ca3360d1";
+      };
+    }
+    {
+      name = "which_module___which_module_2.0.0.tgz";
+      path = fetchurl {
+        name = "which_module___which_module_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz";
+        sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a";
+      };
+    }
+    {
+      name = "which___which_1.3.1.tgz";
+      path = fetchurl {
+        name = "which___which_1.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz";
+        sha1 = "a45043d54f5805316da8d62f9f50918d3da70b0a";
+      };
+    }
+    {
+      name = "word_wrap___word_wrap_1.2.3.tgz";
+      path = fetchurl {
+        name = "word_wrap___word_wrap_1.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz";
+        sha1 = "610636f6b1f703891bd34771ccb17fb93b47079c";
+      };
+    }
+    {
+      name = "wrap_ansi___wrap_ansi_2.1.0.tgz";
+      path = fetchurl {
+        name = "wrap_ansi___wrap_ansi_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz";
+        sha1 = "d8fc3d284dd05794fe84973caecdd1cf824fdd85";
+      };
+    }
+    {
+      name = "wrap_ansi___wrap_ansi_3.0.1.tgz";
+      path = fetchurl {
+        name = "wrap_ansi___wrap_ansi_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz";
+        sha1 = "288a04d87eda5c286e060dfe8f135ce8d007f8ba";
+      };
+    }
+    {
+      name = "wrappy___wrappy_1.0.2.tgz";
+      path = fetchurl {
+        name = "wrappy___wrappy_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz";
+        sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
+      };
+    }
+    {
+      name = "write___write_1.0.3.tgz";
+      path = fetchurl {
+        name = "write___write_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz";
+        sha1 = "0800e14523b923a387e415123c865616aae0f5c3";
+      };
+    }
+    {
+      name = "write___write_0.2.1.tgz";
+      path = fetchurl {
+        name = "write___write_0.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz";
+        sha1 = "5fc03828e264cea3fe91455476f7a3c566cb0757";
+      };
+    }
+    {
+      name = "xregexp___xregexp_4.3.0.tgz";
+      path = fetchurl {
+        name = "xregexp___xregexp_4.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz";
+        sha1 = "7e92e73d9174a99a59743f67a4ce879a04b5ae50";
+      };
+    }
+    {
+      name = "y18n___y18n_3.2.1.tgz";
+      path = fetchurl {
+        name = "y18n___y18n_3.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz";
+        sha1 = "6d15fba884c08679c0d77e88e7759e811e07fa41";
+      };
+    }
+    {
+      name = "yallist___yallist_2.1.2.tgz";
+      path = fetchurl {
+        name = "yallist___yallist_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz";
+        sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52";
+      };
+    }
+    {
+      name = "yargs_parser___yargs_parser_8.1.0.tgz";
+      path = fetchurl {
+        name = "yargs_parser___yargs_parser_8.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz";
+        sha1 = "f1376a33b6629a5d063782944da732631e966950";
+      };
+    }
+    {
+      name = "yargs___yargs_10.0.3.tgz";
+      path = fetchurl {
+        name = "yargs___yargs_10.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz";
+        sha1 = "6542debd9080ad517ec5048fb454efe9e4d4aaae";
+      };
+    }
+    {
+      name = "yup___yup_0.27.0.tgz";
+      path = fetchurl {
+        name = "yup___yup_0.27.0.tgz";
+        url  = "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz";
+        sha1 = "f8cb198c8e7dd2124beddc2457571329096b06e7";
+      };
+    }
+  ];
+}
diff --git a/nixpkgs/pkgs/development/tools/yj/default.nix b/nixpkgs/pkgs/development/tools/yj/default.nix
new file mode 100644
index 000000000000..017434134ca1
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yj/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "yj";
+  version = "5.0.0";
+
+  src = fetchFromGitHub {
+    owner = "sclevine";
+    repo = "yj";
+    rev = "c4c13b7641389c76ea028b48091f851f3efb6376";
+    sha256 = "0bnb88wfm2vagh4yb1h9xhp3045ga0b6a77n3j2z5b4mvwshx5dr";
+  };
+
+  vendorSha256 = "0y0n9fsb85qlpf9slwsxzarmfi98asa4x04qp2r8pagl28l0i8wv";
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  meta = with lib; {
+    description = "Convert YAML <=> TOML <=> JSON <=> HCL";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Profpatsch ];
+    homepage = "https://github.com/sclevine/yj";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/yq-go/default.nix b/nixpkgs/pkgs/development/tools/yq-go/default.nix
new file mode 100644
index 000000000000..e8cd2a134fd4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yq-go/default.nix
@@ -0,0 +1,41 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, runCommand, yq-go }:
+
+buildGoModule rec {
+  pname = "yq-go";
+  version = "4.22.1";
+
+  src = fetchFromGitHub {
+    owner = "mikefarah";
+    repo = "yq";
+    rev = "v${version}";
+    sha256 = "sha256-+yVf9pSK2cH/d5fdaGSBrjce8vVqE9XMpZSI8s4xoJI=";
+  };
+
+  vendorSha256 = "sha256-F11FnDYJ59aKrdRXDPpKlhX52yQXdaN1sblSkVI2j9w=";
+
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/yq shell-completion $shell > yq.$shell
+      installShellCompletion yq.$shell
+    done
+  '';
+
+  passthru.tests = {
+    simple = runCommand "${pname}-test" {} ''
+      echo "test: 1" | ${yq-go}/bin/yq eval -j > $out
+      [ "$(cat $out | tr -d $'\n ')" = '{"test":1}' ]
+    '';
+  };
+
+  meta = with lib; {
+    description = "Portable command-line YAML processor";
+    homepage = "https://mikefarah.gitbook.io/yq/";
+    license = [ licenses.mit ];
+    maintainers = [ maintainers.lewo ];
+    mainProgram = "yq";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/ytt/default.nix b/nixpkgs/pkgs/development/tools/ytt/default.nix
new file mode 100644
index 000000000000..7f8498a3523e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/ytt/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+buildGoModule rec {
+  pname = "ytt";
+  version = "0.40.1";
+
+  src = fetchFromGitHub {
+    owner = "vmware-tanzu";
+    repo = "carvel-ytt";
+    rev = "v${version}";
+    sha256 = "sha256-DtzdgEHgxoZRSvylq2vLzU1PAk1ETBDpBWFHcIW95r4=";
+  };
+
+  vendorSha256 = null;
+
+  subPackages = [ "cmd/ytt" ];
+
+  meta = with lib; {
+    description = "YAML templating tool that allows configuration of complex software via reusable templates with user-provided values";
+    homepage = "https://get-ytt.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ brodes ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/yuicompressor/default.nix b/nixpkgs/pkgs/development/tools/yuicompressor/default.nix
new file mode 100644
index 000000000000..05c1b62477b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/yuicompressor/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "yuicompressor";
+  version = "2.4.8";
+
+  src = fetchurl {
+    url = "https://github.com/yui/yuicompressor/releases/download/v${version}/${pname}-${version}.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 lib; {
+    description = "A JavaScript and CSS minifier";
+    homepage = "http://yui.github.io/yuicompressor/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jwiegley ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/zls/default.nix b/nixpkgs/pkgs/development/tools/zls/default.nix
new file mode 100644
index 000000000000..0fbe7bc31140
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/zls/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, fetchFromGitHub, zig }:
+
+stdenv.mkDerivation rec {
+  pname = "zls";
+  version = "unstable-2021-06-06";
+
+  src = fetchFromGitHub {
+    owner = "zigtools";
+    repo = pname;
+    rev = "39d87188647bd8c8eed304ee18f2dd1df6942f60";
+    sha256 = "sha256-22N508sVkP1OLySAijhtTPzk2fGf+FVnX9LTYRbRpB4=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ zig ];
+
+  preBuild = ''
+    export HOME=$TMPDIR
+  '';
+
+  installPhase = ''
+    zig build -Drelease-safe -Dcpu=baseline --prefix $out install
+  '';
+
+  meta = with lib; {
+    description = "Zig LSP implementation + Zig Language Server";
+    changelog = "https://github.com/zigtools/zls/releases/tag/${version}";
+    homepage = "https://github.com/zigtools/zls";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fortuneteller2k ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/zprint/default.nix b/nixpkgs/pkgs/development/tools/zprint/default.nix
new file mode 100644
index 000000000000..f3f8bae1e8e9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/zprint/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGraalvmNativeImage, fetchurl  }:
+
+buildGraalvmNativeImage rec {
+  pname = "zprint";
+  version = "1.2.2";
+
+  src = fetchurl {
+    url = "https://github.com/kkinnear/${pname}/releases/download/${version}/${pname}-filter-${version}";
+    sha256 = "sha256-CaugPTfEGC0IFgYUSHcE3nsnrP5DSXS1becXChbPggQ=";
+  };
+
+  extraNativeImageBuildArgs = [
+    "--no-server"
+    "-H:EnableURLProtocols=https,http"
+    "-H:+ReportExceptionStackTraces"
+    "--report-unsupported-elements-at-runtime"
+    "--initialize-at-build-time"
+    "--no-fallback"
+  ];
+
+  meta = with lib; {
+    description = "Clojure/EDN source code formatter and pretty printer";
+    longDescription = ''
+      Library and command line tool providing a variety of pretty printing capabilities
+      for both Clojure code and Clojure/EDN structures. It can meet almost anyone's needs.
+      As such, it supports a number of major source code formatting approaches
+    '';
+    homepage = "https://github.com/kkinnear/zprint";
+    license = licenses.mit;
+    maintainers = with maintainers; [ stelcodes ];
+  };
+}